The modifier has stacks and also gives additional speed and additional health. Stacks are updated when leveling up, at which point an error occurs. For some reason, the extra health doesn't multiply by stacks and returns the same as before, but the extra speed multiplies by stacks and gives the updated value. And the funny thing is that when receiving 3 stacks, the unit is given additional health, but only it counts as 2 stacks. That is, for example, I have self.health_gain = 25 and self.speed_gain = 2, and when a unit has 3 stacks, then self.health_gain will be 50, and self.speed_gain will be 6.
modifier_gain_stats = class({})
modifier_gain_stats.previous_level = 0
function modifier_gain_stats:OnCreated()
if not IsServer() then return end
local parent = self:GetParent()
self.previous_level = parent.lvl
self:SetStackCount(parent.lvl)
self.speed_gain = parent:GetSpeedGain()
self.health_gain = parent:GetHealthGain()
self:SetHasCustomTransmitterData(true)
self:StartIntervalThink(0.1)
end
function modifier_gain_stats:AddCustomTransmitterData()
return {
speed_gain = self.speed_gain,
health_gain = self.health_gain,
}
end
function modifier_gain_stats:HandleCustomTransmitterData(data)
self.speed_gain = data.speed_gain
self.health_gain = data.health_gain
end
function modifier_gain_stats:OnIntervalThink()
local parent = self:GetParent()
if self.previous_level < parent.lvl then
self.previous_level = parent.lvl
self:SetStackCount(parent.lvl)
end
end
function modifier_gain_stats:DeclareFunctions()
return {
MODIFIER_PROPERTY_MOVESPEED_BONUS_CONSTANT,
MODIFIER_PROPERTY_EXTRA_HEALTH_BONUS,
}
end
function modifier_gain_stats:GetModifierExtraHealthBonus()
return self.health_gain * self:GetStackCount()
end
function modifier_gain_stats:GetModifierMoveSpeedBonus_Constant()
return self.speed_gain * self:GetStackCount()
end