1

Тема: Приемы в Combots 8+

Итак, в Combots 8.0 разработана новая система приемов,
позволяющая использовать т. н. условия применения.

Использование приемов основывается на выполнении кода приемов.
Код приема является последовательностью выражений на языке JavaScript, позволяющий использование условий.

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


Как создать код с помощью констркутора:

1. Если нужно использовать условие, устанавливаем значение нужного условия и нажимаем "Вставить", иначе переходим к п. 2.
2. В области "Прием" вписываем идентификатор приема (часто-используемые идентификаторы можно выбрать в выпадающем меню)
3. (опционально) Если нужно использовать обратное условие "иначе" нажимаем "Вставить else"
4. (опционально) Повторяем п.2 с другим идентификатором приема

Примеры кода:

Простое использование приема

_name = "hit_strong";

Использование приема с условием

if((top.Battle.oBattle.oMySlot.nMagic * 100 / top.Battle.oBattle.oMySlot.nMaxMagic) < 10)
    _name = "wis_gray_meditation";

Использование приема с прямым условием и обратным

if((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) > 33)
    _name = "hit_luck";
else
    _name = "hit_willpower";

Что такое "идентификатор приема"?

Условное значение на англ. языке используемое для технического именования приемов
(невозможно использовать русские имена). Пример: novice_hit, идентификатор для приема Вломить.


Как узнать его для нужного приема?

Инвентарь -> Умения -> Приемы -> Если нужный прием уже выбран, снимите.-> Выбираем прием (одеваем).
После того как прием оделся -> Правый клик на странице -> Свойства -> Адрес (URL).
(Please log in or register to see this URL)hit_willpower&all=0&r=0.832645540297005&show_cat=hidden_div_all
Выделенное является именем приема, в данном случае это Воля к победе.
Таким методом вычисляется 100% правильный идентификатор, вне зависимости от уровня приема или совпадения картинок (в старом методе).


Что (кто) такие условия приемов?

Условия приемов - выражения позволяющие использовать прием при определенных обстоятельствах.

Логическая схема условий:
1. Если "значение условия" верно
2. Выполняется прием "идентификатор приема 1"
3. Иначе (если условие неверно)
4. Выполняется прием "идентификатор приема 2"


Примеры условий:

if((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) > 33)
Условие верно только когда уровень жизни выше 33%.
if((top.Battle.oBattle.oMySlot.nMagic * 100 / top.Battle.oBattle.oMySlot.nMaxMagic) < 10)
Условие верно только когда уровень маны ниже 10%.
if(top.Battle.oBattle.oGroupsLayer.getElementsByTagName("IMG")[1].sList.split(", ").length > 5) 
Условие верно когда количество противников больше пяти.

Дополнительные условия:

Использование JavaScript позволяет использовать очень много условий (а не только 3 стандартных из программы).

Условия тактик

if(top.Battle.oBattle.arrRes["hit"].innerHTML > 10)
Условие верно только когда кол. набранных мечей больше 10.
 
Другие тактики:
if(parseInt(top.Battle.oBattle.arrRes["krit"].innerHTML) > 10) - капли
if(parseInt(top.Battle.oBattle.arrRes["counter"].innerHTML) > 10) - контрудары
if(parseInt(top.Battle.oBattle.arrRes["block"].innerHTML) > 10) - блоки
if(parseInt(top.Battle.oBattle.arrRes["parry"].innerHTML) > 10) - парирования
if(parseInt(top.Battle.oBattle.arrRes["hp"].innerHTML) > 10) - сердца
if(parseInt(top.Battle.oBattle.arrRes["spirit"].innerHTML) > 10) - уровень духа

Условие абсолютного значения уровня жизни (не %)

if(top.Battle.oBattle.oMySlot.nHP < 50)
Условие верно если уровень жизни меньше 50 хп.

Условие абсолютного значения уровня маны (не %)

if(top.Battle.oBattle.oMySlot.nMagic < 50)
Условие верно если уровень маны меньше 50 хп.

Условие наличия эффекта на персонаже

if(typeof(top.Battle.oBattle.oMySlot.arrEffects["novice_hit"]) == "object")
Условие верно если на персонаже висит прием "Вломить"
 
if(typeof(top.Battle.oBattle.oMySlot.arrEffects["novice_hit"]) != "object")
Условие верно если на персонаже НЕ висит прием "Вломить"

Условие по имени противника

if(top.Battle.oBattle.sEnemyLogin.indexOf("Паук") > -1)
 
Можно использовать не полное имя.

Комплексные условия:

Два условия последовательно (логический оператор "и")

if((top.Battle.oBattle.oMySlot.nMagic * 100 / top.Battle.oBattle.oMySlot.nMaxMagic) < 10 && (top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) < 20)
    _name = "wis_gray_meditation";
Условие верно если HP ниже 20% и Мана ниже 10%.

Два условия параллельно (логический оператор "или")

if((top.Battle.oBattle.oMySlot.nMagic * 100 / top.Battle.oBattle.oMySlot.nMaxMagic) < 10 || (top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) < 20)
    _name = "wis_gray_meditation";
Условие верно если HP ниже 20% или Мана ниже 10%.

Связка условий

if((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) > 66)
    _name = "hit_luck";
else if((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) > 33)
    _name = "";
else
    _name = "hit_willpower";
 
Если HP зеленые, использует "Удачный удар", если желтые - ничего, если красные - "Воля к победе"

Раздел будет пополняться по мере появления новой информации / вопросов.

2

Re: Приемы в Combots 8+

Добавлено дополнительное условие наличия эффекта на персонаже.

3

Re: Приемы в Combots 8+

Добавлены комплексные условия.

4

Re: Приемы в Combots 8+

Пример готового (Please log in or register to see this URL).

(Please log in or register to see this URL)

5

Re: Приемы в Combots 8+

Добавлю пару пожеланий, нужны они или нет решать пользователям, но думаю их реализация почти полностью сделает бой с ботами интеллектуальным:
Сделать наборы приемов настраиваемыми. Причем именно наборы:
- по условию: "пещера", "этаж". Эту инфу вроде несложно вытянуть, в плагинах от СэрАртём для макстона такое реализовано для автонавигации.
- по условию: боты напротив. Есть ли там бот в названии которого есть "зомб", "прокл", "Служитель"

  Попробую оформить мысль до конца. То есть захожу я к примеру, в Бездну, прыгаю на Служителя Бездны, при этом алгоритм определеящий, что напротив бот в имени которого есть фраза "Служитель" и включается соответственно набор приемов под этого бота. Если в названии бота такого названия нет, то включается мой заранее настроенный набор приемов под "Бездна. Х этаж"

6

Re: Приемы в Combots 8+

просьба сделать каст 1 приема раз в 3 хода например маг барьер на девятке пробивают за 3-4размена если маг барьер сам слетит то там летит крит на 400+ и ты труп.. а так раз в 3 хода он сам перекастовывает барьер и будет живучее smile

Женщины - инквизиторы мужского сердца...

7

Re: Приемы в Combots 8+

Tester пишет:

в плагинах от СэрАртём для макстона такое реализовано для автонавигации.

Ссылкой поделись пожалуйста. Где он их выкладывает? Хочется посмотреть smile

(Please log in or register to see this URL)

8

Re: Приемы в Combots 8+

Ссылкой поделись пожалуйста. Где он их выкладывает? Хочется посмотреть

В скроллах у него. (Please log in or register to see this URL)

9

Re: Приемы в Combots 8+

Народ такой вопрос: 3 приема 1-го характера(ярость, стойкость, утереть пот) при создании приемов поставил использовать ярость если Хп больше 45% если нет тогда стойкость, и отдельно поставил прием утереть пот если хп меньше 10% так вот, бот использует прием ярость все норм, но когда у него хп не уменьшаеться до 45 он не использует стойкость и при достижении ярость х3 прием не береться! бывает такое что бот в бою даже не утратит столько хп что б брал стойкость, а бывает что через пару ходов берет уже стойкость х3, но ярости дальше не возьмет, если хп не будет больше 45%!

в общем замутил кашу кто поможет код написать? если, не прокатит в етом случаи! или ставить 2-а кода и 2-а значения если? пример 1-й прием ставить стандарт а во втором приеме но уже ниже ставить наоборот?

Отредактировано KniFe (2009-04-28 11:09:20)

Будь по проще, и люди подтянутся.
Одна смерть - Трагедия, Милион - статистика!

10

Re: Приемы в Combots 8+

KniFe приёмы выполняются в порядке расположения в таблице приёмов.
Поставь сначала ярость (с условием) потом стойкость. Не через else, а просто следующим приёмом.
Тогда в любом случае если ярость не пройдёт, то при наборе пяти сердец будет стойкость.

(Please log in or register to see this URL)

11

Re: Приемы в Combots 8+

Админ, Прошу обратить внимание...
Возможно ли сделать так, что бы на определённом месте перед определённым ботом менять комплект приемов... т.е. что бы он использовал профильку?
И что бы так было с комплектами, например перед СБ одевал комплект с пазом антимагии....
Реально такое сделать?!

12

Re: Приемы в Combots 8+

Lyushen пишет:

Админ, Прошу обратить внимание...
Возможно ли сделать так, что бы на определённом месте перед определённым ботом менять комплект приемов... т.е. что бы он использовал профильку?
И что бы так было с комплектами, например перед СБ одевал комплект с пазом антимагии....
Реально такое сделать?!

Постараюсь.

13

Re: Приемы в Combots 8+

УУуу) Спасибо! Ты красава!

14

Re: Приемы в Combots 8+

to Admin, как определить активен ли прием? и работает ли условие else if в приемах?

Отредактировано kulish (2009-05-11 17:00:09)

15

Re: Приемы в Combots 8+

roll

Жизнь прекрасно - и плевать что это неправдо.
-

16

Re: Приемы в Combots 8+

я наверно просматрел или ненашол. прием выжить чтоб юзал если духа меньше 5, напомите)

17

Re: Приемы в Combots 8+

wowikk пишет:

я наверно просматрел или ненашол. прием выжить чтоб юзал если духа меньше 5, напомите)

Не ленимся читать... в начале темы всё было написано...

if(top.Battle.oBattle.arrRes["spirit"].innerHTML < 5)
_name="spirit_survive"

UPD
wowikk, я бы посоветовал сделать двойное условие для "Выжить". С конструкцией ИЛИ.
В зависимости от персонажа вторая часть может быть по холичеству HP, например <10%.

(Please log in or register to see this URL)

18

Re: Приемы в Combots 8+

Как мне сюда добавить строчку, это дикая до 60%, скрытая ловка до 40%, ниже 40% хлебалка
Надо вставить чтобы скрытая ловка, не работала если тактик защиты меньше 3.
Я уже и || и && пробывал, чет не получается
Прием:
if((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) > 60)
_name = "krit_wildluck";
else
if((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) > 40)
_name = "multi_hiddendodge";
else
if((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) < 40)
_name = "krit_blooddrink";

Надо вставить: if(top.Battle.oBattle.arrRes["block"].innerHTML > 3)

19

Re: Приемы в Combots 8+

Господа, кто подскажет, как сделать так, чтобы бот выпускал зверя при условии, что протитвников осталось 2 или менее?!

Вот что я пробывал вписать в графу "приемы":

if(EnemiesCount < 2)
_name = "pet_unleash";

Бот зверька то выпускает, но делает это в самом начале боя... т.е. условие он не соблюдает sad

У кого какие мысли!?

20

Re: Приемы в Combots 8+

Поддержу MagBen.
До сих пор не смог использовать условие с EnemiesCount.
У кого-нибудь это получилось? Может какая-то опечатка закралась?

(Please log in or register to see this URL)

21

Re: Приемы в Combots 8+

ну я решил это так:
if(EnemiesCount == 1)
_name = "pet_unleash";

т.е. только когда противник остается один - выпускает зверя... не знаю, удобно или нет, но за вечер и ночь у меня сова стала 7 лвл smile

22

Re: Приемы в Combots 8+

Каким образом можно прописать чтобы приём использовался при хп меньше одного значения,но не больше другого значения
Я не особо знаком с символикой но могу предположить что так : < && !>

23

Re: Приемы в Combots 8+

BloodEagle пишет:

Каким образом можно прописать чтобы приём использовался при хп меньше одного значения,но не больше другого значения
Я не особо знаком с символикой но могу предположить что так : < && !>

А я бы просто && использовал и не мудрил:

if(((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) < 66) && ((top.Battle.oBattle.oMySlot.nHP * 100 / top.Battle.oBattle.oMySlot.nMaxHP) > 33))
_name = "убить_всех_щаз";

(Please log in or register to see this URL)

24

Re: Приемы в Combots 8+

if(((((typeof(top.Battle.oBattle.oMySlot.arrEffects["spirit_11_prot_100"]) != "object") ||

typeof(top.Battle.oBattle.oMySlot.arrEffects["spirit_12_prot_100"]) != "object") || typeof(top.Battle.oBattle.oMySlot.arrEffects["spirit_13_prot_100"])

!= "object") || typeof(top.Battle.oBattle.oMySlot.arrEffects["spirit_14_prot_100"]) != "object") && top.Battle.oBattle.arrRes["spirit"].innerHTML > 15) 

_name = spirit_block25


будет работать такое?)

25

Re: Приемы в Combots 8+

не работает, чего надо дописать?)