GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: TheDriver le 22 Octobre 2006, 21:57:13
-
Bonsoir à tous,
Voilà, je décris mon problème :
J'ai un script puis un filterscript. Quand je mets les deux en route, aucunes des commandes dans le script ne sont opérationelles mais les commandes dans le filterscript marchent très bien. En revanche, quand je désactive le filterscript, les commandes dans le script marchent parfaitement. On dirait qu'il y a une sorte de blocage de la part du filterscript qui empêche les commandes du script de s'exécuter.
Voici les bouts de scripts :
Dans le script (pour les joueurs):
//=================================Commandes====================================
public OnPlayerCommandText(playerid,cmdtext[],const str[],define)
{
new string[256];
//-----Si le joueur se retrouve en prison
if (strcmp(cmdtext,"/getpara", true)==0 ||
strcmp(cmdtext,"/gotols", true)==0 ||
strcmp(cmdtext,"/gotosf", true)==0 ||
strcmp(cmdtext,"/gotolv", true)==0 )
{
if (Jailed[playerid] == 1)
{
}
}
//-----Aide
if (strcmp(cmdtext,"/help",true)==0)
{
SendClientMessage(playerid, COLOR_WHITE,"Tapez /rules pour afficher les règles du serveur,");
SendClientMessage(playerid, COLOR_WHITE,"Tapez /cmd pour afficher la série des commandes,");
SendClientMessage(playerid, COLOR_WHITE,"Tapez /racescmd1 pour afficher la première série des commandes des courses,");
SendClientMessage(playerid, COLOR_WHITE,"Tapez /racescmd2 pour afficher la seconde série des commandes des courses.");
return 1;
}
Dans le filterscript (admins) :
//=================================Commandes====================================
public OnPlayerCommandText(playerid,cmdtext[],const str[],define)
{
new command[256],index;
command = strtok(cmdtext,index);
new Float:x,Float:y,Float:z;
new name[MAX_PLAYER_NAME];
new Temp[256];
new String[256];
new StringFile[256];
//-----Commandes admins
if (strcmp(cmdtext, "/admincmd1", true)==0)
{
if (IsPlayerAdmin(playerid))
{
SendClientMessage(playerid,COLOR_WHITE,"/adminskin1 (2, 3 ou 4) pour changer de skin,");
SendClientMessage(playerid,COLOR_WHITE,"/gotoadmins pour vous téléporter chez les admins,");
SendClientMessage(playerid,COLOR_WHITE,"/midnight pour changer l'heure à minuit,");
SendClientMessage(playerid,COLOR_WHITE,"/midday pour changer l'heure à midi,");
SendClientMessage(playerid,COLOR_WHITE,"/18hours (ou quelconque heure) pour changer l'heure.");
}
return 1;
}
Voilà, j'éspère que vous comprenez mon problème et que vous saurez le résoudre.
Merci.
Bye
-
Ba je sais pas vraiment, je demanderais à des pro coders à l'occase, mais je pense que quand il y a deux fois l'evemment ca bug...
En plus tu as un evénnement spécial que tu as modifier puisque l'original ressemble à ca : public OnPlayerCommandText(playerid, cmdtext[]) {
Met tout dans un seul fichier ou change la facon d'appeler l'évenement..
PS : irc.gtanet.com/sa-mp.scripting
-
(Je sais que c'est une heure assez tardive pour poster mais demain je prends plus tard :P)
Donc, revenons à nos moutons, j'ai essayé plusieurs choses notamment :
public OnPlayerCommandText(playerid, cmdtext[])
{
Mes commandes
Mes actions
}
(il s'agit ici de l'évenemment d'origine que j'ai placé dans les deux scripts).
Le problème venait en fait de la valeur du return (qui était fausse car elle était égale à 1) à la fin de l'évenement "public OnPlayerCommandText".
Il faut donc mettre :
return 0;
Voilà, donc je te remercie spy de ta réponse. Par contre j'ai une autre question, j'ai jamais trop sû à quoi ça sert les return ?? (d'où mon erreur).
-
Je sais pas trop expliquer correctement. Pour moi cela signfie que la fonction en cours est terminé et que le script pour retourner au stade précédent
Ce serait donc pour dire la fin d'un truc.
Return 1; pour montrer la fin d'une commande
Return 0; pour montrer la fin d'une "partie" public
Voila, c'est dur a expliquer :s