Сам же говоришь что external-лы - штука не надёжная) Не проще всё-таки регулярками?

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

Ненене, именно так, как написано.
Суть записи в том, что идет одновременно и присваивание и проверка на null. Если в match совпадений нету, то в room ничего не попадет, значит в результат условия выдаст false.

Ух ты и закрутил) Я второй день знакомлюсь с яваскриптом, а тут уже такие мне расказывают)

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

Почему не проверять по каким-то регуляркам в самом начале плагина?

Exile пишет:

Кто будет делать какой квест в пещере - гляньте в дебагбаре инфу о кнопке Завершить задание.
Нужно её имя, если оно есть.

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("Работает завершение задания");
                }

?

hyppo пишет:

Запустил плагин прямо посреди подземки, в бою smile
Бой окончил и следом попал в стресс — колбасится, переключает инвентарь, не может "понять" что с ним lol
Пришлось отключить.

Параллельно включены два плагина: морковка и отключение лога боя.

Надпись "Требуется взять задание" во фрейм чата выдал.

Значит надо ещё поставить проверку на подземку. Какие там есть регулярки?

"finishquest" название кнопки завершения задания.

if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
            room = String(room[1])

Я вот это не понял. Может должно быть

if(room == temp_p.match(/<nobr>([^<]+)<\/nobr>/))
            room = String(room[1])

?

hyppo пишет:
gorlum пишет:

Надо что бы кто-то потестил, есть желающие?

С рыцаркой Сана подойдёт?
Дайте инструкции, что куда вставить — сделаю, посмотрю.

zadanie.js, в папку с плагинами. Как обычно)

Мля, теперь мне нифига не понятно) Надо что бы кто-то потестил, есть желающие?

Exile пишет:

хотя последний кусок кода, который я написал - рабочий.

Я его и тестил. Он рабочий до тех пор, пока бот нормально обновляет 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 не даёт боту ломится в бои при выполнении плагина, но она не работает, думал вернуться к ней позже.

170

(48 ответов, оставленных в Общий)

Кровавое месиво пишет:

Ребят, лучник не использует приемы "Занять позицию от защиты", "Занять позицию от атаки". Проблема только у меня или есть ещё?

_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)", и дальше не идёт.

А, понял, придёт Анахроник - скажет)

Exile пишет:
gorlum пишет:

Как-то так?

тут запуск этой функции каждые полчаса
            if(!get_mainframe().document.all[0].innerHTML.match(/Время до смены задания: /))
            uspeh=true;

Да, только вот в регулярке убери последний пробел после двоеточия. А то реагирует неправильно.

Кстати, вручную можно включить режим данжа?


Это как "вручную"?

Как-то так?

тут запуск этой функции каждые полчаса
            if(!get_mainframe().document.all[0].innerHTML.match(/Время до смены задания: /))
            uspeh=true;
Exile пишет:
gorlum пишет:

Посмотрел через дебагбар закладку "Репутация", у неё есть id, которые равно L6, значит её можно нажать как-то так?

get_mainframe().document.getElementsById("L6")[0].click();

Зачем её нажимать?
Это лишь закладка цельной страницы, которая уже подгружена в documents.all[0]

То есть, можно сразу искать фразу "Время до смены задания: ", и по ней уже ориентироваться?