126

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

Slafkin пишет:

Ты сначала разберись кому тут помощь нужна  big_smile

косяк мой... ошибся  big_smile

127

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

Slafkin
()

128

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

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

c4157b65bd9e957743a3ec4ee57e344f : if (typeof(delay) == "undefined") { var delay = 0; } if(dalay != 0) { clearInterval(setTimer[mylogin]); AttackMobs(); Walk("m1"); } else { external.Stop(); delay = delay + 1; var setTimer[mylogin] = setInterval('external.Start()', 30*60*1000); }

129

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

LEONxz, я так понимаю проблема в том что при любом количестве смертей выводи true?
Может проще дернуть значение со странице без участия экстернала?

130

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

semenspb, разобрался?
Я вернулся и командировки, если что могу подсобить...  smile

131

(45 ответов, оставленных в JavaScript)

вопрос по работе бота...
1. Как бот определяет что он в заявке? И как эту информацию можно дернуть в плагин? Через инфу из главного фрейма?
2. Не могу прикрутить включение бота при попадании в бой. Т.е. пишу плагин включения бота, если в главном фрейме идет бой через экстерналы. Делаю привязку плагина на обновление фрейма и тут вылазит косяк. Когда бот выключен, плагин не реагирует на обновление верхнего фрейма. Так и есть или я косячу?

132

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

Есть два варианта:
1. Прямой код в клетке.
2. Присвоение переменной через экстернат, для плагина остановки.

Замедлить бота это дохлый номер, пытался... Работает как получиться. Оптимальный вариант отключать и включать.
По 1.
Нужен симбиоз кода многократного диалога и функции отключения бота. Я на форуме выкладывал пример. Диалог по-моему в низинах(маршруты), а функция отключения в плагине одевания свитков.
Загонишь функцию отключения в через setIntrval в условие многократного диалога (поправить надо будет условия количества диалога).

По 2.
Недавно на форуме рассматривался вариант выполнения кода на опреденной клетке. Тема вроде называлась Выполнения скрипта в маршруте.
Суть такая через экстернал задаешь в клетке переменную и делаешь простой плагин на остановку бота с привязкой к обновлению фрейма, только надо добавить проверку переменной из маршрута.

С примером сейчас помочь не могу, но суть я думаю понятна.

133

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

semenspb
у тебя скорее всего плагин привязан к обновлению фрейма

PluginsOnLoad["Имя_плагина"] = "функция";

как вариант, после вызова функции отвязывать плагин от обновления фрейма и устанавливать таймер
что то вроде такого:

SPOILER Show

function Example(enabled) {
    if (enabled) {
       if (условие_проверки_диалога){
         ExamTimer[mylogin] = setInterval('DialogSay()', 5000); // запустили таймер на обработку диалогов
       }else {
        clearInterval(ExamTimer[mylogin]);
       }
    } else {
        clearInterval(ExamTimer[mylogin]);
    }
}
 
function DialogSay() {
  if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/С первого взгляда, напротив вас сидит/))
    external.ClickLink("И вам хорошего дня",2);
  else
  if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/это очень правильно, что ты зашел именно ко мне/))
    external.ClickLink("хорошо, я понял твой восторг",2);
  else
  if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/Кто сказал, что это будет вещь/))
    external.ClickLink("Готов взяться за любое задание",2);
  else
  if(top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/что мы с тобой нашли общий язык/))
    external.ClickLink("Да",2);
  else
}

как то так...

134

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

Lapti13,
приемы в бота не зашиваются.
Они прописываются отдельно.

135

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

ower
Тут есть инфа по определению уровня ХП соратника, через регулярку можно выцепить и ник
С регулярками надо разбираться
()

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

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

138

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

Гиря
есть несколько вариантов решения.
1. Не прописывать функцию UseObjects(); в местах, где не надо ни чего кликать.

2. Прописать конкретный код, для каждого конкретного кликабельного элемента:
2.1 По типу

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

где area[coords="65,62,185,182"] кусок кода страницы <area coords="65,62,185,182" ... вот как раз coords="65,62,185,182" - это координата объекта на экране на который будет идти клик

2.2 С использованием упрощенной функции

OrderedObjects("сундук,Водосток");

139

(45 ответов, оставленных в JavaScript)

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

SPOILER Show

var stepDayTask = 0;
 
function test(enabled) {
    if(enabled) {
        chatClearTimer[mylogin] = setInterval("testFN()", 10000);
        external.AddToChat("Запустили плагин");
    }else{
        clearInterval(chatClearTimer[mylogin]);
        var stepDayTask = 0;
 
    }
}
 
function testFN(){
  external.AddToChat("Вызов функции! stepDayTask = "+stepDayTask);
  if(stepDayTask == 0){
    $('[id^=header]').contents().find('#questspan').click();
    stepDayTask = stepDayTask + 1;
  }else if(stepDayTask == 1){
    external.AddToChat("Задание = "+$('.FRAME').contents().find('#quest_text').html());
    var dayPrizTMP = $('.FRAME').contents().find('#quest_rewards').text();
    //var dayPrizTMPstr = dayPrizTMP.valueOf();
    var dayPrizTMPstr = dayPrizTMP.toString();
    external.AddToChat("Награда = "+dayPrizTMP);
    external.AddToChat("Награда STR = "+dayPrizTMPstr);
    stepDayTask = stepDayTask + 1;
  }else if(stepDayTask == 2){
    external.AddToChat("Вошли в цикл!");
    if(dayPrizTMPstr.indexOf("Восста") > -1){
      external.AddToChat("Задание на свитки!");
    }else if(dayPrizTMPstr.indexOf("опыт") > -1){
      external.AddToChat("Задание на опыт!");
    }else{
      external.AddToChat("Задание на ХЗ!");
    }
    external.AddToChat("Клик!");
    $('.FRAME').contents().find('#min_button').click();
    stepDayTask = 0;
  }
}


перепробовал все что в голову пришло sad
причем если закоментить строки цикла проверки... все пашет... если нет подвисает
SPOILER Show

11:20:24 Запустили плагин
11:20:34 Вызов функции! stepDayTask = 0
11:20:44 Вызов функции! stepDayTask = 1
11:20:44 Награда = Наградой за выполнение задания будет:Восстановление энергии 150HP x 3
11:20:44 Награда STR = Наградой за выполнение задания будет:Восстановление энергии 150HP x 3
11:20:54 Вызов функции! stepDayTask = 2
11:20:54 Вошли в цикл!

Ладно.. надо попробовать через чат парсить... буду посылвать в чат текст задания и из него дергать сообщение... там точно indexOf пашет корректно...
Коряво конечно, ну что делать smile

140

(45 ответов, оставленных в JavaScript)

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

var dayPrizTMP = $('.FRAME').contents().find('#quest_rewards').text();
external.AddToChat("Награда = "+dayPrizTMP);

Результат следующий:

16:10:00 Награда = Наградой за выполнение задания будет:Восстановление энергии 150HP x 3

И тут собственно косяк.
Пытаюсь по контрольной фразе Восста определить, что награда свитки...
пробовал

if(dayPrizTMP.match(/Восста/)){
      external.AddToChat("Задание на свитки!");
}

и так

if(dayPrizTMP.indexOf("Восста") > - 1){
      external.AddToChat("Задание на свитки!");
}

вообще в никакую... sad
У какого какие соображения на этот счет?

141

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

ну к примеру зачистка сообщений бота (external.AddToChat)
да и просто спам о других проектах... за день простоя бота в онлайн, один фиг не осматриваешь все приваты и прочие сообщения...

Да и просто когда чат чистый -  мне приятнее, чем там всякая шляпа по написана smile

142

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

все упирается в то, что бот данный БК не поддерживает smile

143

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

siken_sss,
я решил для себя следующим путем.
Создал на компе новую учетку и стал запускать бота от имени этой учетки (под другим пользователем).
Проблема ушла.

144

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

очень вероятно, что косяк не в плагине, а в БК.
Что то народ сегодня в чате возмущался по поводу продаж.

145

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

Плагин: Очистка чата
Название файла: ClearChat.js
Размещение: \Combots\Plugins

Описание:
Очищает чат через заданный интервал времени.
Чистит все сообщения, в том числе сообщения через external.AddToChat().

Код плагина:

SPOILER Show

// Очистка чата v.1.0
var chatClearTimer = {};
var TimeClear = 300000; // интервал времени очистки
 
function ClearChat(enabled) {
  if(enabled) {
        chatClearTimer[mylogin] = setInterval(ClearMess, TimeClear);
    }else{
        clearInterval(chatClearTimer[mylogin]);
    }
}
 
function ClearMess(){
  $(".Chat",top.Chat.Self.arrLogs.oChat.oFrame).remove();
}

Я пользуюсь, может кому еще надо.

146

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

LEONxz молоток!
А я что то за чекбоксы зацепился и от них плясать стал smile
Запарсел все чекбоксы, потом выцепил id блоков и парился с привязкой id блока и названия вещи smile

147

(45 ответов, оставленных в JavaScript)

вопрос отпал

148

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

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

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

stepTimer[mylogin] = setInterval('sellLut()', getRndTime(timePLmin, timePLmax));

поменять на эту...

var errorMSG = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
if(!(errorMSG.indexOf("Произошла ошибка:")+1)){
    stepTimer[mylogin] = setInterval('sellLut()', 300000)); // запускаем через 5 мин.   
}else{
    stepTimer[mylogin] = setInterval('sellLut()', getRndTime(timePLmin, timePLmax)); // продолжаем работать штатно   
}

по идее теперь перед каждой продажей будет искать в главном фрейме текст "Произошла ошибка:" и в случае нахождения будет переназначать таймер на 5 мин.
в случае отсутствия текста будет идти штатно...
так или нет?

или неее... надо это проверять во время вызова функции sellLut... если текста нет... работаем шатано.. если есть... то тупо пропускаем весь код функции лут...

Короче нажо погулять... что то загонюсь я уже )))

149

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

есть такой екстернал void ExecScript(string script), я его не проверял, но он по идеи должен выполнять скрипт из подгружаемого файла...
как вариант создать отдельный скрипт test.js и вызвать его в маршруте через

external.ExecScript(".\\Plugins\\test.js");

по идее должен выполниться код в test.js

150

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

Leprekon812, как то так
Доработка кода продажи

SPOILER Show

if(!(sellTemp.indexOf("Скупка")+1)){  . 
    external.ClickLink("Продать вещи",4);
}else{
    clearInterval(sellTimer[mylogin]); // отключаем общий таймер плагина, что бы не перебивал работу продажи
    ChangeTime(); // вызов функции отключения бота
    stepTimer[mylogin] = setInterval('sellLut()', getRndTime(timePLmin, timePLmax)); // запускаем таймер вызова функции суллЛут, время генерим рандомно из фун. getRndTime
}

Функция самой продажи

SPOILER Show

function sellLut(){
    // stepSell - ввел переменную для того, что бы можно было разбить этапы продажи
    // если не бить на этапы выполнения кода... то при простом прогоне кода скрипт пролетает слишком быстро и не успевает выставлять чекбоксы и т.д.
    if(stepSell == 0){ // 
      filterText = top.frames[external.mainFrameIndex].document.getElementsByName("name_filter");  // в главном фрейме выцепляем элемент по имени name_filter - в коде страницы его видно - это поле фильтра
      filterText[0].value = itemsToSell[itemSell]; // присваиваем значение полю фильтра из массива вещей, [0] - так как у нас массив из 1го элемента (инфа по getElementsByName),
                                                   // itemsToSell[itemSell]; - массив вещей... itemSell - переменная для перебора
      $('input[name="filter"]',get_mainframe().document).each(function(){this.click();}); // клик по кнопке фильтр, 'input[name="filter"]' - селектор JQ для кода <input name="filter" ...
      if($(':checkbox',get_mainframe().document)){ // проверяем наличие чекбоксов на странице, ':checkbox' - селектор JQ дает массив чекбоксов
            stepSell = stepSell + 1; //  если чекбоксы есть (хотя бы один) переходим к этау № 1
      }else{
            stepSell = 3; // если чекбоксов нет, соответственно шмотки нет и выделять и продать не чего... переходим к этапу 3
      }
    }else if (stepSell == 1){ // проверяем этап 1
      $(':checkbox',get_mainframe().document).each(function(){this.click();});  // кликаем на чекбоксы (кликнет по всем чекбоксам в главном фрейме)
      stepSell = stepSell + 1;  // переходим на следующий этап
    }else if (stepSell == 2){  // проверяем этап 2
      $('#sell_button',get_mainframe().document).each(function(){this.click();}); // кликаем по кнопке, '#sell_button' - селектор JQ - в коде  id="sell_button"
      stepSell = stepSell + 1; // переходим на следующий этап
    }else{
      $('button[onclick*="return do_sell_checked();"]',get_mainframe().document).each(function(){this.click();});  // кликаем по кнопке подтверждения,
                                                                                                                   //'button[onclick*="return do_sell_checked();"]' - селектор JQ - в коде  <button onclick="return do_sell_checked();" ...
      stepSell = 0; // обнуляем этап, так как прошли всю цепочку
      itemSell = itemSell + 1; // прибавляем номер вещи - используем в массиве, т.е. прогнали вещь 1... перешли ко 2 й.
    }
    if(itemSell == itemsToSell.length){ // если порядковый номер вещи в массиве которую мы проверили = длине массива, значит она последняя
      sellDone = true;  // ключ = все продали
      ChangeTime();     // вызываем функцию вкл/выкл бота
      clearInterval(stepTimer[mylogin]); // трем таймер функции этапов продажи
      sellTimer[mylogin] = setInterval("SellAction()", 3000); // запускаем общий таймер плагина
    }
}

Функция остановки бота

SPOILER Show

function ChangeTime(){
  if (!Pause){ // проверяем статус паузы
     external.Stop();  // если пауза выключена false выключаем бота
     Pause = true;  // присваиваем значению Pause правда, что говорит о том, что бот выключен
  }else{
     external.Start();  // обратная ситуация
     Pause = false;
  }
}

функция рандомного времени

SPOILER Show

function getRndTime(timePLmin, timePLmax){  
   return Math.floor(Math.random() * (timePLmax - timePLmin + 1)) + timePLmin;   // возвращает рандомное значение в диапазоне  timePLmin - timePLmax
}

Доработки при выключении плагина

SPOILER Show

clearInterval(sellTimer[mylogin]); // стираем общий таймер плагина
clearInterval(stepTimer[mylogin]);  // стираем таймер продажи
stepSell = 0; // обнуляем этап продажи
itemSell = 0; // обнуляем порядковый номер шмотки которую продаем
if (Pause){ ChangeTime(); } // проверяем состояние Паузы... если она включена, значит бот выключен... соответственно переключаем