Сам же говоришь что external-лы - штука не надёжная) Не проще всё-таки регулярками?
В пещере, на любой клетке есть надпись "смотрим на", думаю к ней можно привязяться, хотя это наверное не безопасно.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Combots Бот для БК » Сообщения от gorlum
Сам же говоришь что external-лы - штука не надёжная) Не проще всё-таки регулярками?
В пещере, на любой клетке есть надпись "смотрим на", думаю к ней можно привязяться, хотя это наверное не безопасно.
Ненене, именно так, как написано.
Суть записи в том, что идет одновременно и присваивание и проверка на null. Если в match совпадений нету, то в room ничего не попадет, значит в результат условия выдаст false.
Ух ты и закрутил) Я второй день знакомлюсь с яваскриптом, а тут уже такие мне расказывают)
К тому же, не знаю, как сделать проверку на то, что чар в данже.
Почему не проверять по каким-то регуляркам в самом начале плагина?
Кто будет делать какой квест в пещере - гляньте в дебагбаре инфу о кнопке Завершить задание.
Нужно её имя, если оно есть.
if(get_mainframe().document.all[0].innerHTML.match(/Завершить задание/))
{
top.frames[external.mainFrameIndex].document.getElementsByName("finishquest")[0].click();
top.Chat.Self.AddMessage("Работает завершение задания");
}
Вот так можно? Или .match сейчас не сработает, потому что "Завершить задание" написано на кнопке?
Или так
if(top.frames[external.mainFrameIndex].document.getElementsByName("finishquest").length > 0)
{
top.frames[external.mainFrameIndex].document.getElementsByName("finishquest")[0].click();
top.Chat.Self.AddMessage("Работает завершение задания");
}
?
Запустил плагин прямо посреди подземки, в бою
![]()
Бой окончил и следом попал в стресс — колбасится, переключает инвентарь, не может "понять" что с ним![]()
Пришлось отключить.Параллельно включены два плагина: морковка и отключение лога боя.
Надпись "Требуется взять задание" во фрейм чата выдал.
Значит надо ещё поставить проверку на подземку. Какие там есть регулярки?
"finishquest" название кнопки завершения задания.
if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
room = String(room[1])
Я вот это не понял. Может должно быть
if(room == temp_p.match(/<nobr>([^<]+)<\/nobr>/))
room = String(room[1])
?
gorlum пишет:Надо что бы кто-то потестил, есть желающие?
С рыцаркой Сана подойдёт?
Дайте инструкции, что куда вставить — сделаю, посмотрю.
zadanie.js, в папку с плагинами. Как обычно)
Мля, теперь мне нифига не понятно) Надо что бы кто-то потестил, есть желающие?
хотя последний кусок кода, который я написал - рабочий.
Я его и тестил. Он рабочий до тех пор, пока бот нормально обновляет external.room_name
Нашел у тебя недочет:
ты ставишь обновление страницы скилов раз в 6 мин. только вот страница эта у тебя обновляется каждые 5сек из zadanieHandler().
Может быть потому что эта фунция вызывается zadanieHandler()-м, где уже прописан интервал в 5 сек?
Про кнопку вродь понял, в массив buttnos забрасываются все кнопки на странице, циклом идет их перебор, и если кнопка имеет текст "Задание", и она не скрыта - то эта кнопка жмётся.
А вот метод парсинга не понял, сбрось пожалуйста ссылку на весь плагин, буду разбираться.
ЗЫ: хотя последний кусок кода, который я написал - рабочий.
Сделал вот так, думаю должно работать в всех подземках
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(/Репутация в/)&& !get_mainframe().document.all[0].innerHTML.match(/24999/))
{
get_mainframe().document.getElementsByName("getquest")[0].click();
top.Chat.Self.AddMessage("Работает взятие задания");
}
proverkaHandler(uspeh);
if(get_mainframe().document.all[0].innerHTML.match(/Для вас нет заданий в этом подземелье.../)||get_mainframe().document.all[0].innerHTML.match(/Время до смены задания:/)||get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/))
{
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("Работает выход из комнаты");
Да, так наверное лучше всего)
Так наверное даже лучше
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("Работает взятие задания");
}
proverkaHandler(uspeh);
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("Работает выход из комнаты");
}
}
При
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;
else
uspeh=true;
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(/Задания отсюда недоступны/) && 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("Работает выход из комнаты");
}
}
но теперь в грибнице после взятия задания не меняет успех в тру, то есть не идёт обратно.
if(!temp_inf.match(external.SCity.Text + /" - [0-9] ч. [0-9] мин."/||external.SCity.Text + /" - [0-9] мин."/||external.SCity.Text + /" - [0-9] сек."/)) uspeh=false;
Вот так?
Да, и кста, что делает
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;
}
?
Я её не первый раз вижу в плагинах, но не могу понять для чего она.
если 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 не даёт боту ломится в бои при выполнении плагина, но она не работает, думал вернуться к ней позже.
Ребят, лучник не использует приемы "Занять позицию от защиты", "Занять позицию от атаки". Проблема только у меня или есть ещё?
_name = "defence_bestposition_blk";
это от защиты,
_name = "defence_bestposition_hit";
это от атаки.
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 пишет:Как-то так?
тут запуск этой функции каждые полчаса
if(!get_mainframe().document.all[0].innerHTML.match(/Время до смены задания: /))
uspeh=true;Да, только вот в регулярке убери последний пробел после двоеточия. А то реагирует неправильно.
Кстати, вручную можно включить режим данжа?
Это как "вручную"?
Как-то так?
тут запуск этой функции каждые полчаса
if(!get_mainframe().document.all[0].innerHTML.match(/Время до смены задания: /))
uspeh=true;
gorlum пишет:Посмотрел через дебагбар закладку "Репутация", у неё есть id, которые равно L6, значит её можно нажать как-то так?
get_mainframe().document.getElementsById("L6")[0].click();Зачем её нажимать?
Это лишь закладка цельной страницы, которая уже подгружена в documents.all[0]
То есть, можно сразу искать фразу "Время до смены задания: ", и по ней уже ориентироваться?
Combots Бот для БК » Сообщения от gorlum