Узнать все модификаторы цели.

Ciceroni

Пользователь
19 Фев 2017
10
0
Пре-ет.
Сабж: абилка вот с каким смыслом: узнать баффы-дебаффы цели. Применить их на себя. Убрать дебаффы с цели.
Для второго можно использовать конструкцию типа getcaster():AddNewModifier("блаблабла куча кода которую сам напишу уж большой уже")
Для третьего просто target:Purge("ещё одна куча кода сколько можно")
А вот с первым я вСтупоре. +нужно проигнорировать модификаторы без времени окончания, то есть не тырить ауру венги или третий свена.
 
Последнее редактирование модератором:
Так как все - тлен и различить бафф с дебаффом нельзя, то предлагаю сделать наоборот. 1. FindAllModifieпrs. 2. Purge. 3. Те что убрались - дебаффы, остались баффы.
 
Так как все - тлен и различить бафф с дебаффом нельзя, то предлагаю сделать наоборот. 1. FindAllModifieпrs. 2. Purge. 3. Те что убрались - дебаффы, остались баффы.
Баффы - не проблема, у функции Purge есть параметр bRemovePositiveBuffs. Сяп за FindAllModifers, но вот как работать с таблицами? В смысле, FindAllModifers возвращает таблицу всех модификаторов НПС, и мне нужно её как-то вывести в консоль хоть для начала, о том, что бы применить их на себя я и не мечтаю.
 
Последнее редактирование модератором:
Последнее редактирование модератором:
Баффы - не проблема, у функции Purge есть параметр bRemovePositiveBuffs. Сяп за FindAllModifers, но вот как работать с таблицами? В смысле, FindAllModifers возвращает таблицу всех модификаторов НПС, и мне нужно её как-то вывести в консоль хоть для начала, о том, что бы применить их на себя я и не мечтаю.
Код:
local tModifiers = hUnit:FindAllModifiers()

for index, hModifier in pairs(tModifiers) do
 print( index, hModifier:GetName() )
end
 
Последнее редактирование модератором:
IsBuff если и есть - то только в панораме. IsDebuff существует только для луа модифаеров.
 
[quote author=CryDeS link=topic=1337.msg8395#msg8395 date=1487600358]
Код:
local tModifiers = hUnit:FindAllModifiers()

for index, hModifier in pairs(tModifiers) do
 print( index, hModifier:GetName() )
end
[/quote]
Красткость - сестра таланта, чё. Дальше - яснее, нужно применить AddNewModifier() на кастера, осталось только заполнить четыре его переменных, из которых есть проблемная - optionalSourceAbility. Это абилка, которая генерирует этот модификатор(Соотетвственно, у нас этой абилки нет, мы нагло тырим только модификаторы а не способности героя). Самый очевидный выход - копировать все способности таргета, оказавшиеся пассивными, и скрывать их в HUD-е.
Но это выглядит слишком громоздко. Неужели нет другого, более простого пути?..
Давайте, скажите мне, я в вас верю!
 
Что тебе мешает использовать nil в качестве optionalSourceAbility?
 
Модификаторы не будут нормально работать?
 
Красткость - сестра таланта, чё. Дальше - яснее, нужно применить AddNewModifier() на кастера, осталось только заполнить четыре его переменных, из которых есть проблемная - optionalSourceAbility. Это абилка, которая генерирует этот модификатор(Соотетвственно, у нас этой абилки нет, мы нагло тырим только модификаторы а не способности героя). Самый очевидный выход - копировать все способности таргета, оказавшиеся пассивными, и скрывать их в HUD-е.
Но это выглядит слишком громоздко. Неужели нет другого, более простого пути?..
Давайте, скажите мне, я в вас верю!
Не выйдет засунуть все в пассивки.
Скажи точнее, что ты хочешь иметь от абилки? Копировать все баффы на цели, или что?
 
Последнее редактирование модератором:
Но это выглядит слишком громоздко. Неужели нет другого, более простого пути?..
Давайте, скажите мне, я в вас верю!

Тебе не нужно воровать чужие абилки. У бафов есть прекрасный метод GetAbility(). А дебафы тебе и не нужны.
Просто проверяешь модификатор на принадлежность бафу через IsDebuff() и затем берешь handle абилки через GetAbility() и уже её используешь в optionalSourceAbility.
 
Последнее редактирование модератором:
Не выйдет засунуть все в пассивки.
Скажи точнее, что ты хочешь иметь от абилки? Копировать все баффы на цели, или что?

Да, он хочет сделать абилку, которая будет красть временные бафы с цели и накладывать их на кастера (ну или другую цель).
 
Последнее редактирование модератором:
А вот с первым я вСтупоре. +нужно проигнорировать модификаторы без времени окончания, то есть не тырить ауру венги или третий свена.


Ну можно спокойно проверять через флаг IsAura().
Или как вариант проверять модификатор на флаг исчезновения при смерти: RemoveOnDeath() - если стоит true, то это точно не аура. В противном случае аура. Это первое, что мне в голову пришло, может есть еще что для распознания подобного.
 
Последнее редактирование модератором:
Через nil будет даваться эффект, но он не будет давать БОНУСОВ. Так как внутри юзается аналог GetSpecialValueFor.
 
Неплохо было бы указывать абилку владельца баффа и при этом защитить его от удаления при смерти.
 
[quote author=CryDeS link=topic=1337.msg8496#msg8496 date=1487956593]
Через nil будет даваться эффект, но он не будет давать БОНУСОВ. Так как внутри юзается аналог GetSpecialValueFor.
[/quote]

ммм, ясно
 
Ок чуваки, продвинулся, обещаю скинуть код абилки, что, впрочем, и так мой долг, но всё же. Следующий шаг - я знаю модификаторы цели, знаю их имена, знаю их длительность, мне нужно убирать модификаторы (барабанная дробь) когда истечёт их длительность, а те, что без длительности убирать через определённый промежуток(зависящий от прокачки скилла.
А, да, забыл сказать - в процессе решилось тырить все модификаторы цели, в том числе и скрытые (пассивки типа). Потому что так проще. И прикольнее. И проще.
 
Ты новый вопрос задал или что?
Ну, в общем, да. Знаю-знаю, это не очень хорошо, но спамить новой темой только ради двух сообщений (Ответа и полного кода абилки, ведь он вам так нужен!) посчиталось бОльшим нарушением правил, нежели ешшо один вопросец. Надеюсь, последний.
 
Последнее редактирование модератором:
Так в чем вопрос то?

Удалять модификаторы через RemoveModifierByName().
 
Реклама: