GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: ApocKalipsS le 25 Août 2009, 11:29:47
-
Bonjour,
Je souhaiterais que si un joueur tape une commande inconnue, il y est une action spéciale, plutôt que "Unkown Command".
Comment faire ?
Merci.
-
c'est a dire une action special ?
si tu veut juste une phrase
a la place du return 0;
Tu met ceci
return SendClientMessage(patati patata);
-
Ok, mais en fait ce que je veux dire c'est :
"La commande "/machintrucbidule" n'existe pas."
Donc je pense pas qu'il faut faire un retun à chaque commande.
-
non du tout
tu utilise un format
new wrongcmd[128];
format(wrongcmd, sizeof(wrongcmd), "desoler %s n'existe pas sur ce serveur", cmdtext);
return SendClientMessage(playerid,Blanc,wrongcmd);
voila a la place du return 0; a la fin de la callback OnPlayerCommandText
-
En fait je veux affichier un TextDraw, donc je fait comme çà :
OnPlayerCMDText
{
return truc=CreateTextDraw()
TextDrawFont(..)
etc..
}
C'est comme ceci ?
-
euh en TD ce serais plutot textdrawhideforplayer
car tu dois surement le creer avant et utiliser un string mais pense a le detruire sinon il resteras longtemps
-
J'ai pas bien compris...
Pour le Hide, je ferais un timer.
-
le mieux ce serais
return Wrongcmd(playerid);
Wrongcmd(playerid)
{
// le code de ton td avec le timer
}
-
J'ai réussi, merci à toi, Cristab ;)
Double post
Arf, j'ai un autre problème.
Voilà mon code :
return Wrongcmd(playerid);//Wrongcmd(playerid);
}// Fin de OnPlayerCMDtext
Il y a quelques commandes qui utilise l'action Wrongcmd alors que les commandes sont bonnes, comment ca se fait ?
J'ai aussi ce warning :
warning 209: function "Wrongcmd" should return a value
Elle présente la dernière accolade du public Wrongcmd.
-
tu peu me faire voir en gros ton Wrondcmd et les commande qui l'affiche or qu'elle existe c'est surement une histoire de return 1; dans la commande en question
-
public Wrongcmd(playerid)
{
if(hidetruc[playerid] == 0)
{
txt2 = TextDrawCreate(5.0, 400.0,Text_Minimap2);
TextDrawUseBox(txt2, 0);
TextDrawFont(txt2, 1);
TextDrawSetShadow(txt2,0);
TextDrawSetOutline(txt2,1);
TextDrawBackgroundColor(txt2,0x000000FF);
TextDrawColor(txt2,0xFFFFFFFF);
TextDrawShowForPlayer(playerid, txt2);
SetTimerEx("HideTextDraw2", 2500, false, "i", playerid);
SetTimerEx("HideTextDraw2", 4500, false, "i", playerid);
hidetruc[playerid] = 1;
}
}
-
essaie de lui ajouter un return 1;
-
Salut,
les callback doivent toujours retourner une valeur, ainsi ton OnPlayerCommandText doit se terminer avec un return, ici tu retourne la valeur de retour de ta fonction, or ta fonction ne retourne pas de valeur, bref tu doit faire comme Cristab l'a dit, ajouter un return
sinon tu peut toujours modifier ta façon d'utiliser la fonction de façon à ne pas en retourner la valeur mais une valeur "constante", retourner un nombre directement.
WrongCmd(playerid);
return 1;
de plus, tu devrais mettre en paramètre la commande faite par le joueur si tu désire un texte du genre :" La commande /allo n'existe pas."
j'ajouterais même que l'intérêt d'utiliser un TextDraw est plutôt limité, tu serais pratiquement mieux d'utiliser un simple SendClientMessage
++Sim++
-
J'ai rajouté un return aux deux, ca s'arrange mais c'est pas toujours ça :
On m'affichais avant un "Unknown Command" dans la chat box + le text draw, maintenant il n'y a que le text draw, mais seulement il s'affiche dans certaines commandes qui peuvent être bonne.
Peut être que...
Les commandes appellent une call back, qui est par la suite non retournée ?
-
sa se pourrais regarde qu'elle commande reagisse comme ceci est regarde les callback appeler verifie en meme temps que ta commande se compose d'un return 1;
-
Alors, voila moi on ma dis d'une autre façon, pour moi ça marche bien.
Aprés ton retun de fin de OnPlayerCommandText tu met:
else
{
SendClientMessage(playerid, Couleur_Rouge, "Commande Inconnue."); // Tu peut mettre autre chose...
SendClientMessage(playerid, Couleur_Rouge, "Tapez /aide pour voir les différentes commandes.");
return 1;
}
}
-
Ouais c' est une solution comme une autre, mais le return c' est mieu ;)
-
La technique que l'on ma donner dans les anciens posts marchent très bien. Il faut cepandant ne pas oublier de mettre un return 1; à la fin de chaque commande.
-
Ouais je pense que le probleme te viens d ici tu as dut mettre un return 0; dans une de tes commande =)