Das Level- und Erfahrungssystem ist eine der beliebtesten Spielmechaniken, die die Spieler motiviert, sich zu entwickeln und mehr Zeit im Spiel zu verbringen. In diesem Artikel werden wir uns ansehen, wie man ein einfaches, aber funktionales Leveling-System in Roblox Studio erstellt.

Was werden wir erschaffen?
Wir werden ein System entwickeln, in dem:
Der Spieler erhält Erfahrung (XP) für verschiedene Aktionen
Wenn Sie eine bestimmte Menge an Erfahrung sammeln, steigt das Niveau
Der Fortschritt wird zwischen den Spielsitzungen gespeichert
Der Bildschirm zeigt den aktuellen Stand und den Fortschritt an
Schritt 1: Erstellen einer Datenstruktur
Zuerst müssen wir entscheiden, welche Daten wir für jeden Spieler speichern werden. Erstellen Sie ein Skript in ServerScriptService mit dem Namen LevelSystem:
local DataStoreService = game:GetService("DataStoreService")
local playerData = DataStoreService:GetDataStore("PlayerLevels")
-- Настройки системы уровней
local DEFAULT_LEVEL = 1
local DEFAULT_XP = 0
local XP_PER_LEVEL = 100 -- Базовое количество опыта для первого уровня
local XP_MULTIPLIER = 1.5 -- Множитель сложности каждого уровня
Hier haben wir die Grundparameter unseres Systems definiert. XP_MULTIPLIER bedeutet, dass jedes nächste Level 1,5-mal mehr Erfahrung erfordert.
Schritt 2: Berechnung der erforderlichen Erfahrung
Erstellen Sie eine Funktion, die berechnet, wie viel Erfahrung erforderlich ist, um das nächste Level zu erreichen:
local function getXPForLevel(level)
-- Формула: базовый_опыт * (множитель ^ (уровень - 1))
return math.floor(
XP_PER_LEVEL * (XP_MULTIPLIER ^ (level - 1))
)
endDiese Formel macht das Spiel ausgewogener — mit jedem Level wird mehr Erfahrung benötigt, was zu einer fortschreitenden Komplexität führt.
Schritt 3: Initialisierung der Spielerdaten
Wenn ein Spieler den Server betritt, müssen wir seine Daten hochladen oder neue erstellen:
local function setupPlayerData(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local level = Instance.new("IntValue")
level.Name = "Level"
level.Parent = leaderstats
local xp = Instance.new("IntValue")
xp.Name = "XP"
xp.Parent = leaderstats
-- Загружаем сохранённые данные
local success, data = pcall(function()
return playerData:GetAsync(player.UserId)
end)
if success and data then
level.Value = data.Level or DEFAULT_LEVEL
xp.Value = data.XP or DEFAULT_XP
else
level.Value = DEFAULT_LEVEL
xp.Value = DEFAULT_XP
end
end
game.Players.PlayerAdded:Connect(setupPlayerData)
Der Ordner leaderstats wird automatisch in der Spielerliste in Roblox angezeigt, was für das Debuggen nützlich ist.
Schritt 4: Funktion zum Hinzufügen von Erfahrungen
Jetzt erstellen wir die Hauptfunktion — dem Spieler Erfahrung hinzufügen:
local function addXP(player, amount)
local level = player.leaderstats.Level
local xp = player.leaderstats.XP
-- Добавляем опыт
xp.Value = xp.Value + amount
-- Проверяем, достаточно ли опыта для повышения уровня
local xpNeeded = getXPForLevel(level.Value)
while xp.Value >= xpNeeded do
-- Повышаем уровень
xp.Value = xp.Value - xpNeeded
level.Value = level.Value + 1
-- Уведомляем игрока
local message = Instance.new("Message")
message.Text = "Congratulations! You have reached " .. level.Value .. " level!"
message.Parent = player.PlayerGui
wait(3)
message:Destroy()
-- Обновляем требование для следующего уровня
xpNeeded = getXPForLevel(level.Value)
end
endAchten Sie auf den Zyklus while — er wird benötigt, wenn der Spieler sofort viel Erfahrung gesammelt hat und mehrere Level überspringen kann.
Schritt 5: Fortschritt speichern
Es ist wichtig, die Daten des Spielers zu speichern, wenn er das Spiel verlässt:
local function savePlayerData(player)
local success, err = pcall(function()
playerData:SetAsync(player.UserId, {
Level = player.leaderstats.Level.Value,
XP = player.leaderstats.XP.Value,
})
end)
if not success then
warn("Failed to save player data: " .. err)
end
end
game.Players.PlayerRemoving:Connect(savePlayerData)
-- Автосохранение каждые 5 минут
while true do
wait(300) -- 5 минут
for _, player in pairs(game.Players:GetPlayers()) do
savePlayerData(player)
end
endSchritt 6: Anwendungsbeispiele
Jetzt können wir Erfahrung für verschiedene Aktionen geben. Zum Beispiel für den Sieg über den Feind:
-- В скрипте врага
local function onDeath()
-- Логика определения игрока, убившего врага
local killer = nil
if killer then
addXP(killer, 25) -- Даём 25 опыта
end
endOder für das Sammeln von Münzen:
-- В скрипте коллекционного предмета
local function onTouch(hit)
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
if player then
addXP(player, 10)
script.Parent:Destroy()
end
end
script.Parent.Touched:Connect(onTouch)Schritt 7: Erstellen einer Benutzeroberfläche, um den Fortschritt anzuzeigen
Fügen wir eine schöne Anzeige von Level und Erfahrung hinzu. Erstellen Sie ScreenGui in StarterGui mit dem Namen LevelUI, und darin Frame für die Platte:
-- LocalScript в StarterGui
local player = game.Players.LocalPlayer
local gui = script.Parent
-- Создаём элементы интерфейса
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 300, 0, 80)
frame.Position = UDim2.new(0, 10, 0, 10)
frame.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
frame.Parent = gui
local levelLabel = Instance.new("TextLabel")
levelLabel.Size = UDim2.new(1, 0, 0.4, 0)
levelLabel.Position = UDim2.new(0, 0, 0, 0)
levelLabel.BackgroundTransparency = 1
levelLabel.TextColor3 = Color3.new(1, 1, 1)
levelLabel.TextScaled = true
levelLabel.Parent = frame
local progressBar = Instance.new("Frame")
progressBar.Size = UDim2.new(0.9, 0, 0.2, 0)
progressBar.Position = UDim2.new(0.05, 0, 0.6, 0)
progressBar.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
progressBar.Parent = frame
local progressFill = Instance.new("Frame")
progressFill.Size = UDim2.new(0, 0, 1, 0)
progressFill.BackgroundColor3 = Color3.fromRGB(0, 255, 0)
progressFill.Parent = progressBar
-- Функция обновления UI
local function updateUI()
local level = player.leaderstats.Level.Value
local xp = player.leaderstats.XP.Value
local xpNeeded =
-- вызов функции расчёта (через RemoteFunction)
levelLabel.Text =
"Level " .. level .. " | " .. xp .. "/" .. xpNeeded .. " XP"
progressFill.Size = UDim2.new(xp / xpNeeded, 0, 1, 0)
end
-- Обновляем при изменении значений
player.leaderstats.Level.Changed:Connect(updateUI)
player.leaderstats.XP.Changed:Connect(updateUI)
updateUI()Weitere Verbesserungen
Hier sind einige Ideen, wie dieses System erweitert werden kann:
1. Belohnungen für das Level
local LEVEL_REWARDS = { [5] = {Coins = 100}, [10] = {Coins = 250, Item = "SpecialSword"}, [20] = {Coins = 500} }2. Verschiedene Erfahrungsquellen
addXP(player, 50, "Quest") addXP(player, 10, "Killing the enemy") addXP(player, 5, "Research")3. Erfahrungs-Boosts
local function addXP(player, amount, hasBoost) if hasBoost then amount = amount * 2 -- Удвоенный опыт end -- остальной кодendBefund
Wir haben ein vollwertiges Level- und Level-Up-System für das Spiel in Roblox erstellt! Dieses System beinhaltet:
Erfahrung sammeln
Steigende Schwierigkeitsgrade
Datensicherung
Visuelle Anzeige des Fortschritts
Dies und vieles mehr kannst du im Kodex lernen!
Wir analysieren interessante Themen im Detail, Schritt für Schritt, mit klaren Erklärungen und praktischen Aufgaben. Sie werden nicht nur die Theorie lesen, sondern auch Ihr Wissen in der Praxis festigen, indem Sie echte Projekte erstellen.
Und wenn Sie Unterstützung brauchen - Wir haben bereits ein großes Team von Gleichgesinnten in aktiver Telegram-Kanal. Stellen Sie Fragen, teilen Sie Ihre Projekte und erhalten Sie Hilfe von erfahrenen Entwicklern! 🚀
