======
README
======

:Author: Lex


blintin - это модификация клиента lyntin для игры в многопользовательские текстовые онлайн игры (MUD), нацеленная на незрячих пользователей. Особенности клиента:
* самоозвучивающийся интерфейс, который в качестве синтезатора может использовать вывод вашего скринридера (NVDA, Jaws) или sapi5
* Возможность заморозить окно вывода от мада и читать его стрелками, как обычный текстовый редактор, в то время как новый появляющийся текст не будет смещать позицию курсора
* Поддержка неограниченного количества именованых окон вывода: например, вы можете сделать, чтобы личные обращения к вам в игре добавлялись в отдельное виртуальное окно, и затем просматривать текст в этом окне отдельно от основного текста
* Поддержка стандартного набора возможностей, типичных для мад-клиентов: триггеры, алиасы, горячие клавиши, замены и т.д. с расширенными, по сравнению с jmc, функциями
* В целом работающий стабильнее и шустрее, посравнению с jmc
* Для продвинутых пользователей, поддержка написания модулей на языке python, значительно расширяющих возможности клиента и автоматизирующих игру сколько хватит вашей фантазии
* Возможность управления синтезаторами речи из конфига. Объявление событий вторичным синтезатором. например, вы можете сделать, чтобы при убийстве монстра, синтезатор sapi5 объявлял "мертв имя монстра", без прерывания основного потока речи вашего скринридера
* Поддержка нескольких сессий одновременно, с возможностью мгновенного переключения между сессиями, просмотра текста из нескольких сессий в одном окне, отправки команды в другую сессию без переключения в нее, отправки команды сразу всем активным сессиям
* Развитая система справки по командам внутри самого клиента (пока что на английском языке)
Далее по тексту будет использоваться lyntin при описании особенностей оригинального клиента, и blintin при описании специфических для модификации под незрячих особенностей.

Начало работы
=============

Распакуйте архив с клиентом в удобное для вас место. Запустите blintin.bat, и отключите в вашем скринридере чтение вводимых символов (в NVDA это NVDA+2). В дальнейшем средствами скринридера создайте профиль настроек, чтобы эта опция отключалась в окне клиента автоматически. Перейдите в главное меню, нажав клавишу "приложения", выберите "создать профиль". используя клавишу таб для перемещения между полями, Введите название для вашего профиля (например default или ohotnik), адрес сервера (bylins.su) и порт (4000). подтвердите введенные данные, нажав ввод. Клиент автоматически подключится к серверу с задаными параметрами.
Далее при повторном запуске клиента в меню следует выбирать "загрузить профиль" и ваш профиль, созданый вначале. Для выхода из клиента нажмите alt+f4 или наберите "#end". Для вывода списка справочных тем, наберите "#help", для вывода списка доступных команд - "#help commands", и наконец "#help название команды" для справки по конкретной команде клиента.

Интерфейс
=========

Большинство времени фокус находится в поле для ввода команд. Набирайте текст и нажимайте ввод для отправки команды. Используйте вертикальные стрелки для перемещения по истории уже введенных команд.
Клиент будет автоматически озвучивать весь приходящий от сервера текст. Для просмотра текста более подробно, можно использовать клавиши цифрового блока. Принцип действия известен для пользователей NVDA:
* 7 - предыдущая, 8 - текущая, 9 - следующая строка
* 4 - предыдущее, 5 - текущее, 6 - следующее слово
* 1 - предыдущий, 2 - текущий, 3 - следующий символ
* shift+7 - переход в начало текста
* shift+9 - переход в конец текста
* shift+1 - переход в начало строки
* shift+3 - переход в конец строки
Для просмотра текста с заморозкой курсора нажмите страницу вверх. ПОсле этого по тексту можно двигаться стрелками как в обычном редакторе. При этом новый приходящий текст от мада не будет смещать курсор и мешать детальному просмотру. В этом режиме доступно так же копирование текста из буфера обмена:
* ctrl+f9 - пометить начало региона для копирования
* ctrl+f10 - скопировать текст от помеченого места до текущей позиции курсора в буфер обмена
Для возврата в поле ввода команд нажмите искейп или просто начните печатать.
Для отправки команды в мад без очистки поля ввода (например, если вам нужно много раз повторить одну и туже команду) служит комбинация shift+enter.

Главное меню
============

Для активации главного меню нажмите кнопку приложения (applications, она же клавиша меню). Из главного меню доступны такие действия:
* Загрузить профиль - позволяет выбрать 1 из сохраненных профилей и создать сессию подключения к маду
* Новый профиль - позволяет создать новый профиль настроек, с указанием адреса и порта мада, а так же файла, в котором будут сохранятся триггеры/алиасы/горячие клавиши
* Сохранить текущий профиль - сохраняет все добавленные триггеры/алиасы/горячие клавиши в файл команд профиля
* Выход - завершает работу клиента
для выхода из меню без выбора действия нажмите alt или искейп.

Именованные окна
================

В интерфейсе есть поддержка дополнительных окон для вывода какой-либо информации. Например, удобно иметь историю личных обращений к персонажу, историю выпавших из мобов в зонинге вещей и т.д. И просматривать ее отдельно от основного текста игры. Для того, чтобы добавить текст в именованое окно служит команда #wshome:
#wshowme {название окна} {текст}
Например:
#action {%1 сообщил%2группе : '%3'} {#play sounds/gtell.wav;#wshowme {группа} {%1: %3}}
Для отображения списка окон служит горячая клавиша ctrl+w. Выберите окно из списка и нажмите ввод, затем стрелками двигайтесь по тексту окна. Для возврата в поле ввода команд нажмите escape или просто начните печатать. В меню окон возможна так же быстрая навигация цифрами. Например можно нажать ctrl+w, а затем 1 для перехода в первое (основное) окно, ctrl+w, а затем 3 для перехода в третье по счету окно и т.д.
Так же меню окон можно открыть командой #windows. а #windows {имя окна} установит сразу фокус на указанное окно. Если вы предполагаете использовать ctrl+w как горячую клавишу для других действий, то можно назначить #windows на другую комбинацию по вкусу.
Для сохранения содержимого окна в текстовый файл есть команда #wsave:
#wsave {название окна} {имя файла}
Файл будет создан в папке userConfig.

сессии и профили
================

Сессия - это подключение к мад-серверу. Клиент поддерживает одновременно несколько сессий. Для создания новой сессии служит команда #session:
#session название хост порт
например:
#session main bylins.su 4000

для завершения сессии и отключения от сервера служит команда #zap.
По умолчанию активна сессия с названием "common", и все настройки (в том числе триггеры, алиасы, горячие клавиши, переменные) этой сессии наследуются вновь создаваемыми.
Для перехода между активными сессиями можно использовать команду #названиесессии, или горячую клавишу ctrl+s, по которой открывается меню активных сессий. Для отправки команды в другой сессии без переключения в нее нужно так же предварять команду #названиесессии. например:
#imm ул
отправит команду ул из сессии imm, не переключаясь при этом в нее.

Профиль - это сессия + файл настроек, в котором хранятся триггеры, алиасы и прочее (Далее - файл команд). Файл команд имеет расширение *.lyn, например "default.lyn" -  файл для профиля с названием default.
Настройки для сессии common хранятся в файле common.lyn, и загружаются при старте клиента. Вы можете поместить в этот конфиг все общее, что есть в ваших профилях (например работа с ингредиентами, обработка личных обращений и т.д.), а в настройки профилей выносить триггеры для разных профессий персонажей или для разных мадов.
По умолчанию клиент при первом запуске создает папку userConfig, в которой будут хранится все настройки и конфиги. Файлы можно редактировать обычным текстовым редактором в кодировке windows-1251. При этом нужно помнить, что при выходе клиент автоматически сохраняет все профили, и затрет внесенные вами изменения.

Настройки
=========
В клиенте существует система настроек, доступная по команде "#config". команда без параметров выведет список доступных настроек, как глобальных, так и для текущей сессии. #config название_настройки покажет информацию о заданной настройке, включая описание. И, наконец, #config {название} {значение} изменит значение настройки на заданное.
Ниже приведено описание некоторых настроек.
Глобальные:
tts.default.* - позволяют настраивать параметры вывода для озвучки основного интерфейса клиента. Если у вас используется скринридер в качестве системы вывода (tts.default.provider), то настройки скорости (rate), громкости (volume) и голоса (voice) работать не будут.
tts.secondary.* - позволяют настраивать параметры голоса для вспомогательного вывода речи (команда #speak). Доступные голоса для установки в параметр tts.secondary.voice можно посмотреть по команде #voices.
blindui.typingecho (Доступные значения on/off) указывает, озвучивать ли клиенту символы при вводе. Отключите эту опцию (#config blindui.typingecho off) если вводимые символы у вас читает скринридер.
blindui.skipemptylines (доступные значения on/off) - параметр позволяющий включить пропускание пустых строк в поле вывода текста. Введите "#config blindui.skipemptylines on", чтобы избавиться от пустых строк во всех окнах.
Отдельно для каждой сессии:
soundmute (доступные значения on/off) - позволяет временно отключить звуки, проигрываемые командой #play.
soundvolume (доступные значения 1-128) - позволяет установить громкость проигрывания звуков командой #play.
verbatim (доступные значения on/off) - позволяет выключить обработку алиасов. Может быть полезно, если у вас есть алиас, конфликтующий, например, с триггером в зоне.
ignoreactions, ignoresubs (on/off) - позволяет временно отключить обработку экшенов или сабститутов (замен).

Отличия синтаксиса команд от JMC
================================
Хоть lyntin и jmc оба заимствуют синтаксис команд от tintin, есть некоторые отличия, о которых полезно знать при переносе своего конфига из jmc. Вот некоторые из них:

В lyntin %1...%9 не совпадает с пустой строкой. если в jmc
#action {%1 замер%2 на месте} {...}
сработает, то в lyntin надо убрать пробел:
#action {%1 замер%2на месте} {...}

Подстановки во вложеных фигурных скобках не надо экранировать. Например если в jmc было
#alias {сумка} {#var {cont} {%%1};#showme {Теперь берем из $cont .}}
то в lyntin будет
#alias {сумка} {#var {cont} {%1};#showme {Теперь берем из $cont .}}

Зато при установке алиаса или триггера, если необходимо чтобы значение переменной подставлялось в момент срабатывания, то нужно ставить двойной доллар. В jmc:
#alias {вк} {взять %1 $cont}
в lyntin:
#alias {вк} {взять %1 $$cont}
кстати, в lyntin в этом алиасе полезно использовать форму, подставляющую все аргументы, начиная с заданного до конца строки:
#alias {вк} {взять %1: $$cont}
%1: означает все аргументы алиаса, начиная с первого. Тоесть при этом "вк 10 хлеб" будет нормально превращено в "взять 10 хлеб сумка".
Для того, чтобы при установке переменной не выводилась надоедливое сообщение про то, что переменная получила свое значение, следует добавлять в конец команды quiet=true. Например так:
#alias {сумка} {#var {cont} {%1};#showme {Теперь берем из %1.} quiet=true}
В  команде #if используется синтаксис python для написания условия проверки. Примеры:
#if {$hp < 100} {зачит возврат}
#if {'$name' == 'кирил'} {г привет кирюха!}
Следует помнить, что при подстановке, если переменная до этого ни разу не устанавливалась, то она будет развернута в пустую строку и будет выведено сообщение про синтаксическую ошибку. Не забывайте перед использованием переменных присваивать им начальное значение.
