I have this script here that works in Studio in a regular script. When I tried it in-game it had an error on line 7 saying LocalPlayer was nil?
Any help is appreciated.
(I also tried this in a localscript but nothing happened.
children = script.Parent:GetChildren() local mainParts = script.Parent.Parent.Parent.MainParts for _,child in pairs(children) do if child:IsA("TextButton") then child.MouseButton1Click:connect(function() if game:GetService('BadgeService'):UserHasBadge(game.Players.LocalPlayer.userId, 255119622) or game:GetService('BadgeService'):UserHasBadge(game.Players.LocalPlayer.userId, 255119711) or game.Players.LocalPlayer:GetRankInGroup(942208) == 230 then if game.Players.LocalPlayer.Booked.Value == false then if child.Booked.Value == false then script.Parent.Status.Text = "Seat "..child.Name.." has been booked by "..game.Players.LocalPlayer.Name.."." script.Parent.Seats.Value = script.Parent.Seats.Value - 1 if script.Parent.Seats.Value == 1 then script.Parent.SeatsRemain.Text = script.Parent.Seats.Value.." seat is remaining." else script.Parent.SeatsRemain.Text = script.Parent.Seats.Value.." seats are remaining." end local newgui = script.Parent.Confirm_Booked:clone() newgui.Main.Number.Text = child.Name newgui.Parent = game.Players.LocalPlayer.PlayerGui child.Text = "" child.BackgroundColor3 = Color3.new(255,0,0) child.Booked.Value = true child.AutoButtonColor = false game.Players.LocalPlayer.Booked.Value = true child.Username.Value = game.Players.LocalPlayer.Name if child.Name == "1C" or "2C" or "3C" or "4C" or "5C" or "6C" or "7C" or "8C" or "9C" or "10C" or "11C" or "12C" or "13C" or "14C" or "15C" or "16C" or "1B" or "2B" or "3B" or "4B" or "5B" or "6B" or "7B" or "8B" or "9B" or "10B" or "11B" or "12B" or "13B" or "14B" or "15B" or "16B" then mainParts.BC.SurfaceGui[child.Name].Text = child.Name.." - "..game.Players.LocalPlayer.Name mainParts.BC.SurfaceGui[child.Name].TextColor3 = Color3.new(255,0,0) mainParts.BC.SurfaceGui[child.Name].Player.Value = game.Players.LocalPlayer.Name end if child.Name == "1A" or "2A" or "3A" or "4A" or "5A" or "6A" or "7A" or "8A" or "9A" or "10A" or "11A" or "12A" or "13A" or "14A" or "15A" or "16A" then mainParts.A.SurfaceGui[child.Name].Text = child.Name.." - "..game.Players.LocalPlayer.Name mainParts.A.SurfaceGui[child.Name].TextColor3 = Color3.new(255,0,0) mainParts.BC.SurfaceGui[child.Name].Player.Value = game.Players.LocalPlayer.Name end end elseif child.Username.Value ~= game.Players.LocalPlayer.Name then if not (game.Players.LocalPlayer.PlayerGui:findFirstChild("Error_PlayerBooked")) then local newgui = script.Parent.Error_PlayerBooked:clone() newgui.Parent = game.Players.LocalPlayer.PlayerGui newgui.Script.Disabled = false end elseif child.Username.Value == game.Players.LocalPlayer.Name then script.Parent.Seats.Value = script.Parent.Seats.Value + 1 if script.Parent.Seats.Value == 1 then script.Parent.SeatsRemain.Text = script.Parent.Seats.Value.." seat is remaining." else script.Parent.SeatsRemain.Text = script.Parent.Seats.Value.." seats are remaining." end if game.Players.LocalPlayer.PlayerGui:findFirstChild("Confirm_Booked") then game.Players.LocalPlayer.PlayerGui.Confirm_Booked:remove() end child.Text = "Book" child.BackgroundColor3 = Color3.new(0,255,0) child.Booked.Value = false child.AutoButtonColor = true game.Players.LocalPlayer.Booked.Value = false child.Username.Value = "" if child.Name == "1C" or "2C" or "3C" or "4C" or "5C" or "6C" or "7C" or "8C" or "9C" or "10C" or "11C" or "12C" or "13C" or "14C" or "15C" or "16C" or "1B" or "2B" or "3B" or "4B" or "5B" or "6B" or "7B" or "8B" or "9B" or "10B" or "11B" or "12B" or "13B" or "14B" or "15B" or "16B" then mainParts.BC.SurfaceGui[child.Name].Text = child.Name.." - Available" mainParts.BC.SurfaceGui[child.Name].TextColor3 = Color3.new(0,255,0) end if child.Name == "1A" or "2A" or "3A" or "4A" or "5A" or "6A" or "7A" or "8A" or "9A" or "10A" or "11A" or "12A" or "13A" or "14A" or "15A" or "16A" then mainParts.A.SurfaceGui[child.Name].Text = child.Name.." - Available" mainParts.A.SurfaceGui[child.Name].TextColor3 = Color3.new(0,255,0) end end else local newgui = script.Parent.Error_NoShirt:clone() newgui.Parent = game.Players.LocalPlayer.PlayerGui newgui.Script.Disabled = false end end) end end game.Players.PlayerAdded:connect(function(plr) local bookedvalue = script.Parent.Booked local newvalue = bookedvalue:clone() newvalue.Parent = plr end)
The solution is very simple here.
Scripts
run immediately when the server is created - and not necessarily when the first Player
object is created. As there is no Player
I nstance
yet, the game refers to a nil
value!
Supposing your script is in a LocalScript
in Backpack
, PlayerGui
or PlayerScripts
, all you need to do is add this line at the top:
repeat wait() until game.Players.LocalPlayer
You cannot have LocalPlayer
in an ordinary script, it's always nil
for them.
Along with that, you should also add FindFirstChild
to booked
.
Here's the full script:
--This script is flooded with deprecation repeat wait() until game.Players.LocalPlayer children = script.Parent:GetChildren() local mainParts = script.Parent.Parent.Parent.MainParts for _,child in pairs(children) do if child:IsA("TextButton") then child.MouseButton1Click:connect(function() if game:GetService('BadgeService'):UserHasBadge(game.Players.LocalPlayer.userId, 255119622) or game:GetService('BadgeService'):UserHasBadge(game.Players.LocalPlayer.userId, 255119711) or game.Players.LocalPlayer:GetRankInGroup(942208) == 230 then if game.Players.LocalPlayer:FindFirstChild("Booked").Value == false then --Just so we're safe if child.Booked.Value == false then script.Parent.Status.Text = "Seat "..child.Name.." has been booked by "..game.Players.LocalPlayer.Name.."." script.Parent.Seats.Value = script.Parent.Seats.Value - 1 if script.Parent.Seats.Value == 1 then script.Parent.SeatsRemain.Text = script.Parent.Seats.Value.." seat is remaining." else script.Parent.SeatsRemain.Text = script.Parent.Seats.Value.." seats are remaining." end local newgui = script.Parent.Confirm_Booked:Clone() newgui.Main.Number.Text = child.Name newgui.Parent = game.Players.LocalPlayer.PlayerGui child.Text = "" child.BackgroundColor3 = Color3.new(255,0,0) child.Booked.Value = true child.AutoButtonColor = false game.Players.LocalPlayer.Booked.Value = true child.Username.Value = game.Players.LocalPlayer.Name if child.Name == "1C" or "2C" or "3C" or "4C" or "5C" or "6C" or "7C" or "8C" or "9C" or "10C" or "11C" or "12C" or "13C" or "14C" or "15C" or "16C" or "1B" or "2B" or "3B" or "4B" or "5B" or "6B" or "7B" or "8B" or "9B" or "10B" or "11B" or "12B" or "13B" or "14B" or "15B" or "16B" then mainParts.BC.SurfaceGui[child.Name].Text = child.Name.." - "..game.Players.LocalPlayer.Name mainParts.BC.SurfaceGui[child.Name].TextColor3 = Color3.new(255,0,0) mainParts.BC.SurfaceGui[child.Name].Player.Value = game.Players.LocalPlayer.Name end if child.Name == "1A" or "2A" or "3A" or "4A" or "5A" or "6A" or "7A" or "8A" or "9A" or "10A" or "11A" or "12A" or "13A" or "14A" or "15A" or "16A" then mainParts.A.SurfaceGui[child.Name].Text = child.Name.." - "..game.Players.LocalPlayer.Name mainParts.A.SurfaceGui[child.Name].TextColor3 = Color3.new(255,0,0) mainParts.BC.SurfaceGui[child.Name].Player.Value = game.Players.LocalPlayer.Name end end elseif child.Username.Value ~= game.Players.LocalPlayer.Name then if not (game.Players.LocalPlayer.PlayerGui:FindFirstChild("Error_PlayerBooked")) then --findFirstChild() is deprecated local newgui = script.Parent.Error_PlayerBooked:Clone() --clone() is also deprecated newgui.Parent = game.Players.LocalPlayer.PlayerGui newgui.Script.Disabled = false end elseif child.Username.Value == game.Players.LocalPlayer.Name then script.Parent.Seats.Value = script.Parent.Seats.Value + 1 if script.Parent.Seats.Value == 1 then script.Parent.SeatsRemain.Text = script.Parent.Seats.Value.." seat is remaining." else script.Parent.SeatsRemain.Text = script.Parent.Seats.Value.." seats are remaining." end if game.Players.LocalPlayer.PlayerGui:FindFirstChild("Confirm_Booked") then game.Players.LocalPlayer.PlayerGui.Confirm_Booked:Destroy() --Use Destroy() instead, Remove() just sets the instance and it's children's parents to nil end child.Text = "Book" child.BackgroundColor3 = Color3.new(0,255,0) child.Booked.Value = false child.AutoButtonColor = true game.Players.LocalPlayer.Booked.Value = false child.Username.Value = "" if child.Name == "1C" or "2C" or "3C" or "4C" or "5C" or "6C" or "7C" or "8C" or "9C" or "10C" or "11C" or "12C" or "13C" or "14C" or "15C" or "16C" or "1B" or "2B" or "3B" or "4B" or "5B" or "6B" or "7B" or "8B" or "9B" or "10B" or "11B" or "12B" or "13B" or "14B" or "15B" or "16B" then mainParts.BC.SurfaceGui[child.Name].Text = child.Name.." - Available" mainParts.BC.SurfaceGui[child.Name].TextColor3 = Color3.new(0,255,0) end if child.Name == "1A" or "2A" or "3A" or "4A" or "5A" or "6A" or "7A" or "8A" or "9A" or "10A" or "11A" or "12A" or "13A" or "14A" or "15A" or "16A" then mainParts.A.SurfaceGui[child.Name].Text = child.Name.." - Available" mainParts.A.SurfaceGui[child.Name].TextColor3 = Color3.new(0,255,0) end end else local newgui = script.Parent.Error_NoShirt:Clone() newgui.Parent = game.Players.LocalPlayer.PlayerGui newgui.Script.Disabled = false end end) end end game.Players.PlayerAdded:connect(function(plr) local bookedvalue = script.Parent.Booked local newvalue = bookedvalue:clone() newvalue.Parent = plr end)