Re: Плагин взятия задания, все города, нужно протестить. От Gorlum
И привязать бота, если в "Репутации" нету теста "Время до смены задания: " - то uspeh=false. И сделать эту проверку каждые полчаса.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
И привязать бота, если в "Репутации" нету теста "Время до смены задания: " - то uspeh=false. И сделать эту проверку каждые полчаса.
gorlum пишет:Посмотрел через дебагбар закладку "Репутация", у неё есть id, которые равно L6, значит её можно нажать как-то так?
get_mainframe().document.getElementsById("L6")[0].click();Зачем её нажимать?
Это лишь закладка цельной страницы, которая уже подгружена в documents.all[0]
То есть, можно сразу искать фразу "Время до смены задания: ", и по ней уже ориентироваться?
Exile пишет:gorlum пишет:Посмотрел через дебагбар закладку "Репутация", у неё есть id, которые равно L6, значит её можно нажать как-то так?
get_mainframe().document.getElementsById("L6")[0].click();Зачем её нажимать?
Это лишь закладка цельной страницы, которая уже подгружена в documents.all[0]То есть, можно сразу искать фразу "Время до смены задания: ", и по ней уже ориентироваться?
Конечно. Закладки - лишь для визуального удобства.
Как-то так?
тут запуск этой функции каждые полчаса
if(!get_mainframe().document.all[0].innerHTML.match(/Время до смены задания: /))
uspeh=true;
Как-то так?
тут запуск этой функции каждые полчаса
if(!get_mainframe().document.all[0].innerHTML.match(/Время до смены задания: /))
uspeh=true;
Да, только вот в регулярке убери последний пробел после двоеточия. А то реагирует неправильно.
Кстати, вручную можно включить режим данжа?
Отредактировано Exile (2011-06-28 15:55:29)
gorlum пишет:Как-то так?
тут запуск этой функции каждые полчаса
if(!get_mainframe().document.all[0].innerHTML.match(/Время до смены задания: /))
uspeh=true;Да, только вот в регулярке убери последний пробел после двоеточия. А то реагирует неправильно.
Кстати, вручную можно включить режим данжа?
Это как "вручную"?
Exile пишет:gorlum пишет:Как-то так?
тут запуск этой функции каждые полчаса
if(!get_mainframe().document.all[0].innerHTML.match(/Время до смены задания: /))
uspeh=true;Да, только вот в регулярке убери последний пробел после двоеточия. А то реагирует неправильно.
Кстати, вручную можно включить режим данжа?
Это как "вручную"?
Бот взял задание. Надо включить данж, чтобы он начал выполнять его. Программно это как-то можно сделать?
Отредактировано Exile (2011-06-28 16:04:25)
А, понял, придёт Анахроник - скажет)
var uspeh=false;
function zadanie(enabled)
{
if(enabled)
{
zadanieTimer = setInterval("zadanieHandler()",5000);// тут ставил разный интервал что бы проверить, 5-10 секунд
}
else
{
clearInterval(zadanieTimer);
}
}
function proverka(enabled)
{
if(enabled)
{
zadanieTimer = setTimeout("proverkaHandler()",360000);
}
else
{
clearTimeout(proverkaTimer);
}
}
function proverkaHandler(uspeh)
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?skills=1&rand=" + Math.random();
if(!get_mainframe().document.all[0].innerHTML.match(/Время до смены задания:/))
top.Chat.Self.AddMessage("Проверяю наличие задания");
uspeh=false;
return uspeh;
}
function zadanieHandler()
{
external.battleWeared = false;
top.Chat.Self.AddMessage(external.room_name);
proverkaHandler(uspeh);
if(uspeh==false){
if (external.room_name == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o8&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду на грибную лужайку");
else if(external.room_name == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду в странное место");
else if(external.room_name == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o0&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду в грибную поляну");
else if(external.room_name == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o1&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду в грибницу");
else if(external.room_name == "Бойцовский Клуб" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o6&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду на ЦП");
else if(external.room_name == "Зал воинов" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду в БК");
else if(external.room_name == "Зал воинов 2" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду в БК");
else if(external.room_name == "Зал воинов 3" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду в БК");
else if(external.room_name == "Этаж 2" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o4&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду в БК");
else if(external.room_name == "Башня рыцарей-магов" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o2&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду в Рыцарский зал");
else if(external.room_name == "Рыцарский зал" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду в Этаж 2");
else if(external.room_name == "Торговый Зал" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
//top.Chat.Self.AddMessage("Иду в Этаж 2");
else if(external.room_name == "Грибница" && uspeh==false){
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
if(!get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/) && get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/))
{
get_mainframe().document.getElementsByName("getquest")[0].click();
top.Chat.Self.AddMessage("Работает взятие задания");
}
if(get_mainframe().document.all[0].innerHTML.match(/Для вас нет заданий в этом подземелье.../))
//Для вас нет заданий в этом подземелье...Задания отсюда недоступны///// пока что поставил 1-й вариант, чтобы проверить работоспособность
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();
uspeh=true;
top.Chat.Self.AddMessage("Работает выход из комнаты");
}
}
}
//Возврат в зв1
if(uspeh==true)
{
if(external.room_name == "Грибница" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?rnd=" + Math.random()+"&path=1.108.1";
else if(external.room_name == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o2&rnd=" + Math.random();
else if(external.room_name == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o1&rnd=" + Math.random();
else if(external.room_name == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o6&rnd=" + Math.random();
else if(external.room_name == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o0&rnd=" + Math.random();
else if(external.room_name == "Бойцовский Клуб" && top.frames[external.mainFrameIndex].is_accessible)
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o1&rnd" + Math.random();
}
//external.AddToChat("Взял задание");
}
Сделал функцию по проверке наличия задания, которая возвращает "uspeh", поставил интервал работы в 5 минут "setTimeout", я так понял что это оно. Но после запуска плагина бот постоянно проверяет наличие задания, значит он постоянно лезет в функцию "function proverkaHandler(uspeh)", и дальше не идёт.
Отредактировано gorlum (2011-06-28 16:55:34)
Потому что лепишь таймер в одну переменную + setTimeout - однократное выполнение. Для твоих целей нужен setInterval
var uspeh=false;
function zadanie(enabled)
{
if(enabled)
{
zadanieTimer = setInterval("zadanieHandler()",5000);// тут ставил разный интервал что бы проверить, 5-10 секунд
proverkaTimer = setInterval("proverkaHandler()",360000);
}
else
{
clearInterval(zadanieTimer);
clearInterval(proverkaTimer);
}
}
И зачем передавать в proverkaHandler() переменную, если она у тебя глобальная?
Да, и для функции проверки, м.б. лучше сделать так:
function proverkaHandler()
{
var temp_inf = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?skills=1&rand=" + Math.random());
if(!temp_inf.match(/Время до смены задания:/)) uspeh=false;
top.Chat.Self.AddMessage("Проверяю наличие задания");
}
function doLoad(url)
{
if (window.XMLHttpRequest)
req = new XMLHttpRequest();
else
req = new ActiveXObject("Microsoft.XMLHTTP");
req.open("GET", url, false); // задать параметры методу open
req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //чтоб не кэшировались GET запросы
req.send(null); // отправить запрос
return req.responseText;
}
Два вопроса:
1.что именно показывает переменная uspeh
2.что делает external.battleWeared
Отредактировано Exile (2011-06-28 17:27:01)
если uspeh==false, то выполняется строка
else if(external.room_name == "Грибница" && uspeh==false){
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
if(!get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/) && get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/))
{
get_mainframe().document.getElementsByName("getquest")[0].click();
top.Chat.Self.AddMessage("Работает взятие задания");
}
if(get_mainframe().document.all[0].innerHTML.match(/Для вас нет заданий в этом подземелье.../))
//Для вас нет заданий в этом подземелье...Задания отсюда недоступны///// пока что поставил 1-й вариант, чтобы проверить работоспособность
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();
uspeh=true;
top.Chat.Self.AddMessage("Работает выход из комнаты");
}
}
Где она берет задание. Если успех==тру, то выполняется возврат в зв1.
external.battleWeared не даёт боту ломится в бои при выполнении плагина, но она не работает, думал вернуться к ней позже.
Тогда уж лучше считывать не "Время до смены задания", а:
1) "<ТЕКУЩИЙ_ГОРОД> city - [0-9] ч. [0-9] мин."
2) "<ТЕКУЩИЙ_ГОРОД> city - [0-9] мин."
3) "<ТЕКУЩИЙ_ГОРОД> city - [0-9] сек."
Т.к. получается что если делаешь задания на несколько городов, то бот не будет брать задание!
Да, и кста, что делает
function doLoad(url)
{
if (window.XMLHttpRequest)
req = new XMLHttpRequest();
else
req = new ActiveXObject("Microsoft.XMLHTTP");
req.open("GET", url, false); // задать параметры методу open
req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //чтоб не кэшировались GET запросы
req.send(null); // отправить запрос
return req.responseText;
}
?
Я её не первый раз вижу в плагинах, но не могу понять для чего она.
Да, и кста, что делает
function doLoad(url)
{
if (window.XMLHttpRequest)
req = new XMLHttpRequest();
else
req = new ActiveXObject("Microsoft.XMLHTTP");
req.open("GET", url, false); // задать параметры методу open
req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //чтоб не кэшировались GET запросы
req.send(null); // отправить запрос
return req.responseText;
}?
Я её не первый раз вижу в плагинах, но не могу понять для чего она.
Загружает указанный урл и возвращает исходник загруженной страницы
if(!temp_inf.match(external.SCity.Text + /" - [0-9] ч. [0-9] мин."/||external.SCity.Text + /" - [0-9] мин."/||external.SCity.Text + /" - [0-9] сек."/)) uspeh=false;
Вот так?
Вставил это
else if(external.room_name == "Грибница" && uspeh==false){
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
if(!get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/) && get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/))
{
get_mainframe().document.getElementsByName("getquest")[0].click();
top.Chat.Self.AddMessage("Работает взятие задания");
}
if(get_mainframe().document.all[0].innerHTML.match(/Для вас нет заданий в этом подземелье.../))
//Для вас нет заданий в этом подземелье...Задания отсюда недоступны///// пока что поставил 1-й вариант, чтобы проверить работоспособность
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();
uspeh=true;
top.Chat.Self.AddMessage("Работает выход из комнаты");
}
}
но теперь в грибнице после взятия задания не меняет успех в тру, то есть не идёт обратно.
Тогда уж лучше считывать не "Время до смены задания", а:
1) "<ТЕКУЩИЙ_ГОРОД> city - [0-9] ч. [0-9] мин."
2) "<ТЕКУЩИЙ_ГОРОД> city - [0-9] мин."
3) "<ТЕКУЩИЙ_ГОРОД> city - [0-9] сек."Т.к. получается что если делаешь задания на несколько городов, то бот не будет брать задание!
На несоклько городов еще очень рано замахиваться.
Тут хотя бы для текущего написать.
если uspeh==false, то выполняется строка
Так. Во первых ты не написал проверку, есть ли уже задание в Умениях.
Во вторых, нужна еще проверка на выполнение задания. А то выполнив, задание всё еще будет висеть, и бот всё еще будет ломиться его выполнять.
Вставил это
else if(external.room_name == "Грибница" && uspeh==false){
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
if(!get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/) && get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/))
{
get_mainframe().document.getElementsByName("getquest")[0].click();
top.Chat.Self.AddMessage("Работает взятие задания");
}
if(get_mainframe().document.all[0].innerHTML.match(/Для вас нет заданий в этом подземелье.../))
//Для вас нет заданий в этом подземелье...Задания отсюда недоступны///// пока что поставил 1-й вариант, чтобы проверить работоспособность
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();
uspeh=true;
top.Chat.Self.AddMessage("Работает выход из комнаты");
}
}но теперь в грибнице после взятия задания не меняет успех в тру, то есть не идёт обратно.
Так, хорошо. А где именно ты после взятия задания изменяешь значение переменной?
Я вижу только в месте, где стоит проверка на то, что задания нельзя взять)
Кстати, я бы на твоем месте переделал проверку для "Для вас нет заданий в этом подземелье" след образом:
регуляркой выдирал бы значение Suncity: xxx репы.
И if(xxx == 24999) - выходим
if(!temp_inf.match(external.SCity.Text + /" - [0-9] ч. [0-9] мин."/||external.SCity.Text + /" - [0-9] мин."/||external.SCity.Text + /" - [0-9] сек."/)) uspeh=false;Вот так?
ну да, что-то вроде того.. я правда еще яваскрипт плохо знаю, но идея такая)
Т.к. получается что если делаешь задания на несколько городов, то бот не будет брать задание!
На несоклько городов еще очень рано замахиваться.
Тут хотя бы для текущего написать.
ну хотя-бы проверку делать на тот город, в котором находишься. мне кажется - логичнее) да и делать, так сразу, чтобы потом меньше переделывать) не думаю что тут особо сложно прописать эту проверку)
Кстати [0-9] надо заменить на "любая цифра", не знаю просто как это в яваскрипте делается.. но как горлум написал, там будет искать текст [0-9]..
Кстати [0-9] надо заменить на "любая цифра", не знаю просто как это в яваскрипте делается.. но как горлум написал, там будет искать текст [0-9]..
А зачем, пардон, ебаться с цифрами?
Если в текущем городе будет задержка на задание, то достаточно будет взять
if(!get_mainframe().document.all[0].innerHTML.toLowerCase().match(external.SCity.Text + " - "))
uspeh = false;
malrom пишет:Кстати [0-9] надо заменить на "любая цифра", не знаю просто как это в яваскрипте делается.. но как горлум написал, там будет искать текст [0-9]..
А зачем, пардон, ебаться с цифрами?
Если в текущем городе будет задержка на задание, то достаточно будет взятьif(!get_mainframe().document.all[0].innerHTML.toLowerCase().match(external.SCity.Text + " - "))
uspeh = false;
кстати да)
Значит должно быть как-то так:
else if(external.room_name == "Грибница" && uspeh==false){
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
if(!get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/) && get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/))
{
get_mainframe().document.getElementsByName("getquest")[0].click();
top.Chat.Self.AddMessage("Работает взятие задания");
}
var temp_inf = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?skills=1&rand=" + Math.random());
if(temp_inf.match(/Время до смены задания:/))
uspeh=true;
top.Chat.Self.AddMessage("Проверяю наличие задания");
if(get_mainframe().document.all[0].innerHTML.match(/Для вас нет заданий в этом подземелье.../))
//Для вас нет заданий в этом подземелье...Задания отсюда недоступны///// пока что поставил 1-й вариант, чтобы проверить работоспособность
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();
top.Chat.Self.AddMessage("Работает выход из комнаты");
}
}
Добавил ещё одну проверку, именно после клацанья на получение. Правда протестить не могу, нету чаров с возможностью взятия задания в сане.
Значит должно быть как-то так:
else if(external.room_name == "Грибница" && uspeh==false){
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
if(!get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/) && get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/))
{
get_mainframe().document.getElementsByName("getquest")[0].click();
top.Chat.Self.AddMessage("Работает взятие задания");
}
var temp_inf = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?skills=1&rand=" + Math.random());
if(temp_inf.match(/Время до смены задания:/))
uspeh=true;
top.Chat.Self.AddMessage("Проверяю наличие задания");
if(get_mainframe().document.all[0].innerHTML.match(/Для вас нет заданий в этом подземелье.../))
//Для вас нет заданий в этом подземелье...Задания отсюда недоступны///// пока что поставил 1-й вариант, чтобы проверить работоспособность
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();
top.Chat.Self.AddMessage("Работает выход из комнаты");
}
}Добавил ещё одну проверку, именно после клацанья на получение. Правда протестить не могу, нету чаров с возможностью взятия задания в сане.
Тогда уж лучше так:
else if(external.room_name == "Грибница" && uspeh==false)
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
if(get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/) && !get_mainframe().document.all[0].innerHTML.match(/24999/))
{
get_mainframe().document.getElementsByName("getquest")[0].click();
uspeh=true;
top.Chat.Self.AddMessage("Работает взятие задания");
}
if(get_mainframe().document.all[0].innerHTML.match(/Вы получили новое задание/)) uspeh=true;
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();
top.Chat.Self.AddMessage("Работает выход из комнаты");
}