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

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

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

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

MUD-вечеринка

17 декабря в 11am PST в мире DikuMUD3 будет рождественская вечеринка (англоязычная), придут основатели (программисты и билдеры) DikuMUD, первые игроки и т.д. Я думаю, сто процентов русскоязычных мадов это наследники Diku в той или иной форме. Не знаю, буду ли я, мой английский слаб, но может через переводчик буду следить за базаром. Diku3 работает как в обычном телнет-режиме, так и через веб. Его исходники кстати открыты.

Подробности о мад-вечеринке по ссылке:

https://www.reddit.com/r/MUD/comments/ka1ro7/reminder_dikumud_reunion_online_on_december_17/

DikuMUD3 news

Михаил Сейферт зарелизил на github код DikuMUD3:
https://github.com/Seifert69/DikuMUD3

Этот мад работает как по привычному протоколу telnet, так и через веб-интерфейс по технологии websocket.

Я собрал его (это оказалось несложно) и сделал временный тестовый MUD на его базе, чтобы все желающий могли пощупать этот мад:
http://prooltest-4g.kharkov.org/mud/

Good news

Хорошие новости для всего мира мадов: Авторы DikuMUD –

Sebastian Hammer, Hans-Henrik Starfeldt, Katja Nyboe, and Michael Seifert – собрались и перелицензировали свой код на условиях LGPL. То есть лицензия Diku уже не проприетарна, а наоборот, свободна. Например, уже можно официально делать платные мады. А на реддите обсуждают лицензии потомков Diku. Например, лицензия MERC вроде как обратно совместима и поэтому MERC тоже можно считать свободным ПО (но это пока не точно).

Вот официальный репозиторий с кодом Diku от Майкла Сейферта (одного из авторов):

https://github.com/Seifert69/DikuMUD

(там еще есть несколько версий Diku)

UPDATE. После некоторой возни собрать DikuMUD мне удалось, но он почти сразу падает, когда в нем пытаешься регистрировать нового игрока. Почему и как исправить – я пока не знаю.

Но без проблем мне удалось скомпилировать и запустить DikuMUD2:

https://github.com/Seifert69/DikuMUD2

UPDATE2: 13-Jun-2020. Вот легко собирающийся код Diku Alpha:

https://github.com/MUDOmnibus/DikuMUD-Alfa-for-Win32.git

Он UTF-изирован: https://github.com/prool/DikuMUD-Alfa-for-Win32

UPDATE3: 14-Jun-2020. Я UTFизировал Diku2 (-u флаг в драйвере mplex)

https://github.com/prool/DikuMUD2

Меня форкнули!

Буду краток.

Мой Virtustan MUD на Гитхабе форкнул молодой аккаунт по имени DikuMUDOmnibus, который, как я понял, собирает форки всех мадов, основанных на движке Diku. Посетив аккаунт DikuMUDOmnibus, я нашел аккаунт MUDOmnibus, который форкает вообще все мады.

Это скорее всего энтузиаст, который всё каталогизирует

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