проблема с скриптами в жабе
захотел я написать суперпродвинутые скрипты для жабы, и конешно не на его экшнах и алиасах, а на какомнить скриптовом движке типа JScript :)
Пытаюсь зайти во вкладку "скрипты" в настройках, и вылетает критическая ошибка... Переустановил жабу в другой каталог (эта у меня была не установлена, а просто скопирована...) (переустановил именно с инсталяшки), установил поверх апдейт до 3.27 и опять таже история. ПЫтаюсь открыть вкладку "скрипты" - жаба вылетает. Подскажите че тут делать :( |
и киданите еще желательно хелп по жавомским объектам для жаваскрипта! очень надо.
|
Сам долго мучался над этой проблемой, кое что начал понимать. :)
Начнем по парядку писать 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 |
Часть 2.
Теперь из справки что должно помоч неким образом. Свойства объектов JMC IsConnected – свойство только для чтения. True если JMC подключен к MUD серверу. False если нет. Event – содержит параметр события объекта jmc. Для “Входящего” и “Ввода” событий содержит текущую обрабатываемую строку. Также, он содержит текущую строку пока вы вызываете скрипт из команды #action Profile – возвращает имя текущего профайла. Только для чтения CommandChar – возвращает управляющий символ TinTin. Только для чтения Jmc object methods [ShowMe (text, [color]) – печатает текст в основном окне JMC. Второй параметр опционален. Формат [color] эквивалентен значению цвета для #highlight. Также, рекомендуется посмотреть команду #showme. Пример: jmc.Showme(“aaa”) jmc.Showme(“aaa”, “red”) 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 – срабатывает при закрытии скриптового движка – выгрузка профайла или рестарт скрипта. |
Часть 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. На этом пока хватит. [COLOR="DarkOrangeПишите, что нужно, поможем чем сможем. :)"][/color] |
скачал ещераз жабу по предложенной ссылке. установил. результат нулеой: тоже при попытке перехода в вкладку scripts хр пишет "обнаружена ошибка. программа будет закрыта" и предлагает ессесна отправить отчет билли. :( в чем может быть трабл? хр с 1
сервиспаком |
*дум
попробуй винду переустановить. этот метот всегда помогает. |
классный метод. но винду переустанавливать мне не охота, я думаю понятно почему. я уж обустроился в ней :) мож е еще какой метод? е еще какиенить проги, юзающие движки скриптов? *дум мож наних мона протестить - глюк жабы это или глюк винды
|
ээ ладно приступил к прочтению! ща попытаемся ченибудь понять! ...
пасябо! |
Мб будет еще полезно комуниб выложоить 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» итп. |
Цитата:
|
Цитата:
|
Еще примеры нужны или нет ? Всем все понятно ?
|
давай еще, будут нелишними
|
Цитата:
2Девостатор : если не страшно то сунь свою аську мне в личку, потрещим по поводу скриптинга и т.д |
Часовой пояс GMT +4, время: 03:20. |
Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot