I’m trying to make an XP System in a module script, but it got me wondering how I would make the script loop until all remaining extra XP is added, like if I were to add 500 XP to myself, and if there are more XP left, it would add more, eventually leveling up, but what if it takes 5 level ups to finish all extras? what would I do to make that happen? I’m kinda new to scripting,
local module = {}
local players = game:GetService('Players')
local localplayer = players.LocalPlayer or players.PlayerAdded:Wait()
local datastoreservice = require(game:GetService('ReplicatedStorage').Services.DataStore2)
datastoreservice.Combine('xpKey21^','savedXp','savedMax','currentLevel')
local valueDatastore = datastoreservice('savedXp', localplayer)
local maxDatastore = datastoreservice('savedMax', localplayer)
local levelDatastore = datastoreservice('currentLevel', localplayer)
local xpValue = Instance.new('NumberValue')
xpValue.Value = valueDatastore:Get(0)
xpValue.Parent = localplayer
xpValue.Name = 'xp'
local xpRequired = Instance.new('NumberValue')
xpRequired.Value = maxDatastore:Get(5)
xpRequired.Parent = localplayer
xpRequired.Name = 'maxXp'
local level = Instance.new('NumberValue')
level.Value = maxDatastore:Get(1)
level.Parent = localplayer
level.Name = 'level'
function module:Get(which:string)
local instance = string.lower(which)
if instance == 'max' then
return xpRequired
else
return xpValue
end
end
function module:Increase(amount:number)
if xpRequired.Value <= xpValue.Value then
local val = xpValue + amount - xpRequired.Value
local ogMax = xpRequired.Value
if val then
xpValue:Set(val)
maxDatastore:Increment(5)
xpValue.Value = val
xpRequired.Value = ogMax + 5
level.Value += 1
levelDatastore:Increment(1)
else
valueDatastore:Set(0)
maxDatastore:Increment(5)
xpValue.Value = 0
xpRequired.Value = ogMax + 5
end
else
valueDatastore:Increment(amount)
end
end
function module:Decrease(amount:number)
if 0 >= xpValue.Value then
local val = math.abs(xpValue.Value - amount)
xpValue:Set(val)
maxDatastore:Increment(-5)
xpValue.Value = val
xpRequired.Value = maxDatastore:Get()
else
valueDatastore:Increment(amount)
end
end
return module