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