GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: maxya le 21 Juillet 2014, 06:42:03
-
Salut,
J'essaye de crée une petite commande qui crée un véhicule et qui mets le joueur dedans:
new gPlayerVehicle[MAX_PLAYERS];
new Float:px, Float:py, Float:pz;
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/nrg", cmdtext, true, 10) == 0)
{
GetPlayerPos(playerid, px, py, pz);
gPlayerVehicle[playerid] = CreateVehicle(522, px, py, pz, 82.2873, 0, 1, 60);
PutPlayerInVehicle(playerid, gPlayerVehicle[playerid], 0);
return 1;
}
return 0;
}
Et pourtant ça ne marche pas (Unknow command) ! Je pense que je vais devenir fou .
Merci de votre aide,
Cordialement,
-
Bonjour,
Pour commencer, tu n'es pas obligé d'utiliser des variables globales pour ce que tu souhaites faire. Les variables créées dans une callback sont locales et ne sont pas réutilisées (à moins d'être statiques).
Ensuite, le quatrième paramètre de la fonction strcmp() est la taille de la chaîne à comparer. Tu utilises une taille de 10, or 4 semble plus adéquat pour cette commande (car /nrg est composée de quatre caractères, en comptant le /).
Voici donc une version corrigée de la callback. Je code ça directement sur le forum, il se peut donc que ça ne compile pas du premier coup (ne m'en veux pas !).
// Lorsqu'un joueur utilise une commande
public OnPlayerCommandText(playerid, cmdtext[])
{
// Si la commande utilisée correspond à "/nrg"
if (strcmp("/nrg", cmdtext, true, 4) == 0)
{
// On crée les variables locales nécessaires à la commande
new fPosX = 0.0, fPosY = 0.0, fPosZ = 0.0, fPosAngle = 0.0;
new iVehicleID = 0;
// On récupère les informations nécessaires (positions X, Y et Z, puis l'angle)
GetPlayerPos(playerid, fPosX, fPosY, fPosZ);
GetPlayerFacingAngle(playerid, fPosAngle);
// On crée le véhicule et on récupère son ID, puis on place le joueur dedans
iVehicleID = CreateVehicle(522, fPosX, fPosY, fPosZ, fPosAngle, 0, 1, 60);
PutPlayerInVehicle(playerid, iVehicleID, 0);
// On retourne "true" (1) pour indiquer que les instructions sont terminées
return 1;
}
// On retourne "false" (0) si la commande est différente de "/nrg" ou des autres commandes proposées
return 0;
}
En espérant t'avoir aidé,
Bonne journée.
-
Merci de ton aide, j'ai utilisé ton code mais j'ai toujours cette Unknow Command je suis vraiment perdu là et je suis sur que le problème ne viens pas du code:
mon server.cfg
echo Executing Server Config...
lanmode 0
rcon_password test2
maxplayers 50
port 7777
hostname SA-MP 0.3 Server
gamemode0 test 1
filterscripts gl_actions gl_realtime gl_property gl_mapicon ls_mall ls_elevator attachments skinchanger vspawner
plugins sscanf
announce 0
query 1
chatlogging 0
weburl [url=http://www.sa-mp.com]www.sa-mp.com[/url]
onfoot_rate 40
incar_rate 40
weapon_rate 40
stream_distance 300.0
stream_rate 1000
maxnpc 0
logtimeformat [%H:%M:%S]
J'utilise aussi zcmd et sscanf donc cela pourrais t-il avoir un impact sur la commande ?
Merci de votre aide,
Cordialement,
-
Oui, tu ne peux pas utiliser la méthode ZCMD + la méthode "traditionnelle" ça engendre des conflits ;)
-
Oui, tu ne peux pas utiliser la méthode ZCMD + la méthode "traditionnelle" ça engendre des conflits ;)
Où tu vois qu'il utilise zCMD ?
maxya, vérifies que tu n'as pas d'autres callbacks dans ton gamemode qui font la même chose que OnPlayerCommandText. Dans la mesure du possible, montres-nous tout ton code.
-
Gzsume dans mon GM j'utilise zcmd donc je pense que c'est ca qui crée un conflit, donc je vais crée la commande avec zcmd puis je vous dit si sa marche ou pas ;) .
-
Voila j'ai enlever zcmd + sscanf, mais maintenant sa me fais le truc de stay within the world boundaries et le jeu bug .
PS: désolé du DP .
-
Remplaces
new fPosX = 0.0, fPosY = 0.0, fPosZ = 0.0, fPosAngle = 0.0;
Par
new float:fPosX = 0.0, float:fPosY = 0.0, float:fPosZ = 0.0, float:fPosAngle = 0.0;
Dans mon code. Petit oubli de ma part.
-
Cool merci maintenant sa marche :) . mais en quoi ajouter un tag va modifier le fonctionnement de toute cette commande ? Je pensais que les tags c'est facultatif .
-
Où tu vois qu'il utilise zCMD ?
J'utilise aussi zcmd et sscanf donc cela pourrais t-il avoir un impact sur la commande ?
Merci de votre aide,
Cordialement,
-
Au temps pour moi. :wink:
Les tags ne sont pas facultatifs. Ne pas indiquer que la donnée reçue est un nombre à virgule peut, de manière logique, compromettre la précision de la téléportation sur ces valeurs.
-
Dans ce cas, les variables ne sont pas du même type.
-
Merci j'ai vraiment beaucoup appris avec le problème de cette simple commande maintenant je vais toujours mettre les tags .
Sujet résolu !
-
Juste comme ça, mais ça vous donne pas de warning quand vous ne mettez pas le tag ??
-
Si, mais ça n'empêche pas la compilation.
-
Bah voilà, si y'a un warning avec un tag mismatch c'est qu'il y a un problème et donc ça peut générer des dysfonctionnements ;)
-
ouai ce tag mismatch me faisait vraiment ragé, mais maintenant j'utilise toujours les tags ;) .