So here I have a data save system saving different stats. the focus is the “MovementSpeed” stat. For some odd reason, regardless of the stats.movementspeed.value printing as “16”, when the value is actually applied it sets the humanoid.walkspeed to “1.6” instead. I have 0 clue on how this is even possible.
local DSS = game:GetService("DataStoreService")
local DataStore = DSS:GetDataStore("LeaderStatSave")
local D_Dmg = script:GetAttribute("DefaultDmg")
local D_DmgCooldown = script:GetAttribute("DefaultDmgCooldown")
local D_Health = script:GetAttribute("DefaultHealth")
local D_WalkSpeed = script:GetAttribute("DefaultWalkSpeed") -- is 16
local D_Size = script:GetAttribute("DefaultSize")
local D_ExpRequirement = script:GetAttribute("DefaultExpRequirement")
local ExpMultiplier = script:GetAttribute("ExpReqMultiplierPerLvl")
local function UpdateLevelStats(Plr, Exp, Level, EarnedExp)
repeat task.wait() until Plr.Character
warn("check stats")
local PlrStats = Plr.Character.Stats
local ExpReq = Plr.Character.Stats.ExpRequirement
local Exp = Plr.Character.Stats.Exp
if Level <= 200 then
if Exp.Value >= ExpReq.Value then
print("level up")
Plr.leaderstats.Level.Value += 1
ExpReq.Value *= 1.1 --exp requirement
Plr.Character:ScaleTo(Plr.Character:GetScale() + 0.025) -- size
Plr.Character.Stats.ScaleSize.Value += 0.025 -- size_stat
PlrStats.Dmg.Value += 0.5 -- dmg
PlrStats.DmgCooldown.Value -= 0.25
Plr.Character.Humanoid.MaxHealth += 1 ----------------------------- MHealth
Plr.Character.Humanoid.Health = Plr.Character.Humanoid.MaxHealth -- Health
Plr.Character.Stats.MaxHealth.Value = Plr.Character.Humanoid.MaxHealth -- MHealth_Stat
Plr.Character.Humanoid.WalkSpeed += 0.25 -- WalkSpeed
Plr.Character.Stats.MovementSpeed.Value += 0.25 -- WalkSpeed_Stat
--if Exp.Value >= ExpReq.Value then -- incase more than one lvl is needed
--UpdateLevelStats()
--end
end
end
end
local function ApplyData(Plr) -- PROBLEM LOCATED HERE!!
Plr.Character.Humanoid.Health = Plr.Character.Stats.MaxHealth.Value
Plr.Character.Humanoid.MaxHealth = Plr.Character.Stats.MaxHealth.Value
print(Plr.Character.Stats.MovementSpeed) -- indeed prints 16
Plr.Character.Humanoid.WalkSpeed = Plr.Character.Stats.MovementSpeed.Value --confirmed to be 16. however 1.6 is set to Humanoid.WalkSpeed. why???
Plr.Character:ScaleTo(Plr.Character.Stats.ScaleSize.Value)
end
game.Players.PlayerAdded:connect(function(player)
wait(2)
local leaderstats = Instance.new("Folder",player)
local Exp = Instance.new("NumberValue",leaderstats)
local Level = Instance.new("NumberValue",leaderstats)
local playerData = DataStore:GetAsync(player.UserId)
leaderstats.Name = "leaderstats"
Exp.Name = "Exp"
Level.Name = "Level"
if playerData then --set stats
print("loading plr data")
Exp.Value = playerData.exp or 0
player.Character.Stats.Exp.Value = playerData.exp
Level.Value = playerData.level or 1
player.Character.Stats.ExpRequirement.Value = playerData.requiredExp
player.Character.Stats.Dmg.Value = playerData.dmg
player.Character.Stats.DmgCooldown.Value = playerData.dmgCooldown
player.Character.Stats.MaxHealth.Value = playerData.maxHealth
player.Character.Stats.MovementSpeed.Value = playerData.movementSpeed
player.Character.Stats.ScaleSize.Value = playerData.scale
print("plr data loaded")
else
print("new player")
Exp.Value = 0
player.Character.Stats.Exp.Value = 0
Level.Value = 1
player.Character.Stats.ExpRequirement.Value = D_ExpRequirement
player.Character.Stats.Dmg.Value = D_Dmg
player.Character.Stats.DmgCooldown.Value = D_DmgCooldown
player.Character.Stats.MaxHealth.Value = D_Health
player.Character.Stats.MovementSpeed.Value = D_WalkSpeed
player.Character.Stats.ScaleSize.Value = D_Size
print("default data loaded")
end
local Data = {
["exp"] = Exp.Value,
["level"] = Level.Value,
["requiredExp"] = player.Character.Stats.ExpRequirement.Value,
["dmg"] = player.Character.Stats.Dmg.Value,
["dmgCooldown"] = player.Character.Stats.DmgCooldown.Value,
["maxHealth"] = player.Character.Stats.MaxHealth.Value,
["movementSpeed"] = player.Character.Stats.MovementSpeed.Value,
["scale"] = player.Character:GetScale()}
Exp.Changed:connect(function()
local NewData = {
["exp"] = player.leaderstats.Exp.Value,
["level"] = player.leaderstats.Level.Value,
['requiredExp'] = player.Character.Stats.ExpRequirement.Value,
["dmg"] = player.Character.Stats.Dmg.Value,
["dmgCooldown"] = player.Character.Stats.DmgCooldown.Value,
["maxHealth"] = player.Character.Stats.MaxHealth.Value,
["movementSpeed"] = player.Character.Stats.MovementSpeed.Value,
["scale"] = player.Character:GetScale()}
DataStore:SetAsync(player.UserId, NewData)
UpdateLevelStats(player, Exp.Value, Level.Value, true)
end)
ApplyData(player)
UpdateLevelStats(player, Exp.Value, Level.Value, true)
print(`EXP: {Data.exp} || LEVEL: {Level.Value} || ReqExp: {player.Character.Stats.ExpRequirement.Value}`)
end)