1 776

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

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

1 777

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

Кто-то что-то умалчивает...
Говоришь, что квесты берёт, а куска сбора квеста нету(top.frames[3].document.all.getquest.click();) hmm
Есть кусок, чтоб он зашёл в окно квестов, чтоб он сдал задание, плюс попытка организовать выход к окну с группами...
Ретурны там не понять, зачем.
Недостаток в логики состоит в том, что необходимо, чтоб перед походом он только один раз проверял задания, а так он зациклится и будет выходить из задания - входить в задания.

Выход из окна заданий лучше сделать:

top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();

как минимум ради наглядности

А для однократной проверки нужно внести переменную ещё одну будет и её в условия подабавлять + продумать, когда изменит своё состояние на другое, мол пройдена проверка. А возврат к начальному значению можно задать во время начала похода по самому данжу.

Да и прописывать было лучше else if, чем просто if hmm
оно же по-кругу повторяться тогда будет со скоростью, указанной в настройках бота.
Т.е. проверилось одно условие, через, допустим, 4000мс второе условие...

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

Интеллект я вписал только как пример, чтоб показать ветвление приёма.
Т.е. получается, что приём применяется либо если моб подчёркнут, либо если его интеллектслишком низок(т.е. он не маг).
Если ты хочешь по имени бота указывать, то там надо писать || Если имя противника НЕ равно Пленник.
Если несколько ботов хочешь учесть, то надо писать || (имя противника Не равно Пленник && имя противника Не равно ЕщёКто-Нить).

Вот, ещё хочу сказать, что имена у ботов бывают разные (цифры в скобках, например, если в бою два бота одинаковых).
Поэтому проверку лучше ставить так

!top.Battle.oBattle.sEnemyLogin.match(\Пленник\);

С другой стороны, если выйдешь из данжа, а в бою будет человек с ником, содержащим Пленник, то приём его как бота распознает.
Как вариант, не очень красивый, можно прописывать сразу несколько вариантов обычного Не равно:

if(IsUnderlined || (top.Battle.oBattle.sEnemyLogin!="Пленник" && top.Battle.oBattle.sEnemyLogin!="Пленник (1)" && top.Battle.oBattle.sEnemyLogin!="Пленник (2)" && top.Battle.oBattle.sEnemyLogin!="Пленник (3)"))
{
...
}else{
top.Battle.oBattle.arrButtons.refresh.click();
}

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

Совместимость: версия 8.4+
Города: нубские города, Ангелс, Кэп, Сансити, Мун, Сэнд.
Изменения:
1) бот возвращается в ту комнату, откуда ушёл.
Список поддерживаемых комнат: Секретная Комната ,Будуар, ЗВ-ЗВ3, Рыцарский зал, Торговый зал, Башня рыцарей-магов, комнаты третьего этажа(не проверены, но проблем быть не должно).
2) В настройках теперь указывать надо не износ вещи, а разницу между максимальным износом и текущим.
Т.е. если выставить 1, то бот пойдёт чиниться только при 18/19, или 49/50...или 47/48 и т.д.
При 2, соответственно, 18/19 или 17/19, 47/49 или 48/49 и т.п.
3) Чинит только те вещи, которые отвечают условию. Т.е. разница между максимальным износом и текущим меньше или равна указанной в настройках
*NEW*4) не учитывает одетые в карманы предметы(во всяком случае те, картинки которых начинаются на invoke)
Установка:
Перед началом правки делаем резервную копию файла Repair.js (на случай голода во время ядерной зимы).

Новое содержание для файла Repair.js

var repaired = false;
var room_return = '';
 
function RepairMain()
{
 
    var curDurability;
    var mask = /Долговечность\:\s(\d+)\/(\d+)\,/g;
    var temp_objects = external.objects.replace(/invoke[^,]*,/g,'');
    while(curDurability = mask.exec(temp_objects)){
        if(curDurability != null){
            if((curDurability[2]-curDurability[1]) <= parseInt(external.SRepairNumber.Text) && curDurability[1]>0 && curDurability[2]>1)
            {
                external.SetStatusLabel("Ремонт");
                external.repairEnabled = true;
                repaired = false;
                external.healWeared = false;
                external.battleWeared = false;
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?setdown=all&sd4="+sd4+"&"+Math.random();
                return true;
            }
        }
    }
 
 
    if(external.repairEnabled)
    {
        external.SetStatusLabel("Ремонт");
        if(!repaired)
        {
            if(external.room_name == "Ремонтная мастерская")
            {
    repairing();
            }
            else if(external.room_name == "Центральная грибница" && external.SCity.Text=='suncity')
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o3&rnd=" + Math.random(); //suncity
            else if(external.room_name == "Центральная Площадь" && external.SCity.Text=='capitalcity')
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o1&rnd=" + Math.random();
            else if(external.room_name == "Центральный Оазис")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o4&rnd=" + Math.random();
            else if(external.room_name == "Центральная Площадь" || external.room_name == "Центральный утес")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o4&rnd=" + Math.random();
            else if(external.room_name == "Центр падения")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o3&rnd=" + Math.random();
            else if(external.room_name == "Бойцовский Клуб")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o6&rnd=" + Math.random();
            else if(external.room_name == "Секретная Комната"){
                room_return = "Секретная Комната";
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?rnd=" + Math.random()+"&path=1.100.1.6.5";
            }
            else if(external.room_name == "Будуар"){
                room_return = "Будуар";
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
            }
            else if(external.room_name == "Зал воинов"){
                room_return = "Зал воинов";
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
            }
            else if(external.room_name == "Зал воинов 2"){
                room_return = "Зал воинов 2";
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
            }
            else if(external.room_name == "Зал воинов 3"){
                room_return = "Зал воинов 3";
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
            }
            else if(external.room_name == "Этаж 2")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o4&rnd=" + Math.random();
            else if(external.room_name == "Этаж 3")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o4&rnd=" + Math.random();
            else if(external.room_name == "Огненный мир"){
                room_return = "Огненный мир";
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o5&rnd=" + Math.random();
            }
            else if(external.room_name == "Колдовской мир"){
                room_return = "Колдовской мир";
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o5&rnd=" + Math.random();
            }
            else if(external.room_name == "Астральные миры"){
                room_return = "Астральные миры";
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o5&rnd=" + Math.random();
            }
            else if(external.room_name== "Башня рыцарей-магов"){
                room_return = "Башня рыцарей-магов";
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o2&rnd=" + Math.random();
            }
            else if(external.room_name== "Рыцарский зал"){
                if(room_return==='')room_return = "Рыцарский зал";
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
            }
            else if(external.room_name.match(/Торговый\sЗал/) != null){
                room_return = "Торговый Зал";
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o7&rnd=" + Math.random();
            }
            else if (top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Кто\sздесь?/) || top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Бронзо \- чинить/))
                 top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=2&" + Math.random();
            else if(external.room_name == "Ремонтный цех" && external.SCity.Text=='suncity')
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o1&rnd=" + Math.random(); //suncity
            else if(external.room_name == "Мастерская Удивительного Бронзо")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o0&rnd=" + Math.random(); //sandcity
 
            else if(external.room_name == "Ремонтный цех" && external.SCity.Text=="mooncity"){
                    if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/грязно\sругается/i)){
                        top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=2&" + Math.random();
                    }
                    else if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Масса/)){
                        repairing();
                    }
          else
            top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o1&rnd=&" + Math.random();
 
            }
            else if(external.room_name == "Ремонтный цех"){   
                    if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Хочу/)){
                        top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?move_dialog=1&" + Math.random();
                    }
                    else if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Масса/)){
                        repairing();
                    }
                    else
                        top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o0&rnd=&" + Math.random();
 
            }
            else
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?homeworld=" + Math.random();
        }
        else
        {
            if(external.room_name == "Ремонтная мастерская" && external.SCity.Text!="angelscity" && external.SCity.Text!="suncity" && external.SCity.Text!="sandcity")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/repare.pl?path=1.100&rnd=" + Math.random();
            else if(external.room_name == "Центральная грибница")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o0&rnd=" + Math.random(); //suncity
            else if(external.room_name == "Ремонтный цех" && external.SCity.Text=="suncity")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o0&rnd=" + Math.random(); //suncity
            else if(external.room_name == "Ремонтная мастерская" && external.SCity.Text=="suncity")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/repare.pl?rnd=" + Math.random()+"&path=1.100.4"; //suncity
            else if(external.room_name == "Ремонтная мастерская" && external.SCity.Text=="sandcity")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/repare.pl?rnd=" + Math.random()+"&path=1.100.2"; //sandcity
            else if(external.room_name == "Мастерская Удивительного Бронзо")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o1&rnd=" + Math.random(); //sandcity
            else if(external.room_name == "Ремонтный цех")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o1&rnd=" + Math.random();
            else if(external.room_name == "Ремонтная мастерская" && external.SCity.Text=="angelscity")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/repare.pl?rnd=" + Math.random()+"&path=1.100.2";
            else if(external.room_name == "Центральная Площадь" && external.SCity.Text=='capitalcity')
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o0&rnd=" + Math.random();
            else if(external.room_name == "Центральная Площадь")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o6&rnd=" + Math.random();
            else if(external.room_name == "Центральный утес")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o0&rnd=" + Math.random();
            else if(external.room_name == "Центральный Оазис")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o3&rnd=" + Math.random();
            else if(external.room_name == "Центр падения")
                top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o2&rnd=" + Math.random();
            else if(external.room_name == room_return){
                room_return='';
                external.repairEnabled = false;
                repaired = false;
            }
            else if(external.room_name == "Бойцовский Клуб"){
                if(room_return=="Зал воинов")
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o1&rnd=" + Math.random();
                else if(room_return=="Зал воинов 2")
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o2&rnd=" + Math.random();
                else if(room_return=="Зал воинов 3")
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o3&rnd=" + Math.random();
                else if(room_return=="Будуар")
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o0&rnd=" + Math.random();
                else if(room_return=="Секретная Комната")
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?rnd=" + Math.random()+"&path=1.100.1.50";
                else if(room_return==""){
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o2&rnd=" + Math.random();
                    room_return="Зал воинов 2";
                }
                else
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o4&rnd=" + Math.random();
            }
            else if(external.room_name == "Этаж 2"){
                if(room_return=="Рыцарский зал" || room_return=="Башня рыцарей-магов")
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o2&rnd=" + Math.random();
                else if(room_return=="Торговый Зал")
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o1&rnd=" + Math.random();
                else
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o3&rnd=" + Math.random();
            }
            else if(external.room_name == "Рыцарский зал")
                if(room_return=="Башня рыцарей-магов")
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o5&rnd=" + Math.random();
            else if(external.room_name == "Этаж 3"){
                if(room_return=="Огненный мир")
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o1&rnd=" + Math.random();
                else if(room_return=="Астральные миры")
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o3&rnd=" + Math.random();
                else if(room_return=="Колдовской мир")
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/main.pl?path=o2&rnd=" + Math.random();
            }
        }
 
        return true;
    }
 
    return false;
}
 
function repairing(){
    var s = top.frames[external.mainFrameIndex].document.all[0];
    var x=4;
    var item ='';
    var maskA = /Долговечность\:\s(\<FONT\scolor\=\#990000\>)?(\d+)\/(\d+)\</;
    while(s.getElementsByTagName('TR')[x] && s.getElementsByTagName('TR')[x].innerHTML.match(/Ремонт\s1/)){
        var iznos = maskA.exec(s.getElementsByTagName('TR')[x].innerHTML);
        if((iznos[3]-iznos[2]) <= parseInt(external.SRepairNumber.Text)){
            if(external.SRepairType.SelectedIndex == 1)
                item = s.getElementsByTagName('TR')[x].innerHTML.match(/repare.pl\?rp=[A-Za-z_0-9]+?\&amp;full=1\&amp;n=\d+\&amp;tooth=1\&amp;0\.\d+/);
            else
                item = s.getElementsByTagName('TR')[x].innerHTML.match(/repare.pl\?rp=[A-Za-z_0-9]+?\&amp;full=0\.\d+&amp;n=\d+/);
                if(item != '')
                    top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/" + item;
                return;
        }
        x++;
    }
    if(item == '')
        repaired = true;
}

Выражаю благодарность Мунгу за предоставленную базовую информацию для изменения и особенно Петро за помощь в тестировании и поиске багов smile

Выражаю благодарность Петро, за создание маршрута для Suncity

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

Прежде чем вносить правки в файлы всегда делайте резервную копию!

Задача модификации: сделать доступными условия типа "Если у противника > 15 интеллекта, то..." по отношению к статам сила, ловкость, интуиция, выносливость, интеллект.
Также добавлена проверка, поставил ли размен ваш текущий противник.
Совместимость: версия 8.4+
Установка:
Открываем файл Main.js и находим функции "function DoWarriorBattle()" если вы играете за воина и "function DoWizardBattle()" если вы играете магом. Если вы играете с одной копии клиента и магом, и воином и вобще всеми своими персонажами - вносите изменения в обе функции.
Приводим их к виду:

function DoWarriorBattle()
{
 
var k = document.all[0].innerHTML;
var name = top.Battle.oBattle.sEnemyLogin;
if(name==top.Battle.oBattle.sMyLogin){
    top.Battle.oBattle.arrButtons.refresh.click();
    return;
}
name = name.replace(/\(/g,"\\(");
name = name.replace(/\-/g,"\\-");
name = name.replace(/\)/g,"\\)");
stati = k.match(name+"\<\/B\>\<BR\>Сила\: ([\-]{0,1}[0-9]+)\<BR\>Ловкость\: ([\-]{0,1}[0-9]+)\<BR\>Интуиция: ([\-]{0,1}[0-9]+)\<BR\>Выносливость: ([\-]{0,1}[0-9]+)\<BR\>(?:.){0,11}([\-]{0,1}[0-9]{0,3})");
Sila = stati[1];
Lovka = stati[2];
Inta = stati[3];
Vinos = stati[4];
if(stati[5]!="")Intell = stati[5];
else Intell = 0;
var checked = 0;
for(x=0;x<top.Battle.oBattle.oGroupsLayer.innerHTML.split(", ").length;x++)
{
var currEnemyLayer = top.Battle.oBattle.oGroupsLayer.innerHTML.split(", ")[x];
if(currEnemyLayer.match("/underline\".{1,2} \?\>"+name+"\</")){
IsUnderlined = true;
checked = 1;
}
if(checked == 0)
IsUnderlined = false;
}
 
var team1 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[0].sList;
var team2 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[1].sList;
var count_team1=top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[0].sList.split(", ").length;
var count_team2=top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[1].sList.split(", ").length;
 
if(team1.indexOf(top.Battle.oBattle.sMyLogin)>=0){
EnemiesCount=count_team2;
SoratnikiCount=count_team1;
}
if(team2.indexOf(top.Battle.oBattle.sMyLogin)>=0){
EnemiesCount=count_team1;
SoratnikiCount=count_team2;
}
 
DoWarriorPriem(1);
 
DoHit();
}
function DoWizardBattle()
{
 
var k = document.all[0].innerHTML;
var name = top.Battle.oBattle.sEnemyLogin;
if(name==top.Battle.oBattle.sMyLogin){
    top.Battle.oBattle.arrButtons.refresh.click();
    return;
}
name = name.replace(/\(/g,"\\(");
name = name.replace(/\-/g,"\\-");
name = name.replace(/\)/g,"\\)");
stati = k.match(name+"\<\/B\>\<BR\>Сила\: ([\-]{0,1}[0-9]+)\<BR\>Ловкость\: ([\-]{0,1}[0-9]+)\<BR\>Интуиция: ([\-]{0,1}[0-9]+)\<BR\>Выносливость: ([\-]{0,1}[0-9]+)\<BR\>(?:.){0,11}([\-]{0,1}[0-9]{0,3})");
Sila = stati[1];
Lovka = stati[2];
Inta = stati[3];
Vinos = stati[4];
if(stati[5]!="")Intell = stati[5];
else Intell = 0;
 
var checked = 0;
for(x=0;x<top.Battle.oBattle.oGroupsLayer.innerHTML.split(", ").length;x++)
{
var currEnemyLayer = top.Battle.oBattle.oGroupsLayer.innerHTML.split(", ")[x];
if(currEnemyLayer.match("/underline\".{1,2} \?\>"+name+"\</")){
IsUnderlined = true;
checked = 1;
}
if(checked == 0)
IsUnderlined = false;
}
 
var team1 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[0].sList;
var team2 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[1].sList;
var count_team1=top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[0].sList.split(", ").length;
var count_team2=top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[1].sList.split(", ").length;
 
if(team1.indexOf(top.Battle.oBattle.sMyLogin)>=0){
EnemiesCount=count_team2;
SoratnikiCount=count_team1;
}
if(team2.indexOf(top.Battle.oBattle.sMyLogin)>=0){
EnemiesCount=count_team1;
SoratnikiCount=count_team2;
}
 
DoWizardPriem(1);
}

Учитывая, что у меня под рукой не оказалось оригинального файла Main.js, то тут приведён тот, в котором работают проверки колличества противников/соратников. По сути, вам от этого ни тепло, ни холодно.

Обозначения:
EnemiesCount - количество противников
SoratnikiCount - количество соратников
Sila - сила противника
Lovka - ловкость противника
Inta - интуиция противника
Vinos - выносливость противника
Intell - интеллект противника
IsUnderlined - подчеркнут ли ваш враг(выставил ли размен)

Да, я знаю, что хреново придумываю названия для переменных, но меня это не обламывает.

Пример использования в приёме:

if(Intell > 1)
_name = "wis_earth_flower";

Проверка работоспособности:
В новый приём вписать

external.AddToChat("Персонаж: "+top.Battle.oBattle.sEnemyLogin+";"+"Сила: "+Sila+";"+"Ловкость: "+Lovka+";"+"Интуиция: "+Inta+";"+"Выносливость: "+Vinos+";"+"Интеллект: "+Intell+";");

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


Отдельная благодарность DrsN'уsmile


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

if(IsUnderlined  || Intel <=10){
...
}

Необходимо обновлять фрейм до тех пор, пока размен не выставится:

if(IsUnderlined || Intel <=10){
...
}
else{
top.Battle.oBattle.arrButtons.refresh.click();
}

1 783

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

Ну...с этой стороны я на проблему как-то и не посмотрел даже...мне просто статы были интереснее smile
постараюсь скоро сделать

1 784

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

Есть два варианта:
1) тупо смотрим, какая шмотка на враге: щит, посох и т.п. и через это определяем, кто перед нами. Просто, как кирпич. И надежно.
2) выдираем статы противника и используем их в приёмах типа: Если у противника интеллект выше 5, то применям какую-нить фигню против мага. По статам можно кого угодно вычислить - было бы время на придумывание приёмов.

Вам какой нужен?

1 785

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

Кхм...
я помню, про что ты замечание делал hmm
И уж никак не ожидал упрека о том, что ману мы не у себя проверям.... neutral
Думал делать вставку о том, что "бот встретил неопределенную переменную и застопорился. про свойства объектов я не знаю, но может оказаться тоже самое". Может хоть с ней бы было понятнее, к чему я вёл.
Однако, не важно. Сейчас читаю про объекты на яве и тут какрас написано, что при обращении к несуществующему свойству не вызовет ошибки.

Однако, проведённый в каналке эксперимент, мне покачто говорит о том, что такой метод проверки верным не является.
Мана у пауков 705 стабильно. У других мобов ещё не знаю. Можете пару боёв провести, если хотите.

external.AddToChat(top.Battle.oBattle.oEnemySlot.nMagic);

в приём новый это вписать - в чате будет писаться мана персонажей.
по завершении боя посмотрите и скажете, какие результаты...мне самому интересно даже)

1 786

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

Вот у меня мелькала эта мысль, но без проверки я не решился её писать smile
в прошлый раз не учёл, что если ты воин и пропишешь в приёмах tkMana, он просто не будет драться...совсем smile
Гипп вовремя поправил тогда smile
Если работает - тогда в чём вобще вопрос у тебя? логическое ИЛИ пишется || хп противника на 1-й странице...

Update:
проверил в каналке на пауках smile
если верить этому top.Battle.oBattle.oEnemySlot.nMagic, то у них 705 маны smile

1 787

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

У противника на лбу не написано, что он - маг smile
Такчто под это приёмы ещё никто не писал....хотя это вполне реально... smile

пойду поэксперементирую слегка на эту тему smile

Ленивый.
Живу на MediaPlayer Classic.:/

1 789

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

Поддерживаю мнение, что дистрибутив должен быть оригинальным.
Лучше даже лицензионным + кряк активации.

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

1 790

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

Там не true/false.
Там реальный ник того, кто проводником будет.
Алгоритм такой: если твой текущий ник совпадает с указанным в файле - ты лидер и создаешь заявку. Если ник с твоим не совпадает, то прицеп по этому нику ищет созданную группу.

1 791

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

City
attackmobs

выдрал эти из kanal.txt,
Проверять не буду...Вся фишка переписки под 7-ю версию заключалась, чтоб найти что менять и на что менять...а ты пишешь "разберусь" и просишь сделать всю работу....жестоко hmm

1 792

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

Нет, нету... hmm
и я, вроде как, не планирую делать под 7.1.
Хотя там вся переделка заключается только в замене "external.SDungeonAttackMobs.Checked" и "external.SCity.Text " на те параметры, что в 7-й версии используются...

1 793

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

но ему же 7.1 надо smile
ему самое то smile

1 794

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

Я уже думал над вопросом синхронизации smile
если есть идеи - поделись smile

1 795

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

Anton2009 пишет:

А есть такая возможность сделать, чтоб проводник останавливался в бою если у него менее 10% хп? ну допустим если прицеп влез в бой и прицеп может добить а вот проводник если сделает ещё размен то сольёться

Неее....это уже не плагина задача smile
это задача настройки приёмов smile
Т.е. там условия к каждому приёму добавляется, что выполнять его: Если ХП 10% ИЛИ Если Количество членов в команде >1
Но тут надо всё взвешивать, т.к. проводник с 10% может суметь добить, а прицеп и с 50% сольётся smile

net framework ставил хоть на свежую ось?

Название: Плагин логирования дропа в подземельях
Совместимость: 8.4+
Версия: 1.2
Изменения:
1)Добавлена возможность логировать событие "Вы получили ..."
2)Налажена совместимость со всеми остальными плагинами.
3)Добавлено условие проверки, находитесь ли Вы в бою
Установка:
1)Создаем папку Logs в корневой дирректории бота
2)В папке Plugins создается файл DungeLog.js с содержанием(для 7.1 в данном скрипте в 4 местах заменить "Logs/" на "../Logs/"):

function DungeLog(enabled)
{
    if(enabled)
    {
        PluginsOnLoad["DungeLog"] = "LogHandler";
 
    }
    else
    {
        PluginsOnLoad["DungeLog"] = "";
    }
}
 
function LogHandler(){
if (!external.inBattle)
{
var itemlog1 = top.frames[external.mainFrameIndex].document.all[0].outerHTML.match(/Вы подняли \'(.+)\'/);
var itemlog2 = top.frames[external.mainFrameIndex].document.all[0].outerHTML.match(/Вы получили \'(.+)\'/);
if(itemlog1){SaveLog(itemlog1[1]);}
if(itemlog2){SaveLog2(itemlog2[1]);}
}
}
 
function SaveLog(Mes){
    var now1 = new Date();
    var localtime1 = now1.toString();
    var resultfile = external.LoadFile("Logs/"+mylogin+"_DungeLog.txt");
    resultfile=resultfile+localtime1+"\n Вы подняли "+Mes+"\r\n\r\n";
    external.SaveFile("Logs/"+mylogin+"_DungeLog.txt",resultfile);
    index++;
}
function SaveLog2(Mes){
    var now1 = new Date();
    var localtime1 = now1.toString();
    var resultfile = external.LoadFile("Logs/"+mylogin+"_DungeLog.txt");
    resultfile=resultfile+localtime1+"\n Вы получили "+Mes+"\r\n\r\n";
    external.SaveFile("Logs/"+mylogin+"_DungeLog.txt",resultfile);
    index++;
}

1 798

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

Выложил 21-го числа...
уже 1-е ноября...

Неужели никто не хочет потестить?
Это же так просто sad

А как все говорили, что полезная вещь.....нужно писать... lol
Эх вы smile

1 799

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

Я бы за это всего бота удалил smile
И наслаждался бы каждым мгновением, пока человек с дикой натугой пытается настроить приёмы, плагины и прочее smile

Дари настоящую и не слишком страшную smile

1 800

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

if(top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[0].sList.split(", ").length >= 2)
{
if(typeof(top.Battle.oBattle.oMySlot.arrEffects["Тут надо узнать идентификатор эффекта, на тебе висящий в бою от защиты"]) == "object")
{
_name = "Боевой скилл Или вставить тут свой обычный прием с условием";
}
else{top.Battle.oBattle.arrButtons.refresh.click();}
}
else
{
if(top.Battle.oBattle.arrMethods["wis_earth_summon"].oMethod.bEnable)_name="wis_earth_summon";
else {
_name = "Тот же Боевой скилл, что и выше";
}
}

Идентификатор эффекта защиты можешь у DrsN'a спросить smile
может скажет smile