GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Winklevows le 21 Janvier 2011, 20:00:39
-
Bonjour,
Je suis en train de refaire mes commandes et je me demandais quel était la meilleur syntaxe entre (par exemple) :
<?php
COMMAND:donnerc4(playerid, params[])
{
if(IsSpawned[playerid] == 1)
{
new giveplayerid;
if (!sscanf(params, "u", giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
if(giveplayerid != playerid)
{
if(HasC4[playerid] == 1)
{
PROCESSUS COMMANDE
}
else SendClientMessage(playerid,COLOR_ERROR,"Vous n'avez pas de C4");
}
else SendClientMessage(playerid, COLOR_ERROR, "Vous ne pouvez pas utiliser cette commande sur vous-même");
}
else SendClientMessage(playerid, COLOR_ERROR, "Ce joueur n'est pas connecté");
}
else SendClientMessage(playerid, COLOR_ERROR, "Utilisation: /donnerc4 [ID ou pseudo]");
}
else SendClientMessage(playerid, COLOR_ERROR, "Vous êtes mort. Vous ne pouvez pas utiliser cette commande");
return 1;
}
et entre :
<?php
COMMAND:donnerc4(playerid, params[])
{
if(IsSpawned[playerid] == 0)
{
SendClientMessage(playerid, COLOR_ERROR, "Vous êtes mort. Vous ne pouvez pas utiliser cette commande");
return 1;
}
new giveplayerid;
if (sscanf(params, "u", giveplayerid))
{
SendClientMessage(playerid, COLOR_ERROR, "Utilisation: /donnerc4 [ID ou pseudo]");
return 1;
}
if(giveplayerid == INVALID_PLAYER_ID)
{
SendClientMessage(playerid, COLOR_ERROR, "Ce joueur n'est pas connecté");
return 1;
}
if(giveplayerid == playerid)
{
SendClientMessage(playerid, COLOR_ERROR, "Vous ne pouvez pas utiliser cette commande sur vous-même");
return 1;
}
if(HasC4[playerid] == 0)
{
SendClientMessage(playerid,COLOR_ERROR,"Vous n'avez pas de C4");
return 1;
}
PROCESSUS COMMANDE
return 1;
}
Il y a une différence (en terme de rapidité par exemple) ou c'est exactement la même chose écrit différemment ?
-
Salut,
Je pense que les deux sont correctes et aussi efficaces. (Plus que strtok en tout cas :ninja)
Par contre, au niveau de la présentation, la 2 me semble plus claire à lire même si il est plus probable de commettre des étourderies (Certains préfèreront la 1 à condition que l'indentation soit parfaite). Enfin, c'est variable suivant les gens ;)
PS : Petit conseil, tu peux remplacer "COMMAND" par "CMD" si tu es un gros fainéant comme moi :)
++
-
Merci de ta réponse,
Enfaite moi je trouve la première plus simple car j'ai appris à codé comme sa à l'école mais s'est vrais que la 2eme est plus "claire" et peut être plus rapide mais pourquoi on met des "return 1;" partout ? C'est pour dire qu'on arrête l'exécution de la commande a se niveau ?
Et pourquoi ne pas utiliser "else if" comme cela :
<?php
COMMAND:donnerc4(playerid, params[])
{
if(IsSpawned[playerid] == 0)
{
SendClientMessage(playerid, COLOR_ERROR, "Vous êtes mort. Vous ne pouvez pas utiliser cette commande");
return 1;
}
new giveplayerid;
/*ICI=>*/else if (sscanf(params, "u", giveplayerid))
{
SendClientMessage(playerid, COLOR_ERROR, "Utilisation: /donnerc4 [ID ou pseudo]");
return 1;
}
/*ICI=>*/else if(giveplayerid == INVALID_PLAYER_ID)
{
SendClientMessage(playerid, COLOR_ERROR, "Ce joueur n'est pas connecté");
return 1;
}
/*ICI=>*/else if(giveplayerid == playerid)
{
SendClientMessage(playerid, COLOR_ERROR, "Vous ne pouvez pas utiliser cette commande sur vous-même");
return 1;
}
/*ICI=>*/else if(HasC4[playerid] == 0)
{
SendClientMessage(playerid,COLOR_ERROR,"Vous n'avez pas de C4");
return 1;
}
PROCESSUS COMMANDE
return 1;
}
?
-
L'instruction return permet de quitter une fonction en retournant une valeur pour indiquer l'état de celle ci par exemple, ou pour retourner une valeur bien précise.
-
Salut,
pour être franc, la première méthode est meilleure.
Un des critères de la programmation structuré, c'est que chaque fonction à une entrée et une sortie.
Bref, un seul return, pas des dizaines un peu partout dans la fonction.
++Sim++