Тема: Убираем глюки своими руками

Далее речь идёт об использовании Combots 8.0 beta 3
Итак, многие уже заметили, что иногда бывает так, что бот заедает и/или глючит. Для ликвидации некоторых проблем я рекомендую внести в бота некоторые изменения:
1. Если вы не планируете назойливо использовать встроенный браузер в боте, то лучше всего будет заменить строчку в Modules/Main.js:
эту:

if(external.dungeonEnabled && !external.BrowserBusy)               
DungeonMain();

на эту

if(external.dungeonEnabled)
DungeonMain();

убрав && !external.BrowserBusy

2. Если вы замечаете что ваш долго не может подать заявку, то поставьте задержку на кликанье кнопки (фаил Modules/Dungeon.js):
меняем:

function PutKanalZayavka()
{
    top.frames[3].document.all.mut_noblock.checked = true;
    top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = randomString();
    top.frames[3].document.all.open.click();
}

на

function PutKanalZayavka()
{
    top.frames[3].document.all.mut_noblock.checked = true;
    top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = randomString();
    setTimeout('top.frames[3].document.all.open.click();', 500);
}

3. Также, если у вас вдруг бот зависает на "Начинаю поход" и не стартует в пещеру, то просто добавьте использование функции после подачи заявки:
после строк

if(s.indexOf("Создать группу") > 0)
        {
            external.SetStatusLabel("Создаю заявку");
            PutKanalZayavka();

вписываем:

setTimeout('StartKanalZayavka();', 3000);

P.S. Описывайте проблемы, которые вам встречались - 99% решается правкой файлов в каталоге Modules.

2

Re: Убираем глюки своими руками

может поможешь и мне?))
нужно дописать в функцию создания заявки/начала похода, выпивание еликсира(ов) без всяких проверок на спал/не спал, просто чтоб открыл раздел эликсиры и выпил нужные, при начале похода...
        top.frames[3].navigate("http://"+City+".combats.com/main.pl?edit=3");
        top.frames[3].UseMagick('Снадобье Разума','main.pl', 'pot_base_200_bot4', '', 0, '', ',,,,,,');
        top.frames[3].UseMagick('Эликсир Восстановления','main.pl', 'pot_base_50_regeneration', '', 0, '', ',,,,,,');
        top.frames[3].document.getElementById("slform").submit();}

3

Re: Убираем глюки своими руками

Сразу скажу, где ошибка в эликах.
'Эликсир Восстановления','main.pl', 'pot_base_50_regeneration', '', 0, '', ',,,,,,');
То есть элик будет нулевым, только, если он в самом верху списка инвентаря.
Не очень понятно зачем такой плагин? Чтоб вручную не пить?

4

Re: Убираем глюки своими руками

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

top.frames[3].navigate("http://"+City+".combats.com/main.pl?edit=3");
        var ElikName = 'Эликсир Восстановления'
        var PicName = 'pot_base_50_regeneration'
        var Source=document.frames[3].document.body.innerHTML;
        var StartPos=Source.indexOf("UseMagick('"+ElikName);
        var tmpStr=Source.substring(StartPos, StartPos+100);
        var TwoPos=EtmpStr.indexOf(", '',");
        var EndPos=tmpStr.indexOf(", '', ',,,,,,')");
         if (StartPos>0){
            ElixN=Source.substring(StartPos+TwoPos+5, StartPos+EndPos);
             }
         if (StartPos>0){
            top.frames[3].UseMagick(ElikName,'main.pl', PicName, '', ElixN, '', ',,,,,,');
            top.frames[3].document.getElementById("slform").submit();
            }

Наверняка есть способы проще)

5

Re: Убираем глюки своими руками

P.S. Описывайте проблемы

   Предсказатель, думаю над такой проблемой)
   Неплохо бы сделать запоминание клетки  (типа arrMap = [['','','d357','','','','','','']....), направление движения (типа <div align="right">смотрим на запад</div>) и запоминания шага (CurrentStep) при входе в пещеру и смене этажа. Для того чтобы точно определить момент смерти перса и поставить его на маршрут заново.
   Как я уже сказал, я не программер совсем и у меня уходит много времени на исправление даже пары строк)

Re: Убираем глюки своими руками

Aleksy
У меня перед походом в бездну (уже зайдя в неё):
1. Пьёт разум
2. Одевает комплект
3. Пьёт элик восстановления.

Выглядит это так:

function StartKanalZayavka()
{
    usedObjects = [];
    dungeonMovementCount = [];
    dungeonCoords = "";
    dungeonDirection = 0;
 
  top.frames[3].document.all.start.click();
 
setTimeout('top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/main.pl?use=pot_base_200_bot4&n=-1";', 4000);
setTimeout('top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/main.pl?skmp=" + external.SComplectBattle.Text;', 8000);
setTimeout('top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/main.pl?use=pot_base_50_regeneration&n=-1";', 12000);   
}

Re: Убираем глюки своими руками

Такие теории)) Такие скрипты)) tongue Будьте проще, перловским FCGI скриптам до лампочки на то, какой там у вашего браузера Javascript код в отображении. Им Get|Post запросы подавай в виде ссылок) ну или Put|update|delete (в бк не наблюдались)

Tester
В момент смерти перса отбрасывает на вход и он идёт дальше )) Я про восьмую версию.

Отредактировано Предсказатель (2009-06-08 14:38:05)

8

Re: Убираем глюки своими руками

Предсказатель, говорю же, я не программер) Из того что ты сказал я понял не больше половины))
Тот кусок скрипта, я делал для морковки под бота 7.1, 8-ку не юзаю... пока вроде работает)
Есть под морковь для 8-го бота что-нибудь?

Re: Убираем глюки своими руками

Note: Автор бота явно играет воином. Я же играю магом мне не удобно лезть в бои без маны. К тому же, мне не требуется ждать 100% восстановления HP поэтому я себе сделал так:
"Нападать не мене чем при 70% HP и 80% маны"
в функции function AttackMobs() изменил строку

if(tkHP >= maxHP)

на

if(tkHP >= maxHP*0.7 && tkMana >= maxMana*0.8)

Re: Убираем глюки своими руками

Есть под морковь для 8-го бота что-нибудь?

Ну можно сделать: если HP < 33% = пить морковку. Например, это можно добавить в функцию
AtackMobs() т.е. тогда когда перс уже дошёл до мобов и думает нападать или нет, сверяя уровень хп.. примерно так:

function AttackMobs()
{
  if(tkHP <= maxHP*0.33) {
  top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/main.pl?use=ID_ЭЛЕКСИРА&n=-1";
  }
...

}

11

Re: Убираем глюки своими руками

Да воином. И проблема в активном нежелании автора бота что-то делать под морковь даже в планах) А мне нужно, чтобы бот мог ходить и в пещере с активно нападающими ботами)
  Может чтоб не флудить в аську? А то есть пара вопросов ; )
icq 438761731

Re: Убираем глюки своими руками

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

external.SetStatusLabel("Не видно карты, не в подземелье, или еще не истекла задержка");

строку:

top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName;

Всё) от подвисаний бота из-за лагов избавило. cool

13

Re: Убираем глюки своими руками

Предсказатель пишет:

Ну можно сделать: если HP < 33%

Тогда уж проще зная свой фул указать абсолютное значение HP.
Предположим у нас 500HP в фуле. Один глоток 200HP (пристрастие [25]). Тогда пишем просто:
if(tkHP <= 300)

(Please log in or register to see this URL)

14

Re: Убираем глюки своими руками

Предсказатель пишет:

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

external.SetStatusLabel("Не видно карты, не в подземелье, или еще не истекла задержка");

строку:

top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName;

Всё) от подвисаний бота из-за лагов избавило. cool

А если я стою на ЦП или на входе в пещеру последний адрес будет верным? Или выкинет из БК?

(Please log in or register to see this URL)

Re: Убираем глюки своими руками

hyppopotam
Ага а если спадёт шмот и хп станет менше чем 300 - то выпьет все элики за раз big_smile

Re: Убираем глюки своими руками

А если я стою на ЦП или на входе в пещеру последний адрес будет верным? Или выкинет из БК?

Если стоишь на цп то обычно "В подземелье" = выкл. А если на входе - то не выкинет конечно. Вообще в любом случае не выкинет)

Отредактировано Предсказатель (2009-06-08 15:11:30)

17

Re: Убираем глюки своими руками

Предсказатель пишет:

hyppopotam
Ага а если спадёт шмот и хп станет менше чем 300 - то выпьет все элики за раз big_smile

Значит допишем && максимальное HP более такого-то.

Кстати да. У меня у мага без шмота менее 150HP. Можно это каким-то условием прописать чтобы он при таком раскладе (maxHP<=150) вообще не нападал ни на кого. Чиркни пожалуйста строку.

Отредактировано hyppo (2009-06-08 15:13:22)

(Please log in or register to see this URL)

Re: Убираем глюки своими руками

Кстати да. У меня у мага без шмота менее 150HP. Можно это каким-то условием прописать чтобы он при таком раскладе (maxHP<=150) вообще не нападал ни на кого. Чиркни пожалуйста строку.

У меня на такой случай:
1. пытается выпить разум и одеть комплект.. ну и естественно не нападает при хп < 200
для этого пишем:

if(top.frames[3].arrLayers[1][0]["l"].arrUnits[0].action != "")
     {
            if(tkHP < 200)
              {
                setTimeout('top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/main.pl?use=pot_base_200_bot4&n=-1";', 4000);
                setTimeout('top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/main.pl?skmp=" + external.SComplectBattle.Text;', 8000);
              }
                   
else if(tkHP >= maxHP*0.7 && tkMana >= maxMana*0.8)
                    {
                        external.SetStatusLabel("Нападаю на мобов");
...

Re: Убираем глюки своими руками

вариант чтоб не пил:

if(top.frames[3].arrLayers[1][0]["l"].arrUnits[0].action != "")
     {
            if(tkHP < 200)
              {
                external.SetStatusLabel("HP < 200 !!");
              }
                   
else if(tkHP >= maxHP*0.7 && tkMana >= maxMana*0.8)
                    {
                        external.SetStatusLabel("Нападаю на мобов");
...

20

Re: Убираем глюки своими руками

О. Я тут подумал. А мы можем сами дополнять external.SetStatusLabel новыми значениями?
Ну например чтобы бот писал "иссяк запас статового эликсира", к примеру, или "упал комплект" и вставал в режим ожидания? cool

(Please log in or register to see this URL)

Re: Убираем глюки своими руками

Да)) мы всё можем!! cool
external.SetStatusLabel("упал комплект");

Отредактировано Предсказатель (2009-06-08 18:22:18)

22

Re: Убираем глюки своими руками

Предсказатель пишет:

Да)) мы всё можем!! cool
external.SetStatusLabel("упал комплект);

И то есть бот после этого остановится? Или просто надпись изменится. А то я плохо понимаю как он функционирует smile

(Please log in or register to see this URL)

Re: Убираем глюки своими руками

Надпись изменится. smile
А для того чтоб остановился достаточно просто описать условие и сказать ему чтоб он ничего не дклал кроме как выводил надпись)

24

Re: Убираем глюки своими руками

zxcv пишет:

ерундой страдаете


если кому-то тема не интересна - идите лесом... никчему тут флуд разводить... а те, кому интересно, найдут, что сказать и ерундой это не считают... wink

25

Re: Убираем глюки своими руками

hyppopotam пишет:

в каком смысле?

я про редактирование статусов, шаблонные спеллы итд
к слову, откуда инфа про browserbusy - догадки по названию?