201

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

-ну и можно настроить перелеты между городами для копания репы, с учетом времени перелетов: взял - сделал - улетел в другой

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

-привязать взятие задания - ко времени сервера..чтоб он время, когда взял новое в каждом городе - заносил в переменную, и не проверял каждые 6-7 минут..

если вдруг бот не проверит задание через 23 часа из-за какого-то глюка или другого плагина, то бот останется еще на сутки без квеста

-если сделать массив с городами, а каждый город - это массив с заданиями (полный текст всех заданий можно на дарках глянуть), далее бот берет из url знание в каком он сейчас городе, и проверяет есть ли такое задание в имеющихся, если есть - пишет - "задание есть, выполнено/не выполнено"..

это конечно можно, но захламит неслабо текстом листинг плагина

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

202

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

Да, вот еще вопрос какой:
если бот словит собиралку, я так понимаю, бот зациклится на попытке подбора реса, если уже собиралка перевыполнена?

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

203

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

Exile пишет:

Да, вот еще вопрос какой:
если бот словит собиралку, я так понимаю, бот зациклится на попытке подбора реса, если уже собиралка перевыполнена?

сейчас такого нет, если выдает фразу "У вас слишком много таких объектов" - он идет дальше..

Exile пишет:

это конечно можно, но захламит неслабо текстом листинг плагина

Если глючить не будет - никто туда заглядывать не станет. Вопрос надо ли.. Если есть другое более простое решение проблемы нескольких заданий, тогда не надо..

Отредактировано Leprekon812 (2011-08-24 22:40:49)

204

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

Народ, для начала реализуйте пожалуйста такой вариант
Бот копает подземку, заканчивает, проверяет - есть ли задание, если есть-берет, если нет то идет дальше копать. ООчень нужно.

Погода так и шепчет! Займи и выпей!

205

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

Если глючить не будет - никто туда заглядывать не станет. Вопрос надо ли.. Если есть другое более простое решение проблемы нескольких заданий, тогда не надо..

Сделал примерно так, как ты и сказал (текст заданий). Скоро выложу обновление.

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

206

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

Вопрос:
Скажем есть задание с таким текстом

Вам следует поднапрячься, и найти "Тряпье" в количестве 11 штук. Для достижения цели придется поучаствовать в захвате "Бездна". Удачи …

Текст задания будет меняться или для Тряпья всегда будет именно такая надпись?

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

207

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

Exile пишет:

Вопрос:
Текст задания будет меняться или для Тряпья всегда будет именно такая надпись?

Такая запись постоянна, за исключением количества.

208

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

var phrasesAng = ["Литейщик","Рубака Глубин","Надзиратель Глубин","Служитель Глубин","Служитель Бездны","Для достижения цели придется поучаствовать в захвате \"Бездн","\"Бур\"","обыскать не один труп в \"Бездн","Придется отнять их у монстров в \"Бездн","обшаря каждый квадратный сантиметр \"Бездн","не один темный угол в \"Бездн","Вам придется отправиться в \"Бездн","обыскать множество углов в \"Бездн"];
var phrasesMoon = ["Пустынник Атаман","Пустынник Маньяк","Пустынник Убийца","Дарьяна Корт","Маул Счастливчик","Страж Крантон","Изгнанник Мглы","Древнее Проклятье Глубин","Дух-Хранитель","Заблудшая Душа","Механический Охранник","Механический Голем","Механический Убийца","Механик","Мастер Грит","Страж Сокровищ","Каменный Страж","Глубин\", спустившись в \"Пещера Тысячи\"","\"Зелье Пустынника\"","их у монстров в \"Пещера Тысячи Проклятий","\"Механическая рука\"","\"Сердце голема\"","\"Призрачная пыль\"","\"Запчасти\"","придется поучаствовать в захвате \"Пещера Тысячи","их у монстров в \"Пещера Тысячи","квадратный сантиметр \"Пещера Тысячи","один темный угол в \"Пещера Тысячи","Вам придется отправиться в \"Пещера Тысячи","\"Инструменты\"","\"Череп Путешественников\""];
var phrasesSand = ["Рабочий Мглы","Сторож Мглы","Смотритель Мглы","Рабочий Мглы","Проклятье Глубин\", спустившись в \"Пещеры Мглы","Шахтерский Крюк","Шахтерский огонь","один десяток монстров в \"Пещеры Мглы","поучаствовать в захвате \"Пещеры Мглы","один труп в \"Пещеры Мглы","квадратный сантиметр \"Пещеры Мглы","темный угол в \"Пещеры Мглы","Вам придется отправиться в \"Пещеры Мглы"];
var phrasesDem = ["Слизь","Пожиратель Падали","Зомби","Древний Страж","\"Проклятый","Берсерк","Офицер Глубин","Зубастая Слизь","Хищная Слизь","Чернокнижник","Епископ","Шут Повелителя","Трупожор","Проклятый Пленник","Повелитель","один десяток монстров в \"Катакомбы","неся смерть монстрам из \"Катакомбы","чтобы найти \"Амулет Пустынника"];
var phrasesSun = ["Искрящийся Паразит","Пылающий Паразит","Скользкий Рогоносец","Усохший Палочник","Мясистый Гусениц","Яростная Мокрица","Брат Скорпиончика","Скорпиончик","Трутень","Королева Грибницы","Сторожевая Грибоножка","Грибковая моль","Кольчатый Страхочервь","Жвала","Куски Хитина","Усики Насекомых","Крупицы металла","Мембрана Трутня","Острый коготь","Кусок панциря","о оно вскоре покрывается слизью","Грибная шляпка","Грибная ножка","Глазик","Грибная гусеница","Потерявшийся гусениц","Улитка","Слизняк","Отросток Грибницы","Корешок","Мелкий Хлюп","Семена","Пустая бутыль из под"];
var allQuests = [];
allQuests.push(phrasesAng);
allQuests.push(phrasesMoon);
allQuests.push(phrasesSand);
allQuests.push(phrasesDem);
allQuests.push(phrasesSun);
var proverkaTimer = {};
var zadanieTimer = {};
var currentQuestChecked=false; //показывает, выполнялась ли проверка на задание
var questIsActive = false; //показывает, имеется ли задание
var pathAngels = ""; //имя файла маршрута бездны
var pathDemons = ""; //имя файла маршрута кат
var pathSun = ""; //имя файла маршрута грибов
var pathSand = ""; //имя файла маршрута мглы
var pathMoon = ""; //имя файла маршрута птп
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";
    else if(external.SCity.Text == "sandcity")
        tempstr = "Sandcity</B> - Рыцарь первого круга, 10000 / 24999";
    else if(external.SCity.Text == "angelscity")
        tempstr = "Angels city</B> - Рыцарь первого круга, 10000 / 24999";
    else if(external.SCity.Text == "demonscity")
        tempstr = "Demons city</B> - Рыцарь первого круга, 24999 / 24999";
    else 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("Задания не требуется");
        currentQuestChecked = true;
        questIsActive = false;
        return;
    }
    var patt = external.SCity.Text + " - \\d+ (мин|ч.|сек)";
 
    if(CheckForQuestInInv(temp_inf))
    {
        external.AddToChat("Задание уже есть");
        currentQuestChecked = true;
        questIsActive = true;
    }
    else if(!temp_inf.toLowerCase().match(patt))
    {
        external.AddToChat("Требуется взять задание");
        currentQuestChecked = false;
    }
    else
    {
        external.AddToChat("Задержка на взятие задания");
        currentQuestChecked = 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(questIsActive && currentQuestChecked)
        {
            if(temp_p.match(/Для вас нет заданий/))
            {
                questIsActive = false;
                external.ClickLink("Вернуться",4);
                return;
            }
            if(top.frames[external.mainFrameIndex].document.getElementsByName("quest_name").length > 0)
                external.ClickLink("Вернуться",4);
            else if((room == "Спуск в Катакомбы" || room == "Пещера Тысячи проклятий" || room == "Пещеры Мглы" || room == "Грибница" || room == "Спуск в Бездну") && top.frames[external.mainFrameIndex].document.getElementsByName("quest_name").length == 0)
            {
                var fp = GetPathFileName();
                if(fp == "")
                {
                    external.AddToChat("неверный файл");
                    return;
                }
                external.DungeonLoadPath(fp);
                external.dungeonEnabled = true;
                external.SBattleAbovePercent.Text = 100;
            }
        }
        else if(!currentQuestChecked || questIsActive)
        {
            if(room)
            {
                if (room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Грибная лужайка",3);
                else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Странное Место",3);
                else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Грибная поляна",3);
                else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Грибница",3);
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "suncity" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Центральная грибница",3);
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "angelscity" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Центральный утес",3);
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "mooncity" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Центр падения",3);
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "sandcity" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Центральный Оазис",3);
                else if(room == "Бойцовский Клуб" && external.SCity.Text == "demoncity" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Центральный Разлом",3);
                else if(room.match(/Зал воинов/i) && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("\'Бойцовский Клуб\'",3);
                else if(room == "Центральный утес" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Каменно-цветочная гряда",3);
                else if(room == "Каменно-цветочная гряда" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Утес безысходности",3);
                else if(room == "Утес безысходности" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Вход в Заповедник",3);
                else if(room == "Вход в Заповедник" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Спуск в Бездну",3);
                else if(room == "Центральный Оазис" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Цветочный Пустырь",3);
                else if(room == "Цветочный Пустырь" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Последний Привал",3);
                else if(room == "Последний Привал" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Внутренний двор",3);
                else if(room == "Внутренний двор" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Пещеры Мглы",3);
                else if(room == "Центр падения" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Спящая площадь",3);
                else if(room == "Спящая площадь" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Улица Камней",3);
                else if(room == "Улица Камней" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Проклятые Руины",3);
                else if(room == "Центральный Разлом" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Разлом Поклонения",3);
                else if(room == "Разлом Поклонения" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Дорога Храбрости",3);
                else if(room == "Дорога Храбрости" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Спуск в катакомбы",3);
                else if(room == "Проклятые Руины" && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Пещера Тысячи проклятий",3);
                else if(room == "Спуск в катакомбы" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Спуск в Катакомбы",3);
                else if(room == "Пещера Тысячи проклятий" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
                    external.ClickLink("Пещера Тысячи проклятий",3);
                else if((room == "Спуск в Катакомбы" || room == "Пещера Тысячи проклятий" || room == "Пещеры Мглы" || room == "Грибница" || room == "Спуск в Бездну") && !currentQuestChecked)
                    external.ClickLink("Задания",4);
            }
            else if(top.frames[external.mainFrameIndex].document.getElementsByName("quest_name").length > 0 && !currentQuestChecked)
                {
                    while(external.ClickLink("Завершить задание",4))
                    {
                        currentQuestChecked = false;
                        questIsActive = false;
                        external.AddToChat("Завершаем задание");
                        return;
                    }
                    if(!top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Репутация в Suncity: 0/))
                    {
                        if(external.ClickLink("Получить задание",4))
                            external.AddToChat("Работает взятие задания");
                        else
                            external.AddToChat("Задание уже есть");
                        currentQuestChecked=true;
                        questIsActive = true;
                    }
                }               
        }
        else if(!questIsActive && currentQuestChecked)
        {
            external.dungeonEnabled = false;
 
            if(room == "Спуск в Катакомбы" || room == "Пещера Тысячи проклятий" || room == "Пещеры Мглы" || room == "Грибница" || room == "Спуск в Бездну")
            {
                switch (external.SCity.Text)
                {
                    case "suncity":
                        external.ClickLink("Грибная поляна",2)
                        break
                    case "sandcity":
                        external.ClickLink("Внутренний двор",2)
                        break
                    case "angelscity":
                        external.ClickLink("Вход в Заповедник",2)
                        break
                    case "demonscity":
                        external.ClickLink("Спуск в катакомбы",2)
                        break
                    case "mooncity":
                        external.ClickLink("Пещера Тысячи проклятий",2)
                        break
                    default:
                        external.AddToChat("err");
                }
            }
            else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Странное Место",3);
            else if(room == "Спуск в катакомбы" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Дорога Храбрости",3);   
            else if(room == "Пещера Тысячи проклятий" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Проклятые Руины",3);
            else if(room == "Дорога Храбрости" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Разлом Поклонения",3);
            else if(room == "Разлом Поклонения" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Центральный Разлом",3);               
            else if(room == "Проклятые Руины" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Улица Камней",3);
            else if(room == "Улица Камней" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Спящая площадь",3);
            else if(room == "Спящая площадь" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Центр падения",3);
            else if(room == "Центр падения" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Бойцовский Клуб",3);                 
            else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Грибная лужайка",3);
            else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Центральная грибница",3);
            else if(room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Бойцовский Клуб",3);
            else if(room == "Бойцовский Клуб" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Зал воинов",3);
            else if(room == "Вход в Заповедник" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Утес безысходности",3);
            else if(room == "Утес безысходности" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Каменно-цветочная гряда",3);
            else if(room == "Каменно-цветочная гряда" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Центральный утес",3);
            else if(room == "Центральный утес" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Бойцовский Клуб",3);
            else if(room == "Внутренний двор" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Последний Привал",3);
            else if(room == "Последний Привал" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Цветочный Пустырь",3);
            else if(room == "Цветочный Пустырь" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Центральный Оазис",3);
            else if(room == "Центральный Оазис" && top.frames[external.mainFrameIndex].is_accessible)
                external.ClickLink("Бойцовский Клуб",3);             
            else if(room == "Зал воинов")
                external.SBattleAbovePercent.Text = 100;
        }
    }
    catch(err)
    {
        external.AddToChat("Ошибка!");
    }
}
 
function doLoad(url)
{
    if (window.XMLHttpRequest)
        req = new XMLHttpRequest();
    else
        req = new ActiveXObject("Microsoft.XMLHTTP");
 
       req.open("GET", url, false); // задать параметры методу open
       req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //чтоб не кэшировались GET запросы
       req.send(null); // отправить запрос     
    return req.responseText;
}
 
function CheckForQuestInInv(inf)
{
    var index = -1;
    switch (external.SCity.Text)
    {
        case "suncity":
            index = 4;
            break
        case "sandcity":
            index = 2;
            break
        case "angelscity":
            index = 0;
            break
        case "demonscity":
            index = 3;
            break
        case "mooncity":
            index = 1;
            break
        default:
            external.AddToChat("err");
    }
 
    for(var i = 0; i < allQuests[index].length; i++)
        if(inf.match(allQuests[index][i]))
            return true;
    return false;
}
 
function GetPathFileName()
{
    if(external.SCity.Text == "suncity")
        return pathSun;
    else if(external.SCity.Text == "sandcity")
        return pathSand;
    else if(external.SCity.Text == "angelscity")
        return pathAngels;
    else if(external.SCity.Text == "demonscity")
        return pathDemons;
    else if(external.SCity.Text == "mooncity")
        return pathMoon;
 
    return "";
}

RC1

Отредактировано Exile (2011-08-25 20:24:54)

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

209

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

var pathDemons = ""; //имя файла маршрута кат

между кавычками надо вписать название карты? Если да - с расширением/без?

210

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

Leprekon812 пишет:

var pathDemons = ""; //имя файла маршрута кат

между кавычками надо вписать название карты? Если да - с расширением/без?

да, название файла с маршрутом
т.е. если файл называется demons123.path,  то вписывать надо demons123

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

211

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

Первые тесты нового скрипта показали:
1. Плагин не должен работать если бот ДОЛЖЕН быть остановлен(выключен или по расписанию остановлен). А он сам перемещается по локациям зачем-то.
2. Бот идет в здание БК независимо от того должен ли он копать пещеру или биться в хаоте.
3. Было взятое и выполнено задание - он написал что задержка на взятие (что правильно), но сдавать его в пещеру не пошел, да и когда ручками привел - не сдал. Мне кажется должен был.. Вдруг он ходил по пещере, собрал/убил всё, а потом на сутки инет отключили, и сдать не успел.
4. Можно вполне добавить строчку на вывод а-ля "Задание: Шахтерские крюки - 3/15" (в будущем может помочь для сбора статистики по заданиям, для перевыполнения)
5. При сдаче задания плагин учитывает возможность для собиралок 25%-ного перевыполнения или сдаст когда будет собрано не менее минимально необходимого (бот может за поход собрать 16/15 из 18/15 доступного)?

Update:
Проверка на другом боте показала:
1. В случае если требуется взять задание - прописывает "Требуется взять"
2. Функция определения есть ли уже задание в этом городе, которое еще не выполнено не работает. У меня он пытался завершить "Квест на скидку" из столицы.

Update:
3.Когда было выполнено задание(и оказалось 2 готовых к завершению:квест на скидку и собиралка) - он его не пытался сдать. Только прописал "У Вас уже есть задание", а когда ручками сдал собиралку - снова принялся завершать "Скидку на ремонт".

Может есть смысл добавить еще один массив заданий а-ля "нет совпадений во фразах"? Или как вариант: если приходит ответ "Это задание невозможно завершить здесь." переходить к следующему.

Квестов то много разных, помимо пещер, не отказываться ж теперь от них..

З.ы. Сейчас сравнил текст задания на дарках и понял что ошибся, те что давали и на дарках - к сожалению они разнятся.. Скорее всего потому он собиралки/выбивалки и не определял у меня нормально.. Выходит нужно новые тексты заданий в массив вводить, только я не знаю где взять.. У меня есть часть с Sandcity и Angels city.. А еще 3 пещеры остается..

Пока - то что есть. Итак:
http://img.combats.com/i/misc/forum/fo2.gif Angels city

(Please log in or register to see this URL)

SPOILER Show
Надзиратель глубин небольшая, в общем-то, фигура. Но они обычно выполняют всю ответственную работу. Поэтому, с одной стороны, их отсутствие мало кто заметит, но с другой стороны, эффект от невыполненной ими работы будет достаточно велик. Уничтожьте их во имя мира во всем Мире!

Кто-кто, а вот Служители глубин - достаточно лакомая цель для любого покушения. Их достаточно много, и они – весомая фигура в подземном обществе. Наставники и блюстители законности в одном лице. Не будет их – общество будет слабеть. А это-то нам и надо. Задание понятно?

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

Из Подгорных Эдельвейсов, растущих исключительно в Бездне наша аптечная промышленность производит прекрасные крема и мази для придания коже молодости и эластичности. Очень нужный компонент, в общем. Вам необходимо помочь решить небольшой сырьевой кризис. Найдите в Бездне эти цветки и принесите их нам.

В нашем чудесном городе зарождается ювелирное искусство. И именно поэтому нам срочно необходим Драконий камень. А где его взять, как не в пещерах. Правда спускаться туда опасно, и именно поэтому мы хотим, чтобы это сделали вы. Все равно вы туда идете.

Хоть и гадость этот Пещерный мох, но для лекарств и химической промышленности – незаменим. Растет, правда, поблизости только в Бездне. Так что вот вам очередное задание – найти и принести столько этого мха, сколько найдете.

Рубаки глубин - это «силовые структуры» подземелья. Вспыльчивые, агрессивные, они тщательно следят за порядком. Не будет их – не будет порядка в Бездне. Поэтому вот вам очередная задача – уничтожить их несколько штук.

Служители Бездны, по нашим данным – одни из самых высокопоставленных существ в иерархии обитателей подземелья. И одни из самых злобных. Чтобы сделать этот мир чище от их влияния, вам необходимо уничтожить их около десятка. А мир, в нашем лице, скажет вам за это спасибо. 0/8 Вы получили 280 награды за выполнение задания.

Ах, Хрусталь - это так прекрасно. Тонкостенные бокалы и загадочные статуэтки – это невероятно. Принесите нам несколько образцов из Бездны, чтобы мы могли насладиться этим великолепием.

Литейщик - самая бесправная и угнетенная масса в этом подземелье. Но на них держится все могущество этого племени. Рабочий класс, что тут скажешь. Нам необходимо, чтобы вы немного ослабили это самое могущество. Уничтожьте несколько особей.

Внимание, контрольная проверка. Насколько хорошо вы выполняете зачистку Бездны? Чтобы показать это, вам необходимо принести как можно больше Костей из подземелья. За хорошее выполнение этого задания – награда.

По донесениям нашего разведчика, в пещерах появились Проклятия Глубин, но в это сложно поверить. Поэтому, чтобы мы в это поверили, вам нужно принести какие-нибудь доказательства. Ну, не знаю, Клыки, например. А мы подумаем над этим феноменом.

http://img.combats.com/i/misc/forum/fo7.gif Sand city

SPOILER Show
Тряпье - совершенно бесполезная вещь. У нас у самих подобного мусора полно. Но вот почему-то многие из наших жителей считают, что тряпье с убитого монстра помогает в различных житейских ситуациях. Оберег или талисман – ПГ их разберет. Но вот требуют. Принесешь, а?

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

Подземелья, где обитают эти чудовища, оказываются богаты Драконьим Камнем. Хорошая и ценная вещь, по утверждениям наших мудрецов. Принесешь несколько штук – они будут тебе очень и очень признательны.

В нашем засушливом городе, цветы – это очень и очень редкий товар. К счастью, обнаружилось, что некоторые из них, так называемые Подгорные эдельвейсы, могут расти в пещерах. Плохая новость – из доступных поблизости пещер - только Пещеры Мглы. Поэтому если будете там прогуливаться, то может быть, сорвете на несколько букетиков?

Сторож Мглы - им в нашем городе пугают непослушных детей. Говорят, что он придет за ними, и заберет с собой. Вместо головы у него лампа, а свою голову он носит в руках. Конечно, это все байки, но если вдруг тебе в Пещере встретятся подобное существо – сделай милость убей их несколько штук. Ну, за все мои детские страхи.

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

Тут аптекари нашего города вдруг внезапно выяснили, что Клыки Проклятья Глубин значительно улучшают частоту и глубину проникновения чакр в астральный мир. Не понимаю кому это нужно, но, тем не менее – если вы принесете эти ингредиенты, то мы будем вам признательны.

Те счастливчики, которые ушли в пещеры и смогли оттуда вернуться, рассказывают страшные истории о том, что где-то там живут Смотрители Мглы. Рогатые существа с лопатами. Понимаю, что звучит глупо, но посылаю Вас на эту самоубийственную миссию в надежде, что вы уничтожите некоторое количество этих адских исчадий.

Из Пещерного мха, что растет в Пещерах Мглы, получается очень неплохая настойка. Бодрит душу, оздоравливает тело, придает ясность мышлению. Чудесная вещь. Вот если бы ты для меня там постарался, подсуетился – и принес бы немножко Мха, я бы тебе… ну спасибо сказал бы, наверное.

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

Многие обитатели этого загадочного места, это я сейчас о Пещерах Мглы говорю, если что… Так вот, многие обитатели умеют освещать свой путь. Причем делают это хорошо и явно с помощью магии. Мне интересно узнать об этом побольше. Принеси мне несколько Шахтерских Огней и я буду тебе благодарен.

Кратко: городу нужен Хрусталь. Все. Пещеры - там!

http://img.combats.com/i/misc/forum/fo3.gif Demons city

(Please log in or register to see this URL)

SPOILER Show
Хищная Слизь - та же Слизь, только опаснее. Убивать сложнее, искать тоже не просто. Но вы справитесь. Я в вас верю.

Бродячие зомби меня утомили. Они умудряются переносить различные заболевания, портить атмосферу и гадить в углах. Как? Чем? У них же нет кишечника! Я не знаю, и это меня еще больше раздражает. Вы же мне поможете? Всего три штуки надо убить, чтобы я себя почувствовал лучше.

Окоченелый зомби - тот еще субъект. Научился паре новых приемов и уже считается грозой путешественников. Докажите, что это не так – убейте их три штуки. А я пока чаю подогрею.

Судя по всему, Каменные зомби так долго лежали в состоянии покоя, что даже немного… кхм… окаменели. Ну и черт бы с ними, но они теперь разгуливают по этим катакомбам и рушат мои теории. Трех штук будет довольно, чтобы теория совпала с практикой.

Кошмар, очередная мутация. Слизь отрастила зубы. Теперь это не просто слизь, а Зубастая Слизь. Как она изменит баланс сил – я даже не смогу рассчитать. Поэтому – убейте её быстрее. Хорошо?

На четвертом этаже обитают Проклятые стражи - вредные ребята, портят мне всю отчетность. Вот если бы немножко, ну, хотя бы чуточку, хотя бы на 3 экземпляра уменьшить их популяцию – было бы здорово. Надеюсь, вы поняли мой тонкий намек?

Что загадочного в Загадочном Зомби - я не знаю. Просто убейте трех, и достаточно. Все, можете выполнять. 0/3 - отказ

Один из самых опасных противников в стане Епископа – это Берсерк. Если бы его не было, ну, хотя бы несколько дней – я бы смог точнее рассчитать некоторые свои формулы. Пожалуйста, позаботьтесь об этом. 0/1 Вы получили 350 награды за выполнение задания

Оруженосец – он очень преданный. А Проклятый Оруженосец преданнее вдвойне – все-таки проклятие обязывает. Чтобы внести небольшой разброд в стан Повелителя – убейте трех этих преданных существ. 0/3

http://img.combats.com/i/misc/forum/fo5.gif Suncity

(Please log in or register to see this URL)
(Please log in or register to see this URL)

SPOILER Show
Сжалься над чахлыми существами... они погибают, усыхают. Избавь 20 Усохших Палочников от мук. Убей их.

Все Мясистые Гусеницы когда-то давно были обычными Грибными Гусеницами, но атмосфера этого места сделала из них монстров. Найдите и принесите сюда 20 Грибных Гусениц. Мы еще можем успеть их спасти!


Грибковая Моль, обладая великим даром Разума, использует его во вред. Такие твари не имеют права на жизнь.

http://img.combats.com/i/misc/forum/fo8.gif Mooncity
(Please log in or register to see this URL)

Думаю это всё, что может быть.. Ежели надо - могу привести в более читабельный вид

Отредактировано Leprekon812 (2011-08-26 08:34:34)

212

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

1. Плагин не должен работать если бот ДОЛЖЕН быть остановлен(выключен или по расписанию остановлен). А он сам перемещается по локациям зачем-то.

Принято.

2. Бот идет в здание БК независимо от того должен ли он копать пещеру или биться в хаоте.

Поясни.

Было взятое и выполнено задание - он написал что задержка на взятие (что правильно), но сдавать его в пещеру не пошел, да и когда ручками привел - не сдал. Мне кажется должен был.. Вдруг он ходил по пещере, собрал/убил всё, а потом на сутки инет отключили, и сдать не успел.

сейчас пересмотрю код, не помню как делал

3.Когда было выполнено задание(и оказалось 2 готовых к завершению:квест на скидку и собиралка) - он его не пытался сдать. Только прописал "У Вас уже есть задание", а когда ручками сдал собиралку - снова принялся завершать "Скидку на ремонт".

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

Можно вполне добавить строчку на вывод а-ля "Задание: Шахтерские крюки - 3/15" (в будущем может помочь для сбора статистики по заданиям, для перевыполнения)
5. При сдаче задания плагин учитывает возможность для собиралок 25%-ного перевыполнения или сдаст когда будет собрано не менее минимально необходимого (бот может за поход собрать 16/15 из 18/15 доступного)?

Для этого нужно писать парсер. Пока что тексты заданий я взял с дарков и ищу по кускам текста с именем пещеры.
Может позже займусь.
Как вижу, недоработко еще много.

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

213

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

2. Бот идет в здание БК независимо от того должен ли он копать пещеру или биться в хаоте.

Бот после проверки есть ли задержка прописал "задержка" и пошел в здание БК, я его привел в пещеру, включил карту, а он всё равно вернулся в клуб.. А если я хочу чтоб он нон-стоп копал? А когда подходило б время - брал задание и дальше копал.

сейчас скрипт не завершает именно то задание, которое было взято и выполнено, а пытается жать по всем кнопкам с надписью Завершить

можно добавить к коду, чтоб при ответе сервера "Это задание невозможно завершить здесь" бот переходил к следующей кнопке "Завершить", так он перебором завершит единственно возможное в данной локации.. и потом выходил из этой функции "сдать задание", и не зацикливался.

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

Если не получится через "Это задание невозможно завершить здесь" - подумаем, что можно сделать..

Можно вполне добавить строчку на вывод а-ля "Задание: Шахтерские крюки - 3/15" (в будущем может помочь для сбора статистики по заданиям, для перевыполнения)

А возмжно после ответа сервера "Вы получили новое задание" копировать полученное в чат?

Как вижу, недоработко еще много.

"Лиха беда начало."

214

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

Бот после проверки есть ли задержка прописал "задержка" и пошел в здание БК, я его привел в пещеру, включил карту, а он всё равно вернулся в клуб.. А если я хочу чтоб он нон-стоп копал? А когда подходило б время - брал задание и дальше копал.

Ааа...понял.
Изначально, плагин предусматривался для ситуации, когда бот находится в режиме кача в хаотах.
Попробую придумать чего-нитьь.

можно добавить к коду, чтоб при ответе сервера "Это задание невозможно завершить здесь" бот переходил к следующей кнопке "Завершить", так он перебором завершит единственно возможное в данной локации.. и потом выходил из этой функции "сдать задание", и не зацикливался.

Пока сделаю костыль с пропуском кнопки. Потом буду думать как сделать правильнее.

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

215

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

Если я правильно понимаю, старых "Дарковских" текстов заданий уже нет 100% ?

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

216

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

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

Так а зачем ему костыль делать? Вправить ноги, чтоб росли откуда надо..
У тебя в коде:

while(external.ClickLink("Завершить задание",4))
                    {
                        currentQuestChecked = false;
                        questIsActive = false;
                        external.AddToChat("Завершаем задание");
                        return;
                    }

зачем стоит в "когда я нахожусь в комнате"? понятное дело он будет тыкать на всё.. Имхо надо этот кусок добавить в
функцию "взято ли задание в этом городе"

function CheckForQuestInInv(inf)
{
    var index = -1;
    switch (external.SCity.Text)
    {
        case "suncity":
            index = 4;
            break
        case "sandcity":
            index = 2;
            break
        case "angelscity":
            index = 0;
            break
        case "demonscity":
            index = 3;
            break
        case "mooncity":
            index = 1;
            break
        default:
            external.AddToChat("err");
    }
 
    for(var i = 0; i < allQuests[index].length; i++)
        if(inf.match(allQuests[index][i]))
            return true;
    return false;
}

а вот если оно взято - тогда 2 варианта: либо оно не сделано и вывод в чат "задание есть, невыполнено", либо оно завершено, тогда в тексте строки будет прописано "Верните чугуниевую вывеску владельцу лотерейного дома и получите свою заслуженную награду за труды. 1/1 (завершено)" , и вот если есть "(завершено)" - надо прийти в комнату и сдать ЭТО задание.

З.ы. сделал бы сам да синтаксиса не знаю..

P.p.s. если несложно к функциям добавь комментарии, что они должны делать.. не уверен что у всех смысл правильно понял..

Ааа...понял.
Изначально, плагин предусматривался для ситуации, когда бот находится в режиме кача в хаотах.
Попробую придумать чего-нитьь.

А проверить "Подземелье" -> "Включено" true/false как-то можно? True - не загружать карту, она и так есть, False - загрузить и включить. Или плагин не предусматривает/предусматривал непосредственно выполнение задания и возврат в хаоты, как ты задумывал?

Отредактировано Leprekon812 (2011-08-27 17:26:25)

217

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

сдать ЭТО задание

Как я пойму, что кнопка Завершить именно для этого задания?
Повторяю, без исходника страницы с кнопкой Завершить задание я ничего сделать не могу. Пока что я лишь могу определить, есть ли задание в этом городе.

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

218

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

А проверить "Подземелье" -> "Включено" true/false как-то можно? True - не загружать карту, она и так есть, False - загрузить и включить. Или плагин не предусматривает/предусматривал непосредственно выполнение задания и возврат в хаоты, как ты задумывал?

По задумке топикстартера, плагин должен был качаться в хаотах и ждать момента, когда можно взять задание. Если оно взято - бот должен ходить в пещеру пока задание не будет выполнено, а затем возврат в хаот.

Сделал так:
если при старте плагина был запущен режим данжа (т.е. в настройках отмечен пункт Автостарт данжа при запуске программы) - значит плагин назад в хаоты ходить не будет.
Проверка выполняется лишь однажды, так что если нужно будет переключиться на режим хаотов - придется выключать режим и перезапускать бота.
В будущем, когда я узнаю имя компонента, понадобится лишь выключить\включить режим в настройакх для переключения режима в плагине

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

219

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

Блеааааа...
убейте меня
я запутался в строках своего говнокода(

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

220

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

Exile пишет:

Блеааааа...
убейте меня
я запутался в строках своего говнокода(

А теперь представь какого твой код читать другим..

221

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

var phrasesAng = ["[(?:&quot;|<b>|\")]*Литейщик","[(?:&quot;|<b>|\")]*(?:Рубак[ау]|Надзирател[ейьяи]*|Служител[ейьяи]*) [Гг]лубин","[(?:&quot;|<b>|\")]*Служител[ейьяи]* [Бб]ездны","[(?:&quot;|<b>|\")]*Бур","выполняете зачистку [(?:&quot;|<b>|\")]*Бездны","не один труп в [(?:&quot;|<b>|\")]*Бездн","в захвате [(?:&quot;|<b>|\")]*Бездн","[(?:&quot;|<b>|\")]*Тряпье необходимо нашим работницам","монстров в [(?:&quot;|<b>|\")]*Бездн","[(?:&quot;|<b>|\")]*Брага - продукт этой примитивной","их у монстров в [(?:&quot;|<b>|\")]*Бездн","Ну, не знаю, [(?:&quot;|<b>|\")]*Клыки, например","квадратный сантиметр [(?:&quot;|<b>|\")]*Бездн","в [(?:&quot;|<b>|\")]*Бездне, необходимы [(?:&quot;|<b>|\")]*Аутсвайс","Из [(?:&quot;|<b>|\")]*Подгорных Эдельвейсов, растущих исключительно в [(?:&quot;|<b>|\")]*Бездне","один темный угол в [(?:&quot;|<b>|\")]*Бездн","срочно необходим [(?:&quot;|<b>|\")]*Драконий камень","придется отправиться в [(?:&quot;|<b>|\")]*Бездн","всеми красками, нам необходим [(?:&quot;|<b>|\")]*Гранит","Ах, [(?:&quot;|<b>|\")]*Хрусталь - это так прекрасно","множество углов в [(?:&quot;|<b>|\")]*Бездн","Хоть и гадость этот [(?:&quot;|<b>|\")]*[Пп]ещерный [Мм]ох","один десяток монстров в Бездн"];
var phrasesMoon = ["[(?:&quot;|<b>|\")]*Пустынник[ова]* (?:[Аа]таман|[Мм]аньяк|[Уу]бийц)","[(?:&quot;|<b>|\")]*Дарьян[ау] [Кк]орт","[(?:&quot;|<b>|\")]*Маула? [Сс]частливчик","[(?:&quot;|<b>|\")]*Стража? [Кк]рантон","[(?:&quot;|<b>|\")]*Изгнанника? [Мм]глы","[(?:&quot;|<b>|\")]*Древнее [Пп]роклят[иь]е [Гг]лубин","[(?:&quot;|<b>|\")]*Дух[ов]*-Хранител","[(?:&quot;|<b>|\")]*Заблудш[аяихе]* [Дд]уш","[(?:&quot;|<b>|\")]*Механически[хей]* (?:[Оо]хранник|[Гг]олем|[Уу]бийц)","[(?:&quot;|<b>|\")]*Механик","[(?:&quot;|<b>|\")]*Мастера? [Гг]рит","[(?:&quot;|<b>|\")]*Стража? [Сс]окровищ","[(?:&quot;|<b>|\")]*Каменны[йхе] [Сс]траж","квадратный сантиметр [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","один темный угол в [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","придется отправиться в [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","порыскать в [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","Поищите их в [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","обыскать все уголки в [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","[(?:&quot;|<b>|\")]*Инструменты","[(?:&quot;|<b>|\")]*Череп путешественника","не один труп в [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","у монстров в [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий"," в захвате [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","смерть монстрам из [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","один десяток монстров в [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","[(?:&quot;|<b>|\")]*Зель[ея] Пустынник","[(?:&quot;|<b>|\")]*Механическ[аяуюие]* [Рр]ук","[(?:&quot;|<b>|\")]*Запчасти","[(?:&quot;|<b>|\")]*Призрачн[аяую]* [Пп]ыл","[(?:&quot;|<b>|\")]*Серд[цае]* [Гг]олем","с множеством монстров в [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","побродить по [(?:&quot;|<b>|\")]*Пещер[ае] Тысячи Проклятий","(?:отыскать|поискать|(?:найти)|(?:должны доставить)|принести) [(?:&quot;|<b>|\")]*(?:(?:Драконий [Кк]амень)|Гранит|(?:Подгорный [Ээ]дейльвейс)|Тряпье|(?:Пещерный [Мм]ох)|Хрусталь(?:Амулет [Пп]устынника))"];
var phrasesSand = ["[(?:&quot;|<b>|\")]*(?:Рабочи[йех]|Сторож[ейа]*|Смотрител[ейь]*) [Мм]глы","[(?:&quot;|<b>|\")]*Шахтерски[хйе] [Кк]рюк|[Оо]г[оньяъ]*","один десяток монстров в [(?:&quot;|<b>|\")]*Пещер[еы] Мглы","в захвате [(?:&quot;|<b>|\")]*Пещер[еы] Мглы","один труп в [(?:&quot;|<b>|\")]*Пещер[еы] Мглы","квадратный сантиметр [(?:&quot;|<b>|\")]*Пещер[еы] Мглы","один темный угол в [(?:&quot;|<b>|\")]*Пещер[еы] Мглы","в захвате [(?:&quot;|<b>|\")]*Пещер[еы] Мглы","отправиться в [(?:&quot;|<b>|\")]*Пещер[ые] Мглы","лежащие глыбы [(?:&quot;|<b>|\")]*[Гг]ранита","богаты [(?:&quot;|<b>|\")]*[Дд]раконьим [Кк]амнем","Из [(?:&quot;|<b>|\")]*[Пп]ещерного [Мм]ха, что растет в [(?:&quot;|<b>|\")]*[Пп]ещерах [Мм]глы","так называемые [(?:&quot;|<b>|\")]*[Пп]одгорные [Ээ]дельвейсы","городу нужен [(?:&quot;|<b>|\")]*[Хх]русталь","оторые они называют [(?:&quot;|<b>|\")]*[Аа]утсвайс","что [(?:&quot;|<b>|\")]*[Кк]лыки [Пп]роклятья [Гг]лубин","наши стражники с [(?:&quot;|<b>|\")]*[Кк]остями","[(?:&quot;|<b>|\")]*Тряпье - совершенно бесполезная вещь"];
var phrasesDem = ["[(?:&quot;|<b>|\")]*Слизь","[(?:&quot;|<b>|\")]*Пожирател[ьейми]* [Пп]адал","[(?:&quot;|<b>|\")]*(?:Окоченелы[ехй]|Каменны[ехй]|Зубасты[ехй]|Голодны[ехй]|Древни[ехй]|Загадочны[ехй]) [Зз]омб","[(?:&quot;|<b>|\")]*Древни[хей] [Сс]траж","[(?:&quot;|<b>|\")]*Прокляты[йех] (?:[Пп]ламенос|[Уу]бийц|[Сс]траж|[Оо]руженос|[Зз]ащитник|[Сс]китал)","[(?:&quot;|<b>|\")]*Берсерк","[(?:&quot;|<b>|\")]*Офицер[аов]* [Гг]лубин","[(?:&quot;|<b>|\")]*(?:Зубаст[ыхуюаяе]*|Хищн[ыхуюаяе]*) [Сс]лиз","[(?:&quot;|<b>|\")]*Чернокнижник","[(?:&quot;|<b>|\")]*Епископ","[(?:&quot;|<b>|\")]*Шута? [Пп]овелителя","[(?:&quot;|<b>|\")]*Трупожор","[(?:&quot;|<b>|\")]*Проклят[ыхей]* [Пп]ленник","[(?:&quot;|<b>|\")]*Повелитель?","дин десяток монстров в [(?:&quot;|<b>|\")]*Катакомб","хорошо поработать, чтобы достать [(?:&quot;|<b>|\")]*[Кк]ости","остараться, чтобы найти [(?:&quot;|<b>|\")]*[Аа]мулет [Пп]устынника","попал в эти места [(?:&quot;|<b>|\")]*[Аа]мулет [Пп]устынника","они гонят [(?:&quot;|<b>|\")]*[Бб]рагу из","от вас - это несколько [(?:&quot;|<b>|\")]*[Кк]остей"];
var phrasesSun = ["[(?:&quot;|<b>|\")]*(?:Искрящи[йехм]ся|Пылающи[ехмй]) [Пп]аразит","[(?:&quot;|<b>|\")]*Скользки[йхем] [Рр]огонос","[(?:&quot;|<b>|\")]*Усохши[хийм] [Пп]алочник","[(?:&quot;|<b>|\")]*Мясисты[хйым] [Гг]усениц","[(?:&quot;|<b>|\")]*Яростн[аяыхме]* [Мм]окриц","[(?:&quot;|<b>|\")]*Брата? Скорпиончика","[(?:&quot;|<b>|\")]*Скорпиончик","[(?:&quot;|<b>|\")]*Трут[еньйя]*","[(?:&quot;|<b>|\")]*Королев[еау] [Гг]рибницы","[(?:&quot;|<b>|\")]*Сторожев[уюая]* [Гг]рибоножк[уа]","[(?:&quot;|<b>|\")]*Грибков[уюая]* [Мм]оль","[(?:&quot;|<b>|\")]*Кольчат[ыйхе]* [Сс]трахочерв[ьией]*","[(?:&quot;|<b>|\")]*Жвала","[(?:&quot;|<b>|\")]*Куск[иов]* [Хх]итина","[(?:&quot;|<b>|\")]*Усик[ови]* [Нн]асекомых","[(?:&quot;|<b>|\")]*Крупицы? [Мм]еталла","[(?:&quot;|<b>|\")]*Мембрана? [Тт]рутня","[(?:&quot;|<b>|\")]*Остры[йех]* [Кк]ог[тейяьо]*","[(?:&quot;|<b>|\")]*Кус[коваи]* [Пп]анциря","оно вскоре покрывается [(?:&quot;|<b>|\")]*слизью","[(?:&quot;|<b>|\")]*Грибн[уюаяых]* (?:[Шш]ляпк|[Нн]ожк|[Гг]усениц)","[(?:&quot;|<b>|\")]*Глазик","[(?:&quot;|<b>|\")]*Потерявши[хйе]ся [Гг]усениц","[(?:&quot;|<b>|\")]*Улит[аоки]*","[(?:&quot;|<b>|\")]*Слизняк","[(?:&quot;|<b>|\")]*Отрост[кови]* [Гг]рибницы","[(?:&quot;|<b>|\")]*Кореш[окви]*","[(?:&quot;|<b>|\")]*Мелки[хе] [Хх]люп","[(?:&quot;|<b>|\")]*Сем[яена]*","[(?:&quot;|<b>|\")]*[Пп]уст[ыхуюе]* бутыл[ейьи]* из под"];
var allQuests = [];
allQuests.push(phrasesAng);
allQuests.push(phrasesMoon);
allQuests.push(phrasesSand);
allQuests.push(phrasesDem);
allQuests.push(phrasesSun);
var proverkaTimer = {};
var zadanieTimer = {};
var sellTimer = {};
var currentQuestChecked = false; //показывает, выполнялась ли проверка на задание
var questIsActive = false; //показывает, имеется ли задание
var needToFinish = false; //показывает, нужно ли завершить задание
var pathAngels = ""; //имя файла маршрута бездны
var pathDemons = ""; //имя файла маршрута кат
var pathSun = ""; //имя файла маршрута грибов
var pathSand = ""; //имя файла маршрута мглы
var pathMoon = ""; //имя файла маршрута птп
var room ='';
var randomValue;
var min = 360000;
var max = 400000;
var dungMode = false;
var questName = "";
var questID = "";
var needToDo = -1;
var hasBeenDone = -1;
var needToFinish = false;
var dungStarted = false;
var enableSellInShop = false; // режим продажи пуршмота в гос
var beenInShop = true;
var itemsToSell = [];
itemsToSell.push("Обычные стрелы для арбалета");
 
function zadanie(enabled)
{
    if(enabled)
    {
        if(external.dungeonEnabled) dungMode = true;
        proverkaTimer[mylogin] = setInterval("proverkaHandler()",2000);
        sellTimer[mylogin] = setInterval("SellAction()", 1000);
    }
    else
    {
        if(zadanieTimer[mylogin]) clearInterval(zadanieTimer[mylogin]);
        external.SBattleAbovePercent.Text = 100;
        clearInterval(proverkaTimer[mylogin]);
        clearInterval(sellTimer[mylogin]);
    }
}
 
Array.prototype.inArray = function(item)
{
    for (var i in this)
        if (item.indexOf(this[i]) > -1)
            return true;
    return false;
}
 
function SellAction()
{
    try
    {
        if(!external.Started()) return;
        if(top.Battle.bInBattle || top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i))
        {
            beenInShop = false;
            return;
        }
 
        var s = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
        if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
            room = String(room[1]);
        else if(top.frames[external.mainFrameIndex].document.getElementsByName("quest_name").length > 0)
            room = "inQuestWindow";
            else
                room = "inDialog";
        if(!enableSellInShop) return;
        if(!beenInShop)
        {           
            if(room != "Магазин")
                MoveToShop();
            else
            {               
                if(!s.match(/Отдел \"Скупка\"/i))
                    external.ClickLink("Продать вещи",4);
                else
                {
                    var items = s.match(/<a\shref="shop\.pl\?sl=[^"]*">продать за .*? кр.<\/a><\/td>[\s\n\r]*<td[^>]*><a [^>]*>[^&<]*/ig);
                    if(items != null)
                        for(var i = 0; i < items.length; i++)
                        {
                            items[i] = items[i].match(/<a\shref="(shop\.pl\?sl=[^"]*)">продать за .*? кр.<\/a><\/td>[\s\n\r]*<td[^>]*><a [^>]*>([^&<]*)/i);
                            items[i][1] = items[i][1].replace(/&amp;/g, '&');
                            if(itemsToSell.inArray(items[i][2]))
                            {
                                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/" + items[i][1];
                                return;
                            }
                        }
                    beenInShop = true;
                }
            }
        }
        else
            MoveFromShopToDung();
    }
    catch(err)
    {
        external.AddToChat("error");
    }
}
 
function proverkaHandler()
{
    try
    {
        clearInterval(proverkaTimer[mylogin]);
        randomValue = Math.floor(Math.random()*(max - min) + min);
        proverkaTimer[mylogin] = setInterval("proverkaHandler()", randomValue);
 
        if(top.Battle.bInBattle || !external.Started())
        {
            external.SBattleAbovePercent.Text = 100;
            return;
        }
 
        if(top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i))
        {
            external.SBattleAbovePercent.Text = 100;
            dungStarted = false;
        }
 
        if(!dungMode)
            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";
        else if(external.SCity.Text == "sandcity")
            tempstr = "Sandcity</B> - Рыцарь первого круга, 10000 / 24999";
        else if(external.SCity.Text == "angelscity")
            tempstr = "Angels city</B> - Рыцарь первого круга, 10000 / 24999";
        else if(external.SCity.Text == "demonscity")
            tempstr = "Demons city</B> - Рыцарь первого круга, 24999 / 24999";
        else if(external.SCity.Text == "mooncity")
            tempstr = "Mooncity</B> - Рыцарь первого круга, 24999 / 24999";
 
        if(zadanieTimer[mylogin]) clearInterval(zadanieTimer[mylogin]);
            zadanieTimer[mylogin] = setInterval("zadanieHandler()",2000);
 
        if(temp_inf.match(tempstr))
        {
            external.AddToChat("Задания не требуется");
            currentQuestChecked = true;
            questIsActive = false;
            return;
        }
        var patt = external.SCity.Text + " - \\d+ (мин|ч.|сек)";
 
        if(temp_inf.match(/Время до подземелья/))
        {
            currentQuestChecked = true;
            questIsActive = false;
            external.AddToChat("Задержка на поход в пещеру");
            return;
        }
        if(GetQuestFromInfo(temp_inf))
        {
            external.AddToChat("Задание:");
            top.Chat.Self.AddMessage(questName + " " + hasBeenDone + "/" + needToDo);
            currentQuestChecked = true;
            questIsActive = true;
            if(!isPickingQuest() && hasBeenDone >= needToDo) needToFinish = true;
        }
        else if(!temp_inf.toLowerCase().match(patt))
        {
            external.AddToChat("Требуется взять задание");
            currentQuestChecked = false;
            questIsActive = false;
        }
        else
        {
            external.AddToChat("Задержка на взятие задания");
            currentQuestChecked = true;
            questIsActive = false;
        }
    }
    catch(err)
    {
        external.AddToChat("error");
    }
}
 
function zadanieHandler()
{
    try
    {
        if(dungStarted || top.Battle.bInBattle || top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i) || !external.Started()) return;
        if(enableSellInShop && !beenInShop) return;
        if(!room.match(/(Спуск в Катакомбы)|(Пещера Тысячи проклятий)|(Пещеры Мглы)|inQuestWindow|Грибница|(Спуск в Бездну)/))
            if(dungMode || (!(!questIsActive && currentQuestChecked) && !dungMode))
            {
                MoveToDung();
                return;
            }
 
        if(questIsActive && currentQuestChecked && !needToFinish)
        {
            if(room == "inQuestWindow" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Для вас нет заданий/))
            {
                questIsActive = false;
                external.ClickLink("Вернуться",4);
                return;
            }
 
            if(room == "inQuestWindow" && GetQuestFromInfo(top.frames[external.mainFrameIndex].document.all[0].innerHTML))
            {   
                external.AddToChat("Задание:");
                top.Chat.Self.AddMessage(questName + " " + hasBeenDone + "/" + needToDo);
            }
 
            if(room == "inQuestWindow" && top.frames[external.mainFrameIndex].document.getElementsByName("quest_name").length > 0)
                external.ClickLink("Вернуться",4);
            else if(room != "inQuestWindow" && room.match(/(Спуск в Катакомбы)|(Пещера Тысячи проклятий)|(Пещеры Мглы)|Грибница|(Спуск в Бездну)/) && top.frames[external.mainFrameIndex].document.getElementsByName("quest_name").length == 0)
            {
                var fp = GetPathFileName();
                if(fp == "")
                {
                    external.AddToChat("неверный файл");
                    return;
                }
 
                if(!dungMode)
                {
                    external.DungeonLoadPath(fp);
                    external.dungeonEnabled = true;
                    external.SBattleAbovePercent.Text = 100;
                }               
                dungStarted = true;
            }
        }
        else if(!currentQuestChecked || needToFinish)
        {
            if(room.match(/(Спуск в Катакомбы)|(Пещера Тысячи проклятий)|(Пещеры Мглы)|Грибница|(Спуск в Бездну)/) && (!currentQuestChecked || needToFinish))
                    external.ClickLink("Задания",4);
            else if(room.match(/inQuestWindow/) && top.frames[external.mainFrameIndex].document.getElementsByName("quest_name").length > 0 && (!currentQuestChecked || needToFinish))
                {
                    var btns = top.frames[external.mainFrameIndex].document.getElementsByName("finishquest");
                    if(questID != "" && needToFinish && btns)
                    {
                        if(dungMode && isPickingQuest() && (hasBeenDone < (Math.floor(needToDo/4) + needToDo)))
                        {
                            currentQuestChecked = true;
                            questIsActive = true;
                            return;
                        }
 
                        for(var i = 0; i < btns.length; i++)
                            if(btns[i].onclick && String(btns[i].onclick).match(questID) && btns[i].style.visibility != "hidden")
                            {
                                currentQuestChecked = false;
                                questIsActive = false;
                                needToFinish = false;
                                questName = "";
                                questID = "";
                                needToDo = -1;
                                hasBeenDone = -1;
                                external.AddToChat("Завершаем задание");
                                btns[i].click();
                                return;
                            }
                    }
 
                    var gotRep = top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Вы получили \d* награды за выполнение задания/);
                    if(gotRep) external.AddToChat(gotRep);
 
                    if(!top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Репутация в Suncity: 0/))
                    {
                        currentQuestChecked=true;
                        questIsActive = true;
                        if(external.ClickLink("Получить задание",4))
                            external.AddToChat("Работает взятие задания");
                        else
                            external.AddToChat("Задание уже есть");                       
                    }
                }               
        }
        else if(!questIsActive && currentQuestChecked)
        {
            if(dungMode)
            {   
                if(!room.match(/(Спуск в Катакомбы)|(Пещера Тысячи проклятий)|(Пещеры Мглы)|Грибница|(Спуск в Бездну)/))
                    MoveToDung();
                return;
            }
            external.dungeonEnabled = false;
 
            if(room != "Зал воинов")
                MoveFromDung(room);
            else
                external.SBattleAbovePercent.Text = 100;
        }
    }
    catch(err)
    {
        external.AddToChat("Ошибка!");
    }
}
 
function doLoad(url)
{
    if (window.XMLHttpRequest)
        req = new XMLHttpRequest();
    else
        req = new ActiveXObject("Microsoft.XMLHTTP");
 
       req.open("GET", url, false); // задать параметры методу open
       req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //чтоб не кэшировались GET запросы
       req.send(null); // отправить запрос     
    return req.responseText;
}
 
function CheckForQuestInInv(inf)
{
    var index = -1;
    switch (external.SCity.Text)
    {
        case "suncity":
            index = 4;
            break
        case "sandcity":
            index = 2;
            break
        case "angelscity":
            index = 0;
            break
        case "demonscity":
            index = 3;
            break
        case "mooncity":
            index = 1;
            break
        default:
            external.AddToChat("err");
    }
 
    var res = "";
    for(var i = 0; i < allQuests[index].length; i++)
        if(res = inf.match(allQuests[index][i]))
            return res;
    return "";
}
 
function GetPathFileName()
{
    if(external.SCity.Text == "suncity")
        return pathSun;
    else if(external.SCity.Text == "sandcity")
        return pathSand;
    else if(external.SCity.Text == "angelscity")
        return pathAngels;
    else if(external.SCity.Text == "demonscity")
        return pathDemons;
    else if(external.SCity.Text == "mooncity")
        return pathMoon;
 
    return "";
}
 
function MoveTo()
{
    switch (external.SCity.Text)
    {
        case "suncity":
            return "Грибная поляна"
        case "sandcity":
            return "Внутренний двор"
        case "angelscity":
            return "Вход в Заповедник"
        case "demonscity":
            return "Спуск в катакомбы"
        case "mooncity":
            return "Пещера Тысячи проклятий"
        default:
            return null
    }
}
 
function GetQuestFromInfo(inf)
{
    try
    {
        var flds = inf.match(/<fieldset>\s+<legend>\sТекущие (?:квесты|задания)[^@]*<\/fieldset>/i);
        var res = flds[0].match(/<img[^>]*>[^(?:span)]*<span [^>]*>\d*\/\d*<\/span>/ig);
        if(!res) return false;
         for(var i = 0; i < res.length; i++)
        {
            var tmp = res[i].match(/<img[^}]*[^(?:quest_name)]*quest_name=([^&]*)[^>]*>([^(?:span]*)<span[^>]*>(\d*)\/(\d*)<\/span>/i);
            if(CheckForQuestInInv(tmp[2]))
            {
                // 0 == all
                // 1 == quest id
                // 2 == quest name
                // 3 == left to do
                // 4 == need to do
                questID = tmp[1];
                questName = tmp[2];
                needToDo = tmp[4];
                hasBeenDone = tmp[3];
                return true;
            }
        }
        return false;
    }
    catch(err)
    {
        external.AddToChat("wtf");
    }
}
 
function isPickingQuest()
{
    if(external.SCity.Text == "suncity")
    {
        if(questName.match(/[(?:&quot;|<b>|\")]*(?:Грибн[аяыеух]* (?:[Шш]ляп[као]*|[Нн]ож[каеи]*))|[(?:&quot;|<b>|\")]*Глазик|[(?:&quot;|<b>|\")]*(?:Грибн[аяыеух]* [Гг]усениц)|[(?:&quot;|<b>|\")]*(?:Потерявш[ихсяйме]* [Гг]усениц)|[(?:&quot;|<b>|\")]*Улит[окаи]*|[(?:&quot;|<b>|\")]*Слизняк|[(?:&quot;|<b>|\")]*Кореш[окив]*|[(?:&quot;|<b>|\")]*(?:Отрост[кови]* [Гг]рибницы)|[(?:&quot;|<b>|\")]*Сем[еная]*|[(?:&quot;|<b>|\")]*(?:Мелки[ехйм]* [Хх]люп)|[(?:&quot;|<b>|\")]*(?:Пуст[аяуюие]* бутыл)/))
            return true;
    }
    else if(external.SCity.Text == "sandcity" || external.SCity.Text == "angelscity")
    {
        if(questName.match(/[(?:&quot;|<b>|\")]*Хрустал[яь]|[(?:&quot;|<b>|\")]*(?:Дракон[ьегоий]* [Кк]ам[еньяй]*)|[(?:&quot;|<b>|\")]*Гранит|[(?:&quot;|<b>|\")]*(?:Пещерн[ыйого]* [Мм][оха]*)|[(?:&quot;|<b>|\")]*(?:Подгорн[ыхйе]* [Ээ]дельвейс)/))
            return true;
    }
    else if(external.SCity.Text == "mooncity")
    {
        if(questName.match(/[(?:&quot;|<b>|\")]*Хрустал[яь]|[(?:&quot;|<b>|\")]*(?:Дракон[ьегоий]* [Кк]ам[еньяй]*)|[(?:&quot;|<b>|\")]*Гранит|[(?:&quot;|<b>|\")]*(?:Пещерн[ыйого]* [Мм][оха]*)|[(?:&quot;|<b>|\")]*(?:Подгорн[ыхйе]* [Ээ]дельвейс)|[(?:&quot;|<b>|\")]*Инструмент|[(?:&quot;|<b>|\")]*(?:Череп[аов]* [пП]утешественн)/))
            return true;
    }
    return false;
}
 
function MoveToDung()
{
    if (room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Грибная лужайка",3);
    else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Странное Место",3);
    else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Грибная поляна",3);
    else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Грибница",3);
    else if(room == "Бойцовский Клуб" && external.SCity.Text == "suncity" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральная грибница",3);
    else if(room == "Бойцовский Клуб" && external.SCity.Text == "angelscity" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральный утес",3);
    else if(room == "Бойцовский Клуб" && external.SCity.Text == "mooncity" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центр падения",3);
    else if(room == "Бойцовский Клуб" && external.SCity.Text == "sandcity" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральный Оазис",3);
    else if(room == "Бойцовский Клуб" && external.SCity.Text == "demoncity" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральный Разлом",3);
    else if(room.match(/Зал воинов/i) && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("\'Бойцовский Клуб\'",3);
    else if(room == "Центральный утес" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Каменно-цветочная гряда",3);
    else if(room == "Каменно-цветочная гряда" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Утес безысходности",3);
    else if(room == "Утес безысходности" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Вход в Заповедник",3);
    else if(room == "Вход в Заповедник" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Спуск в Бездну",3);
    else if(room == "Центральный Оазис" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Цветочный Пустырь",3);
    else if(room == "Цветочный Пустырь" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Последний Привал",3);
    else if(room == "Последний Привал" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Внутренний двор",3);
    else if(room == "Внутренний двор" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Пещеры Мглы",3);
    else if(room == "Центр падения" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Спящая площадь",3);
    else if(room == "Спящая площадь" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Улица Камней",3);
    else if(room == "Улица Камней" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Проклятые Руины",3);
    else if(room == "Центральный Разлом" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Разлом Поклонения",3);
    else if(room == "Разлом Поклонения" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Дорога Храбрости",3);
    else if(room == "Дорога Храбрости" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Спуск в катакомбы",3);
    else if(room == "Проклятые Руины" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Пещера Тысячи проклятий",3);
    else if(room == "Спуск в катакомбы" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Спуск в Катакомбы",3);
    else if(room == "Пещера Тысячи проклятий" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Пещера Тысячи проклятий",3);
}
 
function MoveFromDung()
{
    if(room.match(/(Спуск в Катакомбы)|(Пещера Тысячи проклятий)|(Пещеры Мглы)|Грибница|(Спуск в Бездну)/))
        external.ClickLink(MoveTo(),2);
    else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Странное Место",3);
    else if(room == "Спуск в катакомбы" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Дорога Храбрости",3);   
    else if(room == "Пещера Тысячи проклятий" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/) && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Проклятые Руины",3);
    else if(room == "Дорога Храбрости" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Разлом Поклонения",3);
    else if(room == "Разлом Поклонения" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральный Разлом",3);               
    else if(room == "Проклятые Руины" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Улица Камней",3);
    else if(room == "Улица Камней" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Спящая площадь",3);
    else if(room == "Спящая площадь" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центр падения",3);
    else if(room == "Центр падения" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Бойцовский Клуб",3);                 
    else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Грибная лужайка",3);
    else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральная грибница",3);
    else if(room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Бойцовский Клуб",3);
    else if(room == "Бойцовский Клуб" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Зал воинов",3);
    else if(room == "Вход в Заповедник" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Утес безысходности",3);
    else if(room == "Утес безысходности" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Каменно-цветочная гряда",3);
    else if(room == "Каменно-цветочная гряда" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральный утес",3);
    else if(room == "Центральный утес" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Бойцовский Клуб",3);
    else if(room == "Внутренний двор" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Последний Привал",3);
    else if(room == "Последний Привал" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Цветочный Пустырь",3);
    else if(room == "Цветочный Пустырь" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральный Оазис",3);
    else if(room == "Центральный Оазис" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Бойцовский Клуб",3);
}
 
function MoveToShop()
{
    if(room == "inDialog" && (s.match(/drwfl\("Илена",/i) || s.match(/drwfl\("Бартоломей",/i)))
        external.ClickLink("подойти к прилавку",2);
    else if (room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Прилавки с товарами",3);
    else if (room == "Грибница" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Грибная поляна",2);
    else if (room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Странное Место",3);
    else if (room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Грибная лужайка",3);
    else if (room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральная грибница",3);
    else if (room == "Прилавки с товарами")
        external.ClickLink("Илена",3);
    else if (room == "Пещеры Мглы" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Внутренний двор",2);
    else if (room == "Внутренний двор" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Последний Привал",3);
    else if (room == "Последний Привал" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Цветочный Пустырь",3);
    else if (room == "Цветочный Пустырь" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральный Оазис",3);
    else if (room == "Центральный Оазис" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Базар",3);
    else if (room == "Базар" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Лавка Бартоломея",3);
    else if (room == "Лавка Бартоломея")
        external.ClickLink("Бартоломей",3);
}
 
function MoveFromShopToDung()
{
    if (room == "Магазин" && top.frames[external.mainFrameIndex].is_accessible)
    {
        if(s.match(/Лавка Бартоломея/)) external.ClickLink("Лавка Бартоломея",2);
        if(s.match(/Прилавки с товарами/)) external.ClickLink("Прилавки с товарами",2);
    }
    else if (room == "Лавка Бартоломея" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Базар",3);
    else if (room == "Базар" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральный Оазис",3);
    else if (room == "Центральный Оазис" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Цветочный Пустырь",3);
    else if (room == "Цветочный Пустырь" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Последний Привал",3);
    else if (room == "Последний Привал" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Внутренний двор",3);
    else if (room == "Внутренний двор" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Пещеры Мглы",3);
    else if (room == "Прилавки с товарами" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Центральная грибница",3);
    else if (room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Грибная лужайка",3);
    else if (room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Странное Место",3);
    else if (room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Грибная поляна",3);
    else if (room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
        external.ClickLink("Грибница",3);
}

Добавил режим продажи пуршмота в гос.
включается вот сдесь:

var enableSellInShop = false; // режим продажи пуршмота в гос

Тестируйте
Маршруты для режима прописаны только для сана и санда.
По аналогии для оставшихся городов делаются за пару минут

Отредактировано Exile (2011-08-30 13:21:51)

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

222

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

Exile
Если есть возможность, сделай пожалуйста лайт версию, без походов куда либо.
Т.е.  Бот постоянно копает подземку, заканчивает, выходит, проверяет сделал ли задание, если сделал-завершает, пытается взять новое, если нет новое-идет копать и так по кругу.

Погода так и шепчет! Займи и выпей!

223

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

LurkeR82 пишет:

Exile
Если есть возможность, сделай пожалуйста лайт версию, без походов куда либо.
Т.е.  Бот постоянно копает подземку, заканчивает, выходит, проверяет сделал ли задание, если сделал-завершает, пытается взять новое, если нет новое-идет копать и так по кругу.

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

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

224

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

LurkeR82 пишет:

Exile
Если есть возможность, сделай пожалуйста лайт версию, без походов куда либо.
Т.е.  Бот постоянно копает подземку, заканчивает, выходит, проверяет сделал ли задание, если сделал-завершает, пытается взять новое, если нет новое-идет копать и так по кругу.

А ты учел что рюкзак не резиновый? После перегруза на 50-70 единиц, перемещение на 1 клетку занимает около минуты.. И без добавки "автопродажи" копание становится проблемным. Не все же будут проверять бота каждые 3/5/7 часов.. Значит и перемещение по локациям нужно.

225

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

Leprekon812
Плагин автопродажи у меня отдельный стоит, поэтому и нужен отдельный плагин взятия задания, тем более хождение в гос мне нужно не каждый раз, а раз в сутки ток.

Погода так и шепчет! Займи и выпей!