Немного о конфигах и скриптах.

Автор : неизвестен
Подредактировал: WorM

Вместо предисловия

Доброго вам всем дня, ночи или ещё чего-нибудь. Раз вы читаете эту статью, значит, вы хотите что-нибудь узнать о JMC, я так понимаю... Если нет, то лучше сразу закройте это окно - в литературном плане сие повествование не представляет собой никакой ценности. Те же, кому действительно интересно, имейте в виду, что статья непрофессиональна и может научить чему-то разве что новичка, здесь нет ни слова о скриптах и прочих сложностях, только то, что поможет освоиться неопытному человеку.

Программа
Что собой представляет JMC (Jaba mud client)?

С виду - незамысловатое окно с консолью, немного напоминает irc-клиент (принцип действия, кстати, очень похож). Действительно вид неброский. Но главное не в этом (человеку, решившему поиграть в текстовую rpg, на красивость клиента, по идее, наплевать), а во всяких настройках, которые программа позволяет легко настроить "под себя". Скачать JMC можно с этого сайта, разработка русская, потому регистрации не требует. Всё нижеизложенное работает в версии 3.26, с более поздними версиями (если есть) совместимость должна быть 100%. Итак, скачиваем, ставим, запускаем и всё: "теперь можно откинуться на спинку кресла" и начать править разные скрипты и триггеры ;).
Настройки
Конфиги в JMC хранятся в двух видах файлов каждому *.set (набор настроек для отдельного персонажа/профы/мада) соответствует *.opt (общие настройки программы) который хранится в папке Settings, в котором есть строка "AutoLoadFile=имя_конфига.set".

Для настройки можно использовать как саму программу, так и файлы конфигурации, тут каждый решает сам.

Редактирование конфига вручную мы рассматривать не станем, остановимся пока на первом способе.

Меню
Всё просто: "File(Файл)", "Edit(Правка)", "View(Вид)", "Options(Опции)", "Scripting(Скрипты)", "Help(Справка)".

В меню "File" можно создать, загрузить или сохранить профиль (*.set), а также поставить клиент на паузу или выйти.

"Options", разумеется, открывает меню настройки программы.

"View" - и так ясно.

Главное здесь - меню "Edit", в нём только один пункт, "JMC Objects...(Объекты JMC)". Он открывает настройки, связанные с игрой. Здесь поподробнее:
Aliases(Алиасы)

На русский язык обычно переводится как "псевдонимы". Скажем проще: сокращения. Очень удобно, чтобы не вводить часто повторяющиеся длинные команды. Пример: выражение "гг Я готов!" сокращаем до "ггг". Очень удобно, на мой взгляд.

Сокращения делаем так:

Нажимаем "Add(Добавить)" и вводим в поле "Name(Имя)" команду, которая должна служить сокращением (в нашем случае "ггг", без кавычек), строка с сокращением сразу же появится в таблице над полем ввода.

После этого в поле "Text(Текст)" пишем команду, которая должна выполняться (здесь "гг Я готов!", тоже без кавычек). Если используются разные группы, то можно выбрать одну в списке "Group" (о группах ниже).

Удалить ненужное сокращение можно кнопкой "Remove(Удалить)". После того, как новое сокращение будет записано, JMC занесёт его в конфигурационный файл и каждый раз при загрузке будет выдавать информацию о существующих сокращениях, наряду с другими объектами (Actions(Триггеры), Highlights(Подсветки), Groups(Группы), Hotkeys(Горячие клавиши)), показывая строку типа

#   {ггг} now aliases {гг Я готов!} in [default] group
#   {ггг} теперь работает как {гг Я готов!} в группе [default]

В основном сокращения используют для записи часто применяемых путей. То есть, чтобы не вводить каждый раз путь от двора до банка, можно сделать запись в "Aliases" (в поле "Name": "дв-банк", в поле "Text": "в;!;с;!;!;з;ю;з;с;баланс", ещё и баланс сразу покажется). Все сокращения можно писать непосредственно в set-файл.

Actions(Триггеры)

Действия или триггеры - сценарии реакции на какое-либо событие в игре. Принцип записи тот же, что и в поле "Aliases".

Поле "Pattern(Образец)": слово (фраза), являющееся ключевым для активации триггера.

"Command(Команда)" - команды (команды через ";"), выполняемая при появлении содержимого поля "Pattern" на экране.

"Priority(Приор.)" - важность, чем меньше - тем важнее событие, события с большей важностью будут выполняться в первую очередь.

"Group(Группа)" - группа в которой будет храниться триггер(о группах чуть позже).

Пример: "Pattern" = "Пожалуй, Вам лучше встать на ноги", "Command" = "вст". Теперь вставать будем автоматически.

Это лучше сразу вписать в конфиг, чтобы не мучаться с регистрацией на сервере mud.ru:

#action {Select one :} {2} {5} {default}

#action {Представьтесь, пожалуйста :} {тут имя персонажа} {5} {default}

#action {Персонаж с таким именем уже существует. Введите пароль :} {тут пароль на персонажа} {5} {default}

#action {* В связи с проблемами} {#cr} {5} {default}

(Команда #cr равносильна нажатию "Enter".)

HighLights(Подсветки)

Подсветка текста. В "Былинах", как и в каждом нормальном mud'е, текст подсвечивается в зависимости от его важности и пр. Но стандартных подсветок хватает не всегда. Иногда удобно подсвечивать имена или какие-нибудь важные события (например: ПЕРЕЗАГРУЗКА), чтобы случайно не пропустить их. Чтобы добавить подсветку пишем в поле "Pattern(Образец)" слово (фразу) для подсвечивания, а затем выбираем цвет текста "Foreground(Цвет)" и цвет фона "Background(Фон)" для него. Пример, думаю, не обязателен. Просто скажу, что у меня имена друзей подсвечиваются синим, имена врагов - красным, а слова "вы", "ваш", "ваша", "вам" и т.п. - жёлтым.

Groups(Группы)

Если вы играете разными персонажами и/или на разных серверах, то удобно было бы настроить группы для объектов. Впоследствии эти группы можно будет выбрать в списке "Groups(Группы)" для различных типов объектов, чтобы те не перепутались.

Добавить группу - "Add(Добавить)", затем ввести имя группы.

Удалить группу - "Remove(Удалить)".

Hotkeys(Горячие клавиши)

Тоже самое, что и "Aliases", но не для команд (напр. "ггг"), а для сочетаний клавиш (напр. Ctrl-G).

Создаются не сложнее других объектов: ставим курсор в поле "Key(Клавиша)", затем нажимаем сочетание клавиш.

После этого вводим в поле "Text(текст)" команду, которая должна будет посылаться серверу при нажатии данной комбинации клавиш.

Пример: "Key" = Ctrl-Q, "Text" = постой;0.

Теперь при заходе на постоялый двор можно выйти из игры, нажав Ctrl-Q.

Удобно использовать Hotkeys для управления движением с клавиатуры:

NUM8 = север; NUM4 = запад; NUM2 = юг; NUM6 = восток; Ctrl-NUM2 = вниз; Ctrl-NUM8 = вверх и т.д.

Также можно использовать для переключения типа "лампа-меч":

Ctrl-A = убрать меч;держать лампа;

Ctrl-S = убрать лампа;держать меч

Keywords...(Ключевые слова...)

Ещё хочу рассказать о такой полезной штуке, как Keywords - слова для подстановки. Если записать в Keywords слово, то потом его можно будет вводить набрав первые несколько букв и нажав "Tab". Записываются слова либо непосредственно в файл "tabwords.txt" (в папке с JMC), либо через раздел "Keywords" меню "Options" (разделяются пробелом или новой строкой). Можно, например записать в Keywords социалы, команды или имена участников группы.

Для начала, думаю, хватит. Если что непонятно, спросите у кого-нибудь в игре ;)

Added by WorM
Scripts(Скрипты)
Помимо всего этого в JMC есть поддержка скрипт-языков VBScript/JScript/Perl/TCL и других. Чтобы подключить скрипты в JMC вам нужно в папочке Settings создать файл "Имя_конфига.scr"(или "commonlib.scr" - Это файл скриптов для всех конфигов). И писать скрипты в этот файл.

Примечание: Начинайте писать со второй строки(в первой например можно разместить комментарий), первая строка скриптового файла не обрабатывается(по крайней мере не всегда обрабатывается).

JavaScript(JScript)
Для начала убедитесь что в Options(Настройках) на Вкладке Scripting(Скрипты) Script language:(Язык скриптов:) установлено в JScript или JScript.Encode.
Scripts

ПКлист на JavaScript.

Берем и пишем в commonlib.scr(5.9 Кб)↓310
//-------------------------------------Тестим JavaScript---------------------------------------
var fso = new ActiveXObject('Scripting.FileSystemObject');
//Объект FileSystemObject обеспечивает доступ к файловой системе Windows.
var pkl_fname = 'Settings/pkl.txt';   //Путь к файлу с пклистом
var pkl_names = new Array();          //Массив с имена чаров из пклиста
var pkl_comms = new Array();          //Массив с комментариями
var pkl_count = 0;                    //Кол-во Человек в пклисте
var pkl_group = 'pkl';                //Группа для алиасов пклиста
var pkl_col = "light red,b white";    //Цвет которым подсвечивать чаров из пклиста
//-----------------------------Справка по пклисту----------------------------------------------
function pkl_help() {
  jmc.Showme('Справка по ПКлисту версии 1.3\n');
  jmc.Showme('\x1B[0;32mпкл_пом\x1B[0;0m                 - Вывод этой справки по пклисту');
  jmc.Showme('\x1B[0;32mпкл_адд\x1B[0;0m [имя] [коммент] - добавить чара [имя] в ПКлист');
  jmc.Showme('\x1B[0;32mпкл_рем\x1B[0;0m [имя]           - удалить чара [имя] из ПКлиста');
  jmc.Showme('\x1B[0;32mпкл\x1B[0;0m [первые буквы имен] - вывод чаров которые в ПКлисте');
  jmc.Showme('\x1B[0;32mпкл_загр\x1B[0;0m                - загрузка ПКлиста из файла');
  jmc.Showme('\x1B[0;32mпкл_сохр\x1B[0;0m                - сохранение ПКлиста в файл');
}
//-----------------------------Добавить в ПКлист-----------------------------------------------
function pkl_add(pk) {
  nam=pk.split(' ')[0];
  res=pk.substr(nam.length+1);
  var rx=/^\s*$/;
  if(rx.test(nam)==true) {
    jmc.Showme('Имя врага не может быть пустым!!!',pkl_col);
    return;
  }
  nam=nam.charAt(0).toUpperCase()+nam.substr(1).toLowerCase();
  if(pkl_count>0) {
    var t;
    for(t=0;t<pkl_count;t++) {
      if(nam.toLowerCase()==pkl_names[t].toLowerCase()) {
        jmc.Showme('ПКлист: персонаж '+pkl_names[t]+' уже в пклисте.',pkl_col);
        if(rx.test(res)==false) {
          pkl_comms[t]=res;
          jmc.Showme('Изменена причина.',pkl_col);
        }
        return jmc.Showme(pkl_comms[t],pkl_col);
      }
    }
  }
  pkl_names[pkl_count]=nam;
  pkl_comms[pkl_count]=res;
  jmc.Parse('враг '+pkl_names[pkl_count]);
  jmc.Showme('ПКлист: персонаж '+pkl_names[pkl_count]+' добавлен в пклист.',pkl_col);
  pkl_count++;
  pkl_save();
}
//------------------------------------Удалить из ПКлиста---------------------------------------
function pkl_remove(pk) {
  pk=pk.charAt(0).toUpperCase()+pk.substr(1).toLowerCase();
  if(pkl_count>0) {
    var t;
    for(t=0;t<pkl_count;t++) {
      if(pk.toLowerCase()==pkl_names[t].toLowerCase()) {
        for(var x=t;x<pkl_count-1;x++) {
          pkl_names[x]=pkl_names[x+1];
          pkl_comms[x]=pkl_comms[x+1];
        }
        pkl_count--;
        jmc.Parse('#unhi '+pk);
        jmc.Showme('ПКлист: персонаж '+pk+' удален из пклиста.',pkl_col);
        pkl_save();
        return
      }
    }
    jmc.Showme('ПКлист: персонаж '+pk+' не найден в пклисте.',pkl_col);
  }
}
//---------------------------------Вывести ПКлист----------------------------------------------
function pkl_show(nam) {
  var rx=/^\s*$/;
  if(nam!='' && rx.test(nam)==true) {
    jmc.Showme('Имя врага не может быть пустым!!!',pkl_col);
    return;
  }
  var c=0;
  nam=nam.toLowerCase();
  if(pkl_count>0) {
    var t;
    for(t=0;t<pkl_count;t++) {
      if(nam=='') {
        jmc.Showme(pkl_names[t]+'\x1B[0;0m '+pkl_comms[t],pkl_col);
      } else {
        if(pkl_names[t].substr(0,nam.length).toLowerCase()==nam) {
          jmc.Showme(pkl_names[t]+'\x1B[0;0m '+pkl_comms[t],pkl_col);
          c++;
        }
      }
    }
  }
  if(nam=='') {
    jmc.Showme("ПКлист: всего "+pkl_count+" человек в листе.",pkl_col);
  } else {
    jmc.Showme("ПКлист: всего "+c+" человек найдено по запросу листе.",pkl_col);
  }
}
//-------------------------------Загрузить ПКлист----------------------------------------------
function pkl_load() {
  jmc.Parse("#alias {враг} {#high {"+pkl_col+"}{\%\%0}} {"+pkl_group+"}");
  jmc.Parse("#alias {пкл_адд} {#s pkl_add('%0')} {"+pkl_group+"}");
  jmc.Parse("#alias {пкл_рем} {#s pkl_remove('%0')} {"+pkl_group+"}");
  jmc.Parse("#alias {пкл} {#s {pkl_show('%%0')}} {"+pkl_group+"}");
  jmc.Parse("#alias {пкл_сохр} {#s {pkl_save()}} {"+pkl_group+"}");
  jmc.Parse("#alias {пкл_загр} {#s {pkl_load()}} {"+pkl_group+"}");
  jmc.Parse("#alias {пкл_пом} {#s {pkl_help()}} {"+pkl_group+"}");
  jmc.Parse("#tabadd {пкл_загр}");
  jmc.Parse("#tabadd {пкл_сохр}");
  jmc.Parse("#tabadd {пкл_пом}");
  jmc.Parse("#tabadd {пкл_рем}");
  jmc.Parse("#tabadd {пкл_адд}");
  jmc.Parse("#tabadd {пкл}");
  jmc.Parse("#group global "+pkl_group);
  if(!fso.fileExists(pkl_fname)) {
    var p=fso.CreateTextFile(pkl_fname,true);
    p.Close();
  }
  var p=fso.OpenTextFile(pkl_fname);
  var s;
  pkl_count=0;
  while(!p.AtEndOfStream) {
    s=p.ReadLine();
    if(s.length>2) {
      pkl_names[pkl_count]=s.split(' ')[0];
      pkl_comms[pkl_count]=s.substr(s.split(' ')[0].length+1);
      jmc.Parse("враг "+pkl_names[pkl_count]);
      pkl_count++;
    }
  }
  jmc.Showme("ПКлист: загрузка окончена всего "+pkl_count+" человек в листе.",pkl_col);
  p.Close();
}
//-------------------------------Сортировка ПКлиста--------------------------------------------
function pkl_sort() {
  var a,b,c=0;
  for(a=0; a<pkl_count-1; a++) {
    for(b=a+1; b<=pkl_count-1; b++) {
      if(pkl_names[a].toLowerCase()>pkl_names[b].toLowerCase()) {
        tmp_name=pkl_names[b];
        tmp_comm=pkl_comms[b];

        pkl_names[b]=pkl_names[a];
        pkl_comms[b]=pkl_comms[a];

        pkl_names[a]=tmp_name
        pkl_comms[a]=tmp_comm;
      }
    }
  }
}
//-------------------------------Сохранить ПКлист----------------------------------------------
function pkl_save() {
  pkl_sort();
  var p=fso.CreateTextFile(pkl_fname,true);
  var t;
  for(t=0;t<pkl_count;t++) {
    p.WriteLine(pkl_names[t]+' '+pkl_comms[t]);
  }
  jmc.Showme("ПКлист: сохранение окончено всего "+pkl_count+" человек в листе.",pkl_col);
  p.Close();
}
jmc.RegisterHandler('Load','pkl_load()');
jmc.RegisterHandler('UnLoad','pkl_save()');      
Справка по пклисту командой "пкл_пом".
Valid HTML 4.01 Transitional Правильный CSS! Counter
Created by WorM ©2006-2017