Comment créer un leaderstats (classement) sur Roblox Studio — guide débutant complet
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
leaderstatsen 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
- Dans l'Explorateur (View → Explorer si tu ne le vois pas), repère ServerScriptService.
- Clique droit dessus → Insert Object → Script.
- Renomme-le comme tu veux (
LeaderboardSetuppar exemple) — le nom du script n'a aucune importance.
Pourquoi
ServerScriptServiceet pasWorkspace? Parce que tout ce qui touche aux données des joueurs doit s'exécuter côté serveur pour des raisons de sécurité. UnLocalScriptne 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 ?
| Type | Contenu | Exemple |
|---|---|---|
IntValue | Nombre entier (0, 1, 100…) | Score, Argent, Kills, Wins |
NumberValue | Nombre décimal (1.5, 3.14…) | Distance, Temps |
StringValue | Texte | Rang, 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ème | Cause probable | Solution |
|---|---|---|
| Le classement n'apparaît pas du tout | Faute dans le nom du dossier | Vérifie que c'est exactement leaderstats (minuscules) |
| La stat ne s'affiche pas | score.Parent défini avant score.Name | Toujours définir .Name avant .Parent |
Le classement affiche un tiret - pour certains joueurs | Le script ne s'est pas exécuté pour ce joueur | Utilise PlayerAdded dans un Script côté serveur |
| Les données ne se sauvegardent pas | DataStore non activé ou PlayerRemoving absent | Active l'API Services et gère bien PlayerRemoving |
| Tri bizarre avec des StringValues | Tri alphabétique au lieu de numérique | Utilise 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
- Documentation officielle Roblox — In-experience leaderboards
- Roblox Creator Hub — Record and display player data
- Roblox Wiki — Tutorial: Making a leaderboard
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. 👇