To initiate OOP isn’t on my strong side so sorry in advance for the folks who are bright in this,
For some ood reason my method updates the wrong value.
Module:
local module = {}
module.__index = module
function module.new(Player: Player)
local self = setmetatable({}, module)
self.Player = Player
self.leaderstats = Instance.new("Folder")
self.leaderstats.Parent = Player
self.leaderstats.Name = "leaderstats"
return self
end
function module:CreateValue(Name: string, Value: number)
self.Value = Instance.new("IntValue")
self.Value.Parent = self.leaderstats
self.Value.Name = Name or "Currency"
self.Value.Value = Value or 0
return {
GetValue = function(_)
return self.Value.Value
end,
SetValue = function(_, Amount: number)
print(Amount)
self.Value.Value = Amount or 0
end,
}
end
return module
Server:
-- // Variables \\ --
local Services = {
Players = game:GetService("Players"),
ReplicatedStorage = game:GetService("ReplicatedStorage")
}
local Modules = {
PlayerStatsHandler = require(Services.ReplicatedStorage.Modules.leaderstats)
}
-- // Functions \\ --
local function LoadData(Player: Player)
local leaderstats = Modules.PlayerStatsHandler.new(Player)
local Time = leaderstats:CreateValue("Time")
local Coins = leaderstats:CreateValue("Coins")
task.spawn(function()
while task.wait(1) do
Time:SetValue(Time:GetValue() + 1)
end
end)
end
-- // Connections \\ --
Services.Players.PlayerAdded:Connect(LoadData)
It is supposed to update the Time value but it instead updates the Coins value any fixes to this? I’d be very grateful.
Each time you make a new value, it will overwrite the previous value in the object, because you’re assigning it to the same key.
Basically:
Create time value, object now points to Time under Value.
Create coins value, object now points to Coins under Value, Time is lost.
You can thank this line for it:
which initially overwrites the value.
To fix this issue, you could store it under unique keys, like this:
function module:CreateValue(Name: string, Value: number)
local val = Instance.new("IntValue")
val.Parent = self.leaderstats
val.Name = Name or "Currency"
val.Value = Value or 0
self[Name] = val
return {
GetValue = function(_)
return val.Value
end,
SetValue = function(_, Amount: number)
print(Amount)
val.Value = Amount or 0
end,
}
end
local module = {}
module.__index = module
function module.new(Player: Player)
local self = setmetatable({}, module)
self.Player = Player
self.leaderstats = Instance.new("Folder")
self.leaderstats.Parent = Player
self.leaderstats.Name = "leaderstats"
return self
end
function module:CreateValue(Name: string, value : number)
local Value = Instance.new("IntValue")
Value.Parent = self.leaderstats
Value.Name = Name or "Currency"
Value.Value = value or 0
return {
GetValue = function(_)
return Value.Value
end,
SetValue = function(_, Amount: number)
print(Amount)
Value.Value = Amount or 0
end,
}
end
return module