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)