Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Bienvenue Guest!

Rejoignez la communauté pour avoir accès à l'entièreté du site! Une fois que vous serez enregistré, vous pourrez créer, aider, partager et discuter avec les membres de la communauté et également participer à l'amélioration du site. Alors, qu'attendez vous ? Enregistrez-vous !

Sign in to follow this  
JagerBom

avancé [TUTO] Callback ESX

Recommended Posts

JagerBom

Bonjour a tous! 

 

Je vais vous expliquer a quoi sert un callback et comment s'en servir.

 

A quoi sert un callback ? 

Un callback sert d'avoir quelque chose coté client du coté serveur. Donc tu veux faire un check que la voiture appartient bien a quelqu'un, ou combien de joueurs en service pour tel job ou ... Au server on peut lui donner une variable a check qu'on a obtenu de coté client.

donc en gros:

Serveur --> client

 

Qu'est ce qu'on peut faire passer par un callback ?

On peut tout donner. Que cas soit une simple variable string, decimal, tableau et etc...

 

Comment s'en servir ? 

---FACILE---

D'abord commencer par le coté serveur.

ceci est un example de comment commencer un callback:

ESX.RegisterServerCallback('nom_du_script:nom_du_callback', function(source, cb)
	cb("La valeur donnée au client")
end)

Explications:

Le cb() est ESSSENTIEL, Entre les parenthèses ses on met la valeur/ variable qu'on veut pour que le script l'envois au client qui récupérer la valeur donnée par le callback. Au client on va donc renvoyer la valeur 'La valeur donnée au client'

 

 

et comment le récuperer du coté client:

Citizen.CreateThread(function()
    ESX.TriggerServerCallback('nom_du_script:nom_du_callback',function(valeurduserveur)
        print(valeurduserveur)
    end)
end)

Explications:

Il doit s'utiliser toujours dans un bout de code, jamais séparé. Dans les parenthèses de fonction() on va mettre un nom choisis comme vous le voulez pou definier la valeur/tableau recuperée du serveur. Dans notre cas on l'a nommé valeurduserveur. Apres DANS le callback en lui même et pas en dehors, vous utilisez le nom de la valeur que vous venez de choisir autant de fois que vous le voulez. Donc dans notre cas on va faire un print de la valeur: valeurduserveur

 

 

RÉSULTAT:

Dans la console du joueur on aura le print: La valeur donnée au client

 

 

---MOYEN---

Plus avancé on va maintenant donné une ou plusieurs valeurs qu'on a obtenu du client pour les utiliser coté serveur

Coté serveur:

ESX.RegisterServerCallback('nom_du_script:nom_du_callback', function(source, cb, valeurclient1, valeurclient2)
	if valeurclient1 == "police" then
		if print(string.sub(valeurclient1, 1, 3)) == "007" then
			cb(true)
		else
			cb(false)
		end
	else
		cb(false)
	end
end)

Explications:

valeurclient1 =  enfaite au job du joueur et valeurclient2 a la plaque de voiture. Ici on va chequer d'abord si le job correspond au policier, si la réponse est non on envoit au client une réponse disant que c'est false. Is il est policier mais qu'il n'a pas ded plaque commencant par 007, on envoit aussi au client que c'est false. Si il est policier et a une plaque commencant par 007 on envoit un true. Vous pouvez voir que a CHAQUE option j'ai mis un callback, car on est obliger de renvoyer une valeur au client. Un maniere plus propre de est de la faire comme ici:

local bool = false
ESX.RegisterServerCallback('nom_du_script:nom_du_callback', function(source, cb, valeurclient1, valeurclient2)
	if valeurclient1 == "police" then
		if print(string.sub(valeurclient1, 1, 3)) == "007" then
			 bool = true
		else
			 bool = false
		end
	else
		 bool = false
	end
	cb(bool)
end)

Explications:

Ici au dessus on peut voir que je n'ai que mis un cb() mais que a chaque option j'ai assigné dans ce cas une variable bool et je la renvois a la fin du script

 

encre plus optimisé:

ESX.RegisterServerCallback('nom_du_script:nom_du_callback', function(source, cb, valeurclient1, valeurclient2)
	local bool = false
	if valeurclient1 == "police" then
		if print(string.sub(valeurclient1, 1, 3)) == "007" then
			 bool = true
		end
	end
	cb(bool)
end)

Explication:

Vu que j'ai assigné en haut le false, ben il ne faut que le changer si il doit se mettre true

 

 

coté client

local job = "police"
local plaque = "007ABCD"

Citizen.CreateThread(function()
    ESX.TriggerServerCallback('nom_du_script:nom_du_callback',function(valeurduserveur)
        print("est il police et plaque commencant par 007?")
		print(valeurduserveur)
    end, job, plaque)
end)

Explications:

On va commencer par trigger la callback MAIS on y ajoute cette fois ci des valeurs qu'on a récupérer du coté client. On envoie au serveur que la variable job et plaque.

 

RÉSULTAT

Dans le coté client on aura la question posée avec la valeur true

 

 

---DIFICILLE - tableau ---

Maintenant on va encore plus pousser la limite. On va envoyer une valeur de client a serveur et de renvoyer un tableau au client.

 

Coté sevreur:

local Garages = {
	Garage_Centre = {
		Pos = {x=315.800, y=-777.057, z=30.727},
		Name = 'Garage du centre',
	},
	Garage_Nord = {
		Pos = {x=215.800, y=-888.057, z=30.727},
		Name = 'Garage du nord',
	},
	Garage_Sud = {
		Pos = {x=1215.800, y=999.057, z=30.727},
		Name = 'Garage du sud',
	}
}
ESX.RegisterServerCallback('nom_du_script:nom_du_callback', function(source, cb, garagename)
	local mygarage = {}
	for k, v in pairs (Garages) do
		if k == garagename then
			mygarage = v
		end
	end
	cb(mygarage)
end)

Explications:

Ici on a un tableau coté serveur avec les garages. Du coté client on a reçu le nom du garage. Si le garage existe le client va recevoir les données (Pos et Name) sinon il va recevoir un tableau vide ({}).

 

coté client:

local garagename = "Garage_Centre"
Citizen.CreateThread(function()
    ESX.TriggerServerCallback('nom_du_script:nom_du_callback',function(tableaudugarage)
        print("quels sont les valeurs recu du serveur ?")
		if tableaudugarage~= {} then
			print(tableaudugarage.Name)
			print(tableaudugarage.Pos.x)
			print(tableaudugarage.Pos.y)
			print(tableaudugarage.Pos.z)
		else
			print("pas de tableau reçu")
		end
    end, garagename)
end)

Explications:

On envoi le garagename (Garage_Centre) au serveur. Du coté serveur il va vérifier si il y a quelque chose avec ce nom la. Si il trouve rien il envoi un tableau vide donc il sera maqué "pas de tableau reçu). Si jamais il a trouvé quelque chose il va afficher toutes les informations. (le nom du garage + les position x, y, z)

 

RÉSULTAT

Garage du centre

315.800

-777.057

30.727

 

 

Voila si des question n’hésitez pas a les poser on es la pour les répondre.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

En utilisant ce site, vous acceptez les présents règlements Terms of Use, Privacy Policy,Guidelines.