当我运行这个应该保存玩家位置的脚本时,代码给我错误,ServerScriptService.PositionHandler:34: attempts to index nil with 'WaitForChild'
有谁知道如何修复这个错误?
local datastoreservice = game:GetService("DataStoreService")
local posdata = datastoreservice:GetDataStore("PlayerPos")
local function setupData(player, char)
local value = Instance.new("CFrameValue")
value.Name = "Position"
value.Parent = player
local good, bad = pcall(function()
local data = posdata:GetAsync(player.UserId)
if data then
local deserialzed = CFrame.new(table.unpack(data))
value.Value = deserialzed
char:SetPrimaryPartCFrame(value.Value)
else
value.Value = char:FindFirstChild("HumanoidRootPart").CFrame
end
end)
if good then
print("loaded data")
else
warn(bad)
end
end
local function saveData(plr)
local good, bad = pcall(function()
local serialized = {plr:WaitForChild("Position").Value:GetComponents()}
posdata:SetAsync(plr.UserId, serialized)
end)
if good then
print("saved")
else
warn(bad)
end
end
local function updateData (plr, char)
local value = plr:FindFirstChild("Position", 1)
value.Value = char:FindFirstChild("HumanoidRootPart").CFrame
end
game.Players.PlayerAdded:Connect(function(plr)
plr.CharacterAdded:Connect(function(char)
setupData(plr, char)
while task.wait(5) do
updateData(plr, char)
end
end)
end)
game.Players.PlayerRemoving:Connect(function(plr)
saveData(plr)
end)
game:BindToClose(function(plr)
print("server shut down")
saveData(plr)
end)
这段代码基本上设置了一个 cframe 值并执行一些数据存储操作,我真的忘记了它是如何工作的。无论如何,请帮忙,因为我真的不知道该怎么办。
local Players,DS=game.Players,game:GetService"DataStoreService":GetDataStore"PlayerPos"
local rs=game:service"RunService".Stepped
local function savedata(player)
DS:SetAsync(""..player.UserId,{player.Value.Value:GetComponents()})
end
local function teleport(char)rs:Wait()
local pos=Players[char.Name].Value.Value.p
if pos~=Vector3.new()then char:move(pos)end
end
local function onPlayerAdded(player)
Instance.new("CFrameValue",player).Value*=CFrame.new(unpack(DS:GetAsync(""..player.UserId)or{Vector3.new()}))
player.CharacterAdded:Connect(teleport)
local char=player.Character;char=char and teleport(char)
savedata(player:GetPropertyChangedSignal"Parent":Wait()or player)
end;Players.PlayerAdded:Connect(onPlayerAdded)
for _,v in ipairs(Players:players())do onPlayerAdded(v)end
game:BindToClose(function()
wait(3)
end)