176

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

Петро пишет:

Так вот я к тому, что не хочу сидеть в хаотах... т.к. мало статов, допустим, или пур. вещи на персе... wink

А, понял, знач сделаю 3 версии)

177

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

Exile пишет:
Петро пишет:

Так вот я к тому, что не хочу сидеть в хаотах... т.к. мало статов, допустим, или пур. вещи на персе... wink

тогда просить анахроника добавить какой external.close)

Было уже нечто такое, даже где то применялось, а может я путаю что-то. Слово Анахронику smile

Ответы на большинство вопросов связанных с ботом, вы найдёте здесь: (Please log in or register to see this URL)
(Please log in or register to see this URL) - проверил лично! Подробнее (Please log in or register to see this URL)

178

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

Ну бота никто никогда не закрывал smile
надо - пишем в соответствующей теме smile

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

179

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

Так что там с пещерным екстерналом? Реально сломался, или у меня руки кривые?)

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

Отредактировано gorlum (2011-07-10 20:19:39)

180

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

Экстернал рабочий - просто надо маршрут указывать ещё.
Плагины выложить всегда успеешь smile

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

181

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

anahronik пишет:

Экстернал рабочий - просто надо маршрут указывать ещё.
Плагины выложить всегда успеешь smile

Так его надо указывать в плагине чтоль?

182

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

gorlum пишет:
anahronik пишет:

Экстернал рабочий - просто надо маршрут указывать ещё.
Плагины выложить всегда успеешь smile

Так его надо указывать в плагине чтоль?

external.DungeonLoadPath("имя");
вот такой метод есть (по крайней мере был)

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

183

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

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

Экстернал рабочий - просто надо маршрут указывать ещё.
Плагины выложить всегда успеешь smile

Так его надо указывать в плагине чтоль?

external.DungeonLoadPath("имя");
вот такой метод есть (по крайней мере был)

Я его видел, вот только не знаю, зачем его включать в плагине, если при запуски модуля подземки - он прекрасно подключает маршрут. Может те, кто тестил - как-то не так, или не те маршруты вставляли?

184

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

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

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

185

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

LurkeR82 пишет:

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

Попробуй так:

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

В коде найди строку  external.DungeonLoadPath("имя"), и вместо "имя" напиши туда название своего маршрута.

186

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

gorlum
Испытал. Порадовало что бот проверяет есть ли задание и если есть, то идет копать.
Но опять встал на первой клетке данжа.
external.DungeonLoadPath("имя") указывал и так и external.DungeonLoadPath("имя.path")
Все равно стоит. Может что не так делаю?

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

187

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

LurkeR82 пишет:

gorlum
Испытал. Порадовало что бот проверяет есть ли задание и если есть, то идет копать.
Но опять встал на первой клетке данжа.
external.DungeonLoadPath("имя") указывал и так и external.DungeonLoadPath("имя.path")
Все равно стоит. Может что не так делаю?

Попробуй поменять строки
external.DungeonEnabled и external.DungeonLoadPath местами. Мало ли, вдруг сработает.

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

188

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

Попробовал, не помогло также стоит, мне кажется проблема именно в том что палагин как-то конфликтует с модулем подземки бота и external.DungeonLoadPath тут не причем, даже просто когда бот включен бот не ходит по подземке а если выключен то успешно передвигается.

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

189

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

То есть, при нажатой кнопке "Стоп" и тебя чар ходит по подземке?

190

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

gorlum пишет:

То есть, при нажатой кнопке "Стоп" и тебя чар ходит по подземке?

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

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

191

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

LurkeR82 Скопировал криво. Скобку забыл.

(Please log in or register to see this URL)

192

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

hyppo пишет:

LurkeR82 Скопировал криво. Скобку забыл.

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

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

193

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

Так и нет тестеров или у всех работает кроме меня?

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

194

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

У меня тоже, как ты раньше говорил, при включении плагина (версия "лайт") бот даже не ходит.

Я подумал что это из-за того что плагин не создан чтобы его включали посреди похода. Больше не тестировал, логично предположив что надо подождать когда доделают smile Похоже работает принцип "никто кроме нас". Айда тестировать!

(Please log in or register to see this URL)

195

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

Опечатка.

17:04:28 Задания не требуется

Надо либо:
Задания не требуются
либо:
Задание не требуется
smile

(Please log in or register to see this URL)

196

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

hyppo пишет:

Опечатка.

17:04:28 Задания не требуется

Надо либо:
Задания не требуются
либо:
Задание не требуется
smile

Ну опечатки, это не считается, все-таки почему бот встает в подземке.
Ведь осталось сделать всего ничего, задание берется в пещеру заходит, остается только сделать чтоб он стоял и не тупил.

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

197

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

Скопировал себе из 1 поста самый верхний код, в итоге:
- Из любой локации Angels city и Demons city к пещере бот добирается без проблем, открывает вкладку на взятие задания и начинает тупить: если задание есть - логично от бота ожидать фразы на подобие "Задание уже есть"; если задания нет, но есть другие выполненные и/или невыполненные задания из других городов - бот так же не берет задания, т.е. не нажимает на кнопку "Получить задание", а выходит из данного диалога на вход в пещеру.

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

198

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

как уже писал Гип

Айда тестировать!

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

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

199

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

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

А вот об этом я не подумал.
Сейчас поправлю.

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

200

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

В коде не шарю, потому - если мысли покажутся бредом - не критиковать строго, итак:

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

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

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