Перейти к содержимому

КАК СОЗДАТЬ СИСТЕМУ УРОВНЕЙ | 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 - Заключение Спасибо за вашу постоянную поддержку ❤️