VI. BODY 2
А сейчас я хотел бы опять перейти к неприступным играм на mail.ru, о которых в дальнейшем будет сказано ещё очень много и рассказать о назначении плагина
FlashFireBug, предназначенного для AS3, который мы так же будем часто использовать.
Игра «Покер на костях».
Покер на костях — азартная игра в кости. В неё могут играть от двух человек и более, оптимальное число игроков*— четыре. Для игры используют 5 шестигранных кубиков с числовыми достоинствами от 1 до 6. Все кости выбрасываются одновременно. Цель игры*— набирать очки за выполнение определённых комбинаций.
В варианте приведённом на
mail.ru бросать кости можно три раза, при этом часть костей можно сохранять, и иметься возможность играть в блиц. Конечно в этой игре многое зависит от вероятности, однако игра есть игра, и нам нужно найти способ в неё выигрывать. Следуя теории вероятности, шанс сохранить к концу раунда 5 костей одного достоинства при
3 бросках значительно меньше чем при
>3 бросках, а если мы сможем манипулировать выпадающими значением(1-6), мы будем выигрывать всегда, за исключением случая возникновения аналогичного нечестного игрока, который возможно сможет набрать кол-во очков, превосходящее возможное, а именно число
(1 * 5) + (2 * 5) + (3 * 5) + (4 * 5) + (5 * 5) + (6 * 5) + (6 * 5) + (6 * 5) + (6 * 5) + 50 + 20 + 30 = 295
Перейдём от теории покера к самой игре.
Среднестатистическая партия в покер на костях.
Запускаем
FlashFireBug:

Спешу вас обрадовать - интерфейс у плагина довольно простой и удобный, в главном разделе окна вы можете путешествовать по дереву элементов интерфейсов и редактировать параметры отдельных элементов, хотя не так хорошо, как это реализовано в
De Monster Debugger. Иметься возможность выбора элемента щелчком мыши по нему. На сайте разработчика можно купить
Pro версию.
Как видим, мы можем изменять любой элемент интерфейса, в том числе и его параметры. Нас интересует элемент
SmallCup, кнопка при нажатии на которую происходит бросок оставленных костей, а точнее её
Bool свойство
visible, отвечающие за видимость.

А что если на сервере не проверяется кол-во бросков? Надо бы проверить, - бросаем кости 3 раза, вновь активируем кнопку и нажимаем на неё. И действительно, серверная часть не проверяет количество — теперь мы можем бросать кости неограниченное число раз, и выбрасывать любую нужную комбинацию. Теперь всегда можно набирать
295 очков, оставив далеко позади любого честного человека.

А что, если игрок играющий против нас, каким то способом наберёт
295очков, а вы — меньше, так как время на бросок ограничено, а нужные кости могут и не выпасть. А если он наберёт больше
295 очков? Невозможно, скажите вы? Для нас нет ничего невозможного
В большинстве игр работает очень простой способ проверки поступающих вам данных. Перед их получением вы отключаете сетевое соединение, и пытаетесь их получить. Если они пришли, значит они формируются на вашей стороне, или изначально там хранятся. Пробуем... Перед броском костей выполняем:
Код:
sudo ifconfig eth0 down
Бросаем... Значения костей выпадают(Как и при повторном броске), - значит нам нужно всего лишь их подменить, а заодно проверить возможность хранения кости числа больше 6.
В файле
dice-r1.swf, найденном через
Charles храниться любезно предоставленный разработчиками класс
dice и
package diceClasses где скорее всего находиться основная часть кода работы с костями, а именно:
Функция проверки на комбинацию:
[PHP]
[COLOR="#000000"]
public static functiongetAvailableCombos(arg1:Array,arg2:Array):Array
{
varloc2:*;
loc2=null;
varloc3:*;
loc3=0;
varloc4:*;
loc4=false;
varloc5:*;
loc5=null;
varloc6:*;
loc6=0;
varloc1:*;
loc1= new Array(12);
diceClasses.rules.Rules.enNullArray(loc1);
loc3=0;
while (loc3=4)
{
loc4=true;
br eak;
}
++loc3;
}
loc1[6] =loc4?loc2.count* (loc3+1) +loc2.restSum:0;
}
if (arg2[7] == -1)
{
loc4=false;
loc3=0;
while (loc3[COLOR="#007700"]