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

МПМ Былины - Мир Древней Руси (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 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

перехват теллов
 
Цитата:

Сообщение от Devastator
Раз просили поделюсь )) и поясню
Гдето раньше Worm уже вкладывал перехват тело, ну вот выложу тоже самое ну чуть доработанное )) в доработке помогла Зиля
[/color]

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

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

lexik 17.07.2006 23:59

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

Яруго 18.07.2006 09:28

переход на ммц
 
Цитата:

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

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

Цитата:

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

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

Devastator 21.08.2006 23:32

Цитата:

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

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

WorM 25.08.2006 06:26

Цитата:

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

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

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


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

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