local DataStoreService = game:GetService("DataStoreService")
local GoldStore = DataStoreService:GetDataStore("PlayerGold")
์ ์ฅํ๊ธฐ
local function SaveData(player)
local success, errorMessage = pcall(function()
local saveValue = 1
-- Key : PlayerName / Value : SaveValue
GoldStore:SetAsync(player.Name, saveValue)
end)
if not success then
print("errorMessage : ", errorMessage)
end
end
๋ถ๋ฌ์ค๊ธฐ
local function LoadData(player)
local success, errorMessageOrLoadValue = pcall(function()
-- Key : PlayerName
return GoldStore:GetAsync(player.Name)
end)
if not success then
print("errorMessage : ", errorMessageOrLoadValue)
else
local loadValue = errorMessageOrLoadValue
print(player.Name, "Load PlayerGold : ", loadValue)
end
end
DataManager = {}
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
-- ์ ์ฅํ๊ฑฐ๋ ๋ถ๋ฌ์ฌ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ์
local PlayerData =
{
{ Name = "PlayerGold", InitValue = 0, Store = nil },
}
for i = 1, #PlayerData do
PlayerData[i].Store = DataStoreService:GetDataStore(PlayerData[i].Name)
end
--------------------------------------------------------
-- ํ์ฌ ๊ฐ์ ์๋ฒ์์ ์ฅํฉ๋๋ค.
function DataManager:SavePlayerData(player)
repeat wait() until player:GetAttribute("IsDataLoaded")
print(player, "> SavePlayerData")
local text = ">>>> Save : "
for i = 1, #PlayerData do
local playerData = PlayerData[i]
local store = playerData.Store
local success, errorMessageOrLoadValue = pcall(function()
-- ํ๋ ์ด์ด์ Attribute ๊ฐ์ ์ฝ๊ณ ์๋ฒ์ ์ ์ฅ
local currentValue = player:GetAttribute(playerData.Name)
store:SetAsync(player.Name, currentValue)
return currentValue
end)
if not success then
text = text .. "errorMessage : " .. errorMessageOrLoadValue
else
local loadValue = errorMessageOrLoadValue
text = text .. player.Name .. " / Save " .. playerData.Name .. " : " .. tostring(loadValue)
end
end
print(player, text)
end
-- ํ๋ ์ด์ด๊ฐ ๊ฒ์์ ๋ ๋ ๋ ์๋ ์ ์ฅ ์ฒ๋ฆฌ
Players.PlayerRemoving:Connect(function(player) DataManager:SavePlayerData(player) end)
--------------------------------------------------------
-- ์๋ฒ์ ์ ์ฅ๋ ๊ฐ์ ๋ถ๋ฌ์ต๋๋ค.
function DataManager:LoadPlayerData(player)
print(player, "> LoadPlayerData")
local text = ">>>> Load : "
for i = 1, #PlayerData do
local playerData = PlayerData[i]
local store = playerData.Store
local success, errorMessageOrLoadValue = pcall(function()
return store:GetAsync(player.Name)
end)
if not success then
text = text .. "errorMessage : " .. errorMessageOrLoadValue
else
local loadValue = errorMessageOrLoadValue
-- ์ ์ฅ๋ ๊ฐ์ด ์์ผ๋ฉด ์ด๊ธฐ๊ฐ(InitValue)์ ์ค์ ํ ์๋ฒ์ ์ ์ฅ
if loadValue == nil then
loadValue = playerData.InitValue
store:SetAsync(player.Name, loadValue)
end
-- ๋ถ๋ฌ์จ ๊ฐ์ ํ๋ ์ด์ด์ Attribute๋ก ์ค์
player:SetAttribute(playerData.Name, loadValue)
text = text .. player.Name .. " / Load " .. playerData.Name .. " : " .. tostring(loadValue)
end
end
player:SetAttribute("IsDataLoaded", true)
print(player, text)
end
--------------------------------------------------------
-- ํ๋ ์ด์ด๊ฐ ๊ฒ์์ ์ ์ฅ์, ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
local function LoadPlayerDataWhenEnter(player)
local function onAddCharacter(character)
print(player.Name .. " LoadPlayerDataWhenEnter")
DataManager:LoadPlayerData(player)
end
player.CharacterAdded:Connect(onAddCharacter)
end
Players.PlayerAdded:Connect(LoadPlayerDataWhenEnter)
--------------------------------------------------------
-- ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ ์์
local function LoadExample(player)
DataManager:LoadPlayerData(player)
end
-- ๋ฐ์ดํฐ ์ ์ฅํ๊ธฐ ์์
local function SaveExample(player)
-- ์ ์ฅ ์ ์ ๊ฐ ๋ณ๊ฒฝํ๋ ์์ ์ฝ๋
for i = 1, #PlayerData do
local playerData = PlayerData[i]
local currentValue = player:GetAttribute(playerData.Name)
if currentValue ~= nil then
local newValue = currentValue + 1
player:SetAttribute(playerData.Name, newValue)
end
end
DataManager:SavePlayerData(player)
end