Последнее время муд стал падать со странными сообщениями
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)
Tag: Былины
“Вся Галлия делится на три части”
В мудах из семейства Diku/Circle/ROM можно выделить три части. Первая это код, то есть исходный текст на языке C или C++ или их сочетании. Вторая это мир, то есть игровые зоны, в текстовом формате файлов zon/wld/mob/obj/trg/shp для ветки Circle и в едином формате are для ветки MERC/ROM. Третью выделяю только я, это то, что я называю “файлы данных” и чаще всего они находятся в каталоге misc. Там находится “цифирь”, то есть все параметры классов, умений, заклинаний, уровней и так далее. Часть из этих цифирей находится в коде, и для их изменения надо уметь перекомпилировать исходники (и иметь их в наличии). А вот те цифры, которые находятся в файлах данных можно просто поменять и перезапустить мад (или выполнить в маде команду reload) и все в мире изменится.
Чтобы запустить у себя сервер надо иметь все три части, причем код может быть как в виде готового бинарника, так и в виде исходников, что конечно предпочтительнее, по крайней мере для тех, кто знает основы программирования. А иногда эти части распространяются отдельно (и порой имеют различные лицензии и правовые статусы). Например, tbamud присутствует на github полностью, то есть код, файлы и зоны. Эти зоны они называют stock zones, но некоторые авторы зон (билдеры) не разрешают свободно распространять свои зоны. Кроме авторского произвола (или желания заработать) здесь есть и игровая логика – изучив файлы зоны игроки получат преимущество, так как заранее, не играя будут знать топологию зоны, квесты, параметры монстров и так далее. Это как в D&D игрокам сильно не рекомендуется читать Книгу мастера (спойлеры, “вам потом неинтересно будет”).
А вот Былины (несмотря на сложный характер отцов-основателей) были чуть ли не первым русскоязычным мадом, опубликовавшим свой исходный код вместе со “стоковыми” файлами и тремя начальным зонами. Ну, вы знаете эту душераздирающую историю, несколько раз из штаб-квартиры Былин происходили утечки других зон (и файлов), на базе которых делали пиратские “локалки”, например широко известная в узких кругах “НВОшная локалка” или не менее известное Зеркало.
Недавно я нашел на github англоязычный Luminari MUD, который объявлен как последователь tbamud (а tba – наследник Circle), причем в Luminari использован механизм D20. Я решил его поковырять, оказалось, опубликован только код, который достаточно легко собрался. И что дальше с ним делать? Оказалось, что в Luminari используется хранение базы игроков и некоторые параметры и хелпы в базе mysql, то есть в качестве “стоковых файлов” должен был быть дамп этой базы, которого в поставке не было. И игровых зон не было. Игровые зоны я взял со старой версии Luminari, а проблему с базой решил самым кардинальным образом – я начал жестоко курочить код (я называю это методом дурацкого хака и помечаю коментарием prool fool), и получится франкенштейн, который как-то запускался. Он не умеет хранить базу игроков, в нем надо постоянно регистрироваться, но походить по комнатам можно. Этот хак я еще не опубликовал, я не думаю, что он может быть кому-то сильно интересен.
А совсем недавно я нашел исходники русскоязычного муда по Ведьмаку. Начал их ковырять, и увидел, что они сделаны на базе Былин и чего-старого типа старого Circle или старого ROM. Информация об игроках там хранится в 24 подкаталогах с именами в виде латинских букв. То есть игрок Алекс будет лежать в каталоге a, игрок Пруль в p, Романа в r и так далее. Это было в каком-то старом ROM, потому что новые Circle (как и Былины) используют 6 каталогов A-E F-J K-O P-T U-Z ZZZ. Но остальные потроха у Ведьмака былиновские, но файлов и зон не было от слова совсем. Я откомпилировал его (это оказалось просто) и начал подбрасывать ему файлы данных от старого Зеркала, при ошибках делая их пустыми (то есть умений и заклинаний не будет). И постепенно сервер начал запускаться, потом я подбросил ему одну зону от Зеркала и ЭТО запустилось.
Для желающих поковырять вот моя франкенштейн-версия на gitlab https://gitlab.com/prool/cholera-mud
Называется она Холера муд. Ведьмак Геральт в фильмах и играх любил ругаться по-польски, слово KURWA я посчитал слишком неприличным, а вот CHOLERA в самый раз.
А вот сборка Холеры для Виндовс http://mud.kharkov.org/files/cholera-mud.zip
Она же временно крутится у меня на сервере на порту 7777 (хост мой обычный, mud.kharkov.org)
Впрочем, оригинальный Ведьмак вполне себе жив и крутится вот здесь: game.mudlast.ru 2700
Инструкция для билдеров
Коллега Дариан написал инструкцию для билдеров по командам онлайнового редактора OLC (on-line creating), встроенного в мад Былины:
https://www.bylins.su/builder/olc/
Такие же редакторы есть и в мадах Зеркало и Виртустан, основанных на коде Былин. Более того, похожие команды редактирования есть практически по всех мадах, построенных на базе кода Circle или его потомков, например в tbaMUD. Естественно, с некоторыми различиями, например в англоязычных мадах нет падежей.
Привет от Бернулли
Копаясь в коде Былин случайно наткнулся на вычисления вероятности по формуле распределения Бернулли и восхитился этим. А покопавшись, выяснил, что так по научному называется обычное моделирование кидания кубика.
Ну вот допустим у нас есть кубик-процентовик, у которого сто граней от нуля до 99. И вероятность уворота у данного игрока, скажем 5 процентов. Мы кидаем кубик, если выпадает меньше пяти, мы увернулись, если больше, то нет. Читаем Википедию:
Распределе́ние Берну́лли в теории вероятностей и математической статистике — дискретное распределение вероятностей, моделирующее случайный эксперимент произвольной природы, при заранее известной вероятности успеха или неудачи.
Случайная величина X имеет распределение Бернулли, если она принимает всего два значения: 1 и 0 с вероятностями p и q = 1 − p соответственно.
Дальше начинается сложный матан (на самом деле не матан, а теорвер), который заинтересует только Шелдона Купера.
Я кстати в институте не любил теорию верояностей и матстатистику и получил на экзамене по ним тройку (по пятибалльной шкале), одну из немногих за все время учебы. Остальные были четверки и пятерки.
История Былин
На форуме Былин Снежич (Ележор) выложил ссылку на исходники своего старого сайта по истории Былин (mudhistory.nm.ru). Сайт лежал на бесплатном хостинге и хостинг давно протух. Я временно выложил это у себя.
http://muds.kharkov.org/mudhistory/
Ответить на форуме не смог, у меня там прав нету, но проанонсировал выложенный сайт в Былинах на канале оффтопик. Заниматься обновлениями сайта не смогу, у меня мало свободного времени, да и не в теме я, разве что смогу выложить, если кто пришлет свою статью. Кстати, кроме истории там есть полезные статьи для начинающих билдеров
Код свежих Былин, собранный для 32-разрядной Винды
Современные Былины рассчитаны на 64-разрядные платформы, например 64-разрядную Ubuntu или 64-разрядный cygwin (то есть Windows). Но мне удалось собрать код Былин под 32-разрядную Винду 🙂
Вот оно http://mud.kharkov.org/files/zerkalo/zerkalo.win32.zip
Это мое Зеркало, то есть немного модифицированный код Былин, но оригинальные Былины собираются аналогично. Там два места – в первом пришлось заменить 64-разрядную хеш-функцию на 32-разрядную, а во втором поменять int на unsigned int модификации помечены комментарием prool for win32
Открытое письмо игрокам и билдерам мада Новое Зеркало
Версия 0.3. Последние изменения внесены 25 ноября 2020 г, 12:35 UKR
Приветствую, я Пруль, директор этого мира. Директор это самый главный человек в проекте, иногда говорят имплементор или старший бог.
Я всех приветствую и надеюсь, что время провождение в мире Нового Зеркала будет для вас приятным и полезным.
Адрес мада zerkalo.kharkov.org 4000
Игрокам я много говорить не буду: играйте, изучайте мир и так далее. Если вас кто-то будет обижать, жалуйтесь директору, то есть мне. Я имею ввиду неигровую обиду, например, ругань, которой в мире не должно быть. А если вас обижает сильный монстр, это часть игрового процесса.
А вот билдерам инструкция будет длинее:
Первое правило билдера – не навреди игре, поэтому если каких-то параметров вы не знаете, не меняйте их. Кроме того, нельзя создавать билдерской командой load много сильных шмоток (оружия и доспехов) и раздавать их друзьям или своим персонажам-игрокам. Нельзя увеличивать уровень и другие параметры игроков. И уменьшать нелья! И нельзя делать сильных мобы слабыми, чтобы упростить себе игру. Вообще, чужих зон, то есть не ваших, трогать нельзя. У каждого билдера есть свои номера зон, где он может слегка экспериментировать и билдить.
В коде Былин (а Новое Зеркало это кривое зекало Былин) есть многоуровневая система защиты и уровни разных богов, но мне лень и нет времени разбираться, поэтому если вы увидели, что вам доступны сильные опасные команды типа остановить сервер, не надо с ними играться. Все логи ведутся и злостные хулиганы будут отключены.
Теперь о хорошем. Каждый билдер должен иметь собственный локальный сервер, на котором можно играться, устраивать креши, абьюзы, перезагружать его, экспериментировать с триггерами. Это никак не повредит основному серверу мада, а на основном сервере вы потом сможете билдить аккуратно и осторожно, уже имея опыт.
Где взять собственный сервер: если у вас Виндовс, берите готовую локалку:
http://files.mud.kharkov.org/archive/proolzerkalo/zerkalo-windows/newzerkalo-03-jul-2020.zip
Локалка датирована 3 июля 2010 года. Кстати, из локалки при желании можно сделать свой полноценный мад-сервер, доступный и для других игроков.
Если у вас Линукс или Макбук или БК-0010, обращайтесь ко мне, я помогу сделать сервер. Мои контакты вот.
Теперь о триггерах. Если вы изучили команды red/oed/med и создали несколько комнат, монстров и предметов, это только начало пути. Язык скриптов, на котором пишутся квесты и всякое сложное поведение монстров и NPC не так прост. Я сам знаю его только чуть-чуть. Начните с внимательного изучения статьи
http://files.mud.kharkov.org/articles/triggers-article.html
Далее можно обращаться за справками в справочник по языку скриптов:
http://files.mud.kharkov.org/articles/DGSinfo05.pdf
И далее можно экспериментировать на своей локалке. Готовьтесь, что первые ваши скрипты и триггеры не будут работать и будут вызывать креш вашей локалки. В локалке есть полный мир, как на сервере, со всеми скриптами, вы можете учиться там. И предупреждаю, это трудная область, если вы не склонны к программированию и программистскому мышлению, то вам может быть трудно, особенно поначалу. Помощь от Пруля не всегда возможна, потому что я сам знаю скрипты только слегка.
Вот полезная статья: Что нам стоит мир построить
Есть еще пара хороших статей о билдерстве, но я потерял их тексты и ссылки на них, но когда найду, напишу о них в этом своем блоге.
А если вы программист и хорошо знаете языки C/C++, то можете вместо скриптов написать “спецпроцедуру” для моба, объекта или комнаты. Я так делал в Виртустан маде, потому что мне проще что-то кодить на C, чем ковыряться в странном для меня скриптовом языке. Для программистов вот ссылка на репозиторий с исходниками Нового Зеркала (он является веткой кода Былин):
https://github.com/prool/mud
А вот ссылка на репозиторий с миром (в нем видно, что и когда менялось или добавлялось):
https://gitlab.com/prool/new-zerkalo-mud-world-utf
Имейте ввиду, что русские буквы в коде и в мире представлены в кодировке koi8-r (все файлы текстовые и их можно просматривать и редактировать текстовым редактором, например Notepad++, vim, mcedit, F4 в оболочке FAR Manager).
Но все изменения заработают только после перезагрузки мада, именно поэтому тренироваться и билдить лучше на своей локалке. Изменения в коде заработают после успешной перекомпиляции мада (и перезагрузки сервера).
Кстати, общаться со мной лучше по электронной почте, она приходит ко мне сразу на смартфон, который всегда при мне и если я не сплю, не ем, не занят, не на работе и не в трамвае, я могу оперативно ответить. А в маде я появляюсь время от времени
Еще одна вики по МПМ “Былины”
Только что случайно узнал об этом сайте
Сборки мадов для Виндовс
Я сделал свежие сборки мадов для 64-разрядной Виндовс. Компилировал я в среде cygwin, это оказалось достаточно просто, все делается примерно как в Линуксе (то есть cmake с нужными параметрами, потом make, подробнее см. документацию в репозитории кода Былин).
Во-первых, сделал тестовую “локалку” с тремя зонами (движок для проверки зон) Былин (версия кода от 6 ноября 2019 года). Вот она. (Примерно то же самое, но немного более старое лежит на официальном сайте Былин).
А во-вторых, я сделал локалку Нового Зеркала (со всеми зонами). Вот.
Зачем можно использовать локалки: на них можно играть (это полноценный сервер), можно соло, можно с друзьями по сети. А можно использовать их для билдерства: тестировать зоны, изучать OLC и триггеры и т.п.