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

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

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

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

А каким образом плагин уменьшает нагрузку на комп?
Ведь на какой вкладке бы ни находился нижний фрейм, лог боя всё равно подгружается при обновлении верхнего.

328

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

Пробовал санд пур-силовиком копать.
Доходил максимум до третьего этажа, и то через левый проход. ПГ разрывают в говно.
Скорее всего, легче будет уворотом.

329

(42 ответов, оставленных в Флейм)

Ты вообще слышал, что такое БК депозит?

Впервые слышу, поэтому и интересуюсь)

330

(42 ответов, оставленных в Флейм)

Ухх, жесткий пост)

SPOILER Show
САМЫЕ УМНЫЕ БОТЫ СПАЛИЛИСЬ НА ДЕПОЗИТЕ, НО ОНИ ЗАРАБОТАЛИ СТОЛЬКО, ЧТО ДАЙ БОГ КАЖДОМУ, ПРИЧЕМ ИСПОЛЬЗОВАЛАСЬ СТРУКТУРА ОТМЫВА ЦЕПОЧНО _ КРУГОВАЯ, чтобы ЕЁ РАЗГАДАТЬ, прийдеться ОЙ КАК ПОЕБАТЬСЯ,

Вот про это можно чуть подробнее? Малость не понял, о чем речь.

Начнем с того, что автор не указал, что фулл нужен на ферму. Следовательно, предполагаем, что фулл пойдет на основного чара.
2. Юва грибницы выкапывается за один день.
3. Пещерная броня хороша по трем параметрам:
а) Дешевле госовой почти в два раза.
б) Максимальный износ выше госовой.
в) Качество аж ЕФ

А в сочетании с VF- ювой дает прирост к опыту.
К тому же, и опять же, у ювы хороший мф.

golfrus пишет:

Вариант правильный мой и самый быстрый не надо копать не чего все остальные ваши варианты кал полный пещерная броня для лука не кондишен для ботовода догадайтесь почему.

Модификаторы своего и моего комплекта сравни, ага? А потом делай выводы чей фулл кал.

malrom пишет:
Exile пишет:

()

не, не айс.. 15 владелок нету.. залпов будет только 2! наручи думаю лучше взять екровые 7лвл.. еще идеи?

ну тогда вместо пур-наручей взять гос-наручи, а вместо гос-пояса - пур-пояс)
Как раз вышло 15
()

Action22 пишет:

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

2.4кр минимум
хотя если учесть не так давно возросший спрос на шмот лукаря, то цены могут быть кредов 5-10 за шмотку

()

336

(42 ответов, оставленных в Флейм)

Action22 пишет:
Exile пишет:

После прошлогоднего инцидента никто больше не рискнет

Меня тогда не было, отпиши плз инцидент

Разраб устроил акцию в честь пасхи(?). Заключалась она в продаже первым 10ти желающим лицензию за 500кредов.
По переводам всех выловили => все в блоке, в т.ч. и чар разраба.

337

(42 ответов, оставленных в Флейм)

После прошлогоднего инцидента никто больше не рискнет

А anahronik хоть вкурсе?

339

(13 ответов, оставленных в Качалка)

наконецто появилось чтото вроде БАЛАНСА

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

340

(5 ответов, оставленных в JavaScript)

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

var temp_inf = "";
function Morkovka(enabled)
{
    if(enabled)
    {
        PluginsOnLoad["Morkovka"] = "MorkovkaHandler";
    }
    else
    {
        PluginsOnLoad["Morkovka"] = "";
    }
}
 
function MorkovkaHandler(url)
{
    try
    {
        if(top.Battle.bInBattle) return;
 
        var hpRemain = parseInt(maxHP - tkHP);
        var manaRemain = 0;
        var morkovkaName = [];
 
        if(window.tkMana)
        {
            manaRemain = parseInt(maxMana - tkMana);
 
            if(manaRemain > 2000)
            {
                morkovkaName[morkovkaName.length] = new Array ("Бутылек маны",3);                 //Раздел инвентаря, где лежит элексир. 3- раздел "Элексиры", 4 - "Прочее"
            }
 
            if(manaRemain > 1500)
            {
                morkovkaName[morkovkaName.length] = new Array ("Флакончик маны",3);                   //Раздел инвентаря, где лежит элексир. 3- раздел "Элексиры", 4 - "Прочее"
            }
        }       
 
        if(external.room_name=='Грибница' && top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/(?:Слабость к (?:Воде|Огню|Воздуху))|(?:Дрожь в коленях)/i))
        {
            morkovkaName[morkovkaName.length] = new Array ("Печень Гусеница",3);
        }
 
        if(hpRemain > 300)
        {
            morkovkaName[morkovkaName.length] = new Array ("Заживляющий Эликсир",3);                  //Раздел инвентаря, где лежит элексир. 3- раздел "Элексиры", 4 - "Прочее"
        }
 
        if(hpRemain > 200)
        {
            morkovkaName[morkovkaName.length] = new Array ("Сосуд жизненных сил",4);                  //Раздел инвентаря, где лежит элексир. 2- раздел "Элексиры", 3 - "Прочее"
        }       
 
        if(hpRemain > 150)
        {
            morkovkaName[morkovkaName.length] = new Array ("Заживляющая Настойка",3);               //Раздел инвентаря, где лежит элексир. 3- раздел "Элексиры", 4 - "Прочее"
        }
 
        for(x = 0; x < morkovkaName.length; x++)
        {
            if(Morkovka2Handler(morkovkaName[x][0],morkovkaName[x][1])) break;
        }
    }
    catch(err)
    {
        alert("We've got some error!");
    }
}
 
function Morkovka2Handler(elikName,razdel)
{
    try
    {
        var str = "edit="+razdel;
        if(top.frames[external.mainFrameIndex].location.toString().match(str) == false)
        {
            temp_inf = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?edit="+razdel+"&rnd=" + Math.random());
        }
 
        var m = elikName + "(\\s\\(x\\d+\\))?','main.pl',\\s'(.+?)',\\s'.*?',\\s(\\d+)";
        var found = temp_inf.match(m);
 
        if(found != null)
        {
            external.AddToChat("Выпиваю эликсир <b>\\\"" + elikName + "\\\"</b>");
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?use=" + found[2] + "&n=" + found[3];
            temp_inf = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
            return true;
        }
        return false;
    }
    catch(err)
    {
        alert("We've got some error!");
    }
}
 
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;
}

Все боты под одним IP?

Истинно так

hyppo пишет:
Exile пишет:

как называется переменная, показывающая кол-во союзников в хаоте?

EnemiesCount - враги
SoratnikiCount - свои
переменные задаются в Main.js

Точно, спасибо.
А то с фиксом танков половину приемов приходится переписывать(

как называется переменная, показывающая кол-во союзников в хаоте?

344

(5 ответов, оставленных в JavaScript)

Он может выпить, а может не найти элексир, а брейку пофигу будет

Ахтыжепт, точно(

Ты проверяешь только момент получения дрожи/ослабления.

Не совсем.
Если по какой-то причине ослабление не отхелится в момент получения, то отхелится при первом же юзе морковки, т.к. в html инвентаря тоже засветится

(?:Слабость к (?:Воде|Огню|Воздуху))|(?:Дрожь в коленях)...

345

(5 ответов, оставленных в JavaScript)

- Ситуация: у тебя разница в 500 ХП. У тебя по условию добавляется в массив, допустим, на 500ХП, на 200ХП, на 150ХП абстрактные морковки. И он выпъет их всех, т.е. на 850ХП.
Причина: нету стопора после первого выпитого (раньше стопором работала переменная healed, сейчас я сделал по-другому).

Да, ошибку понял.
Лечится вот так:

for(x = 0; x < morkovkaName.length; x++)
        {
            Morkovka2Handler(morkovkaName[x][0],morkovkaName[x][1]);
            break;
        }

Нарушение в логике работы с temp_inf в Morkovka2Handler. Ты обнуляешь temp_inf всегда, но вставляешь новое значение только если не в инвентаре... что-то тут явно не то

И тут ты прав.

Если вдруг пропустил слабость/дрожь и они уже висят - он не снимит их.

Вот тут не понял)

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

346

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

Хотя я эту строчку удалил и все заработало.
А зачем она вообще?

Затем, чтобы бот в бою не пытался лечиться.

347

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

видимо это в момент окончания боя, но статус боя еще стоит

Кстати, вполне возможно.
Помнится, анахроник не советовал юзать external, в т.ч. external.inBattle. Вместо него предлагал юзать такую конструкцию:

if(top.Battle.bInBattle) return;

Попробуй подставить это.

348

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

И еще вопрос: как у тебя осуществлялалсь проверка на ослабления? Зачем в основном методе две проверки на дрожь\слабость?

349

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

Как вариант - отвязать плагин от обновления фрейма и повесить таймер

350

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

или вот такой способ:

function Morkovka(enabled)
{
    if(enabled)
    {
        PluginsOnLoad["Morkovka"] = "MorkovkaHandler";
    }
    else
    {
        PluginsOnLoad["Morkovka"] = "";
    }
}
 
function MorkovkaHandler(url)
{
    if(external.inBattle || (external.dungeonEnabled && !IsMapVisible())) return;
 
    var hpRemain = parseInt(maxHP - tkHP);
    var morkovkaName = [];
 
    if(tkHP < 813)
    {
        morkovkaName[morkovkaName.length] = new Array ("Настойка на грибах",4);
    }
 
    if(tkHP < 1513)
    {
        morkovkaName[morkovkaName.length] = new Array ("Заживляющий Эликсир",3);
    }
 
    if(tkHP < 1663)
    {
        morkovkaName[morkovkaName.length] = new Array ("Заживляющая Настойка",3);
    }
 
    for(x = 0; x < morkovkaName.length; x++)
    {
        Morkovka2Handler(morkovkaName[x][0],morkovkaName[x][1]);
    }
}
 
function Antidote(name,index)
{
    var d = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?edit="+index+"&rnd=" + Math.random());
    var k = name + "(\\s\\(x\\d+\\))?','main.pl',\\s'(.+?)',\\s'.*?',\\s(\\d+)";
    var f = d.match(k);
    if(f != null)
    {
        external.AddToChat("Выпиваю эликсир <b>\\\"" + name + "\\\"</b>");
        top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?use=" + f[2] + "&n=" + f[3];
    }
}
 
function Morkovka2Handler(elikName,razdel)
{
    var s = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?edit="+razdel+"&rnd=" + Math.random());
    if(s.indexOf("Ослабление после боя") < 0)
    {
        var antidoteName = [];
        if(s.match(/Слабость к (?:Воде|Огню|Воздуху)/i))
        {   
            antidoteName[antidoteName.length] = new Array ("Печень Гусеница",3);
        }
 
        if(s.match(/Дрожь в коленях/i))
        {   
            antidoteName[antidoteName.length] = new Array ("Почки Палочника",3);   
        }
 
        for(i = 0; i < antidoteName.length; i++)
        {
            Antidote(antidoteName[i][0],antidoteName[i][1]);
        }
 
        var m = elikName + "(\\s\\(x\\d+\\))?','main.pl',\\s'(.+?)',\\s'.*?',\\s(\\d+)";
 
        var found = s.match(m);
        if(found != null)
        {
            external.AddToChat("Выпиваю эликсир <b>\\\"" + elikName + "\\\"</b>");
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?use=" + found[2] + "&n=" + found[3];
        }       
    }
}
 
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;
}