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)
Retour en haut