Сегодня столкнулся с такой проблемой: играл против Лича, нанёс ему 16 урона, у него было 12, думал вынес его, а в сводке показывает, что ничья, причём против другого игрока было точно также, хотя, когда нанёс ему уже 9 урона, то засчитало ущерб по его лицу. Оттого вот какой вопрос: есть ли читы в игре или у меня просто галюны, потому что выиграл у него раунд, а показывает, что нет. Скриншот сделал только сводки, так как, после нанесения ему 9 урона, в следующий раз проиграл ему раунд. Встречал ли кто-то такую же проблему или может это на серваках баг какой-то?
Это распространённая проблема. С читами никак не связано - просто внутриигровой баг.
Как и почему он появляется я не знаю.
Вроде скоро обещали исправить.
это баг. в редких случаях происходит рассинхронизация и игроку показывают совсем не те размены, которые происходят на сервере, поэтому вам показалось, что вы победили, но для сервера это была ничья.
Странный баг вообще, по идее ж клиент ХСа в данном случае выступает просто как навороченный видеоплеер, а все просчёты происходят на сервере, а там вряд ли 20 разных исходов генерируется, с чем может быть рассинхрон?
А разве там не так работает, что просчитывается заранее какой-то результат битвы а игроки просто смотрят “повтор”, но уже с анимациями?
мне кажется, рассылать каждую атаку дорого, дешевле выслать сид рандома, который клиент будет сам использовать для просчёта всех рандомных событий. но, очевидно, иногда что-то идёт не так.
но я не копался и наверняка ничего утверждать не буду. факт, что два игрока, которые друг с другом сражаются, могут видеть разные картинки. раньше это происходило чаще, видимо большую часть проблемных ситуаций пофиксили, но что-то ещё осталось.
Вряд ли там каждая атака, скорее всего просто присылают готовый набор команд, которые клиент превращает в анимации. Да даже и сид рандома тоже должен работать, на то он и сид, чтобы быть одинаковым
У меня недавно была ситуация которую никак не списать на рассинхрон.
Играл на Короле-Личе, взял на первый ход Михуренка и повесил на него перерождение. У противника оказался тоже Михуренок, но естественно без перерождения. Логично что после разменов один с хрипа остался на моей стороне и я увидел анимацию нанесения противнику двух единиц урона.
Но посмотрев в лог увидел, что показало у противника полное здоровье и урон в ноль как будто размены происходили без перерождения.
Частый баг, уже больше года как исправляют.
Понятно что из-за разсинхронизации клиент-сервера, НО в таверне что купил, то и осталось, вот как так? Бой и результаты - разные, а в режиме таверны всегда все ок?
Учитывая сказанное здесь могу предположить следующую картину:
-
На самом деле расчёт происходит на стороне пользователя, со стороны сервера только пересылка “ключа рандома”, юнитов противника и проверка результатов. Это кстати довольно распространённая система в мобильных играх т.к. уменьшает и требования к мощности серверов, и к стабильности/силе интернет соединения.
-
Соответственно вы просто получаете ключ в начале игры, а во время раунда состав противника, рассчитываете всё на своей машине и отправляете результат на сервер.
-
Сервер сверяет результат и в случае совпадения просто принимает его.
Что происходит в случае не совпадения результатов?
- По какому-то признаку сервер выбирает один из результатов и принимает его. Второй отбрасывается. Признаком может быть как простое подбрасывание монетки, так и что-то более сложное. Например мне известно про использование такой системы как “рейтинг доверия” в другой игре. Принимается результат от игрока с наибольшим рейтингом, но понижается на время он у двоих т.е. если вы подделываете результат, то через пару попыток ваш рейтинг опускается на дно и сервер перестаёт принимать ваш результат.
То есть все такие случае - читы?
- Не обязательно. Возможно такой баг вызван как проблемами со стороны пользователя (например с памятью устройства/ интернет соединением), так и со стороны близов (проблемы на серверах) или вообще с самим алгоритмом (например когда 2 результата соответствуют одному ключу).
Вы описали возможность использования читов/стронних программ для подмены пакетов. Чем породили в неокрепших умах подкрутчиков новые теории “заговора”.
Хотя интересное предположение: “Сервер отправляет двум игрокам одинаковые пакеты последовательности ударов и срабатывания эффектов”, НО почему тогда ОДИНАКОВЫЕ пакеты срабатывают по разному?
Сервер не отправляет вам удары. Он скидывает ключ, например 1378 и например состав противника в виде кода 167498. У ваш состав например 34569. И зная составы + ключ можно высчитать какой-то результат. Но вычисления происходят уже с вашей стороны.
Разные пакеты могут дать одинаковый результат из-за коллизий. Самый простой пример: остаток от деления числа 7 на 5 - 2, но этот же остаток даст и деление числа 12 на 5. И 17. Разумеется наверняка используется более сложный ключ, чем я вам привел, но нет никаких гарантий, что в нём не возможно что-то аналогичное.
Всего по 7 существ, у каждого есть GUID (ID), я бы отправлял пакет с такими данными:
- кто первый бьет, основываясь на закупе
- какое ID бьет другое ID
- какое ID призывает/срабатывает на нужное (рандомное) ID.
А получал с клиента исход битвы в виде нанесенного повреждения.
НО ИМХО, это лишь догадки.
Я предполагаю, что вместо всего этого скидывается только условный ключ, который учитывается во всех формулах т.е. пакеты выглядит:
- существа противника
- Ключ
И уже на стороне игрока определяется “вот у меня существо с ID 101, поделить на ключ 25, остаток 1 = атакуем второе существо”. Всё таки скидывать весь порядок ударов значит, что расчёты производятся полностью на стороне сервера и тогда пользователь действительно просто смотрит кинцо.
Не думаю что близзы пойдут на что-то другое, иначе это будет охеренная такая уязвимость…
Ну мы как бы и видим эту уязвимость xD Тут стоит понимать, что это бизнес и тут стоит учитывать риски/прибыль(расходы). Грубо говоря раз в 10000 игр происходит такой баг, но при этом в ХС может играть на 10000 людей больше из-за меньших требований к интернету.
При этом создать стабильные читы не выйдет из-за упомянутого “рейтинга доверия”.
так там рассчёты элементарные. дектреккер делает 10000 рассчётов на рандомных ключах за секунду, чтобы определить вероятности победы и поражения. я думаю, серверу проще самому посчитать, чем доверять это клиентам. просто рассылать результаты и потом их парсить лень.
Сервер делает несколько боёв и выдаёт нужный на основе какого-нибудь показателя. Кто больше вдонатил, у кого винстрик, кто нахайролил как скот, у кого батлпас
Вы забыли учесть фазы луны, день недели, сумму координат на глобусе в точках сидения игроков, скорость ветра на Камчатке, стоимость барелля нефти в валюте Камбоджи, время в Сиднее, температуру воздуха на самой высокой горе в Перу, массу колибри в унциях и ещё некоторые не столь значительные вещи.
у тебя все показатели статичные, придумай другое что-то