GM Market — Premium GMod & FiveM Scripts
Roblox Guide 🇫🇷 Français

Comment créer un leaderstats (classement) sur Roblox Studio — guide débutant complet

>*Muzan Moderator
@>*Muzan · Moderator ·
7 views 0 replies

TL;DR

Tu veux afficher un score, de l'argent ou un niveau dans le tableau de classement en haut à droite de ton jeu Roblox ? C'est ce qu'on appelle le leaderstats. En moins de 20 lignes de script côté serveur, c'est réglé. Ce guide part de zéro, pas besoin d'avoir déjà scripté.


C'est quoi le leaderstats, exactement ?

Quand tu joues sur Roblox, tu as sûrement remarqué ce petit tableau qui s'affiche en haut à droite de l'écran avec le nom des joueurs et leurs stats. C'est le leaderboard natif de Roblox — et il est entièrement automatique une fois que tu connais la règle de base.

La règle, c'est celle-ci : Roblox affiche automatiquement les valeurs contenues dans un dossier nommé exactement leaderstats, rattaché à chaque joueur. Pas LeaderStats, pas Leaderstats — uniquement leaderstats, tout en minuscules. Une seule majuscule ou faute de frappe et le classement n'apparaît pas.

La documentation officielle Roblox précise que le dossier doit impérativement s'appeler leaderstats en minuscules — toute autre orthographe est ignorée par le moteur.

Les valeurs à l'intérieur de ce dossier doivent être des objets de valeur (value objects) : IntValue pour les entiers (score, argent, kills…), StringValue pour du texte (rang, zone…), ou NumberValue pour les décimaux.


Prérequis

  • Roblox Studio installé (téléchargement gratuit)
  • Un projet ouvert (même vide)
  • Aucune expérience de scripting requise — on explique chaque ligne

Étape 1 — Créer le Script dans ServerScriptService

  1. Dans l'Explorateur (View → Explorer si tu ne le vois pas), repère ServerScriptService.
  2. Clique droit dessus → Insert ObjectScript.
  3. Renomme-le comme tu veux (LeaderboardSetup par exemple) — le nom du script n'a aucune importance.

Pourquoi ServerScriptService et pas Workspace ? Parce que tout ce qui touche aux données des joueurs doit s'exécuter côté serveur pour des raisons de sécurité. Un LocalScript ne peut pas créer des leaderstats valides.


Étape 2 — Le script de base (score seulement)

Colle ce code dans ton script :

-- Script dans ServerScriptService
local Players = game:GetService("Players")

Players.PlayerAdded:Connect(function(player)
    -- 1. Créer le dossier leaderstats
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"   -- DOIT être exactement ça, tout en minuscules
    leaderstats.Parent = player

    -- 2. Ajouter une stat "Score"
    local score = Instance.new("IntValue")
    score.Name  = "Score"   -- Ce nom apparaîtra tel quel dans le classement
    score.Value = 0          -- Valeur de départ
    score.Parent = leaderstats
end)

Lance le jeu (F5 ou bouton Play) et rejoins avec un personnage de test — tu verras "Score : 0" s'afficher dans le classement. C'est aussi simple que ça.


Étape 3 — Ajouter plusieurs stats (argent + niveau)

Tu peux mettre autant de valeurs que tu veux dans le dossier leaderstats. Voici un exemple avec de l'argent et un niveau :

local Players = game:GetService("Players")

Players.PlayerAdded:Connect(function(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name   = "leaderstats"
    leaderstats.Parent = player

    -- Argent (IntValue → nombre entier)
    local argent = Instance.new("IntValue")
    argent.Name   = "Argent"
    argent.Value  = 100   -- chaque joueur commence avec 100
    argent.Parent = leaderstats

    -- Niveau (IntValue)
    local niveau = Instance.new("IntValue")
    niveau.Name   = "Niveau"
    niveau.Value  = 1
    niveau.Parent = leaderstats

    -- Zone / Rang (StringValue → texte)
    local zone = Instance.new("StringValue")
    zone.Name   = "Zone"
    zone.Value  = "Départ"
    zone.Parent = leaderstats
end)

Les colonnes apparaissent dans l'ordre où tu les crées dans le script.


Étape 4 — Modifier une stat en cours de jeu

Créer les stats ne suffit pas — il faut pouvoir les mettre à jour. La méthode est simple : tu accèdes à la valeur via player.leaderstats.NomDeLaStat.Value et tu la changes.

Exemple : ajouter 10 points de score quand un joueur touche une pièce (Part dans le Workspace avec un Script attaché) :

-- Script attaché à la Part "Piece"
local piece = script.Parent

piece.Touched:Connect(function(hit)
    local character = hit.Parent
    local player    = game.Players:GetPlayerFromCharacter(character)

    if player then
        -- On modifie directement la valeur dans leaderstats
        player.leaderstats.Score.Value = player.leaderstats.Score.Value + 10
        piece:Destroy()   -- on supprime la pièce pour éviter de la ramasser deux fois
    end
end)

C'est tout. Le classement se met à jour en temps réel pour tous les joueurs dès que .Value change.


IntValue vs StringValue — quand utiliser quoi ?

TypeContenuExemple
IntValueNombre entier (0, 1, 100…)Score, Argent, Kills, Wins
NumberValueNombre décimal (1.5, 3.14…)Distance, Temps
StringValueTexteRang, Zone, Équipe

Attention avec les StringValue : le classement trie les valeurs texte par ordre alphabétique, ce qui peut donner des résultats surprenants. Par exemple, "1.1k" sera considéré comme inférieur à "4" par le tri alphabétique. Pour tout ce qui est numérique, utilise toujours un IntValue ou NumberValue.


Étape 5 (bonus) — Sauvegarder les stats avec DataStore

Par défaut, les leaderstats sont réinitialisés à chaque fois qu'un joueur quitte. Pour que les données persistent entre les sessions, il faut utiliser le DataStoreService. C'est un sujet un peu plus avancé, voici le squelette de base :

local Players        = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local dataStore      = DataStoreService:GetDataStore("MonJeu_ScoreData")

Players.PlayerAdded:Connect(function(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name   = "leaderstats"
    leaderstats.Parent = player

    local score = Instance.new("IntValue")
    score.Name   = "Score"
    score.Parent = leaderstats

    -- Charger la donnée sauvegardée
    local success, savedScore = pcall(function()
        return dataStore:GetAsync("score_" .. player.UserId)
    end)
    score.Value = (success and savedScore) or 0
end)

Players.PlayerRemoving:Connect(function(player)
    -- Sauvegarder quand le joueur quitte
    local score = player:FindFirstChild("leaderstats") and
                  player.leaderstats:FindFirstChild("Score")
    if score then
        pcall(function()
            dataStore:SetAsync("score_" .. player.UserId, score.Value)
        end)
    end
end)

Important : pour que le DataStore fonctionne en jeu publié, pense à activer l'option Enable Studio Access to API Services dans Game Settings → Security. Sans ça, les sauvegardes ne fonctionneront que dans le Studio.


Erreurs fréquentes et solutions

ProblèmeCause probableSolution
Le classement n'apparaît pas du toutFaute dans le nom du dossierVérifie que c'est exactement leaderstats (minuscules)
La stat ne s'affiche passcore.Parent défini avant score.NameToujours définir .Name avant .Parent
Le classement affiche un tiret - pour certains joueursLe script ne s'est pas exécuté pour ce joueurUtilise PlayerAdded dans un Script côté serveur
Les données ne se sauvegardent pasDataStore non activé ou PlayerRemoving absentActive l'API Services et gère bien PlayerRemoving
Tri bizarre avec des StringValuesTri alphabétique au lieu de numériqueUtilise IntValue pour toute valeur numérique

FAQ

Est-ce que je peux avoir plus de 4 stats dans le classement ? Oui, mais Roblox ne limite pas le nombre de colonnes — attention cependant, trop de colonnes rendent le tableau illisible sur mobile.

Puis-je masquer une stat du classement ? Non directement via le système natif. Toute valeur dans leaderstats s'affiche automatiquement. Si tu veux stocker une donnée sans l'afficher, place-la ailleurs dans le joueur (hors du dossier leaderstats).

Mon script marche en Studio mais pas en jeu publié — pourquoi ? Le problème vient presque toujours des DataStores. Active Enable Studio Access to API Services et vérifie que ton jeu est publié (les DataStores ne fonctionnent pas sur les jeux non publiés).

Où trouver des scripts de leaderstats prêts à l'emploi ? Le Roblox Developer Forum et GM Market proposent des ressources pour aller plus vite — mais comprendre les bases ci-dessus te permettra de les adapter à ton jeu.


Pour aller plus loin

Si tu bloques sur une étape ou que ton classement ne s'affiche pas, poste ton code dans les réponses — la communauté est là pour aider. 👇

0

0 Replies

No replies yet — be the first to respond.