Просто проверяешь модификатор на принадлежность бафу через IsDebuff()
Ну можно спокойно проверять через флаг IsAura().
Или как вариант проверять модификатор на флаг исчезновения при смерти: RemoveOnDeath()
hero:AddNewModifier(hero, self, "modifier_invisible", { duration = 4 })
Timers:CreateTimer(1, function()
print(hero:FindModifier("modifier_invisible"):IsAura())
end)
attempt to call method 'IsAura' (a nil value)
Мне нужно повесить на себя бафф и снять его. Я не знаю, как снять. Я знаю команду RemoveModifierByName(), я знаю команду GetDuration(), но как убрать модифер через его длительность? Да, вопрос тупой и это уже где-то написано...Так в чем вопрос то?
имягероя_имя_способности_lua = class({})
//***********************************************
function имягероя_имя_способности_lua:OnSpellStart()
//variables
local caster = self:GetCaster()
local ability = self
local target = self:GetCursorTarget()
local tModifiers = target:FindAllModifiers()
self.free_help_duration = self:GetSpecialValueFor( "free_help_duration" )
//remove modifers from target and give it to caster
for index, hModifier in pairs(tModifiers) do
local ModifName = hModifier:GetName()
local ModifAbil = hModifier:GetAbility()
local ModifDura = hModifier:GetDuration()
local AbilBehav = ModifAbil:GetBehavior()
target:RemoveModifierByName ( ModifName )
caster:AddNewModifier(caster, ModifAbil, ModifName, {duration = ModifDura})
if (AbilBehav==2) then
if IsServer() then
require('lib/timers')\\нагло стыренная с GitHub-а библеотека таймерс.
Timers:CreateTimer(self.free_help_duration, function()
for index, hModifier in pairs(tModifiers) do
caster:RemoveModifierByName ( ModifName )
target:AddNewModifier(caster, ModifAbil, ModifName, {})
end
end)
end
end
end
end
//Ability: имя героя: имя способности
"имягероя_имя_способности_lua"
{
"BaseClass" "ability_lua"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
"AbilityTextureName" "furion_wrath_of_nature"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_FRIENDLY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
"ScriptFile" "имягероя_имяспособности_lua"
"AbilityCastRange" "200"
"AbilityCastPoint" "0.0 0.0 0.0 0.0"
"AbilityCooldown" "20"
"AbilityManaCost" "60"
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"free_help_duration" "6"
}
}
}