51

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

обалдеть smile вот это да smile спасибо нашему форумному "самописцу" smile Anahronik - большое тебе, человеческое спасибо!!!

52

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

что-то не получается. у тебя написано менять в main.js, но там таких блоков нет, может всё-таки dungeon.js?

меняю

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;
        }
 
на
 
if(IsMapVisible())
{
dungName = top.frames[3].location.href.match(/combats.com\/(.+?)\?/)[1];
var date = new Date();
if(zag==0){
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
zag++;
}
 
 
 
        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;
        }

Ну и функцию PutKanalzayavka(), там всё ясно.

Статус висит "вхожу".

53

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

Ну так что, есть идеи как исправить?

Буду премного благодарен roll

54

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

Да, ты прав...не Main.js, а Dungeon....

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

Ты попробовал прописать всё это в Dungeon.js ? не заработало?


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

Отредактировано anahronik (2009-08-21 03:31:15)

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

55

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

Прописывал в Dungeon,js, не получается..  что куда вставлял описал сверху.

56

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

Как и обещал, проверил ночью

При выставленном времени выхода у меня нормально бегает прицеп...извини, но выходит или нет после времени я проверять не стал hmm

Мой Dungeon.js

var s = "";
var dungName = "";
var dungeonCoords = "";
var dungeonDirection = 0;
var dungeonPosition = "";
var dungeonLastPosition = "";
var breakAction = false;
var _id = "";
var _object = null;
var groupkanal;
var zag=0;
var texting=external.LoadFile("Modules\\DungeonUsers\\"+mylogin+".txt");
//alert(texting);
eval(texting);
 
//alert(texting);
//alert("groupkanal: "+groupkanal+"\n provodnik:"+provodnik+"\n liderstvo: "+liderstvo+"\n grouppass: "+grouppass+"\n partija: "+partija);
 
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(zag==0){
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
var dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
zag++;
}
        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()
    {
    zag=0;
    var searched=false;
        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;
                        if(z.indexOf("fl(\""+provodnik+"\"")>0){
                        top.frames[3].document.forms[ i ].pass.value=grouppass;
              searched = true;
                        top.frames[3].document.forms[ i ].submit();
                        }
                    }
                   if(searched!=true){setTimeout(top.frames[3].window.location.reload(),3000);}
                }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){
    top.frames[3].document.all.start.click();
                        }else{setTimeout(top.frames[3].window.location.reload(),3000);}
            }
        if(groupkanal==false){
                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;
    }
}

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

Отредактировано anahronik (2009-08-22 01:42:49)

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

57

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

подскажите почему бот во втором окне несчитает ходы?

58

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

8-ая версия, вроде как, вобще ходы не считает.... hmm
там алгоритм хождения не по порядковому номеру шага.

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

59

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

у меня версия 7..

60

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

Подзабыл про эту тему)

anahronik, за работу огромное спасибо, но пока не смогу потестить, уезжаю, вернусь - проверю = )

61

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

anahronik, за работу огромное спасибо, но пока не смогу потестить, уезжаю, вернусь - проверю = )

Успешной поездки smile

ЛедянойАнгел, я давно для 7-й версии не обновлял...там вроде даже обновление страницы не подключено.
Надо будет обновить, видимо с исправлениям всеми...

Для 7-й версии подача-прием заявок

/////////////////////////////////////////////////////////////////////////////
    ///////////////////Система подземелья для Combots (c) ZergNM/////////////////
    /////////////////////////////////////////////////////////////////////////////
 
 
 
    ////////////////////              Настройки              ////////////////////
    var pickupobjects = true;        //Подбирать предметы
    var attackmobs = true;        //Нападать на мобов
    var groupkanal;
 
    var texting=external.LoadFile("..\\DungeonUsers\\"+mylogin+".txt");   
    eval(texting);
 
 
    ////////////////////         Функции и переменные        ////////////////////
 
    var s = "";
    var DoAction = 0;
    var CurrentLocation = "";
    var City = "";
    var DungName = "";
 
    function InitializeKanalSystem()
    {
        try { clearTimeout(walktimer); }
        catch(err) { walktimer = 0; }
 
        try { usedObjects; }
        catch(err) { usedObjects = new Array(); }
 
        try { KanalMapCoords; }
        catch(err) { KanalMapCoords = ""; }
 
        try { KanalDirection; }
        catch(err) { KanalDirection = 0; }
 
        try { KanalCurrentMapCoords; }
        catch(err) { KanalCurrentMapCoords = ""; }
 
        try { KanalCurrentDirection; }
        catch(err) { KanalCurrentMapDirection = 0; }
 
        try { top.frames[4].document.all.kanalst.value; }
        catch(err) { top.frames[4].document.body.insertAdjacentHTML("afterBegin","<center><b>Подземелье</b><br>Номер шага: <input name=kanalst size=5 value=0></b></center><br>"); }   
 
        s = top.frames[3].document.all[0].innerHTML;
        DoAction = 0;
        CurrentLocation = top.location.href;
        City = CurrentLocation.substring(7,CurrentLocation.indexOf(".combats.com"));
 
        if(s.indexOf("dungeon.pl")>0)
            DungName = "dungeon.pl";
        else
            DungName = s.substring(s.indexOf("dungeon"),s.indexOf("dungeon")+11);
 
        KanalMapCoords = "";
    }
 
    function CheckForError()
    {
        if(s.indexOf("нет при себе необходимого")>0)
            return true;
        return false;
    }
 
    function Exit()
    {
        top.frames[4].location = top.frames[4].location;
        top.frames[3].location = "http://"+City+".combats.com/"+DungName+"?out="+Math.random();
    }
 
    function Walk(step)
    {
        if(top.frames[3].is_accessible)
                top.frames[3].navigate("http://"+City+".combats.com/"+DungName+"?rnd="+Math.random()+"&path="+step);
        else
            walktimer = setTimeout("Walk("+step+")",1000);
    }
 
    function IsMapVisible()
    {
        var retn;
        if(s.indexOf("arrMap =") > 0)
            retn = true;
        else
            retn = false;
        return retn;
    }
 
    function GetCurrentLocation()
    {
        KanalMapCoords = s.substring(s.indexOf("arrMap =")+9,s.indexOf("arrMap =")+549);
        KanalMapCoords = KanalMapCoords.substring(2,KanalMapCoords.indexOf("']];")+1);
        KanalMapCoords = KanalMapCoords.replace(/\[/g, "");
        KanalMapCoords = KanalMapCoords.replace(/\]/g, "");   
    }
 
    function GetCurrentDirection()
    {
        var Direction = top.frames[3].document.getElementById("DungMap").all[top.frames[3].document.getElementById("DungMap").all.length-1].href;
 
        if(Direction.indexOf("d0") > 0)
            KanalDirection = top.frames[3].nMyDirection;
        else
        {
            if(Direction == "http://img.combats.com/i/move/p1/d1.gif")
                KanalDirection = 1;
            else if(Direction == "http://img.combats.com/i/move/p1/d3.gif")
                KanalDirection = 3;
            else if(Direction == "http://img.combats.com/i/move/p1/d5.gif")
                KanalDirection = 5;
            else if(Direction == "http://img.combats.com/i/move/p1/d7.gif")
                KanalDirection = 7;
        }
    }
 
    function IsDropPresent()
    {
        var result = 0;
        if(s.indexOf("?get")>0 && s.indexOf("слишком много")<1 && s.indexOf("mater247")<1)
            result = 1;
        if(s.indexOf("'rollconfirm")>0)
            result = 2;
        return result;
    }
 
    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 PutKanalZayavka()
    {
        var searched;
        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;
                        searched = true;
                        top.frames[3].document.forms[i].submit();
                        }
                    }
                    if(searched!=true){setTimeout("top.frames[3].window.location.reload()",3000);}
                }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 = [];
        KanalMapCoords = "";
        KanalDirection = 0;
        KanalCurrentMapCoords = "";
        KanalCurrentMapDirection = 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;
 
                        top.frames[3].document.all.start.click();
                        }
                else{setTimeout("top.frames[3].window.location.reload()",3000);}
            }
        if(groupkanal==false){
        top.frames[4].location = top.frames[4].location;
        top.frames[3].document.all.start.click();
        }
    }
 
    function getElementsByClassName(clsName)
    {   
        var retVal = new Array();   
        var elements = top.frames[3].document.getElementsByTagName("*");   
        for(var i = 0;i < elements.length;i++)
        {       
            if(elements[i].className.indexOf(" ") >= 0)
            {           
                var classes = elements[i].className.split(" ");           
                for(var j = 0;j < classes.length;j++)
                {               
                    if(classes[j] == clsName)                   
                        retVal.push(elements[i]);           
                }       
            }       
            else if(elements[i].className == clsName)           
                retVal.push(elements[i]);   
        }   
        return retVal;
    }
 
    /////////////////////////////////////////////////////////////////////////////
 
 
 
    ////////////////////              Выполенние             ////////////////////
 
    //Проверяем или инициализируем глобальные переменные
    InitializeKanalSystem();
 
    //Если какая-то ошибка случалась - выходим из подземелья
    if(CheckForError() == true)
        Exit();
 
    //Если видна карта передвижения
    if(IsMapVisible())
    {
        //Загружаем текущее местонахождение
        GetCurrentLocation();
        GetCurrentDirection();
 
        //Если находимся у входа (возможно умерли), обнуляем счетчик
        if(s.indexOf("right>Этаж 1 - Вход")>0)
        {
            KanalCurrentMapCoords = KanalMapCoords;
            KanalCurrentDirection = KanalDirection;
            top.frames[4].document.all.kanalst.value = 0;
        }
 
        //Если мы еще не делали ни шага, надо запомнить исходное положение
        if(KanalCurrentMapCoords == "")
        {
            KanalCurrentMapCoords = KanalMapCoords;
            KanalCurrentDirection = KanalDirection;
        }
 
        //Проверяем если мы успешно переместились и увеличиваем номер шага
        if(KanalMapCoords != KanalCurrentMapCoords || KanalDirection != KanalCurrentDirection)
            top.frames[4].document.all.kanalst.value++;
 
        //Запоминаем текущее положение
        KanalCurrentMapCoords = KanalMapCoords;
        KanalCurrentDirection = KanalDirection;
 
        //Может что-то валяется на полу, если это так то подбираем
        var CurrentDrop = IsDropPresent();
        if(CurrentDrop > 0)
        {
            if(CurrentDrop == 1 && pickupobjects == true)
            {
                    var KanalStatLink = s.substring(s.indexOf("?get")+5,s.indexOf("?get")+25);
                    KanalStatLink = "?get="+KanalStatLink.substring(0,KanalStatLink.indexOf("IMG")-3);
                       top.frames[3].navigate("http://"+City+".combats.com/"+DungName+KanalStatLink);
                DoAction = 1;
            }
            else if(CurrentDrop == 2)
            {
                var KanalStatLink = s.substring(s.indexOf("'rollconfirm")+14,s.indexOf("'rollconfirm")+74);
                KanalStatLink = KanalStatLink.substring(KanalStatLink.indexOf(")'"),KanalStatLink.indexOf(")'")-10);
                KanalStatLink = KanalStatLink.substring(KanalStatLink.indexOf(","),10-KanalStatLink.indexOf(",")+1);
                KanalStatLink = KanalStatLink.replace(/\,/g, "");
                KanalStatLink = KanalStatLink.replace(/\"/g, "");
                if(pickupobjects)
                    KanalStatLink = "?get="+KanalStatLink+"&tmpname423=Да";
                else
                    KanalStatLink = "?get="+KanalStatLink+"&pass=Нет";
                top.frames[3].navigate("http://"+City+".combats.com/"+DungName+KanalStatLink);
                DoAction = 1;
            }
        }
 
        if(!DoAction)
        {
            //Если перед нами нет стены, а ты бывает что мобы видны из за стены а напасть нельзя
            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)
                        {
                            usedObjects[object.id] = true;
                        }
 
                        //Перебираем все объекты на клетке
                        for(var i=0; i<top.frames[3].arrLayers[1][0]["l"].arrObjects.length; i++)
                        {
                            //Текущий объект
                            var object = top.frames[3].arrLayers[1][0]["l"].arrObjects[i];
 
                            //Если объект еще не использованный, открываем его
                            if(!usedObjects[object.id])
                            {
                                top.frames[3].navigate("http://"+City+".combats.com/"+DungName+"?useobj="+object.id);
                                DoAction = 1;
                                break;
                            }
                        }
                    }
 
                    //Если перед нами сидит моб, давай его завалим
                    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))
                            {
 
                                if(attackmobs) top.frames[3].navigate("http://"+City+".combats.com/"+DungName+"?attack=1&use="+top.frames[3].arrLayers[1][0]["l"].arrUnits[0].id);
 
                            }
                            DoAction = 1;
                        }
                    }
                }
                catch(err)
                {
 
                }
            }
        }
        //Если мы не предприняли ничего, надо идти дальше
        if(!DoAction)
        {
            CurrentStep = KanalSteps[top.frames[4].document.all.kanalst.value];
            //Если конец маршрута, выходим
            if(CurrentStep == "ex")
                Exit();
            //Если текущий шаг - поворот, делаем его не дожидаясь окончания задержки передвижения
            else if(CurrentStep == "rl" || CurrentStep == "rr")
                top.frames[3].navigate("http://"+City+".combats.com/"+DungName+"?rnd="+Math.random()+"&path="+CurrentStep);
            //В противном случае ждем окончания задержки и идем вперед
            else
                Walk(CurrentStep);
        }
    }
    else //Если карты не видно
    {
        //Подаем заявку
        if(s.indexOf("Создать группу")>0)
                    PutKanalZayavka();
            //Начинаем поход
            else if(s.indexOf("Начать")>0)
                    StartKanalZayavka();
    }
 
    /////////////////////////////////////////////////////////////////////////////

Создаем в корне папку DungeonUsers и там для каждого персонажа, используемого на этом клиенте, создаем файл ТочноеИмяПерсонажаВключаяПробелыИЗаглавныеБуквы.txt
С содержанием:

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

Всё подает, всё принимает, всё ходит и шаг пишет в обоих окнах.

Отредактировано anahronik (2009-08-24 18:03:18)

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

62

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

Оффтоп! Ухты! Подсветка кода начала работать!) Спасибо Админ! ))

Отредактировано Петро (2009-08-24 15:22:42)

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

63

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

В строке кто var provodnik = "";        //Кто является проводником/лидером. -писать ник роводника? , если так то где и писать ник проводимого?и надо ли делать отдельно бот дял проводника и проводимого или проводник и так небудет подбирать нечё?и будут ли они ходить в отдельных ботах?

Отредактировано IceAngel (2009-08-24 20:12:50)

64

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

IceAngel пишет:

В строке кто var provodnik = "";        //Кто является проводником/лидером. -писать ник роводника? , если так то где и писать ник проводимого?и надо ли делать отдельно бот дял проводника и проводимого или проводник и так небудет подбирать нечё?и будут ли они ходить в отдельных ботах?

Писать ник ведомого ненадо, проводник стартует поход, когда в группе указанное количество участников.

Что значит:

надо ли делать отдельно бот дял проводника и проводимого или проводник и так небудет подбирать нечё?

?
Попробуй сфорумулировать свой вопрос человеческим языком.
Если я правильно понимаю, тогда:
Для каждого бота лучше скопировать отдельную копию папки с программой.
Что бы проводник ничего не собирал, а ведомый ни на кого не нападал, зайди в "настройки" - "дополнительно", и сними соответствующие галочки.

будут ли они ходить в отдельных ботах?

Опять же, пиши по-русски.

Ушел.

65

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

А если ненадо вписывать ник проводника, то как тогда, ведомый зайдёт в нужную группу?

66

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

IceAngel пишет:

А если ненадо вписывать ник проводника, то как тогда, ведомый зайдёт в нужную группу?

Наоборот, проводник прописывается в переменную provodnik.
а ведомый не прописывается никуда.

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

67

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

ок спасибо , вроде всё понел:) тока бот когда умер на втром этаже нестал идти дальше (

Отредактировано IceAngel (2009-08-24 23:32:17)

68

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

Можно это какнить исправить в этом скрипте? чтобы было как вот в этом (Please log in or register to see this URL)

Отредактировано IceAngel (2009-08-25 11:32:10)

69

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

IceAngel пишет:

Можно это какнить исправить в этом скрипте? чтобы было как вот в этом (Please log in or register to see this URL)

Друг, ты не путай... kanal.txt это для версии 7, бесплатной, а мы здесь рассматривааем плагин для 8, платной версии!

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

70

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

Петро, для 7-й то я тоже выкладывал smile

По поводу (Please log in or register to see this URL)
Там эта переменная в двух местах прописана - в начале при задании её значения, и в месте, где это значение используется.
Внести такое изменение может любой  человек без моей помощи.

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

71

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

а в этом скрепте который в тут выложили есть такая переменная , что-то я смотрел несмог найти, а если впишу этот скипт (Please log in or register to see this URL) , то бот будет ходить парой с проводимым?

72

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

нет конечно, не будет.
и я ошибся, изменений там не одна переменная видимо.

Но я ведь не могу брать его изменения и пихать к себе - неправильно это : /

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

73

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

и чё значит некак незделать чтобы он незастревал?:(

74

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

бот проводник несоздаёт группу, а если создаш руками то прцеп всё робит. мб я что-то не то делаю?

75

Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой.

у всех персонажей в созданном txt файле должен быть проводник прописан.
даже у проводника. Если у проводника не прописать - он никогда не узнает, что проводником является.

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