КАК СОЗДАТЬ СИСТЕМУ ПЕРЕРОЖДЕНИЯ | Roblox Studio (СОХРАНЕНИЕ ДАННЫХ И КАСТОМИЗАЦИЯ)
Itz_FloppyFish
0:00 / 0:00
КАК СОЗДАТЬ СИСТЕМУ ПЕРЕРОЖДЕНИЯ | Roblox Studio (СОХРАНЕНИЕ ДАННЫХ И КАСТОМИЗАЦИЯ)
5 903 просмотра · 3 месяца назад
Itz_FloppyFish
82,5 тыс. подписчиков
5 903 просмотра · 3 месяца назад
В сегодняшнем видео я покажу вам, как создать систему перерождения в Roblox Studio. Это видео было очень востребовано, и я наконец-то его сделал. Перед тем, как снять это видео, я хотел убедиться, что предоставил вам надежную базу данных и систему валюты, о чем мы говорили в предыдущих видео.
Это видео связано с моими тремя предыдущими видео, вам нужно будет посмотреть все видео, чтобы ваши данные сохранялись правильно, а система наличных работала корректно.
Видео 1 (Хранилище данных): • HOW TO MAKE A DATASTORE [SAVING + CUSTOMIZ...
Видео 2 (Наличные/Монеты): • HOW TO MAKE A CASH SYSTEM | Roblox Studio ...
Видео 3 (Магазин предметов): • HOW TO MAKE AN ITEM SHOP | Roblox Studio (...
Если вы немного запутались или вам нужна помощь, пожалуйста, создайте заявку в моем Discord-сервере, и мы с удовольствием вам поможем!
🌟 Discord-сервер Floppys: / discord
----------------------------
Скрипт 1 (Обновление хранилища данных, обычный скрипт в SSS):
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RequestData = ReplicatedStorage.Remotes:WaitForChild("RequestData") -- Измените это на имя вашей RemoteFunction.
local DataStore = DataStoreService:GetDataStore("DataStore1") -- Измените это на имя вашего хранилища данных.
local PlayerData = {}
local function getDefaultData()
return {
-- Здесь вы указываете значения по умолчанию: Например: "Coins = {Value = 100, ShowOnLeaderboard = true},"
Coins = {Value = 0, ShowOnLeaderboard = true},
Rebirths = {Value = 0, ShowOnLeaderboard = true}, -- Для наших перерождений
Multiplier = {Value = 1, ShowOnLeaderboard = false, IsFloat = true}, -- Для нашего множителя
OwnedItems = {}
}
end
local function createStatFolders(player, data)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local hiddenStats = Instance.new("Folder")
hiddenStats.Name = "hiddenStats"
hiddenStats.Parent = player
for statName, statData in pairs(data) do
if typeof(statData) ~= "table" or statData.Value == nil then
continue
end
if typeof(statData.Value) ~= "number" then
continue
end
local stat
if statData.IsFloat then
stat = Instance.new("NumberValue")
else
stat = Instance.new("IntValue")
end
stat.Name = statName
stat.Value = statData.Value
if statData.ShowOnLeaderboard then
stat.Parent = leaderstats
else
stat.Parent = hiddenStats
end
end
end
end
local function loadData(player)
local success, data = pcall(function()
return DataStore:GetAsync(player.UserId)
end)
if not success then
warn("Не удалось загрузить данные для "..player.Name..":", data)
end
PlayerData[player] = data or getDefaultData()
local defaults = getDefaultData()
for key, value in pairs(defaults) do
if PlayerData[player][key] == nil then
PlayerData[player][key] = value
end
end
createStatFolders(player, PlayerData[player])
local ownedFolder = Instance.new("Folder")
ownedFolder.Name = "OwnedItems"
ownedFolder.Parent = player
if PlayerData[player].OwnedItems then
for itemName, _ in pairs(PlayerData[player].OwnedItems) do
local tag = Instance.new("BoolValue")
tag.Name = itemName
tag.Parent = ownedFolder
конец
конец
конец
локальная функция saveData(player)
local data = PlayerData[player]
if not data then return end
local leaderstats = player:FindFirstChild("leaderstats")
if leaderstats then
for _, stat in pairs(leaderstats:GetChildren()) do
if data[stat.Name] and typeof(data[stat.Name]) == "table" then
data[stat.Name].Value = stat.Value
end
end
end
end
local hiddenStats = player:FindFirstChild("hiddenStats")
if hiddenStats then
for _, stat in pairs(hiddenStats:GetChildren()) do
if data[stat.Name] and typeof(data[stat.Name]) == "table" then
data[stat.Name].Value = stat.Value
end
end
end
local ownedFolder = player:FindFirstChild("OwnedItems")
if ownedFolder then
data.OwnedItems = {}
for _, item in pairs(ownedFolder:GetChildren()) do
data.OwnedItems[item.Name] = true
end
end
pcall(function()
DataStore:SetAsync(player.UserId, data)
end)
end
Players.PlayerAdded:Connect(function(player)
loadData(player)
end)
Players.PlayerRemoving:Connect(function(player)
saveData(player)
PlayerData[player] = nil
end)
RequestData.OnServerInvoke = function(player)
return PlayerData[player] or getDefaultData()
end
game:BindToClose(function())
for _, player in pairs(Players:GetPlayers()) do
saveData(player)
конец
конец)
-- Сделано с любовью Floppy
--------
Скрипт 2 (Менеджер магазина, ЧАСТЬ А):
-- Все остальные скрипты находятся в описании (скрипты слишком длинные!)
00:00 - Вступление
00:35 - Система перерождения
13:30 - Заключение
Спасибо за вашу постоянную поддержку ❤️