Тема: Квест грибницы, начало...

И так решил на выходные дни научиться писать плагины для общения с ботами в метро
взял плагин болтовни с вождем

function NapadenieNaVozhda(enabled)
{
    if(enabled)
    {
        //должна быть одна из двух строк
PluginsOnLoad["NapadenieNaVozhda"] = "NapadenieNaVozhdaHandler"; // работать по обновлению верхнего фрейма
    }
    else
    {
        //должна быть одна из двух строк
PluginsOnLoad["NapadenieNaVozhda"] = ""; // выключить обработку по обновлению верхнего фрейма
    }
}
function Vozhd()
{
    if(top.Battle.bInBattle) return;
 
if(get_mainframe().document.all[0].innerHTML.match(/Откуда ты знаешь, как меня зовут/))
    external.ClickLink("Откуда ты знаешь, как меня зовут",2);
else
if(get_mainframe().document.all[0].innerHTML.match(/Ну, если так, то конечно, все понятно. Ну и что ты от меня хочешь?/))
    external.ClickLink("Ну, если так, то конечно, все понятно. Ну и что ты от меня хочешь?",2);
else
if(get_mainframe().document.all[0].innerHTML.match(/Услуги? Что это за услуги?/))
    external.ClickLink("Услуги? Что это за услуги?",2);
else
if(get_mainframe().document.all[0].innerHTML.match(/Хорошо! Согласен на твое предложение. Что нужно делать?/))
    external.ClickLink("Хорошо! Согласен на твое предложение. Что нужно делать?",2);
else
if(get_mainframe().document.all[0].innerHTML.match(/Да./))
    {   
    external.ClickLink("Да.",2);
    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/" + dungName  + "?rnd=" + Math.random() +"&path=rl";
    }
}
function NapadenieNaVozhdaHandler()
{
        try
{
setTimeout("Vozhd();",1000);
}
        catch(err)
        {
//                alert(err.description); // выводит сообщение, если в результате выполнения кода была получена ошибка. Если сообщения не нужна - удалить эту строку, оставив конструкцию try{}catch(err){}
        }
}

название плагина не менял (это можно сделать в любой момент по сути главное чтоб работал). ну тоесть бот жмакает на макропуса, начинает болтать, виснет на фразе Услуги? что ещё за услуги?, если нажть в ручную доходит до фразы Да. и переключаеться на главную страницу в бк

тут к вам 2 вопроса
1) почему виснет на фразе *Услуги*
2) почему меня выбрасивает на логин пейдж в БК? ну интуитивно догадиваюсь что ошибка гдето тут

{   
    external.ClickLink("Да.",2);
    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/" + dungName  + "?rnd=" + Math.random() +"&path=rl";
    }

но без знания джавы ( я полный дилетант и самоучка ) - не могу решить вопрос...
так же пробовал передерёть скрипт решника на низины - не получилось - тоже выкидывает на логин пейдж..

Женщины - инквизиторы мужского сердца...

2

Re: Квест грибницы, начало...

С твоего позволения, я его в человеческий вид приведу smile

function NapadenieNaVozhda(enabled)
{
    if(enabled)
    {
        //должна быть одна из двух строк
        PluginsOnLoad["NapadenieNaVozhda"] = "NapadenieNaVozhdaHandler"; // работать по обновлению верхнего фрейма
    }
    else
    {
        //должна быть одна из двух строк
        PluginsOnLoad["NapadenieNaVozhda"] = ""; // выключить обработку по обновлению верхнего фрейма
    }
}
 
function NapadenieNaVozhdaHandler()
{
    try
    {
        if(top.Battle.bInBattle) return;
        var doc = get_mainframe().document.all[0].innerHTML;
 
        if(doc.indexOf("Откуда ты знаешь, как меня зовут") > -1)
            external.ClickLink("Откуда ты знаешь, как меня зовут",2);
        else if(doc.indexOf("Ну, если так, то конечно, все понятно. Ну и что ты от меня хочешь?") > -1)
            external.ClickLink("Ну, если так, то конечно, все понятно. Ну и что ты от меня хочешь?",2);
        else if(doc.indexOf("Услуги? Что это за услуги?") > -1)
            external.ClickLink("Услуги? Что это за услуги?",2);
        else if(doc.indexOf("Хорошо! Согласен на твое предложение. Что нужно делать?") > -1)
            external.ClickLink("Хорошо! Согласен на твое предложение. Что нужно делать?",2);
        else if(doc.indexOf("Да.") > -1)
        {   
            external.ClickLink("Да.",2);
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/" + dungName  + "?rnd=" + Math.random() +"&path=rl";
        }
    }
    catch(err)
    {
        //alert(err.description); // выводит сообщение, если в результате выполнения кода была получена ошибка. Если сообщения не нужна - удалить эту строку, оставив конструкцию try{}catch(err){}
    }
}

1) Не Джава, а джаваскрипт. Это разные языки.
2) Основная проблема была в том, что ты пытался использовать match(//) там, где он не особо нужен.

Ну вот для примера, надо мне найти кусок текста "Стоимость: ??кр.", где ?? - цифры, которых я заранее не знаю.
Вот в этом случае мне нужен match, т.к. он умеер работать с регулярными выражениями(RegExp), которые можно назвать просто "маской". И будет это выглядеть так:
match(/Стоимость: \d+кр./), где \d - это спецсимвол, обозначающий любую цифру, а + после \d говорит, что \d должно быть в этой маске 1 и более раз подряд.
Символ точки в маске - это один любой символ.
Символ вопросительного знака сложен для объяснения, но это тоже спец-символ и именно из-за него у тебя зависало на услугах. надо было маску писать с экранированием: match(/Услуги\? Что это за услуги\?/).

Регулярки - тема не простая, но весьма занятная. Для тестирования есть сайты вроде (Please log in or register to see this URL)

Вот, о чем я тут...короче, надо было обойтись простым indexOf() - возвращает индекс буквы, начиная с которой найдено совпадение строк.
Т.е. "Привет, как дела".indexOf("Привет") будет равен 0.
"Привет, как дела".indexOf("как") будет равен 8.
"Привет, как дела".indexOf("нормально") будет равен -1, т.к. последовательности символов такой в исходной строке встречено не было.

Перенесу ка я эту тему в ветку Javascript...

Software is like sex: it's better when it's free! © LinusTorvalds

3

Re: Квест грибницы, начало...

про маску теперь понятно, а вот про

Т.е. "Привет, как дела".indexOf("Привет") будет равен 0.
"Привет, как дела".indexOf("как") будет равен 8.
"Привет, как дела".indexOf("нормально") будет равен -1

если я правельно понят то
1) 0 ты поставил потому что Привет (первая буква П)
2) 8 потому что "как" - после -8ого символа встало
3) -1 потому что вообще небыло такого варианта
в правельном направлении думаю?

Отредактировано nostra4life (2013-05-05 22:16:48)

Женщины - инквизиторы мужского сердца...

4

Re: Квест грибницы, начало...

nostra4life пытался переписать 2 плагина от грибов для этого вчера но вышло или тормаз на фразе услуг как у тебя или вобще после услуг уходил на задавание вопросов -хотя фразы прописанны верно были.
завтра попробую по номерам диалогов написать

Отредактировано lovemy (2013-05-05 21:46:52)

5

Re: Квест грибницы, начало...

lovemy пишет:

nostra4life пытался переписать 2 плагина от грибов для этого вчера но вышло или тормаз на фразе услуг как у тебя или вобще после услуг уходил на задавание вопросов -хотя фразы прописанны верно были.
завтра попробую по номерам диалогов написать

можешь скинуть инфу как по номерах диалгово и самое главное примеры таких диалогов ) чтоб можно было понять что куда пихать

Женщины - инквизиторы мужского сердца...

6

Re: Квест грибницы, начало...

nostra4life
к примеру можно combats.com/main.pl?move_dialog=0& где ноль изменить на номер диалога через адресс ссылки

function bufsun(enabled)
{
    if(enabled)
    {
        //должна быть одна из двух строк
PluginsOnLoad["bufsun"] = "bufsunHandler"; // работать по обновлению верхнего фрейма
    }
    else
    {
        //должна быть одна из двух строк
PluginsOnLoad["bufsun"] = ""; // выключить обработку по обновлению верхнего фрейма
    }
}
 
function gribi()
{
    if(top.Battle.bInBattle) return;
if(get_mainframe().document.all[0].innerHTML.match(/Откуда ты знаешь, как меня зовут?/))
    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=0&" + Math.random();
else
if(get_mainframe().document.all[0].innerHTML.match(/Ну, если так, то конечно, все понятно. Ну и что ты от меня хочешь?/))
    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=0&" + Math.random();
else
if(get_mainframe().document.all[0].innerHTML.match(/Услуги?/))
   top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=0&" + Math.random();
else
if(get_mainframe().document.all[0].innerHTML.match(/Хорошо! Согласен/))
    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=0&" + Math.random();
else
if(get_mainframe().document.all[0].innerHTML.match(/Да./))
   top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=0&" + Math.random();
else
if(get_mainframe().document.all[0].innerHTML.match(/Вперед! На задание! (завершить разговор)/))
    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=0&" + Math.random();
 
}
 
 
 
function bufsunHandler()
{
        try
{
gribi();
}
 
        catch(err)
        {
//                alert(err.description); // выводит сообщение, если в результате выполнения кода была получена ошибка. Если сообщения не нужна - удалить эту строку, оставив конструкцию try{}catch(err){}
        }
}

номера проставить нужно-тут к примеру

Отредактировано lovemy (2013-05-05 21:58:15)

7

Re: Квест грибницы, начало...

о, теперь ощущаю разницу, а что получаеться я зря хотел плагин делать - он уже существует smile?

Женщины - инквизиторы мужского сердца...

8

Re: Квест грибницы, начало...

nostra4life пишет:

о, теперь ощущаю разницу, а что получаеться я зря хотел плагин делать - он уже существует smile?

увы это плагин обмена грибов не доконца переделан.щас то с компа слезу а утром часов 10 -11 по мск проверю через номера диалогов - там только цифры проставить надо.
основа застряла на тестах а то хотел на баф и скорпионов написать маршрут

Отредактировано lovemy (2013-05-05 22:04:58)

9

Re: Квест грибницы, начало...

lovemy
мне кажеться или тут будет а же проблема что match будет тупить при "?" например
давай так, Если не лень тебе - пробуй с номерами диалогов разбираться, а я домучаю свой - таким методом можно будет грибницу довести до ума-разума и все пользоваться будут, думаю нам Анархоник поможет:)

Отредактировано nostra4life (2013-05-05 22:21:59)

Женщины - инквизиторы мужского сердца...

10

Re: Квест грибницы, начало...

nostra4life пишет:

lovemy
мне кажеться или тут будет а же проблема что match будет тупить при "?" например
давай так, Если не лень тебе - пробуй с номерами диалогов разбираться, а я домучаю свой - таким методом можно будет грибницу довести до ума-разума и все пользоваться будут, думаю нам Анархоник поможет:)

с утра проверю  и отпишусь.
скорпионов просто написать а на баф сложней,особенно на баф хп -там грибы резать.

11

Re: Квест грибницы, начало...

кстати да, нужно просить помошь у Анархоника, чтоб в зависимости од текста что выдаст макропус - выбрать маршрут. Думаю тут только он сможет нам помочь, а дальше дело за простым - написать 5 маршрутов, 1 основной, и 4 за грибами и все готово)

Женщины - инквизиторы мужского сердца...

12

Re: Квест грибницы, начало...

nostra4lifeпопробовал через диалоги но стопарнулся на услугах.

13

Re: Квест грибницы, начало...

думаю там такая же шляпа с знаком вопроса, надо ждать Анархоника чтоб он подсказал как в твоем варианте правельно писать ( вариант с номерами диалогов )

Женщины - инквизиторы мужского сердца...

14

Re: Квест грибницы, начало...

Эм...парни, вы сравните два первых сообщения в теме.
Точнее два написания пагина.

Так сказать, почувствуйте разницу.
Я плагин не переписывал, я его привёл в нормальный вид.
Просто посмотрите два варианта и сравните "Было так, а стало так...мммм...."

Software is like sex: it's better when it's free! © LinusTorvalds

15

Re: Квест грибницы, начало...

anahronik пишет:

Эм...парни, вы сравните два первых сообщения в теме.
Точнее два написания пагина.

Так сказать, почувствуйте разницу.
Я плагин не переписывал, я его привёл в нормальный вид.
Просто посмотрите два варианта и сравните "Было так, а стало так...мммм...."

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

16

Re: Квест грибницы, начало...

Да как бы оба ваши плагина по сути не отличаются вообще ничем smile
Разве что КликЛинк на прямую ссылку заменём...но я не рекомендую пользоваться прямыми ссылками, если КликЛинк с этим успешно справляется....

Software is like sex: it's better when it's free! © LinusTorvalds

17

Re: Квест грибницы, начало...

anahronik а не мог бы помочь с грибом ? ну макропус дает 4 направления дял поиска гриба, чтоб бот смог прочитать фразу макропуса и в зависимости од текста - переключал маршрут, дальше как срежет гриб ( ен пробелма сделать ) после сдачи задания макропусу - обратно менял на маршрут грибницы

Женщины - инквизиторы мужского сердца...

18

Re: Квест грибницы, начало...

А что вам для этого требуется с моей стороны?
есть

external.DungeonLoadPath("канализация")

загружает маршрутный файл "канализация.path" из папки "Dungeon"

Software is like sex: it's better when it's free! © LinusTorvalds

19

Re: Квест грибницы, начало...

та это я знаю, ты меня не понял... Смотри:
1) Макррпус говорит пойди на запад недалеко от меня - меняем маршрут_гриб1
2) Макропус говорит - между жылищем Шызожука и Рогача - меняем маршрут_гриб2
3) Макропус говорит - около жылища рогача - маршрут гриб3
4) /=/ - около шызожука - маршрут_4

Женщины - инквизиторы мужского сердца...

20

Re: Квест грибницы, начало...

nostra4life пишет:

та это я знаю, ты меня не понял... Смотри:
1) Макррпус говорит пойди на запад недалеко от меня - меняем маршрут_гриб1
2) Макропус говорит - между жылищем Шызожука и Рогача - меняем маршрут_гриб2
3) Макропус говорит - около жылища рогача - маршрут гриб3
4) /=/ - около шызожука - маршрут_4

Экстерналы можно и в плагин вставлять, когда получаешь фразу куда идти, меняешь маршрут+завершаешь диалог

Вы обладаете Благодатью Алхимика  до 05.04.16

21

Re: Квест грибницы, начало...

к сожалению я и билзко не догадиваюсь как это осуществить, надо хелп анархоника smile

Женщины - инквизиторы мужского сердца...

22

Re: Квест грибницы, начало...

if(get_mainframe().document.all[0].innerHTML.match(/Вперед! На задание! (завершить разговор)/))
{
    external.DungeonLoadPath("канализация")
    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=0&" + Math.random();
}

я бы вот так попробовал

Вы обладаете Благодатью Алхимика  до 05.04.16

23

Re: Квест грибницы, начало...

можно будет попробовать, попробую все это до кучи сообразить на этой неделе...

Женщины - инквизиторы мужского сердца...

24

Re: Квест грибницы, начало...

но это не факт что будет работать, это то что я бы попробовал, либо можно обьявить еще одну переменную, которая будет меняться в зависимости от

(get_mainframe().document.all[0].innerHTML.match(/)/))

и присваивать значение маршрута в зависимости от диалога, после закрытия этого диалога

Вы обладаете Благодатью Алхимика  до 05.04.16

25

Re: Квест грибницы, начало...

Я ругаться буду, если ещё раз увижу

top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/...."

вместо использования external.ClickLink()

Серьёзно...я там кучу всяких методов защиты от поддельных ссылок вшил, а вы продолжаете устаревшие вещи практиковать.

Software is like sex: it's better when it's free! © LinusTorvalds