• 29 Avril 2025, 20:24:10


Auteur Sujet: Commande ne s'éxecute pas  (Lu 969 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Jcvag44800

  • *
  • Grand Banditisme
  • Messages: 616
    • Voir le profil
Commande ne s'éxecute pas
« 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


Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Commande ne s'éxecute pas
« Réponse #1 le: 24 Octobre 2011, 15:57:50 »
Faudrait que tu donnes tout le contenu de ta callback OnPlayerCommandText



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Jcvag44800

  • *
  • Grand Banditisme
  • Messages: 616
    • Voir le profil
Re : Commande ne s'éxecute pas
« Réponse #2 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;
}


Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Commande ne s'éxecute pas
« Réponse #3 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

Hors ligne Jcvag44800

  • *
  • Grand Banditisme
  • Messages: 616
    • Voir le profil
Re : Commande ne s'éxecute pas
« Réponse #4 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