1

Тема: Возможно подгружать плагины в пещере

Ситуация следующая, пишу плагин для грибницы на благо, из-за того что много диалогов и они все похожие друг на друга повторные диалоги с ботами не работают. Доходит до определенного ответа и останавливается.

Есть возможность подгружать плагин разговора с ботом в нужный момент???

Или как можно указать что именно в этом диалоге нужно отвечать на вопросы именно так.
Ответы очень похожи и скорей всего из-за этого происходит зависание или я что то делаю не так)
вот плагин диалога

function Makropus(enabled)
{
if(enabled)
{
//должна быть одна из двух строк
PluginsOnLoad["Makropus"] = "MakropusHandler"; // работать по обновлению верхнего фрейма
}
else
{
//должна быть одна из двух строк
PluginsOnLoad["Makropus"] = ""; // выключить обработку по обновлению верхнего фрейма
}
}
function blago()
{
if(top.Battle.bInBattle) return;
 
//Макропус-1
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=rr";
}
else
 
//Макропус-2
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=rr";
}
else
 
//Макропус-3
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=rr";
}
else
 
//Макропус-2
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=m1";
}
 
}
function MakropusHandler()
{
try
{
blago();
}
 
catch(err)
{
// alert(err.description); // выводит сообщение, если в результате выполнения кода была получена ошибка. Если сообщения не нужна - удалить эту строку, оставив конструкцию try{}catch(err){}
}
}

Бывает что на певом диалоге с Макропусом зависает, а бывает что на втором) или часть ответов проходит а часть нет

2

Re: Возможно подгружать плагины в пещере

up

Да кстати еще заметил что если плагин написан в кодировке UTF-8 то программа не распознает его.
Работает только с ANSI.

3

Re: Возможно подгружать плагины в пещере

up

4

Re: Возможно подгружать плагины в пещере

Можно все. Возможности ограничиваются только воображением и знаниями языка:)

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

Тебе не обязательно копировать всю фразу целиком. Достаточно сочетания двух уникальных слов на странице (одно уникальное вряд ли найдешь).

У меня все работает, что я делаю не так ?

5

Re: Возможно подгружать плагины в пещере

ZhEkA_BK пишет:

Можно все. Возможности ограничиваются только воображением и знаниями языка:)

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

Тебе не обязательно копировать всю фразу целиком. Достаточно сочетания двух уникальных слов на странице (одно уникальное вряд ли найдешь).

Спасибо! думал что только по словосочетанию уникальному,  Попробую выдернуть из строчки просто уникальные слова где стопор происходит.

Хотя на многих диалогов одно слово "Вперед" и в таком случае.

Видел что можно диалог сделать по номеру строки в ответах. Попробую разобраться!!!

6

Re: Возможно подгружать плагины в пещере

Я когда-то давно писал все это дело (скинуть не могу, сломался винт и все пропало). Там всегда есть хоть какая-то строка в диалоге, к которой можно привязаться.
И если ты выбрал кусок фразы, в котором попадаются специальные символы типа *./ и т.д. то их надо экранировать, чтобы бот работал нормально. Т.е. фразу вида "бегом. В бой" Нужно писать вот так "бегом\. В бой" (просто перед спец символом ставим \ )

У меня все работает, что я делаю не так ?

7

Re: Возможно подгружать плагины в пещере

дабы не экранировать, вместо match можно использовать else if (ххх.indexOf("Спасибо за Грибочек. Но я бы хотел, чтобы вы мне уделили еще немного вашего внимания.") > -1)

диалог идентифицировать можно по-разному, ихмо проще всего по заголовку:

// Светлячок
        var talk_to_Name = "Светлячок"
        if (iHTML.indexOf("<H3>" + talk_to_Name + "</H3>") > -1)
        {
            var _path = "empty";
 
            if (iHTML.indexOf("(завершить разговор)") > -1)
            {
                    _path = "(завершить разговор)";
                    external.SetVal("Gribnitsa_isWhiteLighterClicked",true);
            }
        }
        if (_path != "empty") external.ClickLink(_path,2);
(Please log in or register to see this URL)