Тема: Автоматизация диалогов
Можно ли сделать какой-то плагин для автоматизации диалогов?
Чтобы в грибнице обменивать грибочки? Рыбалка в грибнице?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Чтобы отправить ответ, вы должны вход или регистрация
Можно ли сделать какой-то плагин для автоматизации диалогов?
Чтобы в грибнице обменивать грибочки? Рыбалка в грибнице?
Можно
Создаешь плагин с названием Fishing.js
текст плагина
function Fishing(enabled)
{
if(enabled)
{
//должна быть одна из двух строк
PluginsOnLoad["Fishing"] = "FishingHandler"; // работать по обновлению верхнего фрейма
}
else
{
//должна быть одна из двух строк
PluginsOnLoad["Fishing"] = ""; // выключить обработку по обновлению верхнего фрейма
}
}
function WorkBody()
{
if(get_mainframe().document.all[0].innerHTML.match(/Не соблаговолит ли благородный дон рассказать мне об этом чудном месте?/))
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=3&" + 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();
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=1&" + 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=1&" + 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=1&" + Math.random();
}
function FishingHandler()
{
try
{
if(external.inBattle)return;
setTimeout("WorkBody();",2000);
}
catch(err)
{
// alert(err.description); // выводит сообщение, если в результате выполнения кода была получена ошибка. Если сообщения не нужна - удалить эту строку, оставив конструкцию try{}catch(err){}
}
}
Это планин на рыбалку. Там пара фраз не доделана (в частности чтоб выходил, когда грибов нет...у меня просто на момент написания такого случая не было), сам допишешь.
Создаешь плагин с названием Obmengribov.js
Текст плагина:
function Obmengribov(enabled)
{
if(enabled)
{
//должна быть одна из двух строк
PluginsOnLoad["Obmengribov"] = "ObmengribovHandler"; // работать по обновлению верхнего фрейма
}
else
{
//должна быть одна из двух строк
PluginsOnLoad["Obmengribov"] = ""; // выключить обработку по обновлению верхнего фрейма
}
}
function gribi()
{
if(get_mainframe().document.all[0].innerHTML.match(/Я бы хотел обменять/))
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=1&" + 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=2&" + Math.random();
}
function ObmengribovHandler()
{
try
{
gribi();
}
catch(err)
{
// alert(err.description); // выводит сообщение, если в результате выполнения кода была получена ошибка. Если сообщения не нужна - удалить эту строку, оставив конструкцию try{}catch(err){}
}
}
Вроде рабочая версия обмена грибов, но не уверен, т.к. давно не страдал таким...плагин у себя в архиве нашел.
Отредактировано ZhEkA_BK (2011-07-11 08:56:49)
Попробовал "обмен грибов", что-то не совсем работает. Когда подходишь к самому гусеницу бот в диалог не входит, хотя UseObjects() в маршруте стоит. Если войти вручную, то грибы меняет нормально, но диалог не завершает.
move_dialog=2&" + Math.random();
Цифра это номер ответа? В финальном диалоге только два ответа, исправил на 1, но ничего не поменялось, можно как-то поправить?
Цифра- это номер ответа. Только смотреть нужную цифру надо через свойства ссылки ответа. Из моего опыта, завершение чаще всего 0 и номер ответа никогда не совпадает с номером ссылки.
На гусеница плагин клацать и не должен, это ты в маршруте уже должен указать стоку клика на гусеница. И тут стандартный юсобджект не прокатывает. Тут нужно качать прогу DebugBar ставить ее, заходить через ИЕ в БК. Слева появится прицел, перетянуть его на гусеница. И изучать ссылку. Но, т.к. я гусеницом не увлекаюсь, то заниматься этим я естественно не буду. Разбирайся, а если будут вопросы- пиши. Удачи
в финальном диалоге посмотрел ссылку, вроде должно быть 2, вернул обратно на 2, но из диалога так и не выходит.
Если грибов нет, постоянно мелькает надпись "невозможно выполнить"
Поставил программку, при наведении показывает такие ссылки:
на самого гусеница <AREA title="Мудрый Гусениц" shape=RECT coords=132,41,219,202 href="javascript:void(0)">
на слово "Поговорить" <A onclick="return p_action('dialog=gg_MG_welcome1&use','1.4.18.211-105')" href="http://suncity.combats.com/dungeon3.pl?rnd=0.207175510125015&path=rr#">Поговорить</A>
Что с этим дальше делать, куда и в каком виде вставлять? Объясни пожалуйста разок по подробнее, дальше постараюсь въехать...
Значит проблема не в ссылке, а в самом условии.
Поменяй
if(get_mainframe().document.all[0].innerHTML.match(/Благодарю за общение. (завершить разговор)/))
на
if(get_mainframe().document.all[0].innerHTML.match(/Благодарю за общение/))
На клетке, когда смотришь на гусеница, вставляешь вот такую хрень...привожу пример уже как должно выглядеть, но тут не твои координаты клетки, свои сам посмотришь
02787d7598daf2ff787fcc20004da31e : top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?dialog=gg_MG_welcome1&use=" + top.frames[external.mainFrameIndex].arrLayers[1][0]["l"].arrUnits[0].id;
Когда грибов нет, мелькает надпись невозможно, потому, что скорее всего надписи в тот момент диалога одинаковые, а ссылки разные. Поэтому надо искать в этот момент уникальную надпись в диалоге и привязываться к ней.
Спасибо обмен грибов сейчас работает. В маршруте(хотя для меня так и не понятно откуда последняя часть взялась):
562d9271c1274c77d1540a43e39e050d : top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?dialog=gg_MG_welcome1&use=" + top.frames[external.mainFrameIndex].arrLayers[1][0]["l"].arrUnits[0].id;
Сделал привязку на саму всплывающую фразу. И еще понадобилось добавить перемещение внутрь плагина в диалоги выхода, иначе бот бесконечно заходит в диалог, а счетчик посещения клетки поставить не получается так как при выходе из диалога он не меняется. В итоге
Вы должны зайти под своим именем, чтобы увидеть скрытый текст.
Рыбалку пока еще не допроверил.
Кстати, Exile, так может ты знаешь какой способ, чтоб избавиться от прямых ссылок? Мот подскажешь ?
P.S: обычно не привык 2 сообщения подряд писать, но тут приходится, чтоб тема подсветилась в новых сообщениях.
Кстати, Exile, так может ты знаешь какой способ, чтоб избавиться от прямых ссылок? Мот подскажешь ?
P.S: обычно не привык 2 сообщения подряд писать, но тут приходится, чтоб тема подсветилась в новых
сообщениях.
глянь мой последний топ про плагин молитвы. там более-менее сделано. Правда, надо будет убрать кусок кода с проверкой на комментарии - оказался лишним. Приду домой - посмотрю еще.
update: забыл, правда, добавить проверку на картинку
Отредактировано Exile (2011-07-15 12:36:03)
function GoToNextDialog(btn)
{
var lnks = top.frames[external.mainFrameIndex].document.links;
for(var i = 0; i < lnks.length; i++)
{
if(lnks[i].style.visibility!="hidden" && lnks[i].innerHTML.match(btn) && lnks[i].innerHTML.getElementsByTagName("img").length == 0)
{
lnks[i].click();
break;
}
}
}
где btn - текст моей искомой строки диалога.
Вот как-то так.
А такой перебор при каждом обновлении фрейма не сильно бота нагружает?
А такой перебор при каждом обновлении фрейма не сильно бота нагружает?
Будь там сотни ссылок, тогда возможно нагрузка бы и возросла. Но в верхнем фрейме, во первых, от силы будет ссылок 20, следовательно и короткий цикл, и всего несколько операций сравнения, которые являются очень дешевыми в плане ресурсоемкости.
Да и ведь можно повесить проверку, открыт ли диалог с ботом или нет.
Блин, как трудно без лямбда-выражений c# =\ Можно было бы объемные куски кода с хреновой тучей условий заменить одной строкой(
Хм...спасибо, ща с переездом разберусь- будет время фигней пострадать, попробую разобраться
неплохо было бы наверное задержку поставить на клики по диалогам, а то думаю палевно так будет - человек же не может так быстро по ссылкам кликать
uniken1
За обмен грибов, огромнешее!!
На клетке, когда смотришь на гусеница, вставляешь вот такую хрень...привожу пример уже как должно выглядеть, но тут не твои координаты клетки, свои сам посмотришь
02787d7598daf2ff787fcc20004da31e : top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?dialog=gg_MG_welcome1&use=" + top.frames[external.mainFrameIndex].arrLayers[1][0]["l"].arrUnits[0].id;
подскажите какую хрень вставить надо перед Хищницей для рыбалки?
Отредактировано Apxu4 (2011-07-28 10:30:06)
Да, действительно прямые ссылки не работают, индексы быстро меняются и плагин соответственно не работает.
Вы должны зайти под своим именем, чтобы увидеть скрытый текст.
Отредактировано uniken1 (2011-08-08 21:39:19)
Вы должны зайти под своим именем, чтобы увидеть скрытый текст.
попробуй так
И давно прямые ссылки перестали работать ?
За время пока тестил, номера в дилогах пару раз менялись.
Вы должны зайти под своим именем, чтобы увидеть скрытый текст.
Отредактировано uniken1 (2011-08-10 15:37:06)
Та часть, которая меняется в диалогах- не нужна....главная часть ссылки остается постоянной.
Товарищи помогите доделать плагин рыбалка. Тот что предлагает uniken1 в 20-ом топе зацикленно бегает по диалогу и изредка выходит из него, а часть маршрута
4d877a0c3a2b0723b34204c8ffe78d2c : top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?dialog=gg3_hishnez_welcome&use=" + top.frames[external.mainFrameIndex].arrLayers[1][0]["l"].arrUnits[0].id; Walk("rl");
974e8d40180d3a89d450469cebeca4ac : Exit();
ef0a2f419134505fac42c520bcbddae4 : AttackMobs(); Walk("m1");
64567b154452cb79ed7cf5bcc4769183 : AttackMobs(); Walk("m1");
a4ca6fe93802c9cd1a3192e9953e2840 : Exit();
даже если бот выходит из диалога поворачивает его налево один раз из 5 где то....и то бывает подвисает. Подскажите где поправить
Ну что никто не может подсказать как доработать рыбалку?
Еще раз пршу помощи , кто разбирается гляньте плиз плагин рыбалка и помгите выйти из зациклинности
function Fishing(enabled)
{
if(enabled)
{
PluginsOnLoad["Fishing"] = "FishingHandler";
}
else
{
PluginsOnLoad["Fishing"] = "";
}
}
function WorkBody()
{
try
{
if(finished)
{
finished = false;
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";
}
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";
}
}
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);
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);
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(/Надоело рыбачить. Давай поговорим./))
{
finished = true;
external.ClickLink("Надоело рыбачить. Давай поговорим.",2);
}
else if(get_mainframe().document.all[0].innerHTML.match(/Нет, дорогое удовольствие/))
{
finished = true;
external.ClickLink("Нет, дорогое удовольствие",2);
}
}
catch(err)
{
external.AddToChat("error in dialog");
}
}
function FishingHandler()
{
try
{
if (top.Battle.bInBattle) return;
setTimeout("WorkBody();",2000);
}
catch(err)
{
external.AddToChat("error");
}
}
Если даже кактим то чудом бот выходит из диалога, то дальше он не поворачивает параво, а заходит опять в диалог. В итоге имеем подвисшего бота либо бегающего по строкам диалога либо остаовившегося на каком нибудь из ответов.
Вот кусок маршрта, погядите плиз что можно порравить чтобы делал действия нормально
Ребят,есть у кого-нибудь плагин диалогов в Сторожевой башне?Чтоб в начале и если что,после смерти,брал-сдавал повестку и топал драться опять?Заранее спасиб.
Чтобы отправить ответ, вы должны вход или регистрация