#Infinite level up glitch

100 messages · Page 1 of 1 (latest)

sweet shadow
#

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)
stable briar
#

goofy silly script

sweet shadow
stable briar
sweet shadow
#

What's wrong with that part

stable briar
#

it will continue

#

gib

#

xp

sweet shadow
#

No?

stable briar
#

no?

sweet shadow
#

It doesn't

#

that's not the problem anyway

#

The problem is when you're supposed to level up once and reset your XP to 0, it makes you level up indefinitely

stable briar
#

try

#

this

#
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
      xp -= XP_PER_LEVEL
      xpForCurrentLevel += XP_PER_LEVEL
      levelStore:Increment(1)
    end

    xpStore:Set(xp)
  end

  if xpForNextLevel == 0 then
    levelStore:Increment(1)
    xpStore:Set(0)
  end

  XPUpdate:FireClient(player, xp, levelStore:Get())
end
sweet shadow
#

why subtract?

#

There's a possibility the player is gonna jump multiple levels, that's why I don't subtract

stable briar
#

if there 1 error

#

try 200

#

solutions

sweet shadow
#

so that won't work

stable briar
#

try

#

maybe u can fix

#

the fix

sweet shadow
#

but then you start a new level with 250 XP less of what you had instead of 0

stable briar
#

i mean

#

its cool

sweet shadow
#

?

stable briar
#

one error

#

for a smaller

#

error

#

its nice trade

sweet shadow
#

I just realized 🤦

#
if xp % XP_PER_LEVEL == 0 then
  levelStore:Increment(1)
  xpStore:Set(0)
end
#

you get it now?

#

Lmaooo

stable briar
#

cool

sweet shadow
#

now

#

idk how else do I calculate how much XP until next level

#

but modulo won't work

#

@stable briar Ideas?

stable briar
# sweet shadow ```lua if xp % XP_PER_LEVEL == 0 then levelStore:Increment(1) xpStore:Set(0)...
local function UpdatePlayerXP(player: Player, xp: number): ()
  local levelStore, xpStore = GetPlayerStores(player)
  
  local currentLevel = levelStore:Get()
  local xpForNextLevel = (currentLevel + 1) * XP_PER_LEVEL
  
  while xp >= xpForNextLevel do
    currentLevel += 1
    xp -= XP_PER_LEVEL
    xpForNextLevel = (currentLevel + 1) * XP_PER_LEVEL
  end

  levelStore:Set(currentLevel)
  xpStore:Set(xp)

  XPUpdate:FireClient(player, xp, levelStore:Get())
end
sweet shadow
#

Looks working

stable briar
#

tbh Bolaside has level up to lvl 4!

sweet shadow
#

- Server - LevelHandler:79

stable briar
#

owner of synapse

sweet shadow
#

mhm fr

#

ofc

stable briar
#

he gave me a troll cube

sweet shadow
#

whar

stable briar
sweet shadow
#

real 3dsboy

stable briar
#

its actually

#

real one

#

xd

sweet shadow
#

wtf lol

#

what is he doing here 🤣

stable briar
#

NPC

sweet shadow
#

anyway I have to fix the thing crying

stable briar
#

yeah u do

sweet shadow
#

i have 0 ideas

stable briar
#

ask bing ai tbh, logical issues require logical thinking

#

an AI have it

sweet shadow
#

that's at least -1 ideas

vague pulsar
#

just fix

#

theres the solution

#

👍

stable briar
#

bros a real one

vague pulsar
#

i gotchu

#

my solution for you is to restart and think of a way to do it easier

#

🙂

sweet shadow
#

Bro's NOT the thinker SkypeCrying

vague pulsar
#

well, for all the xp things ive done in the past, i just use OOP, its so free

#

so gamer

#

its just more pro

#

trust

stable briar
vague pulsar
#

kinda swag

spring wingBOT
#

studio** You are now Level 1! **studio

sweet shadow
stable briar
#

?

sweet shadow
#

@stable briar I DID IT

#
local function UpdatePlayerXP(player: Player, xp: number): ()
  local levelStore, xpStore = GetPlayerStores(player)

  local currentLevel = levelStore:Get()
  local xpForCurrentLevel = currentLevel * XP_PER_LEVEL
  
  if xp >= xpForCurrentLevel then
    while xp >= xpForCurrentLevel do
      xp -= xpForCurrentLevel
      currentLevel += 1
      xpForCurrentLevel = currentLevel * XP_PER_LEVEL
    end
    
    xpStore:Set(xp)
    levelStore:Set(currentLevel)
  end

  XPUpdate:FireClient(player, xp, currentLevel)
end
stable briar
#

Finally NICE bro

#

wtef

#

I have deja vu again for some reason

#

I have deja vu too many times

#

the mf I lived in before with my soul

#

must have lived long

sweet shadow
#

I once remembered the same moment that was happening 4 times in a single day

#

It's such a weird feeling

#

liek you don't even know how to feel about it

stable briar
#

i say

#

wtf dude before me did

#

I say its my past life