rodzar тоже долго бился с проблемой работы бота...а оказалось всё банально - неверно написанный в настройках город.
Если у тебя версия 7.1, так может у тебя тоже город прописан криво?
1 976 2009-08-17 00:36:08
Re: Проблемка появилась (25 ответов, оставленных в Проблемы / Баги / Неполадки)
1 977 2009-08-17 00:06:59
Re: версия 8.1 приемы для мага земли 10 (36 ответов, оставленных в Настройки / Плагины)
()
вот эту параллельно с магом воздуха читай.
1 978 2009-08-16 21:10:20
Re: а помоему подохло условие if(EnemiesCount >*) (14 ответов, оставленных в Проблемы / Баги / Неполадки)
Чтож.
Продолжаю публиковать самописный бред
Замена двух функций файла Main.js( не устаю напоминать, что перед внесением любых изменений необходимо сделать копию исходного файла на случай корявости работы моего варианта. Клиент после внесения изменений обязательно перезапустить.)
это старая версия. новая чуть ниже
function DoWarriorBattle()
{
var team1 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[0].sList;
var team2 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[1].sList;
var count_team1=0;
var pos_team1 = team1.indexOf(", ");
while (pos_team1 != -1){
count_team1++;
pos_team1 = team1.indexOf(", ",pos_team1+1);
}
count_team1++;
var count_team2=0;
var pos_team2 = team2.indexOf(", ");
while (pos_team2 != -1){
count_team2++;
pos_team2 = team2.indexOf(", ",pos_team2+1);
}
count_team2++;
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 team1 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[0].sList;
var team2 = top.Battle.oBattle.oGroupsLayer.getElementsByTagName('IMG')[1].sList;
var count_team1=0;
var pos_team1 = team1.indexOf(", ");
while (pos_team1 != -1){
count_team1++;
pos_team1 = team1.indexOf(", ",pos_team1+1);
}
count_team1++;
var count_team2=0;
var pos_team2 = team2.indexOf(", ");
while (pos_team2 != -1){
count_team2++;
pos_team2 = team2.indexOf(", ",pos_team2+1);
}
count_team2++;
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);
}
Результат: можно в условиях писать EnemiesCount для получение колличества противников и SoratnikiCount для получение колличества человек в вашей команде.
Проверял в основном в данже. 4 раза в невидимых хаотах. Всех руками пересчитывал - всё точно, как в аптеке
Проверял, конечно же, через alert'ы.
Самое весёлое в этом было: скрипт этот изначально заганял в поле для условий приёмов, чтоб по 15 раз за бой не перезапускать клиент.
P.S.
может не так красиво, как в оригинале бота было....зато просто, как кирпич.
P.P.S.
Администратор опубликовал решение это проблемы и строка определения количества людей в командах у него была короче и проще...Но вот в приёмы такой длинны строку вписывать не очень удобно...а если вставить это в файл - можно просто в приёмы вставлять EnemiesCount для получение колличества противников и SoratnikiCount для получения количества соратников. Сами выбирайте, как вам жить
на основе этого решения zergnm я сократил эту вставку для файла:
function DoWarriorBattle()
{
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")[0].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 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")[0].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);
}
1 979 2009-08-16 15:10:49
Re: Provodnik (15 ответов, оставленных в Общий)
А я и говорю
Ладно бы ещё вопрос стоял: "Не мог бы ты по доброте душевной меня провести?".
Ито далеко не факт, что помогли бы. Ибо эта услуга екр обычно стоит
Но ожидать, что кто-то отдаст тебе персонажа просто так, даже на время...темболее нужного проводника - это ещё более невероятно, чем что кто-либо согласится бесплатно провести.
1 980 2009-08-16 14:57:27
Re: Provodnik (15 ответов, оставленных в Общий)
Мне - впадлу
И искренне сомниваюсь, что кто-либо добровольно даст тебе своего любого персонажа.
Ладно бы ещё вопрос стоял: "Не мог бы ты по доброте душевной меня провести?".
Ито далеко не факт, что помогли бы. Ибо эта услуга екр обычно стоит
А тут прям такой запрос с наездом, что даже смеяться больно
1 981 2009-08-16 14:51:06
Re: Provodnik (15 ответов, оставленных в Общий)
Mojesh dati na paru dnei adnavo?
что значит дать?! о.О
1 982 2009-08-16 14:28:04
Re: зря заплатил 10 евра (16 ответов, оставленных в Настройки / Плагины)
()
пункт Как узнать идентификатор для нужного приема?
Самое примечательное, что это прикрепленная тема в этом же разделе форума
1 983 2009-08-16 14:01:54
Re: версия 8.1 приемы для мага земли 10 (36 ответов, оставленных в Настройки / Плагины)
()
хороший топик по магии воздуха....
сперва автор пишет словами то, что он хочет от приема с условием, затем реализацию.
вроде даже не зная языка можно подогнать под себя.
главное названия приемов определить своих и подставить
1 984 2009-08-16 13:35:26
Re: зря заплатил 10 евра (16 ответов, оставленных в Настройки / Плагины)
нет.
Народ, мне кажется или у него названия неверно написаны в первом посте.
Например: Испепеление 10 - wis_fire_incenerate08
разве не wis_fire_incenerate10
?
По идее названия будут:
Маг.Барьер 10 - wis_gray_manabarrier10
Призрачный Топор - spirit_12_prot_100
Испепеление 10 - wis_fire_incenerate10
Знак Земли - wis_earth_sign
Вспышка 10 - wis_fire_burst10
1 985 2009-08-16 13:16:14
Re: зря заплатил 10 евра (16 ответов, оставленных в Настройки / Плагины)
()
Ну вот, например, для воды.
Умения там подобные твоим, такчто в некоторых случаях просто надо название приема поменять.
Не ленись - разбирайся
1 986 2009-08-16 13:04:39
Re: Даже на стартовую не заходит( (3 ответов, оставленных в Проблемы / Баги / Неполадки)
проксю не прописывал?
1 987 2009-08-16 02:13:31
Re: Поиск 8 версий (11 ответов, оставленных в Флейм)
Честно говоря в данже у меня в неустановленном месте застопорился только один раз за....эм....3 недели активного(практически безвылазного) пользования(в первой попытке пройти данж). На второй-третий-четвертый нигде не застревал.
А потом я свои маршруты стал сам составлять(имея карту и набор значений m1,m5,m7,rl,rr и т.п это заняло не больше 13минут)....ну там чтоб не дохнуть в каких-либо особо-неудобных точках скопления мобов
1 988 2009-08-16 01:52:44
Re: Поиск 8 версий (11 ответов, оставленных в Флейм)
по мне в ней интерфейс больше нравиться
Согласен, интерфейс в ней прекрасный был
По мне так правая панель с чекбоксами была удобнее, чем тупо выпадающее меню.
Ещё модули стало неудобно редактировать в 8-й версии.
В 7-й галочку снял, скрипт подкорректировал, галочку вернул - всё.
А в 8-й без полного перезапуска клиента не выйдет такое
Пока отлаживал модуль данжей для похода партией, устал перезапускать
7.1 жалкое подобие какое то наверно...и читая функционал понимаешь это...ну на нет и суда нет...
Функционал читая)))))))))
Расклад такой: есть руки и спинной мозг программера(а каким ещё мозгом программер на яваскрипте писать может?! ) - бери и добавляй в 7.1 всё, что тебе нужно бесплатно.
Не хочешь этим заниматься - плати 10евро и получай тот же 7.1 с измененным интерфейсом, улучшенным алгоритмом данжа, условиями на приёмы и возможностью принимать заявки, а не только подавать(остальные изменения ты всеравно не заметишь).
1 989 2009-08-15 19:16:17
Re: Поиск 8 версий (11 ответов, оставленных в Флейм)
И никогда.
это не шутка. тут хороший метод против взлома используется
Честно говоря мне 7-ая больше нравилась...8-ая, для меня, выигрывает только за счет условий на умения.
1 990 2009-08-15 15:30:47
Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой. (95 ответов, оставленных в Настройки / Плагины)
Если не сработает это - сделаю по-другому.
Сейчас думаю над такой интересной вещью, чтобы была возможность создавать отдельно для каждого персонажа файл настроек. И этот файл сам подгружался в Dungeon.js при запуске клиента с данным персонажем...
Должно получиться красиво в общем
вот только далеко не факт, что получится
-------------------------------------------------------------------------------
Долго-долго искал, как эту идею реализовать
Таки нашел способ...а не было бы на компе 7-й версии установленной - так и не нашёл бы
Спасибо автору бота за файл Readme.txt в папке plugins в 7-й версии
Короче, что я имею на данный момент(Это не проверенная версия...ну т.е. для одного, конечно проверено всё....все параметры из дополнительного файла подгружаются...но двоих с одной копии бота я не пробовал запустить. По идее должно работать буду благодарен тому, кто проверит
):
var s = "";
var dungName = "";
var dungeonCoords = "";
var dungeonDirection = 0;
var dungeonPosition = "";
var dungeonLastPosition = "";
var breakAction = false;
var _id = "";
var _object = null;
var texting=external.LoadFile("Modules\\DungeonUsers\\"+mylogin+".txt"); //Обязательно полный путь(пробовал относительный - не работало)
eval(texting); // эта функция выполняет строку texting как JavaScript.
//alert(texting);
// рекомендую в первый раз раскомментировать этот алерт. При запуске клиента и входе в игру выскочит ошибка с содержанием вышеподключаемого файла...т.е. можно проверить, правильно ли прописан путь
function DungeonMain()
{
s = top.frames[3].document.all[0].innerHTML;
if(IsMapVisible())
{
dungName = top.frames[3].location.href.match(/combats.com\/(.+?)\?/)[1];
var date = new Date();
var currentTime = parseInt(String(date.getTime()).substring(0,10));
if((external.SDungeonExitTime.Text != "0") && ((currentTime - dungeonStartTime)/60 >= parseInt(external.SDungeonExitTime.Text)))
{
top.frames[3].location = top.frames[3].document.links[0].href;
return;
}
external.SetStatusLabel("Поздемелье");
dungeonCoords = s.match(/arrMap = (\[\[.+?\]\])/)[1];
dungeonDirection = top.frames[3].nMyDirection;
dungeonPosition = external.MD5Hash(dungeonCoords + "," + dungeonDirection);
if(dungeonMovementCount[dungeonPosition] == undefined)
dungeonMovementCount[dungeonPosition] = 0;
if(dungeonPosition != dungeonLastPosition)
{
if(dungeonMovementCount[dungeonLastPosition] != undefined)
dungeonMovementCount[dungeonLastPosition]++;
else
dungeonMovementCount[dungeonLastPosition] = 1;
dungeonLastPosition = dungeonPosition;
}
if(external.SDungeonPickUpObjects.Checked)
{
var drop = s.match(/\?get=(\d+)/g);
if(drop != null)
{
if(s.indexOf("слишком много") > 0 || s.indexOf("У вас уже есть один такой предмет") > 0)
usedObjects[_id] = true;
for(i = 0; i < drop.length; i++)
{
_id = drop[i].match(/\d+/);
if(!usedObjects[_id])
{
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + drop[i];
return;
}
}
}
}
if(s.indexOf("'rollconfirm")>0)
{
var drop = s.match(/'rollconfirm\(.+?,.+?,\"\d+\"\)/g);
if(drop != null)
{
if(s.indexOf("слишком много") > 0 || s.indexOf("У вас уже есть один такой предмет") > 0 || (s.indexOf("Вы уже сделали свой бросок") > 0 && !external.SDungeonPickUpObjects.Checked))
usedObjects[_id] = true;
for(i = 0; i < drop.length; i++)
{
_id = drop[i].match(/\"(\d+)\"/)[1];
if(!usedObjects[_id])
{
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?get=" + _id + (external.SDungeonPickUpObjects.Checked ? "&tmpname423=Да": "&pass=Нет");
return;
}
}
}
}
breakAction = false;
eval(external.DungeonGetCodeForLocation(dungeonPosition));
}
else
{
if(s.indexOf("Создать группу") > 0)
{
external.SetStatusLabel("Создаю заявку");
PutKanalZayavka();
}
else if(s.indexOf("Начать") > 0)
{
external.SetStatusLabel("Начинаю поход");
StartKanalZayavka();
}
else
{
external.SetStatusLabel("Не видно карты, не в подземелье, или еще не истекла задержка");
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl";
}
}
}
function randomString()
{
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var string_length = 8;
var randomstring = '';
for (var i=0; i<string_length; i++)
{
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum,rnum+1);
}
return randomstring;
}
function PutKanalZayavka()
{
if(liderstvo==false && groupkanal==true){
//alert("Вы собираетесь искать существующую заявку с лидером"+provodnik);
xlength=top.frames[3].document.forms.length;
//alert("Если в этом окошке выведен этот текст и число, близкое к числу заявок на странице - это хорошо. Число заявок: "+xlength);
for(i=0;i<xlength;i++)
{
var z = top.frames[3].document.forms[ i ].innerHTML;
//alert("Происходит проверка заявки номер: "+i+".");
if(z.indexOf("fl(\""+provodnik+"\"")>0){
//alert("Заявка найденна. Пытаюсь ввести пароль");
top.frames[3].document.forms[ i ].pass.value=grouppass;
//alert("Ввел пароль - пытаюсь подтвердить заявку");
top.frames[3].document.forms[ i ].submit();
}
}
}else if(groupkanal==false || liderstvo==true){
top.frames[3].document.all.mut_noblock.checked = false;
top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = grouppass;
top.frames[3].document.all.open.click();}
}
function StartKanalZayavka()
{
if(liderstvo==true){
xlength=top.frames[3].document.forms.length;
for(i=0;i<xlength;i++)
{
var z = top.frames[3].document.forms[ i ].innerHTML;
if(z.indexOf("fl(\""+provodnik+"\"")>0){
var count=0;
var pos = z.indexOf("drwfl");
while (pos != -1){
count++;
pos = z.indexOf("drwfl",pos+1);
}
}
}
if(count==partija){
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
var date = new Date();
dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
// alert("Ща запущусь");
top.frames[3].document.all.start.click();
}else{top.frames[3].window.location.reload();}
}
if(groupkanal==false){
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
var date = new Date();
dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
//alert("Не включен групповой режим");
top.frames[3].document.all.start.click();
}
}
function IsMapVisible()
{
if(s.match(/arrMap =/) != null)
return true;
else
return false;
}
function IsWallPresent()
{
var elements = top.frames[3].document.getElementsByTagName("*");
for(var i = 0;i < elements.length;i++)
if(elements[i].className == "LeftFront0_0")
return true;
return false;
}
function UseObjects()
{
if(!IsWallPresent())
{
try
{
if(top.frames[3].arrLayers[1][0]["l"].arrObjects[0])
{
if(s.indexOf("получили")>0 || s.indexOf("У вас уже есть один такой предмет")>0 || s.indexOf("Попахивает")>0 || s.indexOf("Ничего не произошло")>0 || s.indexOf("нет необходимых ингредиентов")>0)
usedObjects["\"" + _object.id + "\""] = true;
for(var i=0; i<top.frames[3].arrLayers[1][0]["l"].arrObjects.length; i++)
{
_object = top.frames[3].arrLayers[1][0]["l"].arrObjects[i];
if(!usedObjects["\"" + _object.id + "\""])
{
external.SetStatusLabel("Копаюсь в хламе...");
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?useobj=" + _object.id;
breakAction = true;
return;
}
}
}
}
catch(err)
{
}
}
}
function AttackMobs()
{
if(!IsWallPresent())
{
try
{
if(top.frames[3].arrLayers[1][0]["l"].arrUnits[0])
{
if(top.frames[3].arrLayers[1][0]["l"].arrUnits[0].action != "")
{
if(tkHP >= (maxHP*koeff))
{
external.SetStatusLabel("Нападаю на мобов");
if(external.SDungeonAttackMobs.Checked)
top.frames[3].location = "http://" + external.SCity.Text +".combats.com/" + dungName + "?attack=1&use=" + top.frames[3].arrLayers[1][0]["l"].arrUnits[0].id;
}
breakAction = true;
return;
}
}
}
catch(err)
{
}
}
}
function Exit()
{
if(breakAction)
return;
top.frames[3].location = top.frames[3].document.links[0].href;
}
function Walk(step)
{
if(breakAction)
return;
if(step == "rl" || step == "rr")
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?rnd=" + Math.random() + "&path=" + step;
else
{
if(top.frames[3].is_accessible)
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?rnd=" + Math.random() + "&path=" + step;
}
}
В папке Modules создать надо папку DungeonUsers. В ней создавать для всех персонажей файлы ТочныйНикПерсонажа.txt с содержанием
var koeff = 1.0; //проценты ХП, при которых вы будете нападать на мобов(1.0 = 100%, 0.75 = 75% и т.д.)
var groupkanal = true; //Если идёте один - false
if(groupkanal==true){
var provodnik = ""; //Кто является проводником/лидером. Это обязательно надо указать и для самого проводника, и для прицепа.
if(provodnik==mylogin){var liderstvo = true;}else{var liderstvo = false;}
var grouppass = "321456"; //Пароль группы
var partija = "2"; //Количество людей в партии, включая вас.
}
С одной стороны это менее удобно, чем версия выше...С другой стороны это даст дальше развивать возможности использования модуля подземелий за счет более гибкого разграничения параметров каждого своего персонажа(короче лишним не будет:) )
1 991 2009-08-15 11:46:37
Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой. (95 ответов, оставленных в Настройки / Плагины)
Хм. Нет придела совершенству!!!
Для Гиппо персонально частично непроверенный вариант:)
if(groupkanal==true){
//////////////////// Групповой поход ////////////////////
//Если вы идете один, просто выставьте groupkanal = false и параметры ниже можно
//не изменять.
var provodnik = ""; //Кто является проводником/лидером.
if(provodnik==mylogin){var liderstvo = true;}else{var liderstvo = false;}
var grouppass = "321456"; //Пароль группы
var partija = "2"; //Количество людей в партии, включая вас.
}
1 992 2009-08-15 02:11:29
Re: нейтральный клан ! (23 ответов, оставленных в Общий)
Есть......но не у всех
1 993 2009-08-15 01:59:38
Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой. (95 ответов, оставленных в Настройки / Плагины)
Всё.
С МунГ'ом разобрались.
Всё работает.
Конечный файл Dungeon.js выглядит вот так для версии 8.1.
var s = "";
var dungName = "";
var dungeonCoords = "";
var dungeonDirection = 0;
var dungeonPosition = "";
var dungeonLastPosition = "";
var breakAction = false;
var _id = "";
var _object = null;
var groupkanal = false; //Если идёте один - false
if(groupkanal==true){
//////////////////// Групповой поход ////////////////////
//Если вы идете один, просто выставьте groupkanal = false и параметры ниже можно
//не изменять.
var liderstvo = true; //true - вы лидер группы. false - не вы лидер.
var provodnik = ""; //Кто является проводником/лидером. Это обязательно надо указать и для самого проводника, и для прицепа.
var grouppass = "321456"; //Пароль группы
var partija = "2"; //Количество людей в партии, включая вас.
}
function DungeonMain()
{
s = top.frames[3].document.all[0].innerHTML;
if(IsMapVisible())
{
dungName = top.frames[3].location.href.match(/combats.com\/(.+?)\?/)[1];
var date = new Date();
var currentTime = parseInt(String(date.getTime()).substring(0,10));
if((external.SDungeonExitTime.Text != "0") && ((currentTime - dungeonStartTime)/60 >= parseInt(external.SDungeonExitTime.Text)))
{
top.frames[3].location = top.frames[3].document.links[0].href;
return;
}
external.SetStatusLabel("Поздемелье");
dungeonCoords = s.match(/arrMap = (\[\[.+?\]\])/)[1];
dungeonDirection = top.frames[3].nMyDirection;
dungeonPosition = external.MD5Hash(dungeonCoords + "," + dungeonDirection);
if(dungeonMovementCount[dungeonPosition] == undefined)
dungeonMovementCount[dungeonPosition] = 0;
if(dungeonPosition != dungeonLastPosition)
{
if(dungeonMovementCount[dungeonLastPosition] != undefined)
dungeonMovementCount[dungeonLastPosition]++;
else
dungeonMovementCount[dungeonLastPosition] = 1;
dungeonLastPosition = dungeonPosition;
}
if(external.SDungeonPickUpObjects.Checked)
{
var drop = s.match(/\?get=(\d+)/g);
if(drop != null)
{
if(s.indexOf("слишком много") > 0 || s.indexOf("У вас уже есть один такой предмет") > 0)
usedObjects[_id] = true;
for(i = 0; i < drop.length; i++)
{
_id = drop[i].match(/\d+/);
if(!usedObjects[_id])
{
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + drop[i];
return;
}
}
}
}
if(s.indexOf("'rollconfirm")>0)
{
var drop = s.match(/'rollconfirm\(.+?,.+?,\"\d+\"\)/g);
if(drop != null)
{
if(s.indexOf("слишком много") > 0 || s.indexOf("У вас уже есть один такой предмет") > 0 || (s.indexOf("Вы уже сделали свой бросок") > 0 && !external.SDungeonPickUpObjects.Checked))
usedObjects[_id] = true;
for(i = 0; i < drop.length; i++)
{
_id = drop[i].match(/\"(\d+)\"/)[1];
if(!usedObjects[_id])
{
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?get=" + _id + (external.SDungeonPickUpObjects.Checked ? "&tmpname423=Да": "&pass=Нет");
return;
}
}
}
}
breakAction = false;
eval(external.DungeonGetCodeForLocation(dungeonPosition));
}
else
{
if(s.indexOf("Создать группу") > 0)
{
external.SetStatusLabel("Создаю заявку");
PutKanalZayavka();
}
else if(s.indexOf("Начать") > 0)
{
external.SetStatusLabel("Начинаю поход");
StartKanalZayavka();
}
else
{
external.SetStatusLabel("Не видно карты, не в подземелье, или еще не истекла задержка");
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/dungeon.pl";
}
}
}
function randomString()
{
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var string_length = 8;
var randomstring = '';
for (var i=0; i<string_length; i++)
{
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum,rnum+1);
}
return randomstring;
}
function PutKanalZayavka()
{
if(liderstvo==false && groupkanal==true){
//alert("Вы собираетесь искать существующую заявку с лидером"+provodnik);
xlength=top.frames[3].document.forms.length;
//alert("Если в этом окошке выведен этот текст и число, близкое к числу заявок на странице - это хорошо. Число заявок: "+xlength);
for(i=0;i<xlength;i++)
{
var z = top.frames[3].document.forms[ i ].innerHTML;
//alert("Происходит проверка заявки номер: "+i+".");
if(z.indexOf("fl(\""+provodnik+"\"")>0){
//alert("Заявка найденна. Пытаюсь ввести пароль");
top.frames[3].document.forms[ i ].pass.value=grouppass;
//alert("Ввел пароль - пытаюсь подтвердить заявку");
top.frames[3].document.forms[ i ].submit();
}
}
}else if(groupkanal==false || liderstvo==true){
top.frames[3].document.all.mut_noblock.checked = false;
top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = grouppass;
top.frames[3].document.all.open.click();}
}
function StartKanalZayavka()
{
if(liderstvo==true){
xlength=top.frames[3].document.forms.length;
for(i=0;i<xlength;i++)
{
var z = top.frames[3].document.forms[ i ].innerHTML;
if(z.indexOf("fl(\""+provodnik+"\"")>0){
var count=0;
var pos = z.indexOf("drwfl");
while (pos != -1){
count++;
pos = z.indexOf("drwfl",pos+1);
}
}
}
if(count==partija){
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
var date = new Date();
dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
// alert("Ща запущусь");
top.frames[3].document.all.start.click();
}else{top.frames[3].window.location.reload();}
}
if(groupkanal==false){
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
var date = new Date();
dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
//alert("Не включен групповой режим");
top.frames[3].document.all.start.click();
}
}
function IsMapVisible()
{
if(s.match(/arrMap =/) != null)
return true;
else
return false;
}
function IsWallPresent()
{
var elements = top.frames[3].document.getElementsByTagName("*");
for(var i = 0;i < elements.length;i++)
if(elements[i].className == "LeftFront0_0")
return true;
return false;
}
function UseObjects()
{
if(!IsWallPresent())
{
try
{
if(top.frames[3].arrLayers[1][0]["l"].arrObjects[0])
{
if(s.indexOf("получили")>0 || s.indexOf("У вас уже есть один такой предмет")>0 || s.indexOf("Попахивает")>0 || s.indexOf("Ничего не произошло")>0 || s.indexOf("нет необходимых ингредиентов")>0)
usedObjects["\"" + _object.id + "\""] = true;
for(var i=0; i<top.frames[3].arrLayers[1][0]["l"].arrObjects.length; i++)
{
_object = top.frames[3].arrLayers[1][0]["l"].arrObjects[i];
if(!usedObjects["\"" + _object.id + "\""])
{
external.SetStatusLabel("Копаюсь в хламе...");
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?useobj=" + _object.id;
breakAction = true;
return;
}
}
}
}
catch(err)
{
}
}
}
function AttackMobs()
{
if(!IsWallPresent())
{
try
{
if(top.frames[3].arrLayers[1][0]["l"].arrUnits[0])
{
if(top.frames[3].arrLayers[1][0]["l"].arrUnits[0].action != "")
{
if(tkHP >= maxHP)
{
external.SetStatusLabel("Нападаю на мобов");
if(external.SDungeonAttackMobs.Checked)
top.frames[3].location = "http://" + external.SCity.Text +".combats.com/" + dungName + "?attack=1&use=" + top.frames[3].arrLayers[1][0]["l"].arrUnits[0].id;
}
breakAction = true;
return;
}
}
}
catch(err)
{
}
}
}
function Exit()
{
if(breakAction)
return;
top.frames[3].location = top.frames[3].document.links[0].href;
}
function Walk(step)
{
if(breakAction)
return;
if(step == "rl" || step == "rr")
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?rnd=" + Math.random() + "&path=" + step;
else
{
if(top.frames[3].is_accessible)
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/" + dungName + "?rnd=" + Math.random() + "&path=" + step;
}
}
Не забываем вписать имя проводника(тут всё регистрочувствительное. Т.е. "Проводник" и "проводниК" - это два разных персонажа), включить/выключить параметр groupkanal....короче в комментах всё написано.
1 994 2009-08-15 01:30:58
Re: нейтральный клан ! (23 ответов, оставленных в Общий)
Нда...доки на всех ботов.......на бабушек со своего подъезда регистрировать
1 995 2009-08-15 00:38:38
Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой. (95 ответов, оставленных в Настройки / Плагины)
Хм.
Клиент перезапускал после внесения изменений о колличестве персонажей в партии?
Запусти и отпишиь, что на ошибке будет написано(А лучше отредактируй свое прошлое сообщение и вставь туда свою функцию function StartKanalZayavka()....персонального в ней нет ничего, такчто тупо копи-паст сюда)
function StartKanalZayavka()
{
if(liderstvo==true){
xlength=top.frames[3].document.forms.length;
for(i=0;i<xlength;i++)
{
var z = top.frames[3].document.forms[ i ].innerHTML;
if(z.indexOf("fl(\""+provodnik+"\"")>0){
var count=0;
var pos = z.indexOf("drwfl");
while (pos != -1){
count++;
pos = z.indexOf("drwfl",pos+1);
}
}
}
alert("В партии сейчас "+count+" .А должно быть: "+partija);
if(count==partija){
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
var date = new Date();
dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
alert("Ща запущусь");
//top.frames[3].document.all.start.click();
}
}
if(groupkanal==false){
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
var date = new Date();
dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
alert("Не включен групповой режим");
//top.frames[3].document.all.start.click();
}
}
1 996 2009-08-14 20:13:42
Re: нейтральный клан ! (23 ответов, оставленных в Общий)
Все хотят
такой вот клан ботоводов получится
1 997 2009-08-14 18:16:23
Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой. (95 ответов, оставленных в Настройки / Плагины)
Начал тестировать в 8-й версии.
1) Заменил функцию PutKanalZayavka на
function PutKanalZayavka()
{
if(liderstvo==false && groupkanal==true){
alert("Вы собираетесь искать существующую заявку с лидером"+provodnik);
xlength=top.frames[3].document.forms.length;
alert("Если в этом окошке выведен этот текст и число, близкое к числу заявок на странице - это хорошо. Число заявок: "+xlength);
for(i=0;i<xlength;i++)
{
var z = top.frames[3].document.forms[ i ].innerHTML;
alert("Происходит проверка заявки номер: "+i+".");
if(z.indexOf("fl(\""+provodnik+"\"")>0){
alert("Заявка найденна. Пытаюсь ввести пароль");
top.frames[3].document.forms[ i ].pass.value=grouppass;
alert("Ввел пароль - пытаюсь подтвердить заявку");
top.frames[3].document.forms[ i ].submit();
}
}
}else if(groupkanal==false || liderstvo==true){
top.frames[3].document.all.mut_noblock.checked = false;
top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = grouppass;
top.frames[3].document.all.open.click();}
}
и приписал вверху параметры
var groupkanal = true; //Если идёте один - false
if(groupkanal==true){
//////////////////// Групповой поход ////////////////////
//Если вы идете один, просто выставьте groupkanal = false и параметры ниже можно
//не изменять.
var liderstvo = false; //true - вы лидер группы. false - не вы лидер.
var provodnik = "ИмяПроводника"; //Кто является проводником/лидером. Это обязательно надо указать и для самого проводника, и для прицепа.
var grouppass = "321456"; //Пароль группы
var partija = "2"; //Количество людей в партии, включая вас.
}
Даже группу создавать не стал проводником.
Результат: выводились все ошибки, которые есть.
Вывод: скрипт работал в полном объеме без косяков.
2) Запустил проводника и создал им заявку. У ведомого закоментил alert'ы, чтоб не мешались и перезапустил его клиент.
Результат: за 2 секунды ведомый нашел заявку, вбил пасс и подтвердил её.
Вывод: ведомый цепляет заявку без проблем.
Даже и не знаю, что могло застопорить у тебя прием заявки...в голову лезет только неверный ник проводника
Покачто протестирую часть от проводника.
3)Протестировал.
var groupkanal = true; //Если идёте один - false
alert("Группа запущенна");
if(groupkanal==true){
//////////////////// Групповой поход ////////////////////
//Если вы идете один, просто выставьте groupkanal = false и параметры ниже можно
//не изменять.
var liderstvo = true; //true - вы лидер группы. false - не вы лидер.
var provodnik = "ИмяПроводника"; //Кто является проводником/лидером. Это обязательно надо указать и для самого проводника, и для прицепа.
var grouppass = "321456"; //Пароль группы
var partija = "2"; //Количество людей в партии, включая вас.
}
function StartKanalZayavka()
{
if(liderstvo==true){
xlength=top.frames[3].document.forms.length;
for(i=0;i<xlength;i++)
{
var z = top.frames[3].document.forms[ i ].innerHTML;
if(z.indexOf("fl(\""+provodnik+"\"")>0){
var count=0;
var pos = z.indexOf("drwfl");
while (pos != -1){
count++;
pos = z.indexOf("drwfl",pos+1);
}
}
}
if(count==partija){
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
var date = new Date();
dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
alert("Ща запущусь");
//top.frames[3].document.all.start.click();
}
}
if(groupkanal==false){
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
var date = new Date();
dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
alert("Не включен групповой режим");
//top.frames[3].document.all.start.click();
}
}
Проверка проходила так: Запустил ведомого на поиск заявки. Запустил проводника. Проводник создал заявку и встал со статусом "Начинаю поход"(или как там оно). Ведомый прицепился сразу, а вот проводник долго ждал, пока окно обновится(мне ждать надоело и я сам кнопку Обновить нажал).
Результат: всплыла выставленная мной ошибка "Ща запущусь", которая говорила о том, что скрипт доработал стабильно до момента запуска заявки(запуск был преднамеренно закомментирован, дабы он не начал сам поход и не пришлось ждать кучу времени для повтора эксперимента). Закомментированный запуск заявки был частью базового скрипта, такчто в его правильной работе я не сомниваюсь.
Вывод в целом: Скрипт работает корректно. Для 2-х точно корректно.
P.S.
В 8-й версии не удобно оказалось то, что скрипт Данжа сразу интегрируется в клиент и при внесении изменений в файл Dungeon.js необходимо полюбому этот клиент перезапустить. В 7-й было проще - галочку снял, внес изменения, вернул галочку и всё работает по-новому
P.P.S.
Чем раньше кто-нибудь проверит работоспособность и отпишется тут - тем раньше я начну развивать это до того уровня, чтоб можно было ходить не просто прицеп-проводник, но и полноценной партией.
1 998 2009-08-14 16:57:35
Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой. (95 ответов, оставленных в Настройки / Плагины)
сегодня купил 8-ую версию.
в крайнем случае в воскресенье рабочий вариант будет(если он мне по силам, конечно)
1 999 2009-08-14 15:05:53
Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой. (95 ответов, оставленных в Настройки / Плагины)
Не знаю, где косяк.
Вот что-то вроде отладочной версии, чтоб понять, где стопорится всё
function PutKanalZayavka()
{
if(liderstvo==false && groupkanal==true){
alert("Вы собираетесь искать существующую заявку с лидером"+provodnik);
xlength=top.frames[3].document.forms.length;
alert("Если в этом окошке выведен этот текст и число, близкое к числу заявок на странице - это хорошо. Число заявок: "+xlength);
for(i=0;i<xlength;i++)
{
var z = top.frames[3].document.forms[ i ].innerHTML;
alert("Происходит проверка заявки номер: "+i+".");
if(z.indexOf("fl(\""+provodnik+"\"")>0){
alert("Заявка найденна. Пытаюсь ввести пароль");
top.frames[3].document.forms[ i ].pass.value=grouppass;
alert("Ввел пароль - пытаюсь подтвердить заявку");
top.frames[3].document.forms[ i ].submit();
}
}
}else if(groupkanal==false || liderstvo==true){
top.frames[3].document.all.mut_noblock.checked = false;
top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = grouppass;
top.frames[3].document.all.open.click();}
}
Соответственно alert выводит ошибку с заданным текстом и единственной кнокой. Какие сообщения будут выведены, значит до них все пракрасно работает.(т.е. несколько ошибок подряд будут выводиться).
Это можно прописать только для ведомого, т.к. ведущего никак не затрагивает.
Ошибки появляются быстро и всё время ) такчто потом отключить программу проще через ctrl+alt+del
вот такая недоработка с моей стороны))
2 000 2009-08-10 23:38:48
Re: Бот-проводник и бот-прицеп... Учим ботов ходить парой. (95 ответов, оставленных в Настройки / Плагины)
Для 8-й всё тоже самое практически должно быть....
(Опять перед проверкой настоятельно рекомендую сделать копию базового файла, чтоб было чем восстанавливать поломанное)
В файле Dungeon.js меняем функции на соответствующие:
function PutKanalZayavka()
{
if(liderstvo==false && groupkanal==true){
xlength=top.frames[3].document.forms.length;
for(i=0;i<xlength;i++)
{
var z = top.frames[3].document.forms[ i ].innerHTML;
if(z.indexOf("fl(\""+provodnik+"\"")>0){
top.frames[3].document.forms[ i ].pass.value=grouppass;
top.frames[3].document.forms[ i ].submit();
}
}
}else if(groupkanal==false || liderstvo==true){
top.frames[3].document.all.mut_noblock.checked = false;
top.frames[3].document.forms[top.frames[3].document.forms.length-1].pass.value = grouppass;
top.frames[3].document.all.open.click();}
}
function StartKanalZayavka()
{
top.frames[3].location = "http://"+City+".combats.com/dungeon.pl";
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
if(liderstvo==true){
xlength=top.frames[3].document.forms.length;
for(i=0;i<xlength;i++)
{
var z = top.frames[3].document.forms[ i ].innerHTML;
if(z.indexOf("fl(\""+provodnik+"\"")>0){
var count=0;
var pos = z.indexOf("drwfl");
while (pos != -1){
count++;
pos = z.indexOf("drwfl",pos+1);
}
}
}
if(count==partija){
top.frames[4].location = top.frames[4].location;
var date = new Date();
dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
top.frames[3].document.all.start.click();
}
}
if(groupkanal==false){
var date = new Date();
dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
top.frames[3].document.all.start.click();
}
}
Все параметры в самом начале скрипта(все просто для наглядности):
var s = "";
var dungName = "";
var dungeonCoords = "";
var dungeonDirection = 0;
var dungeonPosition = "";
var dungeonLastPosition = "";
var breakAction = false;
var _id = "";
var _object = null;
var groupkanal = true; //Если идёте один - false
if(groupkanal==true){
//////////////////// Групповой поход ////////////////////
//Если вы идете один, просто выставьте groupkanal = false и параметры ниже можно
//не изменять.
var liderstvo = false; //true - вы лидер группы. false - не вы лидер.
var provodnik = "Проводник007"; //Кто является проводником/лидером. Это обязательно надо указать и для самого проводника, и для прицепа.
var grouppass = "321456"; //Пароль группы
var partija = "2"; //Количество людей в партии, включая вас.
}
P.S.
Лицензии 8-й нету, такчто проверить не могу.