{}const=>[]async()letfn</>var
EntwicklungLua

Level- und Levelsystem in Roblox: Eine vollständige Anleitung von Null bis Held

Schritt-für-Schritt-Anleitung zum Erstellen eines Level- und Erfahrungssystems in Roblox Studio. Erfahren Sie, wie Sie Charakterfortschritte, Spielerdatenspeicherung, visuelle XP-Anzeige und automatische Level-Upgrades erstellen. Vorgefertigter Code und Beispiele für dein Spiel!

К

Kodik

Autor

5 Min. Lesezeit

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

🔥 100.000+ Schüler sind bereits bei uns

Genug Theorie gelesen?
Zeit zu coden!

Kodik — eine App, in der du durch Praxis programmieren lernst. KI-Mentor, interaktive Lektionen, echte Projekte.

🤖 KI 24/7
🎓 Zertifikate
💰 Kostenlos
🚀 Jetzt starten
Heute beigetreten

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))
    )
end

Diese 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
end

Achten 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
end

Schritt 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
end

Oder 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 -- остальной кодend

Befund

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! 🚀

🎯Hör auf zu zögern

Artikel gefallen?
Zeit zum Üben!

Bei Kodik liest du nicht nur — du schreibst sofort Code. Theorie + Praxis = echte Skills.

Sofortige Praxis
🧠KI erklärt Code
🏆Zertifikat

Keine Registrierung • Keine Karte