diff --git a/lib/character/behaviors/effects.lua b/lib/character/behaviors/effects.lua index 0c5e85c..3099652 100644 --- a/lib/character/behaviors/effects.lua +++ b/lib/character/behaviors/effects.lua @@ -45,21 +45,9 @@ function behavior:addEffect(effect, stacks, intensity) end end end - -- проверяем на наличие такого эффекта - if self.effectsProperties[effect] then - for i, ef in ipairs(self.effectsPriority) do - if ef == effect then - table.remove(self.effectsProperties, i) - self.effectsProperties[#self.effectsProperties + 1] = ef - end - end - else - self.effectsPriority[#self.effectsPriority + 1] = effect - end - self.effectsProperties[effect] = { - stacks = stacks, - intensity = intensity - } + + book[effect]:onBirth(self.owner, stacks, intensity) + local task3 = book[effect]:afterBirth(self.owner, intensity) if task3 then task3(function() diff --git a/lib/spell/effect.lua b/lib/spell/effect.lua index abfa382..eca378e 100644 --- a/lib/spell/effect.lua +++ b/lib/spell/effect.lua @@ -15,7 +15,7 @@ local effect = {} effect.__index = effect --- Предполагается, что в каждую функцию будет передаваться `Character` (владелец эффекта) и параметр `intensity`, который отвечает за силу спелла ---- @alias EffectFunc fun(owner: Character, intensity: integer): Task, nil -- бред конечно, но иначе всё в жёлтом +--- @alias EffectFunc fun(owner: Character, intensity: integer): Task, nil бред конечно, но иначе всё в жёлтом --- @alias EffectStatementFunc fun(owner: Character, intensity: integer): Task, boolean --- @alias EffectDamageFunc fun(owner: Character, intensity: integer, damage: integer): Task, integer --- @alias EffectRegenFunc fun(owner: Character, intensity: integer, amountHp: integer): Task, integer @@ -122,6 +122,30 @@ function effect:beforeRegeneration(owner, intensity, amountHp) return taskUtils. --- @return Task function effect:afterRegeneration(owner, intensity) return taskUtils.fromValue() end +--- Функция, что задаёт правила присвоения эффекта +--- @param owner Character +--- @param stacks integer +--- @param intensity integer +function effect:onBirth(owner, stacks, intensity) + local effects = owner:has(Tree.behaviors.effects) + if not effects then return end + -- проверяем на наличие такого эффекта + if effects.effectsProperties[self.tag] then + for i, ef in ipairs(effects.effectsPriority) do + if ef == self.tag then + table.remove(effects.effectsProperties, i) + effects.effectsProperties[#effects.effectsProperties + 1] = ef + end + end + else + effects.effectsPriority[#effects.effectsPriority + 1] = self.tag + end + effects.effectsProperties[self.tag] = { + stacks = stacks, + intensity = intensity + } +end + function effect:update(dt) end function effect:draw() end