суббота, 10 сентября 2016 г.

Хитрости для Yep_BattleAICore

Это прекрасный скрипт для МВ, позволяющий тегами довольно гибко настроить поведение врагов. Линк тут http://yanfly.moe/2015/10/19/yep-16-battle-a-i-core/

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

Как известно, счет строк под <AI Priority> происходит по порядку сверху вниз, и первое удовлетворяющее условие и реализуется.

Доступных тегов много, но, когда хочется их комбинировать, возникают сложности.
Например, я хочу, чтобы когда ХП врага станет меньше половины он с таким-то шансом использовал 1 навык, и с таким-то другой. Иначе - простую атаку.

Написать два рандома типа Random 50%: Skill 10, Lowest HP% друг под другом просто, но как это увязать еще и с количеством ХП.


Тут на помощь приходит Eval, в который можно подсунуть несколько условий через && (чего в обычном режиме нельзя).

Вот пример выше переписанный под eval:
<AI Priority>
eval user.hp / user.mhp <= 0.5 && Math.random() <= 0.3: SKILL 41, <<nothing>>
eval user.hp / user.mhp <= 0.5 && Math.random() <= 0.5: SKILL 42, <<nothing>>
Always: SKILL 40, <<nothing>>

</AI Priority>

user - это тот, на ком проверяется, mp/mhp <= 0.5 и есть реализация HP% param <= 50% , а далее через && тот самый рандом. Math.random() генерирует случайное число от 0 до 1, ну и проверка, соответственно, проста.

Зная чутка, как устроены классы баттлеров, евалом можно творить много чего.