I am currently learning OOP and trying to make a Status Effects system using it. I am trying to make status effects stack so that if a player already has one it will increase it’s time and stack but when I try and do this the time does get increased but it prints “Status over” 2 times in the output? I am not sure how to get it so if a Status Effect exists on a player it will just increase the duration. This code runs on the Server and not Client. Here is my current code:
--// VARIABLES
local StatusEffectsList = {
["BattleFocus"] = {
Attributes = {
["AbilityCooldownReduction"] = 20,
["CriticalDamage"] = 10,
["StaminaConsumption"] = 21
},
["Duration"] = 6,
["Stackable"] = true,
["Processing"] = false --For debounce
}
}
local StatusEffects = {}
StatusEffects.__index = StatusEffects
--\\
function StatusEffects.new(StatusEffect, Character)
local NewStatusEffect = {}
NewStatusEffect[Character.Name] = {}
setmetatable(NewStatusEffect, StatusEffects)
NewStatusEffect[Character.Name][StatusEffect] = StatusEffectsList[StatusEffect]
NewStatusEffect[Character.Name][StatusEffect].Time = workspace:GetServerTimeNow()
NewStatusEffect.Connection = game:GetService("RunService").Heartbeat:Connect(function()
if (workspace:GetServerTimeNow() - NewStatusEffect[Character.Name][StatusEffect].Time >= NewStatusEffect[Character.Name][StatusEffect].Duration) then
NewStatusEffect.Connection:Disconnect()
print("Status effect over")
end
end)
return NewStatusEffect
end
function StatusEffects:RemoveStatusEffect(Character)
print(self)
setmetatable(self, nil)
table.clear(self)
table.freeze(self)
end
return StatusEffects