MOCHET [7] 
23.07.2018 21:52
 1просмотров 9 0

ArcomageCompanion. Потеря одного хода в игре с ботами. Как узнать какой картой играли.



Начнём с того что во флеш я не лезу (Вообще я в флеш лезу. И не надо придумывать что там что-то сложно читать.). Нет не поймите не правильно - можно сделать мод и для флеша, но на JS всё это намного проще. К тому же причина номер 2 - что сейчас администрация переводит всё на html5. А значит особый смысл что-то делать с флешем отпадает.

Итак раз флеш без модов, то нужно использовать флеш админов. Как просто сделать прокси на JavaScript для tampermonkey, который бы перехватывал бы пакеты флеша и их модифицировал - я не знаю. Как перехватить сниффером пакеты я знаю. А писать какой то extension для бруазера или использовать дополнительно к JS-скрипту какой-то сниффер для браузера а ля tamperdata это тоже как-то не очень-то и элегантно. Extension можно, но мне не хочется. Нужно решение попроще.

А переписывать аркомаг на хтмл5 пока не состоит в моих планах.
Какуе-то работу за админов я точно за бесплатно не буду делать.
Пусть ищут дурачков в другом месте.
или "фанатов игры готовых на беззаговорочную помощь даром".
называйте как хотите.
за бриллианты это тоже как-то не серьёзно.
ну вы поняли меня :)

Итак

Проблема заключается в играх с ботом или когда противник слишком быстро играет. Нереально быстро.
Мой скрипт обновляет данные каждую секунду
Если перс или бот, или бот у перса :) играет очень очень быстро, то мой скрипт не видит часть ходов
Даже если обновлять инфу например каждую 1/10 секунды, то и то есть вероятность, что будут пропадать ходы.
Скрипт их не будет видеть
К тому же qrator может засчитать это за атаку и временно кикнуть из игры.

Пример:

Я играю в турнире против бота

1) JS: посылает запрос к серверу. Получает последнюю инфу о состоянии игры
2) Flash: жму на карту- флеш отправляет запрос к серверу. Получает последнюю инфу о состоянии игры, т.е. как сыграл я
3) Сервер: получает мою карту. бот за миллисекунды ходит картой "играем снова" и картой Х
4) JS: посылает запрос к серверу. Получает последнюю инфу о состоянии игры, но не успевает увидеть какой картой я сыграл
5) Flash: получает информацию о состоянии игры, т.е. как сыграл бот

Всё дело в каких-то десятых долях секунды, но из-за них теряются ходы в юзерскрипте.

Чтобы не делать какие-то трюки с флешем и писать какие-то extensions
можно сделать некий workaround и написать функцию, которая получит 2 состояния игры - до того как я сыграл картой и после
после этого эта функция просчитывает возможные варианты и фильтрует и выдаёт карту, которой сыграл игрок

(нужно только сохранять все состояния игры. каждый ход)

По сути смотрим на разницу между двумя состояниями игры.
И по этой разнице с помощью дедукции решаем какой картой играл человек
Какой-то комбинаторной сложности здесь нет
т.к. только один ход потеряли

Но конечно есть другая сложность.
Нужно учесть всякие карты, где  есть какие-то условия или условие не сразу ясное.

Во всех ли случаях бывает ли точный ответ - ещё нужно проверить.

исходим из того что потеряли только 1 ход.
чем больше ходов теряем, тем глубже комбинаторное дерево и начинаются всякие сложности, но это и не нужно.



Кстати если вдруг потеряется часть хода во время того как использовали кучу карт "играем снова" за раз, то тут сервер всё-таки даёт данные этой цепочки, пишется так:

t100-d20-t101-d1-t3

t100 = action=turn card, cardID=100 (играем снова)
d20 = action=drop card, cardID=20
...



Скрипт находится в состоянии разработки и пока нигде не доступен.

После того как будет более-менее готовая бета-версия скрипт будет сильно обфусцирован и встроены функции антидебаггинга. круто, да?



.

.

.

.

.

И тогда я его ВАМ НАВЕРНОЕ может и дам !

Возможность комментировать доступна после регистрации