hiervard logo Что это такое? |  Особенности
Правила |  Проекту требуются...
Кто в игре? telnet://hiervard.ru:4000
telnet://193.41.218.12:4000
другие порты
Hiervard MUD

Информация
О мире
Об авторе мира.
О проекте.
Участники
Особенности
Карта мира
Требуются...
Статистика
Расы и профессии
Кто в игре
Загрузка сервера
Игрокам
ЧТО ЭТО?
ПРАВИЛА
FAQ
Термины
Справка
Навыки
Настройка zmud
Мультиподключения
Выбор имени
Транслит
Галерея
Подключение
Билдерам
13 правил
Анкета билдера
Зоны
[О принципах]
Правила
Временной срез
AI
Умения
DG-Script
Триггеры!
Погода
Богам
Слава и удача
Правила богов
Разное
Интересные факты
Проблема "Я"
Пожертвования
IRC канал
Ссылки

Проклятая буква.

Все знают, что в любом MUD'е масса проблем с буквой 'я'. Откуда они берутся? Попробуем разобраться и понять, как с этим бороться.

Все дело в том, что 'я' (ANSI-код 255) в понимании протокола telnet это никакая не буква. Это IAC (Interpret As Command - понимать как команду) - специальный символ, обозначающий, что вся оставшаяся за ним строка это команда tenet. Более того, если мы бездумно передадим букву 'я' (обратите внимание - 'я' - маленькая, большая абсолютно нормальна), может случится вообще все, что угодно, например MUD будет ждать ввода дальнейших команд и приостановит обработку.

Теперь, когда более или менее ясно, в чем корень проблемы, поговорим о способах ее решения. Повсеместно применяется такой хитрый прием: IAC посылается не один (что приводит к вышеуказанным последствиям), а два, потому что два рядом стоящих IAC'а считаются просто двумя обычными символами. Вуаля! Вот и решение: нужно перед посылкой дублировать IAC, а после приема убирать лишний.

MUD наш делает так: получив IAC или два IAC'а (неважно, в какой кодировке), он сводит все к букве 'я' и дальше обрабатывает. Можно посылать как один, так и два символа, но я бы рекомендовал все же дублировать букву 'я' при посылке. Как это сделать с точки зрения настройки клиента, будет рассказано позже.

Отправляет же MUD всегда два IAC'а. Дальше уже проблема клиента: показывать ли как есть, или резать (о настройке, также после).

Тут вроде все ясно, уточню только один момент: зачем нам две Win-кодировки. Отличаются они только одним: кодировка 2 ни при каких обстоятельствах не пошлет IAC (ни одинарный, ни двойной) клиенту. Вместо этого он заменяет его большой буквой 'Я' (заметьте: двойной, чтобы не перенастраивать клиент). Зачем это нужно? Дело в том, что некоторые клиенты (например, zMUD) вообще не могут принимать IAC (даже двойной). Прочие клиенты (JMC, MMC, :) можно настроить на работу с четвертой кодировкой и на посылку/прием пар IAC'ов.

Настройка клиентов

Клиент JMC: тут все просто. Сгодятся любые настройки, правда если вы хотите получать эстетическое удовольствие, нужно зайти в Options->Substitutions (Опции->Замены) и выставить переключатели Send IAC и Receive IAC (Посылать IAC, Получать IAC). В положение Double (Двойной).

Клиент MMC: тут немного посложнее. Отправку настраивать не надо: MMC всегда посылает двойной IAC. Чтобы получать одинарный IAC вставьте следующий скрипт в свой .ini файл (кто пользуется MMC - сумеет ;) ):

hook { 
my $str=shift; 

$str=~tr/я/Я/; 

return $str; 
}"send"; 

Клиент zMUD: надо ввести в командой строке

#ONINPUT {я} {#SUBSTITUTE Я} "" {nocr|case|verbatim}{} 
#ONINPUT {Я} {#SUBSTITUTE Я} "" {nocr|case|verbatim}{} 
#TRIGGER {Я} {#sub я} {case}
и тогда большая буква Я будет меняться на маленькую я.... единственный недостаток: Если тебе будет с муда приходить РЕАЛЬНАЯ "Я" (то есть например начало предложения в телле, например "Я ушел", то сия "Я" тоже бует маленькой. (c) Harden + Orlangur





Перевод по материалам www.moyperevod.ru.

Portions, © 2006-2017, NEON2 NCC
Все права принадлежат
Нику Перумову
????