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

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

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

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

Имперские амбиции

Занимаясь русификацией Имперского мада и встроенным в него автопереводчиком имени Мюллера внезапно начал играть в оригинальный EmpireMUD. В частности, пообщался с самим Хуфу (местным имплементором, он сам меня отчатил), построил две шахты по добыче олова, собрался строить третью, но две первые куда-то делись. То ли я еще не все понял в геймплее и строения надо как-то закреплять или защищать или регулярно посещать, то ли был откат мада, то ли пока я спал (а в Америке соответственно был день), на меня напали и разрушили шахты. На своем имперском сервере построю шахту и буду наблюдать, разрушится ли она или нет.

А вот карта моего шарда http://files.mud.kharkov.org/1/map-viewer.php

Для сравнения вот карта с официального сервера https://empiremud.net/map-viewer.php?size=1800

(в этом маде мир генерируется перед первым запуском сервера)

Модуль автоматического перевода мада с английского на русский

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

Изначально этот модуль написан и отлажен мной как серверный модуль для русификации EmpireMUD, но как видите, он может использоваться как на сервере, так и в клиенте

Glory MUD

Внезапно тараканы в моей голове сказали, что хорошо бы сделать англоязычный мад. На него начнут заходить китайцы и индусы и у меня будет посещаемость! Не зная хорошо английского я взял готовую кодовую базу с зонами, а именно tbaMUD и запустил всё это на 5000 порту. Мад будет называться «Glory to Heroes» (Слава героям!).

Сайт мада http://glorymud.kharkov.org
Адрес мада glorymud.kharkov.org 5000
Модифицированные мною исходники мада

Это тот самый tbaMUD, который я начал русифицировать неск. месяцев тому назад. Для англоязычного релиза я его дерусифицировал назад (сохранив переведенные файлы с расширениями .rus) и теперь неторопливо думаю о том, как сделать двуязычный мад

«Рубай компот, он жирный!»

Роясь в окаменелом гавне коде tbamud, который произошел от circlemud,  я обнаружил вот что: там есть тип жидкости «вода» (LIQ_WATER), а есть тип «чистая вода» (LIQ_CLEARWATER). Так вот, обычная вода утоляет и жажду и голод. А чистая вода только жажду. Что там у них в воде содержится? Питательные микроорганизмы?

Я, кстати, от нефиг делать, слегка его русифицирую

О русификации 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 сделана корректно

И снова о русификации EmpireMUD

Только что я запустил тестовый сервер русифицированного EmpireMUD (кодировка только UTF-8!),
которым занимаемся я и коллега Пацифист:

mud.kharkov.org 5000

Что сделано на данный момент:

— можно вводить русские имена игроков (только вводить, выводятся они пока в транслитерированной форме)

— можно писать в чат по-русски

— переведено одно сообщение!

Это не шутка, именно одно. Но главное, написан простейший модуль перевода, то есть теперь надо просто переводить все сообщения и заполнять словарь. А сообщений там тысячи, однако. Поэтому ищутся волонтеры и спонсоры 😉

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

О создании дву- и многоязычных мадов

Я предлагаю метод фальшпанели. То есть у мада есть основной язык, им будет, например, английский. Вся внутренняя инфа на английском. Для англоязычных игроков все работает как обычно. А для русскоязычных на лету переводится. Имеется ввиду конечно не использование онлайн-переводчиков, а заранее сделанный перевод.

Что нибудь примерно такое:

сообщения выводят игроку при помощи новой функции

msg_to_char_multilingual(ch,«Invalid exit»);

И англоязычный игрок увидит сообщение Invalid exit

А для русскоязычного игрока функция обратится в базе переводов (обычному текстовому файлу) и найдет соответствие

Invalid exit — Неверный выход

и выдаст игроку текст «Неверный выход»

Похожим, только более сложным и громоздким образом работает многоязычный интерфейс gettext (https://ru.wikipedia.org/wiki/Gettext)

А откуда система узнает, что игрок русскоязычный? Обратите внимание на первый параметр функции msg_to_char_multilingual, он такой же, как у реальной функции msg_to_char — это ссылка на структуру, описывающую игрока. Надо будет ввести в параметры игрока еще один параметр «Language». Или для большей простоты использовать какой-нибудь уже существующий малоиспользуемый параметр

Для ускорения поиска по строкам для оригинальных строк (английских) вычисляются хеши (например CRC32) и поиск по файле переводов будет осуществляться по хешам

Но современные сервера столь быстродействующи, а мады столь малопосещаемы, что оптимизация может и не понадобится. Или понадобится нескоро