Коли потяг у даль загуркоче…

Я витяг старий код Віртустану за 2012-й рік. Хороший був рік, ще не було війни. Зібрав новітнім (поточним) компілятором, прийшлось внести пару правок. Але муд запускається і падає з помилкою переповнення буфера. А це був тожі робочий код. Але компілятор був тоді старий (довоєнний), і бібліотеки і версія операційної системи. Буду копирсатися.

А навіщо я його дістав? Бо там був поїзд на небеса. Реалізовано було у коді, бо я люблю програмувати. Реалізація дуже проста, я побачив щось таке у онлайновій іграшці Ragnarok Online, в яку дуже давно багато грав. Поїзд це три сполучені кімнати. Інколи на станції Земля створюється прохід у першу кімнату поїзда, це якбудто поїд прибув і відкрив двері. Потім прохід закривається. Поїзд їде. Потім вікривається прохід вже на Небесах. Гравці постійно отримують інформаційні сповіщення, поїзд прибуде через 2 хвилини, через хвилину, поїзд прибув, поїзд відправляється через 3 хвилини і так далі. До речі, аналогічно у Билінах зроблено Летючий корабель.

Потім при черговому обновлєнію і сліянію кода я цей кусок кода загубив. А ще потім колега Даріан напрограмував теж саме, але не на C, а за допомогою скриптів на мові DGScripts.

UPDATE: 31-Jan-2024. Причесаний код виложено на gitlab, до речі, переповнення буфера я знайшов і ісправив

https://gitlab.com/mud-museum/vmud-2012

Інтеграція з Telegram

На мої муд сервери заходить досить мало гравців, тому у минулому у мене була зроблена відправка інформаційних повідомлень “у муд зайшов гравець” на мою особисту електронну пошту, розміщену на Гмейл і яку я отримую як на ноутбук, так і на мобільний телефон, який завжди зі мною. Потім мені це надоїло, ці сповіщення постійно падали у спам і таке інше і я поштові сповіщення вимкнув.

А зараз я зробив по-іншому, я зробив собі сповіщення у телеграм. Інтеграція з телеграм є у муді Былины, але я не розібрався у їхньому коді і тому зробив дуже просто: я пишу у телеграм за допомогою telegram api, яке визивається за протоколом https за допомогою утиліти curl. Приклади можна подивитися, наприклад, у коді Віртустан муду.
Дивіться на файл tg.sh у каталозі lib і на функцію send_telegram у файлі interpreter.cpp.

Нагадую, что телеграм і вайбер можливо знаходяться під контролем російських спецслужб і використовувати ці мессенджери для конфіденційної переписки не треба.

Новости Virtustan MUD

Последнее время муд стал падать со странными сообщениями

crash here: *** buffer overflow detected ***: terminated

Я погуглил, пишут что это ошибка в модуле EPOLL, я решил его выключить. Залез в код, а он выключен, причем очень давно, когда я добавлял в код поддержку нескольких портов. Тогда надо включить, может ошибка пропадет – по-ламерски подумал я. Стал пытаться включить, не компилируется, из-за моих изменений по многопортовости. Возился, возился, бросил, подумал, что это знак перейти на свежий код.

И Виртустан перешел на свежую версию кода Былин. В результате все мои новые команды и модификации пропали, но они сохранены в старой версии кода, постепенно я их внесу.

Но зато я сделал патч до внесению протокола MSSP в свежий код Былин.
Патч вот.

Приложения.

1. Почему эти ошибки стали возникать только в последнее время? Я постоянно обновляю свой сервер, это общие правила безопасности, без этого нельзя. Но с обновлениями приходят не только новые фичи, но и новые баги. Или как другая версия, мир изменился (я чувствую это в земле, я чувствую это в воде) и появился новый тип интернет-атак с длинным запросом. А атаки в интернете постоянно развиватся, например последние дни я начал замечать в логах nginx запросы на файлы типа backup.sql (к мудам это не имеет никакого отношения, но подобных запросов раньше не было)

2. Что такое EPOLL. Работа с периферийными устройствами может быть по прерыванию или по запросу. Муды обычно работают по запросу (httpd и Майнкрафт тоже). Но есть несколько версий библиотек для этого. Первая, это старый классический poll/select, вторая EPOLL, а есть еще EPOLL2. Код Былин может унаследовал от своего отца Circle два способа – poll и EPOLL (см. в коде операторы #ifdef EPOLL). В Линуксе можно и так и так, а в cygwin и macOS компилируется тольков варианте без EPOLL.

3. Поддержка доступа к маду по нескольким портам в самом маде необязательна. Ее можно сделать снаружи мада, например, средствами iptable. Но пока Виртустан работает только на порту 3000 (хост мой стандарный, mud.kharkov.org)

Инструкция для билдеров

Коллега Дариан написал инструкцию для билдеров по командам онлайнового редактора OLC (on-line creating), встроенного в мад Былины:

https://www.bylins.su/builder/olc/

Такие же редакторы есть и в мадах Зеркало и Виртустан, основанных на коде Былин. Более того, похожие команды редактирования есть практически по всех мадах, построенных на базе кода Circle или его потомков, например в tbaMUD. Естественно, с некоторыми различиями, например в англоязычных мадах нет падежей.

Бег по граблям

Я люблю бегать по граблям, в частности, натыкаясь на какую-нибудь ошибку, порой исправляю ее и забываю, как именно я ее исправил и спустя несколько месяцев (или лет) опять натыкаюсь на нее и опять начинаю думать, как же ее исправлять.

Так вот, для памяти запишу: код Виртустан-мада и Старого Зеркала плохо собирается на 64-битных системах, например в cygwin, флаг -m32 и соответствующие библиотеки помогают не всегда. В частности, под cygwin/64 он либо не собирается либо собирается и сразу падает в корку. Ну и чорт с ним, потому как все нормально собирается на 32-разрядном Цигвине, а 32-разрядные exe нормально работают в 64-разрядной Винде.

А на 64-разрядной Ubuntu 18.04.3 мой Виртустан собрался и нормально работает. И Старое Зеркало. (А Былины, как и Ноыое Зеркало изначально заточены именно под Ubuntu x86_64)

Как я ехал в метро

Сегодня утром по дороге на работу вместо того, чтобы залипать в твиттер, залипал в терминал termux на Андроиде и игрался со сборкой мад-серверов под Андроид.

Как я уже ранее писал, tbamud собирается с пол-пинка. ROM собирается. Виртустан муд собирается, но выпадает в корку на каком-то вызове lexical cast. А в Былинах-0 (это очень-очень-очень старая версия Былин, по сути слегка русифицированный Circle) внезапно нашелся ассемблерный код на ассемблере x86 (а телефон построен на процессоре ARM). Перепишу эти вставки на C и посмотрю, что будет дальше.

Кстати, когда телефон подключается к Wi-Fi, запущенный там мад-сервер может быть виден из Интернета, а вот при использовании 3G/4G – нет

Update. Код Былин-0 оказался психологически несовместим с используемым в Андроиде “богомерзким кленгом”. А tbamud и rom – рулез!

Креш мада

Вчера Виртустан мад пару раз подряд крешанул. Предположительно из-за длинной или некорректной строки, посланной клиентом blindtin (lyntin с читалкой). Но повторить ситуацию не удалось, ни из “слепецкого” клиента, ни из обычного тинтина вводом длинных строк в команды БОЛ и ОТВ.

Новости Виртустан мада

Виртустан мад, созданный мной в 2007 году на базе свободного кода Былин, еще жив. Правда в него сейчас никто не играет. (См. статистику). Но я периодически что-то делаю, и код и мир выкладываю на bitbucket. Сегодня я сделал гейткипера, как в моей любимой Линейке (Lineage II) — непись, которая стоит и может по желанию телепортировать игроков куда угодно. В отличие от будок телепортации, сделанных очень давно при помощи скриптов на языке DGScript, гейткипер сделан в виде кода на C (моб со спецпроцедурой, примерно так же сделан рентер или банкир)