251

(3 ответов, оставленных в JavaScript)

Переопределять функции на рабочем проекте из-за пары десятков ботов...брр...я бы не стал.

Boriska69 пишет:

я там слова исключения для Эма скидывал в РМ, не добавлял еще?

Если никаких сюрпризов не случится, то добавлю на выходных всё.

Tudorake пишет:

Вот что накалякал, тестю

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();

255

(17 ответов, оставленных в Проблемы / Баги / Неполадки)

_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)

260

(25 ответов, оставленных в Проблемы / Баги / Неполадки)

Abver пишет:

Уже на двух компах не работает бот, файла index.js нету
журнал чистил, ЦЦ кринером тоже пробовал
вообщем всё о чем говорилось выше делал..
Уже не могу играть больше недели.

Подробная информация об использовании оперативной
(JIT) отладки вместо данного диалогового
окна содержится в конце этого сообщения.

************** Текст исключения **************
System.UnauthorizedAccessException: Отказано в доступе по пути "C:\Program Files (x86)\Combots\Accounts\*********.ca2".
   в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

У тебя прямым текстом в ошибке написано, что отказано в доступе.
Тебе в FAQ - там вопрос есть "В Windows 7 выдаёт ошибку. "У вас нет разрешения на сохранение файлов в этом месте." с решением проблемы.

261

(25 ответов, оставленных в Проблемы / Баги / Неполадки)

*Я ещё занят проектом по работе - прошу прощения*.

Сегодня до меня достучались и я попробовал найти, где проблема и как исправить.

Короче, идёт в папки пользователей, от чьего имени вы запускаете ботов. Допустим от имени User1:
C:\Users\User1\AppData\Local\Microsoft\Windows\Temporary Internet Files
Запускаем поиск файла index.js и удаляем при нахождении.
Собственно после этого проблема пропала.

262

(33 ответов, оставленных в Настройки / Плагины)

А через OrderedObjects("Подземники"); нельзя?

e969e660ccee86def6ce665a13f9be37 : OrderedObjects("Подземники"); AttackMobs(); Walk("rr");

263

(347 ответов, оставленных в Настройки / Плагины)

Limbach пишет:

а как сделать несколько ников противника?)

if(top.Battle.oBattle.sEnemyLogin.indexOf("Паук 1") > -1 || top.Battle.oBattle.sEnemyLogin.indexOf("Паук 2") > -1)

264

(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&amp;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:
Это решается плагинами. На форуме где-то были, но искать сейчас некогда sad

Решение пункта 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

(279 ответов, оставленных в Общий)

Travel, действительно стоит.

Приветствуем версию 9.2.8.21.

266

(279 ответов, оставленных в Общий)

Короткое было тестирование.
Тестируем новую 9.2.8.20

267

(279 ответов, оставленных в Общий)

Ну что, тестируем 9.2.8.19 smile

268

(71 ответов, оставленных в Флейм)

Стоп.

Я думал, что оружие было тоже снятно hmm

Хотя бы у кого-нибудь бывали случаи при включенной галочке контроля оружия, чтобы бот полез без оружия в бой(Подземелья не считаются)?

Вопрос принципиальный, т.к. логика надетости комплекта не прозрачна, не понятна(точнее она только в FAQ более-менее упомянута, т.к. учитывается количество ХП, указанное под комплектами в настройках) и действительно нуждается в модернизации. В то же время проверка надетости оружия простая, как кирпич.
Проверка оружия и комплекта производится одновременно, поэтому если были бои без оружия - это показатель плохого выбора момента проверки(хотя по мне так он идеален) помимо самой логики проверки. Если проблема только с остальной экипировкой - это показатель того, что момент проверки выбран успешно и работает и необходимо только саму проверку доработать.


кстати та девочка не с нашего форума

Я что-то пропустил...о какой девочке речь?

269

(71 ответов, оставленных в Флейм)

"Так, джентльмены, по койкам!"(с)

Я крайне негативно отношусь к публикации информации, полученной из личных переписок, на форуме без согласия обоих сторон - не красиво это до безобразия smile
Прошу воздержаться впредь от подобного.

Галочки есть, настройки есть, жалобы на иногда (каким-то неведомым чудом) проскакивающие не сработавшие проверки этих галочек есть.

270

(3 ответов, оставленных в Общий)

Толи в куксах, толи в юзерагенте...в любом случае это не то, на что необходимо реагировать smile
Ну т.е. это сообщение существует уже....мммм...да всегда оно было smile

271

(71 ответов, оставленных в Флейм)

Даже если мне кто и напишет, я всё равно об этом никому не сообщу. smile
Так что комментариев на эту тему я давать не буду в целом.

Над шмотками всё равно в планах усилить контроль уже было. Как только по проекту на работе разгружусь, так придумаю чего-нибудь. Может в мелкой доработке на выходных сделаю первое поползновение в эту сторону.

Кстати...2 компа...а ботов много. Есть же лимит на одновременный запуск максимум 5 ботов на комп smile

Я зашел в магазин и сделал простой тест:

get_mainframe().document.getElementsByTagName("a")[0].click();

и получил сообщение, что у меня не достаточно кредитов для покупки какого-то там кинжала.

Это показатель того, что просто клика вполне хватает.

А теперь по поводу "всё находит в не пустом документе".
Т.к. я не верю в то, что документ мог бы успеть загрузиться, то делаю вывод: тот перебор, что ты видишь - это перебор старого документа, который был до окончания выполнения external.ClickLink(ShopSection,2).

Механика у тебя правильная...ну, почти.

if (external.ClickLink(ShopSection,2) == true)

вот из-за этой строки проблема.

Эта строка проверяет, была ли нажата ссылка...но не ждёт полной загрузки страницы.
Т.е. ты перебираешь ссылки в теле if у документа, который по своей сути ещё пустой.

Естественно он ничего не находит smile

А всё остальное правильно и логично.

Кстати, админы БК прикрутили недавно JQuery фрэймворк, так что теперь можно пользоваться им для более коротких поисков объектов.
Например поиск и нажатие на ссылку Инвентарь в верхнем фрейме:

$("iframe[name^='header']").contents().find("a[onclick*='edit=']").click();

Крайне рекомендую так же иметь IE11 и пользоваться кнопкой F12 (средства разработки) в нём.

274

(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;
                }
        }
}

275

(279 ответов, оставленных в Общий)

Пробуйте smile