КАК СОЗДАТЬ СИСТЕМУ УРОВНЕЙ | Roblox Studio (СОХРАНЕНИЕ ДАННЫХ И ОПЫТ)
Itz_FloppyFish
0:00 / 0:00
КАК СОЗДАТЬ СИСТЕМУ УРОВНЕЙ | Roblox Studio (СОХРАНЕНИЕ ДАННЫХ И ОПЫТ)
3 556 просмотров · 2 месяца назад
Itz_FloppyFish
82,5 тыс. подписчиков
3 556 просмотров · 2 месяца назад
В сегодняшнем видео я покажу вам, как создать систему уровней в Roblox Studio. Система работает следующим образом: игрок зарабатывает опыт, собирая монеты, выполняя квесты или просто играя в игру. Полученный опыт накапливается, и как только вы достигнете определенного количества, автоматически перейдете на следующий уровень. Я разработал эту систему таким образом, чтобы её можно было легко настраивать, позволяя добавлять собственные классные эффекты и адаптировать её под вашу игру.
Если вам нужна помощь, пожалуйста, создайте заявку на моём Discord-сервере, и мы с удовольствием вам поможем!
🌟 Discord-сервер Floppys: / discord
Учебное пособие по валютной/монетной системе (упомянутое в конце видео): • HOW TO MAKE A CASH SYSTEM | Roblox Studio ...
----------------------------
Скрипт 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},
XP = {Value = 0, ShowOnLeaderboard = false},
Level = {Value = 1, ShowOnLeaderboard = true}
}
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" или statData.Value == nil, то
продолжить
конец
если typeof(statData.Value) ~= "number", то
продолжить
конец
локальная статистика
если statData.IsFloat, то
stat = Instance.new("NumberValue")
иначе
stat = Instance.new("IntValue")
конец
stat.Name = statName
stat.Value = statData.Value
если statData.ShowOnLeaderboard, то
stat.Parent = leaderstats
иначе
stat.Parent = hiddenStats
конец
конец
конец
локальная функция loadData(player)
локальный успех, data = pcall(function()
return DataStore:GetAsync(player.UserId)
конец)
если не успех, то
warn("Не удалось загрузить данные для "..player.Name..":", data)
конец
PlayerData[player] = данные или 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])
end
local function 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
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)
end
end)
----------
Скрипт 2 (LevelConfig - ModuleScript):
local LevelConfig = {}
LevelConfig.XPBase = 100 -- Стоимость 1-го уровня.
LevelConfig.XPMultiplier = 1.5 -- Следующий множитель цены.
LevelConfig.MaxLevel = 0
function LevelConfig.GetXPForLevel(level)
return math.floor(LevelConfig.XPBase * (LevelConfig.XPMultiplier ^ (level - 1)))
end
return LevelConfig
----------
Скрипт 3 (LevelService - ModuleScript):
-- Все остальные скрипты находятся в комментариях, так как у меня закончилось место в описании!
(ДЛЯ ТЕХ, КТО ХОЧЕТ ОБЪЕДИНИТЬ МОНЕТЫ И ОПЫТ):
Используя мое видео о валюте, вы можете связать монеты и опыт.
Во-первых, в CurrencyManager добавьте в начало следующие строки:
local ServerScriptService = game:GetService("ServerScriptService")
local LevelService = require(ServerScriptService:WaitForChild("LevelService"))
local LevelConfig = require(ReplicatedStorage:WaitForChild("LevelConfig"))
Затем в строке 39 добавьте следующее:
LevelService.giveXP(player, amount * LevelConfig.XPPerCoin)
Затем в LevelConfig добавьте следующее ниже остальных строк:
LevelConfig.XPPerCoin = 1
И вот так, всё готово.
-------
00:00 - Введение
00:29 - Основная система уровней
12:02 - Заключение
Спасибо за вашу постоянную поддержку ❤️