1

Тема: Плагин взятия задания, все города, нужно протестить. От Gorlum

Самый последний рабочий вариант

var uspeh=false;
var proverkaTimer = {};
var zadanieTimer = {};
var questIsActive = false;
var room ='';
var randomValue;
var min = 360000;
var max = 400000;
 
function zadanie(enabled)
{
    if(enabled)
    {
        proverkaTimer[mylogin] = setInterval("proverkaHandler()",1000);
    }
    else
    {
        if(zadanieTimer[mylogin]) clearInterval(zadanieTimer[mylogin]);
        external.SBattleAbovePercent.Text = 100;
        clearInterval(proverkaTimer[mylogin]);
    }
}
 
function proverkaHandler()
{
    clearInterval(proverkaTimer[mylogin]);
    randomValue = Math.floor(Math.random()*(max - min) + min);
    proverkaTimer[mylogin] = setInterval("proverkaHandler()", randomValue);
    if(top.Battle.bInBattle || top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i))
    {
        external.SBattleAbovePercent.Text = 100;
        return;
    }
    external.SBattleAbovePercent.Text = 101;
    var tempstr = '';
    var temp_inf = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?skills=1&rand=" + Math.random());
    if(external.SCity.Text == "suncity")
        tempstr = "Suncity</B> - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "sandcity")
        tempstr = "Sandcity</B> - Рыцарь первого круга, 100300 / 24999";
    if(external.SCity.Text == "angelscity")
        tempstr = "Angels city</B> - Рыцарь первого круга, 10000 / 24999";
    if(external.SCity.Text == "demonscity")
        tempstr = "Demons city</B> - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "mooncity")
        tempstr = "Mooncity</B> - Рыцарь первого круга, 24999 / 24999";
 
    if(zadanieTimer[mylogin]) clearInterval(zadanieTimer[mylogin]);   
    zadanieTimer[mylogin] = setInterval("zadanieHandler()",3000);
 
    if(temp_inf.indexOf(tempstr) > -1 )
    {
        external.AddToChat("Задания не требуется");
        uspeh = true;
        questIsActive = false;
        return;
    }
    var patt = external.SCity.Text + " - \\d+ (мин|ч.|сек)";
    if(!temp_inf.toLowerCase().match(patt))
    {
        external.AddToChat("Требуется взять задание");
        uspeh = false;
    }
    else
    {
        external.AddToChat("Задания не требуется");
        uspeh = true;
        questIsActive = false;
    }
}
 
function zadanieHandler()
{
    try
    {
        if(top.Battle.bInBattle || top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i)) return;
        var temp_p = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
        if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
            room = String(room[1])
 
        if(uspeh==false || questIsActive)
        {
            if(room)
            {
                if (room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Грибная лужайка");
                else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Странное Место");
                else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Грибная поляна");
                else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Грибница");
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "suncity" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Центральная грибница");
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "angelscity" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Центральный утес");
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "mooncity" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Центр падения");
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "sandcity" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Центральный Оазис");
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "demoncity" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Центральный Разлом");
                else if(room.match(/Зал воинов/i) && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("\'Бойцовский Клуб\'");
                else if(room == "Центральный утес" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Каменно-цветочная гряда");
                else if(room == "Каменно-цветочная гряда" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Утес безысходности");
                else if(room == "Утес безысходности" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Вход в Заповедник");
                else if(room == "Вход в Заповедник" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Спуск в Бездну");
                else if(room == "Центральный Оазис" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Цветочный Пустырь");
                else if(room == "Цветочный Пустырь" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Последний Привал");
                else if(room == "Последний Привал" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Внутренний двор");
                else if(room == "Внутренний двор" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Пещеры Мглы");
                else if(room == "Центр падения" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Спящая площадь");
                else if(room == "Спящая площадь" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Улица Камней");
                else if(room == "Улица Камней" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Проклятые Руины");
                else if(room == "Центральный Разлом" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Разлом Поклонения");
                else if(room == "Разлом Поклонения" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Дорога Храбрости");
                else if(room == "Дорога Храбрости" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Спуск в катакомбы");
                else if(room == "Проклятые Руины" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Пещера Тысячи проклятий");
                else if(room == "Спуск в катакомбы" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Спуск в Катакомбы");
                else if(room == "Пещера Тысячи проклятий" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Пещера Тысячи проклятий");
                else if((room == "Спуск в Катакомбы" || room == "Пещера Тысячи проклятий" || room == "Пещеры Мглы" || room == "Грибница" || room == "Спуск в Бездну"))
                {
                    if(uspeh == false && top.frames[external.mainFrameIndex].document.getElementsByName("pass").length > 0)
                    {
                        var btn = top.frames[external.mainFrameIndex].document.getElementsByTagName("INPUT");
                        for(i = 0;i<btn.length;i++)
                        {
                            if(btn[i].outerHTML.match(/Задания/) && btn[i].style.visibility!="hidden")
                            {
                                btn[i].click();
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                if(top.frames[external.mainFrameIndex].document.getElementsByName("quest_name").length > 0 && uspeh == false)
                {
                    external.AddToChat("Завершаем задание");
                    if(top.frames[external.mainFrameIndex].document.getElementsByName("finishquest").length > 0)
                    {
                        top.frames[external.mainFrameIndex].document.getElementsByName("finishquest")[0].click();
                        uspeh = false;
                        questIsActive = false;
                        external.AddToChat("Завершаем задание");
                    }
                    if(!top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Репутация в Suncity: 0/))
                    {
                        if(top.frames[external.mainFrameIndex].document.getElementsByName("getquest").length > 0)
                        {
                            top.frames[external.mainFrameIndex].document.getElementsByName("getquest")[0].click();
                            external.AddToChat("Работает взятие задания");
                        }
                        else external.AddToChat("Задание уже есть");
                        uspeh=true;
                        questIsActive = true;
                    }
 
                    if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Вы получили новое задание/))
                    {
                        uspeh=true;
                        questIsActive = true;
                    }
                    else if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Для вас нет заданий/))
                        {
                            uspeh = true;
                            questIsActive = false;
                        }
 
                    if(uspeh == true)
                    {
                        external.AddToChat("Работает выход из комнаты");
                        btn = top.frames[external.mainFrameIndex].document.getElementsByTagName("INPUT");
                        for(i = 0;i<btn.length;i++)
                        {
                            if(btn[i].outerHTML.match(/Вернуться/) && btn[i].style.visibility!="hidden")
                            {
                                btn[i].click();
                                break;
                            }
                        }
                    }           
                }
            }
        }
        if(questIsActive && uspeh)
        {
            if(top.frames[external.mainFrameIndex].document.getElementsByName("pass").length > 0 && (room == "Спуск в Катакомбы" || room == "Пещера Тысячи проклятий" || room == "Пещеры Мглы" || room == "Грибница" || room == "Спуск в Бездну"))
            {
                external.dungeonEnabled = true;
                external.SBattleAbovePercent.Text = 100;
            }
        }
        if(!questIsActive && uspeh)
        {
            external.dungeonEnabled = false;
            var loc = '';
            if(external.SCity.Text == "suncity")
                loc = "Грибная поляна";
            if(external.SCity.Text == "sandcity")
                loc = "Внутренний двор";
            if(external.SCity.Text == "angelscity")
                loc = "Вход в Заповедник";
            if(external.SCity.Text == "demonscity")
                loc = "Спуск в катакомбы";
            if(external.SCity.Text == "mooncity")
                loc = "Пещера Тысячи проклятий";
 
            if((room == "Спуск в Катакомбы" || room == "Пещера Тысячи проклятий" || room == "Пещеры Мглы" || room == "Грибница" || room == "Спуск в Бездну") && top.frames[external.mainFrameIndex].document.getElementsByName("pass").length > 0)
            {
                external.SBattleAbovePercent.Text = 101;
                var tmp = top.frames[external.mainFrameIndex].document.anchors;
                for(i = 0;i<tmp.length;i++)
                {
                    if(tmp[i].outerHTML.match(loc) && tmp[i].style.visibility!="hidden" && tmp[i].onclick)
                    {
                        tmp[i].click();
                        break;
                    }
                }
            }
            else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Странное Место");
            else if(room == "Спуск в катакомбы" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Дорога Храбрости");   
            else if(room == "Пещера Тысячи проклятий" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Проклятые Руины");
            else if(room == "Дорога Храбрости" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Разлом Поклонения");
            else if(room == "Разлом Поклонения" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Центральный Разлом");               
            else if(room == "Проклятые Руины" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Улица Камней");
            else if(room == "Улица Камней" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Спящая площадь");
            else if(room == "Спящая площадь" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Центр падения");
            else if(room == "Центр падения" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Бойцовский Клуб");                 
            else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Грибная лужайка");
            else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Центральная грибница");
            else if(room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Бойцовский Клуб");
            else if(room == "Бойцовский Клуб" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Зал воинов");
            else if(room == "Вход в Заповедник" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Утес безысходности");
            else if(room == "Утес безысходности" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Каменно-цветочная гряда");
            else if(room == "Каменно-цветочная гряда" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Центральный утес");
            else if(room == "Центральный утес" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Бойцовский Клуб");
            else if(room == "Внутренний двор" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Последний Привал");
            else if(room == "Последний Привал" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Цветочный Пустырь");
            else if(room == "Цветочный Пустырь" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Центральный Оазис");
            else if(room == "Центральный Оазис" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Бойцовский Клуб");               
            else if(room == "Зал воинов")
                external.SBattleAbovePercent.Text = 100;
        }
    }
    catch(err)
    {
        external.AddToChat("Ошибка!");
    }
}
 
function Walk(name)
{
    var imgs = top.frames[external.mainFrameIndex].document.images;
    for(i = 0;i<imgs.length;i++)
    {
        if(imgs[i].outerHTML.match(name) && imgs[i].style.visibility != "hidden" && imgs[i].onclick && (imgs[i].height*imgs[i].width)>60)
        {
            external.AddToChat("Иду в " + name);
            imgs[i].click();
            break;
        }
    }
}
 
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;
}

Создаем в папке плагинов zadanie.js и забрасываем туда текст выше. И если что-то не работает, или работает не правильно - пишите сюда.

Вписаны маршруты ВСЕХ городов, где есть подземка, плагин практически готов у употреблению) В данный момент проверить нет возможности. Кому интересно - тестите, и напишите работает ли оно вообще)

Лайт версия, которая только берет задание, и не идёт в пещеру, и не возвращается в хаоты:

var uspeh=false;
var proverkaTimer = {};
var zadanieTimer = {};
var questIsActive = false;
var room ='';
var randomValue;
var min = 360000;
var max = 400000;
 
function zadanie(enabled)
{
    if(enabled)
    {
        proverkaTimer[mylogin] = setInterval("proverkaHandler()",1000);
    }
    else
    {
        if(zadanieTimer[mylogin]) clearInterval(zadanieTimer[mylogin]);
        external.SBattleAbovePercent.Text = 100;
        clearInterval(proverkaTimer[mylogin]);
    }
}
 
function proverkaHandler()
{
    clearInterval(proverkaTimer[mylogin]);
    randomValue = Math.floor(Math.random()*(max - min) + min);
    proverkaTimer[mylogin] = setInterval("proverkaHandler()", randomValue);
    if(top.Battle.bInBattle || top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i))
    {
        external.SBattleAbovePercent.Text = 100;
        return;
    }
    external.SBattleAbovePercent.Text = 101;
    var tempstr = '';
    var temp_inf = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?skills=1&rand=" + Math.random());
    if(external.SCity.Text == "suncity")
        tempstr = "Suncity</B> - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "sandcity")
        tempstr = "Sandcity</B> - Рыцарь первого круга, 100300 / 24999";
    if(external.SCity.Text == "angelscity")
        tempstr = "Angels city</B> - Рыцарь первого круга, 10000 / 24999";
    if(external.SCity.Text == "demonscity")
        tempstr = "Demons city</B> - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "mooncity")
        tempstr = "Mooncity</B> - Рыцарь первого круга, 24999 / 24999";
 
    if(zadanieTimer[mylogin]) clearInterval(zadanieTimer[mylogin]);   
    zadanieTimer[mylogin] = setInterval("zadanieHandler()",3000);
 
    if(temp_inf.indexOf(tempstr) > -1 )
    {
        external.AddToChat("Задания не требуется");
        uspeh = true;
        questIsActive = false;
        return;
    }
    var patt = external.SCity.Text + " - \\d+ (мин|ч.|сек)";
    if(!temp_inf.toLowerCase().match(patt))
    {
        external.AddToChat("Требуется взять задание");
        uspeh = false;
    }
    else
    {
        external.AddToChat("Задания не требуется");
        uspeh = true;
        questIsActive = false;
    }
}
 
function zadanieHandler()
{
    try
    {
        if(top.Battle.bInBattle || top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i)) return;
        var temp_p = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
        if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
            room = String(room[1])
 
        if(uspeh==false || questIsActive)
        {
            if(room)
            {
                if (room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Грибная лужайка");
                else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Странное Место");
                else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Грибная поляна");
                else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Грибница");
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "suncity" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Центральная грибница");
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "angelscity" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Центральный утес");
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "mooncity" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Центр падения");
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "sandcity" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Центральный Оазис");
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "demoncity" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Центральный Разлом");
                else if(room.match(/Зал воинов/i) && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("\'Бойцовский Клуб\'");
                else if(room == "Центральный утес" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Каменно-цветочная гряда");
                else if(room == "Каменно-цветочная гряда" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Утес безысходности");
                else if(room == "Утес безысходности" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Вход в Заповедник");
                else if(room == "Вход в Заповедник" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Спуск в Бездну");
                else if(room == "Центральный Оазис" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Цветочный Пустырь");
                else if(room == "Цветочный Пустырь" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Последний Привал");
                else if(room == "Последний Привал" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Внутренний двор");
                else if(room == "Внутренний двор" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Пещеры Мглы");
                else if(room == "Центр падения" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Спящая площадь");
                else if(room == "Спящая площадь" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Улица Камней");
                else if(room == "Улица Камней" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Проклятые Руины");
                else if(room == "Центральный Разлом" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Разлом Поклонения");
                else if(room == "Разлом Поклонения" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Дорога Храбрости");
                else if(room == "Дорога Храбрости" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Спуск в катакомбы");
                else if(room == "Проклятые Руины" && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Пещера Тысячи проклятий");
                else if(room == "Спуск в катакомбы" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Спуск в Катакомбы");
                else if(room == "Пещера Тысячи проклятий" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
                    Walk("Пещера Тысячи проклятий");
                else if((room == "Спуск в Катакомбы" || room == "Пещера Тысячи проклятий" || room == "Пещеры Мглы" || room == "Грибница" || room == "Спуск в Бездну"))
                {
                    if(uspeh == false && top.frames[external.mainFrameIndex].document.getElementsByName("pass").length > 0)
                    {
                        var btn = top.frames[external.mainFrameIndex].document.getElementsByTagName("INPUT");
                        for(i = 0;i<btn.length;i++)
                        {
                            if(btn[i].outerHTML.match(/Задания/) && btn[i].style.visibility!="hidden")
                            {
                                btn[i].click();
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                if(top.frames[external.mainFrameIndex].document.getElementsByName("quest_name").length > 0 && uspeh == false)
                {
                    external.AddToChat("Завершаем задание");
                    if(top.frames[external.mainFrameIndex].document.getElementsByName("finishquest").length > 0)
                    {
                        top.frames[external.mainFrameIndex].document.getElementsByName("finishquest")[0].click();
                        uspeh = false;
                        questIsActive = false;
                        external.AddToChat("Завершаем задание");
                    }
                    if(!top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Репутация в Suncity: 0/))
                    {
                        if(top.frames[external.mainFrameIndex].document.getElementsByName("getquest").length > 0)
                        {
                            top.frames[external.mainFrameIndex].document.getElementsByName("getquest")[0].click();
                            external.AddToChat("Работает взятие задания");
                        }
                        else external.AddToChat("Задание уже есть");
                        uspeh=true;
                        questIsActive = true;
                    }
 
                    if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Вы получили новое задание/))
                    {
                        uspeh=true;
                        questIsActive = true;
                    }
                    else if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Для вас нет заданий/))
                        {
                            uspeh = true;
                            questIsActive = false;
                        }
 
                    if(uspeh == true)
                    {
                        external.AddToChat("Работает выход из комнаты");
                        btn = top.frames[external.mainFrameIndex].document.getElementsByTagName("INPUT");
                        for(i = 0;i<btn.length;i++)
                        {
                            if(btn[i].outerHTML.match(/Вернуться/) && btn[i].style.visibility!="hidden")
                            {
                                btn[i].click();
                                break;
                            }
                        }
                    }           
                }
            }
            external.SBattleAbovePercent.Text = 100;
        }       
    }
    catch(err)
    {
        external.AddToChat("Ошибка!");
    }
}
 
function Walk(name)
{
    var imgs = top.frames[external.mainFrameIndex].document.images;
    for(i = 0;i<imgs.length;i++)
    {
        if(imgs[i].outerHTML.match(name) && imgs[i].style.visibility != "hidden" && imgs[i].onclick && (imgs[i].height*imgs[i].width)>60)
        {
            external.AddToChat("Иду в " + name);
            imgs[i].click();
            break;
        }
    }
}
 
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;
}

Нужно проверить как работает, сам не тестил.

Да, кстати, сейчас плагин проверяет наличие задания каждые 6-7 минут. Это значение можно изменить, вписав в var min и var max свои значения. Время ставить в милисекундах, 1 секунда = 1000 милисекунд.

Отредактировано gorlum (2011-07-07 14:16:49)

2

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Все правильно понимаешь...в ИЕ зашел в БК. Стоишь в той локации, из которой хочешь сделать переход, клацаешь на нужную локацию. И после того как персонаж перешел (т.е. после того, как обновился верхний фрейм) жмешь в верхнем фрейме не на картинке, а на пустом месте свойства. и Там увидишь нужный урл.

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

3

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Спасибо, сейчас попробую.

Понял, спасибо.

Отредактировано gorlum (2011-06-26 21:28:10)

4

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Начал с Сана, сделал переходы, и таймер, который запускает плагин через каждые 24 часа (как сделать проверку на задание в умениях я не знаю, если подскажите - скажу спасибо). Подключил его, но он ничего не хочет делать( Подскажите в чем проблема? И заодно где можно найти инфу о том, как заставить бота клацать кнопки для полученя задания? Пытался найти - но ничего похожего нету(

function zadanie(enabled)
{
    if(enabled)
    {
     zadanieTimer = setInterval("zadanieHandler()",86400000);// тут ставил разный интервал что бы проверить, 5-10 секунд
 
    }
    else
    {
     clearInterval(zadanieTimer);
    }
}
function zadanieHandler()
{
if (external.room_name == "Центральная грибница")
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o8&rnd=" + Math.random();
    else if(external.room_name == "Грибная лужайка")
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
    else if(external.room_name == "Странное Место")
            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].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?top=" + Math.random();
    else if(external.room_name == "Бойцовский Клуб")
            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].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();   
    else if(external.room_name == "Зал воинов 2")
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
    else if(external.room_name == "Зал воинов 3")
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
    else if(external.room_name == "Этаж 2")
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o4&rnd=" + Math.random();
    else if(external.room_name == "Башня рыцарей-магов")
            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].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
    else if(external.room_name == "Торговый Зал")
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
//тут код для взятия задания, пока что не знаю как это сделать   
}
 
external.AddToChat("Взял задание");
 
}

Отредактировано gorlum (2011-06-26 23:14:47)

5

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

1я недоработка...он у тебя будет постоянно клацать на переход...не дождавшись окончания задержки...надо делать условие такого вида

if(external.room_name == "Рыцарский зал" && top.frames[external.mainFrameIndex].is_accessible)

По поводу таймера незнаю, к сожалению sad
По поводу того, чтоб клацал по кнопкам- попробуй аналогично с переходами...клацнул на кнопку и жми свойства верхнего фрейма. Если не выйдет. Качаешь надстройку на ИЕ DebugBar. У тебя появится слева менюшка...в ней будет прицел smile Вот этот прицел перетягиваешь на нужную кнопку и тебе слева выдаст всю инфу о ней...попробуешь там ссылку найти. Так же в дебагбаре можно попробовать отследить  запрашиваемые ссылки, при нажатии на кнопки в БК.

Кстати...ты в сане. Я там пытался создать похожий плагин. Но там нереальные бока с названиями комнат у меня были...у меня все комнаты бот считал Грибницей sad Может поэтому у тебя и не работает. Можешь проверить, вставив в плагин строчку

top.Chat.Self.AddMessage(external.room_name);

и посмотреть правильно ли у тебя локации определяет.

Отредактировано ZhEkA_BK (2011-06-26 23:36:18)

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

6

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

как сделать проверку на задание в умениях

Например так:
через

combats.com/main.pl?skills=1&r=...

в innerHTML ж будет содержаться вся инфа со страницы.
Так вот через регулярку выдрать значение по строке "Текущие задания ["вот это значение надо выдрать" /]"
И если выдранное значение == 0 - берем задание
иначе, какое-то задание уже есть, идем делать дальше.
Минус такого способа - в разделе заданий кроме задания из пещеры никаких квестов быть не должно

Оставь надежду всяк сюда входящий ©

7

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Но там нереальные бока с названиями комнат у меня были.

Вы должны зайти под своим именем, чтобы увидеть скрытый текст.

попробуешь там ссылку найти.

Ссылки нету. Зато есть имя кнопки == getquest
нажатие будет через

get_mainframe().document.getElementsByName("getquest")[0].click()

как-то так, я не проверял)

Оставь надежду всяк сюда входящий ©

8

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

(Please log in or register to see this URL)

тут нормально видно, в том что выложил хрен что прочитаешь

9

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Точно всё скопировал? или в коде забыл написать закрывающую скобку первого условия?

Оставь надежду всяк сюда входящий ©

10

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Блин, долбаная невнимательность) Спасибо)

11

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Да...у самого такое часто бывает smile
Я такие "невнимательные" ошибки нахожу таким способом: просто запускаю двойным щелчком мышки плагин на выполнение в винде. Если ошибок нет, то ничего не произойдет, если они есть, ты выдаст ошибку со строкой, в которой она находится.
Про конструкцию в 8м посте, честно говоря, не понял smile

Отредактировано ZhEkA_BK (2011-06-27 00:58:29)

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

12

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Сделал поправки от Жеки, бот начал ходить, но на грибной поляне стоит, наверное потому что ссылка

".combats.com/dungeon.pl?top="

это что-то не то.

И ещё, когда он ходит, если у него достаточно хп, он пытается ломиться в бои, как это убрать?

Отредактировано gorlum (2011-06-27 01:03:10)

13

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Нашел,

".combats.com/main.pl?path=o1&rnd="

наугад кстати)

14

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Exile пишет:

Но там нереальные бока с названиями комнат у меня были.

Вы должны зайти под своим именем, чтобы увидеть скрытый текст.

попробуешь там ссылку найти.

Ссылки нету. Зато есть имя кнопки == getquest
нажатие будет через

get_mainframe().document.getElementsByName("getquest")[0].click()

как-то так, я не проверял)


Вот именно у кнопки "Получить задание" название есть, а вот а кнопки "Задания" - нету. Есть только

function onclick()
{
location="/dungeon.pl?ql=0.547ХХХХХХ"
}

15

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Ещё вопрос, который не относится к взятию задания: как поставить условие, если в чате бот пишет "Не могу зарядить название лука, закончились такие-то стрелы", короч нужно чтобы плагин сканил периодически чат, и если вылазит это сообщение - то делал определённую команду.

16

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Для тестирования/отладки:

var chatFrame = top.Battle.Self.arrLogs.oChat.Frame();
var chatMessage = "";
for(var i = 0; i<chatFrame.childNodes.length; i++)
{
    chatMessage = chatFrame.childNodes[i];
    alert(chatMessage.innerText);
}

А для реализации попросить меня добавить контрольную переменную, которая в момент публикации данного сообщения меняла бы своё значение, чтобы меньше грузить бота и свой мозг.

Software is like sex: it's better when it's free! © LinusTorvalds

17

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Чтобы бот не ломился в бой, посмотри по аналогии с ремонтом или лечением травм (Please log in or register to see this URL) что-то мне подсказывает, что нужна строка

external.battleWeared = false;

У кнопки задания ссылка будет вот такая

top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();

Неуверен, что правильно оформил...давно не кодил...вобщем должно быть combats.com/dungeon.pl?ql=0.хххххххххххх

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

18

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Забыл сказать, что в 9.1.3 будет новая функция для "правильного" клацания по ссылкам/переходам и прочему (_path = "Название, куда кликать: кнопка, маршрут, ссылка или просто картинка";).
И обновление комнаты привяжу к обновлению фрэйма, а не к таймеру как сейчас.

Software is like sex: it's better when it's free! © LinusTorvalds

19

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

anahronik пишет:

Забыл сказать, что в 9.1.3 будет новая функция для "правильного" клацания по ссылкам/переходам и прочему (_path = "Название, куда кликать: кнопка, маршрут, ссылка или просто картинка";).
И обновление комнаты привяжу к обновлению фрэйма, а не к таймеру как сейчас.

Ждём с нетерпением. Много можно будет мутить с этой функцией.

(Please log in or register to see this URL)

20

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

get_mainframe().document.getElementsByName("getquest")[0].click()

не работает, именно нажатие на кнопку, щелчек и обновление фрейма есть, но реакции - 0.

Отредактировано gorlum (2011-06-27 14:06:16)

21

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Так а чем не устраивает

top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();

Чтобы заходить в задания?

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

22

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

ZhEkA_BK пишет:

Так а чем не устраивает

top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();

Чтобы заходить в задания?

В задание заходит, а вот именно кнопку "Получить задание" не жмакает

23

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Через дебагбар проверил

get_mainframe().document.getElementsByName("getquest")[0].click()

задание берется smile
Так что скорее всего что-то у тебя в коде...выложи часть кода, где ты вставляешь эту строку...мот там фонарь smile

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

24

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

Та я уже столько возможных вариантов попробовал, и не один не пашет

else if(external.room_name == "Грибница" && top.frames[external.mainFrameIndex].location != "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random())   
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();         
    else if(external.room_name == "Грибница" && top.frames[external.mainFrameIndex].location == "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random())       
            get_mainframe().document.getElementsByName("getquest")[0].click();

и так

else if(external.room_name == "Грибница") {
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();         
            get_mainframe().document.getElementsByName("getquest")[0].click();
    }

И еще несколько комбинаций. Ничего не работает(

25

Re: Плагин взятия задания, все города, нужно протестить. От Gorlum

else if(external.room_name == "Грибница" && top.frames[external.mainFrameIndex].location != "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random())

Вот это теоретически работать не может, т.к. math.random() у бота и у сервера БК разный smile
Если у тебя в комнату с заданиями заходит, то попробуй привязаться к тексту, например Задания отсюда недоступны как то так:
условие на взятие задания

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(/Задания отсюда недоступны/))
ссылка на выход с комнаты
top.Chat.Self.AddMessage("Работает выход из комнаты");

Я конечно не уверен, что работать будет, но можешь попробовать...и еще, там могут быть ошибки орфографические, так что проверяй мой код smile
И вообще старайся почаще пользоваться  top.Chat.Self.AddMessage...буквально после каждого IF, чтобы знать, работает проверка на условие или нет.

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