Вот в таком виде в сане и ангеле работает

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 roomNameUpdTimer = {};
var zadanieTimer = {};
var sellTimer = {};
var questIsActive = false;
var needToFinish = false;
var pathAngels = "Все маршруты"; //имя файла маршрута бездны
var pathDemons = "Все маршруты"; //имя файла маршрута кат
var pathSun = "Все маршруты"; //имя файла маршрута грибов
var pathSand = "Все маршруты"; //имя файла маршрута мглы
var pathMoon = "Все маршруты"; //имя файла маршрута птп
var enableSellInShop = true; // режим продажи пуршмота в гос
var dungMode = true; //режим подземки
var currentRoom ='';
var randomValue;
var min = 360000;
var max = 400000;
var questName = "";
var questID = "";
var needToDo = -1;
var hasBeenDone = -1;
var needToFinish = false;
var needToTake = false;
var dungeonLocked = false;
var beenInShop = true;
var itemsToSell = [];
itemsToSell.push("item");
itemsToSell.push("Кольцо старого безумца");
itemsToSell.push("Ожерелье жестокого разбойника");
itemsToSell.push("Порченный ремень свирепого варвара");
itemsToSell.push("Затасканное кольцо жестокого старца");
itemsToSell.push("Потертый пояс неумолимого садиста");
itemsToSell.push("Пояс зоркого путешественника");
itemsToSell.push("Ботинки странного грабителя");
itemsToSell.push("Перстень забытого безумца");
itemsToSell.push("Истертые ботинки уставшего старца");
itemsToSell.push("Ветхое острие бессердечного лазутчика");
itemsToSell.push("Жилет старого предка");
itemsToSell.push("Истертый пояс властного путешественника");
itemsToSell.push("Старинная броня высокомерного странника");
itemsToSell.push("Секира мрачного гладиатора");
itemsToSell.push("Подержанные ботинки беспощадного демона");
itemsToSell.push("Истертое ожерелье опытного аристократа");
itemsToSell.push("Устаревший покров бессмертного предка");
itemsToSell.push("Подержанный амулет загубленного предателя");
itemsToSell.push("Грубые сапоги старого клятвоотступника");
itemsToSell.push("Ветхое жало странного бойца");
itemsToSell.push("Старинная кираса властного отшельника");
itemsToSell.push("Наручи старого предка");
itemsToSell.push("Грубые ботинки вечного снайпера");
itemsToSell.push("Перчатки вечного лесничего");
itemsToSell.push("Наколенники странного проходимца");
itemsToSell.push("Перчатки мифического лесничего");
itemsToSell.push("Порченный меч бывалого вождя");
itemsToSell.push("Бесполезный пояс мудрого проходимца");
itemsToSell.push("Топор безрассудного отшельника");
itemsToSell.push("Истертые сапоги странного духа");
itemsToSell.push("Грубый доспех мифического разбойника");
itemsToSell.push("Кольцо благородного проходимца");
itemsToSell.push("Баллиста алчного клятвоотступника");
itemsToSell.push("Кольцо стойкого легионера");
itemsToSell.push("Серьги неистового вождя");
itemsToSell.push("Неряшливые серьги известного героя");
itemsToSell.push("Ископаемый арбалет доблестного призрака");
itemsToSell.push("Грубые наручи злопамятного искателя");
itemsToSell.push("Грубые перчатки бодрого отшельника");
itemsToSell.push("Выбрать Кольцо стойкого легионера");
itemsToSell.push("Молот лютого военачальника");
itemsToSell.push("Неряшливый кулон бессмертного охотника");
itemsToSell.push("Устаревший лук мрачного мертвеца");
itemsToSell.push("Перстень неистового обитателя подземелий");
itemsToSell.push("Грубые наручи злопамятного искателя");
itemsToSell.push("Старинные наручи властного предка");
itemsToSell.push("Перстень злопамятного зверолова");
itemsToSell.push("Затасканные перчатки безвольного изувера");
itemsToSell.push("Разваливающиеся серьги вечного палача");
itemsToSell.push("Перчатки мертвого следопыта");
itemsToSell.push("Ветхое кольцо вечного разбойника");
itemsToSell.push("Наручи неистового героя");
itemsToSell.push("Наручи прославленного головореза");
itemsToSell.push("Старинная броня высокомерного странника");
itemsToSell.push("Ветхие латы непобедимого путешественника");
itemsToSell.push("Бесполезное ожерелье забытого духа");
itemsToSell.push("Перчатки странного гладиатора");
itemsToSell.push("Серьги странного клятвоотступника");
itemsToSell.push("Перчатки ловкого предателя");
itemsToSell.push("Порченные наручи бесчестного клятвоотступника");
itemsToSell.push("Потертые сапоги загубленного следопыта");
itemsToSell.push("Потертые наручи безвольного варвара");
itemsToSell.push("item");
itemsToSell.push("Неряшливый лук мудрого стрелка");
itemsToSell.push("Бесполезное жало бессмертного варвара");
itemsToSell.push("Потертый меч беспощадного изверга");
itemsToSell.push("Наручи безвольного духа");
itemsToSell.push("Секира кровожадного солдата");
itemsToSell.push("Булава известного безумца");
itemsToSell.push("Безобразный шлем бесчестного воителя");
itemsToSell.push("Острие кровожадного воителя");
itemsToSell.push("Разваливающийся меч кровожадного грабителя");
itemsToSell.push("Грубые наколенники опытного варвара");
itemsToSell.push("Шапка опытного предка");
itemsToSell.push("Ветхие штаны чуткого странника");
itemsToSell.push("Затасканные рукавицы бывалого клятвоотступника");
itemsToSell.push("Ветхие наручи умелого пилигрима");
itemsToSell.push("Устаревший топор непобедимого аристократа");
itemsToSell.push("Порченный меч лютого героя");
itemsToSell.push("Острие кровожадного воителя");
itemsToSell.push("Ветхое кольцо высокомерного бойца");
itemsToSell.push("Разваливающиеся перчатки странного разбойника");
itemsToSell.push("Серьги важного охотника");
itemsToSell.push("Серьги опытного акробата");
itemsToSell.push("Потрепанное кольцо благородного солдата");
itemsToSell.push("Безобразное кольцо лютого воителя");
itemsToSell.push("Бесполезное кольцо щедрого убийцы");
itemsToSell.push("Рукавицы безвольного клятвоотступника");
itemsToSell.push("Старые ботинки Охранницы");
itemsToSell.push("Штатный шлем Охранницы");
itemsToSell.push("Серьги Охранницы");
itemsToSell.push("Гнилая роба Служителей");
itemsToSell.push("Вспомогательный топорик Охранницы");
itemsToSell.push("Наручи Служителя");
itemsToSell.push("Магический шлем Служителя");
itemsToSell.push("Вонючие ботинки Охранницы");
itemsToSell.push("Штатная броня охранницы");
itemsToSell.push("Ржавый меч Охранницы");
itemsToSell.push("Разваливающийся пояс Охранницы");
itemsToSell.push("Рваные одеяния Охранницы");
itemsToSell.push("Тусклое кольцо Охранницы");
itemsToSell.push("Затхлое одеяние Служителей");
itemsToSell.push("Прогнившие наручи Служителя");
itemsToSell.push("Гнилая роба Служителей");
itemsToSell.push("Поножи Служителя");
itemsToSell.push("Боевые перчатки Охранницы");
itemsToSell.push("Легкие сапоги Охранницы");
itemsToSell.push("Могучие серьги Служителя");
itemsToSell.push("Тапочки Служителя");
itemsToSell.push("Амулет Служителя");
itemsToSell.push("Старые перчатки Охранниц");
itemsToSell.push("Старый нож Охранницы");
itemsToSell.push("Ржавое кольцо Служителя");
itemsToSell.push("Дрянные серьги Охранницы");
itemsToSell.push("Надежный посох Служителя");
itemsToSell.push("Штатные поножи Охранницы");
itemsToSell.push("Амулет Охранницы");
itemsToSell.push("Старые браслеты Охранницы");
itemsToSell.push("Кольцо Охранниц");
itemsToSell.push("Старая шапка опытного духа");
itemsToSell.push("Подержанные наручи известного призрака");
itemsToSell.push("Штаны властного скитальца");
itemsToSell.push("Испорченные серьги Служителя");
itemsToSell.push("Нож Охранницы");
itemsToSell.push("Шлем Служителя");
itemsToSell.push("Удобные наручи Служителя");
itemsToSell.push("Надежный амулет Служителя");
itemsToSell.push("Кольцо Служителя");
itemsToSell.push("Гнилая дубина Охранниц");
itemsToSell.push("Жалкий шлем Охранницы");
itemsToSell.push("Изящные перчатки Служителей");
itemsToSell.push("Усиленные наручи Охранницы");
itemsToSell.push("Ржавый топорик Охранницы");
itemsToSell.push("Тяжелый посох Служителя");
itemsToSell.push("Неудобный шлем Служителя");
itemsToSell.push("Кривой посох Служителя");
itemsToSell.push("Непробиваемая туника Охранницы");
itemsToSell.push("Дырявые поножи Охранницы");
itemsToSell.push("Сношенные сандали Служителя");
itemsToSell.push("Гнилые поножи Служителей");
itemsToSell.push("Ветхий шлем Служителя");
itemsToSell.push("Старый амулет Служителя");
itemsToSell.push("Мантия Служителя");
itemsToSell.push("Перчатки Служителей");
itemsToSell.push("Боевой топорик Охранницы");
itemsToSell.push("Удобные ботинки Служителя");
itemsToSell.push("Наручи Охранницы");
itemsToSell.push("Боевой шлем Охранницы");
itemsToSell.push("Порванные ботинки Служителя");
itemsToSell.push("Посох Служителя");
itemsToSell.push("Крепкий посох Служителя");
itemsToSell.push("Гнилые перчатки Служителей");
itemsToSell.push("Разломанные браслеты Охранницы");
itemsToSell.push("Обычное одеяние Служителя");
itemsToSell.push("Крепкая роба Служителя");
itemsToSell.push("Приличный пояс Охранницы");
itemsToSell.push("Браслеты охранницы");
itemsToSell.push("Туника Охранницы");
itemsToSell.push("Утяжеленные наручи Охранницы");
itemsToSell.push("Сандали успешных Служителей");
itemsToSell.push("Острый меч Охранницы");
itemsToSell.push("Рваная туника Охранницы");
itemsToSell.push("Неплохой шлем Охранницы");
itemsToSell.push("Надежный шлем Охранницы");
itemsToSell.push("Дрянной амулет Охранницы");
itemsToSell.push("Прекрасный амулет Охранницы");
itemsToSell.push("Порванный пояс Служителя");
itemsToSell.push("Штатный меч Охранницы");
itemsToSell.push("Ветхие наручи Служителя");
itemsToSell.push("Блестящее кольцо Охранницы");
itemsToSell.push("Мощная броня Охранницы");
itemsToSell.push("Отличные наручи Служителя");
itemsToSell.push("Удивительный шлем Служителя");
itemsToSell.push("Ремень Служителей");
itemsToSell.push("Отличные поножи Служителей");
itemsToSell.push("Ритуальные поножи Охранницы");
itemsToSell.push("Укрепленная дубинка Охранницы");
itemsToSell.push("Пояс Охранницы");
itemsToSell.push("Серьги Служителя");
itemsToSell.push("Хороший шлем Служителя");
itemsToSell.push("Парадные серьги Охранницы");
itemsToSell.push("Сандали Служителя");
itemsToSell.push("Дубинка Охранницы");
itemsToSell.push("Отличный пояс Служителя");
itemsToSell.push("Облегченные ботинки Охранницы");
itemsToSell.push("Блестящий перстень Служителей");
itemsToSell.push("Хорошая мантия Служителя");
itemsToSell.push("Штатные сандали Охранницы");
itemsToSell.push("Треснувший шлем Охранницы");
itemsToSell.push("Утяжеленные сапоги Охранницы");
itemsToSell.push("Крепкие наручи Служителей");
//7 бездна
itemsToSell.push("Каска мудрого злодея");
itemsToSell.push("Перчатки бывалого гладиатора");
itemsToSell.push("Старый капюшон высокомерного стрелка");
itemsToSell.push("Дубина забытого духа");
itemsToSell.push("Порченный меч лютого героя");
itemsToSell.push("Серьги яростного гладиатора");
itemsToSell.push("Наколенники лютого разведчика");
itemsToSell.push("Затасканная секира мертвого аристократа");
itemsToSell.push("Серьги алчного путешественника");
itemsToSell.push("Кинжал опытного путешественника");
itemsToSell.push("Шапка уставшего путешественника");
itemsToSell.push("Серьги аккуратного безумца");
itemsToSell.push("Перчатки забывчивого обитателя подземелий");
itemsToSell.push("Безобразные брюки забытого предателя");
//8 бездна
itemsToSell.push("Грубые наколенники опытного варвара");
itemsToSell.push("Устаревший топор непобедимого аристократа");
itemsToSell.push("Булава известного безумца");
itemsToSell.push("Разваливающиеся перчатки странного разбойника");
itemsToSell.push("Грубые серьги алчного старца");
itemsToSell.push("Безобразный шлем бесчестного воителя");
itemsToSell.push("Шапка опытного предка");
itemsToSell.push("Разваливающийся меч кровожадного грабителя");
itemsToSell.push("Ветхие штаны чуткого странника");
itemsToSell.push("Острие кровожадного воителя");
itemsToSell.push("Старая шапка алчного мага");
itemsToSell.push("Серьги мудрого обитателя подземелий");
itemsToSell.push("Затасканные перчатки мифического старца");
itemsToSell.push("Ископаемые штаны алчного предсказателя");
//9 бездна
itemsToSell.push("Потертые штаны вечного стража");
itemsToSell.push("Молот бессмертного предка");
itemsToSell.push("Меч мифического отшельника");
itemsToSell.push("Потрепанные серьги алчного предка");
itemsToSell.push("Разваливающиеся поножи жестокого варвара");
itemsToSell.push("Острие властного военачальника");
itemsToSell.push("Топор жестокого разбойника");
itemsToSell.push("Потрепанные перчатки бдительного стрелка");
itemsToSell.push("Рукавицы мертвого путешественника");
itemsToSell.push("Разваливающийся шлем бессмертного героя");
itemsToSell.push("Капюшон мудрого старца");
itemsToSell.push("Неряшливые серьги аккуратного мудреца");
itemsToSell.push("Старые перчатки забывчивого старца");
itemsToSell.push("Потрепанные кальсоны известного пророка");
//8 каты
itemsToSell.push("Старое кольцо алчного проходимца");
itemsToSell.push("Старинные перчатки педантичного призрака");
itemsToSell.push("Наручи безвольного духа");
itemsToSell.push("Затасканные рукавицы бывалого клятвоотступника");
itemsToSell.push("Неряшливый лук мудрого стрелка");
itemsToSell.push("Серьги амбициозного мистика");
itemsToSell.push("Ветхие наручи умелого пилигрима");
itemsToSell.push("Серьги важного охотника");
itemsToSell.push("Серьги опытного акробата");
itemsToSell.push("Бесполезное кольцо щедрого убийцы");
itemsToSell.push("Неряшливый лук мудрого стрелка");
//9 каты
itemsToSell.push("Перчатки странного гладиатора");
itemsToSell.push("Баллиста алчного клятвоотступника");
itemsToSell.push("Неряшливые серьги известного героя");
itemsToSell.push("Ископаемые серьги щепетильного старца")
//11 каты
itemsToSell.push("Ископаемый арбалет доблестного призрака");
itemsToSell.push("Разваливающиеся серьги вечного палача");
itemsToSell.push("Серьги странного клятвоотступника");
itemsToSell.push("Серьги хитроумного обитателя подземелий");
//7-9 Пещера мглы
itemsToSell.push("Перстень лютого воина");
itemsToSell.push("Безобразное кольцо лютого воителя");
itemsToSell.push("Грубый доспех мифического разбойника");
itemsToSell.push("Безобразный клинок мудрого солдата");
itemsToSell.push("Кинжал дерзкого клятвоотступника");
itemsToSell.push("Грубые сапоги старого клятвоотступника");
itemsToSell.push("Безобразные сапоги неукротимого предателя");
itemsToSell.push("Балахон высокомерного духа");
itemsToSell.push("Секира мрачного гладиатора");
itemsToSell.push("Секира кровожадного солдата");
itemsToSell.push("Башмаки неумолимого предка");
itemsToSell.push("Сапоги высокомерного предка");
itemsToSell.push("Перстень забытого безумца");
itemsToSell.push("Перстень бессмертного странника");
itemsToSell.push("Перстень амбициозного пророка");
itemsToSell.push("Бесполезный пояс мудрого проходимца");
itemsToSell.push("Ремень высокомерного старца");
itemsToSell.push("Бесполезный амулет зоркого демона");
itemsToSell.push("Разваливающийся пояс щепетильного предателя");
itemsToSell.push("Ожерелье опытного старца");
itemsToSell.push("Старинная броня высокомерного странника");
itemsToSell.push("Ожерелье жестокого разбойника");
itemsToSell.push("Бесполезные ботинки странного путешественника");
itemsToSell.push("Истертый пояс властного путешественника");
itemsToSell.push("Старинная кираса властного отшельника");
itemsToSell.push("Пояс умелого обитателя подземелий");
itemsToSell.push("Пояс мертвого пророка");
itemsToSell.push("Пояс забывчивого аристократа");
itemsToSell.push("Истертый покров бессмертного странника");
itemsToSell.push("Неряшливый кулон бессмертного охотника");
itemsToSell.push("Истертый доспех неусыпного духа");
itemsToSell.push("Потрепанные ботинки амбициозного мага");
itemsToSell.push("Потертый меч беспощадного изверга");
itemsToSell.push("Грубая булава опытного гиганта");
itemsToSell.push("Истертые ботинки уставшего старца");
itemsToSell.push("Истертое ожерелье опытного аристократа");
itemsToSell.push("Ископаемый кулон алчного клятвоотступника");
itemsToSell.push("Ветхое кольцо высокомерного бойца");
itemsToSell.push("Бесполезное ожерелье яростного варвара");
itemsToSell.push("Посох щепетильного путешественника");
itemsToSell.push("Порченный ремень свирепого варвара");
itemsToSell.push("Ветхое жало странного бойца");
itemsToSell.push("Порченный меч бывалого вождя");
itemsToSell.push("Топор безрассудного отшельника");
itemsToSell.push("Ветхий посох педантичного пророка");
itemsToSell.push("Старинный посох странствующего путешественника");
itemsToSell.push("Амулет опытного путешественника");
itemsToSell.push("Старинный пояс непобедимого гиганта");
itemsToSell.push("Покров неумолимого путешественника");
itemsToSell.push("Покров ворчливого неофита");
itemsToSell.push("Бесполезное жало бессмертного варвара");
itemsToSell.push("Затасканное кольцо жестокого старца");
itemsToSell.push("Молот странного вождя");
itemsToSell.push("Молот лютого военачальника");
itemsToSell.push("Подержанные ботинки беспощадного демона");
itemsToSell.push("Жилет старого предка");
itemsToSell.push("Безобразные башмаки высокомерного духа");
itemsToSell.push("Кольцо странного обитателя подземелий");
itemsToSell.push("Старое кольцо известного демона");
itemsToSell.push("Кольцо старого безумца");
 
itemsToSell.push("Пустая бутыль");
 
function zadanie(enabled)
{
    if(enabled)
    {
        roomNameUpdTimer[mylogin] = setInterval("GetRoomName()", 500);
        if(enableSellInShop) sellTimer[mylogin] = setInterval("SellAction()", 1500);
        if(dungMode && !external.dungeonEnabled) external.dungeonEnabled = true;
        proverkaTimer[mylogin] = setInterval("proverkaHandler()",2000);       
    }
    else
    {
        if(zadanieTimer[mylogin]) clearInterval(zadanieTimer[mylogin]);
        external.SBattleAbovePercent.Text = 100;
        if(sellTimer[mylogin]) clearInterval(sellTimer[mylogin]);
        clearInterval(proverkaTimer[mylogin]);
        clearInterval(roomNameUpdTimer[mylogin]);       
    }
}
 
Array.prototype.inArray = function(item)
{
    for (var i in this)
        if (item.indexOf(this[i]) > -1)
            return true;
    return false;
}
 
function GetRoomName()
{
    try
    {
        if(top.Battle.bInBattle || !external.Started()) return;
        if(top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i))
        {
            external.SBattleAbovePercent.Text = 100;
            return;
        }
        var pageSource = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
 
        if(currentRoom = pageSource.match(/<nobr>([^<]+)<\/nobr>/))currentRoom = String(currentRoom[1]);
        else if(top.frames[external.mainFrameIndex].document.getElementsByName("quest_name").length > 0) currentRoom = "inQuestWindow";
        else currentRoom = "inDialog";
        if(currentRoom == "inDialog") external.ClickLink("Вернуться",4);
    }
    catch(err)
    {
        external.AddToChat("Error in GetRoomName function");
    }
}
 
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;       
        else 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]) zadanieTimer[mylogin] = setInterval("zadanieHandler()",3000);       
 
        if(temp_inf.match(tempstr))
        {
            external.AddToChat("Задания не требуется");
            questIsActive = false;
            needToTake = false;
            return;
        }
 
        var patt = external.SCity.Text + " - \\d+ (мин|ч|сек)";
 
        if(temp_inf.match(/Время до подземелья/)) dungeonLocked = true;
        else dungeonLocked = false;           
 
        if(GetQuestFromInfo(temp_inf))
        {
            external.AddToChat("Задание:");
            top.Chat.Self.AddMessage(questName + " " + hasBeenDone + "/" + needToDo);
            questIsActive = true;
            needToTake = false;
            var pickingQuest = isPickingQuest();
            if((!pickingQuest && hasBeenDone == needToDo) || (pickingQuest && (hasBeenDone == (Math.floor(needToDo/4) + needToDo)))) needToFinish = true;
            if(needToFinish) external.AddToChat("Нужно завершить задание");
        }       
        else
        {
            if(!temp_inf.toLowerCase().match(patt))
            {
                external.AddToChat("Требуется взять задание");
                needToTake = true;
                questIsActive = false;
            }
            else
            {
                external.AddToChat("Задержка на взятие задания");
                needToTake = false;
                questIsActive = false;
            }
        }
    }
    catch(err)
    {
        external.SBattleAbovePercent.Text = 100;
        external.AddToChat("Error in proverkaHandler function");
    }
}
 
function zadanieHandler()
{
    try
    {
        if(top.Battle.bInBattle || top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i) || !external.Started()) return;
 
        if(enableSellInShop && !beenInShop) return;
 
        var pgSource = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
 
        if(dungMode || (!dungMode && !dungeonLocked && (needToTake || questIsActive)))
        {
            if(!currentRoom.match(/Спуск в Катакомбы|inQuestWindow|Пещеры Мглы|Пещера Тысячи проклятий|Грибница|Спуск в Бездну/) || (currentRoom.match(/Пещера Тысячи проклятий/) && pgSource.match(/Никогда и никому не говорите пароль от своего персонажа/)))
            {
                MoveToDung();
                return;
            }           
        }
 
        if(!questIsActive && !needToTake && !dungMode)
        {
            if(currentRoom == "inQuestWindow") external.ClickLink("Вернуться",4);
            if(external.dungeonEnabled) external.dungeonEnabled = false;
            if(!currentRoom.match(/Зал воинов/))
                MoveFromDung();
            else
                external.SBattleAbovePercent.Text = 100;
            return;
        }
 
        if(needToTake || needToFinish)
        {
            if(currentRoom != "inQuestWindow") external.ClickLink("Задания",4);
            else
            {
                if(pgSource.match(/Для вас нет заданий/))
                {
                    needToTake  = false;
                    questIsActive = false;
                    needToFinish = false;
                    return;
                }
                var gotRep = pgSource.match(/Вы получили \d* награды за выполнение задания/);
                if(gotRep) external.AddToChat(gotRep);
 
                var btns = top.frames[external.mainFrameIndex].document.getElementsByName("finishquest");
                if(questID != "" && needToFinish && btns)
                {           
                    for(var i = 0; i < btns.length; i++)
                        if(btns[i].onclick && String(btns[i].onclick).match(questID) && btns[i].style.visibility != "hidden")
                        {
                            needToTake  = true;
                            questIsActive = false;
                            needToFinish = false;
                            questName = "";
                            questID = "";
                            needToDo = -1;
                            hasBeenDone = -1;
                            btns[i].click();
                            return;
                        }
                    external.AddToChat("Не нашел кнопки завершения задания");   
                }           
 
                if(external.SCity.Text == "suncity" && pgSource.match(/Репутация в Suncity: 0/))
                {
                    needToTake  = false;
                    questIsActive = false;
                    return;
                }
 
                needToTake  = false;
                questIsActive = true;
                if(external.ClickLink("Получить задание",4)) external.AddToChat("Работает взятие задания");
                else external.AddToChat("Задание уже есть");               
            }
        }
        else if(questIsActive || !needToTake)
        {
            if(currentRoom == "inQuestWindow" && pgSource.match(/Для вас нет заданий/))
            {
                questIsActive = false;
                needToTake = false;
                external.ClickLink("Вернуться",4);
                return;
            }
 
            if(currentRoom == "inQuestWindow") external.ClickLink("Вернуться",4);
 
            if(currentRoom != "inQuestWindow" && currentRoom.match(/Спуск в Катакомбы|Пещера Тысячи проклятий|Пещеры Мглы|Грибница|Спуск в Бездну/))
            {
                var fp = GetPathFileName();
                if(fp == "")
                {
                    questIsActive = false;
                    needToTake = false;
                    external.AddToChat("Файл маршрута не найден");
                    return;
                }
 
                if(!dungMode)
                {
                    external.DungeonLoadPath(fp);
                    external.dungeonEnabled = true;
                    external.SBattleAbovePercent.Text = 100;
                }               
            }
        }
    }
    catch(err)
    {
        external.AddToChat("Error in zadanieHandler function");
    }
}
 
function SellAction()
{
    try
    {
        if(!external.Started() || top.Battle.bInBattle) return;
        if(get_mainframe().DungMap)
        {
            beenInShop = false;
            return;
        }       
        if(beenInShop) return;   
 
        var sellTmp = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
        if(currentRoom != "Магазин" || sellTmp.indexOf("dem_newbot_magaz") > -1) MoveFromDung();
        else
        {
            if(!sellTmp.match(/Отдел \"Скупка\"/i)) external.ClickLink("Продать вещи",4);
            else
            {
                var items = sellTmp.match(/<a\s(?:onclick="[^"]*"\s)?href="shop\.pl\?sl=[^"]*">продать за .*? кр.<\/a><\/td>[\s\n\r]*<td[^>]*><a [^>]*>[^&<]*/ig);
                if(!items)
                {
                    beenInShop = true;
                    return;
                }
                for(var i = 0; i < items.length; i++)
                {
                    items[i] = items[i].match(/<a\s(?:onclick="[^"]*"\s)?href="(shop\.pl\?sl=[^"]*)">продать за .*? кр.<\/a><\/td>[\s\n\r]*<td[^>]*><a [^>]*>([^&<]*)/i);
                    if(!items[i]) continue;
                    items[i][1] = items[i][1].replace(/&amp;/g, '&');
                    if(!items[i][1]) continue;
                    if(itemsToSell.inArray(items[i][2]))
                    {
                        top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/" + items[i][1];
                        return;
                    }
                }
                beenInShop = true;
            }
        }
    }
    catch(err)
    {
        external.AddToChat("Error in SellAction function");
    }
}
 
function GetQuestFromInfo(inf)
{
    try
    {
        var flds = inf.match(/<fieldset>[^<]*<legend>\s?Текущие (?:квесты|задания)[^@]*<\/fieldset>/i);
        if(!flds) return false;
        flds = flds[0].match(/<img[^>]*>[^@]*<span [^>]*>\d*\/\d*<\/span>/ig);
        if(!flds) return false;
         for(var i = 0; i < flds.length; i++)
        {
            var tmp = flds[i].match(/<img[^@]*quest_name=([^(?:&|")]*)[^>]*>([^@]*)<span[^>]*>([^<]*)<\/span>/i);
            if(!tmp) return false;
            if(CheckForQuestInInv(tmp[2]))
            {           
                questID = tmp[1];                                                         // 1 == идентификатор квеста
                questName = tmp[2];                                                     // 2 == текст квеста
                hasBeenDone = parseInt(tmp[3].match(/[^\d]*(\d*)[^\/]*/)[1].toString());// 3 == сделано
                needToDo = parseInt(tmp[3].match(/[^\/]*\/(\d*)/)[1].toString());         // 4 == надо сделать                   
                return true;   
            }
        }
        return false;
    }
    catch(err)
    {
        external.AddToChat("Error in GetQuestFromInfo function");
    }
}
 
function CheckForQuestInInv(inf)
{
    try
    {
        var indexArray = -1;
        if(external.SCity.Text == "suncity") indexArray = 4;
        else if(external.SCity.Text == "sandcity") indexArray = 2;
        else if(external.SCity.Text == "angelscity") indexArray = 0;
        else if(external.SCity.Text == "demonscity") indexArray = 3;
        else if(external.SCity.Text == "mooncity") indexArray = 1;
        if(indexArray == -1) return false;
 
        for(var i = 0; i < allQuests[indexArray].length; i++)
            if(inf.match(allQuests[indexArray][i]))
                return true;
        return false;
    }
    catch(err)
    {
        external.AddToChat("Error in CheckForQuestInInv function");
    }
}
 
function isPickingQuest()
{
    try
    {
        if(external.SCity.Text == "suncity" && 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.match(/sandcity|angelscity/) && questName.match(/[(?:&quot;|<b>|\")]*Хрустал[яь]|[(?:&quot;|<b>|\")]*(?:Дракон[ьегоий]* [Кк]ам[еньяй]*)|[(?:&quot;|<b>|\")]*Гранит|[(?:&quot;|<b>|\")]*(?:Пещерн[ыйого]* [Мм][оха]*)|[(?:&quot;|<b>|\")]*(?:Подгорн[ыхйе]* [Ээ]дельвейс)/))
                return true;
        else if(external.SCity.Text == "mooncity" && questName.match(/[(?:&quot;|<b>|\")]*Хрустал[яь]|[(?:&quot;|<b>|\")]*(?:Дракон[ьегоий]* [Кк]ам[еньяй]*)|[(?:&quot;|<b>|\")]*Гранит|[(?:&quot;|<b>|\")]*(?:Пещерн[ыйого]* [Мм][оха]*)|[(?:&quot;|<b>|\")]*(?:Подгорн[ыхйе]* [Ээ]дельвейс)|[(?:&quot;|<b>|\")]*Инструмент|[(?:&quot;|<b>|\")]*(?:Череп[аов]* [пП]утешественн)/))
                return true;
        return false;
    }
    catch(err)
    {
        external.AddToChat("Error in isPickingQuest function");
    }
}
 
function MoveToDung()
{
    try
    {
        if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/drwfl\("(?:Геммайя|Мухатор|Юверриат|Фелико)",\d*/) && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/завершить разговор|уйти/))
        {   
            external.AddToChat("Завис у диалогового бота");
            external.ClickLink(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/завершить разговор|уйти/)[0],2);           
        }
        else if(currentRoom == "Магазин" && top.frames[external.mainFrameIndex].check_access())
        {
            if(external.SCity.Text == "sandcity") external.ClickLink("Лавка Бартоломея",2);
            else if(external.SCity.Text.match(/suncity|angelscity|mooncity/)) external.ClickLink("Прилавки с товарами",2);
            else if(external.SCity.Text == "demonscity") external.ClickLink("Торговый Разлом",2);
        }
        else if (currentRoom == "Прилавки с товарами")
        {
            if(external.SCity.Text == "suncity") external.ClickLink("Центральная грибница",1);
            if(external.SCity.Text == "angelscity") external.ClickLink("Торговые скалы",1);
            if(external.SCity.Text == "mooncity") external.ClickLink("Рыночная площадь",1);
        }
        else if(currentRoom == "Бойцовский Клуб")
        {
            if(external.SCity.Text == "sandcity") external.ClickLink("Центральный Оазис",1);
            else if(external.SCity.Text == "angelscity") external.ClickLink("Центральный утес",1);
            else if(external.SCity.Text == "suncity") external.ClickLink("Центральная грибница",1);
            else if(external.SCity.Text == "mooncity") external.ClickLink("Центр падения",1);
            else if(external.SCity.Text == "demoncity") external.ClickLink("Центральный Разлом",1);
        }
        else if(currentRoom.match(/Зал воинов/))
            external.ClickLink("Бойцовский Клуб",1);
        else if (currentRoom == "Центральная грибница") //sun
            external.ClickLink("Грибная лужайка",1);
        else if(currentRoom == "Грибная лужайка")
            external.ClickLink("Странное Место",1);
        else if(currentRoom == "Странное Место")
            external.ClickLink("Грибная поляна",1);
        else if(currentRoom == "Грибная поляна")
            external.ClickLink("Грибница",1);            //end sun
        else if (currentRoom == "Лавка Бартоломея")        //sand
            external.ClickLink("Базар",1);
        else if (currentRoom == "Базар")
            external.ClickLink("Центральный Оазис",1);
        else if(currentRoom == "Центральный Оазис")
            external.ClickLink("Цветочный Пустырь",1);
        else if(currentRoom == "Цветочный Пустырь")
            external.ClickLink("Последний Привал",1);
        else if(currentRoom == "Последний Привал")
            external.ClickLink("Внутренний двор",1);
        else if(currentRoom == "Внутренний двор")   
            external.ClickLink("Пещеры Мглы",1);        //end sand
        else if (currentRoom == "Торговые скалы")         //angels
            external.ClickLink("Центральный утес",1);
        else if(currentRoom == "Центральный утес")
            external.ClickLink("Каменно-цветочная гряда",1);
        else if(currentRoom == "Каменно-цветочная гряда")
            external.ClickLink("Утес безысходности",1);
        else if(currentRoom == "Утес безысходности")
            external.ClickLink("Вход в Заповедник",1);
        else if(currentRoom == "Вход в Заповедник")       
            external.ClickLink("Спуск в Бездну",1);        //end angels
        else if(currentRoom == "Торговый Разлом")        //demons
            external.ClickLink("Разлом Великолепия",1);
        else if(currentRoom == "Разлом Великолепия")
            external.ClickLink("Центральный Разлом",1);
        else if(currentRoom == "Центральный Разлом")
            external.ClickLink("Разлом Поклонения",1);
        else if(currentRoom == "Разлом Поклонения")
            external.ClickLink("Дорога Храбрости",1);
        else if(currentRoom == "Дорога Храбрости")
            external.ClickLink("Спуск в катакомбы",1);
        else if(currentRoom == "Спуск в катакомбы" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/))
            external.ClickLink("Спуск в Катакомбы",1); //end demons
        else if (currentRoom == "Рыночная площадь")        //moon
            external.ClickLink("Центр падения",1);
        else if (currentRoom == "Центр падения")
            external.ClickLink("Спящая площадь",1);
        else if (currentRoom == "Спящая площадь")
            external.ClickLink("Улица Камней",1);
        else if (currentRoom == "Улица Камней")
            external.ClickLink("Проклятые руины",1);
        else if (currentRoom == "Проклятые руины")
            external.ClickLink("Пещера тысячи проклятий",1);
        else if(currentRoom == "Пещера Тысячи проклятий" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/))
            external.ClickLink("Пещера Тысячи проклятий",1);  //end moon
    }
    catch(err)
    {
        external.AddToChat("Error in MoveToDung function");
    }
}
 
function MoveFromDung()
{   
    try
    {
        if(currentRoom == "Пещера Тысячи проклятий" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/))
            external.ClickLink("Проклятые Руины",1);
        else if(currentRoom.match(/Спуск в Катакомбы|Пещеры Мглы|Пещера Тысячи проклятий|Грибница|Спуск в Бездну/))
        {
            if(external.SCity.Text == "suncity") external.ClickLink("Грибная поляна",2);
            else if(external.SCity.Text == "sandcity") external.ClickLink("Внутренний двор",2);
            else if(external.SCity.Text == "angelscity") external.ClickLink("Вход в Заповедник",2);
            else if(external.SCity.Text == "demonscity") external.ClickLink("Спуск в катакомбы",2);
            else if(external.SCity.Text == "mooncity") external.ClickLink("Пещера Тысячи проклятий",2);
        }
        else if(currentRoom == "Бойцовский Клуб")
            external.ClickLink("Зал воинов",1);
        else if(currentRoom == "Грибная поляна")            //sun
            external.ClickLink("Странное Место",1);
        else if(currentRoom == "Странное Место")
            external.ClickLink("Грибная лужайка",1);
        else if(currentRoom == "Грибная лужайка")
            external.ClickLink("Центральная грибница",1);     //end sun
        else if(currentRoom == "Спуск в катакомбы" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Никогда и никому не говорите пароль от своего персонажа/))
            external.ClickLink("Дорога Храбрости",1);
        else if(currentRoom == "Дорога Храбрости")
            external.ClickLink("Разлом Поклонения",1);
        else if(currentRoom == "Разлом Поклонения")
            external.ClickLink("Центральный Разлом",1);
        else if(currentRoom == "Разлом Великолепия")
            external.ClickLink("Торговый Разлом",1);
        else if(currentRoom == "Торговый Разлом")
            external.ClickLink("Магазин",1);                //end dem         
        else if(currentRoom == "Проклятые Руины")            //moon
            external.ClickLink("Улица Камней",1);
        else if(currentRoom == "Улица Камней")
            external.ClickLink("Спящая площадь",1);
        else if(currentRoom == "Спящая площадь")
            external.ClickLink("Центр падения",1);          //end moon   
        else if(currentRoom == "Вход в Заповедник")            //ang
            external.ClickLink("Утес безысходности",1);
        else if(currentRoom == "Утес безысходности")
            external.ClickLink("Каменно-цветочная гряда",1);
        else if(currentRoom == "Каменно-цветочная гряда")
            external.ClickLink("Центральный утес",1);         //end ang
        else if(currentRoom == "Внутренний двор")            //sand
            external.ClickLink("Последний Привал",1);
        else if(currentRoom == "Последний Привал")
            external.ClickLink("Цветочный Пустырь",1);
        else if(currentRoom == "Цветочный Пустырь")
            external.ClickLink("Центральный Оазис",1);        //end sand
        else if(currentRoom == "Магазин" && external.SCity.Text == "demonscity" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.indexOf("dem_newbot_magaz") > 0)
            external.ClickLink("dem_newbot_magaz",3);
        else if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/drwfl\("(?:Илена|Мафи|Бартоломей|Амарл)",\d*/) && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/подойти к прилавк[аму]*|пройти к прилавк[аум]*/))
            external.ClickLink(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/подойти к прилавк[аму]*|пройти к прилавк[аум]*/)[0],2);
        else if (currentRoom.match(/Центральная грибница|Торговые скалы/))
            external.ClickLink("Прилавки с товарами",1);
        else if (currentRoom == "Прилавки с товарами" && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Илена|Мафи/))
            external.ClickLink(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Илена|Мафи/)[0],3);
        else if (currentRoom == "Базар")
            external.ClickLink("Лавка Бартоломея",1);
        else if (currentRoom == "Лавка Бартоломея")
            external.ClickLink("Бартоломей",3);
        else if (currentRoom.match(/Центральный Оазис|Центральный утес|Центральная грибница|Центр падения|Центральный Разлом/))
        {
            if(!enableSellInShop && !dungMode) external.ClickLink("Бойцовский Клуб",1);
            if(!beenInShop && enableSellInShop)
            {
                if(currentRoom == "Центральный Разлом")
                    external.ClickLink("Разлом Великолепия",1);
                else if (currentRoom == "Центральный утес")
                    external.ClickLink("Торговые скалы",1);
                else if (currentRoom == "Центральный Оазис")
                    external.ClickLink("Базар",1);
                else if (currentRoom == "Центральная грибница")
                    external.ClickLink("Прилавки с товарами",1);
                else if (currentRoom == "Центр падения")
                    external.ClickLink("Рыночная площадь",1);   
            }
        }
    }
    catch(err)
    {
        external.AddToChat("Error in MoveFromDung function");
    }
}
 
function doLoad(url)
{
    try
    {
        if (window.XMLHttpRequest) req = new XMLHttpRequest();
        else req = new ActiveXObject("Microsoft.XMLHTTP");     
        req.open("GET", url, false);
        req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
        req.send(null);
        return req.responseText;
    }
    catch(err)
    {
        external.AddToChat("Error in doLoad function");
    }
}
 
function GetPathFileName()
{
    try
    {
        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 "";
    }
    catch(err)
    {
        external.AddToChat("Error in GetPathFileName function");
    }
}

Ну, в первом проходе твой плагин оказался рабочим в ангеле...разве что beenInShop не сбрасывался в false из-за чего в магазин даже не пытался идти. Когда подправил - рванул и распродал всё...и задания проверил...

153

(80 ответов, оставленных в Настройки / Плагины)

Nikita_KrM пишет:
if(typeof(top.Battle.oBattle.oMySlot.arrEffects["block_fullshield"]) != "object")
{
_name = "hit_throwdblaxe";
_target = top.Battle.oBattle.sEnemyLogin;
}

Вроде работает, а как теперь вписать сюда "else"   _name = "hit_empower";  // Что б использовал усиленные удары если не висит полная защита? (я просто не пойму когда "новая строка" и скобы ставить надо)  А то теперь бросается постоянно.

if(typeof(top.Battle.oBattle.oMySlot.arrEffects["block_fullshield"]) != "object")
{
_name = "hit_throwdblaxe";
_target = top.Battle.oBattle.sEnemyLogin;
}
else
{
_name = "hit_empower";
}

154

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

Я в последних версиях уже не отключал подачу заявок, если нет подходящей.

К чему тема? smile

Nikita_KrM,
давай по твоему плагину попробуем разобраться.
Ты включил только его, он:
1) прокопал пещеру
2) Дошел до магазина
3) Должен был перейти в раздел скупки, но пропустил этот шаг
4) Вернулся обратно копать пещеру

И при этом же включенном плагине когда ты довёл его в магазин в раздел скупки он всё продал корректно?

Сидеть и с 0 придумывать всё я честно сейчас не в состоянии, а вот попытаться найти и устранить проблему в существующем - это совсем другое дело smile

156

(4 ответов, оставленных в Подземелье / Маршруты)

Если не правильно в конструкторе, то и предыдущие маршруты не должны ходить нормально...
В каких городах наблюдается проблема?

Посмотрел я объединенный и не увидел, как бот мог уйти обратно в данж...а при ручном переключении на продажу корректно отработать.
Т.е. тут указано прямое условие:

if(!sellTmp.match(/Отдел \"Скупка\"/i))external.ClickLink("Продать вещи",4);

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

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

158

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

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

159

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

Provokator,
()
Скачайте Program.exe для 26-й версии и замените свой на новый.

Cookie,
Действительно остался кусочек конструктора sad

volok,
Про баг с одной сплошной строкой-координатой я в курсе - он уже давно (в предыдущих версиях) встречается иногда.
Причина его пока что не ясна.

Про AttackMobs() нужно подтверждение ещё от кого-нибудь, что бот не атакует...

160

(39 ответов, оставленных в Настройки / Плагины)

Кинул сообщение в ПМ.

161

(39 ответов, оставленных в Настройки / Плагины)

Покажи плагин и скажи, на какой части он стопорится

162

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

Nikita_KrM
Я не слышал такого, чтобы маршрут в сане не работал. Посмотри в сам файл маршрута - возможно он у тебя испортился(правда не знаю, что искать...повторную координату на первую клетку?), когда ты пытался заставить его идти после проблемы со снятием вещей после смерти.

irfon
Извиняюсь, теперь должен работать...

163

(8 ответов, оставленных в Подземелье / Маршруты)

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

За сан никто не брался ещё из админов БК - ошибка связана с тем, что я сломал случайно конструктор. Уже исправлено в 9.2.8.25

164

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

semenspb пишет:

Только в шапке программы пишет что доступна новая версия 9,2,8,24  хотя поставил 25

Ну, это нормально - я был в процессе публикации ещё. Если перезапустить - уже писать не будет, что 24 -новая версия smile

165

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

irfon,
нормальная сборка была - сутки нормально качает в хаотах hmm
добавил для демонса возвращение в 9.2.8.25

166

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

всё работает, но не дерётся - в приёмах проблема  hmm

167

(39 ответов, оставленных в Настройки / Плагины)

Ок. Продолжаем smile
1) Ссылки на старт диалога работает нормально и написана только потому, что никто не мог (точнее не умел) писать короткую команду на поиск ссылки для запуска диалога - поэтому вместо нажатия ссылки на странице отправлялась прямая команда на запуск диалога. В целом использовать можно, но можно и красивее (но не с ClickLink).

2) Ссылка на то, что делать бот после диалога будет - эта ссылка тоже на странице в момент диалога отсутствует полностью, поэтому её нельзя найти и кликнуть. Её вообще заменить нечем smile

3) "Ну тут понятно что искать будет Да, только вот ответ в диалоге только "ДА") и больше нет никаких слов."
Отлично Этим ответом ты обосновал external.ClickLink("Да",2); - это найти на странице ссылку с текстом "Да" и нажать на неё.
А при чем тут "if(get_mainframe().document.all[0].innerHTML.match(/Да./))"?

Пример:

if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Мастер что-то внимательно и сосредоточенно делает/))
{
     external.ClickLink("подождать немного",2);
}

Update:

Может начать, а может развернуться на клетке начало диалога и пройти мимо. хотя ничего не менял)

На клетке начала диалога в маршруте можешь Walk(); убрать, раз он у тебя всё равно в плагине диалога выполняется

168

(39 ответов, оставленных в Настройки / Плагины)

Так.
Ещё раз: проверка делается только внутри if().
Она должна делаться только по тексту.
Не существует такой проверки "по ссылке" по одной простой причине: в ссылке нет информации о том, к какому диалогу она относится. Там прямым текстом написано: move_dialog=23 - это "Выбрать ответ 23 для текущего диалога", а ты не знаешь, какой является текущим...а move_dialog=2 так вообще чуть ли не на каждый шаг диалога будет подходить.

Никаких top.frames[external.mainFrameIndex].location быть не должно - я написал external.ClickLink для ухода от этого механизма специально. Он лучше, он надёжнее и он проще.

В общем: несёт не туда.
Рекомендую пройтись по условиям в if.
Например вот эта строка вызывает у меня странные чувства:

if(get_mainframe().document.all[0].innerHTML.match(/Да./))

Она сработает при наличии любого слова "Да" (Д заглавная и а прописная подряд) на всей странице с диалогом (т.е. и имена персонажей, участвующих в диалоге, и текст диалога, и текст ответов - всё будет проверено на наличие "Да").
Кстати, точка внутри match(//) обозначает один любой символ, поэтому разницы между "Да" и "Да." нет
Вопросительный знак - ещё веселее. "Да?" будет подходить даже для текста, содержащего только "Д"(т.е. он говорит, что символ перед ? может быть, а может не быть...используется в более сложных масках, например маска "а-?10" подходит и для текста "а10", и для "а-10").

Надо пройтись по if и проследить за уникальностью проверяемого текста.

169

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

Evgeny99
эээ...нет...ничего требоваться от тебя не должно

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

170

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

кто тестирует мун? smile
остальным тоже неплохо бы протестировать другие данжи, что я ничего не сломал...в 3 часа ночи писать код весело, но сложно

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

171

(39 ответов, оставленных в Настройки / Плагины)

Ссылки являются ещё менее уникальными, чем слова.
get_mainframe().document.all[0].innerHTML.match(/И вам хорошего дня/) - в этой части должны быть слова, которые однозначно говорят о том, какой диалог/с кем и прочее. Если они встречаются в нескольких диалогах - значит плохо подобраны и надо их менять на более уникальный набор.
Это не текст ответа - это может быть фраза из текста самого диалога.

172

(40 ответов, оставленных в Настройки / Плагины)

$('area[title="Сторож могил"]',get_mainframe().document).each(function() {  this.click(); $('a[onclick*="gy_gravedigger_default"]',get_mainframe().document).each(function(){this.click()})})

Поменяй Сторож могил и gy_gravedigger_default - будет запускать диалог


Вообще как админы БК подключили jquery, жить стало намного легче smile

173

(8 ответов, оставленных в Подземелье / Маршруты)

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

174

(84 ответов, оставленных в Проблемы / Баги / Неполадки)

Desire, я бы попробовал запустить IE от имени того пользователя, что запускает проблемного бота и через Сервис - Свойства браузера - Раздел Журнал браузера (на закладке Общее) - Кнопка Параметры - Посмотреть файлы - Выделить всё и удалить.

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

175

(84 ответов, оставленных в Проблемы / Баги / Неполадки)

Desire, огромные количества - это 120-200мб.
Нормально 70-80, идеально 40.
Сколько жрёт у вас?

Evgeny99, посмотрим...возможно добавлю сразу.