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 serveurRemote:FireServer(VARIABLE) -- les données à envoyerDans 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 scoreslocal CS = game:GetService("CollectionService") --liste des objets taggĆ© du jeulocal Remote = game:GetService("ReplicatedStorage"):WaitForChild("PickupRemote") -- accĆØs au donnĆ©es du serveurlocal db = false -- empĆØche la fonction de point de se lancer plusieurs foishumanoid.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 serveurend)