PRAY
MCRaidBot
Razebator4000
Убийца школосерверов. Ночной кошмар ванилок. Уничтожитель построек на спавне. Пожиратель процессора и оперативы. Вычислительных ресурсов серверов OpenAI не хватит на то, чтобы понятуть эту прогу
Доступно на GitHub
Что это?
Согласно описанию на гитхабе: это демонстрация возможностей библиотеки MCProtocolLib и все в этом духе.
Но это все хуйня. На самом деле это гребаный софт для боттинга майнкрафт серверов.
Он создан для уничтожения донатных школосерверов и клонов #СП.
Вот основные фичи:
  1. Боты могут работать локально и через прокси
  2. У ботов прописана физика
  3. Боты могут взаимодействовать с миром (ломать блоки, строить, осмысленно передвигаться) согласно скрипту
  4. У ботов прописана стандартная физика майнкрафта
  5. Боты умеют ПВПшиться
  6. Крайне гибкие настройки
  7. Встроенный в ботов чит Nuker
  8. Убогий интерфейс (дада это именно фича. Если не понимаете почему - прочитайте историю создания ниже)
А вот список тех самых "крайне гибких" настроек для ботов:
  1. Автореконект
  2. Формат хранения мира для ботов (общий/персональный)
  3. Будут ли боты ждать сообщения от плагина о том что нужно зарегистрироваться
  4. Автоудаление бота, если он не может зайти на сервер с X попытки
  5. Визуализация построения пути при помощи партиклов
  6. Включение/выключение передвижения ботов
  7. Следование ботов за конктретным игроком/позицией
  8. ПВП с определенным игроком/против всех игроков/друг против друга
  9. Копать ли определенные блоки
  10. Спам заготовленными пастами
А еще сюда по приколу встроено серверное мини-ядро. Правда запускается оно только из ИДЕшки.
История создания
Мотивация для создания
Главным мотиватором послужила моя жажда власти.
Кормили ее нарезки разных стримеров, где они собирали стаю подписчиков и заходили на какой то крупный школосервер, чаттерсы всех пиздили, писали в чат хуйню и грубо говоря ложили довольно крупные проекты. Мне это показалось крайне угарным, но так как своей личной армии подсосов у меня быть не может, в ход пошли мои навыки ботоводства, оставшиеся от рейдов в дискорде.
Изначально я пользовался софтиной, под названием "Fuckbot", которая была популярна в 21 году, поэтому вылезла мне по первому запросу в поисковике. (Правда сейчас очень трудно будет найти ее без вирусни, только если у вас нет моего ССДшника). Но меня крайне бесили ее слабенькие настройки. Работала она только на версии 1.12.2, и все что там можно было поменять это пасты для спама и прокси.
Первый релиз для 1.12.2
Естественно, моих навыков в декомпиляции java программ тогда не хватало на то чтобы вскрыть весь код fuckbot'а, но я успешно смог узнать на чем все это дерьмо работало — MCProtocolLib. Вокруг возможностей этой либры и строился весь мой дальшейший код.
Так как это была моя первая прога на Java, об оптимизации, как гордый петухонист, я тогда не парился вообще. Нахуярил по 2 потока (сеть и тики) на каждого бота и сидел кайфовал. Первый залив кода на гитхаб датируется 7 октябрем 21 года. Тогда боты умели только заходить в мир, собирать данные о чанках, падать согласно самой топорной физике которую только можно придумать, регаться через 2 команды и чучуть спамить.
Скриншот самого сложного и крутого в галактике супералгоритма для обработки физики падения прилагается. (Ах да, для физики создавался третий поток))))
Апгрейдс
Ну тут и понесло меня. Тратил я на эту хуету примерно 80% жизни (остальные 20% это поесть/поспать/шарага). Видимо это и есть то, что в простонародье называют гиперфиксом.
Спустя 2 месяца душения эклипса, мои боты уже умели передвигаться, выстраивая путь алгоритмом A* и ломать доски.
А теперь к подкапотным минусам: принцип передвижения был по строго заданным цифрам, например если боту нужно было перейти на +1 блок по оси x, то он тупо в течении 5 игровых тиков прибавлял к своей позиции 0.2. Никаких расчетов инерции, плавного старта, да блять даже для прыжков позиции были строго прописаны.
А что насчет копания блоков? Нуу просто посылался пакет, что бот начал копать блок, а потом по заранее прописаному таймингу он завершал копание очередным пакетом. При этом анимации добычи и отправки пакетов прогресса небыло.
Естественно такая сырая версия особо в рейдах не учавствовала. И подходила разве что для игры на локалке.
А еще бонус: конченые имена коммитов на гитхабе. Наверно это база всех шизо-девов, которые первый раз в жизни увидели гит, ну или я один такой особенный. (Кто такой SnowFlake2006?)
Переход на 1.16.5
Думаю что популярность версии майнкрафта 1.16.5 в 21 году ни для кого не новость. Это и было причиной ее выбора. А еще тот факт что у нее довольно простой протокол, в целом схожий с 1.12.2 по базовому функционалу. Переход на новую версию много не занял.
За первые 5-7 дней после перехода была реализована система расчета коллизии для ботов. А через еще 10 дней боты умели различать некоторые блоки, их коллизии и время на разрущение с учетом инструметов в руке. Но работало это на костылях. Помимо этого, они уже умели работать с инвентарем, сундуками и верстаком.
Разработка шла семимильными шагами. Сам с себя прошлого досихпор ахуеваю. Через месяц программа начала скидывать с себя оковы строгих скриптованых взаимодействий. Из сурсов майна были спаршены точные коллизии всех блоков, их регистры и правильные тайминги добычи. Полевые испытания показали что боты и вправду относительно реалистично ведут себя в игре. Но зачастую их донимал античит, поскольку физика все еще была скриптованая.
Новые возможности
Тот факт что я смог зареверсить оригинальную майнкрафтовскую физику предал мне лютой мотивации. Пару свободных дней + ctrl c ctrl v = боты имитирующие точь в точь физику падения/ходьбы/плавания майнкрафта. Тут уже началась разработка режима ПВП.
Если обойтись без технических деталей, то в режиме ПВП боты умели:
  1. Кушать при низком голоде/здоровье
  2. Дефаться щитом, точно выверяя таймигни ударов
  3. Одевать броню, выбирая только самую крутую
  4. Пользоваться инструментами
Пожалуй умение пользоваться щитом стало киллер-фичей ботов, в обеих смыслах этого словосочетания. У игрока буквально небыло шансов пробить щит.
Тогда же я нагло спиздил у одного из конкурентов прокси-парсер, чтобы жизнь малиной не казалась.
Релиз 1
22 мая 22 года. Я попытался почистить код от всяких убогих временных решений, а так же допилить текущие режимы. Для добычи блоков был создан отдельный режим.
Помимо этого было создано GUI окно, через которое можно управлять текущим рейдом. К сожалению фоток гуи у меня не сохранилось, а качать и запускать эту версию мне лень, вот краткий бриф по его возможностям:
  1. Можно было выборочно отправлять сообщения от имени ботов
  2. Можно было присоединять/удалять по одному боту по нажатию кнопки
  3. Можно было динамически обновлять настройки ботов прямо во время рейда
  4. Можно было по одной кнопке парсить сервера с мониторинга и сразу же их рейдить
  5. Можно было заставлять ботов выполнять скрипт-алгоритм в духе "иди туда, добудь доски скрафти меч и отпизди какого нибудь игрока". Ну или делать эти действия по отдельности
  6. Можно было заставить всех ботов одновременно прыгнуть (хз зачем, просто по рофлу)
Еще тогда, при полевых испытаниях, люди путали ботов с реальными игроками изза реалистичности поведения.
Софт был рабочий, но абсолютно не юзабельный для широких масс. Никто не понимал как и что тут вообще устроено, в частности изза конченых кринжовых пояснений. Если хочешь полное представление о том насколько все было плохо, представь бдуто твою бабушку посадили за комп с открытой FL studio, в которой все кнопки переименовал чел с аутизмом и шизофренией. Вот примерно так ощущался экспириенс использования моей проги.
Снизу прикрепил фотки GUI из последних версий. Бонус: очередные ебанутые называния комитов:
Самописный сервер
23 августа 22 года. Листал я однажды исходники MCProtocolLib от скуки и наткнулся на раздел с серверными пакетами. И тут понеслась.
Я создал небольшое серверное ядро. Это все может прозвучать черезчур амбициозно, не дайте себя обмануть. Это ядро даже не умело динамически обновлять чанки для всех игроков, поэтому размер мира был ограничен, а чанки отправлялись все и сразу при входе игрока на сервер.
Еще там были несколько айтемов, создающих красивые узоры из парктиклов. А стержнем блейза можно было перемещать блоки как гравити ганом из халф лайв 2.
Еще я зачем то решил повторить систему банов как в сампе. Тоесть тебя не выкидывает из сервера сразу. Просто мир перестает обновляться для забаненого игрока, пока тот все еще может передвигаться в нем и рассматрвиать его. А при разбане тебя просто возвращает в нормальный мир из статичного. Даже не придется перезаходить.
А когда я решил показать свои наработки челам с ПКССМа, быстро нашлась уязвимость, ложащая сервер: если бесконечно выкидывать айтемы из креатива, они начинают нагружать тикрейт сервера. И до того как эти предметы успеют задеспавниться, их можно накидать целую кучу. После этого я понял что затея с ядром была не самой лучшей и забил на него, оставив его код в проге.
Релиз 2
Далее ничего интересного. Я просто фиксил баги котоыре мог в силу своих навыков. Во время какого то из фиксов досихпор неизестно где я допустил ошибку, изза которой во время рейда рандомно срабатывают звуки ошибки винды. Найти отвечающий за это фрагмент кода так и не удалось.
Перед последним обновлением я исправил имена большинства неадекватно названных переменных. После этого сделал ласт коммит и с тех пор данный проект это публичный архив.
Скрывать код я не стал, поскольку в нем всеравно никто не захочет разбираться. Настолько он ужасен. Ну а о каком качестве может идти речь когда код пишет пубертатный школьник с манией величия.
На последок
Каким бы ужасным не был код, я всеравно горжусь проделаной работой. Было потрачено 2 с лишним года и со вполне себе успешным результатом (по моим личным меркам), ведь свою мечту мне удалось исполнить. А по мимо этого, данный проект дал мне комплексные знания об устройстве игр в целом.
Прогу юзаю переодически досихпор и если разбираться в управлении, то рейды выходят очень даже эффектными.
Естественно с подобным говнокодингом уже покончено. Такой стиль написания кода остался вместе с одной из старых моих личностей, которая носила ник "Pizdec RP". И в отличие от него, я больше никогда не буду относиться с таким пренебрежением к тому что создаю.