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

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

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

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

1 928

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

up
обновлено.
смотрите первый пост.

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

IceAngel пишет:

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

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

1 930

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

Нужна жертва - тестер smile

1 931

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

Ну пришли ему лицензию))
тебе жалко чтоли?:)
Я бы с удовольствием посмотрел, как он её юзал бы smile

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";                //Количество людей в партии, включая вас.
    /////////////////////////////////////////////////////////////////////////////
    }

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

1 933

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

Нет, не фантастика.
Сейчас у меня прицеп читает, в бою ли проводник и какой процент хп у него сейчас.
работы продолжаются))

всёравно главной проблемой покачто является обновление окна в именно нужные моменты hmm

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

1 934

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

Петро пишет:

Ну допустим:

Если проводник в бою
     Если Проводник и прицеп на одной клетке, и у проводника HP<X HP, а у прицепа HP>Y, то прицеп прыгает к проводнику и начинает биться.

Если проводник не в бою
     Проводник восстанавливается, прицеп ждет 1 условия.

Как-то так? roll

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

а есть мысли, как из этого сделать более-менее командный проход данжа?

1 935

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

Странно.
у меня в инвентаре 3 пакета Зелье Могущества и он всё стабильно пьёт

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

1 937

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

Ну что?
неужели нету мыслей о том, как должен действовать проводник и прицеп?

Что есть на руках:
1) в партию все залезают и ходят стабильно.
2) проводнику через дополнительно написанный плагин есть возможность передавать текущее значение ХП помошников
3) можно определять, на одной ячейке прицепы все с проводником или на разных
Практически это вобще всё, что нужно.
Вопрос остаётся только в том, какой алгоритм действий должен быть...
Кто-нить может сказать, как он хочет, чтоб это работало??

не может же быть так, чтоб ни у кого идей не было

()
hmm


только у меня так, чтобы команды были как переменные выведены smile
EnemiesCount для противников
SoratnikiCount для соратников

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

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

1 939

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

бОльшая часть взломов идёт через трояны и доверчивых пользователей, а не через предоставляющих почтовые ящики.

1 940

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

Я же вопрос не так ставил...
я ставил "Работает ли функция автоматического переодевания комплектов хил-боевой в данжах"?

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

1 941

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

я не в курсе:
А в данже функция переодевания комплекта хил-боевой работает?
Если работает - в чем задача тогда?

"итак, надо сделать чтобы в бот одевал хил, хилился до 1010хп, а потом лез в котел..."
если хил сам надевается нормально, то условие  if(tkHP >1010){UseObjects();Walk("m3");}; становится уже достаточным для решения задачи

я мелкий лвл и могу чего-то не понимать)

1 942

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

а смысл?
1ae47a5fce875a25b30e2f50f20671b5 : if(tkHP >1000){UseObjects();Walk("m3");};
в таком виде то пока не долечится до 1000ХП и не поюзает предметы, никуда не пойдет.

else, обновление фрэйма, переодевание комплектов способами:
httpGetPageRequest()
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/main.pl?skmp=" + external.SComplectBattle.Text;

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

Т.е. надо внести ещё какое-то условие типа Если maxHP< фикс. значение - Одеть комплект и обновить фрэйм(вместе в фигурных скобках и комплект и обновление) - Проверить условия остальные
Тогда второй круг будет состоять только из Проверить остальные условия.

1 943

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

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

1ae47a5fce875a25b30e2f50f20671b5 : if(tkHP >1000)UseObjects();Walk("m3");

Если у человека при переходе на эту клетку 1000ХП(я был в шоке, когда у меня было 230хп и я тестил >230...оно выполнялось...потом дошло глянуть значение tkHP...230,23 о.О) то он поюзает объекты и пойдет дальше.
Если у человека меньше 1000хп, он не будет ждать вылечивания до нужного ХП, а тупо пойдёт дальше.

1 944

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

Я мессаг удлиннил прошлый...подрбно расписал, где ошибка...
а как решить - это надо думать.

1 945

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

народ, кто-нибудь решил проблему?
надо лезть в определенные места с хп больше 1000 (сундуки-ловушки и пр.)
как сделать то, чтобы бот лез в них с условием что хп>1000???

Ну это просто совсем
1ae47a5fce875a25b30e2f50f20671b5 : if(tkHP >1000){UseObjects();Walk("m3");};

А вот с переодеванием комплекта - тупик покачто.
"но бот сначала лезет в котел, а потом одевает комплект )" - не верно...комплект сперва одевается, а вот информация о ХП не обновляется - вот условние (tkHP>=maxHP) и выполняется.

httpGetPageRequest("http://angelscity.combats.com/main.pl?skmp=хххххххх");  - эту запись вобще нельзя пихать в маршрут...только если с условиями, при которых она будет выполняться. Почему:
cff55059e38c2869d04f003aebfb2c8b : httpGetPageRequest("http://angelscity.combats.com/main.pl?skmp=хххххххх");
- такая строка будет постоянно перевыполняться, пока не произойдет переход на другую клетку(т.е. он каждый раз будет переодевать комплект и при этом хилиться вы никак не сможете - хп вечно сбрасываться будут).

1 946

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

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

ну да ладно smile не заметил - ну мой косяк, согласен smile

1 947

(49 ответов, оставленных в Помойка)

Петро пишет:

Всё проще... Сделай скриншот из фотошопа, обрезай в паинте... и всё. Но было бы хорошо вставлять инфу о сканере какм-нибудь туда... есть в инете инфа о том как подделать такую подпись.

А инфа о сканере точно в файле хранится?
блокнотом полистайте скан...я бы сам полистал, но у меня сканера нету smile


repaks пишет:

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

Я против всяких закрытых тем для особо избранных...из-за них можно потерять знающих данные проблемы людей и лишиться их ценных комментариев...

1 948

(49 ответов, оставленных в Помойка)

Godness пишет:
hyppopotam пишет:

Я предлагаю сделать закрытый раздел. Уже есть ряд тем которые не для общих глаз.
Ждём дозволения руководства на такой раздел wink

полностью согласен !
и чем быстрее тем лучше

я бы вобще разграничил форум на две части:
1) 7-ая версия
2) 8-ая версия.
Соответственно первая часть открытая. Вторая - закрытая. Она только для тех, кто купил себе 8-ую версию.
И Админу реагировать нужно было бы только на 2-ую часть, а первую пускай ведут сами пользователи 7-й версии.

Правда метод, так скажем, садистский слегка smile

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

При выставленном времени выхода у меня нормально бегает прицеп...извини, но выходит или нет после времени я проверять не стал 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-х клиентов взято и не на всех одинаковые файлы(для похода тут всё рабочее. по этому файлу ходят два бота в связке)...
рекомендую только сравнивать со своим.

1 950

(49 ответов, оставленных в Помойка)

hyppopotam пишет:

Ещё есть затруднения с верным созданием файла jpeg. Дело в том что в формате этого файла содержится некоторая информация. Я точно не знаю спецификацию этой группы форматов (а jpeg разные бывают), но точно знаю что есть информация об устройстве при помощи которого он был получен. Надо бы на досуге заняться этим вопросом и уточнить как именно можно проверить jpeg на достоверность.

Достаточно открыть текстовым редактором рисунок. Фотошоп там прекрасно пишется. roll
Paint не пишет себя....но даже если фотошопный файл открыть  paint'ом и сохранить заново - всёравно пометка фотошопа остаётся.
если из фотошопа скопировать само изображение в paint и сохранить - тогда пометки остаться не должно..наверное... smile
smile