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)