Я предлагаю метод фальшпанели. То есть у мада есть основной язык, им будет, например, английский. Вся внутренняя инфа на английском. Для англоязычных игроков все работает как обычно. А для русскоязычных на лету переводится. Имеется ввиду конечно не использование онлайн-переводчиков, а заранее сделанный перевод.
Что нибудь примерно такое:
сообщения выводят игроку при помощи новой функции
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) и поиск по файле переводов будет осуществляться по хешам
Но современные сервера столь быстродействующи, а мады столь малопосещаемы, что оптимизация может и не понадобится. Или понадобится нескоро