Войти или зарегистрироваться

Помогите Оптимизировать систему анти иксрея

Абсик

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Abcik
Всем привет.
Задумался над идеей создания "идеального" anti x-ray плагина. Но как известно, идеальных античитов потому и не существует, что они отнимают слишком много ресурсов и часто их использование иррационально, тем не менее, быть может у кого-то будут светлые идеи по существенной оптимизации или изменению моего метода, пусть даже незначительно жертвуя качеством вычислений, или наоборот улучшая...?

И так, перейдём к сути метода и описанию его работы:

1. Скрываем для игрока все руды в зоне досягаемости.
(В окончательной версии предполагалась пакетная реализация детекта отправки чанков, но быстрее и проще было тестить на PlayerLoadChunkEvent) При отправке чанка игроку мы перебираем блоки в чанке и запоминаем локации всех скрытых руд и соответственно, пакетно заменяем эти блоки на камень.

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

2022-10-18_18.10.16.png

О проблемах:
1. Бывают ситуации, где 8 вершин скрыты за блоками, но блок все-равно должен быть виден.
2022-10-18_18.09.16.png
2. Оптимизация.
Данный метод при ~12 чанках прогрузки, на версии 1.19.2 занимает больше 5-ти секунд на просчёт для ОДНОГО игрока, что делает этот метод неюзабельным. Просчитывать приходилось более 200 000 руд, умножив на кол-во векторов, и затем на кол-во блоков между игроком и рудой становится понятно почему так долго. (Хотелось бы апдейт каждые 50мс, или хотя-бы каждые 250мс, для предотвращения ситуаций, что руда прогружается с запозданием прямо перед твоим лицом, или уже за твоей спиной.)

PS.
Естественно все вычисления проводятся в отдельном асинхронном потоке, но это не спасает ситуацию.
Также преимущество этого метода заключается в том, что он способен маскировать вообще любой блок, а не только руды. (Сундуки, печки и т.д)
Я знаю об существовании Orebfuscator, но мне не нравится метод его работы.

Интересно почитать ваши мысли по этому поводу. Спасибо за внимание!
 
У stonar96 есть похожий ресурс - RayTraceAntiXray. Он же, кстати, занимается поддержкой анти-хрея у Бумаги.
 
Для начала - я бы, если честно, не запаривался бы, и просто скрывал все руды при отсутствии света. Есть конечно пара моментов, вроде зелья ночного зрения, но это будет явно быстрее в плане обработки, и честнее по отношению к игрокам без динамичного освещения и fullbright(будь то чит, мод или просто сломанная настройка).


Возвращаясь к топику... Для начала, конечно, нужно не обрабатывать что-либо за полем зрения игрока. То бишь, если там у игрока что-то за спиной, нет смысла гонять лучи. Я бы предполагал, что fov игрока 120гр, и топал уже оттуда. Будет лучше иметь некоторый универсальный метод для других углов обзора, чтоб можно было подкорректировать

Далее - дальность. Ну за 12 чанков игрок вряд ли сможет отличить железную руду от камня без какого-нибудь приближения. В зависимости от расстояния можно пускать разное количество лучей, или в на каком-то расстоянии уже не пускать их вообще. На средней дистанции будет иметь смысл пускать лишь один луч.
Единственное, в расчет стоит взять телескопы - если выйдет сделать обработку поля зрения из первого пункта, можно просто использовать там разные значения.

Не стоит пускать лучи тогда, когда они не нужны. Игрок не может увидеть все 8 вершин разом - максимум 7, и это вычислить должно быть несложно. На втором скриншоте, не будь преграды, игрок мог бы видеть лишь 6 из 8, но тут уж придется об геометрию головой биться.

По поводу виденья блока - сложный вопрос. Можно пускать луч в псвдорандомном месте блока.
 
У stonar96 есть похожий ресурс - RayTraceAntiXray. Он же, кстати, занимается поддержкой анти-хрея у Бумаги.
О, интересно... Я так понимаю у него это работает в связке с paper engine-mode: 1, который берёт на себя около 75% всех руд, что в принципе само по себе уже облегчает работу плагину...
Но больше интересно как он производит просчёты, буду смотреть, спасибо.
 
О, интересно... Я так понимаю у него это работает в связке с paper engine-mode: 1, который берёт на себя около 75% всех руд, что в принципе само по себе уже облегчает работу плагину...
Но больше интересно как он производит просчёты, буду смотреть, спасибо.
Ну на большой онлайн это не поставить, прожорливый очень. Обычный антииксрей просто смотрит по массиву освещения блоков ничего не нагружая.
 
Назад
Верх