551

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

Часто необходимо анализировать какой-нибудь текст, полученный в результате выполнения скрипта.
Длинный текст. На помощь вам приходит буфер обмена.

window.clipboardData.setData("Text","Вот сюда какой-нибудь текст");

* при первой попытке что-нибудь положить в буфер, браузер спросит у вас разрешение на это действие. В бота пихать не надо - бот, вроде, работает в silent режме и не отображает подобные диалоговые окна.

552

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

При выполнении запросов через DebugBar лучше всего использовать конструкцию try - catch
Пример:

try
{
   // ваш код
}
catch(err)
{
   alert(err.description)
}

553

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

При разработке плагинов основная часть всегда создаётся вне бота, ибо неудобно.

Инструментарий:

1) текстовый редактор с подсветкой JS. Лучше ещё с поддержкой авто-форматирования текста. Ну и совсем замечательно, если он умеет отображать список функций/переменных и т.п.
Пользуюсь: phpDesigner (хрень платная, но лекарста имеются в наличии)

2) для удобства ползания по DOM, для мониторинга http-запросов, для более-менее удобного выполнения JS запросов используйте DebugBar (хрень бесплатная и интуитивно-понятна)

3) крайне полезной вещью является "Средства разработчика" в комплекте IE8/IE9/IE10. Рекомендую, естественно, ставить IE10.
Вызывается кнопкой F12. Самое полезное, что в нём интересует - верхняя закладка Сценарий, правая закладка Watch(Контрольное значение).
Впишите, допустим, top и нажмите Enter.
Примечание: Если у вас IE8 и вписать там ничего нельзя - слева есть кнопка паузы. Сперва нажмите её. Но предупреждаю, в IE8 отображается не вся объектная структура в сравнении с IE9. Правда если у вас winXP, то IE9 вы физически поставить не можете - смиритесь.

554

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

Readme файл по написанию плагинов от 7-й версии бота (лишнее вырезал).

Combots поддерживает плагины JavaScript.
Файл плагин должен иметь латинское имя и расширение .js
Все плагины хранятся в папке plugins

Как пользоваться плагинами:
При нажатии на галку вызывается главная функция плагина с параметром enabled - true
Если галку снять - вызывается главная функция с параметром enabled - false.
Чтобы перезагрузить плагин необходимо выключить-включить плагин.

Помощь при написании плагина:
Главная функция плагина должна иметь вид "function Имя файла плагина без .js (enabled){...}".
Где enabled является состояние галки напротив плагина в списке.
Пример главной функции:
function Test(enabled)
{
    if(enabled) alert('Плагин включен!');

    else alert('Плагин выключен!');
}

Необходимым элементом создания плагинов является привязание плагина к обновлению фреймов.
Этим занимается массив PluginsOnLoad.
Например у нас есть фукнция ее нужно привязать к обновлению страниц.
Делается это так PluginsOnLoad["имя плагина без .js что является именем главной функции"] = "Имя функции";
Пример PluginsOnLoad["Test"] = "TestDocumentRefreshHandler";
Чтобы отвязать функцию от обновления надо вызвать PluginsOnLoad["имя"] = "";
Функция-приниматель обновления должна быть без парамметров.
URL обновленной страницы содержится в RageRefreshed
Пример функции-handler:
function TestHandler()
{
var url = PageRefreshed;
if(url.indexOf("dungeon")>0)
    {
    //мы в подземельи
    }
else if(url.indexOf("edit=2")>0)
    {
    //мы в инвентаре в разделе Магия
    }
}

Теперь все что понадобится при плагино-строении:

top - объект верхнего уровня, в нем содержатся все фреймы
top.frames["bottom"]- фрейм строки чата (и нижних кнопок)
top.Battle.oBattle - объект-pointer к бою(!)
top.Battle.oBattle.Attack() - нажимает кнопку Вперед! в бою.
top.Chat.Self - объект-pointer к чату
top.Chat.Self.AddMessage("xxx") - добавляет сообщение в чат (! не посылает серверу а добавляет как будто принял)
mylogin - имя текущего персонажа
external.SaveFile("имя файла","текст") - сохраняет в папке plugins Файл с именем "имя файла" и содержанием "текст"
external.LoadFile("имя файла") - загружает и возвращает содержимое файла с именем "имя файла" из папки plugins

555

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

Нечто вроде этого для первого вопроса
()

По поводу второго, у тебя есть шанс плагином быстро-быстро найти неугодный тебе объект и удалить его - другого варианта предложить не могу.
Начни с малого: чтение исходного JS от 8-й версии и через Debugbar поиск объекта.

P.S.
Я напоминаю, что ветка тут не просто так, а для направления в правильное русло человека, задающего вопросы.
Если самому разбираться ни в чем не охото - тебе в настройки/плагины с такими вопросами.

556

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

Данный раздел создан исключительно для программистов или людей, желающих понять принципы работы JS.
Остальным данная ветка не должна быть интересна.

Пожелание: Если у вас просто куча вопросов, никак не связанных с конкретной проблемой, создайте тему именно под себя со своим ником в качестве названия, чтобы было удобно ориентироваться.
Шаблон названия в данном случае "Вопросы от %ВашНикНаФоруме%"
Если у вас конкретная проблема, то назовите тему В СООТВЕТСТВИИ С ПРОБЛЕМОЙ(!), а не "Помогите" или "Не получается".

Ветка будет злостно мной модерироваться.

Спасибо за внимание.

557

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

Ну, допустим, разделы я добавил smile

558

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

Да, ты прав smile
Что-то я замкнулся в том, как написал сам - вот и не додумал твою реализацию.

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

Ситуация 2: Тот же массив, но точно нужно выпить оба эликсира будет. Выпивается первый, фрэйм обновляется
и бот снова себе загружает через doLoad эту же страницу 3-го раздела, вместо использования открытой. Причина: при выпивании эликсира location содержит не razdel=, а main.pl?use=" + found[2] + "&n=" + found[3].

Сомнительным выглядит местоположение строки

temp_inf = top.frames[external.mainFrameIndex].document.all[0].innerHTML;

И это сразу после перехода по ссылке. Я бы сделал это примерно на том же уровне, где doLoad написан.

559

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

Лечится вот так:

не, так оно не лечится. Он может выпить, а может не найти элексир, а брейку пофигу будет smile

Вот тут не понял)

Ты проверяешь только момент получения дрожи/ослабления.

top.frames[external.mainFrameIndex].document.all[0].innerHTML.match(/(?:Слабость к (?:Воде|Огню|Воздуху))|(?:Дрожь в коленях)/i)

Хоть я и не уверен в том, что он может пропустить данный фрэйм, но всёже как-то опасно smile
В том плане, что неплохо бы ещё контролировать в информации о персонаже наличия данных вредных эффектов.

У тебя ведь нету обновления temp_info при глотке.

Какрас у меня обновление temp_info только при выпивании чего-либо, или если надо проверить другой раздел, относительно прошлого элексира.

560

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

Собственно Exile правильно указал строку external.inBattle и даже то, на что её надо заменить.
Точнее строку указал uniken1, а Exile на что заменить smile
Экстернал банально не успевал изменить значение, т.к. он привязан к действию бота по времени.

Данную строку заменил в первом посте и теперь там самый рабочий вариант.


Exile, по поводу твоей версии плагина:
+ Сократил код с 3-х строк до одной при добавлении в массив элексиров на выпивание

morkovkaName[morkovkaName.length] = new Array ("Флакончик маны",3);

Безусловно это красивее выглядит, но я оставил 3 строки, чтобы сохранить комментарий о том, что в этой строке именно название эликсира, а в этой имено номер раздела.

- Ситуация: у тебя разница в 500 ХП. У тебя по условию добавляется в массив, допустим, на 500ХП, на 200ХП, на 150ХП абстрактные морковки. И он выпъет их всех, т.е. на 850ХП.
Причина: нету стопора после первого выпитого (раньше стопором работала переменная healed, сейчас я сделал по-другому).

- Если вдруг пропустил слабость/дрожь и они уже висят - он не снимит их.

- Нарушение в логике работы с temp_inf в Morkovka2Handler. Ты обнуляешь temp_inf всегда, но вставляешь новое значение только если не в инвентаре... что-то тут явно не то

+- Алерт(ерр.дескриптион) лучше убирать smile

+- относительно моей версии: у меня меньше запросов на поиск морковок, если подряд забивались в массив морковки из одного раздела инвентаря, т.к. сохраняется полученная о разделе информация. Если они вразнобой - то от моего алгоритма толка мало smile

561

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

У Exile и Жеки точно хватает smile

562

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

Не туда у вас мысли полезли smile
Найдите причину, осознайте, придумайте  выход smile

Если лень - сам напишу...одну строку поменять smile

563

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

zverila, вы сейчас мне всё сознание съели smile
Набор приёмов переключать в пещере в маршруте можно, но никто этого ещё не написал (malrom если соберется с духом и сделает, то опубликует способ) smile

на определенных мобов определенные приемы стояли

На форуме в некоторых ветках проскакивали условия проверки соответствия имени противника в бою и приминение прёма в зависимости от совпадения.
() 4-й приём срабатывает только если в имени противника не содержится слово "страж" или "(зверь" (потому что проверка стоит < 0).
Вот он:

if(top.Battle.oBattle.sEnemyLogin.indexOf("Страж") < 0 && top.Battle.oBattle.sEnemyLogin.indexOf("(зверь") < 0)
_name = "иденификатор приёма"

&& - логическое И в условиях. || - логическое или. Т.е. если надо проверить, что противник должен быть или стражем, или зверем, то условие будет

if(top.Battle.oBattle.sEnemyLogin.indexOf("Страж") >= 0 || top.Battle.oBattle.sEnemyLogin.indexOf("(зверь") >= 0)
_name = "иденификатор приёма"

Если только для стража:

if(top.Battle.oBattle.sEnemyLogin.indexOf("Страж") >= 0)
_name = "иденификатор приёма"

По поводу "названий приёмов"...правильно сказать "идентификатор приёма".
Как узнать идентификатор написано в теме FAQ в Общем разделе по боту.

564

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

vetalj-bj,
ты вставил кусок плагина Морковка, вместо того, чтобы вставить сам плагин и подредактировать его под себя.
почитай о нём тему smile

Свойства папки - Безопасность - Изменить - Добавить - вписать Все (если англ. винда Everyone) - галочка полный доступ.
Всё руки не доходят в FAQ написать. Так уже раза 4 на форуме писал точно smile

566

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

Не совсем представляю проблему, но бот одевать может только лук из прописанного боего комплекта, т.к. о других луках он знать не знает и знать не собирается

Про этот баг было известно давно, но блин...столько версий морковок выложено было, что сами запутались, где последняя.
В общем теперь морковку надо брать из прикрепленной темы и проблем не будет.

568

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

1,3,7 - вполне решаемо плагинами smile

2 - не до маршрутов по всему городу сейчас и в обозримом будущем...

4 - это итак можете делать, руками откорректировав маршрут. Главное - скриптик на JS написать.

5 - ну потеряешь ты 1-2 минуты с боя, при том не с каждого. Не значительно.


malron, я сам на php писал когда пришёл сюда. В результате ставил себе задачу(или другие мне ставили) и я её худо-бедно реализовывал.
Никаких jQuery и прочих фрэймворков. Только то, что используется в БК и чистый javascript.
У версий 8.2- был открытый javascipt и там можно ознакомиться с тем, как работал бот(поменялось дофига всего, но принцип остался прежним) - надо бы тебе его почитать. Надо только придумать, где взять такое старьё smile

569

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

1) Ещё раз лучников посмотреть, чтоб без стрел не лезли + перезарядка без снятия лука
2) Добавить фразы в грибнице, чтоб не стопорились
3) Сделать походы от ЦП до пещер в санде и демонсе
4) Возврат в залы после ремонта/лечения,если во время этого перегрузился комп
5) Исправление: групповые бои
6) Добавить интервал действий для подземелий
7) Слегка оптимизировать использование приёмов
8) Привязать external'ы для комнаты и "ВБою" к обновлению фрэйма
9) Переменная "количество смертей в подземелье": сделать её применимой для  маршрутов подземелий и в бою

Прогресс
22.06.2011 Пункт 1,2,5. Добавил новую функцию для упрощения поиска ссылок для нажатия. Потом сделаю пример, чтобы было понятнее.
30.06.2011 Пункты 6,8. Галочки в конструкторе маршрутов теперь сохраняются, а не выставляются на каждый шаг. Добавлен выбор города для авторизации персонажа.
01.07.2011 Пункт 7. Возможно исправлен баг неиспользования объектов.
06.07.2011 Пункт 3,4. Теперь тестирование.


17.07.2011 Изменения по external: все экстерналы доступны в приёмах, добавлены Started(статус запущенности бота), LoadMethods(смена комплекта приёмов в боте), ArrowsEnds(указание на законченность стрел в инвентаре),CurrentCell(текущая координат в данже), а также death_count доступен в маршрутах и приёмах (раньше для хлюпослива использовался). Придуман и реализован механизм неподнятия одинаковых ключей. Переработан алгоритм подсчета противников/саратников и указания на подчеркнтость в бою текущего противника.


Если багов не вылезет, то выложу в четверг. В связи с тем, что изменения вышли за рамки простых баг-фиксов, версия будет иметь номер 9.2.

570

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

Плагин обновлен.
Существенно уменьшено количество запросов при определении болезней/ослаблений и при поиске элексиров.
Исправлена неработоспособность у людей, использующий приём "ослабляющее острие".

Плагин существенно переработан, а протестирован только одним человеком. Но протестирован успешно.

571

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

Кхм. Так а я к drsn'у притензий и не имею. smile

572

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

Значит назвал плохо файл.
должно быть Morkovka.js

573

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

drsn, здрасти, блин.
Чего это мною написанным плагином для единственного человека с ником LU-KA ты* делиться собрался? smile

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

В общем, суть в том, что выкладывать плагины можно ТОЛЬКО с разрешения автора.
И именно потому, что нельзя компромитировать чужие методы.
Если вы не знаете автора - значит пользуйтесь втихую и никому никогда о нём не рассказывайте.
Исключение: плагин был уже выложен кем-либо связанным с автором и доработан вами.

*кстати, почему на "Вас" обращение в ПМ было? Ты же вроде был одним из самых первых людей, что помогали мне мои наработки тестировать ещё во времена 8-й версии бота, когда я javascript не знал smile

привет.
хочу купить лицензию
но сперва интересует ее функционал . не люблю сайты в виде форумов с поиском нужной информации поэтому пишу и жду ответов
интересмует все для мага огня . как тчо работает . как он проводит бой?
бот нужен для обычной качки на 11 уровень, так как влом руками брать да и вообще надоело уже

Фразы вносить некуда - всё закрыто.
Отправь в ПМ, на каких фразах стопорится.