1 976

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

rodzar тоже долго бился с проблемой работы бота...а оказалось всё банально - неверно написанный в настройках город.
Если у тебя версия 7.1, так может у тебя тоже город прописан криво? hmm

1 977

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

()
вот эту параллельно с магом воздуха читай.

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

Замена двух функций файла Main.js( не устаю напоминать, что перед внесением любых изменений необходимо сделать копию исходного файла на случай корявости работы моего варианта. Клиент после внесения изменений обязательно перезапустить.)

это старая версия. новая чуть ниже
function DoWarriorBattle()
{       
var team1 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[0].sList;
var team2 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[1].sList;
var count_team1=0;
var pos_team1 = team1.indexOf(", ");
while (pos_team1 != -1){
            count_team1++;
            pos_team1 = team1.indexOf(", ",pos_team1+1);
                                }
count_team1++;
var count_team2=0;
var pos_team2 = team2.indexOf(", ");
while (pos_team2 != -1){
            count_team2++;
            pos_team2 = team2.indexOf(", ",pos_team2+1);
                                }
count_team2++;
 
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 team1 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[0].sList;
var team2 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[1].sList;
var count_team1=0;
var pos_team1 = team1.indexOf(", ");
while (pos_team1 != -1){
            count_team1++;
            pos_team1 = team1.indexOf(", ",pos_team1+1);
                                }
count_team1++;
var count_team2=0;
var pos_team2 = team2.indexOf(", ");
while (pos_team2 != -1){
            count_team2++;
            pos_team2 = team2.indexOf(", ",pos_team2+1);
                                }
count_team2++;
 
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);
}

Результат: можно в условиях писать EnemiesCount для получение колличества противников и SoratnikiCount для получение колличества человек в вашей команде.
Проверял в основном в данже. 4 раза в невидимых хаотах. Всех руками пересчитывал - всё точно, как в аптеке smile
Проверял, конечно же, через alert'ы.

Самое весёлое в этом было: скрипт этот изначально заганял в поле для условий приёмов, чтоб по 15 раз за бой не перезапускать клиент.

P.S.
может не так красиво, как в оригинале бота было....зато просто, как кирпич. smile

P.P.S.
Администратор опубликовал решение это проблемы и строка определения количества людей в командах у него была короче и проще...Но вот в приёмы такой длинны строку вписывать не очень удобно...а если вставить это в файл - можно просто в приёмы вставлять EnemiesCount для получение колличества противников и SoratnikiCount для получения количества соратников. Сами выбирайте, как вам жить smile
на основе этого решения zergnm я сократил эту вставку для файла:

function DoWarriorBattle()
{     
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")[0].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 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")[0].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);
}

1 979

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

А я и говорю

Ладно бы ещё вопрос стоял: "Не мог бы ты по доброте душевной меня провести?".
Ито далеко не факт, что помогли бы. Ибо эта услуга екр обычно стоит

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

1 980

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

Мне - впадлу smile
И искренне сомниваюсь, что кто-либо добровольно даст тебе своего любого персонажа.

Ладно бы ещё вопрос стоял: "Не мог бы ты по доброте душевной меня провести?".
Ито далеко не факт, что помогли бы. Ибо эта услуга екр обычно стоит smile
А тут прям такой запрос с наездом, что даже смеяться больно smile

1 981

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

exe пишет:

Mojesh dati na paru dnei adnavo?

lol
что значит дать?! о.О

1 982

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

()
пункт Как узнать идентификатор для нужного приема?

Самое примечательное, что это прикрепленная тема в этом же разделе форума hmm

1 983

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

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

1 984

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

нет.

Народ, мне кажется или у него названия неверно написаны в первом посте.
Например: Испепеление 10  -  wis_fire_incenerate08
разве не wis_fire_incenerate10
?

По идее названия будут:
Маг.Барьер 10   -  wis_gray_manabarrier10
Призрачный Топор  -  spirit_12_prot_100
Испепеление 10  -  wis_fire_incenerate10
Знак Земли  -  wis_earth_sign
Вспышка 10  -  wis_fire_burst10

1 985

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

()
Ну вот, например, для воды.
Умения там подобные твоим, такчто в некоторых случаях просто надо название приема поменять.
Не ленись - разбирайся smile

проксю не прописывал?

1 987

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

Честно говоря в данже у меня в неустановленном месте застопорился только один раз за....эм....3 недели активного(практически безвылазного) пользования(в первой попытке пройти данж). На второй-третий-четвертый нигде не застревал.
А потом я свои маршруты стал сам составлять(имея карту и набор значений m1,m5,m7,rl,rr и т.п это заняло не больше 13минут)....ну там чтоб не дохнуть в каких-либо особо-неудобных точках скопления мобов smile

1 988

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

repaks пишет:

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

Согласен, интерфейс в ней прекрасный был smile
По мне так правая панель с чекбоксами была удобнее, чем тупо выпадающее меню.
Ещё модули стало неудобно редактировать в 8-й версии.
В 7-й галочку снял, скрипт подкорректировал, галочку вернул - всё.
А в 8-й без полного перезапуска клиента не выйдет такое hmm
Пока отлаживал модуль данжей для похода партией, устал перезапускать hmm

fromfbi пишет:

7.1 жалкое подобие какое то наверно...и читая функционал понимаешь это...ну на нет и суда нет...

Функционал читая)))))))))
Расклад такой: есть руки и спинной мозг программера(а каким ещё мозгом программер на яваскрипте писать может?! ) - бери и добавляй в 7.1 всё, что тебе нужно бесплатно.
Не хочешь этим заниматься - плати 10евро и получай тот же 7.1 с измененным интерфейсом, улучшенным алгоритмом данжа, условиями на приёмы и возможностью принимать заявки, а не только подавать(остальные изменения ты всеравно не заметишь).

1 989

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

И никогда.

это не шутка. тут хороший метод против взлома используется smile


Честно говоря мне 7-ая больше нравилась...8-ая, для меня, выигрывает только за счет условий на умения.

Если не сработает это - сделаю по-другому.
Сейчас думаю над такой интересной вещью, чтобы была возможность создавать отдельно для каждого персонажа файл настроек. И этот файл сам подгружался в Dungeon.js при запуске клиента с данным персонажем...
Должно получиться красиво в общем smile
вот только далеко не факт, что получится hmm

-------------------------------------------------------------------------------

Долго-долго искал, как эту идею реализовать smile
Таки нашел способ...а не было бы на компе 7-й версии установленной - так и не нашёл бы smile
Спасибо автору бота за файл Readme.txt в папке plugins в 7-й версии smile

Короче, что я имею на данный момент(Это не проверенная версия...ну т.е. для одного, конечно проверено всё....все параметры из дополнительного файла подгружаются...но двоих с одной копии бота я не пробовал запустить. По идее должно работать smile буду благодарен тому, кто проверит smile ):

var s = "";
var dungName = "";
var dungeonCoords = "";
var dungeonDirection = 0;
var dungeonPosition = "";
var dungeonLastPosition = "";
var breakAction = false;
var _id = "";
var _object = null;
 
var texting=external.LoadFile("Modules\\DungeonUsers\\"+mylogin+".txt"); //Обязательно полный путь(пробовал относительный - не работало)
eval(texting);  // эта функция выполняет строку texting как JavaScript.
 
//alert(texting);
// рекомендую в первый раз раскомментировать этот алерт. При запуске клиента и входе в игру выскочит ошибка с содержанием вышеподключаемого файла...т.е. можно проверить, правильно ли прописан путь
 
function DungeonMain()
{
    s = top.frames[3].document.all[0].innerHTML;
 
    if(IsMapVisible())
    {
        dungName = top.frames[3].location.href.match(/combats.com\/(.+?)\?/)[1];
 
        var date = new Date();
        var currentTime = parseInt(String(date.getTime()).substring(0,10));
        if((external.SDungeonExitTime.Text != "0") && ((currentTime - dungeonStartTime)/60 >= parseInt(external.SDungeonExitTime.Text)))
        {
            top.frames[3].location = top.frames[3].document.links[0].href;
            return;
        }
 
        external.SetStatusLabel("Поздемелье");
 
        dungeonCoords = s.match(/arrMap = (\[\[.+?\]\])/)[1];
        dungeonDirection = top.frames[3].nMyDirection;
        dungeonPosition = external.MD5Hash(dungeonCoords + "," + dungeonDirection);
        if(dungeonMovementCount[dungeonPosition] == undefined)
            dungeonMovementCount[dungeonPosition] = 0;
 
        if(dungeonPosition != dungeonLastPosition)
        {
            if(dungeonMovementCount[dungeonLastPosition] != undefined)
                dungeonMovementCount[dungeonLastPosition]++;
            else
                dungeonMovementCount[dungeonLastPosition] = 1;
 
            dungeonLastPosition = dungeonPosition;
        }
 
        if(external.SDungeonPickUpObjects.Checked)
        {
            var drop = s.match(/\?get=(\d+)/g);
            if(drop != null)
            {
                if(s.indexOf("слишком много") > 0 || s.indexOf("У вас уже есть один такой предмет") > 0)
                    usedObjects[_id] = true;
 
                for(i = 0; i < drop.length; i++)
                {
                    _id = drop[i].match(/\d+/);
                    if(!usedObjects[_id])
                    {
                        top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + drop[i];
                        return;
                    }
                }
            }
        }
 
        if(s.indexOf("'rollconfirm")>0)
        {
            var drop = s.match(/'rollconfirm\(.+?,.+?,\"\d+\"\)/g);
            if(drop != null)
            {
                if(s.indexOf("слишком много") > 0 || s.indexOf("У вас уже есть один такой предмет") > 0 || (s.indexOf("Вы уже сделали свой бросок") > 0 && !external.SDungeonPickUpObjects.Checked))
                    usedObjects[_id] = true;
 
                for(i = 0; i < drop.length; i++)
                {
                    _id = drop[i].match(/\"(\d+)\"/)[1];
                    if(!usedObjects[_id])
                    {
                        top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?get=" + _id + (external.SDungeonPickUpObjects.Checked ? "&tmpname423=Да": "&pass=Нет");
                        return;
                    }
                }
            }
        }
 
        breakAction = false;
 
        eval(external.DungeonGetCodeForLocation(dungeonPosition));
    }
    else
    {
        if(s.indexOf("Создать группу") > 0)
        {
            external.SetStatusLabel("Создаю заявку");
            PutKanalZayavka();
        }
        else if(s.indexOf("Начать") > 0)
        {
            external.SetStatusLabel("Начинаю поход");
               StartKanalZayavka();
           }
           else
           {
               external.SetStatusLabel("Не видно карты, не в подземелье, или еще не истекла задержка");
               top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl";
        }
    }
}
 
function randomString()
{
    var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
    var string_length = 8;
    var randomstring = '';
    for (var i=0; i<string_length; i++)
    {
        var rnum = Math.floor(Math.random() * chars.length);
        randomstring += chars.substring(rnum,rnum+1);
    }
    return randomstring;
}
 
function PutKanalZayavka()
    {
        if(liderstvo==false && groupkanal==true){
         //alert("Вы собираетесь искать существующую заявку с лидером"+provodnik);
                    xlength=top.frames[3].document.forms.length;
          //alert("Если в этом окошке выведен этот текст и число, близкое к числу заявок на странице - это хорошо. Число заявок: "+xlength);
                    for(i=0;i<xlength;i++)
                    {
                        var z = top.frames[3].document.forms[ i ].innerHTML;
              //alert("Происходит проверка заявки номер: "+i+".");
                        if(z.indexOf("fl(\""+provodnik+"\"")>0){
             //alert("Заявка найденна. Пытаюсь ввести пароль");
                        top.frames[3].document.forms[ i ].pass.value=grouppass;
              //alert("Ввел пароль - пытаюсь подтвердить заявку");
                        top.frames[3].document.forms[ i ].submit();
                        }
                    }
 
                }else if(groupkanal==false || liderstvo==true){
            top.frames[3].document.all.mut_noblock.checked = false;
            top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = grouppass;
            top.frames[3].document.all.open.click();}
    }
 
 
 
function StartKanalZayavka()
{
     if(liderstvo==true){
                xlength=top.frames[3].document.forms.length;
                for(i=0;i<xlength;i++)
                {
                    var z = top.frames[3].document.forms[ i ].innerHTML;
                    if(z.indexOf("fl(\""+provodnik+"\"")>0){
                        var count=0;
                        var pos = z.indexOf("drwfl");
                        while (pos != -1){
                                count++;
                                pos = z.indexOf("drwfl",pos+1);
                                }
                    }
                }
                if(count==partija){
       usedObjects = [];
       dungeonMovementCount = [];
      dungeonCoords = "";
        dungeonDirection = 0;
                var date = new Date();
             dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
     // alert("Ща запущусь");                   
    top.frames[3].document.all.start.click();
                        }else{top.frames[3].window.location.reload();}
            }
        if(groupkanal==false){
        usedObjects = [];
          dungeonMovementCount = [];
         dungeonCoords = "";
        dungeonDirection = 0;
                var date = new Date();
             dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
      //alert("Не включен групповой режим");
                top.frames[3].document.all.start.click();
        }   
}
 
function IsMapVisible()
{
    if(s.match(/arrMap =/) != null)
        return true;
    else
        return false;
}
 
function IsWallPresent()
{
    var elements = top.frames[3].document.getElementsByTagName("*");   
    for(var i = 0;i < elements.length;i++)       
         if(elements[i].className == "LeftFront0_0")         
            return true;   
    return false;
}
 
function UseObjects()
{
    if(!IsWallPresent())
    {
        try
        {
            if(top.frames[3].arrLayers[1][0]["l"].arrObjects[0])
            {
                if(s.indexOf("получили")>0 || s.indexOf("У вас уже есть один такой предмет")>0 || s.indexOf("Попахивает")>0 || s.indexOf("Ничего не произошло")>0 || s.indexOf("нет необходимых ингредиентов")>0)
                    usedObjects["\"" + _object.id + "\""] = true;
 
                for(var i=0; i<top.frames[3].arrLayers[1][0]["l"].arrObjects.length; i++)
                {
                    _object = top.frames[3].arrLayers[1][0]["l"].arrObjects[i];
                    if(!usedObjects["\"" + _object.id + "\""])
                    {
                        external.SetStatusLabel("Копаюсь в хламе...");
                        top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?useobj=" + _object.id;
                        breakAction = true;
                        return;
                    }
                }
            }
        }
        catch(err)
        {
 
        }
    }
}
 
function AttackMobs()
{
    if(!IsWallPresent())
    {
        try
        {
            if(top.frames[3].arrLayers[1][0]["l"].arrUnits[0])
            {
                if(top.frames[3].arrLayers[1][0]["l"].arrUnits[0].action != "")
                {
                    if(tkHP >= (maxHP*koeff))
                    {
                        external.SetStatusLabel("Нападаю на мобов");
                        if(external.SDungeonAttackMobs.Checked)
                            top.frames[3].location = "http://" + external.SCity.Text +".combats.com/" + dungName + "?attack=1&use=" + top.frames[3].arrLayers[1][0]["l"].arrUnits[0].id;
                    }
                    breakAction = true;
                    return;
                }
            }
        }
        catch(err)
        {
 
        }
    }
}
 
function Exit()
{
    if(breakAction)
        return;
 
    top.frames[3].location = top.frames[3].document.links[0].href;
}
 
function Walk(step)
{
    if(breakAction)
        return;
 
    if(step == "rl" || step == "rr")
        top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?rnd=" + Math.random() + "&path=" + step;
    else
    {
        if(top.frames[3].is_accessible)
            top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?rnd=" + Math.random() + "&path=" + step;
    }
}

В папке Modules создать надо папку DungeonUsers. В ней создавать для всех персонажей файлы ТочныйНикПерсонажа.txt с содержанием

var koeff = 1.0;                      //проценты ХП, при которых вы будете нападать на мобов(1.0 = 100%, 0.75 = 75% и т.д.)
    var groupkanal = true;            //Если идёте один - false
    if(groupkanal==true){
        var provodnik = "";     //Кто является проводником/лидером. Это обязательно надо указать и для самого проводника, и для прицепа.
         if(provodnik==mylogin){var liderstvo = true;}else{var liderstvo = false;}
      var grouppass = "321456";            //Пароль группы
        var partija = "2";                //Количество людей в партии, включая вас.
    }

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

Хм. Нет придела совершенству!!! smile
Для Гиппо персонально частично непроверенный вариант:)

if(groupkanal==true){
    ////////////////////        Групповой поход           ////////////////////
    //Если вы идете один, просто выставьте groupkanal = false и параметры ниже можно
    //не изменять.
    var provodnik = "";            //Кто является проводником/лидером.
   if(provodnik==mylogin){var liderstvo = true;}else{var liderstvo = false;}
    var grouppass = "321456";            //Пароль группы
    var partija = "2";                //Количество людей в партии, включая вас.
    }

1 992

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

Есть......но не у всех smile

Всё.
С МунГ'ом разобрались.
Всё работает.
Конечный файл Dungeon.js выглядит вот так для версии 8.1.

var s = "";
var dungName = "";
var dungeonCoords = "";
var dungeonDirection = 0;
var dungeonPosition = "";
var dungeonLastPosition = "";
var breakAction = false;
var _id = "";
var _object = null;
var groupkanal = false;            //Если идёте один - false
    if(groupkanal==true){
    ////////////////////        Групповой поход           ////////////////////
    //Если вы идете один, просто выставьте groupkanal = false и параметры ниже можно
    //не изменять.
    var liderstvo = true;                //true - вы лидер группы. false - не вы лидер.           
    var provodnik = "";            //Кто является проводником/лидером. Это обязательно надо указать и для самого проводника, и для прицепа.
    var grouppass = "321456";            //Пароль группы
    var partija = "2";                //Количество людей в партии, включая вас.
    }
 
function DungeonMain()
{
    s = top.frames[3].document.all[0].innerHTML;
 
    if(IsMapVisible())
    {
        dungName = top.frames[3].location.href.match(/combats.com\/(.+?)\?/)[1];
 
        var date = new Date();
        var currentTime = parseInt(String(date.getTime()).substring(0,10));
        if((external.SDungeonExitTime.Text != "0") && ((currentTime - dungeonStartTime)/60 >= parseInt(external.SDungeonExitTime.Text)))
        {
            top.frames[3].location = top.frames[3].document.links[0].href;
            return;
        }
 
        external.SetStatusLabel("Поздемелье");
 
        dungeonCoords = s.match(/arrMap = (\[\[.+?\]\])/)[1];
        dungeonDirection = top.frames[3].nMyDirection;
        dungeonPosition = external.MD5Hash(dungeonCoords + "," + dungeonDirection);
        if(dungeonMovementCount[dungeonPosition] == undefined)
            dungeonMovementCount[dungeonPosition] = 0;
 
        if(dungeonPosition != dungeonLastPosition)
        {
            if(dungeonMovementCount[dungeonLastPosition] != undefined)
                dungeonMovementCount[dungeonLastPosition]++;
            else
                dungeonMovementCount[dungeonLastPosition] = 1;
 
            dungeonLastPosition = dungeonPosition;
        }
 
        if(external.SDungeonPickUpObjects.Checked)
        {
            var drop = s.match(/\?get=(\d+)/g);
            if(drop != null)
            {
                if(s.indexOf("слишком много") > 0 || s.indexOf("У вас уже есть один такой предмет") > 0)
                    usedObjects[_id] = true;
 
                for(i = 0; i < drop.length; i++)
                {
                    _id = drop[i].match(/\d+/);
                    if(!usedObjects[_id])
                    {
                        top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + drop[i];
                        return;
                    }
                }
            }
        }
 
        if(s.indexOf("'rollconfirm")>0)
        {
            var drop = s.match(/'rollconfirm\(.+?,.+?,\"\d+\"\)/g);
            if(drop != null)
            {
                if(s.indexOf("слишком много") > 0 || s.indexOf("У вас уже есть один такой предмет") > 0 || (s.indexOf("Вы уже сделали свой бросок") > 0 && !external.SDungeonPickUpObjects.Checked))
                    usedObjects[_id] = true;
 
                for(i = 0; i < drop.length; i++)
                {
                    _id = drop[i].match(/\"(\d+)\"/)[1];
                    if(!usedObjects[_id])
                    {
                        top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?get=" + _id + (external.SDungeonPickUpObjects.Checked ? "&tmpname423=Да": "&pass=Нет");
                        return;
                    }
                }
            }
        }
 
        breakAction = false;
 
        eval(external.DungeonGetCodeForLocation(dungeonPosition));
    }
    else
    {
        if(s.indexOf("Создать группу") > 0)
        {
            external.SetStatusLabel("Создаю заявку");
            PutKanalZayavka();
        }
        else if(s.indexOf("Начать") > 0)
        {
            external.SetStatusLabel("Начинаю поход");
               StartKanalZayavka();
           }
           else
           {
               external.SetStatusLabel("Не видно карты, не в подземелье, или еще не истекла задержка");
               top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl";
        }
    }
}
 
function randomString()
{
    var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
    var string_length = 8;
    var randomstring = '';
    for (var i=0; i<string_length; i++)
    {
        var rnum = Math.floor(Math.random() * chars.length);
        randomstring += chars.substring(rnum,rnum+1);
    }
    return randomstring;
}
 
function PutKanalZayavka()
    {
        if(liderstvo==false && groupkanal==true){
         //alert("Вы собираетесь искать существующую заявку с лидером"+provodnik);
                    xlength=top.frames[3].document.forms.length;
          //alert("Если в этом окошке выведен этот текст и число, близкое к числу заявок на странице - это хорошо. Число заявок: "+xlength);
                    for(i=0;i<xlength;i++)
                    {
                        var z = top.frames[3].document.forms[ i ].innerHTML;
              //alert("Происходит проверка заявки номер: "+i+".");
                        if(z.indexOf("fl(\""+provodnik+"\"")>0){
             //alert("Заявка найденна. Пытаюсь ввести пароль");
                        top.frames[3].document.forms[ i ].pass.value=grouppass;
              //alert("Ввел пароль - пытаюсь подтвердить заявку");
                        top.frames[3].document.forms[ i ].submit();
                        }
                    }
 
                }else if(groupkanal==false || liderstvo==true){
            top.frames[3].document.all.mut_noblock.checked = false;
            top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = grouppass;
            top.frames[3].document.all.open.click();}
    }
 
 
 
function StartKanalZayavka()
{
     if(liderstvo==true){
                xlength=top.frames[3].document.forms.length;
                for(i=0;i<xlength;i++)
                {
                    var z = top.frames[3].document.forms[ i ].innerHTML;
                    if(z.indexOf("fl(\""+provodnik+"\"")>0){
                        var count=0;
                        var pos = z.indexOf("drwfl");
                        while (pos != -1){
                                count++;
                                pos = z.indexOf("drwfl",pos+1);
                                }
                    }
                }
                if(count==partija){
       usedObjects = [];
       dungeonMovementCount = [];
      dungeonCoords = "";
        dungeonDirection = 0;
                var date = new Date();
             dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
     // alert("Ща запущусь");                   
    top.frames[3].document.all.start.click();
                        }else{top.frames[3].window.location.reload();}
            }
        if(groupkanal==false){
        usedObjects = [];
          dungeonMovementCount = [];
         dungeonCoords = "";
        dungeonDirection = 0;
                var date = new Date();
             dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
      //alert("Не включен групповой режим");
                top.frames[3].document.all.start.click();
        }   
}
 
function IsMapVisible()
{
    if(s.match(/arrMap =/) != null)
        return true;
    else
        return false;
}
 
function IsWallPresent()
{
    var elements = top.frames[3].document.getElementsByTagName("*");   
    for(var i = 0;i < elements.length;i++)       
         if(elements[i].className == "LeftFront0_0")         
            return true;   
    return false;
}
 
function UseObjects()
{
    if(!IsWallPresent())
    {
        try
        {
            if(top.frames[3].arrLayers[1][0]["l"].arrObjects[0])
            {
                if(s.indexOf("получили")>0 || s.indexOf("У вас уже есть один такой предмет")>0 || s.indexOf("Попахивает")>0 || s.indexOf("Ничего не произошло")>0 || s.indexOf("нет необходимых ингредиентов")>0)
                    usedObjects["\"" + _object.id + "\""] = true;
 
                for(var i=0; i<top.frames[3].arrLayers[1][0]["l"].arrObjects.length; i++)
                {
                    _object = top.frames[3].arrLayers[1][0]["l"].arrObjects[i];
                    if(!usedObjects["\"" + _object.id + "\""])
                    {
                        external.SetStatusLabel("Копаюсь в хламе...");
                        top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?useobj=" + _object.id;
                        breakAction = true;
                        return;
                    }
                }
            }
        }
        catch(err)
        {
 
        }
    }
}
 
function AttackMobs()
{
    if(!IsWallPresent())
    {
        try
        {
            if(top.frames[3].arrLayers[1][0]["l"].arrUnits[0])
            {
                if(top.frames[3].arrLayers[1][0]["l"].arrUnits[0].action != "")
                {
                    if(tkHP >= maxHP)
                    {
                        external.SetStatusLabel("Нападаю на мобов");
                        if(external.SDungeonAttackMobs.Checked)
                            top.frames[3].location = "http://" + external.SCity.Text +".combats.com/" + dungName + "?attack=1&use=" + top.frames[3].arrLayers[1][0]["l"].arrUnits[0].id;
                    }
                    breakAction = true;
                    return;
                }
            }
        }
        catch(err)
        {
 
        }
    }
}
 
function Exit()
{
    if(breakAction)
        return;
 
    top.frames[3].location = top.frames[3].document.links[0].href;
}
 
function Walk(step)
{
    if(breakAction)
        return;
 
    if(step == "rl" || step == "rr")
        top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?rnd=" + Math.random() + "&path=" + step;
    else
    {
        if(top.frames[3].is_accessible)
            top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?rnd=" + Math.random() + "&path=" + step;
    }
}

Не забываем вписать имя проводника(тут всё регистрочувствительное. Т.е. "Проводник" и "проводниК" - это два разных персонажа), включить/выключить параметр groupkanal....короче в комментах всё написано.

1 994

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

Нда...доки на всех ботов.......на бабушек со своего подъезда регистрировать smile

Хм.
Клиент перезапускал после внесения изменений о колличестве персонажей в партии?

Запусти и отпишиь, что на ошибке будет написано(А лучше отредактируй свое прошлое сообщение и вставь туда свою функцию function StartKanalZayavka()....персонального в ней нет ничего, такчто тупо копи-паст сюда)
function StartKanalZayavka()
{
     if(liderstvo==true){
                xlength=top.frames[3].document.forms.length;
                for(i=0;i<xlength;i++)
                {
                    var z = top.frames[3].document.forms[ i ].innerHTML;
                    if(z.indexOf("fl(\""+provodnik+"\"")>0){
                        var count=0;
                        var pos = z.indexOf("drwfl");
                        while (pos != -1){
                                count++;
                                pos = z.indexOf("drwfl",pos+1);
                                }
                    }
                }
alert("В партии сейчас "+count+" .А должно быть: "+partija);
                if(count==partija){
      usedObjects = [];
      dungeonMovementCount = [];
      dungeonCoords = "";
        dungeonDirection = 0;
                var date = new Date();
             dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
      alert("Ща запущусь");                   
    //top.frames[3].document.all.start.click();
                        }
            }
        if(groupkanal==false){
        usedObjects = [];
          dungeonMovementCount = [];
         dungeonCoords = "";
        dungeonDirection = 0;
                var date = new Date();
             dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
      alert("Не включен групповой режим");
                //top.frames[3].document.all.start.click();
        }   
}

1 996

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

Все хотят hmm
такой вот клан ботоводов получится smile

Начал тестировать в 8-й версии.
1) Заменил функцию  PutKanalZayavka на
function PutKanalZayavka()
    {
        if(liderstvo==false && groupkanal==true){
         alert("Вы собираетесь искать существующую заявку с лидером"+provodnik);
                    xlength=top.frames[3].document.forms.length;
          alert("Если в этом окошке выведен этот текст и число, близкое к числу заявок на странице - это хорошо. Число заявок: "+xlength);
                    for(i=0;i<xlength;i++)
                    {
                        var z = top.frames[3].document.forms[ i ].innerHTML;
              alert("Происходит проверка заявки номер: "+i+".");
                        if(z.indexOf("fl(\""+provodnik+"\"")>0){
              alert("Заявка найденна. Пытаюсь ввести пароль");
                        top.frames[3].document.forms[ i ].pass.value=grouppass;
              alert("Ввел пароль - пытаюсь подтвердить заявку");
                        top.frames[3].document.forms[ i ].submit();
                        }
                    }
                   
                }else if(groupkanal==false || liderstvo==true){
            top.frames[3].document.all.mut_noblock.checked = false;
            top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = grouppass;
            top.frames[3].document.all.open.click();}
    }
и приписал вверху параметры
var groupkanal = true;            //Если идёте один - false
 
    if(groupkanal==true){
    ////////////////////        Групповой поход           ////////////////////
    //Если вы идете один, просто выставьте groupkanal = false и параметры ниже можно
    //не изменять.
    var liderstvo = false;                //true - вы лидер группы. false - не вы лидер.           
    var provodnik = "ИмяПроводника";            //Кто является проводником/лидером. Это обязательно надо указать и для самого проводника, и для прицепа.
    var grouppass = "321456";            //Пароль группы
    var partija = "2";                //Количество людей в партии, включая вас.
    }

Даже группу создавать не стал проводником.
Результат: выводились все ошибки, которые есть.
Вывод: скрипт работал в полном объеме без косяков.

2) Запустил проводника и создал им заявку. У ведомого закоментил alert'ы, чтоб не мешались и перезапустил его клиент.
Результат: за 2 секунды ведомый нашел заявку, вбил пасс и подтвердил её.
Вывод: ведомый цепляет заявку без проблем.
Даже и не знаю, что могло застопорить у тебя прием заявки...в голову лезет только неверный ник проводника hmm

Покачто протестирую часть от проводника.

3)Протестировал.
var groupkanal = true;            //Если идёте один - false
  alert("Группа запущенна");
    if(groupkanal==true){
    ////////////////////        Групповой поход           ////////////////////
    //Если вы идете один, просто выставьте groupkanal = false и параметры ниже можно
    //не изменять.
    var liderstvo = true;                //true - вы лидер группы. false - не вы лидер.           
    var provodnik = "ИмяПроводника";            //Кто является проводником/лидером. Это обязательно надо указать и для самого проводника, и для прицепа.
    var grouppass = "321456";            //Пароль группы
    var partija = "2";                //Количество людей в партии, включая вас.
    }

function StartKanalZayavka()
{
     if(liderstvo==true){
                xlength=top.frames[3].document.forms.length;
                for(i=0;i<xlength;i++)
                {
                    var z = top.frames[3].document.forms[ i ].innerHTML;
                    if(z.indexOf("fl(\""+provodnik+"\"")>0){
                        var count=0;
                        var pos = z.indexOf("drwfl");
                        while (pos != -1){
                                count++;
                                pos = z.indexOf("drwfl",pos+1);
                                }
                    }
                }
                if(count==partija){
      usedObjects = [];
      dungeonMovementCount = [];
      dungeonCoords = "";
        dungeonDirection = 0;
                var date = new Date();
             dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
      alert("Ща запущусь");                   
    //top.frames[3].document.all.start.click();
                        }
            }
        if(groupkanal==false){
        usedObjects = [];
          dungeonMovementCount = [];
         dungeonCoords = "";
        dungeonDirection = 0;
                var date = new Date();
             dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
      alert("Не включен групповой режим");
                //top.frames[3].document.all.start.click();
        }   
}
Проверка проходила так: Запустил ведомого на поиск заявки. Запустил проводника. Проводник создал заявку и встал со статусом "Начинаю поход"(или как там оно). Ведомый прицепился сразу, а вот проводник долго ждал, пока окно обновится(мне ждать надоело и я сам кнопку Обновить нажал).
Результат: всплыла выставленная мной ошибка "Ща запущусь", которая говорила о том, что скрипт доработал стабильно до момента запуска заявки(запуск был преднамеренно закомментирован, дабы он не начал сам поход и не пришлось ждать кучу времени для повтора эксперимента). Закомментированный запуск заявки был частью базового скрипта, такчто в его правильной работе я не сомниваюсь.

Вывод в целом: Скрипт работает корректно. Для 2-х точно корректно.

P.S.
В 8-й версии не удобно оказалось то, что скрипт Данжа сразу интегрируется в клиент и при внесении изменений в файл Dungeon.js необходимо полюбому этот клиент перезапустить. В 7-й было проще - галочку снял, внес изменения, вернул галочку и всё работает по-новому smile


P.P.S.
Чем раньше кто-нибудь проверит работоспособность и отпишется тут - тем раньше я начну развивать это до того уровня, чтоб можно было ходить не просто прицеп-проводник, но и полноценной партией.

сегодня купил 8-ую версию.
в крайнем случае в воскресенье рабочий вариант будет(если он мне по силам, конечно) smile

Не знаю, где косяк.
Вот что-то вроде отладочной версии, чтоб понять, где стопорится всё smile

function PutKanalZayavka()
    {
        if(liderstvo==false && groupkanal==true){
         alert("Вы собираетесь искать существующую заявку с лидером"+provodnik);
                    xlength=top.frames[3].document.forms.length;
          alert("Если в этом окошке выведен этот текст и число, близкое к числу заявок на странице - это хорошо. Число заявок: "+xlength);
                    for(i=0;i<xlength;i++)
                    {
                        var z = top.frames[3].document.forms[ i ].innerHTML;
              alert("Происходит проверка заявки номер: "+i+".");
                        if(z.indexOf("fl(\""+provodnik+"\"")>0){
              alert("Заявка найденна. Пытаюсь ввести пароль");
                        top.frames[3].document.forms[ i ].pass.value=grouppass;
              alert("Ввел пароль - пытаюсь подтвердить заявку");
                        top.frames[3].document.forms[ i ].submit();
                        }
                    }
                   
                }else if(groupkanal==false || liderstvo==true){
            top.frames[3].document.all.mut_noblock.checked = false;
            top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = grouppass;
            top.frames[3].document.all.open.click();}
    }

Соответственно alert выводит ошибку с заданным текстом и единственной кнокой. Какие сообщения будут выведены, значит до них все пракрасно работает.(т.е. несколько ошибок подряд будут выводиться).
Это можно прописать только для ведомого, т.к. ведущего никак не затрагивает.
Ошибки появляются быстро и всё время ) такчто потом отключить программу проще через ctrl+alt+del smile
вот такая недоработка с моей стороны))

Для 8-й всё тоже самое практически должно быть....
(Опять перед проверкой настоятельно рекомендую сделать копию базового файла, чтоб было чем восстанавливать поломанное)

В файле Dungeon.js меняем функции на соответствующие:
function PutKanalZayavka()
    {
        if(liderstvo==false && groupkanal==true){
                    xlength=top.frames[3].document.forms.length;
                    for(i=0;i<xlength;i++)
                    {
                        var z = top.frames[3].document.forms[ i ].innerHTML;
                        if(z.indexOf("fl(\""+provodnik+"\"")>0){
                        top.frames[3].document.forms[ i ].pass.value=grouppass;
                        top.frames[3].document.forms[ i ].submit();
                        }
                    }
                   
                }else if(groupkanal==false || liderstvo==true){
            top.frames[3].document.all.mut_noblock.checked = false;
            top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = grouppass;
            top.frames[3].document.all.open.click();}
    }

function StartKanalZayavka()
{
    top.frames[3].location = "http://"+City+".combats.com/dungeon.pl";
    usedObjects = [];
    dungeonMovementCount = [];
    dungeonCoords = "";
    dungeonDirection = 0;
     if(liderstvo==true){
                xlength=top.frames[3].document.forms.length;
                for(i=0;i<xlength;i++)
                {
                    var z = top.frames[3].document.forms[ i ].innerHTML;
                    if(z.indexOf("fl(\""+provodnik+"\"")>0){
                        var count=0;
                        var pos = z.indexOf("drwfl");
                        while (pos != -1){
                                count++;
                                pos = z.indexOf("drwfl",pos+1);
                                }
                    }
                }
                if(count==partija){
                        top.frames[4].location = top.frames[4].location;
                var date = new Date();
        dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
                        top.frames[3].document.all.start.click();
                        }
            }
        if(groupkanal==false){
                var date = new Date();
        dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
                           top.frames[3].document.all.start.click();
        }

}




Все параметры в самом начале скрипта(все просто для наглядности):
var s = "";
var dungName = "";
var dungeonCoords = "";
var dungeonDirection = 0;
var dungeonPosition = "";
var dungeonLastPosition = "";
var breakAction = false;
var _id = "";
var _object = null;
var groupkanal = true;            //Если идёте один - false
 
    if(groupkanal==true){
    ////////////////////        Групповой поход           ////////////////////
    //Если вы идете один, просто выставьте groupkanal = false и параметры ниже можно
    //не изменять.
    var liderstvo = false;                //true - вы лидер группы. false - не вы лидер.           
    var provodnik = "Проводник007";            //Кто является проводником/лидером. Это обязательно надо указать и для самого проводника, и для прицепа.
    var grouppass = "321456";            //Пароль группы
    var partija = "2";                //Количество людей в партии, включая вас.
    }


P.S.
Лицензии 8-й нету, такчто проверить не могу.