Собстна, сделал абилку, чтобы у врагов в радиусе 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