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