GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Jcvag44800 le 24 Octobre 2011, 15:55:37

Titre: Commande ne s'éxecute pas
Posté par: Jcvag44800 le 24 Octobre 2011, 15:55:37
Salut à tous =D

Voilà, ma commande ne s’exécute pas
La voici :

if(strcmp(cmdtext, "/exit", true) == 0)
 {
SendClientMessage(playerid,COLOR_RED,"rez");
if(PlayerInfo[playerid][pDM] == 1 || PlayerInfo[playerid][pDM] == 2)
{
new randSpawn = 0;
....
...
..
.

Je ne sais pas du tout pourquoi elle ne s’exécute pas
J'ai même mis un SendClientMessage pour voir si on rentre dans la commande quand on la tape, apparament non
Peut être un problème de return mal mis ou oublié ?

Cordialement
Titre: Re : Commande ne s'éxecute pas
Posté par: Ssk le 24 Octobre 2011, 15:57:50
Faudrait que tu donnes tout le contenu de ta callback OnPlayerCommandText
Titre: Re : Commande ne s'éxecute pas
Posté par: Jcvag44800 le 24 Octobre 2011, 16:21:00
public OnPlayerCommandText(playerid, cmdtext[])
{
 if(strcmp(cmdtext, "/dm", true) == 0)
 {
if(PlayerInfo[playerid][pDM] == 1 && PlayerInfo[playerid][pDM] == 2)
{
SendClientMessage(playerid,COLOR_RED,"Vous êtes déjà dans un DM");
}
    ShowPlayerDialog(playerid, 3, DIALOG_STYLE_LIST, "Terrain de DeathMatch", "DeathMatch 1\nDeathMatch 2", "Aller", "Sortir");
    return 1;
 }
 if(strcmp(cmdtext, "/exit", true) == 0)
 {
SendClientMessage(playerid,COLOR_RED,"rez");
if(PlayerInfo[playerid][pDM] == 1 || PlayerInfo[playerid][pDM] == 2)
{
new randSpawn = 0;

  SetPlayerInterior(playerid,0);
TogglePlayerClock(playerid,0);
gPlayerHasCitySelected[playerid] = 0;
SetPlayerVirtualWorld(playerid, 1);
PlayerInfo[playerid][pDM] = 0;
if(CITY_LOS_SANTOS == gPlayerCitySelection[playerid])
{
       randSpawn = random(sizeof(gRandomSpawns_LosSantos));
       SetPlayerPos(playerid,
gRandomSpawns_LosSantos[randSpawn][0],
gRandomSpawns_LosSantos[randSpawn][1],
gRandomSpawns_LosSantos[randSpawn][2]);
SetPlayerFacingAngle(playerid,gRandomSpawns_LosSantos[randSpawn][3]);
  }
     else if(CITY_SAN_FIERRO == gPlayerCitySelection[playerid])
{
       randSpawn = random(sizeof(gRandomSpawns_SanFierro));
       SetPlayerPos(playerid,
gRandomSpawns_SanFierro[randSpawn][0],
gRandomSpawns_SanFierro[randSpawn][1],
gRandomSpawns_SanFierro[randSpawn][2]);
SetPlayerFacingAngle(playerid,gRandomSpawns_SanFierro[randSpawn][3]);
}
else if(CITY_LAS_VENTURAS == gPlayerCitySelection[playerid])
{
       randSpawn = random(sizeof(gRandomSpawns_LasVenturas));
       SetPlayerPos(playerid,
gRandomSpawns_LasVenturas[randSpawn][0],
gRandomSpawns_LasVenturas[randSpawn][1],
gRandomSpawns_LasVenturas[randSpawn][2]);
SetPlayerFacingAngle(playerid,gRandomSpawns_LasVenturas[randSpawn][3]);
}
return 1;
}
else
{
SendClientMessage(playerid,COLOR_RED,"Vous n'êtes pas dans un deathmatch !");
return 1;
}
 }
return 1;
}
Titre: Re : Commande ne s'éxecute pas
Posté par: Xartrick le 26 Octobre 2011, 01:45:02
Pour commencer, la fonction évènementielle OnPlayerCommandText doit retourné 0 en dernière instruction.
Ensuite, pour les comparaison de chaîne de caractères, il est impossible qu'une même chaîne de caractères soit égal à a et à b quand a est différent de b donc le mieux et de faire un block avec des else if plutôt que d'enchaîner des tests inutiles constamment.
Ainsi, avec cette technique, tu pourra voir ce qui cloche, en utilisant un else.
Maintenant, une petite astuce pour ta condition.


if(PlayerInfo[playerid][pDM] == 1 || PlayerInfo[playerid][pDM] == 2)
Si j'ai bien compris, quand cette variable est à zéro, le joueur n'est pas dans un deathmatch mais si elle est différente de zéro, la valeur de la variable correspond à l'indice du deathmatch.
Si cela est le cas, la condition peut être très sensiblement réduite.
Il faut savoir qu'une condition réagi seulement à deux valeurs, vrai et faux.
Tous nombre non-nul est vrai.

Le code suivant est donc juste pour notre utilisation.


if (PlayerInfo[playerid][pDM])
J'ai rangé et optimisé légèrement le code pour pouvoir mieux travailler, tu devrais faire de même, ce qui nous donne le code suivant.

Pastebin GTAOnline.fr - Outil de collaboration dans le développement (http://pastebin.gtaonline.fr/pastebin.php?show=1166)
Titre: Re : Commande ne s'éxecute pas
Posté par: Jcvag44800 le 26 Octobre 2011, 12:00:08
Merci, c'était réglé enfaite, désolé

Erreur très bête,
Il existait déjà une commande /exit ( pour sortir des bâtiments )
Alors, quand je faisais /exit à l’extérieur, ça ne renvoyais rien, je croyais que c'était donc ma commande  :bangin