Помогите создать внутреигровую валюту в роблокс студио - Роблокс

Вопрос Помогите создать внутреигровую валюту в роблокс студио

Регистрация
21 Апр 2013
Сообщения
77
Репутация
0
Спасибо
0
Монет
0
Пожалуйста, дайте инструкцию как создать внутреигровую валюту в Roblox studio с механикой: В основной игре собираешь валюту, а в лобби (уже отдельной локации) это на картинке отображается и ты на это что-то покупаешь. Я вообще в программировании не разбираюсь, помогите если не сложно ?
 
Регистрация
5 Дек 2013
Сообщения
90
Репутация
0
Спасибо
0
Монет
0
Самый дефолтный скрипт с нейронки на луа -- ServerScriptService/CurrencySystem.lua
local CurrencySystem = {}
-- Сервисы
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
-- DataStore для сохранения данных
local currencyStore = DataStoreService:GetDataStore("PlayerCurrency")
-- События для клиента
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvents = {
currencyChanged = ReplicatedStorage:FindFirstChild("CurrencyChanged") or Instance.new("RemoteEvent"),
addCurrency = ReplicatedStorage:FindFirstChild("AddCurrency") or Instance.new("RemoteEvent")
}
remoteEvents.currencyChanged.Name = "CurrencyChanged"
remoteEvents.currencyChanged.Parent = ReplicatedStorage
remoteEvents.addCurrency.Name = "AddCurrency"
remoteEvents.addCurrency.Parent = ReplicatedStorage
-- Данные игроков в памяти
local playerData = {}
-- Функция загрузки данных игрока
function CurrencySystem:LoadPlayerData(player)
local success, data = pcall(function()
return currencyStore:GetAsync("Player_" .. player.UserId)
end)
if success and data then
playerData[player] = {
coins = data.coins or 0,
gems = data.gems or 0
}
else
-- Начальные значения для нового игрока
playerData[player] = {
coins = 100, -- Стартовые монеты
gems = 10 -- Стартовые самоцветы
}
end
-- Отправляем данные клиенту
remoteEvents.currencyChanged:FireClient(player, playerData[player])
end
-- Функция сохранения данных игрока
function CurrencySystem:SavePlayerData(player)
if playerData[player] then
pcall(function()
currencyStore:SetAsync("Player_" .. player.UserId, playerData[player])
end)
end
end
-- Добавление валюты
function CurrencySystem:AddCurrency(player, currencyType, amount, reason)
if not playerData[player] then return false end
if currencyType == "coins" then
playerData[player].coins += amount
elseif currencyType == "gems" then
playerData[player].gems += amount
else
return false
end
-- Сохраняем изменения
self:SavePlayerData(player)
-- Уведомляем клиент
remoteEvents.currencyChanged:FireClient(player, playerData[player])
-- Логируем операцию
printИгрок {player.Name} получил {amount} {currencyType}. Причина: {reason})
return true
end
-- Списание валюты
function CurrencySystem:SpendCurrency(player, currencyType, amount, reason)
if not playerData[player] then return false end
local currentAmount = currencyType == "coins" and playerData[player].coins or playerData[player].gems
if currentAmount < amount then
return false -- Недостаточно средств
end
if currencyType == "coins" then
playerData[player].coins -= amount
elseif currencyType == "gems" then
playerData[player].gems -= amount
else
return false
end
-- Сохраняем изменения
self:SavePlayerData(player)
-- Уведомляем клиент
remoteEvents.currencyChanged:FireClient(player, playerData[player])
printИгрок {player.Name} потратил {amount} {currencyType}. Причина: {reason})
return true
end
-- Получение баланса
function CurrencySystem:GetBalance(player, currencyType)
if not playerData[player] then return 0 end
if currencyType == "coins" then
return playerData[player].coins
elseif currencyType == "gems" then
return playerData[player].gems
end
return 0
end
-- Обработчики событий
Players.PlayerAdded:Connect(function(player)
CurrencySystem:LoadPlayerData(player)
end)
Players.PlayerRemoving:Connect(function(player)
CurrencySystem:SavePlayerData(player)
playerData[player] = nil
end)
-- Обработка запросов от клиента
remoteEvents.addCurrency.OnServerEvent:Connect(function(player, currencyType, amount, reason)
-- Здесь можно добавить проверки безопасности
if typeof(amount) ~= "number" or amount <= 0 then return end
if currencyType ~= "coins" and currencyType ~= "gems" then return end
CurrencySystem:AddCurrency(player, currencyType, amount, reason or "Unknown")
end)
-- Автосохранение каждые 5 минут
while true do
wait(300)
for player, data in pairs(playerData) do
if player and player.Parent then
CurrencySystem:SavePlayerData(player)
end
end
end
return CurrencySystem
 
Регистрация
29 Авг 2013
Сообщения
82
Репутация
0
Спасибо
0
Монет
0
Ниже — пошаговая инструкция для полного новичка по созданию простой внутриигровой валюты в Roblox Studio. Всё сделаем без сложных скриптов, с минимумом кода (только готовые куски, которые нужно скопировать).
lua
Что это делает:
- Сохраняет количество валюты для каждого игрока.
- Загружает баланс при входе, сохраняет при выходе.
lua
Как работает:
- Когда игрок касается монеты, ему добавляется 10 единиц валюты.
- Монета исчезает.
lua
Что делает:
- Автоматически обновляет текст на экране при изменении баланса.
- Показывает актуальное количество валюты.
 
Сверху Снизу