Тема: МОД от форумчан: Учёт параметров противника, гибкая настройка приёмов
Прежде чем вносить правки в файлы всегда делайте резервную копию!
Задача модификации: сделать доступными условия типа "Если у противника > 15 интеллекта, то..." по отношению к статам сила, ловкость, интуиция, выносливость, интеллект.
Также добавлена проверка, поставил ли размен ваш текущий противник.
Совместимость: версия 8.4+
Установка:
Открываем файл Main.js и находим функции "function DoWarriorBattle()" если вы играете за воина и "function DoWizardBattle()" если вы играете магом. Если вы играете с одной копии клиента и магом, и воином и вобще всеми своими персонажами - вносите изменения в обе функции.
Приводим их к виду:
function DoWarriorBattle()
{
var k = document.all[0].innerHTML;
var name = top.Battle.oBattle.sEnemyLogin;
if(name==top.Battle.oBattle.sMyLogin){
top.Battle.oBattle.arrButtons.refresh.click();
return;
}
name = name.replace(/\(/g,"\\(");
name = name.replace(/\-/g,"\\-");
name = name.replace(/\)/g,"\\)");
stati = k.match(name+"\<\/B\>\<BR\>Сила\: ([\-]{0,1}[0-9]+)\<BR\>Ловкость\: ([\-]{0,1}[0-9]+)\<BR\>Интуиция: ([\-]{0,1}[0-9]+)\<BR\>Выносливость: ([\-]{0,1}[0-9]+)\<BR\>(?:.){0,11}([\-]{0,1}[0-9]{0,3})");
Sila = stati[1];
Lovka = stati[2];
Inta = stati[3];
Vinos = stati[4];
if(stati[5]!="")Intell = stati[5];
else Intell = 0;
var checked = 0;
for(x=0;x<top.Battle.oBattle.oGroupsLayer.innerHTML.split(", ").length;x++)
{
var currEnemyLayer = top.Battle.oBattle.oGroupsLayer.innerHTML.split(", ")[x];
if(currEnemyLayer.match("/underline\".{1,2} \?\>"+name+"\</")){
IsUnderlined = true;
checked = 1;
}
if(checked == 0)
IsUnderlined = false;
}
var team1 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[0].sList;
var team2 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[1].sList;
var count_team1=top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[0].sList.split(", ").length;
var count_team2=top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[1].sList.split(", ").length;
if(team1.indexOf(top.Battle.oBattle.sMyLogin)>=0){
EnemiesCount=count_team2;
SoratnikiCount=count_team1;
}
if(team2.indexOf(top.Battle.oBattle.sMyLogin)>=0){
EnemiesCount=count_team1;
SoratnikiCount=count_team2;
}
DoWarriorPriem(1);
DoHit();
}
function DoWizardBattle()
{
var k = document.all[0].innerHTML;
var name = top.Battle.oBattle.sEnemyLogin;
if(name==top.Battle.oBattle.sMyLogin){
top.Battle.oBattle.arrButtons.refresh.click();
return;
}
name = name.replace(/\(/g,"\\(");
name = name.replace(/\-/g,"\\-");
name = name.replace(/\)/g,"\\)");
stati = k.match(name+"\<\/B\>\<BR\>Сила\: ([\-]{0,1}[0-9]+)\<BR\>Ловкость\: ([\-]{0,1}[0-9]+)\<BR\>Интуиция: ([\-]{0,1}[0-9]+)\<BR\>Выносливость: ([\-]{0,1}[0-9]+)\<BR\>(?:.){0,11}([\-]{0,1}[0-9]{0,3})");
Sila = stati[1];
Lovka = stati[2];
Inta = stati[3];
Vinos = stati[4];
if(stati[5]!="")Intell = stati[5];
else Intell = 0;
var checked = 0;
for(x=0;x<top.Battle.oBattle.oGroupsLayer.innerHTML.split(", ").length;x++)
{
var currEnemyLayer = top.Battle.oBattle.oGroupsLayer.innerHTML.split(", ")[x];
if(currEnemyLayer.match("/underline\".{1,2} \?\>"+name+"\</")){
IsUnderlined = true;
checked = 1;
}
if(checked == 0)
IsUnderlined = false;
}
var team1 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[0].sList;
var team2 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[1].sList;
var count_team1=top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[0].sList.split(", ").length;
var count_team2=top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[1].sList.split(", ").length;
if(team1.indexOf(top.Battle.oBattle.sMyLogin)>=0){
EnemiesCount=count_team2;
SoratnikiCount=count_team1;
}
if(team2.indexOf(top.Battle.oBattle.sMyLogin)>=0){
EnemiesCount=count_team1;
SoratnikiCount=count_team2;
}
DoWizardPriem(1);
}
Учитывая, что у меня под рукой не оказалось оригинального файла Main.js, то тут приведён тот, в котором работают проверки колличества противников/соратников. По сути, вам от этого ни тепло, ни холодно.
Обозначения:
EnemiesCount - количество противников
SoratnikiCount - количество соратников
Sila - сила противника
Lovka - ловкость противника
Inta - интуиция противника
Vinos - выносливость противника
Intell - интеллект противника
IsUnderlined - подчеркнут ли ваш враг(выставил ли размен)
Да, я знаю, что хреново придумываю названия для переменных, но меня это не обламывает.
Пример использования в приёме:
if(Intell > 1)
_name = "wis_earth_flower";
Проверка работоспособности:
В новый приём вписать
external.AddToChat("Персонаж: "+top.Battle.oBattle.sEnemyLogin+";"+"Сила: "+Sila+";"+"Ловкость: "+Lovka+";"+"Интуиция: "+Inta+";"+"Выносливость: "+Vinos+";"+"Интеллект: "+Intell+";");
в чате будет прописано имя противника и перечислены его статы.
Отдельная благодарность DrsN'у
По поводу проверки размена с противником:
напоминаю, что если вам требуется дождаться выставленного размена, то необходимо не просто прописать нечто подобное
if(IsUnderlined || Intel <=10){
...
}
Необходимо обновлять фрейм до тех пор, пока размен не выставится:
if(IsUnderlined || Intel <=10){
...
}
else{
top.Battle.oBattle.arrButtons.refresh.click();
}
Отредактировано anahronik (2010-04-02 12:25:07)