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

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 - направление движения, измени... куда тебе нужно...


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

252

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

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

253

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

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

254

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

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

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

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

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

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

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

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

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

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

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

$('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

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

258

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

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

259

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

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

260

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

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

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

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

262

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

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

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

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

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

264

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

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

265

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

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

266

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

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

267

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

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

268

(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;
}


Доработано:

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

270

(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);

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

271

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

Alexander пишет:

при этом варианте просто стоит перед оборванцем и все

в предыдущей клетке переменную задавал?

Вот код с текстовыми сообщениями.

2660b08d326e516137fd03509da085bb : if (typeof(say) == "undefined") { external.AddToChat("Создаю ключ для далога!"); var say = 0; external.AddToChat("Ключ = "+say); } if(say == 1) { external.AddToChat("Уже говорили! Уходим!"); Walk("rr"); } else { say = 1; external.AddToChat("Диалога не было! Начинаем!");  $('area[title="Оборванец"]',get_mainframe().document).each(function() { this.click(); $('a[onclick*="tn3_poors_default_2"]',get_mainframe().document).each(function(){this.click()})});}

вставь и посмотри, что будет в чате выдавать.

272

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

попробуй так...

var hp_natisk = (typeof(top.Battle.oBattle.oEnemySlot.arrEffects["hp_natisk"]) != "object") ? null : top.Battle.oBattle.oEnemySlot.arrEffects["hp_natisk"].innerHTML.match(/<br><span[^>]*>.(\d)?<\/span><\/div><img[^"]*".+\/hp_natisk\.gif">/i);
    hp_natisk = (hp_natisk != null) ? hp_natisk[1] : 0;
 
 
if((hp_natisk < 6) && (top.Battle.oBattle.sEnemyLogin.indexOf("Трупожор") > -1)){
    _name = "";      // <- название усиленных
}

Первоисточник ()

273

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

Pokemon15 пишет:
Andy_SPB пишет:

проверить сам не могу, но должно работать  smile
с какого лвл доступ в низины?

к оборванцу только 11 могут пройти

Возможно косяк в экстерналах...

Могу предложить следующий вариант...

378f623a6ffd92a4219d1d25a6836e12 : if (say == 1) { Walk("rr"); } else { say = 1; $('area[title="Оборванец"]',get_mainframe().document).each(function() { this.click(); $('a[onclick*="tn3_poors_default_2"]',get_mainframe().document).each(function(){this.click()})}); }

В клетке предыдущей 378f623a6ffd92a4219d1d25a6836e12, необходимо перед функцией Walk() задать переменную

var say = 0;

P.S. У меня 7ки мне до 11 долго smile

P.P.S. но мне все таки кажется, что код из 309 сообщения, должен работать... кто найдет ошибку поделитесь где не прав smile

274

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

проверить сам не могу, но должно работать  smile
с какого лвл доступ в низины?

275

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

код не рабочий - удалил