Variables Serveur
Sur cette page tu trouveras comment faire:
- La différence entre variable serveur et joueur
- Comment changer une variable serveur depuis n’importe ou dans le jeu
- Quelques exemples
Différence entre variable serveur et joueur
Certaines valeurs ne peuvent pas être directement modifiées par un Local Script. Ce sont en général les valeurs qui ont des conséquences pour tous les joueurs, qui pourrait permettre à certains de tricher, etc.
Parmis ces valeurs on trouve:
Les scores, les timers, la taille du joueur, le classement, et pleins d’autre.
Par exemple un joueur qui ramasse une pièce avec son LocalScript de ramassage, gagne des points pour lui, mais les autres joueurs ne verront pas ses points.
Sauf si! Dans son LocalScript il envoi au serveur un signal, pour dire « J’ai ramassé une pièce! »
Le serveur peut alors réagir et dire « Ok, je te donne un point devant tout le monde. »
Changer une variable serveur depuis n’importe ou dans le jeu
Pour changer une variable importante, il faut donc que le joueur (ou l’element du jeu) envoi au serveur un signal. Pour que ce signal passe il faut créer un element appellé « RemoteEvent », comme sur l’image à droite.
On en va en créer autant que l’on a besoin, sachant que un RemoteEvent ne sert pour un seul script.
Ensuite on ajoutera dans le code:

Dans le Local Player Script, le code pour envoyer au serveur l’information
local Remote = game:GetService("ReplicatedStorage"):WaitForChild("PickupRemote") -- accès au données du serveur
Remote:FireServer(VARIABLE) -- les données à envoyer
Dans un Serveur script le code pour savoir quoi faire quand le serveur reçoit le signal
local Remote = game:GetService("ReplicatedStorage"):WaitForChild("PickupRemote") -- accès au données du serveur
Remote.OnServerEvent:Connect(function(Player, Value) -- quand le serveur reçoit l'info que ses données ont changées
-- ici on change la valeur de la variable que l'on veut
end)
Le serveur peut aussi envoyer des infos a n’import quel ou joueur en retour:
--optionel, le serveur renvoi un message au joueur
local AnotherMessage = "Seul le joueur verra ce message"..Player.Name
Remote:FireClient(Player, AnotherMessage)
Exemple
Changer le score quand on ramasse une pièce
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 scores
local CS = game:GetService("CollectionService") --liste des objets taggé du jeu
local Remote = game:GetService("ReplicatedStorage"):WaitForChild("PickupRemote") -- accès au données du serveur
local db = false -- empèche la fonction de point de se lancer plusieurs fois
humanoid.Touched:Connect(function(hit) --si on touche un objet
if CS:HasTag(hit,"piece") and db == false then --si il a le tag qu'on veut
db = true
Remote:FireServer(player.leaderstats.Coins.Value) -- On dit au serveur que le joueur à ramasser une pièce
hit:Destroy()
wait(0.1) -- waits(secondes) Paramètre = temps en secondes. considéré mauvaise pratique de ne pas utiliser de paramètres
db = false -- desactive le db pour pouvoir re-ramasser la pièce suivante
end
end)
-- gère le compteur de pièces sur le serveur
local Remote = game:GetService("ReplicatedStorage"):WaitForChild("PickupRemote") -- accès au données du serveur
Remote.OnServerEvent:Connect(function(Player, Value) -- quand le serveur reçoit l'info que ses données ont changées
Player.leaderstats.Coins.Value += 1 --change la valeur de pieces via le serveur
end)