Поддержка 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 файла со скриптами:

  1. settings\common.scr – Этот файл общий для всех профайлов. Это хорошее место, что бы хранить общие для всех профайлов скрипты. Например, спидволки, дейсвия при входе и тп.
  2. <settings\profile_name.scr> - скрипты, специфичные для данного профайла.

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.searchJohary» ) ) {

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