so basically i made a base saving script using an inventory method with _G["PlayerData"][Player.Name]["Inventory"][Item.Name] and when attemping to save those items locations on the base it isnt working. here is the script(atleast part of it anyways, if you need the whole script just let me know)
edittttttttttttttttttt---------------- the error output says 142 thats what it is in the script but in the part of the script here it is line 47
edit: here is the error message:
18:08:19.002 - SandBox Tycoon Testing auto-recovery file was created
Finished Loading. (x2)
table: 0x49eb77cd126bd24f
18:08:42.017 - ServerScriptService.DataStore:122: attempt to index local 'PlayerData' (a nil value)
18:08:42.018 - Stack Begin
18:08:42.018 - Script 'ServerScriptService.DataStore', Line 122 - upvalue SaveData
18:08:42.019 - Script 'ServerScriptService.DataStore', Line 142
18:08:42.020 - Stack End
for _,Item in pairs(game.ReplicatedStorage.items:GetChildren()) do
PlayerData.Inventory[Item.Name] = PlayerData.Inventory[Item.Name] or 0
end
PlayerData["BasePlateInfromation"] = PlayerData["BasePlateInfromation"] or {}
--PlayerData["BasePlateInfromation"] = {} --ONLY to reset your baseplate data
if PlayerData["BasePlateInfromation"] ~= {} then
for _,Table in pairs(PlayerData["BasePlateInfromation"]) do
local tycoon = GetTycoon(Player)
local itemname = Table[1]
local x = Table[2]
local y = Table[3]
local z = Table[4]
local rx = Table[5]
local ry = Table[6]
local rz = Table[7]
local realitem = game.ReplicatedStorage.items:FindFirstChild(itemname)
if realitem then
local newitem = realitem:Clone()
newitem.Parent = tycoon
newitem:SetPrimaryPartCFrame(CFrame.new(Vector3.new(x+tycoon.BasePlate.CFrame.p.X,y+tycoon.BasePlate.CFrame.p.Y,z+tycoon.BasePlate.CFrame.p.Z))*CFrame.Angles(math.rad(rx),math.rad(ry),math.rad(rz)))
for i,v in pairs(newitem.Model:GetChildren()) do
if v.Name == "Colored" then
v.BrickColor = getteamfromplayer(Player).TeamColor
end
if v.ClassName == "Script" then
v.Disabled = false
end
end
end
end
end
PlayerData["Cash"] = PlayerData["Cash"] or 100 --Start Balance
--PlayerData.Cash = 100 --ONLY to reset
local Tag = Instance.new("BoolValue")
Tag.Name = "Dataloaded"
Tag.Parent = Player
_G["PlayerData"][Player.Name] = PlayerData
end
local function SaveData(Player)
local PlayerData = _G["PlayerData"][Player.Name]
PlayerData.BasePlateInfromation = SavebasePlate(Player)
DatData:UpdateAsync(Player.UserId, function(OldData)
OldData = OldData or {}
return PlayerData
end)
end
local function PlayerAdded(Player)
local Tycoon = SearchEmpty()
if Tycoon then
Tycoon.Owner.Value = Player
LoadData(Player)
wait()
Player.CharacterAdded:connect(function(char)
char.HumanoidRootPart.CFrame = Tycoon.BasePlate.CFrame*CFrame.new(0,20,0)
end)
end
end
local function PlayerRemoved(Player)
SaveData()
wait()
local Tycoon = GetTycoon(Player)
if Tycoon then
Tycoon.Owner.Value = nil
for i,v in pairs(Tycoon:GetChildren()) do
if v.ClassName == "Model" then
v:Destroy()
end
end
end
end
function game.ReplicatedStorage.GetData.OnServerInvoke(Player)
if Player:FindFirstChild("Dataloaded") then
local Data = _G["PlayerData"][Player.Name]
if Data then
return Data
end
end
end
game.Players.PlayerAdded:connect(PlayerAdded)
game.Players.PlayerRemoving:connect(PlayerRemoved)
