Добавление модификатора на мёртвого юнита?

MemesReborn

Новичок
14 Авг 2019
1
0
Проект
Memes Reborn
Собстна, сделал абилку, чтобы у врагов в радиусе 600 при смерти отнималось 3 ловкости и герою добавлялось 3 ловкости, но герою ловкость добавляется, а у врагов не отнимается. В чём может быть причина? Мне кажется это из-за того, что они мертвы и на мёртвых юнитов нельзя добавлять модификаторы.
Код:
"ozornica_autism"
    {
        "BaseClass"                     "ability_datadriven"
        "AbilityTextureName"            "volvo/Autism"
        "AbilityBehavior"                "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_HIDDEN"
        "AbilityUnitTargetTeam"            "DOTA_UNIT_TARGET_TEAM_ENEMY"
        "AbilityUnitTargetType"            "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
        "AbilityCastRange"                "600"
        "MaxLevel"                        "1"
        "AbilitySpecial"
        {
            "01"
            {
                "var_type"            "FIELD_INTEGER"
                "bonus_agi"            "3"
            }
            "02"
            {
                "var_type"            "FIELD_FLOAT"
                "radius"            "600"
            }
        }
        "Modifiers"
        {
            "modifier_autism"
            {
                "Passive"            "1"
                "IsHidden"            "1"
                "IsPurgable"        "0"
                "IsBuff"            "1"
                "IsDebuff"            "0"
                "IsStunDebuff"        "0"
                "Aura"              "modifier_autism_debuff"
                "Aura_Radius"       "%radius"
                "Aura_Teams"        "DOTA_UNIT_TARGET_TEAM_ENEMY"
                "Aura_Types"        "DOTA_UNIT_TARGET_HERO"
                "Aura_Flags"        "DOTA_UNIT_TARGET_FLAG_NOT_ILLUSIONS | DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"
                "Aura_ApplyToCaster" "0"
            }
            "modifier_autism_debuff"
            {
                "Passive"            "0"
                "IsHidden"            "1"
                "IsPurgable"        "0"
                "IsBuff"            "0"
                "IsDebuff"            "1"
                "IsStunDebuff"        "0"
                "OnDeath"
                {
                    "RunScript"
                    {
                        "ScriptFile"    "heroes/hero_dev/autism.lua"
                        "Function"        "EnemyDied"
                    }
                }
            }
            "modifier_autism_heal"
            {
                "Passive"            "0"
                "IsHidden"            "0"
                "IsPurgable"        "0"
                "IsBuff"            "1"
                "IsDebuff"            "0"
                "IsStunDebuff"        "0"
                "Attributes"        "MODIFIER_ATTRIBUTE_PERMANENT"
                "Properties"
                {
                    "MODIFIER_PROPERTY_STATS_AGILITY_BONUS"    "1"
                }
            }
            "modifier_autism_stack"
            {
                "Passive"            "0"
                "IsHidden"            "0"
                "IsPurgable"        "0"
                "IsBuff"            "1"
                "IsDebuff"            "0"
                "IsStunDebuff"        "0"
                "Attributes"        "MODIFIER_ATTRIBUTE_PERMANENT"
                "Properties"
                {
                    "MODIFIER_PROPERTY_STATS_AGILITY_BONUS"    "-1"
                }
            }
        }
    }
Lua:
function EnemyDied(keys)
    local caster = keys.caster
    local target = keys.unit
    local ability = keys.ability
    local buff = "modifier_autism_heal"
    local debuff = "modifier_autism_stack"
    local dur = inf
    local stack_value = 3
    if target:HasModifier( debuff ) and caster:HasModifier( buff ) then
        local current_stack_target = target:GetModifierStackCount( debuff, ability )
        local current_stack_caster = caster:GetModifierStackCount( buff, ability )
        ability:ApplyDataDrivenModifier( caster, caster, buff, { Duration = dur })
        ability:ApplyDataDrivenModifier( caster, target, debuff, { Duration = dur })
        caster:SetModifierStackCount( buff, ability, current_stack_caster + stack_value )
        target:SetModifierStackCount( debuff, ability, current_stack_target + stack_value )
    end
    if target:HasModifier( debuff ) and caster:HasModifier( buff ) == false then
        local current_stack_target = target:GetModifierStackCount( debuff, ability )
        ability:ApplyDataDrivenModifier( caster, caster, buff, { Duration = dur })
        ability:ApplyDataDrivenModifier( caster, target, debuff, { Duration = dur })
        caster:SetModifierStackCount( buff, ability, stack_value )
        target:SetModifierStackCount( debuff, ability, current_stack_target + stack_value )
    end
    if target:HasModifier( debuff ) == false and caster:HasModifier( buff ) then
        local current_stack_caster = caster:GetModifierStackCount( buff, ability )
        ability:ApplyDataDrivenModifier( caster, caster, buff, { Duration = dur })
        ability:ApplyDataDrivenModifier( caster, target, debuff, { Duration = dur })
        caster:SetModifierStackCount( buff, ability, current_stack_caster + stack_value )
        target:SetModifierStackCount( debuff, ability, stack_value )
    end
    if target:HasModifier( debuff ) == false and caster:HasModifier( buff ) == false then
        ability:ApplyDataDrivenModifier( caster, caster, buff, { Duration = dur })
        ability:ApplyDataDrivenModifier( caster, target, debuff, { Duration = dur })
        caster:SetModifierStackCount( buff, ability, stack_value )
        target:SetModifierStackCount( debuff, ability, stack_value )
        local current_stack_target = target:GetModifierStackCount( debuff, ability )
        local current_stack_caster = caster:GetModifierStackCount( buff, ability )
    end
end
 
20 Дек 2016
892
170
Я в свое время тоже с такой проблемой столкнулся, к слову способа наложить модификатор на мертвого я так и не нашел (хотя и не особо искал). Я тупо сделал через таймер и проверку IsAlive(), накладывая дебаф после возрождения. Но не исключено, что просто достаточно прописать какой-то тег модификатору.
 
Реклама: