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

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

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

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

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

Всё здесь:

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

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

tbaMUD+prool

Ну чо, я практически русифицировал tbaMUD. С падежами я решил не заморачиваться и сообщения не переводил, но сделал главное: теперь муд нормально воспринимает символы из старшей половины таблицы ASCII, кириллица внутри мада хранится в UTF-8, а снаружи в UTF-8 или koi8-r. Добавить кодировки win, alt, lat проще простого. (В Винде хороший клиент Tortilla, который умеет UTF-8) Пока кодировки переключает флаг summonable (команда toggle summonable on или off). Можно делать русские команды, русских мобов и предметы (без падежей!) И украинских! И белорусских! И болгарских! И сербских! (Или братушки сербы уже перешли на латиницу?)

Всё на гитхабе https://github.com/prool/tbamud

И описанный в предыдущем посте баг нейтрализован

Обращаю также ваше внимание на то, что на гитхабе tbaMUD+prool сделан в виде форка и работы в этом муде не отображаются на гитхабовском календарике квадратегами. Негодую на эту политику Гитхаба!

Рабочее

tbamud/prool, который я кручу-верчу, выпал при команде shutdown в корку

это плохой знак

«нам потребуются более тщательные наблюдения»

Место, где происходит crash найдено при помощи gdb и помечено. Обычный сбой при использовании ptr (или там ноль или мусор). Как бороться с нулем, понятно, проверять. Причем вероятность сбоя низкая: при освобождении фолловеров, но не всегда

Еще и gdb в корку вылетел

Apr 22 16:23:46 ���� :: (GC) Shutdown by Prool.
Apr 22 16:23:46 �%W :: Closing all sockets.
Apr 22 16:23:46      :: Closing link to: Prool.
Apr 22 16:23:46     :: Saving current MUD time.
Apr 22 16:23:46      :: Normal termination of game.
Fri Apr 22 16:23:46 2016 Normal termination of game.
Apr 22 16:23:46      :: Clearing game world.
Fri Apr 22 16:23:47 2016 locate follower who is not head of list

Fri Apr 22 16:23:47 2016 locate follower who is not head of list


Program received signal SIGSEGV, Segmentation fault.
../../gdb/dwarf2-frame.c:1907: internal-error: decode_frame_entry_1: Assertion `fde->cie != NULL' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) y

../../gdb/dwarf2-frame.c:1907: internal-error: decode_frame_entry_1: Assertion `fde->cie != NULL' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Create a core file of GDB? (y or n) y
Аварийный останов (core dumped)

Ссылки

tbamud

tbamud/prool

И снова о русификации английских кодовых баз, основанных на 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