я там слова исключения для Эма скидывал в РМ, не добавлял еще?
Если никаких сюрпризов не случится, то добавлю на выходных всё.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Combots Бот для БК » Сообщения от anahronik
я там слова исключения для Эма скидывал в РМ, не добавлял еще?
Если никаких сюрпризов не случится, то добавлю на выходных всё.
Вот что накалякал, тестю
if(IsUnderlined)
{_name = "";}
else
{_target = $("span[style*='underline']",top.Battle.oBattle.oGroupsLayer).first().text();
top.Battle.oBattle.Send( { skip: _target } );
//_name = "Смена Противника"; }Пробовал, стоит на месте не бъет
У тебя скобка попала в комментарий.
Должно было быть
if(IsUnderlined)
{_name = "";}
else
{_target = $("span[style*='underline']",top.Battle.oBattle.oGroupsLayer).first().text();
top.Battle.oBattle.Send( { skip: _target } );
}
//_name = "Смена Противника";
Смена противника:
_target = "НовыйПротивник";
top.Battle.oBattle.Send( { skip: _target } );
Поиск подчеркнутого противника:
_target = $("span[style*='underline']",top.Battle.oBattle.oGroupsLayer).first().text();
_target = $("img:not(img[slist*='" + top.Battle.oBattle.sMyLogin +"'])",top.Battle.oBattle.oGroupsLayer).attr("slist").split(", ")[0];
А ты помнишь, как делать смену противника?
Tudorake, я не совсем понимаю, что во время боя происходит.
Можешь мне объяснить, как для идиота, что происходит:
1) Ты зашел в бой и....ждёшь(?) пока кто-нибудь выставит тебе размен.
2) Меняешь противника на выставившего размен...
что происходить дальше будет?
Если до меня дойдёт, то придумаю, как реализовать...
Можно.
Вообще возможные закладки:
chat - Чат
syslog - Системные сообщения
trade_chat - Торговля
radio_chat - Радио
alllog - Все логи
mylog - Мои логи
bsettings - Настройки
conflict - Конфликты
т.е. тут chat достаточно заменить на mylog и будет выбрана закладка "Мои логи".
Я не уверен, но попробовал бы написать так:
if(top.Battle.oBattle.arrMethods["hp_enrage"] && top.Battle.oBattle.arrMethods["hp_enrage"].oMethod.bEnable)
Уже на двух компах не работает бот, файла index.js нету
журнал чистил, ЦЦ кринером тоже пробовал
вообщем всё о чем говорилось выше делал..
Уже не могу играть больше недели.Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.************** Текст исключения **************
System.UnauthorizedAccessException: Отказано в доступе по пути "C:\Program Files (x86)\Combots\Accounts\*********.ca2".
в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
У тебя прямым текстом в ошибке написано, что отказано в доступе.
Тебе в FAQ - там вопрос есть "В Windows 7 выдаёт ошибку. "У вас нет разрешения на сохранение файлов в этом месте." с решением проблемы.
*Я ещё занят проектом по работе - прошу прощения*.
Сегодня до меня достучались и я попробовал найти, где проблема и как исправить.
Короче, идёт в папки пользователей, от чьего имени вы запускаете ботов. Допустим от имени User1:
C:\Users\User1\AppData\Local\Microsoft\Windows\Temporary Internet Files
Запускаем поиск файла index.js и удаляем при нахождении.
Собственно после этого проблема пропала.
А через OrderedObjects("Подземники"); нельзя?
e969e660ccee86def6ce665a13f9be37 : OrderedObjects("Подземники"); AttackMobs(); Walk("rr");
а как сделать несколько ников противника?)
if(top.Battle.oBattle.sEnemyLogin.indexOf("Паук 1") > -1 || top.Battle.oBattle.sEnemyLogin.indexOf("Паук 2") > -1)
В общем меня спрашивают, как нажать на объекты в подземелье...вспоминать каждый раз долго, решил что-то вроде гайда написать.
С недавнего времени команда разработчиков в БК добавили возможность использования фрэймворка JQuery.
Для меня это большой плюс, т.к. громоздкие циклы с for теперь можно заменить на всего 1 строку кода.
Естественно мы раньше и сами могли прицепить его для собственного удобства, но это легко было бы проверить со стороны сервера и, соответственно, привлечь внимание к персонажу.
Что использую при тестах:
- IE 11. Его консоль и проводник DOM просто шикарны.
- ()
- описание ()
Постановка задачи:
1) Если находимся на клетке со сторожем - найти сторожа и нажать на него.
2) Если висит меню с выбором действий со сторожем - нажать Поговорить.
3) Сам разговор
4) Если уже поговорили - идти дальше.
Решение пункта 1
При помощи "Проводник DOM" легко найти, что код Сторжа выглядит таким образом:
<map name="ObjectsMap" id="ObjectsMap"><area title="Сторож могил" href="javascript:void(0)" coords="132,41,219,202"></map>
Это тэг 'area' в главном фрэйме, в title которого содержится слово сторож.
Используя синтаксис jquery поиск этого тэга можно записать таким образом:
$('area[title*="Сторож"]',get_mainframe().document)
Первый параметр - это селектор (Что искать), второй параметр - это контекст(Где начинать поиск).
Если вы выполнте данный код в консоли, то увидите, что будет возвращен объект, содержащий массив найденных реультатов, к которым можно обращаться по индексу ([0],[1]...[index]) и свойство length, указывающее на количество найденных объектов.
Результирующий код для пункта 1:
var storozh = $('area',get_mainframe().document).filter('[title*="Сторож"]');
if(storozh.length > 0) { storozh[0].click(); }
Примечание: Если на клетке было бы два сторожа, можно было бы кликнуть по второму storozh[1].click();
Решение пункта 2
До момента нажатия на сторожа, меню с "Поговорить" не существует в DOM и к нему нельзя обратиться.
После нажатия данное меню выглядит следующим образом:
<div id="pmenu" style="left: 195px; top: 141px; height: auto; overflow: visible; display: block; visibility: visible; -ms-overflow-y: visible;">
<a onclick="return p_action('dialog=gy_gravedigger_default&use','1.4.10.71-77')" href="#">Поговорить</a><br>
<input name="close" style="width: 16px; height: 16px; vertical-align: middle;" onclick="closemenu(); return false;" type="submit" value="X"></div>
Меню - тэг div с id pmenu.
Код нахождения:
$('#pmenu',get_mainframe().document)
Но само меню нам не важно - нам важна ссылка на Поговорить, внутри данного меню.
Код нахождения ссылки "Поговорить":
$('#pmenu',get_mainframe().document).find('a:contains("Поговорить")')
Объединяем решение двух пунктов:
var talk_link = $('#pmenu',get_mainframe().document).find('a:contains("Поговорить")');
if(talk_link.lenght > 0)
{ talk_link[0].click();}
else
{
var storozh = $('area',get_mainframe().document).filter('[title*="Сторож"]');
if(storozh.length > 0) { storozh[0].click(); }
}
Решение пункта 3:
Это решается плагинами. На форуме где-то были, но искать сейчас некогда ![]()
Решение пункта 4:
А вот здесь уже то, что нельзя протестировать в IE, т.к. используются методы самого бота.
Псевдокод:
if(Поговорили?){ Поговорили=false; Walk("rr"); }else{ Поговорить и присвоить значение переменной Поговорили=true;}
Для реализации буду использовать методы external.InitVal(key,val), external.SetVal(key,val), external.GetVal(key).
При помощи данных методов доступ к переменной можно выполнить и из плагинов, и из маршрутов.
Существовать переменная будет до полного перезапуска бота.
Готовый(почти) код:
external.InitVal("storozh_talked",false);
if(external.GetVal("storozh_talked") == true)
{
external.SetVal("storozh_talked",false); Walk("rr");
}
else
{
Поговорить;
external.SetVal("storozh_talked",true);
}
Остаётся объединить решения для 1, 2 и 4-го пункта:
external.InitVal("storozh_talked",false);
if(external.GetVal("storozh_talked") == true)
{
external.SetVal("storozh_talked",false);
Walk("rr");
}
else
{
var talk_link = $('#pmenu',get_mainframe().document).find('a:contains("Поговорить")');
if(talk_link.lenght > 0)
{
external.SetVal("storozh_talked",true);
talk_link[0].click();
}
else
{
var storozh = $('area',get_mainframe().document).filter('[title*="Сторож"]');
if(storozh.length > 0) { storozh[0].click(); }
}
}
Хочу обратить внимание, что строки external.SetVal("storozh_talked",true) и external.SetVal("storozh_talked",false) здесь не обязательны, т.к. вы можете задать эти значения внутри плагина для диалога.
Собственно запись кода в одну строку, чтобы использовать в маршруте:
external.InitVal("storozh_talked",false); if(external.GetVal("storozh_talked") == true) { external.SetVal("storozh_talked",false); Walk("rr"); } else { var talk_link = $('#pmenu',get_mainframe().document).find('a:contains("Поговорить")'); if(talk_link.lenght > 0) { external.SetVal("storozh_talked",true); talk_link[0].click(); } else { var storozh = $('area',get_mainframe().document).filter('[title*="Сторож"]'); if(storozh.length > 0) { storozh[0].click(); } } }
Travel, действительно стоит.
Приветствуем версию 9.2.8.21.
Короткое было тестирование.
Тестируем новую 9.2.8.20
Ну что, тестируем 9.2.8.19 ![]()
Стоп.
Я думал, что оружие было тоже снятно ![]()
Хотя бы у кого-нибудь бывали случаи при включенной галочке контроля оружия, чтобы бот полез без оружия в бой(Подземелья не считаются)?
Вопрос принципиальный, т.к. логика надетости комплекта не прозрачна, не понятна(точнее она только в FAQ более-менее упомянута, т.к. учитывается количество ХП, указанное под комплектами в настройках) и действительно нуждается в модернизации. В то же время проверка надетости оружия простая, как кирпич.
Проверка оружия и комплекта производится одновременно, поэтому если были бои без оружия - это показатель плохого выбора момента проверки(хотя по мне так он идеален) помимо самой логики проверки. Если проблема только с остальной экипировкой - это показатель того, что момент проверки выбран успешно и работает и необходимо только саму проверку доработать.
кстати та девочка не с нашего форума
Я что-то пропустил...о какой девочке речь?
"Так, джентльмены, по койкам!"(с)
Я крайне негативно отношусь к публикации информации, полученной из личных переписок, на форуме без согласия обоих сторон - не красиво это до безобразия ![]()
Прошу воздержаться впредь от подобного.
Галочки есть, настройки есть, жалобы на иногда (каким-то неведомым чудом) проскакивающие не сработавшие проверки этих галочек есть.
Толи в куксах, толи в юзерагенте...в любом случае это не то, на что необходимо реагировать ![]()
Ну т.е. это сообщение существует уже....мммм...да всегда оно было ![]()
Даже если мне кто и напишет, я всё равно об этом никому не сообщу. ![]()
Так что комментариев на эту тему я давать не буду в целом.
Над шмотками всё равно в планах усилить контроль уже было. Как только по проекту на работе разгружусь, так придумаю чего-нибудь. Может в мелкой доработке на выходных сделаю первое поползновение в эту сторону.
Кстати...2 компа...а ботов много. Есть же лимит на одновременный запуск максимум 5 ботов на комп ![]()
Я зашел в магазин и сделал простой тест:
get_mainframe().document.getElementsByTagName("a")[0].click();
и получил сообщение, что у меня не достаточно кредитов для покупки какого-то там кинжала.
Это показатель того, что просто клика вполне хватает.
А теперь по поводу "всё находит в не пустом документе".
Т.к. я не верю в то, что документ мог бы успеть загрузиться, то делаю вывод: тот перебор, что ты видишь - это перебор старого документа, который был до окончания выполнения external.ClickLink(ShopSection,2).
Механика у тебя правильная...ну, почти.
if (external.ClickLink(ShopSection,2) == true)
вот из-за этой строки проблема.
Эта строка проверяет, была ли нажата ссылка...но не ждёт полной загрузки страницы.
Т.е. ты перебираешь ссылки в теле if у документа, который по своей сути ещё пустой.
Естественно он ничего не находит ![]()
А всё остальное правильно и логично.
Кстати, админы БК прикрутили недавно JQuery фрэймворк, так что теперь можно пользоваться им для более коротких поисков объектов.
Например поиск и нажатие на ссылку Инвентарь в верхнем фрейме:
$("iframe[name^='header']").contents().find("a[onclick*='edit=']").click();
Крайне рекомендую так же иметь IE11 и пользоваться кнопкой F12 (средства разработки) в нём.
Так?
if(top.Battle.oBattle.oEnemySlot.nHP <= 1960 && (top.Battle.oBattle.sEnemyLogin.indexOf("Отморозок") > -1 || top.Battle.oBattle.sEnemyLogin.indexOf("Отмороженный Бугай") > -1))
{
for(j=0; j<10; j++)
{
if(top.Battle.oBattle.arrScrolls[j].innerHTML.match(/snowball1/))
{
top.Battle.oBattle.arrScrolls[j].click();
top.document.all[0].getElementsByTagName('TBODY')[top.document.all[0].getElementsByTagName('TBODY').length-1].getElementsByTagName('INPUT')[0].value = top.Battle.oBattle.sEnemyLogin;
top.document.all[0].getElementsByTagName('TBODY')[top.document.all[0].getElementsByTagName('TBODY').length-1].getElementsByTagName('BUTTON')[0].click();
break;
}
}
}
Учитывая, что я не менял механизма нажатия по объектам - просьба вернуть на "как было" для меня звучит странно
Из изменений в этой части были только новые фразы, которые меня просили добавить.
в Демонсе кликнул на сундук с ключем(сняло хп)
В главном фрэйме при этом что-нибудь изменилось, кроме значения ХП?
Если вещь появилась - то как называется и что в описании у неё написано?
Если сообщение - то что в нём.
Если ничего - то это печально, т.к. проблема не известно где и с чем, а чинить надо ![]()
Combots Бот для БК » Сообщения от anahronik