76

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

Так наверное даже лучше

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("Проверяю наличие задания");
}

77

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

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("Работает выход из комнаты");

Да, так наверное лучше всего)

78

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

где-то ошибка, не хочет в на кнопку "Задания" нажимать

79

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

Сделал вот так, думаю должно работать в всех подземках

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("Работает выход из комнаты");
            }
 
       }

Вот только позже надо будет переделать это в функцию.

Кстати, в яваскрипте, функция может вызывать функию? В С++ такого точно нельзя, а тут как с этим?

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

80

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

Gorlum, надо менять логику на проверку текущий комнаты.
external.room_name не катит. Только что проверял, почему у тебя не сработал переход за заданием. У меня он не заработал тоже. А потому, что external.room_name выдал мне ЗВ1.
Посему, надо вернуться к методу, парсинга из сорцов страницы, а именно так, как это делал анахроник в своем плагине:

var room ='';
        var temp_p = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
        if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
            room = String(room[1])

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

var buttnos = get_mainframe().document.getElementsByTagName("INPUT");
for(i = 0;i<buttnos.length;i++)
{
    if(buttnos[i].outerHTML.match(/Задания/) && buttnos[i].style.visibility!="hidden")
        {
            buttnos[i].click();
            break;
        }
}

Это так, для наглядности. Ибо прямые адреса перехода по улицам палевны.

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

81

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

Про кнопку вродь понял, в массив buttnos забрасываются все кнопки на странице, циклом идет их перебор, и если кнопка имеет текст "Задание", и она не скрыта - то эта кнопка жмётся.
А вот метод парсинга не понял, сбрось пожалуйста ссылку на весь плагин, буду разбираться.

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

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

82

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

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

Я его и тестил. Он рабочий до тех пор, пока бот нормально обновляет external.room_name

Нашел у тебя недочет:
ты ставишь обновление страницы скилов раз в 6 мин. только вот страница эта у тебя обновляется каждые 5сек из zadanieHandler().

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

83

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

Exile пишет:

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

Я его и тестил. Он рабочий до тех пор, пока бот нормально обновляет external.room_name

Нашел у тебя недочет:
ты ставишь обновление страницы скилов раз в 6 мин. только вот страница эта у тебя обновляется каждые 5сек из zadanieHandler().

Может быть потому что эта фунция вызывается  zadanieHandler()-м, где уже прописан интервал в 5 сек?

84

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

Может быть потому что эта фунция вызывается  zadanieHandler()-м, где уже прописан интервал в 5 сек?

Именно поэтому.

Отредактировано Exile (2011-06-28 23:02:16)

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

85

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

Вроде починил.

var uspeh=false;
var room ='';
var randomValue;
var min = 360000;
var max = 400000;
 
function zadanie(enabled)
{
    if(enabled)
    {
        zadanieTimer = setInterval("zadanieHandler()",2000);
        proverkaTimer = setInterval("proverkaHandler()",1000);
    }
    else
    {
        clearInterval(zadanieTimer);
        clearInterval(proverkaTimer);
    }
}
 
function proverkaHandler()
{   
    clearInterval(proverkaTimer);
    randomValue = Math.floor(Math.random()*(max - min) + min);
    proverkaTimer = setInterval("proverkaHandler()", randomValue);
    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 - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "sandcity")
        tempstr = "Sandcity - Рыцарь первого круга, 10000 / 24999";
    if(external.SCity.Text == "angelscity")
        tempstr = "Angels city - Рыцарь первого круга, 10000 / 24999";
    if(external.SCity.Text == "demonscity")
        tempstr = "Demons city - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "mooncity")
        tempstr = "Mooncity - Рыцарь первого круга, 24999 / 24999";
    if(temp_inf.indexOf(tempstr) > -1 )
    {
        top.Chat.Self.AddMessage("Задания не требуется");
        uspeh = true;
        return;
    }
    if(!temp_inf.toLowerCase().match(external.SCity.Text + " - "))
    {
        top.Chat.Self.AddMessage("Требуется взять задание");
        uspeh = false;
    }
    else
    {
        top.Chat.Self.AddMessage("Задания не требуется");
        uspeh = true;
    }
 
}
 
function zadanieHandler()
{
    try
    {
        var temp_p = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
        if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
            room = String(room[1])
        external.battleWeared = false;
        if(uspeh==false)
        {       
            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 == "Зал воинов 2" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Бойцовский Клуб");
            else if(room == "Зал воинов 3" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("Бойцовский Клуб");
            else if(top.frames[external.mainFrameIndex].document.getElementsByName("pass").length > 0 && uspeh == false)
            {
                if(!top.frames[external.mainFrameIndex].location.toString().match(/ql=/))
                {
                    var btn = get_mainframe().document.getElementsByTagName("INPUT");
                    for(i = 0;i<btn.length;i++)
                    {
                        if(btn[i].outerHTML.match(/Задания/) && btn[i].style.visibility!="hidden")
                        {
                            btn[i].click();
                            break;
                        }
                    }
                }
 
                top.Chat.Self.AddMessage("Проверяю условие");
                if(!get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity: 0/) && top.frames[external.mainFrameIndex].document.getElementsByName("getquest").length > 0)
                {                   
                    top.frames[external.mainFrameIndex].document.getElementsByName("getquest")[0].click();
                    uspeh=true;
                    top.Chat.Self.AddMessage("Работает взятие задания");
                }
                else uspeh = true;
                if(get_mainframe().document.all[0].innerHTML.match(/Вы получили новое задание/)) uspeh=true;
                if(uspeh == true)
                {
                    top.Chat.Self.AddMessage("Работает выход из комнаты");
                    btn = get_mainframe().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(room == "Грибница" && top.frames[external.mainFrameIndex].is_accessible)
            {
                var tmp = get_mainframe().document.getElementsByTagName("a");
                for(i = 0;i<tmp.length;i++)
                {
                    if(tmp[i].outerHTML.match(/Грибная поляна/) && 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].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("Зал воинов");
        }
    }
    catch(err)
    {
        top.Chat.Self.AddMessage("Ошибка! Ебем гусей!");
    }
}
 
function Walk(name)
{
    var imgs = get_mainframe().document.getElementsByTagName("IMG");
    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)
        {
            top.Chat.Self.AddMessage("Иду в " + 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;
}

Добавил проверку на кол-во репы. Не тестил.
Оказывается, на странице задания нету имени комнаты.

Отредактировано Exile (2011-06-28 23:57:49)

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

86

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

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

87

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

gorlum пишет:

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

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

(Please log in or register to see this URL)

88

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

Не знаю как решить ситуацию правильно, но пока-что так:
если задержки на задание нету, но задание висит - бот протопает до пещеры, увидит, что задание взять низя и поставит флаг uspeh = true;

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

89

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

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

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

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

Если 24999\24999 - то в идеале ничего не должно произойти.
Если меньше, то должен потопать за заданием

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

90

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

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

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

91

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

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

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

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

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

92

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

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

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

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

?

93

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

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

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

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

(Please log in or register to see this URL)

94

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

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

95

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

hyppo пишет:

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

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

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

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

96

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

hyppo пишет:

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

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

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

Я вот это не понял.

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

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

97

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

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

?

Отредактировано gorlum (2011-06-29 02:19:27)

98

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

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

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

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

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

Отредактировано gorlum (2011-06-29 02:22:59)

99

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

SPOILER Show

var uspeh=false;
var questIsActive = false;
var room ='';
var randomValue;
var min = 360000;
var max = 400000;
 
function zadanie(enabled)
{
    if(enabled)
    {
        zadanieTimer = setInterval("zadanieHandler()",2000);
        proverkaTimer = setInterval("proverkaHandler()",1000);
    }
    else
    {
        clearInterval(zadanieTimer);
        clearInterval(proverkaTimer);
    }
}
 
function proverkaHandler()
{   
    clearInterval(proverkaTimer);
    randomValue = Math.floor(Math.random()*(max - min) + min);
    proverkaTimer = setInterval("proverkaHandler()", randomValue);
    if(top.Battle.bInBattle) return;
    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 - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "sandcity")
        tempstr = "Sandcity - Рыцарь первого круга, 10000 / 24999";
    if(external.SCity.Text == "angelscity")
        tempstr = "Angels city - Рыцарь первого круга, 10000 / 24999";
    if(external.SCity.Text == "demonscity")
        tempstr = "Demons city - Рыцарь первого круга, 24999 / 24999";
    if(external.SCity.Text == "mooncity")
        tempstr = "Mooncity - Рыцарь первого круга, 24999 / 24999";
    if(temp_inf.indexOf(tempstr) > -1 )
    {
        top.Chat.Self.AddMessage("Задания не требуется");
        uspeh = true;
        questIsActive = false;
        return;
    }
    if(!temp_inf.toLowerCase().match(external.SCity.Text + " - "))
    {
        top.Chat.Self.AddMessage("Требуется взять задание");
        uspeh = false;
    }
    else
    {
        top.Chat.Self.AddMessage("Задания не требуется");
        uspeh = true;
        questIsActive = false;
    }
 
}
 
function zadanieHandler()
{
    try
    {
        if(top.Battle.bInBattle) return;
        var temp_p = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
        if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
            room = String(room[1])
        external.battleWeared = false;
        if(uspeh==false || questIsActive)
        {       
            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 == "Зал воинов 2" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("\'Бойцовский Клуб\'");
            else if(room == "Зал воинов 3" && top.frames[external.mainFrameIndex].is_accessible)
                Walk("\'Бойцовский Клуб\'");
            else if(room == "Грибница" && uspeh == false)
            {
                var btn = get_mainframe().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)
            {
                if(top.frames[external.mainFrameIndex].document.getElementsByName("finishquest").length > 0)
                {
                    top.frames[external.mainFrameIndex].document.getElementsByName("finishquest")[0].click();
                    uspeh = false;
                    questIsActive = false;
                    top.Chat.Self.AddMessage("Завершаем задание");
                }
                if(!get_mainframe().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();
                        top.Chat.Self.AddMessage("Работает взятие задания");
                    }
                    uspeh=true;
                    questIsActive = true;
                }
 
                if(get_mainframe().document.all[0].innerHTML.match(/Вы получили новое задание/))
                {
                    uspeh=true;
                    questIsActive = true;
                }
                else if(get_mainframe().document.all[0].innerHTML.match(/Для вас нет заданий/))
                    {
                        uspeh = true;
                        questIsActive = false;
                    }
 
                if(uspeh == true)
                {
                    top.Chat.Self.AddMessage("Работает выход из комнаты");
                    btn = get_mainframe().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(room == "Грибница" && top.frames[external.mainFrameIndex].is_accessible)
            {
                var tmp = get_mainframe().document.getElementsByTagName("a");
                for(i = 0;i<tmp.length;i++)
                {
                    if(tmp[i].outerHTML.match(/Грибная поляна/) && 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].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("Зал воинов");
        }
    }
    catch(err)
    {
        top.Chat.Self.AddMessage("Ошибка! Ебем гусей!");
    }
}
 
function Walk(name)
{
    var imgs = get_mainframe().document.getElementsByTagName("IMG");
    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)
        {
            top.Chat.Self.AddMessage("Иду в " + 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;
}


Небольшие наработки по взятию\завершению задания.

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

Раньше был какой-то флаг среди external-ов, показывающий режим бота. Я об этом.

Или так

if(top.frames[external.mainFrameIndex].document.getElementsByName("finishquest").length > 0)
                {
                    top.frames[external.mainFrameIndex].document.getElementsByName("finishquest")[0].click();
                    top.Chat.Self.AddMessage("Работает завершение задания");
                }

?

Я вот так сделал, но и вариант с match пригоден.

Отредактировано Exile (2011-06-29 23:34:22)

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

100

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

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

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

Отредактировано gorlum (2011-06-29 03:03:35)