Отлов применения способности на цель через Lua

White_Octopuz

Пользователь
23 Сен 2018
12
0
Проект
Bitcoin99GG
Доброе время суток! Занимаюсь созданием способности, которая будет с некоторым шансом отменять каст спела на героя, если он является целью. Реализовал через ауру, если на противнике висит модифаер ауры, при каждом касте спелла проверяется, является ли целью герой, создающий ауру. Не могу реализовать отмену каста спелла. Команда отмены всех действий не работает, другой приказ тоже, цели луа скрипт отлавливает верно, проверял. Типы переменных тоже смотрел. Есть какие-то варианты? Либо можете подсказать, куда и как закинуть модификатор луа на сайленс, чтобы использовать его в этом скилле. Могу вытаскивать модификатор только с ддр, а т.к. скиллы всегда разные и скрипт запускается от имени кастера, то нужно его прописывать абсолютно во всех скиллах. Очень желательно сделать всё изначальным вариантом, но луа тоже пойдет. Код могу докинуть, если нужно.
 
Последнее редактирование:
20 Дек 2016
892
170
Занимаюсь созданием способности, которая будет с некоторым шансом отменять каст спела на героя, если он является целью.
Как я понял, это луа-способность. Аура тут вообще никакая не нужна, хз зачем она.

Если речь идет о копии линкен сферы, то MODIFIER_PROPERTY_ABSORB_SPELL + во всех скилах должна быть проверка типа if hTarget:TriggerSpellAbsorb( hAbility) then return end

Если нужно чтобы каст отменялся без запуска кд и манакоста, то скорее всего в MODIFIER_EVENT_ON_ABILITY_EXECUTED вызывать kv.ability:GetCaster():Interrupt(), если kv.target - нужная цель. Если не сработает, то делать то же самое в MODIFIER_EVENT_ON_ABILITY_START, но тогда будет отменяться даже до анимации каста. Если и такой вариант не подходит, то использовать способ с линкой + восстанавливать кд и ману в эвенте.
 
  • Нравится
Реакции: White_Octopuz

White_Octopuz

Пользователь
23 Сен 2018
12
0
Проект
Bitcoin99GG
Как я понял, это луа-способность. Аура тут вообще никакая не нужна, хз зачем она.
Сам скилл на ддр писал, то, что в ддр не реализовать пилю в луа. Аура исходит от героя и накладывает дебафф на врагов, который ловит каст спеллов и проверяет цель.
Если речь идет о копии линкен сферы, то MODIFIER_PROPERTY_ABSORB_SPELL + во всех скилах должна быть проверка типа if hTarget:TriggerSpellAbsorb( hAbility) then return end
Насколько я понимаю, работает это только с луа спеллами? У меня почти всё в ддр, при касте направленного скилла запускаю скрипт проверки линки, но он не отменяет последующие эффекты спелла (урон+стан). Вызываю скрипт до начала каста эффектов. Видимо код ничего не возвращает, но т.к. основной спелл не в луа он не просит ничего возвращать для продолжения работы. Так что вопрос, можно ли встроить проверку эффекта линки/лотуса в ддр?
P.S.
Можешь пожалуйста рассказать, верно ли я понимаю алгоритм создания луа модифаера, в гайдах очень туго идет понимание(Пишем модифаер в отдельном файле, все его свойства и функции-->объявляем его в файле addon_game_mode(Или любой файл, в котором инициируется игра?)-->вызываем его откуда угодно на кого угодно). Если всё так и я смогу с твоими советами починить линку, то я смогу найти пару костылей, выполняющих подобную функцию.
P.P.S.
kv.ability:GetCaster():Interrupt(
Тоже не работает. Кастер тупо игнорит отмену приказа. Похоже дело в приоритете кода, где ддр имеет большее значение. Либо я что-то упускаю.
 
Последнее редактирование:
20 Дек 2016
892
170
Можешь пожалуйста рассказать, верно ли я понимаю алгоритм создания луа модифаера
В любой выполняемой части кода пишешь LinkLuaModifier( 'modifier_name', 'path', 0 ), где path - файл с модификатором. В этом файле может быть все что угодно, но важно чтобы там был создан сам модификатор modifier_name = class({}) ... (Таким образом можно описывать несколько модификаторов в одном файле, или модификатор одном файле со связанным скилом)

Если не смотрел, посмотри шаблон lua_ability_example, хотя он наполовину поломан, там есть пара неплохих примеров луа-модификаторов.

Тоже не работает. Кастер тупо игнорит отмену приказа.
С MODIFIER_EVENT_ON_ABILITY_START работает, я в свое время проверял (хотя на счет скилов с DOTA_ABILITY_BEHAVIOR_IMMEDIATE точно не скажу). С MODIFIER_EVENT_ON_ABILITY_EXECUTED вполне может не работать. Хотя этот эвент вызывается непосредственно перед действием способности, возможно фаза каста к тому моменту завершается, и способность уже не может быть отменена.

И да, если это луа-модификатор, аура не нужна, т.к. у луа-модификаторов эвенты отлавливаются по всей карте, не зависимо от перента.

Так что вопрос, можно ли встроить проверку эффекта линки/лотуса в ддр?
Я в дд не разбираюсь. Вроде бы нельзя, только если полностью реализовывать их функционал в луа после проверки, что в принципе лишает дд какого-либо смысла (хотя в дд и так никогда смысла не было)
 
Последнее редактирование:
  • Нравится
Реакции: White_Octopuz
Реклама: