Маленькое наблюдение про русификацию

Я уже писал, что русификацию английских кодовых баз делаю простейшим способом: в кодовых базах, основанных на Circle/DIKU/ROM/MERC в одном месте модфицируется код проверки вводимого символа так, чтобы все 8-битные символы проходили нормально. Один из последних примеров вот. Но при этом во входной поток могут попасть управляющие символы протокола telnet (или их куски). Когда это бывает? Например после ввода пароля. Во многих кодовых базах для безопасного ввода пароля управляющими символами отключается эхо, а потом оно включается. А во время регистрации после пароля мад спрашивает sex и на любой первый ответ выдает сообщение об ошибке, приходится второй раз говорить m. (Я всегда говорю m).

Так вот, оказалось последние версии клиента tintin++ эту проблему с выскакивающими мусорными символами решают. В версии 2.02.12 все ок, а например в prooltin, основанном на tintin 2.01.7 выскакивает ошибка. Команда telnet тоже дает ошибку (что естественно, он тупой по определению, он так сделан). Чуть позже протестирую другие клиенты.

UPDATE. Проблему можно решить как на стороне сервера, так и на стороне клиента. В новой версии tintin++ проблема решена на стороне клиента — «не реагируем на мусорные символы». Но я внес коррективы в функцию isprool и теперь не выдаю эти мусорные символы и старая версия tintin++ и некоторые другие виндовые клиенты, которые раньше глючили, теперь не глючат. В общем, проблема решена.

Бойцы вспоминают минувшие дни

Коллега Saboteur опубликовал на сервисе Хабр свои воспоминания о киевском мад-сервере Forgotted Dungeon

https://habr.com/ru/post/553700/

Его исходники https://github.com/sfkulyk/fdungeon
А вот мой форк, адаптированный для сборки в cygwin https://github.com/prool/fdungeon

После статьи почитайте и комментарии, там набежали ветераны этого дела и тоже делятся своими мемуарами, например вот https://fiorine.livejournal.com/615912.html

Shadow Realms MUD

В Дискорд-чате кинули ссылку на исходники еще одного русского мада Shadow Realms. А также вот.

Я немного повозился и собрал мад в Убунте, это оказалось сравнительно несложно. Моя версия вот.

Этот мад, кстати, сейчас работает: mud.nnov.net 9000

Сайт мада.

Реинкарнация ROM

Один энтузиаст рефакторит ROM

https://www.reddit.com/r/MUD/comments/crn5r6/followup_to_rom_codebase_cleanup_now_online_again/

https://github.com/Synival/BaseMUD

Update. Под Центосом собралось и запустилось нараз. Под Убунтой пришлось удалить лишние зависимости из Makefile и в паре мест заменить ‘\0’ на 0. Запускать виртуалку с Дебианом мне стало лень

Update #2.
UTFизировать по «методу Пруля» код удалось очень легко, как и остальные Circle и ROMы. При этом вместо сочетания вызова функций isascii и isprint в модуле  comm.c надо использовать функцию  isprool.

// prool begin
int isprool(char c)
{
if ((c<32)&&(c>=0)) return 0;
if (c==-1) return 0;
if (c==-3) return 0;
return 1;
}

// prool end

Update #3. Под Андроидом тоже удалось собрать. Мои эксперименты выложены в Гитлаб: https://gitlab.com/prool/basemud-prool/ (пока без русификации). Это первый ROM, который у меня заработал на Андроиде, потому что rom-quickmud что-то собрался, но при запуске начал крешать. А Цирклы работают без проблем — tbamud & EmpireMUD

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

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

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

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

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

О русификации ROM

На выходных ВНЕЗАПНО решил поразвлекаться и русифицировать ROM. В качестве примера ROM’а взял rom24-quickmud:

https://github.com/prool/rom24-quickmud

Замечания к данному релизу:

1. В отличие от Circle, где вместо if (isprint() && isascii()) можно написать даже if (1) здесь такое не проходит, так как выскакивают команды протокола telnet, которые портят пароль и первую вводимую команду (смутно вспоминаю, что с первой испорченной командой я уже сталкивался ранее и вышел тогда тупо, выведя сообщение «нажмите энтэр два раза»). Я пока игнорирую коды FF, FD, FE, но это неправильно, так как могут теряться некоторые буквы некоторых кодировок, например «большой твердый знак» в koi8-r

Update. В последней ревизии на github обработка команд telnet сделана корректно

О русификации QuickMUD-lua

С подачи товарища Пацифиста начал русифицировать QuickMUD+lua (Авраам породил Иакова, ROM породил QuickMUD, а потом товарищ Odoth добавил туда lua). В общем, все делается примерно по тому же шаблону, что и ранее слегка русифицированный tbaMUD. Русские команды лучше и проще реализовывать не в общей таблице, а отдельным обработчиком, вызываемым до основного. А то всякие глюки выползают из-за UTF-8

Всё здесь:

https://bitbucket.org/prool/quickmud-lua-russian

А вот взгляд на проблему с другой стороны: http://muder.ru/blog/172.html

И снова о русификации английских кодовых баз, основанных на Circle

Я только о том, чтобы мад воспринимал символы из второй половины таблицы ASCII. И строго говоря это не русификация и даже не кириллизация, а интернационализация и UTFизация

Возьмем, к примеру TBAMUD

Файл comm.c, в функции perform_socket_read

ищем строку с проверкой isascii(*ptr)&&isprint(*ptr)

и меняем ее на ((unsigned char)*ptr)>=32U

Почему так коряво, да потому что по умолчанию *ptr — это signed *char

Я там и единицу ставил (то есть всегда true), тоже работало, но лучше от символов, меньших пробела, защититься 😉

Возможно есть и другие места, где придется слегка модифицировать код, чтобы нормально проходили старшие символы (>127). И не надо забывать, что char signed!

UPDATE. 01-Apr-2017. То же касается и русификации ROM и вообще всех детей Diku

UPDATE. 03-Dec-2017. И не надо забывать, от командах протокола telnet, которые могут появиться, например в начале строки и испортить картину. Например, испортится ввод пароля или ввод команд. Вот пример таких последовательностей FF FD 01 и FF FE 01