151

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

anahronik пишет:

Что-то тут не так.

Как бы начал писать я:

function Obmennik(enabled)
{
    if(enabled)
    {
        PluginsOnLoad["Obmennik"] = "ObmennikHandler"; // работать по обновлению верхнего фрейма
    }
    else
    {
        PluginsOnLoad["Obmennik"] = ""; // выключить обработку по обновлению верхнего фрейма
    }
}
function ObmennikHandler()
{
    try
    {
        var _document = get_mainframe().document.all[0].innerHTML;
        var _path = "empty";
        if(_document.indexOf("Активировать устройство") > -1)
            _path = "Активировать устройство";
        else if(_document.indexOf("Обменять все фракционные предметы на жетоны.") > -1)
            _path = "Обменять все";
        else if(_document.indexOf("Деактивировать устройство.") > -1)
            _path = "Деактивировать";
        else if(_document.indexOf("Отойти от устройства. (завершить разговор)") > -1)
            _path = "завершить разговор";
 
        if(_path != "empty")
            external.ClickLink(_path,2);
    }
    catch(err)
    {
        //alert(err.description);
    }
}

Описание для external.ClickLink:
1) Первый параметр в скобках - что искать
2) Второй параметр в скобках - где искать

Второй параметр бывает:

// type: 
// 1 - переход по картинке(поиск именно функции перехода), не чувствителен к регистру;
// 2 - поиск по текстовой ссылке,чувствителен к регистру;
// 3 - по найденному в картинке тексту(outerHTML), не чувствителен к регистру;
// 4 - поиск по value среди input-элементов,чувствителен к регистру;
// не задано - поиск во всех.

Плагин НЕ РАБОЧИЙ.
В нём не правильно было понято, что надо писать в if.
В условии должен быть однозначный признак того, что пора нажимать конкретную кнопку. Не то, что кнопка есть, а именно то, что её надо нажать.
Сделайте описание диалогов всех целиком, вот как в последних сообщениях. Тогда станет ясно, что можно искать на экране в качестве однозначного признака.

Отличный шаблон! Переписал все свои плагины однообразно под него. Причину увидел в простом для программирования и красивом для понимания логировании действий.
В результате у меня после похода остаётся в чате что-то вроде такого лога:

hh:mi:ss Говорю с: Эшшли: _path = ...текст линка, который жму
hh:mi:ss Говорю с: Эшшли: _path = ...текст линка, который жму
hh:mi:ss Говорю с: Эшшли: _path = ...текст линка, который жму
hh:mi:ss Говорю с: Эшшли: нужны кости Проклятия Болот (*а такую доп.строку я пишу с кратким текстом перед отказом от задания)
hh:mi:ss Говорю с: Эшшли: _path = Нет, мне это не подходит. Просто поговорим, хорошо?
hh:mi:ss Говорю с: Эшшли: _path = ...текст линка, который жму
hh:mi:ss Говорю с: Эшшли: _path = (завершить разговор)

152

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

Например написать приём по аналогии с ()

153

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

re-shik пишет:
otherway пишет:
re-shik пишет:

А всетаки, можно поставить задержку на использования? Я переделап на точильный камень, так он 20 раз жмакает на него и не успевапет потгм делать ходы.

Вопрос "можно ли?)" - ответ "можно!"

Поделись идеей smile Буду признателен.

Точилиный камень? Механику его точно не знаю. Например: по аналогии с "hp_cleance" - проверяй эффект на себе и используй, только когда эффекта нет.
На всякий - по нему были изменения недавно: ()

154

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

+1 к включению/выключению

155

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

re-shik пишет:

А всетаки, можно поставить задержку на использования? Я переделап на точильный камень, так он 20 раз жмакает на него и не успевапет потгм делать ходы.

Вопрос "можно ли?)" - ответ "можно!"

Хочу ходить покупать целебные пироги в магазе.

С "ходить", "находить" и т.д. всё вроде понятно, не получается именно "купить". Выполняя click() по ссылке ничего в бк не происходит, в инве Целебный Пирог не появляется.

Вот такой основной код плагина использую для тестирования. Подскажите, плз, где грабли?

SPOILER Show
var ShopSection = "боевые и защитные";
var ItemCode = "invoke_kar1_heal10";
if (external.ClickLink(ShopSection,2) == true)
{
    zList = top.frames[external.mainFrameIndex].document.getElementsByTagName("a");
    for (var z = 0; z < zList.length; z++)
    {
        var aElement = zList[z];
        if ((aElement.toString().indexOf("shop.pl") > -1) && (aElement.toString().indexOf(ItemCode) > -1))
        {
            external.AddToChat("for z = " + z + " -->> aElement = " + aElement);
            external.AddToChat("for z = " + z + " -->> aElement.name = " + aElement.name);
            external.AddToChat("for z = " + z + " -->> aElement.document = " + aElement.document);

            external.AddToChat("for z = " + z + " -->> aElement.onclick = " + aElement.onclick);
            if (aElement.onclick !== null) external.AddToChat("for z = " + z + " -->> aElement.onclick.toString() = " + aElement.onclick.toString());
            external.AddToChat("for z = " + z + " -->> aElement.style = " + aElement.style);
            external.AddToChat("for z = " + z + " -->> aElement.style.visibility = " + aElement.style.visibility);
           
            aElement.click();
            external.AddToChat("aElement.click()...");
        }
    }
}
else external.AddToChat("-->> ERROR: ShopSection = '" + ShopSection + "' was not found.");

p.s. кредов хватает, руками жму "купить" после плагина - покупка происходит.

157

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

у всех есть, все пишут вот так: ()

158

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

Из плагина

external.AddToChat("dungName = " + dungName);

выводит

dungName =

, а хотелось бы значение переменной.

159

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

Убрать следы вида

*далее изменения от 9.2.8.14*
...
3) Бот делает одну полезную запись в реестр. Так что если антивирус ругнётся на попытку доступа к реестру - пожалуйста разрешите данное действие.

На работе нет прав управления антивирем и т.д.

160

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

Сам разобрался, топик не актуален более smile

161

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

Пожелание к будущей версии - поскорее бы big_smile

162

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

Ничего подобного у меня нет и небыло

163

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

otherway пишет:

Пожелание заменить текущие настройки подбора предметов на что-то более очевидное для меня  big_smile
Например, переключатель первый:
* подбирать предметы
* не подбирать предметы

Если выбрали Подбирать, то активируются доп. настройки тут же ниже:
* подбирать все
* подбирать только из списка
* подбирать всё кроме из списка
И уже дальше список... а в идеале два (каждый на свой вкладке, которая активируется при выборе соответствующей опции).

В довесок к своему заданию-собиралке иногда проводник что-то определенное отдаёт, а иногд ничего не отдаёт. А где-то самому надо оставить что-то для прицепа. Каждый час в Санде вчитываться в описание, менять настройки и хранить кучу списков не удобно...

p.s. форму ввода списка сделать выше... до вертикального размера настроек на других вкладках)

otherway пишет:

Опцию отключения авто-старта бота после запуска программы...

otherway пишет:

Процедурину для маршрута аля "задержка Х миллисекунд"... Актуальна для переодевания на маленьких таймаутах - бот не успевает раздеться/переодеться (вызовом фонового запроса).

Все 3 хотелки всё ещё актуальны  cool

164

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

otherway пишет:

Возможность сбросить историю посещений всех клеток метро прямо в маршруте. Что-то типа Exit();, только без выхода из метро...
Это надо для случаев, когда выходишь из метро вручную и, не перезагружая бота, оставляешь его на входе копать следующий раз. Сейчас он при следующем заходе, имхо, будет помнить посещение клеток с предыдущего похода (и, соответственно, ходить не туда, куда я хочу по условию "if (dungeonMovementCount[...] == 0)").

Anahronik пишет:


Если бот сам создаёт группу и начинает поход - то у него сбросится dungeonMovementCount.
Anahronik

drsn пишет:
otherway пишет:

Тогда есть бага... пока не знаю точно как повторить. Уже не раз сталкивался с тем, что бот идет по маршруту, считая, что он уже проходил часть клеток.
Если удасться повторить, то что необходимо как описание?

сначало повтори, потому что у меня считалка посещений работает коректно

Разобрался: проблема у меня возникает именно тогда, когда я руками захожу в чью-то группу, затем руками стартую поход в метро... и уже внутри жму запускаю бота нажимая в нем "Старт". Руками захожу в группы к прицепам, которые создают заявки.

...а если б вдумчиво читал Anahronik, сразу б разобрался :)

p.s. по-прежнему не отказался бы от функции для маршрута, или, скажем, пункта меню Отладка, сбрасывающего dungeonMovementCount (для выбора руками этого пункта сразу после входа в метро)...

165

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

И отдельный лог для "external.AddToChat" (дабы можно было легко смотреть на лог и ошибки, записанные из плагинов).

166

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

... (вместо вступления)
и в продолжение темы () давайте сделаем случайный юз приёма.

Идея первая: есть ситуации, когда приём никогда не надо использовать, вообще. Например: 11м лвл критом королеву и хлюпов быстрее убить на энтере, не кидая порезов ни на кого из них.

Идея вторая: есть ситуации, когда приём надо использовать обязательно: например, если тактик удара уже 25, то сделаем усиленные.

Идея третья: при возможности я могу захотеть использовать приём Прикрыться, а могу не захотеть... Скажем в 35 случаях из 100 я буду использовать этот приём...

Засовываем это всё в код приёма:

var v_cast = Boolean(false);
var v_cast_abs = Boolean(false);
var v_dont_cast_abs = Boolean(false);
var v_cast_rand = Number(35);    // % шанса каста (при не срабатывании абсолютов)
var v_cast_rand_min = Number(0);
var v_cast_rand_max = Number(99);
 
/*******************************
| НЕ используем приём (всегда) |
*******************************/

if (   (false)
// если в команде противников есть ...
    || (top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[1].sList.indexOf("Хлюп") != -1)
    || (top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[1].sList.indexOf("Королева Грибницы") != -1)
// если ХП противника маньше ... && противник не марочный
    || ((top.Battle.oBattle.oEnemySlot.nMaxHP < 500) && (top.Battle.oBattle.oEnemySlot.nMaxHP != 100))
// если на противнике есть ggsvern и у него 2к ХП (гусеницы с 3 этажа)
    || (   (true)
        && (top.Battle.oBattle.oEnemySlot.nMaxHP == 2000)
        && (typeof(top.Battle.oBattle.oEnemySlot.arrEffects["ggsvern"]) == "object")
        && (top.Battle.oBattle.sEnemyLogin.indexOf("Увесистый Гусениц") == 0)
       )
   )
{
    v_dont_cast_abs = true;
}
 
/*******************************
| Используем приём (всегда)    |
*******************************/

if (v_dont_cast_abs === false)
{
    if (   (false)
// если противник ...
                    // Бездна
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Страж Дайтон") == 0)
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Служитель Бездны") == 0)
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Большой Тяжелый Молот") == 0)
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Гарл Йонни Салистон") == 0)
                    // Катакомбы
            || (false)
                    // Потеряный вход
            || (false)
                    // ПТП
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Дарьяна Корт") == 0)
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Изгнанник Мглы") == 0)
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Маул Счастливчик") == 0)
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Заблудшая Душа") == 0)
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Дух-Хранитель") == 0)
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Механический Убийц") == 0)
                    // Sand
            || (false)
                    // Грибница
            || (false)
                    // Передовая
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Душа Кроггентайла") == 0)
        || (top.Battle.oBattle.sEnemyLogin.indexOf("Командир") == 0)
       )
    {
        v_cast_abs = true;
    }
/*******************************
| Используем приём (иногда)    |
*******************************/

    if (v_cast_abs === false)
    {
        if (   (false)
// если - иногда!
            || (true)
           )
        {
            if (v_cast_rand > Math.floor(v_cast_rand_min + Math.random() * (v_cast_rand_max - v_cast_rand_min + 1)))
                v_cast = true;
            else
                v_cast = false;
        }
    }
/*******************************
| Приём                        |
*******************************/

  if ((v_cast_abs === true) || (v_cast === true))
    {
//    _name = "Призрачная защита";
        _name = "spirit_block25";
//        _break = true;
    }
}

Принимаются ваши коменты/замечания...

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

167

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

Хочу отдельный файл-лог для трейд-чата (дабы не смешивался с приватным логом).

168

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

Тогда есть бага... пока не знаю точно как повторить. Уже не раз сталкивался с тем, что бот идет по маршруту, считая, что он уже проходил часть клеток.
Если удасться повторить, то что необходимо как описание?

169

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

Возможность сбросить историю посещений всех клеток метро прямо в маршруте. Что-то типа Exit();, только без выхода из метро...
Это надо для случаев, когда выходишь из метро вручную и, не перезагружая бота, оставляешь его на входе копать следующий раз. Сейчас он при следующем заходе, имхо, будет помнить посещение клеток с предыдущего похода (и, соответственно, ходить не туда, куда я хочу по условию "if (dungeonMovementCount[...] == 0)").


Если бот сам создаёт группу и начинает поход - то у него сбросится dungeonMovementCount.
Anahronik

170

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

Самую длинную кнопку Сохранить добавить и на вкладку с заметками (дабы сразу нажимать Сохранить после изменения заметок).



Попробуйте изменить содержание заметок не нажимая Сохранить.
Меня память подводить может, но мне кажется, что я заморачивался с автоматическим сохранением.

Anahronik

171

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

Процедурину для маршрута аля "задержка Х миллисекунд"... Актуальна для переодевания на маленьких таймаутах - бот не успевает раздеться/переодеться (вызовом фонового запроса).

172

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

Опцию отключения авто-старта бота после запуска программы...

173

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

Пожелание заменить текущие настройки подбора предметов на что-то более очевидное для меня  big_smile
Например, переключатель первый:
* подбирать предметы
* не подбирать предметы

Если выбрали Подбирать, то активируются доп. настройки тут же ниже:
* подбирать все
* подбирать только из списка
* подбирать всё кроме из списка
И уже дальше список... а в идеале два (каждый на свой вкладке, которая активируется при выборе соответствующей опции).

В довесок к своему заданию-собиралке иногда проводник что-то определенное отдаёт, а иногд ничего не отдаёт. А где-то самому надо оставить что-то для прицепа. Каждый час в Санде вчитываться в описание, менять настройки и хранить кучу списков не удобно...

p.s. форму ввода списка сделать выше... до вертикального размера настроек на других вкладках)

174

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

qwerty пишет:

хз. я всегда юзаю:

_name="hp_cleance";

без всяких условий, зачем лишний раз нагружать код?

Чуть быстре комп и станет заметно сколько раз за бой высвечивается надпись "Нечего очищать" smile

175

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

Ешё бы фильтр подбора чарок... у меня вот с таким фильтром и с галкочкой подымает...

------ Чарки 7 ------
Зачаровать Броню [7]
Зачаровать Кольцо [7]
Зачаровать Наручи [7]
Зачаровать Обувь [7]
Зачаровать Ожерелье [7]