Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Активные темы Темы без ответов
Настройки поиска (Страница 13 из 21)
Combots Бот для БК » Сообщения от Exile
Страницы Назад 1 … 11 12 13 14 15 … 21 Далее
Темы от Exile Расширенный поиск
Сообщений найдено [ с 301 по 325 из 521 ]
Вроде починил.
var uspeh=false;
var room ='';
var randomValue;
var min = 360000;
var max = 400000;
function zadanie(enabled)
{
if(enabled)
{
zadanieTimer = setInterval("zadanieHandler()",2000);
proverkaTimer = setInterval("proverkaHandler()",1000);
}
else
{
clearInterval(zadanieTimer);
clearInterval(proverkaTimer);
}
}
function proverkaHandler()
{
clearInterval(proverkaTimer);
randomValue = Math.floor(Math.random()*(max - min) + min);
proverkaTimer = setInterval("proverkaHandler()", randomValue);
var tempstr = '';
var temp_inf = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?skills=1&rand=" + Math.random());
if(external.SCity.Text == "suncity")
tempstr = "Suncity - Рыцарь первого круга, 24999 / 24999";
if(external.SCity.Text == "sandcity")
tempstr = "Sandcity - Рыцарь первого круга, 10000 / 24999";
if(external.SCity.Text == "angelscity")
tempstr = "Angels city - Рыцарь первого круга, 10000 / 24999";
if(external.SCity.Text == "demonscity")
tempstr = "Demons city - Рыцарь первого круга, 24999 / 24999";
if(external.SCity.Text == "mooncity")
tempstr = "Mooncity - Рыцарь первого круга, 24999 / 24999";
if(temp_inf.indexOf(tempstr) > -1 )
{
top.Chat.Self.AddMessage("Задания не требуется");
uspeh = true;
return;
}
if(!temp_inf.toLowerCase().match(external.SCity.Text + " - "))
{
top.Chat.Self.AddMessage("Требуется взять задание");
uspeh = false;
}
else
{
top.Chat.Self.AddMessage("Задания не требуется");
uspeh = true;
}
}
function zadanieHandler()
{
try
{
var temp_p = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
room = String(room[1])
external.battleWeared = false;
if(uspeh==false)
{
if (room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Грибная лужайка");
else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Странное Место");
else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Грибная поляна");
else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Грибница");
else if(room == "Бойцовский Клуб" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Центральная грибница");
else if(room == "Зал воинов" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Бойцовский Клуб");
else if(room == "Зал воинов 2" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Бойцовский Клуб");
else if(room == "Зал воинов 3" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Бойцовский Клуб");
else if(top.frames[external.mainFrameIndex].document.getElementsByName("pass").length > 0 && uspeh == false)
{
if(!top.frames[external.mainFrameIndex].location.toString().match(/ql=/))
{
var btn = get_mainframe().document.getElementsByTagName("INPUT");
for(i = 0;i<btn.length;i++)
{
if(btn[i].outerHTML.match(/Задания/) && btn[i].style.visibility!="hidden")
{
btn[i].click();
break;
}
}
}
top.Chat.Self.AddMessage("Проверяю условие");
if(!get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity: 0/) && top.frames[external.mainFrameIndex].document.getElementsByName("getquest").length > 0)
{
top.frames[external.mainFrameIndex].document.getElementsByName("getquest")[0].click();
uspeh=true;
top.Chat.Self.AddMessage("Работает взятие задания");
}
else uspeh = true;
if(get_mainframe().document.all[0].innerHTML.match(/Вы получили новое задание/)) uspeh=true;
if(uspeh == true)
{
top.Chat.Self.AddMessage("Работает выход из комнаты");
btn = get_mainframe().document.getElementsByTagName("INPUT");
for(i = 0;i<btn.length;i++)
{
if(btn[i].outerHTML.match(/Вернуться/) && btn[i].style.visibility!="hidden")
{
btn[i].click();
break;
}
}
}
}
}
else
{
if(room == "Грибница" && top.frames[external.mainFrameIndex].is_accessible)
{
var tmp = get_mainframe().document.getElementsByTagName("a");
for(i = 0;i<tmp.length;i++)
{
if(tmp[i].outerHTML.match(/Грибная поляна/) && tmp[i].style.visibility!="hidden" && tmp[i].onclick)
{
tmp[i].click();
break;
}
}
}
else if(room == "Грибная поляна" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Странное Место");
else if(room == "Странное Место" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Грибная лужайка");
else if(room == "Грибная лужайка" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Центральная грибница");
else if(room == "Центральная грибница" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Бойцовский Клуб");
else if(room == "Бойцовский Клуб" && top.frames[external.mainFrameIndex].is_accessible)
Walk("Зал воинов");
}
}
catch(err)
{
top.Chat.Self.AddMessage("Ошибка! Ебем гусей!");
}
}
function Walk(name)
{
var imgs = get_mainframe().document.getElementsByTagName("IMG");
for(i = 0;i<imgs.length;i++)
{
if(imgs[i].outerHTML.match(name) && imgs[i].style.visibility != "hidden" && imgs[i].onclick && (imgs[i].height*imgs[i].width)>60)
{
top.Chat.Self.AddMessage("Иду в " + name);
imgs[i].click();
break;
}
}
}
function doLoad(url)
{
if (window.XMLHttpRequest)
req = new XMLHttpRequest();
else
req = new ActiveXObject("Microsoft.XMLHTTP");
req.open("GET", url, false); // задать параметры методу open
req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //чтоб не кэшировались GET запросы
req.send(null); // отправить запрос
return req.responseText;
}
Добавил проверку на кол-во репы. Не тестил.
Оказывается, на странице задания нету имени комнаты.
Может быть потому что эта фунция вызывается zadanieHandler()-м, где уже прописан интервал в 5 сек?
Именно поэтому.
хотя последний кусок кода, который я написал - рабочий.
Я его и тестил. Он рабочий до тех пор, пока бот нормально обновляет external.room_name
Нашел у тебя недочет:
ты ставишь обновление страницы скилов раз в 6 мин. только вот страница эта у тебя обновляется каждые 5сек из zadanieHandler().
Gorlum, надо менять логику на проверку текущий комнаты.
external.room_name не катит. Только что проверял, почему у тебя не сработал переход за заданием. У меня он не заработал тоже. А потому, что external.room_name выдал мне ЗВ1.
Посему, надо вернуться к методу, парсинга из сорцов страницы, а именно так, как это делал анахроник в своем плагине:
var room ='';
var temp_p = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
if(room = temp_p.match(/<nobr>([^<]+)<\/nobr>/))
room = String(room[1])
Затем, наклепал вот такой вот безопасный кусочек кода нажатия кнопки Задания.
var buttnos = get_mainframe().document.getElementsByTagName("INPUT");
for(i = 0;i<buttnos.length;i++)
{
if(buttnos[i].outerHTML.match(/Задания/) && buttnos[i].style.visibility!="hidden")
{
buttnos[i].click();
break;
}
}
Это так, для наглядности. Ибо прямые адреса перехода по улицам палевны.
gorlum пишет:Значит должно быть как-то так:
else if(external.room_name == "Грибница" && uspeh==false){
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
if(!get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/) && get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/))
{
get_mainframe().document.getElementsByName("getquest")[0].click();
top.Chat.Self.AddMessage("Работает взятие задания");
}
var temp_inf = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?skills=1&rand=" + Math.random());
if(temp_inf.match(/Время до смены задания:/))
uspeh=true;
top.Chat.Self.AddMessage("Проверяю наличие задания");
if(get_mainframe().document.all[0].innerHTML.match(/Для вас нет заданий в этом подземелье.../))
//Для вас нет заданий в этом подземелье...Задания отсюда недоступны///// пока что поставил 1-й вариант, чтобы проверить работоспособность
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();
top.Chat.Self.AddMessage("Работает выход из комнаты");
}
}
Добавил ещё одну проверку, именно после клацанья на получение. Правда протестить не могу, нету чаров с возможностью взятия задания в сане.
Тогда уж лучше так:
else if(external.room_name == "Грибница" && uspeh==false)
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
if(get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/) && !get_mainframe().document.all[0].innerHTML.match(/24999/))
{
get_mainframe().document.getElementsByName("getquest")[0].click();
uspeh=true;
top.Chat.Self.AddMessage("Работает взятие задания");
}
if(get_mainframe().document.all[0].innerHTML.match(/Вы получили новое задание/)) uspeh=true;
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();
top.Chat.Self.AddMessage("Работает выход из комнаты");
}
descalui пишет:да, и еще, если их осталось только 2 , только эти 2 особи(ну может и одна), как сделать так чтоб юзал только волю к победе?
if(EnemiesCount == 1 && (top.Battle.oBattle.sEnemyLogin.indexOf("Монстр 1") > -1 || top.Battle.oBattle.sEnemyLogin.indexOf("Монстр 2") > -1))
_name = "hit_willpower";
else if (EnemiesCount == 2)
{
var enemies = top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[1].sList.split(", ");
if(((enemies[0].indexOf("Монстр 1") > -1) || (enemies[0].indexOf("Монстр 2") > -1)) && ((enemies[1].indexOf("Монстр 1") > -1) || (enemies[1].indexOf("Монстр 2") > -1)))
_name = "hit_willpower";
}
else if(top.Battle.oBattle.sEnemyLogin.indexOf("Монстр 1") > -1 || top.Battle.oBattle.sEnemyLogin.indexOf("Монстр 2") > -1)
_name = "hit_empower";
else
_name = "hit_willpower";
Что-то типа такого
descalui пишет:определенная группа монстров, и среди них 2 моба по-сильнее остальних, как сделать так что при размене с этими 2-мя особями по-сильнее бот юзал усиленные удары, а при размене с остальными - волю к победе! ну или наоборот!
if(top.Battle.oBattle.sEnemyLogin.indexOf("Монстр 1") > -1 || top.Battle.oBattle.sEnemyLogin.indexOf("Монстр 2") > -1)
_name = "hit_empower";
else
_name = "hit_willpower";
Если в любом случае нужно 6 мечей, тогда так.
if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 1 && (top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) < 33)
_name = "hit_willpower";
else if(parseInt(top.Battle.oBattle.arrRes["hit"].innerHTML) >= 6) _name = "hit_luck";
malrom пишет:Кстати [0-9] надо заменить на "любая цифра", не знаю просто как это в яваскрипте делается.. но как горлум написал, там будет искать текст [0-9]..
А зачем, пардон, ебаться с цифрами? 
Если в текущем городе будет задержка на задание, то достаточно будет взять
if(!get_mainframe().document.all[0].innerHTML.toLowerCase().match(external.SCity.Text + " - "))
uspeh = false;
gorlum пишет:Вставил это
else if(external.room_name == "Грибница" && uspeh==false){
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
if(!get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/) && get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/))
{
get_mainframe().document.getElementsByName("getquest")[0].click();
top.Chat.Self.AddMessage("Работает взятие задания");
}
if(get_mainframe().document.all[0].innerHTML.match(/Для вас нет заданий в этом подземелье.../))
//Для вас нет заданий в этом подземелье...Задания отсюда недоступны///// пока что поставил 1-й вариант, чтобы проверить работоспособность
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?" + Math.random();
uspeh=true;
top.Chat.Self.AddMessage("Работает выход из комнаты");
}
}
но теперь в грибнице после взятия задания не меняет успех в тру, то есть не идёт обратно.
Так, хорошо. А где именно ты после взятия задания изменяешь значение переменной?
Я вижу только в месте, где стоит проверка на то, что задания нельзя взять)
Кстати, я бы на твоем месте переделал проверку для "Для вас нет заданий в этом подземелье" след образом:
регуляркой выдирал бы значение Suncity: xxx репы.
И if(xxx == 24999) - выходим
malrom пишет:Тогда уж лучше считывать не "Время до смены задания", а:
1) "<ТЕКУЩИЙ_ГОРОД> city - [0-9] ч. [0-9] мин."
2) "<ТЕКУЩИЙ_ГОРОД> city - [0-9] мин."
3) "<ТЕКУЩИЙ_ГОРОД> city - [0-9] сек."
Т.к. получается что если делаешь задания на несколько городов, то бот не будет брать задание!
На несоклько городов еще очень рано замахиваться.
Тут хотя бы для текущего написать.
если uspeh==false, то выполняется строка
Так. Во первых ты не написал проверку, есть ли уже задание в Умениях.
Во вторых, нужна еще проверка на выполнение задания. А то выполнив, задание всё еще будет висеть, и бот всё еще будет ломиться его выполнять.
gorlum пишет:Да, и кста, что делает
function doLoad(url)
{
if (window.XMLHttpRequest)
req = new XMLHttpRequest();
else
req = new ActiveXObject("Microsoft.XMLHTTP");
req.open("GET", url, false); // задать параметры методу open
req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //чтоб не кэшировались GET запросы
req.send(null); // отправить запрос
return req.responseText;
}
?
Я её не первый раз вижу в плагинах, но не могу понять для чего она.
Загружает указанный урл и возвращает исходник загруженной страницы
Потому что лепишь таймер в одну переменную + setTimeout - однократное выполнение. Для твоих целей нужен setInterval
var uspeh=false;
function zadanie(enabled)
{
if(enabled)
{
zadanieTimer = setInterval("zadanieHandler()",5000);// тут ставил разный интервал что бы проверить, 5-10 секунд
proverkaTimer = setInterval("proverkaHandler()",360000);
}
else
{
clearInterval(zadanieTimer);
clearInterval(proverkaTimer);
}
}
И зачем передавать в proverkaHandler() переменную, если она у тебя глобальная?
Да, и для функции проверки, м.б. лучше сделать так:
function proverkaHandler()
{
var temp_inf = doLoad("http://" + external.SCity.Text + ".combats.com/main.pl?skills=1&rand=" + Math.random());
if(!temp_inf.match(/Время до смены задания:/)) uspeh=false;
top.Chat.Self.AddMessage("Проверяю наличие задания");
}
function doLoad(url)
{
if (window.XMLHttpRequest)
req = new XMLHttpRequest();
else
req = new ActiveXObject("Microsoft.XMLHTTP");
req.open("GET", url, false); // задать параметры методу open
req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //чтоб не кэшировались GET запросы
req.send(null); // отправить запрос
return req.responseText;
}
Два вопроса:
1.что именно показывает переменная uspeh
2.что делает external.battleWeared
Кровавое месиво пишет:Ребят, лучник не использует приемы "Занять позицию от защиты", "Занять позицию от атаки". Проблема только у меня или есть ещё?
Покажи код твоих приемов.
gorlum пишет:Exile пишет:gorlum пишет:Как-то так?
тут запуск этой функции каждые полчаса
if(!get_mainframe().document.all[0].innerHTML.match(/Время до смены задания: /))
uspeh=true;
Да, только вот в регулярке убери последний пробел после двоеточия. А то реагирует неправильно.
Кстати, вручную можно включить режим данжа?
Это как "вручную"?
Бот взял задание. Надо включить данж, чтобы он начал выполнять его. Программно это как-то можно сделать?
gorlum пишет:Как-то так?
тут запуск этой функции каждые полчаса
if(!get_mainframe().document.all[0].innerHTML.match(/Время до смены задания: /))
uspeh=true;
Да, только вот в регулярке убери последний пробел после двоеточия. А то реагирует неправильно.
Кстати, вручную можно включить режим данжа?
gorlum пишет:Exile пишет:gorlum пишет:Посмотрел через дебагбар закладку "Репутация", у неё есть id, которые равно L6, значит её можно нажать как-то так?
get_mainframe().document.getElementsById("L6")[0].click();
Зачем её нажимать?
Это лишь закладка цельной страницы, которая уже подгружена в documents.all[0]
То есть, можно сразу искать фразу "Время до смены задания: ", и по ней уже ориентироваться?
Конечно. Закладки - лишь для визуального удобства.
gorlum пишет:Посмотрел через дебагбар закладку "Репутация", у неё есть id, которые равно L6, значит её можно нажать как-то так?
get_mainframe().document.getElementsById("L6")[0].click();
Зачем её нажимать?
Это лишь закладка цельной страницы, которая уже подгружена в documents.all[0]
if((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) > 33)
_name = "hit_luck";
else if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 1)
_name = "hit_willpower";
else if(parseInt(top.Battle.oBattle.arrRes["hit"].innerHTML) >= 6) _name = "hit_luck";
Та все через дебагбар не потестишь, только отдельные функции...по крайней мере я только такое умею
Хреново( Ладно, будем по старинке.
Кстати, есть какой способ вывода всего текста, скажем, из document.all[0].innerHTML?
Через алерт выводит, но там скроллбара нету(
if(external.room_name == "Грибница")
{
if(!top.frames[external.mainFrameIndex].location.toString().match(/dungeon.pl?ql=/))
{
top.frames[external.mainFrameIndex].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl?ql=" + Math.random();
}
if(!get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/) && get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/))
get_mainframe().document.getElementsByName("getquest")[0].click();
}
Вот так будет правильнее
if(!get_mainframe().document.all[0].innerHTML.match(/Задания отсюда недоступны/) && get_mainframe().document.all[0].innerHTML.match(/Репутация в Suncity/))
get_mainframe().document.getElementsByName("getquest")[0].click();
Проверил этот кусок кода на боте. Работает.
ZhEkA_BK, как ты тестишь js в дебагбаре? Я чегойто найти не могу, где так сделать)
А то приходится тестить всё через плагины бота и алертами проверять работу)
Re: Форум (17 ответов, оставленных в Флейм)
Точно всё скопировал? или в коде забыл написать закрывающую скобку первого условия?
Но там нереальные бока с названиями комнат у меня были.
Вы должны зайти под своим именем, чтобы увидеть скрытый текст.
попробуешь там ссылку найти.
Ссылки нету. Зато есть имя кнопки == getquest
нажатие будет через
get_mainframe().document.getElementsByName("getquest")[0].click()
как-то так, я не проверял)
Сообщений найдено [ с 301 по 325 из 521 ]
Страницы Назад 1 … 11 12 13 14 15 … 21 Далее
Combots Бот для БК » Сообщения от Exile
На основе PunBB
Currently installed 13 official extensions. Copyright © 2003–2009 PunBB.