PDA

Просмотр полной версии : проблема с скриптами в жабе


Лехич
09.05.2006, 02:49
захотел я написать суперпродвинутые скрипты для жабы, и конешно не на его экшнах и алиасах, а на какомнить скриптовом движке типа JScript :)
Пытаюсь зайти во вкладку "скрипты" в настройках, и вылетает критическая ошибка... Переустановил жабу в другой каталог (эта у меня была не установлена, а просто скопирована...) (переустановил именно с инсталяшки), установил поверх апдейт до 3.27 и опять таже история. ПЫтаюсь открыть вкладку "скрипты" - жаба вылетает.
Подскажите че тут делать :(

Осьмой
09.05.2006, 06:15
и киданите еще желательно хелп по жавомским объектам для жаваскрипта! очень надо.

Devastator
09.05.2006, 18:24
Сам долго мучался над этой проблемой, кое что начал понимать. :)
Начнем по парядку писать FAQ, т.к часто встал встречаться данный вопрос.
Часть 1.
Для начала советую удалить жмс, кроме ваших конфигов.
Качаем нормальную JMC с http://jmc.mud.ru/install30.exe
Затем идем Опции/Настройки/Скрипты Выбираем язык скриптов JScript.Encode
Включаем отладку.

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

Небудем входить в подробности, а просто посмотрим, на примерах всеже легче понять )
- Тригер
function OnIncoming() {
if( jmc.Event=="Вы голодны." ) {
jmc.send("пит мех");
}
}
jmc.RegisterHandler("Incoming","OnIncoming()");

поясним что тут произошло.
Event – содержит параметр события объекта jmc.
Т.к из мада приходит строка. то мы должны зарегестрировать событие в функции как приходящие т.е Incoming.
jmc.RegisterHandler("событие" , "функция-обработчик");
А Send(text) – посылает текст-параметр напрямую в MUD. Без какой-либо обработки альясами.
Вот закончили с тригером.

-Алиас
function Alias(){
if(jmc.Event=="ac"){
jmc.showme("Алиас работает !!!!!");
jmc.DropEvent();
}
}
jmc.RegisterHandler("Input","Alias()");
так теперь у нас Event строка которую мы вводим, следовательно регестируем как Input
DropEvent - вводимая строка не будет обработана или послана серверу MUD

Devastator
09.05.2006, 18:51
Часть 2.
Теперь из справки что должно помоч неким образом.
Свойства объектов JMC

IsConnected – свойство только для чтения. True если JMC подключен к MUD серверу. False если нет.

Event – содержит параметр события объекта jmc. Для “Входящего” и “Ввода” событий содержит текущую обрабатываемую строку. Также, он содержит текущую строку пока вы вызываете скрипт из команды #action

Profile – возвращает имя текущего профайла. Только для чтения
CommandChar – возвращает управляющий символ TinTin. Только для чтения

Jmc object methods

[ShowMe (text, [color]) – печатает текст в основном окне JMC. Второй параметр опционален. Формат эквивалентен значению цвета для #highlight. Также, рекомендуется посмотреть команду #showme. Пример: jmc.Showme(“aaa”) jmc.Showme(“aaa”, “red”)

[COLOR="blue"]Send(text) – посылает текст-параметр напрямую в MUD. Без какой-либо обработки альясами.

Beep() – Звуковой сигнал. Аналогичен команде #bell.

Parse(command_text) – Парсит текст применяя JMC. Текст будет распарсен, как будто вы ввели его в командной строке клиента. Так, допустима обработка любых команд JMC. Примеры: jmc.Parse(“#alias pk {#var taget}”) jmc.Parse (“kill Pnuk”) jmc.Parse(“#scri MayProc()”)

Output(text, [color]) – выводит текст в окошко “output”. Второй параметр опционален, значения для цветов соответствуют команде #highlight. Пример: jmc.Output(“Wake up ! Time to kill ghitomir!!!”)

SetTimer([ID, Interval, LONG preInterval) –устанавливает новый таймер. После вызова этой функции JMC будет генерировать событие «таймер» каждые Interval/10 секунд и генерировать «Претаймер» событие каждые PreInterval/10 секунд. ID параметр для разделения различных таймеров. Timer/Pretimer события получают ID как параметр, так что вы можете иметь больше одного таймера в единицу времени. Вызов этой функции с таким же значением ID сбросит настройки таймера и установит новые интервалы для данного ID. Примеры:
Jmc.SetTimer(1, 600) – JMC будет генерировать событие таймера каждые60 секунд. “Timer” событие получает 1 как параметр. (Примечание. Коряво. 1 – это идентификатор создаваемого таймера. aZm.)
Jmc.SetTimer(2, 300, 50) – JMC будет создавать событие “Timer” каждые 30 секунд для таймера №2 и создавать событие “PreTimer” за 5 сек. до события “Timer”. Итак, сейчас вы можете перехватывать событие таймера каждые 60 и 30 секунд.

KillTimer([ID) – удаляет таймер с идентификатором ID. JMC прекратит генерировать события timer/Pretimer для данного ID.

RegisterHandler(EventName, Code) – этот метод применяется для отличных от Vbscipt языков. Только язык Vbscript предоставляет поддержку по умолчанию для событий, создаваемых объектами. Во всех прочих языках (типа Jscript, PERL и тд) вы должны вызывать этот метод для получения событий от JMC. Примеры:
Jmc.RegisterHandler(“Incoming” , “OnIncoming()”);

Jmc.RegisterHandler(“Timer”, “OnTimer()”);

Connect(Address, Port)- заставляет жабу конектиться к указанному серверу.

DropEvent()- в событиях “Incoming” и “Input” заставляет JMC не обрабатывать строку. Оба события срабатывают ДО парсинга жабой. Т.е. каждая строка, приходящая от MUD вызывает событие “Incoming”, потом обрабатывается JMC. Если вы вызовете DropEvent в течении события Incoming эта строка будет загагана и не обработана JMC. Для вводимых строк JMC вызывает событие “Input”. ЕСЛИ DropEvent вызван, вводимая строка не будет обработана или послана серверу MUD. Также, если вы вызовете этот метод пока выполняется некое действие, это заставит JMC игнорировать эту строку не отобразит ее. .

Disconnect() – отключает жабу от сервера.

SetHotkey([Key, Command) – определяет новый хоткей для JMC. Формат хоткея аналогичен команде #hotkey

SetStatus([StatusNum, Text, bstrColor) – Записывает текст в статусную ячейку.Аналог #status

SetVar(VarName, Value, bGlobal) – устанавливает значение переменой
жабы. Пример: jmc.SetVar(“food”, “bread”) jmc.SetVar(“weapon”, “sword”, true).

GetVar(VarName,) – возвращает значение переменной жабы. пример: food = jmc.getvar(“food”);

Типы событий жабы

Connected – срабатывает при коннекте на удаленный сервак.

ConnectLost – срабатывает на утрату связи с сервером.

Incoming – срабатывает при получении строки от сервера MUD. Свойство Event содержит строку (вместе с ANSY символами)

Input – вызывается, как только осуществлен ввод с клавиатуры в командной строке. Свойство Event содержит командную строку.

Timer – вызывается при достижении значения, определенного при помощи метода SetTimer. Свойство Event содержит ID таймера.

PreTimer – вызывается за PreInterval/10 секунд до события Timer, определенного при помощи метода SetTimer. Свойство Event содержит ID таймера.

Disconnected – срабатывает на линкдроп по запу.

Load – срабатывает при рестарте скриптового движка (загрузка нового профиля)

Unload – срабатывает при закрытии скриптового движка – выгрузка профайла или рестарт скрипта.

Devastator
09.05.2006, 19:24
Часть 3.
Примеры.
1. Запись чара в пклист.
function Addpklist(name,why)
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var file = fso.OpenTextFile("pklist.txt",8);
file.WriteLine(""+Date()+"" + name + " : " +why+".");
file.Close();
}
для этого в папке JMC должен быть создан фаил pklist.txt
для того чтобы вызвать функцию допустим создаем алиас
#al {+пкл} {#s Addpklist("%1";"%%2")}т.е вводим +пкл Вася убийца и в файл добавляеться запись
для просмотра пишем другой скрипт:
function Pklist(name)
{
var s='';
var fso = new ActiveXObject('Scripting.FileSystemObject');
var p = fso.OpenTextFile("pklist.txt");
while(!p.AtEndOfStream)
{
s = p.ReadLine();
if(s.match(name) != null)
jmc.Showme(s);
}
p.Close();
}

и пишем алиас #al {мойпкл} {#s Pklist("%0")} теперь если мы просто введем мойпкл то нам выведеться весь фаил. а если введем допустим мойпк вас нам выведеться все строки где содержиться слово или часть слова "вас".

2. Проигрывание звуковых файлов.
Пришлось чуток помучаться дабы облегчить как-то себе жизнь и вот что получилось
1 скрипт это создание плейлиста
function Playlist() {
var o = new ActiveXObject("Scripting.FileSystemObject");
var d = o.getFolder("E:\\Музыка\\System of A Down\\"); --тут указы
var e = new Enumerator(d.Files); вается где
var WShell = new ActiveXObject("WScript.Shell"); лежат звук.файл
var i = 0,a = new Array();
while (!e.atEnd()) {
a[i] = e.item().name;
++i;
e.moveNext()
};
var puk = i;
jmc.showme("---====Плейлист====---");
for(i = 0; i < puk; i++) {
jmc.showme(""+i+":"+a[i], 15);
jmc.setvar("music"+i+"", a[i])
};}

создаем алиас который будет вызывать функцию
#al {плейлист} {#s Playlist()} теперь при вводе плейлист нам будет выводиться наш плейлис
И второй скрипт:
function play(numb){
var WShell = new ActiveXObject("WScript.Shell");
WShell.Run("MPLAY32 /play /close E:\\Музыка\\System of A Down\\"+numb+" ", 0);
}и пишем алиас #al {плей} {#s function(%0)}
теперь при вводе допустим плей 1 он нам будет проигрывать файл из плейлиста стоящий под номером 1.

На этом пока хватит.

Лехич
09.05.2006, 23:03
скачал ещераз жабу по предложенной ссылке. установил. результат нулеой: тоже при попытке перехода в вкладку scripts хр пишет "обнаружена ошибка. программа будет закрыта" и предлагает ессесна отправить отчет билли. :( в чем может быть трабл? хр с 1
сервиспаком

Devastator
09.05.2006, 23:53
*дум
попробуй винду переустановить. этот метот всегда помогает.

Лехич
10.05.2006, 09:21
классный метод. но винду переустанавливать мне не охота, я думаю понятно почему. я уж обустроился в ней :) мож е еще какой метод? е еще какиенить проги, юзающие движки скриптов? *дум мож наних мона протестить - глюк жабы это или глюк винды

Осьмой
10.05.2006, 14:10
ээ ладно приступил к прочтению! ща попытаемся ченибудь понять! ...
пасябо!

Devastator
11.05.2006, 16:42
Мб будет еще полезно комуниб выложоить regexp.
Специальные символы и шаблоны используются для написания шаблонов по регулярным выражениям.
Следующая табличка описывает символы, применяемые в регэкспах с короткими примерами.

Символ
Описание

\
Отмечает следующий символ как специальный./n/соответствует символу "n". Последовательность/\n/соответствует linefeed (хз что это) или символу новой строки.

^
Соответствует началу ввода или входящей строки.

$
Соответствует концу ввода или входящей строки.

*
Соответствует предшествующему символу 0 или более раз. /zo*/ соответствует как "z" так "zoo."

+
Соответствует предшествующему символу 1 или более раз. /zo*/ соответствует "zoo." но не "z"

?
Соответствует предшествующему символу 1 или 0 раз. /a?ve?/ соответствует "ve" в "never."

.
Соответствует любому символу, кроме символа новой строки.

(pattern)
Проверяет соответствие pattern и запоминает соответствие. Сравниваемая подстрока может быть получена из переменных %0-%9. Для сравнения с символами скобок ( ), применяйте "\(" или "\)".

x|y
Сответствует либо x либо y. /z|food?/ соответствуе "zoo" или "food."

{n}
n – неотрицательное целое. Соответствует точно n раз. /o{2}/ не соответствует "o" в "Bob," однако соответствует первым 2м o в "foooood."

{n,}
n – неотрицательное целое. Соответствует хотябы n раз. /o{2,}/ не соответствует "o" в "Bob," однако соответствует всем o в "foooood." /o{1,}/ эквивалентно /o+/.

{n,m}
m и n – неотрицательные целые. Соответствует хотябы n и не более m раз. /o{1,3}/ соответствует первым 3 o в "fooooood."

[xyz]
Набор символов. Соответствует любому из заключенным в скобки символов. /[abc]/ соответствует "a" в "plain."

[^xyz]
“отрицательный” набор символов. Соответствует любому не включенному в скобки символу. /[^abc]/ соответствует "p" в "plain."

\b
Соответствует разделителю слов, такому как пробел. /ea*r\b/ соответствует "er" в "never early."

\B
Соответствует ээээээ несловесному (?!) nonword разделителю. /ea*r\B/ соответствует "ear" в "never early."

\d
Соответствует цифровому символу. Эквивалентно [0-9].

\D
Соответствует нецифровому символу. Эквивалентно [^0-9].

\f
Соответствует form-feed символу.

\n
Соответствует linefeed символу.

\r
Соответствует символу возврат каретки.

\s
Соответствует любому пустому пространству а-ля пробел, табуляция и тп. Эквивалентно [ \f\n\r\t\v]

\S
Соответствует любому непустому пространству. Эквивалентно [^ \f\n\r\t\v]

\t
Соответствует табуляции.

\v
Соответствует символу вертикальной табуляции.

\w
Соответствует любому (словесному?) символу, включая подчеркивание. Аналогично [A-Za-z0-9_].

\W
Соответствует любому (несловесному?) символу. Аналогично [^A-Za-z0-9_].

/n/
Соответствует n, где n 8ное, 16ное, или десятичное значение ESC последовательности. Это возможность вставить ASCII коды (цвета и тп) в регэкспы.

Пример:

/^You (massacres|hits|bruises|slashes|blugeons) (.+) (very hard|hard|extremly hard)*( with your slash)*/

Даст совпадения на строках: «You massacres dragon with your slash» «You blugeons dragon very hard» «You blugeons dragon hard» итп.

Glushko
13.05.2006, 21:40
Мб будет еще полезно комуниб выложоить regexp.
Специальные символы и шаблоны используются для написания шаблонов по регулярным выражениям.
Следующая табличка описывает символы, применяемые в регэкспах с короткими примерами.

Символ
Описание

\
Отмечает следующий символ как специальный./n/соответствует символу "n". Последовательность/\n/соответствует linefeed (хз что это) или символу новой строки.

^
Соответствует началу ввода или входящей строки.

$
Соответствует концу ввода или входящей строки.

*
Соответствует предшествующему символу 0 или более раз. /zo*/ соответствует как "z" так "zoo."

+
Соответствует предшествующему символу 1 или более раз. /zo*/ соответствует "zoo." но не "z"

?
Соответствует предшествующему символу 1 или 0 раз. /a?ve?/ соответствует "ve" в "never."

.
Соответствует любому символу, кроме символа новой строки.

(pattern)
Проверяет соответствие pattern и запоминает соответствие. Сравниваемая подстрока может быть получена из переменных %0-%9. Для сравнения с символами скобок ( ), применяйте "\(" или "\)".

x|y
Сответствует либо x либо y. /z|food?/ соответствуе "zoo" или "food."

{n}
n – неотрицательное целое. Соответствует точно n раз. /o{2}/ не соответствует "o" в "Bob," однако соответствует первым 2м o в "foooood."

{n,}
n – неотрицательное целое. Соответствует хотябы n раз. /o{2,}/ не соответствует "o" в "Bob," однако соответствует всем o в "foooood." /o{1,}/ эквивалентно /o+/.

{n,m}
m и n – неотрицательные целые. Соответствует хотябы n и не более m раз. /o{1,3}/ соответствует первым 3 o в "fooooood."

[xyz]
Набор символов. Соответствует любому из заключенным в скобки символов. /[abc]/ соответствует "a" в "plain."

[^xyz]
“отрицательный” набор символов. Соответствует любому не включенному в скобки символу. /[^abc]/ соответствует "p" в "plain."

\b
Соответствует разделителю слов, такому как пробел. /ea*r\b/ соответствует "er" в "never early."

\B
Соответствует ээээээ несловесному (?!) nonword разделителю. /ea*r\B/ соответствует "ear" в "never early."

\d
Соответствует цифровому символу. Эквивалентно [0-9].

\D
Соответствует нецифровому символу. Эквивалентно [^0-9].

\f
Соответствует form-feed символу.

\n
Соответствует linefeed символу.

\r
Соответствует символу возврат каретки.

\s
Соответствует любому пустому пространству а-ля пробел, табуляция и тп. Эквивалентно [ \f\n\r\t\v]

\S
Соответствует любому непустому пространству. Эквивалентно [^ \f\n\r\t\v]

\t
Соответствует табуляции.

\v
Соответствует символу вертикальной табуляции.

\w
Соответствует любому (словесному?) символу, включая подчеркивание. Аналогично [A-Za-z0-9_].

\W
Соответствует любому (несловесному?) символу. Аналогично [^A-Za-z0-9_].

/n/
Соответствует n, где n 8ное, 16ное, или десятичное значение ESC последовательности. Это возможность вставить ASCII коды (цвета и тп) в регэкспы.

Пример:

/^You (massacres|hits|bruises|slashes|blugeons) (.+) (very hard|hard|extremly hard)*( with your slash)*/

Даст совпадения на строках: «You massacres dragon with your slash» «You blugeons dragon very hard» «You blugeons dragon hard» итп.

Чето парагон какой-то!

Ележор
14.05.2006, 12:45
Чето парагон какой-то!

Вот удивляюсь я... Казалось бы, не понимаешь ты ответа на вопрос -- ну так сиди тихо, разбирайся, если тебе это нужно, или забей, если не нужно. Нет, зачем-то обязательно надо сообщить всем, что ты ничего не понял :).

Devastator
24.05.2006, 22:08
Еще примеры нужны или нет ? Всем все понятно ?

Elron
31.05.2006, 03:46
давай еще, будут нелишними

Гурик
31.05.2006, 10:00
Еще примеры нужны или нет ? Всем все понятно ?
понятно не все но многое... будет еще куча вопросов с моей стороны =)

2Девостатор : если не страшно то сунь свою аську мне в личку, потрещим по поводу скриптинга и т.д

Devastator
02.06.2006, 16:53
Раз просили поделюсь )) и поясню
Гдето раньше Worm уже вкладывал перехват тело, ну вот выложу тоже самое ну чуть доработанное )) в доработке помогла Зиля

var CNRM = "\x1B[0;0m";
var CBLK = "\x1B[0;30m";
var CRED = "\x1B[0;31m";
var CGRN = "\x1B[0;32m";
var CYEL = "\x1B[0;33m";
var CBLU = "\x1B[0;34m";
var CMAG = "\x1B[0;35m";
var CCYN = "\x1B[0;36m";
var CWHT = "\x1B[0;37m";
var CNUL = "";

var BBLK = "\x1B[1;30m";
var BRED = "\x1B[1;31m";
var BGRN = "\x1B[1;32m";
var BYEL = "\x1B[1;33m";
var BBLU = "\x1B[1;34m";
var BMAG = "\x1B[1;35m";
var BCYN = "\x1B[1;36m";
var BWHT = "\x1B[1;37m";

var BKBLK = "\x1B[40m";
var BKRED = "\x1B[41m";
var BKGRN = "\x1B[42m";
var BKYEL = "\x1B[43m";
var BKBLU = "\x1B[44m";
var BKMAG = "\x1B[45m";
var BKCYN = "\x1B[46m";
var BKWHT = "\x1B[47m";

function CaptureTells()
{
var tmp=jmc.Event;
var tely=/\[1;36m([А-Яа-я]+|Кто-то) сказал[а]? Вам : '(.+)'$/;
var ytel=/\[1;36mВы сказали ([А-Яа-я]+|Кому-то) : '(.+)'$/;
var gtel=/^(\[0;32m\d+H\[0;37m \[0;32m\d+M\[0;37m (\?\?\?|\d+о) Зауч\:.+> )?([А-Яа-я]+|Кто-то) сообщил[а]? группе : '(.+)'$/;
var ygtel=/^(\[0;32m\d+H\[0;37m \[0;32m\d+M\[0;37m (\?\?\?|\d+о) Зауч\:.+> )?Вы сообщили группе : '(.+)'$/;
var gdtel=/^(\[0;32m\d+H\[0;37m \[0;32m\d+M\[0;37m (\?\?\?|\d+о) Зауч\:.+> )?([А-Яа-я]+) дружине: \[1;31m'(.+)'.\[0;37m$/;
var gstel=/^(\[0;32m\d+H\[0;37m \[0;32m\d+M\[0;37m (\?\?\?|\d+о) Зауч\:.+> )?([А-Яа-я]+) союзникам: \[1;32m'(.+)'.\[0;37m$/;
if(tely.test(tmp)==true)
{
res = tely.exec(tmp);
if((res[1]!='Кузнец') && (res[1]!='Умелец') && (res[1]!='Скорняк') && (res[1]!='Трактирщик') && (res[1]!='Травник') && (res[1]!='Индус') && (res[1]!='Пленник') && (res[1]!='Пекарь') && (res[1]!='Торговец') && (res[1]!='Подмастерье'))
{
jmc.Output(""+BYEL+"$TIME | "+CWHT+" "+res[1]+" Вам : "+BCYN+"'"+res[2]+"'");
Tells(""+BYEL+Date()+" | "+CWHT+" "+res[1]+" Вам : "+BCYN+"'"+res[2]+"'");
}
}
if(ytel.test(tmp)==true)
{
res = ytel.exec(tmp);
jmc.Output(""+BYEL+"$TIME | "+CWHT+" Вы "+res[1]+" : "+BCYN+"'"+res[2]+"'");
Tells(""+BYEL+Date()+" | "+CWHT+" Вы "+res[1]+" : "+BCYN+"'"+res[2]+"'");
}
if(gtel.test(tmp)==true)
{
res = gtel.exec(tmp);
jmc.Output(""+BYEL+"$TIME | "+CWHT+" "+res[3]+" группе : "+BWHT+"'"+res[4]+"'");
Tells(""+BYEL+Date()+" | "+CWHT+" "+res[3]+" группе : "+BWHT+"'"+res[4]+"'");
}
if(ygtel.test(tmp)==true)
{
res = ygtel.exec(tmp);
jmc.Output(""+BYEL+"$TIME | "+CWHT+" Вы группе : "+BWHT+"'"+res[3]+"'");
Tells(""+BYEL+Date()+" | "+CWHT+" Вы группе : "+BWHT+"'"+res[3]+"'");
}
if(gdtel.test(tmp)==true)
{
res = gdtel.exec(tmp);
jmc.Output(""+BYEL+"$TIME | "+CWHT+" "+res[3]+" дружине : "+BRED+"'"+res[4]+"'");
Tells(""+BYEL+Date()+" | "+CWHT+" "+res[3]+" дружине : "+BRED+"'"+res[4]+"'");
}
if(gstel.test(tmp)==true)
{
res = gstel.exec(tmp);
jmc.Output(""+BYEL+"$TIME | "+CWHT+" "+res[3]+" союзникам :"+BGRN+" '"+res[4]+"'");
Tells(""+BYEL+Date()+"| "+CWHT+" "+res[3]+" союзникам :"+BGRN+" '"+res[4]+"'");
}
}

jmc.RegisterHandler("Incoming","CaptureTells()");


function Tells(name)
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var file = fso.OpenTextFile("tells.txt",8);
file.WriteLine(""+name+"");
file.Close();
}

Devastator
02.06.2006, 17:12
Терь разберемся что тут происходит
var tely=/\[1;36m([А-Яа-я]+|Кто-то) сказал[а]? Вам : '(.+)'$/;
var ytel=/\[1;36mВы сказали ([А-Яа-я]+|Кому-то) : '(.+)'$/;
var gtel=/^(\[0;32m\d+H\[0;37m \[0;32m\d+M\[0;37m (\?\?\?|\d+о) Зауч\:.+> )?([А-Яа-я]+|Кто-то) сообщил[а]? группе : '(.+)'$/;
var ygtel=/^(\[0;32m\d+H\[0;37m \[0;32m\d+M\[0;37m (\?\?\?|\d+о) Зауч\:.+> )?Вы сообщили группе : '(.+)'$/;
var gdtel=/^(\[0;32m\d+H\[0;37m \[0;32m\d+M\[0;37m (\?\?\?|\d+о) Зауч\:.+> )?([А-Яа-я]+) дружине: \[1;31m'(.+)'.\[0;37m$/;
var gstel=/^(\[0;32m\d+H\[0;37m \[0;32m\d+M\[0;37m (\?\?\?|\d+о) Зауч\:.+> )?([А-Яа-я]+) союзникам: \[1;32m'(.+)'.\[0;37m$/;

Здесь мы придаем переменным регулярные выражения
Регулярные выражения представляют собой образцы для поиска заданных комбинаций символов в текстовых строках (такой поиск называется сопоставлением с образцом).
Регулярное выражение не может быть пустым: два символа // подряд задают начало комментария. Поэтому для задания пустого регулярного выражения используйте выражение /.?/.


также нам встричается Tells() - это процедура которыю мы создали
function Tells(name)
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var file = fso.OpenTextFile("tells.txt",8);
file.WriteLine(""+name+"");
file.Close();
}
это процедура, она записывает в фаил tells.txt при этом этот фаил уже должен быть в папке JMC
ну для просмотра мы пользуемся темже скриптом что и для просмотра пкл(см. выше)

Гурик
08.06.2006, 01:58
хорошая штука
а теперь можно это сделать что бы по запросу аляса скаже "вспвсе"
выводилось эко или шоуми всех теллов за последние скажем 9 часов.
причем разными цветами :rolleyes: :)

Devastator
09.06.2006, 06:38
можно тока блин сессия идет, мама клавиатуру отобрала а экранной я медленно печатаю:)

Devastator
17.06.2006, 13:13
Ща стала актуальна тема казино в маде так вот
нашел статейку
Поговорим немного о совсем необязательных, но весьма приятных штуках, которые позволяет написать JS. Допустим у Вас много свободного времени, когда Вам нечем заняться. Можно ведь попробовать развлечь себя и других, ведя какую-нибудь из старых добрых игр =) Например, наперстки. Если мне не изменяет память, то правила такие: берутся 3 наперстка, под один кладется горошина, потом наперсти двигают, а игроки угадывают, под каким же лежит горошина. Сие можно делать руками, но это не наш путь. Напишем простой скриптик, используя генератор случайных чисел, но сначала триггеры.

#var startgame 0

#action {произносит: 'Поехали!'} {#if {$startgame != 1} {#scri start_thimble()}} {games}
#action {/^(\w+) произносит: '1'$/} {#if {$startgame == 1} {#scri check_thimble(1, "$0")}} {games}
#action {/^(\w+) произносит: '2'$/} {#if {$startgame == 1} {#scri check_thimble(2, "$0")}} {games}
#action {/^(\w+) произносит: '3'$/} {#if {$startgame == 1} {#scri check_thimble(3, "$0")}} {games}
#action {дает тебе %0 золотых.} {#scri get_gold(%0)} {games}

Триггеры все примитивные. Чтобы начать игру кто-то должен сказать "Поехали!", также группа триггеров "games" должна быть включена (#group enable games). Теперь сам скрипт.

var readygame = 0;
var thimble = 0;

function start_thimble() {
if (readygame <= 0) {
jmc.send("say Дня начала игры дайте мне 20 голда");
}
else {
readygame = readygame - 1;
jmc.SetVar("startgame", "1");
randomize_thimble();
}
}

function get_gold(num) {
num = parseInt(num);
if (num >= 20) {
num = num / 20;
num = parseInt(num);
readygame = readygame + num;
jmc.send("nod");
}
else {
jmc.send("say Not enough :)");
}
}

function randomize_thimble() {
var a = 0;
a = Math.random();
a = a*100;
a = parseInt(a);
a = a%3;

if (a == 0) {
jmc.send("emo кладет горошину под первый наперсток.");
thimble = 0;
}
if (a == 1) {
jmc.send("emo кладет горошину под второй наперсток.");
thimble = 1;
}
if (a == 2) {
jmc.send("emo кладет горошину под третий наперсток.");
thimble = 2;
}

for (i = 0; i < 10; i++) {
a = Math.random();
a = a*1000;
a = parseInt(a);
a = a%2;

if (thimble == 0) {
if (a == 0) {
thimble = 1;
jmc.send("emo передвигает все наперстки на один.");
}
if (a == 1) {
thimble = 2;
jmc.send("emo меняет местами крайние наперстки.");
}
}
else if (thimble == 1) {
if (a == 0) {
thimble = 0;
jmc.send("emo хитрым движением передвигает средний и крайний наперстки.");
}
if (a == 1) {
thimble = 2;
jmc.send("emo передвигает средний и крайний наперстки.");
}
}
else {
if (a == 0) {
thimble = 1;
jmc.send("emo быстро шевелит руками, передвигая все наперстки на один.");
}
if (a == 1) {
thimble = 0;
jmc.send("emo меняет местами крайние наперстки.");
}
}
}

jmc.send("say Где же горошина?");
a = thimble + 1;
jmc.showme("Горошина:" + a + " наперсток");
}

function check_thimble(num, name) {
a = num - 1;
if (a == thimble) {
thimble = -1;
jmc.send("emo поднимает указанный наперсток... Вот она горошинка!");
jmc.send("say You win, " + name + "!");
a = Math.random();
a = a + 1;
count = 20 * a;
count = parseInt(count);
jmc.send("giv " + count + " gold " + name);
jmc.SetVar("startgame", "0");
}
else {
a = thimble;
thimble = -1;
jmc.SetVar("startgame", "0");
if (a == 0) {
jmc.send("emo поднимает указанный наперсток... Пусто \:\(");
jmc.send("emo поднимает первый наперсток... Удача была так близка \:\)");
jmc.send("say " + name + ", Вы проиграли! Она была под первым наперстком.");
}
if (a == 1) {
jmc.send("emo поднимает указанный наперсток... Пусто \:\(");
jmc.send("emo поднимает второй наперсток... Удача была так близка \:\)");
jmc.send("say " + name + ", Вы проиграли! Она была под вторым наперстком.");
}
if (a == 2) {
jmc.send("emo поднимает указанный наперсток... Пусто \:\(");
jmc.send("emo поднимает третий наперсток... Удача была так близка \:\)");
jmc.send("say " + name + ", Вы проиграли! Она была под третим наперстком.");
}
}
}

Начнем по порядку. readygame - вспомогательная переменная, в ней мы будем хранить количество оплаченных игр (зачем же давать играть на халяву?:)). thimble - переменная, которая хранит значение наперстка, под которым лежит горошина. thimble_start() начинает игру, если есть оплаченные игры, если их нету - она просит денег. get_gold() проверяет достаточно ли Вам дали денег, и если дали более 20, то, при условии, что хватит на пару игр, прибавляет эти самые игры. Мы подошли к самому интересному - к генератору - randomize_thimble() :) Записываем в переменную a случайное число в интервале от 0 до 1 с помощью стандартной функции языка Math.random(), далее у нас три варианта под какой наперсток положить, берем остаток от деления a на 3, т.е. получаем целое число от 0 до 2 - это и будет наш наперсток, куда мы положим горошину. Далее "мешаем" наперстки с помощью того же рандома. У нас есть всегда 2 варианта, куда можно подвинуть, проверяем куда нельзя и двигаем туда, куда можно (хорошая фраза получилась). Так мы поступаем 10 раз, скрипт показывает Вам, под каким наперстком лежит горошина. Ждем ответа от игроков просто say'ем (say 1 или say 2 или say 3). Вступает в работу функция check_thimble(), которая просто проверяет угадал игрок или нет. Если он угадал, ему выдается заслуженная награда в размере от 20 до 40 голда. Все честно:) На мой взгляд, это достаточно объемистый пример, но хорошо иллюстрирующий те или иные возможности языка.

Ps чесно взято с www.df2.ru

Яруго
17.07.2006, 09:56
Раз просили поделюсь )) и поясню
Гдето раньше Worm уже вкладывал перехват тело, ну вот выложу тоже самое ну чуть доработанное )) в доработке помогла Зиля
[/COLOR]

Прикрутил вышеописанный *перехват телов* в редакции Devastator к своему конфигу, все работает, очень понравилось, НО клиент стал тормозить со страшной силой. :(
В связи с этим вопрос - проблема в настройках моего клиента или это *плата* за удобства?

Спасибо за внимание.

lexik
17.07.2006, 23:59
скорее второе - регэкспы в ява скриптах очень тормозные как вариант прикрутить к жабе актив перл, а еще лучше просто перейти на ммц ;)

Яруго
18.07.2006, 09:28
скорее второе - регэкспы в ява скриптах очень тормозные как вариант прикрутить к жабе актив перл, а еще лучше просто перейти на ммц ;)

К сожалению ниразу не програмист :( перл - не мой родной язык *сож.
В связи с этим переход на ммц мне заказан :mad:

Спасибо за внимание

lexik
18.07.2006, 20:59
если ты могешь разобраться с яваскриптом чтобы обрабатывал то что тебе нужно, то язык скриптов ммц тебе по сложности как выпускнику задачи из первого класса... если считаешь, что там нужно быть зубром перла, то я тебя огорчу... там главное знать что тебе нужно и иногда уметь пользоваться гуглем или яндексом

Saydus
22.07.2006, 21:06
что такое скрипты обьясните пожайлуста!

ludomir
24.07.2006, 08:51
Скрипт - программа, содержащая набор инструкций для некоторых приложений или утилит. Семантика и синтаксис инструкций в скриптах определяются соответствующими приложениями. Обычно язык скриптов включает простые структуры управления: линейные последовательности, циклы и условные выражения.

Tejko
24.07.2006, 10:03
палюбому выдрал из словаря (причем электронного:))

WorM
20.08.2006, 04:15
захотел я написать суперпродвинутые скрипты для жабы, и конешно не на его экшнах и алиасах, а на какомнить скриптовом движке типа JScript :)
Пытаюсь зайти во вкладку "скрипты" в настройках, и вылетает критическая ошибка... Переустановил жабу в другой каталог (эта у меня была не установлена, а просто скопирована...) (переустановил именно с инсталяшки), установил поверх апдейт до 3.27 и опять таже история. ПЫтаюсь открыть вкладку "скрипты" - жаба вылетает.
Подскажите че тут делать :(

Если у тебя винда 2000 или 98 обязательно чтоб все корректно в жабе работало надо IE6 ставить.

Devastator
21.08.2006, 23:32
Прикрутил вышеописанный *перехват телов* в редакции Devastator к своему конфигу, все работает, очень понравилось, НО клиент стал тормозить со страшной силой. :(
В связи с этим вопрос - проблема в настройках моего клиента или это *плата* за удобства?


Кому тока не прикручивал этот перехват, ни у кого не тормозит, странно

WorM
25.08.2006, 06:26
Прикрутил вышеописанный *перехват телов* в редакции Devastator к своему конфигу, все работает, очень понравилось, НО клиент стал тормозить со страшной силой.
В связи с этим вопрос - проблема в настройках моего клиента или это *плата* за удобства?

Спасибо за внимание.

Кстати что у тебя за комп, у меня например даже на P1 200MHz без лагов этот скрипт работал.И не только он а ещё база шмота и там всякая фигня, правда база грузилась долго.

Осьмой
25.08.2006, 08:08
изучил конфиг клеровский
попытался написать

var celi= new Array ("Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто");

function c_show()
{
var i = 0;
jmc.send("***ЦЕЛИ НА РЕСК/АГР***");
for(i = 1; i < 13; i++)
{
jmc.send(i+"-> "+celi[i]);
}
}
function reck(n,kto)
{
celi[n]=kto;
}


#alias {р}{#s reck(%1,"%2");}{default}
#alias {реск}{#s c_show();}{default}
что не так?? пишет
Ошибка выполнения Microsoft JScript
Предполагается наличие объекта
Строка:0 Ошибка:0 Scode:800a138f

Яруго
25.08.2006, 09:16
Кстати что у тебя за комп, у меня например даже на P1 200MHz без лагов этот скрипт работал.И не только он а ещё база шмота и там всякая фигня, правда база грузилась долго.

ммм с компом порядок р4 2700 оперативки 1 гиг связь адсл до 6 мбит/сек - думаю не в железках дело :rolleyes:

С ув.

WorM
25.08.2006, 13:00
ммм с компом порядок р4 2700 оперативки 1 гиг связь адсл до 6 мбит/сек - думаю не в железках дело :rolleyes:

С ув.

ну тоды на /dev/hands новые дрова поставь =)

WorM
25.08.2006, 13:04
изучил конфиг клеровский
попытался написать

var celi= new Array ("Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто","Пусто");

function c_show()
{
var i = 0;
jmc.send("***ЦЕЛИ НА РЕСК/АГР***");
for(i = 1; i < 13; i++)
{
jmc.send(i+"-> "+celi[i]);
}
}
function reck(n,kto)
{
celi[n]=kto;
}


#alias {р}{#s reck(%1,"%2");}{default}
#alias {реск}{#s c_show();}{default}
что не так?? пишет
Ошибка выполнения Microsoft JScript
Предполагается наличие объекта
Строка:0 Ошибка:0 Scode:800a138f

Поставь вместо русских букв "с" латинские "c"

Осьмой
26.08.2006, 08:55
писец.. корка я ходячая...
у меня есть алиас в дефаулт.set #alias {загрузи} {#read conf/%1.conf} {default}
я начинаю игру с того что пишу "загрузи наем", "загрузи кудес" ....
есть файл conf\кудес.conf и conf\кудес.scr.. так кора в том что я почемуто ДУМАЛ незнаю почему но вообще самому аж смешно... что эта фигня загружается автомотически...
Кстати говоря я все еще сомневаюсь что она негрузится... тоесть там такие ПЕРЛЫ были. Тоесть откудато брались функции которые я вызывал...


стоп. а каманда read не читает исходники.. как их подрубить следом???

ВСе работает... я овер блин...

WorM
28.08.2006, 01:05
писец.. корка я ходячая...
у меня есть алиас в дефаулт.set #alias {загрузи} {#read conf/%1.conf} {default}
я начинаю игру с того что пишу "загрузи наем", "загрузи кудес" ....
есть файл conf\кудес.conf и conf\кудес.scr.. так кора в том что я почемуто ДУМАЛ незнаю почему но вообще самому аж смешно... что эта фигня загружается автомотически...
Кстати говоря я все еще сомневаюсь что она негрузится... тоесть там такие ПЕРЛЫ были. Тоесть откудато брались функции которые я вызывал...


стоп. а каманда read не читает исходники.. как их подрубить следом???

ВСе работает... я овер блин...

Ниасилил.

Осьмой
28.08.2006, 05:29
Ниасилил.

А ты слабенький...
если честно я ща читаю и тоже понять не все могу. В кратце. у меня 2 файла на профу, conf и scr. я читаю .conf и был уверен что .scr грузится автомотически. но это тупость....

все работает. пасибо что выслушивали все это нытье. Конфиг готов почтишто... заказ почти выполнен.

Казуал
28.08.2006, 09:07
Помогите. Почему-то не поддерживает скрипты, вынесенные с common.scr - файл. Закидываю их "имя конфига".scr - все работает, а с общего не берет. Что делать?
ЗЫ жаба у меня версии 3.26

WorM
29.08.2006, 03:32
Помогите. Почему-то не поддерживает скрипты, вынесенные с common.scr - файл. Закидываю их "имя конфига".scr - все работает, а с общего не берет. Что делать?
ЗЫ жаба у меня версии 3.26

commonlib.scr должен называться файл

ЗЫ а ваще поиск решает

Казуал
29.08.2006, 08:10
Точно! спасибо за подсказку. Однако вместе с тем столкнулся с другой проблемой, а именно: при написании триггеров и в "профайловском" скриптовом файле и в общем работают триггеры только в "профайловском" *.scr - файле. Пробовал изменять имена функций - не помогает. Подскажите пожалуйста механизм разделения профайловских скриптов и общих.

Devastator
29.08.2006, 22:53
думаю вам поможет
в commonlib.scr кидаем
function include(lib)
{
if (jmc.GetVar("Global" + lib.toUpperCase() + "Included") == 1)
return;
jmc.ShowMe("Including \"" + lib + "\"...");

jmc.SetVar("Global" + lib.toUpperCase() + "Included", 1);
jmc.Parse("#read " + lib + ".set");

var sFileName = "settings/" + lib + ".scr";
var FileSystem = new ActiveXObject("Scripting.FileSystemObject");
var Stream;
try
{
Stream = FileSystem.OpenTextFile(sFileName, 1);
}
catch(e)
{
jmc.ShowMe("ERROR: Can't include \"" + sFileName + "\" (" + e.description + ")");
return;
}
jmc.Eval(Stream.ReadAll());
Stream.Close();
}


и пишем алиас #al {include} {#script include("%0")}
алиас можно пихнуть в дефаулт.set )

и теперь у нас есть два конфиг файла тряляля.set и тряляля.scr пишем
include тряляля и у нас подгружается и конф и скрипты, таким образом можно разбить конфиг на части )

WorM
29.08.2006, 23:54
Точно! спасибо за подсказку. Однако вместе с тем столкнулся с другой проблемой, а именно: при написании триггеров и в "профайловском" скриптовом файле и в общем работают триггеры только в "профайловском" *.scr - файле. Пробовал изменять имена функций - не помогает. Подскажите пожалуйста механизм разделения профайловских скриптов и общих.

Попробуй первую строку забить пустую или закоментированное что-то

//Это мой конфиг

или

/*Это мой конфиг*/

Казуал
31.08.2006, 09:43
Спасибо за ответы, но нашелся более простой способ решения моей проблемы. Дело в том, что клиент не обрабатывает две строки типа:
jmc.RegisterHandler("Incoming","OnIncoming()");
и хоть как ты не называй другие функции, будь то OnIncoming2() или еще как-то, вызываться будет только последняя функция.
А решение такое: в файле commonlib.scr создать функцию с любым именем, например: function Incoming(), а вызов ее совершать из функиции профайловского скрипта. Таким образом будут выполняться и общие и свойственные только текущему профайлу скрипты

Казуал
31.08.2006, 09:56
У меня еще один вопрос: как реализовать в скрипте:
#action {^Ваш опыт повысился на %0 оч} {гг %0} {5} {default}
т.е. возникли проблемы, как выделить из строки подстроку %0
Я сделал что-то вроде:
var line = jmc.Event;
if (line.search ("^Ваш опыт повысился на ") != -1) {
line=line.replace ("Ваш опыт повысился на ", "");
line=line.replace (" очков.", "");
line=line.replace (" очко.", "");
line=line.replace (" очка.", "");
account += line*1;
}
...но что-то слишком коряво получилось. Да еще пришлось писать account += line*1; - ибо иначе не складывает два числа, а выполняет Concat, т.е. 50+150=50150 :(

WorM
31.08.2006, 10:50
У меня еще один вопрос: как реализовать в скрипте:
#action {^Ваш опыт повысился на %0 оч} {гг %0} {5} {default}
т.е. возникли проблемы, как выделить из строки подстроку %0
Я сделал что-то вроде:
var line = jmc.Event;
if (line.search ("^Ваш опыт повысился на ") != -1) {
line=line.replace ("Ваш опыт повысился на ", "");
line=line.replace (" очков.", "");
line=line.replace (" очко.", "");
line=line.replace (" очка.", "");
account += line*1;
}
...но что-то слишком коряво получилось. Да еще пришлось писать account += line*1; - ибо иначе не складывает два числа, а выполняет Concat, т.е. 50+150=50150 :(

account += Math.floor(line) так правильней, Math.floor преобразовывает строку в число.

Попробуй вот так
line=jmc.Event;

var expstr=/^Ваш опыт повысился на (\d+) очк(о|ов|а)\.$/;
if(expstr.test(line))
account+=Math.floor(expstr.exec(line)[1]);

Проверил вроде даже работает +)

ЗЫ Почитай про regexp(регулярные выражения) в JavaScript.

Devastator
31.08.2006, 20:54
Вообще лучше не делать на скриптах то что можно сделать на TinTin, вот хороший счетчик экспы) придуманный не мной
вот из файла exp.set

#alias {экспасброс} {оч; #script {jmc.SetVar("ExpMobExperience", 0); jmc.SetVar("ExpStartTime", (new Date).getTime()); jmc.SetVar("ExpNeedInit", 1);}} {Exp}
#alias {экспа} {#script GlobalExpShowExp()} {Exp}

#action {Ваш опыт повысился на %1 очк} {#math {ExpMobExperience} {$ExpMobExperience + %1}} {Exp}
#action {Ваш опыт - %1 очк} {#script ExpOnReceivedCurExp(%1)} {Exp}

#variable {ExpStartTime} {0}
#variable {ExpExperience} {0}
#variable {ExpMobExperience} {0}
#variable {ExpBattleExperience} {0}
#variable {ExpNeedInit} {1}

#group local Exp
#group enable Exp

а вот скрипты из файла exp.scr

function ExpOnReceivedCurExp(exp)
{
if (jmc.GetVar("ExpNeedInit") == 1)
{
jmc.SetVar("ExpExperience", exp);
jmc.SetVar("ExpNeedInit", 0);
}
else
{
jmc.SetVar("ExpBattleExperience", exp - jmc.GetVar("ExpExperience") - jmc.GetVar("ExpMobExperience"));
}
}

function GlobalExpShowExp()
{
dt = new Date;
var span = (dt.getTime() - jmc.GetVar("ExpStartTime")) / 1000 / 60;
jmc.ShowMe("Набрано опыта: " + jmc.GetVar("ExpMobExperience") +" за мобов и " + jmc.GetVar("ExpBattleExperience") + " бэтл экспы, за время: " + span.toFixed(0) + " мин. " + ((Number(jmc.GetVar("ExpMobExperience")) + Number(jmc.GetVar("ExpBattleExperience"))) / span).toFixed(0) + " опыта в минуту.");
}

все это можно подключить при помощи функции include() которую я описывал выше. :)

Осьмой
05.09.2006, 13:37
стоп не понял а где тут бетал экспа считается?? а то я пытался написать неполучалось... последней проблеммой стало переход на уровень... потому что у тебя сейчас 3 очка ДСУ, а тут вдруг 12м... и счетчик прибавляет -12м к экспе...

Осьмой
08.09.2006, 12:17
ТАк всетаки, объясни как работает.. Как бэтл экспу считать. Я чет не понял... из кода.. да и пока не внедряю

Devastator
08.09.2006, 17:39
ты гдето видишь что счетсчик экспы сканит скока у тебя дсу ?

judge
11.09.2006, 08:19
Счетчик сканит не дсу, а всю экспу.

Осьмой
11.09.2006, 10:40
Попробовал поюзать. Заметил что строчка "БЭТЛ ЭКСПА" обновляется только после набирания "оч" вот в чем кора... ясно.
понятно.. Хитро однако. только я хотел чтобы без спама ОЧ это все считалось.

Devastator
11.09.2006, 20:51
НЕ сильно уж и большой спам) ну если хочешь предложить что-то лучшее пробуй )

Родовит
27.09.2006, 12:30
Почемуто не работают регекспы под жабой..никак не пойму почему(((
Как без регекспов из jmc.Event вытащить название и описание комнаты?

WorM
06.10.2006, 05:18
работает в жабе регэксп просто надо сначало маны в инете про яваскрипт почитать, а потом чето делать

Елигор
06.10.2006, 12:13
чтобы бэтлэкспа считалась нормально без повторно вывода "очки/счет"
нужно подправить алиас для сброса экспы

#alias {экспасброс} {оч; #script {jmc.SetVar("ExpBattleExperience", 0); jmc.SetVar("ExpMobExperience", 0); jmc.SetVar("ExpStartTime", (new Date).getTime()); jmc.SetVar("ExpNeedInit", 1);}} {Exp}

Родовит
12.10.2006, 09:19
работает в жабе регэксп просто надо сначало маны в инете про яваскрипт почитать, а потом чето делать
да ну фигня - при чем тут жаваскрипт, если не иницилизируется строка с регекспом.
ЗЫ На перле попробовал - такая же фигня. Просто регекспы надо проинициализировать как-то, чтобы заработало, а вот как - я хз)

Елигор
12.10.2006, 11:26
regexp не нужно инициализировать, они по дефолту работают
писать просто правильно надо.

в #subs не работает regexp , только в #action

Родовит
12.10.2006, 13:52
Ну хорошо - рассмотрим на примере. Возьмем,например, кусок функции, срабатывающей на событие Incoming, лебезно предоставленной Devastator'ом

function CaptureTells()
{
var tmp=jmc.Event;
var tely=/\[1;36m([А-Яа-я]+|Кто-то) сказал[а]? Вам : '(.+)'$/;
res = tely.exec(tmp);
jmc.Output(res[1]);
}
По логике вещей - если все арбайтен, то при реакции на входящий телл в output вылетит имя телявшего.

Так вот в функцию то залетает на incoming нормально, а вот разбор строки телла не происходит.

Елигор
12.10.2006, 16:41
хм..
вобщем проблема в следующем...
похоже малость что-то где-то изменилось в коде...

var tely=/\[1;36m([А-Яа-я]+|Кто-то) сказал[а]? Вам : '(.+)'$/;
это раньше работало! 100%

сейчас не срабатывает !
цвет текста меняется до конца ввода строки.
и чтобы сейчас нормально работало нужно изменить regexp на

var tely=/\[1;36m([А-Я][а-я]+|Кто-то) сказал[а]? Вам : '(.+)'\[0;37m$/;

имх для имени чара лучше использовать не [А-Яа-я]+ , а [А-Я][а-я]+

Devastator
12.10.2006, 20:24
хм..
вобщем проблема в следующем...
похоже малость что-то где-то изменилось в коде...

var tely=/\[1;36m([А-Яа-я]+|Кто-то) сказал[а]? Вам : '(.+)'$/;
это раньше работало! 100%

сейчас не срабатывает !
цвет текста меняется до конца ввода строки.
и чтобы сейчас нормально работало нужно изменить regexp на

var tely=/\[1;36m([А-Я][а-я]+|Кто-то) сказал[а]? Вам : '(.+)'\[0;37m$/;

имх для имени чара лучше использовать не [А-Яа-я]+ , а [А-Я][а-я]+
ага тоже заметил )

Казуал
08.11.2006, 09:38
Народ, помогите плиз. Есть проблема, объясняю на простом примере:
Если написать в скрипте что-то вроде:

var line = jmc.Event;
if (line == "Вы голодны.") {
jmc.Send("эм голоден")
}

то при получении строки из мада на тике - триггер срабатывает.
Но если набрать команду "счет" - то при получении этих же строк из мада триггер не срабатывает.
А все дело в том, что по команде "счет" сообщения:
Вы голодны.
Вас мучает жажда.
отображаются зеленым цветом и строка отличается от сравниваемой. Отключение цветового режима решает проблему, но кому оно надо без цвета?
Также можно решить проблему таким образом:
if (line.search("Вы голодны.")!=-1) {
jmc.Send("эм голоден")
}
но основная решаемая задача отличается от примера и данный способ не катит.

Вопрос: как можно присвоить переменной line значение jmc.Event без управляющих символов, т.е. без цвета

WorM
14.11.2006, 00:40
line=jmc.event.replace(/\[\d?\;\d+m/g,'');

Devastator
16.02.2007, 09:45
Подымаем тему на верх :) чтоб не забывали что существует такая
Ну и добавлю от себя еще один пример использования скриптов
Так называймая переодевалка на два комплекта
файлы .exe .ini .set в папку с жабой, а scr в settings
ну подключить его при помощи описанного выше include

Варнер
20.02.2007, 13:47
Собсно вопрос по поводу последнего поста, а есть ли здесь люди которые бы хотели видеть плагины для жабы? Если да, то какие?

Курлан
23.01.2008, 17:20
Есть вот такой вопрос: ввожу в жабе (например): объект шлем стальной
Как добавить в скрипте слово шлем в одну переменную а стальной в другу?

Sir
11.02.2008, 11:58
#alias {объект} {#scr jmc.SetVar("var1", "%1"), jmc.SetVar("var2", "%2")}

Гурлич
29.02.2008, 19:28
хочу сделать сабс
#sub {/толокнянк([а-я])/} {/толокнянк([а-я])/ 'целебные травы'}
не пашет
де ошибся ?

WorM
03.03.2008, 16:47
хочу сделать сабс
#sub {/толокнянк([а-я])/} {/толокнянк([а-я])/ 'целебные травы'}
не пашет
де ошибся ?

Регулярки в жабе работают токо в тригерах, это раз.
Чисто теоретически это должно выглядеть так: #sub {/толокнянк([а-я])/} {толокнянк$1 'целебные травы'}, это два.

Devastator
08.03.2008, 16:59
если я выложу базу данных шмота, меня за это покарают?

Warrkan
13.03.2008, 11:02
Это будет не больно, и быстро

Бродяга
10.10.2010, 13:52
Не для праздного интереса
Регулярки в жабе работают токо в тригерах, это раз.
Чисто теоретически это должно выглядеть так: #sub {/толокнянк([а-я])/} {толокнянк$1 'целебные травы'}, это два.
Как оно в jscript должно выглядеть?
{line=line.replace ("/толокнянк([а-я])/", "толокнянк$1 'целебные травы'");}
Или я где-то путаю кислое с острым?

Snap
19.10.2010, 22:36
если я выложу базу данных шмота, меня за это покарают?

скажи как к жабе прикрутить?
чтоб по табу читалось шмотка елси опознавалась ранее