Переопределять функции на рабочем проекте из-за пары десятков ботов...брр...я бы не стал.
251 2014-03-30 11:46:59
Re: JQuery на примере начала диалога в Некровиле (3 ответов, оставленных в JavaScript)
252 2014-03-24 18:57:07
Re: Смена противника в хаотических боях (20 ответов, оставленных в Настройки / Плагины)
я там слова исключения для Эма скидывал в РМ, не добавлял еще?
Если никаких сюрпризов не случится, то добавлю на выходных всё.
253 2014-03-23 15:56:17
Re: Смена противника в хаотических боях (20 ответов, оставленных в Настройки / Плагины)
Вот что накалякал, тестю
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 = "Смена Противника";
254 2014-03-23 15:31:34
Re: Смена противника в хаотических боях (20 ответов, оставленных в Настройки / Плагины)
Смена противника:
_target = "НовыйПротивник";
top.Battle.oBattle.Send( { skip: _target } );
Поиск подчеркнутого противника:
_target = $("span[style*='underline']",top.Battle.oBattle.oGroupsLayer).first().text();
255 2014-03-23 15:29:05
Re: Великие битвы (17 ответов, оставленных в Проблемы / Баги / Неполадки)
_target = $("img:not(img[slist*='" + top.Battle.oBattle.sMyLogin +"'])",top.Battle.oBattle.oGroupsLayer).attr("slist").split(", ")[0];
256 2014-03-23 14:57:04
Re: Смена противника в хаотических боях (20 ответов, оставленных в Настройки / Плагины)
А ты помнишь, как делать смену противника?
257 2014-03-23 13:47:20
Re: Смена противника в хаотических боях (20 ответов, оставленных в Настройки / Плагины)
Tudorake, я не совсем понимаю, что во время боя происходит.
Можешь мне объяснить, как для идиота, что происходит:
1) Ты зашел в бой и....ждёшь(?) пока кто-нибудь выставит тебе размен.
2) Меняешь противника на выставившего размен...
что происходить дальше будет?
Если до меня дойдёт, то придумаю, как реализовать...
258 2014-03-23 13:40:50
Re: Плагин:переключение нижнего фрейма на Чат (24 ответов, оставленных в Настройки / Плагины)
Можно.
Вообще возможные закладки:
chat - Чат
syslog - Системные сообщения
trade_chat - Торговля
radio_chat - Радио
alllog - Все логи
mylog - Мои логи
bsettings - Настройки
conflict - Конфликты
т.е. тут chat достаточно заменить на mylog и будет выбрана закладка "Мои логи".
259 2014-03-10 14:44:31
Re: 3в1 утереть пот, ярость и стойкость Проверка в слотах приёмов (6 ответов, оставленных в Настройки / Плагины)
Я не уверен, но попробовал бы написать так:
if(top.Battle.oBattle.arrMethods["hp_enrage"] && top.Battle.oBattle.arrMethods["hp_enrage"].oMethod.bEnable)
260 2014-03-10 13:03:38
Re: Бот перестал работать (25 ответов, оставленных в Проблемы / Баги / Неполадки)
Уже на двух компах не работает бот, файла index.js нету
журнал чистил, ЦЦ кринером тоже пробовал
вообщем всё о чем говорилось выше делал..
Уже не могу играть больше недели.Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.************** Текст исключения **************
System.UnauthorizedAccessException: Отказано в доступе по пути "C:\Program Files (x86)\Combots\Accounts\*********.ca2".
в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
У тебя прямым текстом в ошибке написано, что отказано в доступе.
Тебе в FAQ - там вопрос есть "В Windows 7 выдаёт ошибку. "У вас нет разрешения на сохранение файлов в этом месте." с решением проблемы.
261 2014-03-03 10:42:52
Re: Бот перестал работать (25 ответов, оставленных в Проблемы / Баги / Неполадки)
*Я ещё занят проектом по работе - прошу прощения*.
Сегодня до меня достучались и я попробовал найти, где проблема и как исправить.
Короче, идёт в папки пользователей, от чьего имени вы запускаете ботов. Допустим от имени User1:
C:\Users\User1\AppData\Local\Microsoft\Windows\Temporary Internet Files
Запускаем поиск файла index.js и удаляем при нахождении.
Собственно после этого проблема пропала.
262 2014-02-02 13:17:25
Re: Подземники (33 ответов, оставленных в Настройки / Плагины)
А через OrderedObjects("Подземники"); нельзя?
e969e660ccee86def6ce665a13f9be37 : OrderedObjects("Подземники"); AttackMobs(); Walk("rr");
263 2014-02-02 13:13:50
Re: Приемы в Combots 8+ (347 ответов, оставленных в Настройки / Плагины)
а как сделать несколько ников противника?)
if(top.Battle.oBattle.sEnemyLogin.indexOf("Паук 1") > -1 || top.Battle.oBattle.sEnemyLogin.indexOf("Паук 2") > -1)
264 2014-02-02 11:48:32
Тема: JQuery на примере начала диалога в Некровиле (3 ответов, оставленных в JavaScript)
В общем меня спрашивают, как нажать на объекты в подземелье...вспоминать каждый раз долго, решил что-то вроде гайда написать.
С недавнего времени команда разработчиков в БК добавили возможность использования фрэймворка 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(); } } }
265 2014-01-21 12:37:57
Re: Combots 9.2.8.17-34 (279 ответов, оставленных в Общий)
Travel, действительно стоит.
Приветствуем версию 9.2.8.21.
266 2014-01-20 09:08:15
Re: Combots 9.2.8.17-34 (279 ответов, оставленных в Общий)
Короткое было тестирование.
Тестируем новую 9.2.8.20
267 2014-01-19 18:32:44
Re: Combots 9.2.8.17-34 (279 ответов, оставленных в Общий)
Ну что, тестируем 9.2.8.19
268 2014-01-16 11:43:19
Re: Палево на форуме (71 ответов, оставленных в Флейм)
Стоп.
Я думал, что оружие было тоже снятно
Хотя бы у кого-нибудь бывали случаи при включенной галочке контроля оружия, чтобы бот полез без оружия в бой(Подземелья не считаются)?
Вопрос принципиальный, т.к. логика надетости комплекта не прозрачна, не понятна(точнее она только в FAQ более-менее упомянута, т.к. учитывается количество ХП, указанное под комплектами в настройках) и действительно нуждается в модернизации. В то же время проверка надетости оружия простая, как кирпич.
Проверка оружия и комплекта производится одновременно, поэтому если были бои без оружия - это показатель плохого выбора момента проверки(хотя по мне так он идеален) помимо самой логики проверки. Если проблема только с остальной экипировкой - это показатель того, что момент проверки выбран успешно и работает и необходимо только саму проверку доработать.
кстати та девочка не с нашего форума
Я что-то пропустил...о какой девочке речь?
269 2014-01-15 11:51:52
Re: Палево на форуме (71 ответов, оставленных в Флейм)
"Так, джентльмены, по койкам!"(с)
Я крайне негативно отношусь к публикации информации, полученной из личных переписок, на форуме без согласия обоих сторон - не красиво это до безобразия
Прошу воздержаться впредь от подобного.
Галочки есть, настройки есть, жалобы на иногда (каким-то неведомым чудом) проскакивающие не сработавшие проверки этих галочек есть.
270 2014-01-15 11:46:36
Re: почему пишет заходили с другого компьютера. (3 ответов, оставленных в Общий)
Толи в куксах, толи в юзерагенте...в любом случае это не то, на что необходимо реагировать
Ну т.е. это сообщение существует уже....мммм...да всегда оно было
271 2014-01-14 11:45:44
Re: Палево на форуме (71 ответов, оставленных в Флейм)
Даже если мне кто и напишет, я всё равно об этом никому не сообщу.
Так что комментариев на эту тему я давать не буду в целом.
Над шмотками всё равно в планах усилить контроль уже было. Как только по проекту на работе разгружусь, так придумаю чего-нибудь. Может в мелкой доработке на выходных сделаю первое поползновение в эту сторону.
Кстати...2 компа...а ботов много. Есть же лимит на одновременный запуск максимум 5 ботов на комп
272 2014-01-10 17:11:42
Re: Как купить чё-нить в магазине плагином? (15 ответов, оставленных в Настройки / Плагины)
Я зашел в магазин и сделал простой тест:
get_mainframe().document.getElementsByTagName("a")[0].click();
и получил сообщение, что у меня не достаточно кредитов для покупки какого-то там кинжала.
Это показатель того, что просто клика вполне хватает.
А теперь по поводу "всё находит в не пустом документе".
Т.к. я не верю в то, что документ мог бы успеть загрузиться, то делаю вывод: тот перебор, что ты видишь - это перебор старого документа, который был до окончания выполнения external.ClickLink(ShopSection,2).
273 2014-01-10 13:27:31
Re: Как купить чё-нить в магазине плагином? (15 ответов, оставленных в Настройки / Плагины)
Механика у тебя правильная...ну, почти.
if (external.ClickLink(ShopSection,2) == true)
вот из-за этой строки проблема.
Эта строка проверяет, была ли нажата ссылка...но не ждёт полной загрузки страницы.
Т.е. ты перебираешь ссылки в теле if у документа, который по своей сути ещё пустой.
Естественно он ничего не находит
А всё остальное правильно и логично.
Кстати, админы БК прикрутили недавно JQuery фрэймворк, так что теперь можно пользоваться им для более коротких поисков объектов.
Например поиск и нажатие на ссылку Инвентарь в верхнем фрейме:
$("iframe[name^='header']").contents().find("a[onclick*='edit=']").click();
Крайне рекомендую так же иметь IE11 и пользоваться кнопкой F12 (средства разработки) в нём.
274 2014-01-10 13:04:13
Re: Снежки (3 ответов, оставленных в Общий)
Так?
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;
}
}
}