GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: scott1 le 22 Décembre 2009, 16:20:37
-
Bonjour a tous,
J'essaye depuis un bon moment a faire fonctionné une satanée commande, mais je n'y arrive toujours pas. Je viens donc quérir votre aide.
Voici la fameuse commande
if(!strcmp(cmdtext, "/localiservehicule", true) || !strcmp(cmdtext, "/lve", true))
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pPnumber] != 0)
{
GetPlayerName(playerid, sendername, sizeof(sendername));
new gPlayerCheckpointStatus2[MAX_PLAYERS];
if(gPlayerCheckpointStatus2[playerid] != CHECKPOINT_CAR)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_WHITE, "|__________________ Tracer __________________|");
SendClientMessage(playerid, COLOR_WHITE, "USAGE: /lve [numero]");
SendClientMessage(playerid, COLOR_WHITE, "Numeros Disponibles: 1, 2, 3");
SendClientMessage(playerid, COLOR_WHITE, "|____________________________________________|");
return 1;
}
new item = strval(tmp);
if (item == 1)
{
if(PlayerInfo[playerid][pPcarkey] != 999)
{
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USECELLPHONE);
format(string,sizeof(string),"** %s sort son telephone.",sendername);
ProxDetector(15.0,playerid,string,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
Wait(5000);
SendClientMessage(playerid,COLOR_WHITE,"On-Star: Ici On Star comment puis je vous aidez?");
Wait(2000);
format(string,sizeof(string),"%s dit (telephone): Je voudrais savoir où est mon véhicule", sendername);
ProxDetector(15.0,playerid,string,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
Wait(2000);
SendClientMessage(playerid,COLOR_WHITE,"On-Star: D'accord Mr, Puis je avoir le numéro de plaque?");
Wait(2000);
format(string,sizeof(string),"%s tappe la plaque d'immatriculation sur son telephone",sendername);
ProxDetector(15.0,playerid,string,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
Wait(2000);
SendClientMessage(playerid,COLOR_WHITE,"On-Star: D'accord Mr, l'emplacement de votre véhicule est en train d'être chargé sur votre telephone.");
Wait(500);
SendClientMessage(playerid,COLOR_WHITE,"On-Star: Si vous voulez arreter de localiser votre véhicule, appeler ce numero une deuxieme fois");
Wait(500);
SetPlayerCheckpoint(playerid,CarInfo[PlayerInfo[playerid][pPcarkey]][cLocationx], CarInfo[PlayerInfo[playerid][pPcarkey]][cLocationy], CarInfo[PlayerInfo[playerid][pPcarkey]][cLocationz], 5.0);
gPlayerCheckpointStatus2[playerid] = CHECKPOINT_CAR;
return 1;
}
else
{
SendClientMessage(playerid,COLOR_WHITE,"Vous n'avez pas de véhicule dans ce slot.");
return 1;
}
}
else if (item == 2)
{
....
}
}
return 1;
}
else
{
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USECELLPHONE);
Wait(1000);
SendClientMessage(playerid,COLOR_WHITE,"La localisation de votre véhicule à été annulé.");
return 1;
}
}
else
{
SendClientMessage(playerid,COLOR_WHITE,"Vous n'avez pas de telephone.");
return 1;
}
}
else
{
GameTextForPlayer(playerid, "~w~Vous n'avez pas de vehicule a localiser", 5000, 1);
return 1;
}
}
Mais en jeux a chaque fois que je fait /lve 1 ou 2 il me dit commande inconnue.
Merci d'avance
-
Essaye
if(strcmp(cmdtext,"/localiservehicule",true)==0 || strcmp(cmdtext, "/lve", true)==0)
-
C'est exactement la meme chose minimicro ;)
-
Oui Même chose :/
-
C'est un "commande inconnue" ou un "Unknown Command" que tu as ?
Et si tu remplace le contenu de la commande par un truc basique, juste un SendClientMessage par exemple ?
-
commande inconnue
-
A première vu il manque un return 1 entre les deux dernière accolade ;)
-
j'en ai mis un après le 3eme.
-
Une chose est sure, ton erreur provient de la ligne :
if(PlayerInfo[playerid][pPnumber] != 0)
Mais je n'arrive pas à voir ce qui cloche.
-
J'ai trouvé, c'est au niveau de la focntion strcmp (je le savais bien ^^).
Tu lui fait comparer CMDTEXT, et "/lve" par exemple, sauf que, CMDTEXT, c'est directement ce que tape le joueur lorsque qu'il entre une commande ... (regarde dans les arguments de OnPlayerCommandText(playerid, cmdtext[]) ...)
Donc, lorsque le joueur tape /lve, tout va bien, la commande est bien trouvée, sauf que quand il tape /lve 1, strcmp cherche a comparer "/lve 1" et "/lve" , qui n'est donc pas la même commande, donc il arrive en bas du CallBack, et te renvoit "Commande Inconnue"
Solution :
- Cherche, au début du CB OnPlayerCommandText, une ligne de type cmd = strtok(cmdtext, idx); qui extrait dans cmd tout ce qui a été tapé par le joueur (dans cmdtext) avant le premier espace ... Ainsi, tu remplacera if(strcmp(cmdtext,"/localiservehicule",true) || !strcmp(cmdtext, "/lve", true)) par if(!strcmp(cmd,"/localiservehicule",true) || !strcmp(cmd, "/lve", true))
Verifie dans tes autres commandes, je suis sur que c'est comme ca (dans la plupart des GM)