МПМ Былины - Мир Древней Руси

МПМ Былины - Мир Древней Руси (https://www.bylins.su/vbb/index.php)
-   Клиенты для игры (https://www.bylins.su/vbb/forumdisplay.php?f=52)
-   -   проблема с скриптами в жабе (https://www.bylins.su/vbb/showthread.php?t=2242)

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

Цитата:

Сообщение от Казуал (Сообщение 32102)
Точно! спасибо за подсказку. Однако вместе с тем столкнулся с другой проблемой, а именно: при написании триггеров и в "профайловском" скриптовом файле и в общем работают триггеры только в "профайловском" *.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

Цитата:

Сообщение от Казуал (Сообщение 32163)
У меня еще один вопрос: как реализовать в скрипте:
#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

Цитата:

Сообщение от WorM (Сообщение 33780)
работает в жабе регэксп просто надо сначало маны в инете про яваскрипт почитать, а потом чето делать

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

Елигор 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

Цитата:

Сообщение от Елигор (Сообщение 34060)
хм..
вобщем проблема в следующем...
похоже малость что-то где-то изменилось в коде...

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

Вложений: 2
Подымаем тему на верх :) чтоб не забывали что существует такая
Ну и добавлю от себя еще один пример использования скриптов
Так называймая переодевалка на два комплекта
файлы .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

Цитата:

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

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

Devastator 08.03.2008 16:59

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

Warrkan 13.03.2008 11:02

Это будет не больно, и быстро

Бродяга 10.10.2010 13:52

Не для праздного интереса
Цитата:

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

Как оно в jscript должно выглядеть?
{line=line.replace ("/толокнянк([а-я])/", "толокнянк$1 'целебные травы'");}
Или я где-то путаю кислое с острым?

Snap 19.10.2010 22:36

Цитата:

Сообщение от Devastator (Сообщение 52226)
если я выложу базу данных шмота, меня за это покарают?

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


Часовой пояс GMT +4, время: 17:41.

Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot