Ты сначала разберись кому тут помощь нужна
косяк мой... ошибся
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Combots Бот для БК » Сообщения от Andy_SPB
Ты сначала разберись кому тут помощь нужна
косяк мой... ошибся
Slafkin
()
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); }
LEONxz, я так понимаю проблема в том что при любом количестве смертей выводи true?
Может проще дернуть значение со странице без участия экстернала?
semenspb, разобрался?
Я вернулся и командировки, если что могу подсобить...
вопрос по работе бота...
1. Как бот определяет что он в заявке? И как эту информацию можно дернуть в плагин? Через инфу из главного фрейма?
2. Не могу прикрутить включение бота при попадании в бой. Т.е. пишу плагин включения бота, если в главном фрейме идет бой через экстерналы. Делаю привязку плагина на обновление фрейма и тут вылазит косяк. Когда бот выключен, плагин не реагирует на обновление верхнего фрейма. Так и есть или я косячу?
Есть два варианта:
1. Прямой код в клетке.
2. Присвоение переменной через экстернат, для плагина остановки.
Замедлить бота это дохлый номер, пытался... Работает как получиться. Оптимальный вариант отключать и включать.
По 1.
Нужен симбиоз кода многократного диалога и функции отключения бота. Я на форуме выкладывал пример. Диалог по-моему в низинах(маршруты), а функция отключения в плагине одевания свитков.
Загонишь функцию отключения в через setIntrval в условие многократного диалога (поправить надо будет условия количества диалога).
По 2.
Недавно на форуме рассматривался вариант выполнения кода на опреденной клетке. Тема вроде называлась Выполнения скрипта в маршруте.
Суть такая через экстернал задаешь в клетке переменную и делаешь простой плагин на остановку бота с привязкой к обновлению фрейма, только надо добавить проверку переменной из маршрута.
С примером сейчас помочь не могу, но суть я думаю понятна.
semenspb
у тебя скорее всего плагин привязан к обновлению фрейма
PluginsOnLoad["Имя_плагина"] = "функция";
как вариант, после вызова функции отвязывать плагин от обновления фрейма и устанавливать таймер
что то вроде такого:
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
}
как то так...
Lapti13,
приемы в бота не зашиваются.
Они прописываются отдельно.
ower
Тут есть инфа по определению уровня ХП соратника, через регулярку можно выцепить и ник
С регулярками надо разбираться
()
Update 4: v.2.1
Переписал парсилку чата, теперь нет необходимости в очистке чата и соответственно плагин не чистит чат.
Код добавлен в шапку.
Update 3: v.2.0
Добавлен парсинг чата на получение Свитков Восстановления по суточному заданию.
Важно: После парсинга свитка, в случае его обнаружения, идет очистка чата (целиком)
Код добавлен в шапку.
Гиря
есть несколько вариантов решения.
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("сундук,Водосток");
что то ни как...
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;
}
}
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 пашет корректно...
Коряво конечно, ну что делать
Пишу плагин взятия дневного задания.
вроде все ясно и просто, но встал косяк на ровном месте...
есть код
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("Задание на свитки!");
}
вообще в никакую...
У какого какие соображения на этот счет?
ну к примеру зачистка сообщений бота (external.AddToChat)
да и просто спам о других проектах... за день простоя бота в онлайн, один фиг не осматриваешь все приваты и прочие сообщения...
Да и просто когда чат чистый - мне приятнее, чем там всякая шляпа по написана
все упирается в то, что бот данный БК не поддерживает
siken_sss,
я решил для себя следующим путем.
Создал на компе новую учетку и стал запускать бота от имени этой учетки (под другим пользователем).
Проблема ушла.
очень вероятно, что косяк не в плагине, а в БК.
Что то народ сегодня в чате возмущался по поводу продаж.
Плагин: Очистка чата
Название файла: ClearChat.js
Размещение: \Combots\Plugins
Описание:
Очищает чат через заданный интервал времени.
Чистит все сообщения, в том числе сообщения через external.AddToChat().
Код плагина:
// Очистка чата 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();
}
Я пользуюсь, может кому еще надо.
LEONxz молоток!
А я что то за чекбоксы зацепился и от них плясать стал
Запарсел все чекбоксы, потом выцепил id блоков и парился с привязкой id блока и названия вещи
Alexander реально не мог он все продать
не такой он шустрый.. ну если что извини
LEONxz, суть понял...
надо подумать...
вообще изначально хотел что бы без фильтра сразу выделял нужный шмот и продавл за один заход... но по чекбоксам не смог название шмоток дернуть для сравнения... вот и пошел простым путем... отфильтровал и выделил все... и так по кругу
можно попробовать эту строку
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... если текста нет... работаем шатано.. если есть... то тупо пропускаем весь код функции лут...
Короче нажо погулять... что то загонюсь я уже )))
есть такой екстернал void ExecScript(string script), я его не проверял, но он по идеи должен выполнять скрипт из подгружаемого файла...
как вариант создать отдельный скрипт test.js и вызвать его в маршруте через
external.ExecScript(".\\Plugins\\test.js");
по идее должен выполниться код в test.js
Leprekon812, как то так
Доработка кода продажи
if(!(sellTemp.indexOf("Скупка")+1)){ .
external.ClickLink("Продать вещи",4);
}else{
clearInterval(sellTimer[mylogin]); // отключаем общий таймер плагина, что бы не перебивал работу продажи
ChangeTime(); // вызов функции отключения бота
stepTimer[mylogin] = setInterval('sellLut()', getRndTime(timePLmin, timePLmax)); // запускаем таймер вызова функции суллЛут, время генерим рандомно из фун. getRndTime
}
Функция самой продажи
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); // запускаем общий таймер плагина
}
}
Функция остановки бота
function ChangeTime(){
if (!Pause){ // проверяем статус паузы
external.Stop(); // если пауза выключена false выключаем бота
Pause = true; // присваиваем значению Pause правда, что говорит о том, что бот выключен
}else{
external.Start(); // обратная ситуация
Pause = false;
}
}
функция рандомного времени
function getRndTime(timePLmin, timePLmax){
return Math.floor(Math.random() * (timePLmax - timePLmin + 1)) + timePLmin; // возвращает рандомное значение в диапазоне timePLmin - timePLmax
}
Доработки при выключении плагина
clearInterval(sellTimer[mylogin]); // стираем общий таймер плагина
clearInterval(stepTimer[mylogin]); // стираем таймер продажи
stepSell = 0; // обнуляем этап продажи
itemSell = 0; // обнуляем порядковый номер шмотки которую продаем
if (Pause){ ChangeTime(); } // проверяем состояние Паузы... если она включена, значит бот выключен... соответственно переключаем
Combots Бот для БК » Сообщения от Andy_SPB