25.02.2014, 01:25
(
Last edited by S4t3K; 26/02/2014 at 01:11 PM.
)
Salut.
Beaucoup savent dйjа ce que c'est, mais ce tutoriel est bien йvidemment destinй aux dйbutants.
Une fonction, concrиtement, c'est quoi ?
En maths, on dit que зa associe un nombre а un autre
En programmation, c'est plus ou moins зa si on retourne aux bases de l'informatique : le binaire.
Le binaire, c'est huit chiffres (0 ou 1) disposйs dans un certain ordre, qui correspondent а des lettres.
Le A en binaire donnerait quelque chose comme 010000000.
Ce qui fait qu'une fonction comme SendClientMessage correspond bien а du binaire (traduire le message en binaire, pour le renvoyer).
Je vais vous apprendre а crйer des fonctions dans ce tutoriel. C'est assez simple et amusant, vous allez voir.
Prenons un truc simple : une fonction qui tйlйporte tous les joueurs connectйs а la position du joueur qui a tapй la commande
On doit connaоtre tous les joueurs, savoir si ils sont connectйs et enfin tous les TP.
Ce qui donnerait un truc comme
Mais vous devinerez que fonction et findeMaFonction ne veulent rien dire en programmation.
Pour le pawn, il y a deux types de fonction : les stock et les public.
Les public sont nйcessaires pour les fonctions appelйes via SetTimer(Ex), tandis que les fonctions stock ne nйcessitent mкme pas de mettre le prйfixe stock devant.
Ensuite, dans la parenthиse de la fonction, on met les paramиtres de la fonction.
Pour ceux qui sont passйs par la filiиre S, vous savez de quoi je parle.
Sinon, pour les nombres, il y a trois catйgories : les inconnues, les variables et les paramиtres.
Un inconnu c'est la valeur de x dans une йquation qu'on cherche а dйterminer.
Une variable c'est un nombre dont la valeur va changer au cours du code
Et un paramиtre c'est une valeur qui sera la mкme tout au long du code.
En pawn, lorsqu'on veut effectuer une action globale, comme un chargement de vйhicule ou une connexion SQL, on ne met pas de paramиtres, donc ().
Quand on veut toucher а un/plusieurs joueurs, on met le paramиtre playerid
Quand on veut toucher aux vйhicules, on met vehicleid
Notez que les types des paramиtres doivent кtre dйclarйs dans ce qu'on appelle le header de la fonction.
Pour la fonction plus complexe qu'on verra plus tard, les paramиtres feront comme зa
(playerid, vehicleid, Float
osx, Float
osy, Float
osz, const message[])
Mais mettre trop de paramиtres dans une fonction, зa devient dйsagrйable а utiliser.
Bref, pour l'exemple...
Reprenons le cas de MaFonction, que je vais renommer TpAll
Voilа !
Mais la fonction peut кtre optimisйe...
En effet, on peut mettre x, y et z en paramиtres.
Ce qui йviterait de taper new machin machin, qui йconomiserait donc une ligne !
le nouveau header ferait donc
Et on aurait plus а mettre
On va passer а une fonction un peu plus utile, SendErrorMessage.
C'est une fonction que j'utilise souvent (ke g ft tou seul kom 1 gran) pour envoyer des messages d'erreurs sans la mise en forme assez chiante.
Je vous la donne et on va la dйcortiquer.
idjoueur, c'est l'йquivalent de playerid pour la fonction (car si on sait bien les placer, on peut appeler les paramиtres comme on veut)
couleur, c'est la couleur du texte, et message c'est ce qu'on veut envoyer aprиs "Erreur".
Ce qui nous fait une magnifique fonction car trиs facile et simple d'utilisation.
Un exemple de l'utilisation de la fonction
NB : La couleur -1 signifie non mise en forme, ce qui envoit un message de couleur blanche. C'est l'йquivalent du code couleur FFFFFF.
Allez, pour terminer le tutoriel, on passe а la mйga big fonction compliquйe dont je vous ait parlй tout а l'heure.
Cette fonction sera vraiment useless dans la majoritй des cas.
Ca explose le joueur si il est dans un vйhicule et зa donne la possibilitй d'envoyer un message custom.
De plus, si le joueur est en NRG, l'explosion mettra 5 secondes а arriver au lieu d'immйdiatement.
Voilааа.
On voit bien que la premiиre fonction est publique, car elle est appelйe par un timer.
Chaque fonction appelйe par un timer doit кtre publique, ce qui signifie qu'elle a besoin d'un forward, contenant les mкmes paramиtres que le header de la fonction. Il se termine par un ;
Le forward de la fonction SendErrorMessage, si il y en avait besoin, aurait йtй
Voilа, j'espиre que vous en savez plus sur les fonctions qu'au dйpart, sinon зa veut dire que vous n'кtes pazun dйbutant.
Bonne soirйe.
PS : J'ai pas l'habitude d'utiliser les tableaux pour les positions, j'ai appris en crйant les flottantes x, y et z, et je continuerais comme зa. Faоtes comme bon vous semble mais me le rappeler а chaque fois que je poste un bout de code me paraоt inutile. Alors si tu prйvoyais de faire зa, commence а effacer ton commentaire. Bitch.
Beaucoup savent dйjа ce que c'est, mais ce tutoriel est bien йvidemment destinй aux dйbutants.
Une fonction, concrиtement, c'est quoi ?
En maths, on dit que зa associe un nombre а un autre
En programmation, c'est plus ou moins зa si on retourne aux bases de l'informatique : le binaire.
Le binaire, c'est huit chiffres (0 ou 1) disposйs dans un certain ordre, qui correspondent а des lettres.
Le A en binaire donnerait quelque chose comme 010000000.
Ce qui fait qu'une fonction comme SendClientMessage correspond bien а du binaire (traduire le message en binaire, pour le renvoyer).
Je vais vous apprendre а crйer des fonctions dans ce tutoriel. C'est assez simple et amusant, vous allez voir.
Prenons un truc simple : une fonction qui tйlйporte tous les joueurs connectйs а la position du joueur qui a tapй la commande
On doit connaоtre tous les joueurs, savoir si ils sont connectйs et enfin tous les TP.
Ce qui donnerait un truc comme
PHP Code:
fonction MaFonction
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(IsPlayerConnected(p))
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(p, x, y, z);
SendClientMessageToAll(0xFF0000FF, "Tout le monde a йtй tйlйportй а un joueur !");
}
}
findeMaFonction
Pour le pawn, il y a deux types de fonction : les stock et les public.
Les public sont nйcessaires pour les fonctions appelйes via SetTimer(Ex), tandis que les fonctions stock ne nйcessitent mкme pas de mettre le prйfixe stock devant.
Ensuite, dans la parenthиse de la fonction, on met les paramиtres de la fonction.
Pour ceux qui sont passйs par la filiиre S, vous savez de quoi je parle.
Sinon, pour les nombres, il y a trois catйgories : les inconnues, les variables et les paramиtres.
Un inconnu c'est la valeur de x dans une йquation qu'on cherche а dйterminer.
Une variable c'est un nombre dont la valeur va changer au cours du code
Et un paramиtre c'est une valeur qui sera la mкme tout au long du code.
En pawn, lorsqu'on veut effectuer une action globale, comme un chargement de vйhicule ou une connexion SQL, on ne met pas de paramиtres, donc ().
Quand on veut toucher а un/plusieurs joueurs, on met le paramиtre playerid
Quand on veut toucher aux vйhicules, on met vehicleid
Notez que les types des paramиtres doivent кtre dйclarйs dans ce qu'on appelle le header de la fonction.
Pour la fonction plus complexe qu'on verra plus tard, les paramиtres feront comme зa
(playerid, vehicleid, Float
![Tongue](images/smilies/razz.gif)
![Tongue](images/smilies/razz.gif)
![Tongue](images/smilies/razz.gif)
Mais mettre trop de paramиtres dans une fonction, зa devient dйsagrйable а utiliser.
Bref, pour l'exemple...
Reprenons le cas de MaFonction, que je vais renommer TpAll
PHP Code:
TpAll(playerid) // Le header de la fonction
{
for(new p = 0; p < MAX_PLAYERS; p++) // On utilise une boucle for pour appliquer p а tous les joueurs
{
if(IsPlayerConnected(p)) // On limite p а tous les joueurs connectйs
{
new Float:x, Float:y, Float:z; // On crйe les variables de position, qu'on pourrait mettre en paramиtre de la f
GetPlayerPos(playerid, x, y, z); // On rйcupиre la position du joueur qui a tapй la commande
SetPlayerPos(p, x, y, z); // On tp tous les joueurs aux positions du joueur qui a tapй la commande
SendClientMessageToAll(0xFF0000FF, "Tout le monde a йtй tйlйportй а un joueur !"); // On envoie un message
}
}
return 1;
}
Mais la fonction peut кtre optimisйe...
En effet, on peut mettre x, y et z en paramиtres.
Ce qui йviterait de taper new machin machin, qui йconomiserait donc une ligne !
le nouveau header ferait donc
PHP Code:
TpAll(playerid, Float:x, Float:y, Float:z)
PHP Code:
new Float:x, Float:y, Float:z;
C'est une fonction que j'utilise souvent (ke g ft tou seul kom 1 gran) pour envoyer des messages d'erreurs sans la mise en forme assez chiante.
Je vous la donne et on va la dйcortiquer.
PHP Code:
SendErrorMessage(idjoueur, couleur, message[])
{
new ttexte[1024];
format(ttexte, 1024, "{FF0000}[Erreur]{FFFFFF} %s", message);
SendClientMessage(idjoueur, couleur, ttexte);
}
couleur, c'est la couleur du texte, et message c'est ce qu'on veut envoyer aprиs "Erreur".
Ce qui nous fait une magnifique fonction car trиs facile et simple d'utilisation.
Un exemple de l'utilisation de la fonction
PHP Code:
SendErrorMessage(playerid, -1, "Tu es trop loin de ta maison !");
Allez, pour terminer le tutoriel, on passe а la mйga big fonction compliquйe dont je vous ait parlй tout а l'heure.
Cette fonction sera vraiment useless dans la majoritй des cas.
Ca explose le joueur si il est dans un vйhicule et зa donne la possibilitй d'envoyer un message custom.
De plus, si le joueur est en NRG, l'explosion mettra 5 secondes а arriver au lieu d'immйdiatement.
PHP Code:
forward ExploseNRG(vehicleid, Float:x, Float:y, Float:z);
public ExploseNRG(vehicleid, Float:x, Float:y, Float:z)
{
CreateExplosion(x, y, z, 2, 10.0);
SetVehicleHealth(vehicleid, 0.0);
return 1;
}
ExploseJoueurVeh(playerid, vehicleid, Float:posx, Float:posy, Float:posz, const message[])
{
if(IsPlayerInAnyVehicle(playerid))
{
if(GetVehicleModel(vehicleid) == 522) return SetTimerEx("ExploseNRG", 5000, false, "dfff", vehicleid, x,y, z);
GetVehiclePos(vehicleid, x, y, z);
CreateExplosion(x, y, z, 2, 10.0);
SetVehicleHealth(vehicleid, 0.0);
SendClientMessage(playerid, -1, message);
return 1;
}
On voit bien que la premiиre fonction est publique, car elle est appelйe par un timer.
Chaque fonction appelйe par un timer doit кtre publique, ce qui signifie qu'elle a besoin d'un forward, contenant les mкmes paramиtres que le header de la fonction. Il se termine par un ;
Le forward de la fonction SendErrorMessage, si il y en avait besoin, aurait йtй
PHP Code:
forward SendErrorMessage(idjoueur, couleur, message[]);
Bonne soirйe.
PS : J'ai pas l'habitude d'utiliser les tableaux pour les positions, j'ai appris en crйant les flottantes x, y et z, et je continuerais comme зa. Faоtes comme bon vous semble mais me le rappeler а chaque fois que je poste un bout de code me paraоt inutile. Alors si tu prйvoyais de faire зa, commence а effacer ton commentaire. Bitch.