Эксперементальная версия.
Прошу потестировать только тех людей, которые уже DungeonLog использовали и знают, как он работает.
var SellCost=0.5; //Цена чека(лучше чуть занизить)
var SellCostSum = 9; //Общая цена всех чеков в инвентаре для продажи
var Current = 0.95; //Проценты, при которых ваш бот начинает подабвать заявки на бой(из настроек)
function DungeLog(enabled)
{
if(enabled)
{
PluginsOnLoad["DungeLog"] = "LogHandler";
}
else
{
PluginsOnLoad["DungeLog"] = "";
}
}
function LogHandler(){
if (!external.inBattle){
var itemlog1 = top.frames[3].document.all[0].outerHTML.match(/Вы подняли \'(.+)\'/);
var itemlog2 = top.frames[3].document.all[0].outerHTML.match(/Вы получили \'(.+)\'/);
if(itemlog1){
if(itemlog1[1]=="Бумага")
BumagaCheck();
else
SaveLog(itemlog1[1]);
}
if(itemlog2)
{
if(itemlog1[1]=="Бумага")
BumagaCheck();
else
SaveLog2(itemlog2[1]);
}
}
}
function BumagaCheck(){
external.dungeonEnabled=false; //Прекратит поход
external.SBattleAbovePercent.Text = 200; //Прекратит бои
//Это чтоб при проверке инвентаря не произошло обновления страницы
var cost=0;
var costSum = 0;
var myArray;
var myRe = new RegExp("target\=\_blank\>Бумага[^~]{1,}Цена\: (.+) кр","gi");
var testingtext = doLoadInv("http://" + external.SCity.Text + ".combats.com/main.pl?edit=4&" + Math.random());
alert(testingtext);
while ((myArray = myRe.exec(testingtext)) != null)
{
cost = myArray[1];
costSum = costSum + cost;
}
SaveLog2("Бумагу стоимостью "+cost+"кр.\nВ инвентаре чеков на "+costSum+".кр"); //Фиксируем в логе событие о поднятой бумаге
if(cost>=SellCost||costSum>=SellCostSum) //Если бумага стоит столько, сколько мы хотим. Или если общая сумма всех чеков в инветаре подходит для выхода из данжа и продажи.
{
top.frames[3].location = top.frames[3].document.links[0].href; //Выйти из данжа
}
else
{
external.dungeonEnabled=true; //Продолжаем поход
external.SBattleAbovePercent.Text = Current; //Возвращаем возможность начинать бои
}
}
function SaveLog(Mes){
var now1 = new Date();
var localtime1 = now1.toString();
var resultfile = external.LoadFile(mylogin+".txt");
resultfile=resultfile+localtime1+"\n Вы подняли "+Mes+"\n\n";
external.SaveFile(mylogin+".txt",resultfile);
}
function SaveLog2(Mes){
var now1 = new Date();
var localtime1 = now1.toString();
var resultfile = external.LoadFile(mylogin+".txt");
resultfile=resultfile+localtime1+"\n Вы получили "+Mes+"\n\n";
external.SaveFile(mylogin+".txt",resultfile);
}
function doLoadInv(url) {
var req;
if (window.XMLHttpRequest)
req = new XMLHttpRequest();
else
req = new ActiveXObject("Microsoft.XMLHTTP");
req.open("GET", url, false);
req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); //чтоб не кэшировались GET запросы
req.send(null); // отправить запрос
return req.responseText;
}
Алгоритм:
1) Задаются параметры
2) Если поднимается какая-либо вещь, кроме бумаги, она заносится в лог-файл, как и раньше.
3) Если поднимается бумага, то запускается функция BumagaCheck():
3.1) Сперва останавливает поход и устанавливает %ХП для начала боя таким, чтоб бот всегда оставался в состоянии "Восстанавливаю ХП". Это для того, чтоб в процессе проверки инвентаря не произошло резкого обновления фрейма, результат которого может либо вобще не сказаться на работе, либо сказаться плохо...я ещё не решил Поэтому всётаки решил оставить эту заглушку.
3.2) Далее невидимым человеку запросом проверяется инвентарь и ищется Бумага. Отдельно выделяется Цена бумаги. Через цикл происходит сложение всех Цен бумаг для варианта "Продать, если чеков на 20кр." например. И, через него же сохраняется цена самого нижнего в инвентаре чека(который и должен оказаться последним поднятым).
3.3) Происходит запись в лог-файле общем. Пример записи:
"Вы получили Бумагу стоимостью 5кр.
В инвентаре чеков на 15кр."
3.4) Если цена последнего поднятого чека, или сумма всех чеков больше указанных в самом начале файла, то происходит выход из данжа(при этом бот не будет делать ничего: ни пытаться пойти в данж, ни пытаться создать бой). Иначе высавляются обратно параметры для продолжения похода и для подач/приёма заявок на бои.
Недочёты:
Понятия не имею ещё...
Но точно знаю, что когда скрипт выставляется параметр на прекращение похода, то галочка в меню не снимается. Этого пугаться не надо. Там просто галочку снял-поставил и бот снова пойдёт в поход.
Опять же не проверено совсем - нету времени
Уже убегать надо
Software is like sex: it's better when it's free! © LinusTorvalds