Помощь в скрипте в Роблокс Студио с сохранением валюты
Я сделал валюту
Сделал чтоб за 60 сек давалось 1 RZcoins
и сделал вроде чтоб сохранялось при выходе и загружалось при заходе
Но почему то не сохраняется и не выходит
local DataStoreService = game:GetService("DataStoreService")
local coinsStore = DataStoreService:GetDataStore("PlayerCoins")
local timer = 60
local giveCoins = 1
-- Функция при подключении игрока
game.Players.PlayerAdded:Connect(function(player)
-- Создаем leaderstats для отображения валюты
local leaderstats = Instance.new ("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
-- Создаем переменную для хранения валюты
local coins = Instance.new ("IntValue")
coins.Name = "RZcoins"
coins.Value = 0 -- Начальное количество монет
coins.Parent = leaderstats
while wait() do
-- Ждем 5 секунд, затем увеличиваем количество монет на 5
wait(timer)
coins.Value = coins.Value + giveCoins
end
-- Загружаем сохраненные монеты
local savedCoins = coinsStore:GetAsync(player.UserId)
if savedCoins then
coins.Value = savedCoins
end
end)
-- Сохранение валюты при выходе из игры
game.Players.PlayerRemoving:Connect(function(player)
if player:FindFirstChild("leaderstats") then
local coins = player.leaderstats:FindFirstChild("Coins")
if coins then
coinsStore:SetAsync(player.UserId, coins.Value)
end
end
end)
local DataStoreService = game:GetService("DataStoreService")
local coinsStore = DataStoreService:GetDataStore("PlayerCoins")
local timer = 60
local giveCoins = 1
-- Функция для безопасной загрузки данных
local function loadPlayerData(player)
local success, savedCoins = pcall(function()
return coinsStore:GetAsync(tostring(player.UserId))
end)
if success then
return savedCoins or 0 -- Возвращаем 0, если данных нет
else
warn("Ошибка при загрузке данных для игрока " .. player.Name)
return 0 -- Возвращаем 0 в случае ошибки
end
end
-- Функция для безопасного сохранения данных
local function savePlayerData(player, coinsValue)
local success, errorMessage = pcall(function()
coinsStore:SetAsync(tostring(player.UserId), coinsValue)
end)
if not success then
warn("Ошибка при сохранении данных для игрока " .. player.Name .. ": " .. errorMessage)
end
end
-- Обработчик подключения игрока
game.Players.PlayerAdded:Connect(function(player)
-- Создаем leaderstats
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
-- Создаем переменную для хранения валюты
local coins = Instance.new("IntValue")
coins.Name = "RZcoins" -- Используем то же имя, что и в сохранении
coins.Parent = leaderstats
-- Загружаем сохраненные данные
coins.Value = loadPlayerData(player)
-- Запускаем таймер для начисления монет
spawn(function()
while player.Parent do -- Проверяем, что игрок все еще в игре
wait(timer)
if player.Parent then -- Дополнительная проверка
coins.Value = coins.Value + giveCoins
end
end
end)
end)
-- Обработчик выхода игрока
game.Players.PlayerRemoving:Connect(function(player)
local leaderstats = player:FindFirstChild("leaderstats")
if leaderstats then
local coins = leaderstats:FindFirstChild("RZcoins") -- Исправлено имя на "RZcoins"
if coins then
savePlayerData(player, coins.Value)
end
end
end)
-- Сохранение данных при закрытии сервера
game:BindToClose(function()
for _, player in pairs(game.Players:GetPlayers()) do
local leaderstats = player:FindFirstChild("leaderstats")
if leaderstats then
local coins = leaderstats:FindFirstChild("RZcoins")
if coins then
savePlayerData(player, coins.Value)
end
end
end
wait(2) -- Даем время на сохранение
end)
local DataStoreService = game:GetService("DataStoreService")
local coinsStore = DataStoreService:GetDataStore("PlayerCoins")
local timer = 60
local giveCoins = 1
game.Players.PlayerAdded:Connect(function(player)
-- Создаем leaderstats для отображения валюты
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
-- Создаем переменную для хранения валюты и задаем имя "RZcoins"
local coins = Instance.new("IntValue")
coins.Name = "RZcoins"
coins.Value = 0 -- Начальное количество монет
coins.Parent = leaderstats
-- Загружаем сохраненные монеты
local savedCoins = coinsStore:GetAsync(player.UserId)
if savedCoins then
coins.Value = savedCoins
end
-- Запускаем цикл выдачи монет в отдельном потоке
coroutine.wrap(function()
while player.Parent do -- Пока игрок в игре
wait(timer)
coins.Value = coins.Value + giveCoins
end
end)()
end)
game.Players.PlayerRemoving:Connect(function(player)
local leaderstats = player:FindFirstChild("leaderstats")
if leaderstats then
local coins = leaderstats:FindFirstChild("RZcoins") -- Используем то же имя, что и при создании
if coins then
coinsStore:SetAsync(player.UserId, coins.Value)
end
end
end)
local DataStoreService = game:GetService("DataStoreService")
local coinsStore = DataStoreService:GetDataStore("PlayerCoins")
local timer = 60
local giveCoins = 1
-- Функция при подключении игрока
game.Players.PlayerAdded:Connect(function(player)
-- Создаем leaderstats для отображения валюты
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
-- Создаем переменную для хранения валюты
local coins = Instance.new("IntValue")
coins.Name = "RZcoins"
coins.Value = 0 -- Начальное количество монет
coins.Parent = leaderstats
-- Загружаем сохраненные монеты
local success, savedCoins = pcall(function()
return coinsStore:GetAsync(player.UserId)
end)
if success and savedCoins then
coins.Value = savedCoins
else
warn("Не удалось загрузить монеты для игрока " .. player.Name)
end
-- Цикл для начисления монет
while wait(timer) do
coins.Value = coins.Value + giveCoins
end
end)
-- Сохранение валюты при выходе из игры
game.Players.PlayerRemoving:Connect(function(player)
if player:FindFirstChild("leaderstats") then
local coins = player.leaderstats:FindFirstChild("RZcoins") -- Измените "Coins" на "RZcoins"
if coins then
local success, err = pcall(function()
coinsStore:SetAsync(player.UserId, coins.Value)
end)
if not success then
warn("Не удалось сохранить монеты для игрока " .. player.Name .. ": " .. err
)
end
end
end
end)
Вон там