Доброго вам всем дня, ночи или ещё чего-нибудь. Раз вы читаете эту статью, значит, вы хотите что-нибудь узнать о 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)". Он открывает настройки, связанные с игрой. Здесь поподробнее:
На русский язык обычно переводится как "псевдонимы". Скажем проще: сокращения. Очень удобно, чтобы не вводить часто повторяющиеся длинные команды. Пример: выражение "гг Я готов!" сокращаем до "ггг". Очень удобно, на мой взгляд.
Сокращения делаем так:
Нажимаем "Add(Добавить)" и вводим в поле "Name(Имя)" команду, которая должна служить сокращением (в нашем случае "ггг", без кавычек), строка с сокращением сразу же появится в таблице над полем ввода.
После этого в поле "Text(Текст)" пишем команду, которая должна выполняться (здесь "гг Я готов!", тоже без кавычек). Если используются разные группы, то можно выбрать одну в списке "Group" (о группах ниже).
Удалить ненужное сокращение можно кнопкой "Remove(Удалить)". После того, как новое сокращение будет записано, JMC занесёт его в конфигурационный файл и каждый раз при загрузке будет выдавать информацию о существующих сокращениях, наряду с другими объектами (Actions(Триггеры), Highlights(Подсветки), Groups(Группы), Hotkeys(Горячие клавиши)), показывая строку типа
# {ггг} now aliases {гг Я готов!} in [default] group
# {ггг} теперь работает как {гг Я готов!} в группе [default]
В основном сокращения используют для записи часто применяемых путей. То есть, чтобы не вводить каждый раз путь от двора до банка, можно сделать запись в "Aliases" (в поле "Name": "дв-банк", в поле "Text": "в;!;с;!;!;з;ю;з;с;баланс", ещё и баланс сразу покажется). Все сокращения можно писать непосредственно в set-файл.
Действия или триггеры — сценарии реакции на какое-либо событие в игре. Принцип записи тот же, что и в поле "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".)
Подсветка текста. В "Былинах", как и в каждом нормальном mud'е, текст подсвечивается в зависимости от его важности и пр. Но стандартных подсветок хватает не всегда. Иногда удобно подсвечивать имена или какие-нибудь важные события (например: ПЕРЕЗАГРУЗКА), чтобы случайно не пропустить их. Чтобы добавить подсветку пишем в поле "Pattern(Образец)" слово (фразу) для подсвечивания, а затем выбираем цвет текста "Foreground(Цвет)" и цвет фона "Background(Фон)" для него. Пример, думаю, не обязателен. Просто скажу, что у меня имена друзей подсвечиваются синим, имена врагов — красным, а слова "вы", "ваш", "ваша", "вам" и т.п. — жёлтым.
Если вы играете разными персонажами и/или на разных серверах, то удобно было бы настроить группы для объектов. Впоследствии эти группы можно будет выбрать в списке "Groups(Группы)" для различных типов объектов, чтобы те не перепутались.
Добавить группу — "Add(Добавить)", затем ввести имя группы.
Удалить группу — "Remove(Удалить)".
Тоже самое, что и "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 слово, то потом его можно будет вводить набрав первые несколько букв и нажав "Tab". Записываются слова либо непосредственно в файл "tabwords.txt" (в папке с JMC), либо через раздел "Keywords" меню "Options" (разделяются пробелом или новой строкой). Можно, например записать в Keywords социалы, команды или имена участников группы.
Для начала, думаю, хватит. Если что непонятно, спросите у кого-нибудь в игре ;)
Added by WorM
Помимо всего этого в JMC есть поддержка скрипт-языков VBScript/JScript/Perl/TCL и других. Чтобы подключить скрипты в JMC вам нужно в папочке Settings создать файл "Имя_конфига.scr" (или "commonlib.scr" — это файл скриптов для всех конфигов). И писать скрипты в этот файл.
Примечание: Начинайте писать со второй строки (в первой например можно разместить комментарий), первая строка скриптового файла не обрабатывается (по крайней мере не всегда обрабатывается).
Для начала убедитесь что в Options(Настройках) на Вкладке Scripting(Скрипты) Script language:(Язык скриптов:) установлено в JScript или JScript.Encode.
ПКлист на JavaScript.
Берем и пишем в commonlib.scr(6Кб)↓471
//-------------------------------------Тестим 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()');
Справка по пклисту командой "пкл_пом".
Created by WorM ©2006-2026
done in 0.02s