Aqendo
Сервер-сайд всё делается
Igor
Если у тебя сервер всю физику считает и остальные приколы, то и читерить особо негде.
Igor
В любых других случаях читеров не избежать. Как читер тебе говорю)))
polioan
))
Aqendo
Aqendo
Впринципе можно настолько не заморачиваться, физику считать на клиенте, но контрольные пункты а-ля скорость и т.п. на сервере
Igor
Но я читы в основном на сингловые игры пишу, совесть не позволяет людям игру портить, а вот над ботами поиздеваться очень даже весело
Aqendo
Aqendo
Да и в игры не играю
Aqendo
Хехехе
Aqendo
Я помню писал мод меню на динозаврика в хроме
Aqendo
Тип туда инжектится жс код и появляется менюшка
Igor
Ну я стендалон игры в основном ломаю, там с ассемблером уже совокупляться приходится
Igor
И с деторами
polioan
runner.gameOver = () => ()
Aqendo
Aqendo
Aqendo
А я прям с кнопощьками
Igor
Ida?
x64dbg + cheat engine, этого в основном хватает. А псевдокод, который ида генерит только путает, так что без неё обхожусь.
Aqendo
https://youtu.be/YJwD8ddyg9Y
Даже канал делал
Aqendo
Не сказать бы что я шарил много, но приемлемо было для такого
usernameak
usernameak
особенно если руками проставить типы
usernameak
вот когда там LTO, то да, боль и страдания
Igor
А переменные я замахивался обзывать уже после первых 4-5 десятков
usernameak
без поллитра мне не хватает терпения даже для него
usernameak
а для дизасма надо сразу три литра
Igor
Хехехе
Igor
Больше всего напрягают всякие там рокстары со своими DRM, которые и в памяти порыться не дают спокойно и процессор грузят
Igor
А учитывая то, что их рано или поздно обходят, делая их совершенно бесполезными, они и вредить начинают в таком случае
Igor
К той же Red Dead Redemption 2 стоит дебаггер любой подключить, как она тут же эксепшн бросает
polioan
polioan
была такая идея
polioan
ну я вот играл в змейку
Snusmumriken
Отключай по метрикам подозрительности.
Snusmumriken
Ещё хорошо работает fail2ban
polioan
почему там нет сотни змеек со странным поведением?
polioan
вроде бы все чистенько и ожидаемо
Snusmumriken
Потому что всем насрать на змейку
Snusmumriken
Базовая штука чтобы исключить читеров — считать всё на сервере (клиент только рисует) и не передавать лишнего.
Но аимбот всё равно можно написать, пусть и не настолько абсолютный.
Snusmumriken
(чтобы исключить мусорные запросы и читеров)
А мусор.. Ты когда-нибудь открывал сервер на белом айпишнике?
Ты в курсе что весь ipv4-диапазон всех портов непрерывно перерывается случайными людьми
(и роботами)) из интернета и они начинают тебе срать во все дыры? Что поток мусора есть и будет всегда, просто по факту что ты открыл порт?
polioan
Snusmumriken
Поэтому мусор просто отсеивается. Просто берёшь и закрываешь соединение которое при подключении не сделало правильного приветствия. "Ку" три раза не сказало.
Hello, World! 🎄
Если сделать передвижение на стороне клиента, то он сможет отправить запрос, что куда-то передвинулся на большое растояние.
UtoECat
UtoECat
Hello, World! 🎄
Igor
А представь себе еслиб какая-нибудь csgo передавала не текущий облегченный стейт игрока, а именно его действия. Сервер бы тупо оказался заспамлен и с трудом мог бы обработать одного игрока. Такая фигня подходит только для нерилтайм игр, ну или тех, в которых очень ограничен набор действий.
Igor
Лучше на сервере все обрабатывать, например игрок посылает на сервер команду left и сервер обрабатывает движение.
Igor
Если сделать передвижение на стороне клиента, то он сможет отправить запрос, что куда-то передвинулся на большое растояние.
Snusmumriken
Igor
Я помню делал игру, ну чисто для себя, с другом. Кубик с физикой love2d платформит с помощью верёвки по какой-нибудь там карте. До ума мы её, естественно, так и не довели, но античи какой-никакой я написать успел. Я сделал так, чтобы физика обрабатывалась и сервером и клиентом одновременно, только серверная физика тикала куда реже (раз 16 за секунду, не помню уже) и выступала в виде данных для сверки. Если данные, пришедшие от клиента сильно отличались, то пакет от клиента игнорировался и ему отсылался в обратку телепорт-пакет на валидную по мнению сервера позицию. Если такое происходило много раз, то по итогу игрока кикало.
Igor
Snusmumriken
Да, да, это ерунда
Snusmumriken
Для сервера
Snusmumriken
1500+ udp сообщений с действиями в секунду от всех игроков — это ерунда для сервера.
Igor
А так любая source engine игра передаёт именно текущую позицию игрока и его оружие выбранное, угол поворота и т.д.
Snusmumriken
Можно резко порезать количество сообщений если отправлять событие нажатия и событие отжатия кнопки, в нескольких экземплярах чтобы дошло до сервера
Igor
Igor
Я прям давно уже в код этого движка не лез, так шо мне сложно говорить наверняка.
Snusmumriken
Если на сервере расхождение — клиент перезаписывает данными с сервера и лерпает до них.
Igor
Ага
Snusmumriken
Но в целом, как делается любая быстрая игра:
Клиент отправляет сообщения действий с метками времени.
Сервер держит несколько временнЫх срезов состояний игрового мира. Пришло сообщение от игрока? Откатываем на срез до этого действия и обновляем все объекты.
Пришло новое сообщение? Откатываем до того же среза и выполняем все действия.
Это тоже можно сократить.
Snusmumriken
Но в результате получается что мы обрабатываем непрерывный процесс, можем делать реплеи и так далее.
Igor
В любом случае у FPS игр всегда очень сложный сетевой протокол, ибо им нужно балансить между скоростью и античитерством.
Snusmumriken
Чекни вот это:
https://habr.com/ru/post/302394/
Snusmumriken
Авторитарный сервер принципиально весьма прост. Это буквально проигрыватель пользовательских действий по меткам времени.
Snusmumriken
Клиенты же тут выступают такими же проигрывателями, но с визуализацией и с синхронизацией от сервера.
Igor
Igor
Когда всей этой темой увлекался еще, несколько лет назад
Snusmumriken
Просто тут появляется шикарная независимость и от фпс, и от флуда сообщениями, и от частоты обновлений и ещё от кучи всего.
Snusmumriken
И сервер такой копит сообщения, выполняет их и рассылает синк инфу.
Snusmumriken
Попутно ретранслируя чужие действия для скорости.
Igor
Ну под флудом я подразумевал не 1500 действий в секунду, а за тик и чуть побольше. Очевидно же, что это не выгодно нихрена.