Re: Плагин плавки вещей
var tempLink = "";
var melterRoom = '';
var melterTimer = {};
var itemsToMelt = [];
itemsToMelt.push("item");
var classOfRune = "f";
/*
f == Воин
m == Маг
r == Стрелок
a == Все
*/
function Melter(enabled)
{
if(enabled)
{
if(typeof external.GetVal("melterFinished") == "undefined") external.InitVal("melterFinished",false);
melterTimer[mylogin] = setInterval("melterHandler()",3000);
}
else
{
clearInterval(melterTimer[mylogin]);
}
}
function ArrayContains(txt)
{
try
{
for(var i = 0; i < itemsToMelt.length; i++)
{
var patt = "MoveItem\\([^>]*>" + itemsToMelt[i];
if(txt.outerHTML.match(patt))
return true;
}
return false;
}
catch(err)
{
external.AddToChat("error");
}
}
function melterHandler()
{
try
{
if(top.Battle.bInBattle || !external.Started() || !external.dungeonEnabled) return;
if(top.frames[external.mainFrameIndex].location.toString().match(/dungeon\d+\.pl/i))
{
external.SetVal("melterFinished",false);
return;
}
var melterTmp = top.frames[external.mainFrameIndex].document.all[0].innerHTML;
var itemsToMelt = '';
if(melterRoom = melterTmp.match(/<nobr>([^<]+)<\/nobr>/))
melterRoom = String(melterRoom[1]);
else melterRoom = "unknown";
if(external.GetVal("melterFinished") == false)
{
if (melterRoom == "Грибница" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Грибная поляна",2);
else if (melterRoom == "Грибная поляна" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Странное Место",3);
else if (melterRoom == "Странное Место" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Грибная лужайка",3);
else if (melterRoom == "Грибная лужайка" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Центральная грибница",3);
else if (melterRoom.match(/Вокзал|Центральная грибница|Песочные Врата/) && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Вокзал",3);
else if (melterRoom == "Вокзал" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Портал",3);
else if (melterRoom == "Спуск в Катакомбы" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Спуск в катакомбы",2);
else if (melterRoom == "Спуск в катакомбы" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Дорога Храбрости",3);
else if (melterRoom == "Дорога Храбрости" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Разлом Поклонения",3);
else if (melterRoom == "Разлом Поклонения" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Центральный Разлом",3);
else if (melterRoom == "Центральный Разлом" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Безымянная Башня",3);
else if (melterRoom == "Безымянная Башня" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Летучий Разлом",3);
else if (melterRoom == "Летучий Разлом" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Вокзал",3);
else if (melterRoom == "Пещеры Мглы" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Внутренний двор",2);
else if (melterRoom == "Внутренний двор" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Последний Привал",3);
else if (melterRoom == "Последний Привал" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Цветочный Пустырь",3);
else if (melterRoom == "Цветочный Пустырь" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Центральный Оазис",3);
else if (melterRoom == "Центральный Оазис" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Песочные Врата",3);
else if (melterRoom == "Портал" && external.SCity.Text != "dungeon")
{
if(melterTmp.match("Abandoned Plain<\/B> еще"))
{
external.SetVal("melterFinished",true);
return;
}
var frms = top.frames[external.mainFrameIndex].document.forms;
for(var i = 0; i < frms.length; i++)
if(frms[i].innerHTML.match("Abandoned Plain"))
{
var btns = frms[i].getElementsByTagName("input");
for(var j = 0; j < btns.length; j++)
if(btns[j].value == "Войти в портал" && btns[j].style.visibility != "hidden")
{
btns[j].click();
return;
}
}
}
else if (melterRoom == "Портал" && external.SCity.Text == "dungeon" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Центральная площадь",2);
else if (melterRoom == "Центральная площадь" && external.SCity.Text == "dungeon" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Храм Знаний",3);
else if (melterRoom == "Храм Знаний" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Алтарь Предметов",3);
else if(melterRoom == "Алтарь Предметов")
{
var rn = "";
if(rn = melterTmp.match("Получена руна \"([^\"]*)\".")) external.AddToChat("Получена руна " + rn[1]);
if(itemsToMelt = melterTmp.match("Растворение предметов \\(пригодных: ([0-9]+)"))
{
if(itemsToMelt[1] > 0)
{
if(!top.frames[external.mainFrameIndex].document.getElementById("frmbtn"))
{
var anchs = top.frames[external.mainFrameIndex].document.links;
for(var i = 0; i < anchs.length; i++)
if(anchs[i].onclick && ArrayContains(anchs[i]))
{
anchs[i].click();
return;
}
external.SetVal("melterFinished",true);
}
else
{
var rdbtn = top.frames[external.mainFrameIndex].document.getElementsByName('c');
for(var i = 0; i < rdbtn.length; i++)
if(rdbtn[i].style.visibility != "hidden" && rdbtn[i].value == classOfRune && rdbtn[i].checked == false)
{
rdbtn[i].checked = true;
break;
}
top.frames[external.mainFrameIndex].document.getElementById("frmbtn").click();
}
}
else
{
external.SetVal("melterFinished",true);
return;
}
}
else if(itemsToMelt = melterTmp.match("Выбор рун \\(пригодных: ([0-9]+)"))
{
if(!top.frames[external.mainFrameIndex].document.getElementById("frmbtn"))
{
tempLink = "";
var anchs = top.frames[external.mainFrameIndex].document.links;
for(var i = 0; i < anchs.length; i++)
if(String(anchs[i].onclick).match(new RegExp("MoveItem\\(new Item\\([0-9]+, \"([^\"]*)\"[^>]*>",'i')))
{
if(tempLink == "") tempLink = anchs[i];
else if(GetRuneLevel(tempLink) < GetRuneLevel(anchs[i])) tempLink = anchs[i];
}
if(tempLink != "") tempLink.click();
}
else top.frames[external.mainFrameIndex].document.getElementById("frmbtn").click();
}
}
}
else if(external.GetVal("melterFinished") == true)
{
if(melterRoom == "Алтарь Предметов" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Храм Знаний",2);
else if(melterRoom == "Храм Знаний" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Центральная площадь",3);
else if (melterRoom == "Центральная площадь" && external.SCity.Text == "dungeon" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Портал",3);
else if (melterRoom == "Портал" && external.SCity.Text == "dungeon")
{
for(var i = 0; i < top.frames[external.mainFrameIndex].document.forms.length; i++)
if(top.frames[external.mainFrameIndex].document.forms[i].innerHTML.match(/Возврат \([^\<]*\)/))
{
var btns = top.frames[external.mainFrameIndex].document.forms[i].getElementsByTagName("input");
for(var j = 0; j < btns.length; j++)
if(btns[j].value == "Войти в портал" && btns[j].style.visibility != "hidden")
{
btns[j].click();
return;
}
}
}
else if (melterRoom == "Портал" && external.SCity.Text != "dungeon" && top.frames[external.mainFrameIndex].check_access())
{
if(external.SCity.Text == "suncity") external.ClickLink("Центральная грибница",2);
if(external.SCity.Text == "demonscity") external.ClickLink("Вокзал",2);
if(external.SCity.Text == "sandcity") external.ClickLink("Песочные врата",2)
}
else if (melterRoom == "Летучий Разлом" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Безымянная Башня",3);
else if (melterRoom == "Безымянная Башня" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Центральный Разлом",3);
else if (melterRoom == "Центральный Разлом" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Разлом Поклонения",3);
else if (melterRoom == "Разлом Поклонения" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Дорога Храбрости",3);
else if (melterRoom == "Дорога Храбрости" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Спуск в катакомбы",3);
else if (melterRoom == "Спуск в катакомбы" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Спуск в Катакомбы",3);
else if (melterRoom == "Центральная грибница" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Грибная лужайка",3);
else if (melterRoom == "Грибная лужайка" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Странное Место",3);
else if (melterRoom == "Странное Место" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Грибная поляна",3);
else if (melterRoom == "Грибная поляна" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Грибница",3);
else if (melterRoom == "Песочные Врата" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Центральный Оазис",3);
else if (melterRoom == "Центральный Оазис" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Цветочный Пустырь",3);
else if (melterRoom == "Цветочный Пустырь" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Последний Привал",3);
else if (melterRoom == "Последний Привал" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Внутренний двор",3);
else if (melterRoom == "Внутренний двор" && top.frames[external.mainFrameIndex].check_access())
external.ClickLink("Пещеры Мглы",3);
}
}
catch(err)
{
external.AddToChat("err");
}
}
function GetRuneLevel(link)
{
return link.outerHTML.match(new RegExp("MoveItem\\(new Item\\([0-9]+, \"([^\"]*)\"[^>]*>",'i'))[1].match(/rune2_(\d*)_\d*_\d*/)[1];;
}
Помогите доработать, в демонсе не входит с вокзала в портал и не летит в абб, а на обратном пути не выходит с портала демонс(( остальное вроде пашет.