Поддержка
ActiveScript в JMC 3.*
Итак. JMC 3.0 отныне
поддерживает
active scripting. Что же
это? Это
значит, что
вы можете
использовать
скрипты, написанные
на “реальных” языках.
Но это не
значит, что
вы должны
писать на именно
одном
конкретном языке.
Технология ActiveScript позволяет
вам выбрать
язык. Microsoft Scripting включает 2 языка: JScript и VBScript. Также есть
несколько языковActiveScript от
третьих фирм:
PERL, TCL и
некоторые
другие. Вы
можете найти
эти языки в инете и
установить
не ваш
компьютер.
Почему
вам могут
понадобиться
эти языки? (для
ботинга, для
чегож еще
ж)) Если вы опытный
пользователь,
то вы знаете: скрыпт TinTin не дают
вам
возможности
работать с массивами,
обрабатывать
строки
проверять
сложные
условия (ну
точно для ботинга
J). В
общем, если
вам
необходим
инструмент
мощнее встроенного
скриптового
языка.
Почему бы
не использовать
другие MUD клиенты
с более
мощным
встроенным
языком ? Я тестил многие
из них – ни
один из них
не
предоставляет
действительно
мощных
средств. Вот
поэтому то я
и добавил
поддержку скриптов
в JMC.
Вступление.
Как оно
работает
Начинающим.
Каждый раз когда JMC стартует
или грузит
новый профайл,
оно
инициирует скриптовый
энжин. Скриптовые
языки могут
быть выбраны
в диалоге ‘Options”, закладка
“:Scripting”. JMC
загружает 2 2 файла со скриптами:
JMC парсит скрипты
из обоих файлов
и скриптовый
энжин
готов к
работе. Вы можете
в любое время
перестартовать
скриптовый
движок используя
команду
“Scripting/Reload
script”. Эта
команда
уничтожит
текущий
статус скрипта
и
перезагрузит
файл.
Вам
следует
понять
механизм парсинга.
Скрипты парсятся
и
выполняются. Что
это значит? Это
значит, что
часть кода
выполняется “inplace”. Чтото
вроде этого:
Var MyName = “jaba”;
Count =
11;
MsgBox (“We Starts !!!!);
Но определения
функций
“распарсены”
и сохранены в
энжине. Сейчас
энжин готов выполнить
функцию , но
не выполнит
пока не будет
вызвано:
Function KillEveryone(){
Taget_name = “all”;
}
После парсинга JMC добавит функцию
KillEveryone в пространство
имен и сейчас
вы можете вызвать
функцию в
любое время:
KillEveryone(); // Сейчас
переменная Taget_name содержит
строку “all”.
Как вызвать
функции, выполнить
выражения, добавить
новые
функции пока запущен JMC?
Существует
2 пути для
выполнения
части скриптового
кода. Первый –
команда #script. Но
так стоит
добавлять
простые и
примитивные скрипты. Вы
можете
добавить
новую часть кода
используя меню “Scripting”, диалог “Add scriptlet”. В этом
диалоге вы можене
написать и распарсить
сложный код
вроде этого:
Function k
(line) {
Jmc.send(“kill “ + line);
}
Этот диалог
может быть вызван
по кнопке Ctrl+1, кнопке тулбара или
через меню. Вы
можете
скрыть
диалог нажав ESC и
продолжить
работу в
любое время. Также, диалог хранит
весь введенный
вами код и оба
SCR файла.
Это полезно,
если нужно
найти некую
функцию и
поправить ее.
ПРЕРЫВАНИЕ
СКРИПТА. Иногда, нужно
прервать скрипт
( например,
изза
бесконечного
цикла). Вы можете сделать это командой
"Scripting/Break".
ВАЖНО. Чтобы не потерять
ваши скриптлеты,
добавленные через"Add scriptlet" диалог JMC автоматически
сохраняет все
скриптлеты,
добавленные в
текущей сессии
в Settings\union.scr файл
пока профиль
сохраняется. Так,
вы можете переместить
новые скриптлеты
в ваш <profile.scr> файл
позднее.
Как скрипты
взаимодействуют
с JMC , MUD и TinTin командами?
Вы
можете
создавать
функции,
переменные и тп в скрипте.
Но скриптовые
языки не
имеют
никаких
интерфейсных
функций. Нету
функций чтобы
вывести чтото,
запросить ввод,
работать с IP и
тп. Как же скрипт может
работать с JMC?
Есть
только один
путь сделать
это. Скриптовые
языки могут
использовать
“:objects” . Объект может
быть создан внутри
скрипта, при
помощи CreateObject или
GetObject функций (см.
рефы на
язык).Вы
можете
создать
любой объект
автоматизации
(OLE),
зарегистрированный
в вашей
системе. Например,
вы можете создать
объект “exel.document” и
работать с
ним. Но есть
несколько
предопределенных
объектов,
которые вы
можете
использовать
из языка. JMC поставляется
с одним
объектом,
взаимодействующим
с
интерфейсом JMC и
с
соединением
с MUD сервером. Это
объект “jmc”
“jmc” объект
предоставляет
методы,
свойства и вызывает
события. Вы
можете
использовать
их для взаимодействия
с JMC. Например,
эсли вы хотите
послать
строку
напрямую
серверу MUD сделайте
чтото
вроде:
jmc.send(“this text sending
to MUD right now”);
Полный список
объектов jmc в
след. параграфе.
Jmc представляет
функции для отображения
текста, для
отправления
сообщений
серверу MUD, для парсинга
команд TinTin, для
вычисления скриптлетов
и тд и тп.
События.
Что это и как
их применять?
Jmc представляет
функции для отображения
текста, для
отправления
сообщений
серверу MUD. Но
более важная цель
– отпарсить
строку пришедшую
от сервера MUD и строки введенные
юзверем. Вам
это нужно для
создания триггеров,
альясов, хайлайтов
и тд и тп.
Понятно,
вы можете использовать
TinTin триги для
работы со
входящим
текстом:
#action
{%1bashed%2} {#scri OnBashed(%0)}
Но это
неверный
путь.
JMC информирует
скрипты,
каждый раз
когда
произойдет
событие. События : текст от сервера,
текст введенный
юзером, таймер,
загрузка профайлов,
потеря связи,
установка
связи и тп.
Jmc объект
вызывает
события
каждый раз,
когда они
возникают. Сейчас,
вы сожжете управлять
событиями объекта
jmc в скриптах. ВНИМАНИЕ !!!! Есть 2
пути для управления
событиями. Пользователи
VBScriptдолжны лиш
создать
подпрограмму
с корректным
именем:
Sub Jmc_<Event_name>(<param>
End sub
ПРИМЕР:
Sub Jmc Incoming (line)
Jmc.Output «We got line from mud:» +
line, «red»
End sub
Сейчас, каждый
раз когда
строка
прибывает от
сервера ,
это ПП будет
вызвана.
Внимание !!!! ПП
перехвата события
ДОЛЖНА иметь
параметры как
у события jmc объекта. Для
получения полного
списка событий
прочтите след. параграф.
Пользователи
прочих
языков
должны регистрировать
события:
jmc.RegisterHandler(«event_name» , «script code»);
ПРИМЕР (Jscript):
Function OnIncoming()
{
Jmc.Output («We got line from mud:» +
line, «red»);
}
jmc.RegisterHandler(«Incoming» , «OnIncoming()»);
Исходящие
и входящие
события и их
параметры.
Jmc вызывает
событие Incoming каждый
раз, когда
текст
прибывает от
сервера. JMC вызывает
событие Input каждый
раз, когда юзер
вводит
строку. Очевидно, у вас должна быть возможность ИЗМЕНИТЬ эти строки. У вас должна
быть возможность
«гагнуть» входящие
строки, для прдотвращения
отображения, для
изменения введенной
строки и тд.
Вы можете
сделать это,
используя свойтво jmc Event и jmc метод
DropEvent.
В ЭТИХ 2Х
СОБЫТИЯХ свойство
jmc.Event содержит
строку. Вы можете
изменить ее и
JMC будет
работать с
измененной
строкой. Пример:
Function OnIncoming(){
Var line = jmc.Event;
If ( line.search («Johary» ) ) {
Line.replace ('Johary»
, «JOHARY THE EVIL MAN»);
Jmc.Event = line;
}
}
Сейчас слово
'Johary» будет
изменено на «JOHARY THE EVIL MAN» в
любой строке,
приходящей
от мада.
Function OnInput(){
if ( jmc.event == «aaa»
) {
jmc.showme(«Don’t type stupid aaa command!!!!!»);
jmc.DropEvent();
}
}
Сейчас во
всех случаях,
когда вы введете
строку «aaa» она не
будет
отправлена
серверу и
обработана скриптом тинтин JMC.
Поддержка отладки скриптов Jmc
JMC 3.0 предоставляет некоторую поддержку для отладки скриптов . Для выполнения этого откройте диалог
"Options/Scripts" и установите "Allow
debugger" ON. Потом перестартуйте жабу. После этого
отладчик будет
стартован каждый
раз, когда
возникнет
ошибка. Также,
вы можете запустить
отладчик и
установить
точки
останова, эсли
вам нужно оттрасировать
выполнение скрипта.
Для получения полного списка свойств, методов и событий объекта JMC прочитайте JMC object