Игровой бот для MUD на баше

Как я упоминал в одном из своих постов, в свое время я убил кучу времени играя в текстовую MMORPG.

На сегодняшний день времени на игры нет совсем. Вот прям совсем совсем, однако с ребятами с игры я нет-нет общаюсь.

Но это все лирика. Теперь к сути.

А суть в том, что сидел я на работе. Таски сделаны, делать нечего, сижу учусь, слушаю курсы, читаю документацию. В этот момент возникает ощущение, что я чем-то не тем занимаюсь.

В такие моменты надо себя чем-нибудь занять. Чем-нибудь, чем обычно не занимаешься – отвлечься в общем.

И решил я покодить.

А что кодить то?

Самое сложное – придумать задачу. Ведь, в ситуации, когда нет заказчика – надо его найти или стать самому себе заказчиком. И вот сидел я думу думал и вспомнил, что на неделе ко мне в скайп стучался один мой бывший соклановец с просьбой повесить бота на основе клиента игры под винду на моем VPS.

В тот раз я ему отказал, VPS у меня откровенно слабенький, ну что еще за 1 доллар возьмешь то. А тут вот вспомнил и подумал, а почему бы не залепить бота без клиента, да еще под линух, чтобы можно было на амазоне на год бесплатно повесить и всем стало хорошо.

Сказано – сделано. Задача придумана.

На чем кодить?

Самое простое – кодить на том, что ты знаешь. В данном случае на Bash.

Потом можно уже будет перекодить на том, чего пока не знаешь. Вдруг я начну учить Python или Go, вот и будет готовая задачка.

Как кодить?

Вторая часть решения любой задачи – это ее разбор и расклад.

По сути игра – клиент-серверное приложение. Сервер есть, нужен клиент. По сути бот сам по себе и будет клиентом.

Хорошо. Идем дальше.

Протокол. Игра шлет данные плейн-текстом, следовательно нам надо читать поток и на основе паттернов писать в поток.

Супер. С этим определились. Теперь с вариантами.

Читать и писать в поток можно по разному. Например, можно использовать пайпы или со-процессы. Выбрал второй вариант.

Устанавливать tcp соединение можно тоже по разному – через netcat или через /dev/tcp. А тут решил использовать первый 🙂 для разнообразия

Отладка

Это страшное слово отладка.

Везде где можно лепим printf, лишним не будет. Когда не нужно – убираем.

По итогу – 10 итераций.

Костыли

Куда же без них родимых. Суть в том, что в строке передаваемого паттерна есть оконечник. Выглядит он так ‘.

Ичсх, мне надо было ответить обратно без него, хз почему ${parameter#word} не хотел урезаться, хоть ты убей. Возможно просто руки кривые.

Пришлось заюзать дополнительную переменную (это не есть хорошо, зато работает)

Итог

Код тут – https://github.com/nickpoida/newzerkalo_mud_bot

Чсх, пока писал пост – нашел что можно поправить в коде 🙂

Чсх 2, пост писал примерно столько же времени сколько и бота.

Leave a Reply