Hello I am trying to make a script that everytime the players level is updated it will check to see if that level meets a certain specification and if it does it will change another leaderstat called rank.
Below is my script but I keep getting
02:45:05.920 - ServerScriptService.Data:101: attempt to index field 'LocalPlayer' (a nil value)
As my error.
-- Save Data local DataStoreService = game:GetService("DataStoreService") local myDataStore = DataStoreService:GetDataStore("myDataStore") game.Players.PlayerAdded:Connect(function(player) ------------------- Level local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = player local level = Instance.new("IntValue") level.Name = "Level" level.Parent = leaderstats local data local success, errormessage = pcall(function () data = myDataStore:GetAsync(player.UserId.."- Level") end) if success then player.leaderstats.Level.Value = data print("Grabed Data") else print("Unable to Grab Data") warn(errormessage) end ----------------------- ----------------------- Ranks local rank = Instance.new("StringValue") rank.Name = "Rank" rank.Value = "Empty" rank.Parent = leaderstats local RankStat local success, errormessage = pcall(function () RankStat = myDataStore:GetAsync(player.UserId.."- Rank") end) if success then player.leaderstats.Rank.Value = tostring(RankStat) print("Grabed Rank") else print("Unable to Grab Rank") warn(errormessage) end if player.leaderstats.Level.Value == 0 then myDataStore:SetAsync(player.UserId.."- Rank", "Cadet") print("Player: "..player.UserId.." is a Cadet") end if player.leaderstats.Level.Value > 5 then myDataStore:SetAsync(player.UserId.."- Rank", "Midshipman") end if player.leaderstats.Level.Value > 10 then myDataStore:SetAsync(player.UserId.."- Rank", "Master") end if player.leaderstats.Level.Value > 15 then myDataStore:SetAsync(player.UserId.."- Rank", "Master") end if player.leaderstats.Level.Value > 20 then myDataStore:SetAsync(player.UserId.."- Rank", "Lieutenant") end if player.leaderstats.Level.Value > 25 then myDataStore:SetAsync(player.UserId.."- Rank", "Commander") end if player.leaderstats.Level.Value > 30 then myDataStore:SetAsync(player.UserId.."- Rank", "Captain") end if player.leaderstats.Level.Value > 35 then myDataStore:SetAsync(player.UserId.."- Rank", "Commodore") end end) game.Players.PlayerRemoving:Connect(function(player) local success, errormessage = pcall(function() myDataStore:SetAsync(player.UserId.."- Level",player.leaderstats.Level.Value) end) if success then print("Data Stored") else print("Error Saving Data") warn(errormessage) end end) game.Players.LocalPlayer.leaderstats.Level.Changed:Connect(function(player) if player.leaderstats.Level.Value == 0 then myDataStore:SetAsync(player.UserId.."- Rank", "Cadet") print("Player: "..player.UserId.." is a Cadet") end if player.leaderstats.Level.Value > 5 then myDataStore:SetAsync(player.UserId.."- Rank", "Midshipman") end if player.leaderstats.Level.Value > 10 then myDataStore:SetAsync(player.UserId.."- Rank", "Master") end if player.leaderstats.Level.Value > 15 then myDataStore:SetAsync(player.UserId.."- Rank", "Master") end if player.leaderstats.Level.Value > 20 then myDataStore:SetAsync(player.UserId.."- Rank", "Lieutenant") end if player.leaderstats.Level.Value > 25 then myDataStore:SetAsync(player.UserId.."- Rank", "Commander") end if player.leaderstats.Level.Value > 30 then myDataStore:SetAsync(player.UserId.."- Rank", "Captain") end if player.leaderstats.Level.Value > 35 then myDataStore:SetAsync(player.UserId.."- Rank", "Commodore") end end)
Your issue is that server scripts cannot use "game.Players.LocalPlayer"...
On line 101 move the entire function into the "PlayerAdded" function.
another issue is that you're trying to use the value in the Changed()
function. Changed()
returns the property not the player
this should work: (EDIT: I forgot to change some of the variables, now it should work)
-- Save Data local DataStoreService = game:GetService("DataStoreService") local myDataStore = DataStoreService:GetDataStore("myDataStore") game.Players.PlayerAdded:Connect(function(playa) ------------------- Level local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = playa local level = Instance.new("IntValue") level.Name = "Level" level.Parent = leaderstats local data local success, errormessage = pcall(function () data = myDataStore:GetAsync(playa.UserId.."- Level") end) if success then playa.leaderstats.Level.Value = data print("Grabed Data") else print("Unable to Grab Data") warn(errormessage) end ----------------------- game.Players[playa.Name].leaderstats.Level.Changed:Connect(function(val) if playa.leaderstats.Level.Value == 0 then myDataStore:SetAsync(playa.UserId.."- Rank", "Cadet") print("Player: "..playa.UserId.." is a Cadet") end if playa.leaderstats.Level.Value > 5 then myDataStore:SetAsync(playa.UserId.."- Rank", "Midshipman") end if playa.leaderstats.Level.Value > 10 then myDataStore:SetAsync(playa.UserId.."- Rank", "Master") end if playa.leaderstats.Level.Value > 15 then myDataStore:SetAsync(playa.UserId.."- Rank", "Master") end if playa.leaderstats.Level.Value > 20 then myDataStore:SetAsync(playa.UserId.."- Rank", "Lieutenant") end if playa.leaderstats.Level.Value > 25 then myDataStore:SetAsync(playa.UserId.."- Rank", "Commander") end if playa.leaderstats.Level.Value > 30 then myDataStore:SetAsync(playa.UserId.."- Rank", "Captain") end if playa.leaderstats.Level.Value > 35 then myDataStore:SetAsync(playa.UserId.."- Rank", "Commodore") end end) ----------------------- Ranks local rank = Instance.new("StringValue") rank.Name = "Rank" rank.Value = "Empty" rank.Parent = leaderstats local RankStat local success, errormessage = pcall(function () RankStat = myDataStore:GetAsync(playa.UserId.."- Rank") end) if success then playa.leaderstats.Rank.Value = tostring(RankStat) print("Grabed Rank") else print("Unable to Grab Rank") warn(errormessage) end if playa.leaderstats.Level.Value == 0 then myDataStore:SetAsync(playa.UserId.."- Rank", "Cadet") print("Player: "..playa.UserId.." is a Cadet") end if playa.leaderstats.Level.Value > 5 then myDataStore:SetAsync(playa.UserId.."- Rank", "Midshipman") end if playa.leaderstats.Level.Value > 10 then myDataStore:SetAsync(playa.UserId.."- Rank", "Master") end if playa.leaderstats.Level.Value > 15 then myDataStore:SetAsync(playa.UserId.."- Rank", "Master") end if playa.leaderstats.Level.Value > 20 then myDataStore:SetAsync(playa.UserId.."- Rank", "Lieutenant") end if playa.leaderstats.Level.Value > 25 then myDataStore:SetAsync(playa.UserId.."- Rank", "Commander") end if playa.leaderstats.Level.Value > 30 then myDataStore:SetAsync(playa.UserId.."- Rank", "Captain") end if playa.leaderstats.Level.Value > 35 then myDataStore:SetAsync(playa.UserId.."- Rank", "Commodore") end end) game.Players.PlayerRemoving:Connect(function(player) local success, errormessage = pcall(function() myDataStore:SetAsync(player.UserId.."- Level",player.leaderstats.Level.Value) end) if success then print("Data Stored") else print("Error Saving Data") warn(errormessage) end end)