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)

4 comments
You can't use LocalPlayer in a serverscript.
How else can I access the player?
Erm getting it at the PlayerAdded event?
Check my new answer OurAuthority (also sorry if I'm bad at explaining)