Автоматическая прокачка персонажа в игре Arda MUD.
Запустить бот. Он сам подключается к серверу Арды и ожидает локального подключения. Подключиться к боту по localhost
, порт 4000
с помощью любого мад-клиента, например, zMUD или JMC.
По умолчанию бот на "нейтралке" - вхолостую гоняет данные от клиента на сервер и обратно. Можно просто играть, как будто клиент напрямую подключен к серверу. Для перехода в автоматический режим следует набрать команду **бот
и приписать название зоны, которую надо пройти. Принудительное отключение автоматики - **бот
без аргументов.
Учитывая характер и особенности игры, нужно помнить о следующем.
Маршруты к зонам прописаны от Брыля и Ордена Единства. Их нужно исправить для отправления из других точек Арды.
Состояние персонажа (жажда, голод, усталость и т.п.) - на ответственности игрока, бот эти вещи не отслеживает. То же самое касается освещения и слепоты. Предполагается, что игрок позаботился о том, чтобы персонаж видел окружающую обстановку, от этого зависит автоматика. Вооружение персонажа тоже на совести игрока.
При здоровье персонажа ниже 1/3 бот сам отключает автоматический режим и возвращает управление игроку.
Генеральный цикл организован с помощью функции select()
, которая проверяет состояние сокетов. Если данных нет, сервер "засыпает", чтобы не гонять процессор.
Автоматическая работа организована с помощью стека задач. Пока в стеке есть задачи, бот их выполняет, и в ходе выполнения может добавлять в стек дополнительные. Функции задач возвращают значения true
(задача выполнена) и false
(задача не выполнена). Пока задача не выполнена, она остается в стеке.
Основные задачи - goto
и explore
. Первая - переход персонажа от стартовой точки к зоне, вторая - проход зоны.
Посылает серверу маршрут к заданной зоне и проверяет наличие контрольного сообщения. Пока такого сообщения нет, персонаж в пути. Как только появляется сообщение, персонаж пришел, в стек добавляется соответствущая task_explore()
.
Для каждой зоны есть перечень мобов mobData
и маршрут routeData
. Иногда в зоне есть опасные места, в которые можно идти только на определенных уровнях. Тогда к маршруту прилагается вилка forkData
.
Бот смотрит, в какой комнате находится персонаж, и в каком направлении нужно двигаться из этой комнаты.
Когда на пути попадаются мобы, бот оценивает, готов ли персонаж с ними сражаться. Если да, то нападает. Некоторые мобы агрессивные, и нападут сами.
Если персонаж может кастовать заклинания, он это делает, пока хватает маны.
Бот довольно сырой, но в текущей минимальной конфигурации работает почти безупречно. Сложности возникают на высоких и опасных зонах, там автоматика не справляется, нужна своевременная адекватная реакция на непредсказуемые события. Впрочем, проходить такие зоны ботом даже неинтересно. Он подходит для простых и рутинных зон, которые проходятся ради банальной прокачки и лута.
При желании можно организовать полностью автономную работу, чтобы бот давал персонажу возможность выспаться, поесть и попить, и проходил подходящие по уровню зоны последовательно без остановки. Но практика показывает, что это не очень удобно.
Из технических удобств, которые можно было бы прикрутить, - внешние данные маршрутов, зон, заклинаний и оружия. Пока это все зашито прямо в коде, и чтобы что-то добавить или поменять, приходится все перекомплировать.
В целом это неплохая основа, которую можно развивать в сложный механизм. Жаль только, что Арда умирает.