Top.Mail.Ru
Ответы

Помощь в скрипте в Роблокс Студио с сохранением валюты

Я сделал валюту
Сделал чтоб за 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)

По дате
По рейтингу
Аватар пользователя
Мастер
3мес
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
 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) 
Аватар пользователя
Оракул
3мес
1234567891011121314151617181920212223242526272829303132333435363738394041
 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) 
Аватар пользователя
Знаток
3мес

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)

Аватар пользователя
Профи
3мес

Вон там