А что вам для этого требуется с моей стороны?
есть
external.DungeonLoadPath("канализация")
загружает маршрутный файл "канализация.path" из папки "Dungeon"
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Combots Бот для БК » Сообщения от anahronik
А что вам для этого требуется с моей стороны?
есть
external.DungeonLoadPath("канализация")
загружает маршрутный файл "канализация.path" из папки "Dungeon"
Если работает, оформите, пожалуйста, в виде отдельной темы с нормальным оформлением и инструкцией, как у других плагинов, чтобы можно было закрепить тему.
Да как бы оба ваши плагина по сути не отличаются вообще ничем
Разве что КликЛинк на прямую ссылку заменём...но я не рекомендую пользоваться прямыми ссылками, если КликЛинк с этим успешно справляется....
Эм...парни, вы сравните два первых сообщения в теме.
Точнее два написания пагина.
Так сказать, почувствуйте разницу.
Я плагин не переписывал, я его привёл в нормальный вид.
Просто посмотрите два варианта и сравните "Было так, а стало так...мммм...."
Тут такое дело...
В общем мы тебе врятли поможем, если фидбэк будет "Раньше работало, а сейчас - нет".
Предположения сделаны - твоё дело проверить, верны ли они. И только после того, как окажется, что они не верны - тогда дальше думать и надо.
Народ по 5 ботов на компе держит, в том числе на win8. Проблем не возникало.
Вывод: проблема в твоих настроках.
Какие настройки у бота есть? Да всего ничего: настройки самого бота из файла ca2 и плагины.
Рекомендую, как минимум, интервалы действий увеличить, как советовал qwerty.
Не ну простой без бота пару часов/дней - это вроде так себе повод не апгрейдить комп
С твоего позволения, я его в человеческий вид приведу
function NapadenieNaVozhda(enabled)
{
if(enabled)
{
//должна быть одна из двух строк
PluginsOnLoad["NapadenieNaVozhda"] = "NapadenieNaVozhdaHandler"; // работать по обновлению верхнего фрейма
}
else
{
//должна быть одна из двух строк
PluginsOnLoad["NapadenieNaVozhda"] = ""; // выключить обработку по обновлению верхнего фрейма
}
}
function NapadenieNaVozhdaHandler()
{
try
{
if(top.Battle.bInBattle) return;
var doc = get_mainframe().document.all[0].innerHTML;
if(doc.indexOf("Откуда ты знаешь, как меня зовут") > -1)
external.ClickLink("Откуда ты знаешь, как меня зовут",2);
else if(doc.indexOf("Ну, если так, то конечно, все понятно. Ну и что ты от меня хочешь?") > -1)
external.ClickLink("Ну, если так, то конечно, все понятно. Ну и что ты от меня хочешь?",2);
else if(doc.indexOf("Услуги? Что это за услуги?") > -1)
external.ClickLink("Услуги? Что это за услуги?",2);
else if(doc.indexOf("Хорошо! Согласен на твое предложение. Что нужно делать?") > -1)
external.ClickLink("Хорошо! Согласен на твое предложение. Что нужно делать?",2);
else if(doc.indexOf("Да.") > -1)
{
external.ClickLink("Да.",2);
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?rnd=" + Math.random() +"&path=rl";
}
}
catch(err)
{
//alert(err.description); // выводит сообщение, если в результате выполнения кода была получена ошибка. Если сообщения не нужна - удалить эту строку, оставив конструкцию try{}catch(err){}
}
}
1) Не Джава, а джаваскрипт. Это разные языки.
2) Основная проблема была в том, что ты пытался использовать match(//) там, где он не особо нужен.
Ну вот для примера, надо мне найти кусок текста "Стоимость: ??кр.", где ?? - цифры, которых я заранее не знаю.
Вот в этом случае мне нужен match, т.к. он умеер работать с регулярными выражениями(RegExp), которые можно назвать просто "маской". И будет это выглядеть так:
match(/Стоимость: \d+кр./), где \d - это спецсимвол, обозначающий любую цифру, а + после \d говорит, что \d должно быть в этой маске 1 и более раз подряд.
Символ точки в маске - это один любой символ.
Символ вопросительного знака сложен для объяснения, но это тоже спец-символ и именно из-за него у тебя зависало на услугах. надо было маску писать с экранированием: match(/Услуги\? Что это за услуги\?/).
Регулярки - тема не простая, но весьма занятная. Для тестирования есть сайты вроде ()
Вот, о чем я тут...короче, надо было обойтись простым indexOf() - возвращает индекс буквы, начиная с которой найдено совпадение строк.
Т.е. "Привет, как дела".indexOf("Привет") будет равен 0.
"Привет, как дела".indexOf("как") будет равен 8.
"Привет, как дела".indexOf("нормально") будет равен -1, т.к. последовательности символов такой в исходной строке встречено не было.
Перенесу ка я эту тему в ветку Javascript...
Добавляй, переставляй, а думать будем потом.
Нда.
Есть ещё фразы, на которых стопорится?
Про "пустой сундук" я у себя добавил - в следующем обновлении не будет стопориться.
На win8 бот работает без нареканий.
На IE10 бот работает без нареканий.
Не один человек уже проверял.
Где-то на форуме была инструкция по перезапуску ботов по интервалу времени...
Это вы сейчас о чем?
UseObjects(); не жмёт на сундук какой-то?
itemsToMelt.push("item"); - 5-ая строка в плагине
У тебя UseObjects(); AttackMobs(); повторялись два раза.
я твое сообщение отредактировал.
Первая строка твоя была верной.
Мой косяк - исправил в обновлении.
Обновление
Обновил в связи с обнаруженной проблемой выполнений external-функций из маршрутов пещер.
Для удобства выложил обновление в двух видах:
1) Старый-добрый установщик
2) Отдельный файл Program.exe, которым можно просто подменить ваш текущий файл.
Я вот то же мысль хочу высказать, а то функции без дела простаивают
Есть такой набор функций:
•external.InitVal(key,val) - если не существует переменной с именем key, то она создается и ей присваивается значение val. Если переменная уже есть - оставляет её значение без изменения
•external.SetVal(key,val) - как и InitVal, но присваивает значение в любом случае
•external.GetVal(key) - возвращает значение переменной key
Я их какрас и создавал для удобного обмена и хранения значений между разными аспектами бота: плагины, маршруты, приёмы.
Как я вижу использование.
Берём мою редакцию плагина. Я в неё добавил строку
external.SetVal("isTokenTraderClicked",true);
isTokenTraderClicked - просто набор букв.
Дальше маршрут:
1) В ячейку до обменника
координата : external.SetVal("isTokenTraderClicked",false); UseObjects(); AttackMobs(); Walk("куда-то");
2) В ячейку с обменником(вроде это та ячейка...не уверен)
1c5a3f3164a09ff92d3c9c517452bd1b : if(!external.GetVal("isTokenTraderClicked")) UseObjects(); AttackMobs(); Walk("rl");
Что должно получиться:
1) За одну ячейку до обменника мы говорим, что ещё не обменивались
2) На ячейке с обменником мы делаем UseObjects(); только если ещё не обменивались
3) Когда срабатывает плагин и нажимает Завершить диалог, устанавливается значение, что уже обменялись и повторного клика по обменнику быть не должно.
Ну логично.
Я в торопях за 5 минут до ухода с работы в условии вместо == написал = в двух строках.
Исправил.
И отвечайте, пожалуйста, без цитирования кода.
А я всё равно думаю, что плагин какой-нибудь виноват.
Чего-нить в БК поменялось - они и работают криво.
Попробуй так:
var _obmenFinished = false;
function Obmennik(enabled)
{
if(enabled)
{
PluginsOnLoad["Obmennik"] = "ObmennikHandler"; // работать по обновлению верхнего фрейма
}
else
{
PluginsOnLoad["Obmennik"] = ""; // выключить обработку по обновлению верхнего фрейма
}
}
function ObmennikHandler()
{
try
{
var _document = get_mainframe().document.all[0].innerHTML;
var _path = "empty";
if(_document.indexOf("Активировать устройство") > -1 && _obmenFinished == false)
_path = "Активировать устройство";
else if(_document.indexOf("Положить в устройство") > -1)
_path = "Обменять все";
else if(_document.indexOf("Устройство активировано") > -1)
{ _path = "Деактивировать"; _obmenFinished = true; }
else if(_document.indexOf("Активировать устройство") > -1 && _obmenFinished == true)
{ _path = "завершить разговор"; _obmenFinished = false; external.SetVal("isTokenTraderClicked",true); }
if(_path != "empty")
external.ClickLink(_path,2);
}
catch(err)
{
//alert(err.description); // выводит сообщение, если в результате выполнения кода была получена ошибка. Если сообщения не нужна - удалить эту строку, оставив конструкцию try{}catch(err){}
}
}
Код копировать через кнопку Цитировать!
Что-то тут не так.
Как бы начал писать я:
function Obmennik(enabled)
{
if(enabled)
{
PluginsOnLoad["Obmennik"] = "ObmennikHandler"; // работать по обновлению верхнего фрейма
}
else
{
PluginsOnLoad["Obmennik"] = ""; // выключить обработку по обновлению верхнего фрейма
}
}
function ObmennikHandler()
{
try
{
var _document = get_mainframe().document.all[0].innerHTML;
var _path = "empty";
if(_document.indexOf("Активировать устройство") > -1)
_path = "Активировать устройство";
else if(_document.indexOf("Обменять все фракционные предметы на жетоны.") > -1)
_path = "Обменять все";
else if(_document.indexOf("Деактивировать устройство.") > -1)
_path = "Деактивировать";
else if(_document.indexOf("Отойти от устройства. (завершить разговор)") > -1)
_path = "завершить разговор";
if(_path != "empty")
external.ClickLink(_path,2);
}
catch(err)
{
//alert(err.description);
}
}
Описание для external.ClickLink:
1) Первый параметр в скобках - что искать
2) Второй параметр в скобках - где искать
Второй параметр бывает:
// type:
// 1 - переход по картинке(поиск именно функции перехода), не чувствителен к регистру;
// 2 - поиск по текстовой ссылке,чувствителен к регистру;
// 3 - по найденному в картинке тексту(outerHTML), не чувствителен к регистру;
// 4 - поиск по value среди input-элементов,чувствителен к регистру;
// не задано - поиск во всех.
Плагин НЕ РАБОЧИЙ.
В нём не правильно было понято, что надо писать в if.
В условии должен быть однозначный признак того, что пора нажимать конкретную кнопку. Не то, что кнопка есть, а именно то, что её надо нажать.
Сделайте описание диалогов всех целиком, вот как в последних сообщениях. Тогда станет ясно, что можно искать на экране в качестве однозначного признака.
Или плагин какой-нибудь ушёл в бесконечный цикл.
Обновились до 9.2.8.10.
Есть планшеты от Acer с процессорами от intel и полноценной windows.
Но я их крааайне не рекомендую: ну не заточены они под пальцы + тормозные. Всёравно что дешёвский ноут без клавиатуры, но в два раза дороже.
Недавно Microsoft свой Surface Pro выпустила за ~1000$ и то трудно достать. Именно Pro версия сделана под полноценную Windows 8. Обычный Surface имеет Windows RT, а она уже ну совсем никакая.
211277,
твоё поведение негативно сказывается на данном ресурсе, поэтому я рацениваю данный поступок как направленное против меня действие.
Combots Бот для БК » Сообщения от anahronik