hello in my module i made a data system but in the data table i added template
in this template i will made a detect changed value in index. but I fail all the time.
function Player.new(player: Player)
local self = setmetatable({}, Player)
self.Player = player
self.Template = {} -- ce que l'on va save
self.Data = setmetatable({}, {
__newindex = function(t, i, v)
local leaderstats = self.Player:FindFirstChild("leaderstats")
rawset(self.Data, i, v)
if leaderstats then
setValue(leaderstats, i, v)
end
end,
})
assert(not Players[self.Player.UserId], "This player already exist..")
Players[self.Player.UserId] = self
return self
end
function Player:increaseValue(name: string, value: any)
self.Data[name] = value
end
If you wanna detect when a value changes, you’ll need to use proxies.
Example use-case:
-- Logic Table
local Constructor = {}
local Class = nil
-- Public Constructors
function Constructor.new()
local this = {}
setmetatable(this, Class)
do
this.Message = "Nothing for now!"
end
return wrap(this)
end
-- Private Methods
function wrap(this)
local proxy = newproxy(true)
local metatable = getmetatable(proxy)
function metatable:__index(index)
return this[index]
end
function metatable:__newindex(index, value)
print(`{index} value changed to {value}`)
this[index] = value
end
return proxy
end
-- Public Methods
Class = {}
Class.__index = Class
function Class:UpdateMessage(message)
self.Message = message
end
-- Return
return Constructor