нет конечно, не будет.
и я ошибся, изменений там не одна переменная видимо.
Но я ведь не могу брать его изменения и пихать к себе - неправильно это : /
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Combots Бот для БК » Сообщения от anahronik
нет конечно, не будет.
и я ошибся, изменений там не одна переменная видимо.
Но я ведь не могу брать его изменения и пихать к себе - неправильно это : /
Петро, для 7-й то я тоже выкладывал
По поводу ()
Там эта переменная в двух местах прописана - в начале при задании её значения, и в месте, где это значение используется.
Внести такое изменение может любой человек без моей помощи.
up
обновлено.
смотрите первый пост.
Теперь добавлено условие для мага, по которому он ждёт каста защиты на себя и только потом бьёт магией.
Условие хитрое - там обновлять нужно фрэйм боя)
иначе маг никогда и не узнает, что на нём защита оказывается висит))
А если ненадо вписывать ник проводника, то как тогда, ведомый зайдёт в нужную группу?
Наоборот, проводник прописывается в переменную provodnik.
а ведомый не прописывается никуда.
Нужна жертва - тестер
Ну пришли ему лицензию))
тебе жалко чтоли?:)
Я бы с удовольствием посмотрел, как он её юзал бы
anahronik, за работу огромное спасибо, но пока не смогу потестить, уезжаю, вернусь - проверю = )
Успешной поездки
ЛедянойАнгел, я давно для 7-й версии не обновлял...там вроде даже обновление страницы не подключено.
Надо будет обновить, видимо с исправлениям всеми...
Для 7-й версии подача-прием заявок
/////////////////////////////////////////////////////////////////////////////
///////////////////Система подземелья для Combots (c) ZergNM/////////////////
/////////////////////////////////////////////////////////////////////////////
//////////////////// Настройки ////////////////////
var pickupobjects = true; //Подбирать предметы
var attackmobs = true; //Нападать на мобов
var groupkanal;
var texting=external.LoadFile("..\\DungeonUsers\\"+mylogin+".txt");
eval(texting);
//////////////////// Функции и переменные ////////////////////
var s = "";
var DoAction = 0;
var CurrentLocation = "";
var City = "";
var DungName = "";
function InitializeKanalSystem()
{
try { clearTimeout(walktimer); }
catch(err) { walktimer = 0; }
try { usedObjects; }
catch(err) { usedObjects = new Array(); }
try { KanalMapCoords; }
catch(err) { KanalMapCoords = ""; }
try { KanalDirection; }
catch(err) { KanalDirection = 0; }
try { KanalCurrentMapCoords; }
catch(err) { KanalCurrentMapCoords = ""; }
try { KanalCurrentDirection; }
catch(err) { KanalCurrentMapDirection = 0; }
try { top.frames[4].document.all.kanalst.value; }
catch(err) { top.frames[4].document.body.insertAdjacentHTML("afterBegin","<center><b>Подземелье</b><br>Номер шага: <input name=kanalst size=5 value=0></b></center><br>"); }
s = top.frames[3].document.all[0].innerHTML;
DoAction = 0;
CurrentLocation = top.location.href;
City = CurrentLocation.substring(7,CurrentLocation.indexOf(".combats.com"));
if(s.indexOf("dungeon.pl")>0)
DungName = "dungeon.pl";
else
DungName = s.substring(s.indexOf("dungeon"),s.indexOf("dungeon")+11);
KanalMapCoords = "";
}
function CheckForError()
{
if(s.indexOf("нет при себе необходимого")>0)
return true;
return false;
}
function Exit()
{
top.frames[4].location = top.frames[4].location;
top.frames[3].location = "http://"+City+".combats.com/"+DungName+"?out="+Math.random();
}
function Walk(step)
{
if(top.frames[3].is_accessible)
top.frames[3].navigate("http://"+City+".combats.com/"+DungName+"?rnd="+Math.random()+"&path="+step);
else
walktimer = setTimeout("Walk("+step+")",1000);
}
function IsMapVisible()
{
var retn;
if(s.indexOf("arrMap =") > 0)
retn = true;
else
retn = false;
return retn;
}
function GetCurrentLocation()
{
KanalMapCoords = s.substring(s.indexOf("arrMap =")+9,s.indexOf("arrMap =")+549);
KanalMapCoords = KanalMapCoords.substring(2,KanalMapCoords.indexOf("']];")+1);
KanalMapCoords = KanalMapCoords.replace(/\[/g, "");
KanalMapCoords = KanalMapCoords.replace(/\]/g, "");
}
function GetCurrentDirection()
{
var Direction = top.frames[3].document.getElementById("DungMap").all[top.frames[3].document.getElementById("DungMap").all.length-1].href;
if(Direction.indexOf("d0") > 0)
KanalDirection = top.frames[3].nMyDirection;
else
{
if(Direction == "http://img.combats.com/i/move/p1/d1.gif")
KanalDirection = 1;
else if(Direction == "http://img.combats.com/i/move/p1/d3.gif")
KanalDirection = 3;
else if(Direction == "http://img.combats.com/i/move/p1/d5.gif")
KanalDirection = 5;
else if(Direction == "http://img.combats.com/i/move/p1/d7.gif")
KanalDirection = 7;
}
}
function IsDropPresent()
{
var result = 0;
if(s.indexOf("?get")>0 && s.indexOf("слишком много")<1 && s.indexOf("mater247")<1)
result = 1;
if(s.indexOf("'rollconfirm")>0)
result = 2;
return result;
}
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 PutKanalZayavka()
{
var searched;
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;
searched = true;
top.frames[3].document.forms[i].submit();
}
}
if(searched!=true){setTimeout("top.frames[3].window.location.reload()",3000);}
}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 = [];
KanalMapCoords = "";
KanalDirection = 0;
KanalCurrentMapCoords = "";
KanalCurrentMapDirection = 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;
top.frames[3].document.all.start.click();
}
else{setTimeout("top.frames[3].window.location.reload()",3000);}
}
if(groupkanal==false){
top.frames[4].location = top.frames[4].location;
top.frames[3].document.all.start.click();
}
}
function getElementsByClassName(clsName)
{
var retVal = new Array();
var elements = top.frames[3].document.getElementsByTagName("*");
for(var i = 0;i < elements.length;i++)
{
if(elements[i].className.indexOf(" ") >= 0)
{
var classes = elements[i].className.split(" ");
for(var j = 0;j < classes.length;j++)
{
if(classes[j] == clsName)
retVal.push(elements[i]);
}
}
else if(elements[i].className == clsName)
retVal.push(elements[i]);
}
return retVal;
}
/////////////////////////////////////////////////////////////////////////////
//////////////////// Выполенние ////////////////////
//Проверяем или инициализируем глобальные переменные
InitializeKanalSystem();
//Если какая-то ошибка случалась - выходим из подземелья
if(CheckForError() == true)
Exit();
//Если видна карта передвижения
if(IsMapVisible())
{
//Загружаем текущее местонахождение
GetCurrentLocation();
GetCurrentDirection();
//Если находимся у входа (возможно умерли), обнуляем счетчик
if(s.indexOf("right>Этаж 1 - Вход")>0)
{
KanalCurrentMapCoords = KanalMapCoords;
KanalCurrentDirection = KanalDirection;
top.frames[4].document.all.kanalst.value = 0;
}
//Если мы еще не делали ни шага, надо запомнить исходное положение
if(KanalCurrentMapCoords == "")
{
KanalCurrentMapCoords = KanalMapCoords;
KanalCurrentDirection = KanalDirection;
}
//Проверяем если мы успешно переместились и увеличиваем номер шага
if(KanalMapCoords != KanalCurrentMapCoords || KanalDirection != KanalCurrentDirection)
top.frames[4].document.all.kanalst.value++;
//Запоминаем текущее положение
KanalCurrentMapCoords = KanalMapCoords;
KanalCurrentDirection = KanalDirection;
//Может что-то валяется на полу, если это так то подбираем
var CurrentDrop = IsDropPresent();
if(CurrentDrop > 0)
{
if(CurrentDrop == 1 && pickupobjects == true)
{
var KanalStatLink = s.substring(s.indexOf("?get")+5,s.indexOf("?get")+25);
KanalStatLink = "?get="+KanalStatLink.substring(0,KanalStatLink.indexOf("IMG")-3);
top.frames[3].navigate("http://"+City+".combats.com/"+DungName+KanalStatLink);
DoAction = 1;
}
else if(CurrentDrop == 2)
{
var KanalStatLink = s.substring(s.indexOf("'rollconfirm")+14,s.indexOf("'rollconfirm")+74);
KanalStatLink = KanalStatLink.substring(KanalStatLink.indexOf(")'"),KanalStatLink.indexOf(")'")-10);
KanalStatLink = KanalStatLink.substring(KanalStatLink.indexOf(","),10-KanalStatLink.indexOf(",")+1);
KanalStatLink = KanalStatLink.replace(/\,/g, "");
KanalStatLink = KanalStatLink.replace(/\"/g, "");
if(pickupobjects)
KanalStatLink = "?get="+KanalStatLink+"&tmpname423=Да";
else
KanalStatLink = "?get="+KanalStatLink+"&pass=Нет";
top.frames[3].navigate("http://"+City+".combats.com/"+DungName+KanalStatLink);
DoAction = 1;
}
}
if(!DoAction)
{
//Если перед нами нет стены, а ты бывает что мобы видны из за стены а напасть нельзя
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)
{
usedObjects[object.id] = true;
}
//Перебираем все объекты на клетке
for(var i=0; i<top.frames[3].arrLayers[1][0]["l"].arrObjects.length; i++)
{
//Текущий объект
var object = top.frames[3].arrLayers[1][0]["l"].arrObjects[i];
//Если объект еще не использованный, открываем его
if(!usedObjects[object.id])
{
top.frames[3].navigate("http://"+City+".combats.com/"+DungName+"?useobj="+object.id);
DoAction = 1;
break;
}
}
}
//Если перед нами сидит моб, давай его завалим
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))
{
if(attackmobs) top.frames[3].navigate("http://"+City+".combats.com/"+DungName+"?attack=1&use="+top.frames[3].arrLayers[1][0]["l"].arrUnits[0].id);
}
DoAction = 1;
}
}
}
catch(err)
{
}
}
}
//Если мы не предприняли ничего, надо идти дальше
if(!DoAction)
{
CurrentStep = KanalSteps[top.frames[4].document.all.kanalst.value];
//Если конец маршрута, выходим
if(CurrentStep == "ex")
Exit();
//Если текущий шаг - поворот, делаем его не дожидаясь окончания задержки передвижения
else if(CurrentStep == "rl" || CurrentStep == "rr")
top.frames[3].navigate("http://"+City+".combats.com/"+DungName+"?rnd="+Math.random()+"&path="+CurrentStep);
//В противном случае ждем окончания задержки и идем вперед
else
Walk(CurrentStep);
}
}
else //Если карты не видно
{
//Подаем заявку
if(s.indexOf("Создать группу")>0)
PutKanalZayavka();
//Начинаем поход
else if(s.indexOf("Начать")>0)
StartKanalZayavka();
}
/////////////////////////////////////////////////////////////////////////////
Создаем в корне папку DungeonUsers и там для каждого персонажа, используемого на этом клиенте, создаем файл ТочноеИмяПерсонажаВключаяПробелыИЗаглавныеБуквы.txt
С содержанием:
var groupkanal = true; //Если идёте один - false
var koeff = 0.9; //процент ХП, при котором нападать на мобов надо
if(groupkanal==true){
//////////////////// Групповой поход ////////////////////
//Если вы идете один, просто выставьте groupkanal = false. Параметры ниже можно
//не изменять.
var provodnik = ""; //Кто является проводником/лидером.
if(provodnik==mylogin){var liderstvo = true;}else{var liderstvo = false;}
var grouppass = "321456"; //Пароль группы
var partija = "2"; //Количество людей в партии, включая вас.
/////////////////////////////////////////////////////////////////////////////
}
Всё подает, всё принимает, всё ходит и шаг пишет в обоих окнах.
Нет, не фантастика.
Сейчас у меня прицеп читает, в бою ли проводник и какой процент хп у него сейчас.
работы продолжаются))
всёравно главной проблемой покачто является обновление окна в именно нужные моменты
Нападать или не нападать решается через выставление галочки в настройках...ну через плагин, естественно, автоматически)))
Ну допустим:
Если проводник в бою
Если Проводник и прицеп на одной клетке, и у проводника HP<X HP, а у прицепа HP>Y, то прицеп прыгает к проводнику и начинает биться.Если проводник не в бою
Проводник восстанавливается, прицеп ждет 1 условия.Как-то так?
Спасибо за начало
Только при таком раскладе проверка клеток лишняя выходит...дальше проводника не убежит прицеп всёравно - враги не пустят)
Это действительно получается как помощь, когда проводник может...
а есть мысли, как из этого сделать более-менее командный проход данжа?
Странно.
у меня в инвентаре 3 пакета Зелье Могущества и он всё стабильно пьёт
8-ая версия, вроде как, вобще ходы не считает....
там алгоритм хождения не по порядковому номеру шага.
Ну что?
неужели нету мыслей о том, как должен действовать проводник и прицеп?
Что есть на руках:
1) в партию все залезают и ходят стабильно.
2) проводнику через дополнительно написанный плагин есть возможность передавать текущее значение ХП помошников
3) можно определять, на одной ячейке прицепы все с проводником или на разных
Практически это вобще всё, что нужно.
Вопрос остаётся только в том, какой алгоритм действий должен быть...
Кто-нить может сказать, как он хочет, чтоб это работало??
не может же быть так, чтоб ни у кого идей не было
()
только у меня так, чтобы команды были как переменные выведены
EnemiesCount для противников
SoratnikiCount для соратников
хотя у меня надо файл редактировать...но там всё безопасно
ну и у меня лишняя проверка, в какой команде вы, т.к. оказалось, что вы всегда в левой....но ничего от этого не страдает всёравно
бОльшая часть взломов идёт через трояны и доверчивых пользователей, а не через предоставляющих почтовые ящики.
Я же вопрос не так ставил...
я ставил "Работает ли функция автоматического переодевания комплектов хил-боевой в данжах"?
я знаю, для чего хилл-комплекты создаются...но в топике то человек с 1000хп в комплекте одежды хочет нырять - вот и копаемся, как же ему этот комплект нацепить, дохилиться до 1000 и нырнуть
я не в курсе:
А в данже функция переодевания комплекта хил-боевой работает?
Если работает - в чем задача тогда?
"итак, надо сделать чтобы в бот одевал хил, хилился до 1010хп, а потом лез в котел..."
если хил сам надевается нормально, то условие if(tkHP >1010){UseObjects();Walk("m3");}; становится уже достаточным для решения задачи
я мелкий лвл и могу чего-то не понимать)
а смысл?
1ae47a5fce875a25b30e2f50f20671b5 : if(tkHP >1000){UseObjects();Walk("m3");};
в таком виде то пока не долечится до 1000ХП и не поюзает предметы, никуда не пойдет.
else, обновление фрэйма, переодевание комплектов способами:
httpGetPageRequest()
top.frames[3].location = "http://" + external.SCity.Text + ".combats.com/main.pl?skmp=" + external.SComplectBattle.Text;
из всего этого я, покачто не сумел собрать рабочий вариант "Одеть комплект - обновить фрэйм - проверка условий" по причине:
Одевает комплект - обновляет фрэйм - условие покачто не выполнено и бот запускает второй круг:
одевает комплект - обновляет фрэйм - опять условие не выполняется...
если комплекты переодевать постоянно - не происходит восстановление хп.
Т.е. надо внести ещё какое-то условие типа Если maxHP< фикс. значение - Одеть комплект и обновить фрэйм(вместе в фигурных скобках и комплект и обновление) - Проверить условия остальные
Тогда второй круг будет состоять только из Проверить остальные условия.
Забыл упомянуть, что все события в строке происходят подряд...т.е. допустим у нас есть запись:
1ae47a5fce875a25b30e2f50f20671b5 : if(tkHP >1000)UseObjects();Walk("m3");
Если у человека при переходе на эту клетку 1000ХП(я был в шоке, когда у меня было 230хп и я тестил >230...оно выполнялось...потом дошло глянуть значение tkHP...230,23 о.О) то он поюзает объекты и пойдет дальше.
Если у человека меньше 1000хп, он не будет ждать вылечивания до нужного ХП, а тупо пойдёт дальше.
Я мессаг удлиннил прошлый...подрбно расписал, где ошибка...
а как решить - это надо думать.
народ, кто-нибудь решил проблему?
надо лезть в определенные места с хп больше 1000 (сундуки-ловушки и пр.)
как сделать то, чтобы бот лез в них с условием что хп>1000???
Ну это просто совсем
1ae47a5fce875a25b30e2f50f20671b5 : if(tkHP >1000){UseObjects();Walk("m3");};
А вот с переодеванием комплекта - тупик покачто.
"но бот сначала лезет в котел, а потом одевает комплект )" - не верно...комплект сперва одевается, а вот информация о ХП не обновляется - вот условние (tkHP>=maxHP) и выполняется.
httpGetPageRequest("http://angelscity.combats.com/main.pl?skmp=хххххххх"); - эту запись вобще нельзя пихать в маршрут...только если с условиями, при которых она будет выполняться. Почему:
cff55059e38c2869d04f003aebfb2c8b : httpGetPageRequest("http://angelscity.combats.com/main.pl?skmp=хххххххх");
- такая строка будет постоянно перевыполняться, пока не произойдет переход на другую клетку(т.е. он каждый раз будет переодевать комплект и при этом хилиться вы никак не сможете - хп вечно сбрасываться будут).
а вот это ещё ничего не гарантировало
можно было просто строку проверять на наличие этих записей и если есть - действовать
ну да ладно не заметил - ну мой косяк, согласен
Всё проще... Сделай скриншот из фотошопа, обрезай в паинте... и всё. Но было бы хорошо вставлять инфу о сканере какм-нибудь туда... есть в инете инфа о том как подделать такую подпись.
А инфа о сканере точно в файле хранится?
блокнотом полистайте скан...я бы сам полистал, но у меня сканера нету
согласен,но нужна и 3 закрытая часть,где были бы темы типо этой
Я против всяких закрытых тем для особо избранных...из-за них можно потерять знающих данные проблемы людей и лишиться их ценных комментариев...
hyppopotam пишет:Я предлагаю сделать закрытый раздел. Уже есть ряд тем которые не для общих глаз.
Ждём дозволения руководства на такой разделполностью согласен !
и чем быстрее тем лучше
я бы вобще разграничил форум на две части:
1) 7-ая версия
2) 8-ая версия.
Соответственно первая часть открытая. Вторая - закрытая. Она только для тех, кто купил себе 8-ую версию.
И Админу реагировать нужно было бы только на 2-ую часть, а первую пускай ведут сами пользователи 7-й версии.
Правда метод, так скажем, садистский слегка
Как и обещал, проверил ночью
При выставленном времени выхода у меня нормально бегает прицеп...извини, но выходит или нет после времени я проверять не стал
Мой Dungeon.js
var s = "";
var dungName = "";
var dungeonCoords = "";
var dungeonDirection = 0;
var dungeonPosition = "";
var dungeonLastPosition = "";
var breakAction = false;
var _id = "";
var _object = null;
var groupkanal;
var zag=0;
var texting=external.LoadFile("Modules\\DungeonUsers\\"+mylogin+".txt");
//alert(texting);
eval(texting);
//alert(texting);
//alert("groupkanal: "+groupkanal+"\n provodnik:"+provodnik+"\n liderstvo: "+liderstvo+"\n grouppass: "+grouppass+"\n partija: "+partija);
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(zag==0){
usedObjects = [];
dungeonMovementCount = [];
dungeonCoords = "";
dungeonDirection = 0;
var dungeonStartTime = parseInt(String(date.getTime()).substring(0,10));
zag++;
}
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()
{
zag=0;
var searched=false;
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;
if(z.indexOf("fl(\""+provodnik+"\"")>0){
top.frames[3].document.forms[ i ].pass.value=grouppass;
searched = true;
top.frames[3].document.forms[ i ].submit();
}
}
if(searched!=true){setTimeout(top.frames[3].window.location.reload(),3000);}
}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){
top.frames[3].document.all.start.click();
}else{setTimeout(top.frames[3].window.location.reload(),3000);}
}
if(groupkanal==false){
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;
}
}
у меня тут может каких-то модификаций нехватать, т.к. это с одного из 3-х клиентов взято и не на всех одинаковые файлы(для похода тут всё рабочее. по этому файлу ходят два бота в связке)...
рекомендую только сравнивать со своим.
Ещё есть затруднения с верным созданием файла jpeg. Дело в том что в формате этого файла содержится некоторая информация. Я точно не знаю спецификацию этой группы форматов (а jpeg разные бывают), но точно знаю что есть информация об устройстве при помощи которого он был получен. Надо бы на досуге заняться этим вопросом и уточнить как именно можно проверить jpeg на достоверность.
Достаточно открыть текстовым редактором рисунок. Фотошоп там прекрасно пишется.
Paint не пишет себя....но даже если фотошопный файл открыть paint'ом и сохранить заново - всёравно пометка фотошопа остаётся.
если из фотошопа скопировать само изображение в paint и сохранить - тогда пометки остаться не должно..наверное...
Combots Бот для БК » Сообщения от anahronik