Игровая валюта — одна из самых популярных механик в играх. Это могут быть монеты, кристаллы, жетоны или другая внутриигровая валюта.
Если игрок заработал 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 + 🏆 победы.
🏁 Итог
Чтобы сохранить валюту игрока в Роблокс Студио:
- Создайте Coins.
- Подключите DataStoreService.
- Загружайте валюту через GetAsync().
- Сохраняйте её через SetAsync().
- Используйте pcall() для обработки ошибок.
- Для полноценной игры добавьте автосохранение.
В результате игрок сможет заработать валюту, выйти из игры и вернуться позже, не потеряв свой прогресс.
🔗 Полезные ссылки:
🚀 Хочешь научиться делать свои игры?
Переходи на roblo.ru и запишись на обучение Роблокс Студио!
И не забудь заглянуть в наш Telegram 👉 t.me/robloppo
