I have a silly lil level system, and when I have to level up I do it indefinitely for some reason.
local Players = game:GetService("Players")
local ServerStorage = game:GetService("ServerStorage")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local XPUpdate = ReplicatedStorage:FindFirstChild("XPUpdate")
local DataStore2 = require(ServerStorage.DataStore2)
local XP_PER_LEVEL = 250
local COMBAT_ZONE_XP_REWARD = if RunService:IsStudio() then 45 else 2
local KILL_XP_REWARD = 5
local LEVEL_STORE_NAME = "Level IV"
local XP_STORE_NAME = "XP IV"
DataStore2.Combine("MasterKey", XP_STORE_NAME, LEVEL_STORE_NAME)
local function IsPlayerInCombatZone(player: Player): boolean
local character = player.Character or player.CharacterAdded:Wait()
local rootPart: Part = character:WaitForChild("HumanoidRootPart")
local partsInRootPart = workspace:GetPartsInPart(rootPart)
local playerInCombatZone = true
for _, obj in partsInRootPart do
if obj.Name ~= "_safezone" then
continue
end
playerInCombatZone = false
break
end
return playerInCombatZone
end
local function GetPlayerStores(player: Player): (any, any)
local levelStore = DataStore2(LEVEL_STORE_NAME, player)
local xpStore = DataStore2(XP_STORE_NAME, player)
return levelStore, xpStore
end
local function UpdatePlayerXP(player: Player, xp: number): ()
local levelStore, xpStore = GetPlayerStores(player)
local xpForNextLevel = xp % XP_PER_LEVEL
local xpForCurrentLevel = levelStore:Get() * XP_PER_LEVEL
if xp > xpForCurrentLevel then
while xp > xpForCurrentLevel do
xpForCurrentLevel += XP_PER_LEVEL
levelStore:Increment(1)
end
xpStore:Set(0)
end
if xpForNextLevel == 0 then
levelStore:Increment(1)
xpStore:Set(0)
end
XPUpdate:FireClient(player, xp, levelStore:Get())
end
Players.PlayerAdded:Connect(function(player: Player)
local levelStore, xpStore = GetPlayerStores(player)
local leaderstats = player:WaitForChild("leaderstats")
local level = Instance.new("IntValue")
level.Name = "Level"
level.Value = levelStore:Get(0)
level.Parent = leaderstats
UpdatePlayerXP(player, xpStore:Get(0))
xpStore:OnUpdate(function(xp: number)
UpdatePlayerXP(player, xp)
end)
levelStore:OnUpdate(function(level: number)
print(`{player.Name} has leveled up to level {level}!`)
end)
local character = player.Character or player.CharacterAdded:Wait()
local humanoid: Humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local killerValue = humanoid:WaitForChild("creator") :: ObjectValue
local killer = killerValue.Value
if not killer:IsDescendantOf(Players) or not killer:IsA("Player") then
warn(`{killer:GetFullName()} is not a valid player.`)
return
end
local _, killerXPStore = GetPlayerStores(killer)
killerXPStore:Increment(KILL_XP_REWARD, 0)
end)
while true do
if IsPlayerInCombatZone(player) then
xpStore:Increment(COMBAT_ZONE_XP_REWARD)
end
task.wait(1)
end
end)
||

** You are now Level 1! **