Skip to content
This repository has been archived by the owner on Feb 26, 2021. It is now read-only.
/ arda-bot Public archive

Автоматическая прокачка персонажа в Arda MUD

License

Notifications You must be signed in to change notification settings

jushevch/arda-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ArdaBot

Автоматическая прокачка персонажа в игре Arda MUD.

Использование

Запустить бот. Он сам подключается к серверу Арды и ожидает локального подключения. Подключиться к боту по localhost, порт 4000 с помощью любого мад-клиента, например, zMUD или JMC.

По умолчанию бот на "нейтралке" - вхолостую гоняет данные от клиента на сервер и обратно. Можно просто играть, как будто клиент напрямую подключен к серверу. Для перехода в автоматический режим следует набрать команду **бот и приписать название зоны, которую надо пройти. Принудительное отключение автоматики - **бот без аргументов.

Учитывая характер и особенности игры, нужно помнить о следующем.

Маршруты к зонам прописаны от Брыля и Ордена Единства. Их нужно исправить для отправления из других точек Арды.

Состояние персонажа (жажда, голод, усталость и т.п.) - на ответственности игрока, бот эти вещи не отслеживает. То же самое касается освещения и слепоты. Предполагается, что игрок позаботился о том, чтобы персонаж видел окружающую обстановку, от этого зависит автоматика. Вооружение персонажа тоже на совести игрока.

При здоровье персонажа ниже 1/3 бот сам отключает автоматический режим и возвращает управление игроку.

Принцип работы

Генеральный цикл организован с помощью функции select(), которая проверяет состояние сокетов. Если данных нет, сервер "засыпает", чтобы не гонять процессор.

Автоматическая работа организована с помощью стека задач. Пока в стеке есть задачи, бот их выполняет, и в ходе выполнения может добавлять в стек дополнительные. Функции задач возвращают значения true (задача выполнена) и false (задача не выполнена). Пока задача не выполнена, она остается в стеке.

Основные задачи - goto и explore. Первая - переход персонажа от стартовой точки к зоне, вторая - проход зоны.

task_goto()

Посылает серверу маршрут к заданной зоне и проверяет наличие контрольного сообщения. Пока такого сообщения нет, персонаж в пути. Как только появляется сообщение, персонаж пришел, в стек добавляется соответствущая task_explore().

task_explore()

Для каждой зоны есть перечень мобов mobData и маршрут routeData. Иногда в зоне есть опасные места, в которые можно идти только на определенных уровнях. Тогда к маршруту прилагается вилка forkData.

Бот смотрит, в какой комнате находится персонаж, и в каком направлении нужно двигаться из этой комнаты.

Когда на пути попадаются мобы, бот оценивает, готов ли персонаж с ними сражаться. Если да, то нападает. Некоторые мобы агрессивные, и нападут сами.

Если персонаж может кастовать заклинания, он это делает, пока хватает маны.

Возможности

Бот довольно сырой, но в текущей минимальной конфигурации работает почти безупречно. Сложности возникают на высоких и опасных зонах, там автоматика не справляется, нужна своевременная адекватная реакция на непредсказуемые события. Впрочем, проходить такие зоны ботом даже неинтересно. Он подходит для простых и рутинных зон, которые проходятся ради банальной прокачки и лута.

При желании можно организовать полностью автономную работу, чтобы бот давал персонажу возможность выспаться, поесть и попить, и проходил подходящие по уровню зоны последовательно без остановки. Но практика показывает, что это не очень удобно.

Из технических удобств, которые можно было бы прикрутить, - внешние данные маршрутов, зон, заклинаний и оружия. Пока это все зашито прямо в коде, и чтобы что-то добавить или поменять, приходится все перекомплировать.

В целом это неплохая основа, которую можно развивать в сложный механизм. Жаль только, что Арда умирает.

About

Автоматическая прокачка персонажа в Arda MUD

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages