Блог школы Роблоппа — Роблокс Студио, обучение, познавательные статьи и новости школы

Как сохранить валюту игрока в Роблокс Студио

Документация
Игровая валюта — одна из самых популярных механик в играх. Это могут быть монеты, кристаллы, жетоны или другая внутриигровая валюта.
Если игрок заработал 2500 Coins, вышел из игры и вернулся позже, он должен получить свои 2500 Coins обратно. Для этого используется DataStoreService.

🎮 Как работает сохранение валюты

Система работает по простой схеме:
Игрок входит → загружаются Coins → игрок получает или тратит валюту → данные сохраняются → игрок возвращается → Coins снова загружаются.
Например:
Игрок
Coins = 2500
DataStore
Выход из игры
Повторный вход
Coins = 2500

🪙 1. Создаём валюту Coins

Открой ServerScriptService и создай обычный Script.
Добавь:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Value = 0
coins.Parent = leaderstats
end)
Теперь у игрока появится:
Player
└── leaderstats
└── Coins

Начальное значение:
coins.Value = 0

💾 2. Подключаем DataStore

В начале скрипта добавь:
local DataStoreService = game:GetService("DataStoreService")
local coinsStore = DataStoreService:GetDataStore("PlayerCoins")
PlayerCoins — название хранилища.

📥 3. Загружаем валюту

Когда игрок входит в игру, необходимо получить его сохранённые Coins:
local success, savedCoins = pcall(function()
return coinsStore:GetAsync(player.UserId)
end)
Если сохранение найдено:
if success and savedCoins then
coins.Value = savedCoins
end
Если данных ещё нет, останется значение:
Coins = 0

💰 4. Игрок получает валюту

Например, игрок собрал монету:
coins.Value += 10
Если у него было:
Coins = 100

станет:
Coins = 110
Можно использовать такую механику для наград за задания, победы или прохождение уровней.

🛒 5. Игрок тратит валюту

Например, предмет стоит 50 Coins:
if coins.Value >= 50 then
coins.Value -= 50
end
Проверка нужна, чтобы игрок не смог потратить больше валюты, чем у него есть.

💾 6. Сохраняем валюту при выходе

Когда игрок покидает сервер:
Players.PlayerRemoving:Connect(function(player)
local coins = player.leaderstats.Coins.Value
local success, err = pcall(function()
coinsStore:SetAsync(player.UserId, coins)
end)
if success then
print("Валюта сохранена")
else
warn("Ошибка сохранения:", err)
end
end)
SetAsync() записывает количество Coins в DataStore.

🧩 7. Полный пример

Вот простой готовый вариант:
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local coinsStore = DataStoreService:GetDataStore("PlayerCoins")
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins"
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
end
end)
Players.PlayerRemoving:Connect(function(player)
local coins = player.leaderstats.Coins.Value
local success, err = pcall(function()
coinsStore:SetAsync(player.UserId, coins)
end)
if success then
print("Валюта сохранена для " .. player.Name)
else
warn("Ошибка сохранения:", err)
end
end)
Теперь система работает так:
вход → загрузка Coins → игра → изменение Coins → выход → сохранение.

💎 8. Как сохранить несколько видов валюты

В игре может быть не одна валюта.
Например:
  • 🪙 Coins;
  • 💎 Gems;
  • ⭐ Tokens.
В таком случае удобно сохранять их вместе:
local data = {
Coins = player.leaderstats.Coins.Value,
Gems = player.leaderstats.Gems.Value,
Tokens = player.leaderstats.Tokens.Value
}
При загрузке:
coins.Value = data.Coins or 0
gems.Value = data.Gems or 0
tokens.Value = data.Tokens or 0
Так можно хранить несколько игровых ресурсов в одном наборе данных.

⚠️ 9. Почему важно использовать сервер

Изменение валюты и её сохранение должно контролироваться сервером.
Например, покупку предмета лучше проверять на сервере:
Игрок нажал «Купить»
Сервер проверяет Coins
Достаточно валюты?
↙ ↘
Да Нет
↓ ↓
Покупка Отказ
Coins -= цена

Это помогает защитить игровую экономику от некорректных изменений со стороны клиента.

🔄 10. Добавляем автосохранение

Для серьёзного проекта полезно сохранять данные периодически, а не только при выходе игрока.
Например:
Игра
Игрок получает Coins
Автосохранение
Игрок продолжает играть
Автосохранение
Игрок выходит
Финальное сохранение

Такой подход помогает снизить риск потери прогресса при неожиданном завершении сервера.

🏆 Что ещё можно сохранять?

С валютой можно объединить весь прогресс игрока:
local data = {
Coins = 2500,
Gems = 150,
Level = 15,
XP = 750,
Wins = 12
}
Получится единая система сохранения:
💰 валюта + ⭐ уровень + ⚡ XP + 🏆 победы.

🏁 Итог

Чтобы сохранить валюту игрока в Роблокс Студио:
  1. Создайте Coins.
  2. Подключите DataStoreService.
  3. Загружайте валюту через GetAsync().
  4. Сохраняйте её через SetAsync().
  5. Используйте pcall() для обработки ошибок.
  6. Для полноценной игры добавьте автосохранение.
В результате игрок сможет заработать валюту, выйти из игры и вернуться позже, не потеряв свой прогресс.

🔗 Полезные ссылки:

🚀 Хочешь научиться делать свои игры?

Переходи на roblo.ru и запишись на обучение Роблокс Студио!
И не забудь заглянуть в наш Telegram 👉 t.me/robloppo
Made on
Tilda