Classement
Sur cette page tu trouveras comment faire:
- Un script Local Joueur pour gerer les joueurs en jeu, leur temps en jeu
- Un classement simple qui utilise la fonctionalité de classement de Roblox
- Un script de Classement avec affichage
Pour les faires fonctionner il te faudra un RemoteEvent. Consulte la fiche « Variable Serveur » si tu ne sais plus comment cet element fonctione!
Script Local Joueur
Ce premier script permet aux joueur d’entrer ou de sortir du jeu en touchant un objet, et d’être chronometrés
local humanoid = script.Parent:WaitForChild("Humanoid") --recupère le corps du joueur pour tester ce qui est touchélocal player = game.Players:GetPlayerFromCharacter(script.Parent) -- récupère le joueur dans la liste des joueurs pour gerer les scoreslocal Remote = game:GetService("ReplicatedStorage"):WaitForChild("ClassementRemote") -- accès au données du serveurlocal inGame = falselocal chrono = 0humanoid.Touched:Connect(function(hit) --si on touche un objet  if hit.Name == "StartGame" and inGame == false then --si il a le tag qu'on veut et qu'on est pas déjà en jeu    inGame = true    Remote:FireServer(inGame,chrono) -- envoi l'état du joueur au serveur, évite les triches  end  if hit.Name == "EndGame" and inGame == true then --si il a le tag qu'on veut et qu'on est pas deja hors-jeu    inGame = false    Remote:FireServer(inGame,chrono) -- envoi l'état du joueur au serveur, évite les triches    chrono = 0  --reset le chrono  endend)--pendant qu'on est en jeu, chronomètre le joueurwhile true do  wait(1)  if inGame then    chrono += 1  endendServeur script: version simple
Ici on utilise le système d’affichage de Roblox pour faire directement le classement pour tous les joueurs
local function playerSpawned(player) --création des valeurs. Une fois créer ici elles ne se mettent pas a jour sauf si le server le demande  local leaderstats = Instance.new("Folder", player)  leaderstats.Name = "leaderstats"  local chrono = Instance.new("IntValue", leaderstats)  chrono.Name = "chrono"  chrono.Value = 0    local ingame = Instance.new("BoolValue", leaderstats)  ingame.Name = "ingame"  ingame.Value = falseendgame.Players.PlayerAdded:Connect(playerSpawned) --done aux nouveau joueur leurs valeurslocal Remote = game:GetService("ReplicatedStorage"):WaitForChild("ClassementRemote") -- accès au données du serveurRemote.OnServerEvent:Connect(function(Player, Value, Chrono) -- quand le serveur reçoit l'info que ses données ont changées  Player.leaderstats.ingame.Value = Value -- actualiser son état de jeu  Player.leaderstats.chrono.Value = Chrono -- actualiser son chronomètreend)Serveur Script: version complexe personalisée
Ce script-ci permet de faire l’affichage mais de façon personalisée. C’est à dire qu’on peut afficher les joueurs par nombre croissant ou decroissant de points.
Pour l’utiliser il te faudra dans ton niveau un panneau d’affichage avec les élements suivants:
-- Récupère le panneau d'affichage (par son nom)local rankingPart = game.Workspace.ClassementPanneau-- Récupère le RemoteEvent pour recevoir les données du serveurlocal Remote = game:GetService("ReplicatedStorage"):WaitForChild("ClassementRemote")-- Tableau pour stocker les données du classement actuellocal scoreArray = {}-- Fonction pour trier les scores en ordre décroissantlocal function Decroissant()  table.sort(scoreArray, function(a, b)    return a[2] > b[2] -- Trier en ordre décroissant par le deuxième élément (Timer). Pour changer en ordre croissant mettre un <  end)  return scoreArrayend-- Fonction pour mettre à jour le texte du classementlocal function updateText()  local sortedScores = Decroissant() -- Trier les scores  local rankingText = "" -- Préparer un texte vide  for _, value in ipairs(sortedScores) do -- Pour chaque joueur dans les scores triés    if value[3] then -- Si le joueur est en jeu, affiche son nom et indique qu'il est en jeu      rankingText = rankingText .. value[1] .. " ___ En Jeu" .. "\n" -- \n pour aller à la ligne suivante    else -- Si le joueur est hors-jeu, affiche son temps      rankingText = rankingText .. value[1] .. "___" .. tostring(value[2]) .. "\n"    end  end  -- Affiche le classement sur le panneau  rankingPart.RankingSurfaceGui.ScrollingFrame.TextLabel.Text = rankingTextend-- quand le serveur reçoit l'info que ses données ont changéesRemote.OnServerEvent:Connect(function(Player, Value, Timer)  local index = 0  -- Cherche si le joueur existe déjà le tableau des scores  for i, entry in ipairs(scoreArray) do    if entry[1] == Player.Name then      index = i -- récupère la place actuelle du joueur si il existe    end  end  if index == 0 then    -- Si le joueur n'est pas trouvé, l'ajoute à la liste    table.insert(scoreArray, {Player.Name, Timer, Value})  else    -- Si le joueur est trouvé, met à jour son temps et son état de jeu    scoreArray[index][2] = Timer    scoreArray[index][3] = Value  end  updateText() -- Met à jour le texte du classementend)