Roblox数据存储不会保存甚至记住我的UserId



我一直致力于《Roblox Evolution Simulator》游戏,并尝试着创造一个关卡系统。我需要将每个关卡的最大经验值设置为1000。我可以写一个简单的脚本,如果所有的底数都是0,但如果有一个数字大于0,它就不会工作!我在Studio和game中都尝试过。我也没有使用领袖属性,因为我有经验条。不会保存,我已经看过了每一个可能的论坛页面,它只是不工作!下面是我的代码:

local playerData = DataStoreService:GetDataStore("PlayerData")
local function onPlayerJoin(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name='lead'
leaderstats.Parent=player

local xp = Instance.new("IntValue", leaderstats)
xp.Name='Exp'

local level = Instance.new("IntValue", leaderstats)
level.Name='Level'

local maxExp = Instance.new("IntValue", leaderstats)
maxExp.Name='Max'


local playerUserId = 'Player....'..player.UserId
local data = playerData:GetAsync(tostring(playerUserId))
if data  then
xp.Value = data['Exp']
print(data["Exp"])
game.StarterGui.ScreenGui.One.Text=data["Exp"]
level.Value = data['Level']
game.StarterGui.ScreenGui.Two.Text=data["Level"]
print(data["Level"])
maxExp.Value = data['Max']
game.StarterGui.ScreenGui.Three.Text=data["Max"]
print(data['Max'])
else
xp.Value=0
level.Value=0
maxExp.Value=1000
game.StarterGui.ScreenGui.Three.Text='Hi'
print("first time")
end

end
local function create_table(player)
local player_stats = {}
for _, stat in pairs(player.lead:GetChildren()) do
player_stats[stat.name] = stat.value
end
return player_stats
end
local function onPlayerExit(player)
local player_stats = create_table(player)
local success, err = pcall(function()
local playerUserId = 'Player....'..player.UserId
playerData:SetAsync(tostring(playerUserId), player_stats)
end)

if not success then
warn('Could not save data')
end
end

game.Players.PlayerAdded:Connect(onPlayerJoin)
game.Players.PlayerRemoving:Connect(onPlayerExit)

所以有时当最后一个玩家离开服务器时,服务器关闭,这就是为什么数据没有保存。为了克服这个问题,有一个叫做game:BindToClose()的事件。每当服务器即将关闭时,这个函数就会触发,现在从这里连接一个函数来踢所有的玩家。所以你需要在你的代码中添加这个

game:BindToClose(function()
for i,v in pairs(game.Players:GetPlayers()) do
v:Kick("Server Shutdown")
end
end)

这将确保在服务器关闭之前保存数据。

如果你在roblox studio,你离开了,你基本上关闭了服务器。有一个叫做BindToClose的函数,它在关机时绑定函数。

game:BindToClose(function()
wait(3) --Waits for player leaving event to fire
end)

最新更新