{}const=>[]async()letfn</>var
DéveloppementLua

Système de niveaux et de mise à niveau dans Roblox : guide complet de zéro à héros

Guide étape par étape pour créer un système de niveaux et d'expérience dans Roblox Studio. Apprenez à faire progresser le personnage, à enregistrer les données du joueur, à afficher visuellement l'XP et à augmenter automatiquement les niveaux. Code prêt à l'emploi et exemples pour votre jeu !

К

Kodik

Auteur

6 min de lecture

Le système de niveaux et d'expérience est l'un des mécanismes de jeu les plus populaires qui motive les joueurs à se développer et à passer plus de temps dans le jeu. Dans cet article, nous verrons comment créer un système de mise à niveau de base mais fonctionnel dans Roblox Studio.

Que créerons-nous ?

Nous allons créer un système où :

  • Le joueur reçoit de l'expérience (XP) pour diverses actions

  • Lorsque vous accumulez une certaine quantité d'expérience, le niveau augmente

  • La progression est enregistrée entre les sessions de jeu

  • L'écran affiche le niveau actuel et la progression

🔥 100 000+ étudiants déjà avec nous

Marre de lire la théorie ?
Il est temps de coder !

Kodik — une appli où tu apprends à coder par la pratique. Mentor IA, leçons interactives, projets réels.

🤖 IA 24/7
🎓 Certificats
💰 Gratuit
🚀 Commencer
Ont rejoint aujourd'hui

Étape 1 : Création d'une structure de données

Tout d'abord, nous devons décider quelles données nous allons stocker pour chaque joueur. Créons un script dans ServerScriptService avec le nom 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     -- Множитель сложности каждого уровня

Ici, nous avons défini les paramètres de base de notre système. XP_MULTIPLIER signifie que chaque niveau suivant nécessite 1,5 fois plus d'expérience.

Étape 2 : Fonction de calcul de l'expérience requise

Créons une fonction qui calcule le nombre d'expérience nécessaire pour atteindre le niveau suivant :

local function getXPForLevel(level)
    -- Формула: базовый_опыт * (множитель ^ (уровень - 1))
    return math.floor(
        XP_PER_LEVEL * (XP_MULTIPLIER ^ (level - 1))
    )
end

Cette formule rend le jeu plus équilibré - chaque niveau nécessite plus d'expérience, ce qui crée une progression de la difficulté.

Étape 3 : Initialisation des données du joueur

Quand un joueur entre sur le serveur, nous devons télécharger ses données ou en créer de nouvelles :

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)

Le dossier leaderstats s'affiche automatiquement dans la liste des joueurs dans Roblox, ce qui est pratique pour le débogage.

Étape 4 : Fonction d'ajout d'expérience

Maintenant, créons la fonction principale — ajouter de l'expérience au joueur :

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

Faites attention au cycle while - il est nécessaire au cas où le joueur a reçu beaucoup d'expérience à la fois et peut sauter plusieurs niveaux.

Étape 5 : Enregistrer la progression

Il est important de sauvegarder les données du joueur quand il quitte le jeu :

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

Étape 6 : exemples d'utilisation

Maintenant, nous pouvons donner de l'expérience pour diverses actions. Par exemple, pour la victoire sur l'ennemi :

-- В скрипте врага
local function onDeath()
    -- Логика определения игрока, убившего врага
    local killer = nil

    if killer then
        addXP(killer, 25) -- Даём 25 опыта
    end
end

Ou pour la collecte de pièces de monnaie :

-- В скрипте коллекционного предмета
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)

Étape 7 : Création d'une interface utilisateur pour afficher la progression

Ajoutons un bel affichage du niveau et de l'expérience. Créer ScreenGui à StarterGui avec le nom LevelUI, et à l'intérieur Frame pour le panneau :

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

Améliorations supplémentaires

Voici quelques idées sur la façon dont ce système peut être étendu :

1. Récompenses pour le niveau

local LEVEL_REWARDS = { [5] = {Coins = 100}, [10] = {Coins = 250, Item = "SpecialSword"}, [20] = {Coins = 500} }

2. Différentes sources d'expérience

addXP(player, 50, "Quest") addXP(player, 10, "Killing the enemy") addXP(player, 5, "Research")

3. Boosts d'expérience

local function addXP(player, amount, hasBoost) if hasBoost then amount = amount * 2 -- Удвоенный опыт end -- остальной кодend

Conclusion

Nous avons créé un système complet de niveaux et de progression pour le jeu Roblox ! Ce système comprend :

  • Acquisition d'expérience

  • Augmentation des niveaux avec une complexité progressive

  • Sauvegarde des données

  • Affichage visuel de la progression

Ceci et bien plus encore peuvent être étudiés dans le Codex !

Nous analysons des sujets intéressants en détail, étape par étape, avec des explications claires et des exercices pratiques. Vous ne vous contenterez pas de lire la théorie, mais vous consolideriez également vos connaissances dans la pratique en créant de vrais projets.

Et si vous avez besoin d'aide — nous avons déjà une grande équipe de personnes partageant les mêmes idées dans l'actif Chaîne Telegram. Posez des questions, partagez vos projets et obtenez de l'aide de développeurs expérimentés ! 🚀

🎯Arrête de reporter

Tu as aimé l'article ?
Place à la pratique !

Avec Kodik, tu ne lis pas seulement — tu codes immédiatement. Théorie + pratique = vraies compétences.

Pratique instantanée
🧠L'IA explique le code
🏆Certificat

Sans inscription • Sans carte