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

252

(8 ответов, оставленных в Торговля / Коммерческие дела)

есть. Этот...
цена и вся информация тут ()

253

(8 ответов, оставленных в Торговля / Коммерческие дела)

Администрация в командировке - с ответами на почту могут быть задержки 1-2-3дня (включая по покупкам лицензии)


Ответит.

попробуй такой вариант

SPOILER Show

if (typeof(say) == "undefined") {var say = 0;} if (say < 2) { say = say + 1; $('area[title="Оборванец"]',get_mainframe().document).each(function() {  this.click(); $('a[onclick*="tn3_poors_default_2"]',get_mainframe().document).each(function(){this.click()})}); } else { say = 0; Walk (XX); }
if (say < 2) // - количество разговоров

XX - направление движения, измени... куда тебе нужно...


Должно получиться

255

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

Тогда лучше за аналог взять плагин покупки стрел.

256

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

Проще, наверное с нуля написать smile
Ни фига в примере не понял.
Там только один вариант покупки? Как в магазине?

257

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

Tyom,
по приведенному диалогу

• А давай посмотрим, чем ты мне можешь помочь.
(Перейти к магазину и получению предметов)
• Ты похож на человека, у которого есть для меня задания.
(Получить задание)
• Ты же мне задания давал? Я по поводу них...
(Поговорить по поводу взятых заданий
• Кто ты вообще такой?
• Расскажи мне про это кладбище.
• Расскажи мне про население местное.
• Пугаешь ты меня что-то. Пойду я... (завершить разговор)

не могу понять последовательность кликов по сообщениям... как сказал otherway надо ввести отметку о выполнении определенного диалога...
я бы ввел бы переменную и после каждого диалога проверял бы ее
по типу..
кликнул на первую ссылку +1, по второй еще +1(и того 2)...
и проверял бы условие

if(a==1) {диалог уже нажимали проходим к следующему }else {кликаем линк; a=a+1;}

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

if(typeof a == "undefined" || a == 6) {var a=0;} // 6 - это количество диалогов, которые надо перебирать...

но надо подумать в какую часть кода воткнуть обнуление... что бы не зациклить...

З.Ы. Пишу с колена... могут быть ошибки...

Новичок, ну и славно!

+ еще не полный функционал....
особенно...

Так-же продам бота, который каждый час получает пенсию.
Цена - 10$.

при нынешнем курсе 500 деревянных за автокликер, который можно в гугле бесплатно найти...  lol

дорого как то smile
учитывая, то что пик популярности БК (любого) прошел smile

Евжений,
попробуй такую конструкцию

$('area[coords="65,62,185,182"]',get_mainframe().document).each(function() {  this.click(); } )

не уверен, что за пашет... но всякое бывает smile
как вариант...
если объекта два, то можно попробовать так...

var title_tmp = $('area',get_mainframe().document).filter('[title="Таинственный Круг"]');
if(title_tmp.length > 0) { title_tmp[X].click(); }

где в место Х указать либо 0 либо 1... номер объекта, который нужен.


З.Ы. Какой то у меня косяк с форумом ?

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

.getElementById('*')

или

getElementsByTagName('*')

находишь нужные... они соберутся в массив... у тебя будет 2 элемента в массиве... один из них буден тот, который тебе нужен...

Я бы пошел бы этим путем... но это кривой и долгий... но других не знаю smile

Как вариант посмотреть темы про диалоги... там тоже идет поиск нужных элементов и клик по ним.

263

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

не.. так не реализовать...
да и если в ручную делать размен... можно в ручную и прием использовать?

264

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

помог бы... но в диалогах сам еще не разобрался smile

265

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

Nikita_KrM],
по цифрам следующий расклад
1 - переход по картинке(поиск именно функции перехода), не чувствителен к регистру;
2 - поиск по текстовой ссылке,чувствителен к регистру;
3 - по найденному в картинке тексту(outerHTML), не чувствителен к регистру;
4 - поиск по value среди input-элементов,чувствителен к регистру;
нет цифры - поиск везде.

Я так понимаю нужна - 2

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

267

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

понял... надо подумать...
у приема задержка в разменах есть?
если есть то без размена не реализовать.

ramzes, Masterplut,
на самом деле не всегда корректно работает условия с точным значением "=="
есть подозрения, что при обновлении фрейма счетчик посещения + посещения.

т.е. пришли на клетку... бот установил "0", на нас напал моб, после боя уже второе посещение и т.д.

У меня не получилось точно прописать... использую "<" или ">"
+ можно расписать условия посещения соседних клеток...

269

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

не совсем понятна мысль smile

270

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

нет.
Плагин одевает, только то, что подобрал бот.
Если бот не подобрал, то плагин не одел.
Если нечего подбирать... бот ни чего и не подберет.  smile

271

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

Стала вылетать ошибка.
"Недостаточно памяти в строке: 382"
Номер строки меняется.

272

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

можно подправить...
если они подбираются, то это просто...
если нет... то сложнее smile

273

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

вопрос решил... пока обкатка
()

Плагин: Одевания свитков Восстановления. (любых)
Название файла: SetScrollHP.js
Размещение: \Combots\Plugins

Описание:
Подбирает и одевает любые свитки Восстановления ХП в пещере.
В случае подбора хотя бы одного свитка оденет все свитки ХП, которые найдет в инвентаре.

Код плагина:

SPOILER Show

// Одевание свитков Восстановление энергии
 
var Pause = false;
var setTimer = {};
var timePLmin = 2000; // default
var timePLmax = 3000; // default
var stepClick = 0;
var colScroll = 0;
 
function SetScrollHP(enabled) {
    if(enabled) {
        PluginsOnLoad["SetScrollHP"] = "TakeDropScroll";
    } else {
        PluginsOnLoad["SetScrollHP"] = "";
        clearInterval(setTimer[mylogin]);
        stepClick = 0;
        if (Pause){
           ChangeTime();
        }
    }
}
 
function TakeDropScroll() {
  if (top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i)){
     if (external.inBattle){
         clearInterval(setTimer[mylogin]);
         if (Pause) { ChangeTime(); }
     } else {
         var ParsDrop = top.frames[external.mainFrameIndex].document.documentElement.outerHTML;
         if (ParsDrop.indexOf("подняли 'Восстановление энергии") > 0){
             colScroll = colScroll + 1;
             external.AddToChat("Подняли свиток! Свитков на руках = "+colScroll+" шт.");
         }
         var itemDrop = $('h4',get_mainframe().document).text();
         if (!(itemDrop.indexOf("разбросаны")+1) && colScroll > 0){
             setTimer[mylogin] = setInterval('setScroll()', getRndTime(timePLmin, timePLmax));
         }
    }
  }
}
 
function setScroll(){
  if (!Pause) { ChangeTime(); }
  if (stepClick == 0){
      $('img[title="Настройки/Инвентарь"]',top.frames["bottom"].document).each(function() {  this.click(); } )
      stepClick = 1;
  } else if (stepClick == 1){
      external.ClickLink("Фильтр",2);
      stepClick = 2;
  } else if (stepClick == 2) {
      var filterText = top.frames[external.mainFrameIndex].document.getElementsByName("filter");
      stepClick = 3;
      if (filterText[0].value != "восс"){
          filterText[0].value = "восс";
      }
   } else if (stepClick == 3){
      $('input[name="subfilter"]',get_mainframe().document).each(function() { this.click(); });   
      stepClick = 4;
   } else if (stepClick == 4){
      if (get_mainframe().document.all[0].innerHTML.indexOf('main.pl?set=cureHP') > -1){
          external.ClickLink("надеть",2);
      } else {
          stepClick = 5;
      }
   } else {
      $('input[value="Вернуться"]',get_mainframe().document).each(function() { this.click(); });
      clearInterval(setTimer[mylogin]);
      stepClick = 0;
      colScroll = 0;
      if(Pause) { ChangeTime(); }
   }
}
 
function ChangeTime(){
  if (!Pause){
     // тормозим бота
     external.Stop();
     Pause = true;
  }else{
     // возвращаем бота в нормальное состояни
     external.Start();
     Pause = false;
  }
}
 
function getRndTime(timePLmin, timePLmax){
   return Math.floor(Math.random() * (timePLmax - timePLmin + 1)) + timePLmin;
}

Update 1:
Код плагина переработан полностью.
Update 2:
Исправлен программный недочет.

SPOILER Show
В коде организованна проверка наличие дропа по наличию текста в теге h4

$('h4',get_mainframe().document).text();

с точки зрения кода (строка выше) фразы:

В комнате разбросаны вещи:
Кол-во смертей: Х

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


Доработано:

  • Подбирает/одевает все свитки

  • Исправлена схема подбора свитка (теперь вначале собирает весь дроп в клетке, а потом одевает).

  • Исправлена схема одевания (убраны прямые ссылки, теперь делает все последовательно, как "живой")

  • Теперь есть задержка между действиями (Random).

  • Организованна функция, продолжения процесса одевания свитков, если оно было прервано нападением моба.

Update 3: v.2.0
Добавлен парсинг чата на получение Свитков Восстановления по суточному заданию.
Важно: После парсинга свитка, в случае его обнаружения, идет очистка чата (целиком)

Update 4: v.2.1
Переписал парсилку чата, теперь нет необходимости в очистке чата и соответственно плагин не чистит чат.
Код v 2.1

SPOILER Show

// Одевание свитков Восстановление энергии  v.2.1
 
var Pause = false;
var setTimer = {};
var timePLmin = 1500; // default
var timePLmax = 2500; // default
var stepClick = 0;
var colScroll = 0;
var messChat = 0;
var messArray = [];
var filterText;
 
function SetScrollHP(enabled) {
    if (enabled) {
        PluginsOnLoad["SetScrollHP"] = "TakeDropScroll";
    } else {
        PluginsOnLoad["SetScrollHP"] = "";
        clearInterval(setTimer[mylogin]);
        stepClick = 0;
        if (Pause) { ChangeTime(); }
    }
}
 
function TakeDropScroll() {
  if (top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i)) {
     if (external.inBattle) {
         clearInterval(setTimer[mylogin]);
         if (Pause) { ChangeTime(); }
     } else {
         var ParsDrop = top.frames[external.mainFrameIndex].document.documentElement.outerHTML;
         if (ParsDrop.indexOf("подняли 'Восстановление энергии") > 0) {
             colScroll = colScroll + 1;
             external.AddToChat("Подняли свиток! Свитков на руках = "+colScroll+" шт.");
         }
         var itemDrop = $('h4',get_mainframe().document).text();
         if (!(itemDrop.indexOf("разбросаны")+1) && colScroll > 0) {
             setTimer[mylogin] = setInterval('setScroll()', getRndTime(timePLmin, timePLmax));
         }
    }
  } else {
    if (!external.inBattle && messChat == 0) {
        // < - Парсилка чата - >
        $(".Chat",top.Chat.Self.arrLogs.oChat.oFrame).each(function(){ var messTMP = this.innerText; if (messTMP.indexOf("Восст") > -1) { FindMess(messTMP); } });
    }
  }
}
 
function FindMess(messTMP){
  if (messArray.indexOf(messTMP) < 0) {
    messArray = messArray + messTMP+" // ";
    setTimer[mylogin] = setInterval('setScroll()', getRndTime(timePLmin, timePLmax));
    messChat = 1;
  }
}
 
function setScroll(){
  if (!Pause) { ChangeTime(); }
  if (stepClick == 0) {
      $('img[title="Настройки/Инвентарь"]',top.frames["bottom"].document).each(function(){ this.click(); });
      stepClick = 1;
  } else if (stepClick == 1) {
      external.ClickLink("Фильтр",2);
      stepClick = 2;
  } else if (stepClick == 2) {
      filterText = top.frames[external.mainFrameIndex].document.getElementsByName("filter");
      if (filterText[0].value != "восс") {
          filterText[0].value = "восс";
      }
      stepClick = 3;
  } else if (stepClick == 3) {
      $('input[name="subfilter"]',get_mainframe().document).each(function(){ this.click(); });   
      stepClick = 4;
  } else if (stepClick == 4) {
      if (get_mainframe().document.all[0].innerHTML.indexOf('main.pl?set=cureHP') > -1) {
          external.ClickLink("надеть",2);
      } else {
          stepClick = 5;
      }
  } else {
      $('input[value="Вернуться"]',get_mainframe().document).each(function(){ this.click(); });
      clearInterval(setTimer[mylogin]);
      stepClick = 0;
      colScroll = 0;
      messChat = 0;
      if(Pause) { ChangeTime(); }
  }
}
 
function ChangeTime(){
  if (!Pause) {
     external.Stop();
     Pause = true;
  } else {
     external.Start();
     Pause = false;
  }
}
 
function getRndTime(timePLmin, timePLmax){
   return Math.floor(Math.random() * (timePLmax - timePLmin + 1)) + timePLmin;
}


Доработано:

  • Организованна функция, одевания свитков полученных за выполнение суточного Задания

275

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

работаю над этим вопросом... ни как не могу выцепить ссылку на одевания свитка...
всю башку сломал... smile
Ссылка имеет вид

http://dreamscity.combats.com/main.pl?set=cureHP45&n=ХХ&sd4=YYYYYYYY&tmp=RRRRRRR

не могу вытащить XX и YYYYYYYY
XX - порядковый номер свитка в инвентаре
YYYYYYYY - номер свитка (наверное ID)

так то линк такой

"http://" + external.SCity.Text + ".combats.com/main.pl?set=cureHP45&n=" + numScroll[1] + "&sd4=" + numScroll[2] + "&tmp=" + Math.random();

надо выцепить переменный numScroll[1] и numScroll[2]
Пытаюсь выцепить через регулярки в главном фрейме, когда там открыт инвентарь....

var ScanScroll = /\?set=cureHP45&n=(\d+)&sd4=(\d+)&/ig;
var numScroll = ScanScroll.exec(external.mainFrameIndex);

но пока что то ни как....