• 04 Juin 2026, 21:05:42


Auteur Sujet: [RESOLU] bug commande spawn véhicule  (Lu 6509 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne xrf22

  • *
  • Criminel
  • Messages: 27
    • Voir le profil
[RESOLU] bug commande spawn véhicule
« le: 29 Juin 2010, 20:02:56 »
Bonjour à tous !

J' ai décidé de me faire un GM mais bon étant débutant, je commence fort mais bon, c' est la seule chose dont je pourrais être fière xD

Alors, j' ai voulu faire une commande de spawn de véhicule seulement, ça bug, ça me marque unknow command quand je rentre l' ID et ça me marque "ID Invalide" quand je marque juste "/vspawn" au lieu de marquer "/vspawn [ID du véhicule]"

Voici le code :
//Commande vspawn vehicule spawn
    if (strcmp("/vspawn", cmdtext, true, 10) == 0)
        {
new vehiculeid, idx;

if(strlen(strtok(cmdtext, idx)) == 0) {
SendClientMessage(playerid, COLOR_RED, "UTILISATION: /vspawn [ID Véhicule] (pour savoir les ID des voitures, tappez /vid)");
return 1;
}
vehiculeid = strval(strtok(cmdtext, idx));

if (vehiculeid >= 400 && vehiculeid <= 611) {
new Float:X,Float:Y,Float:Z,Float:Angle;
new vid;

vehiculeid = strval(strtok(cmdtext, idx));
GetPlayerPos(playerid,X,Y,Z);
GetPlayerFacingAngle(playerid,Angle);
vid = CreateVehicle(vehiculeid,X,Y,Z,Angle,-1,-1,86400000);
PutPlayerInVehicle(playerid,vid,0);
TogglePlayerControllable(playerid,1);
if(GetPlayerInterior(playerid)) LinkVehicleToInterior(vid,GetPlayerInterior(playerid));
SetVehicleVirtualWorld(vid,GetPlayerVirtualWorld(playerid));
}
else
{
SendClientMessage(playerid, COLOR_RED, "ID Invalide.");
}
return 1;
}

Je n' arrive pas à trouver d' où viennent les erreurs =/


Merci d' avance !
« Modifié: 05 Juillet 2010, 11:27:03 par xrf22 »

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #1 le: 29 Juin 2010, 21:25:40 »
Salut :)

if (strcmp("/vspawn", cmdtext, true, 10) == 0)
 remplace par

if(strcmp(cmdtext, "/vspawn", true) == 0)

la vérification de la commande que toi tu utilise est plus utiliser dans les FS. Donne moi des nouvelles ;)


A+ Sam.

Hors ligne xrf22

  • *
  • Criminel
  • Messages: 27
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #2 le: 29 Juin 2010, 21:32:57 »
En faites, je suis désolé mais j' aurais du mieux cibler l' erreur ^^

Ce n' est pas cette ligne qui bug (celon moi)
Voici l' erreur ciblé :
new vehiculeid, idx;

if(strlen(strtok(cmdtext, idx)) == 0) {
SendClientMessage(playerid, COLOR_RED, "UTILISATION: /vspawn [ID Véhicule] (pour savoir les ID des voitures, tappez /vid)");
return 1;
}
vehiculeid = strval(strtok(cmdtext, idx));

if (vehiculeid >= 400 && vehiculeid <= 611) {
new Float:X,Float:Y,Float:Z,Float:Angle;
new vid;

vehiculeid = strval(strtok(cmdtext, idx));
GetPlayerPos(playerid,X,Y,Z);
GetPlayerFacingAngle(playerid,Angle);
vid = CreateVehicle(vehiculeid,X,Y,Z,Angle,-1,-1,86400000);
PutPlayerInVehicle(playerid,vid,0);
TogglePlayerControllable(playerid,1);
if(GetPlayerInterior(playerid)) LinkVehicleToInterior(vid,GetPlayerInterior(playerid));
SetVehicleVirtualWorld(vid,GetPlayerVirtualWorld(playerid));
}

Lorsque j' écris "/vspawn" dans le tchat, ça me répond "ID Invalide" au lieu de "UTILISATION: /vspawn [ID Véhicule] (pour savoir les ID des voitures, tappez /vid)"

Et lorsque j' écris la bonne syntaxe avec un ID valide ou invalide, cela m' écrit "Unknow command" (commande inconnue)

Donc voilà =]

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #3 le: 29 Juin 2010, 21:34:58 »
Oui, change la ligne et essaie s'il te plait ;)

Hors ligne xrf22

  • *
  • Criminel
  • Messages: 27
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #4 le: 29 Juin 2010, 21:44:28 »
Toujours pareil

toujours le même bug

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #5 le: 29 Juin 2010, 21:48:58 »
Alors remplace

if(strlen(strtok(cmdtext, idx)) == 0) {
      SendClientMessage(playerid, COLOR_RED, "UTILISATION: /vspawn [ID Véhicule] (pour savoir les ID des voitures, tappez /vid)");
      return 1;
      }
par

tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_RED, "UTILISATION: /vspawn [ID Véhicule] (pour savoir les ID des voitures, tappez /vid)"); return 1; }

Hors ligne xrf22

  • *
  • Criminel
  • Messages: 27
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #6 le: 29 Juin 2010, 22:24:23 »
Voici les erreurs obtenus : (en commentaires)
Comme je suis débutant, je ne me sens pas encore prêt à affronté les erreurs que j' ai du mal à comprendre seuls ^^ (surtout sans le wiki de samp même si le cache de google existe)


new tmp, vehiculeid, idx;

tmp = strtok(cmdtext, idx); //(138) : error 006: must be assigned to an array     ||   (138) : warning 204: symbol is assigned a value that is never used: "tmp"
if(!strlen(tmp)) //(139) : error 035: argument type mismatch (argument 1)
{
SendClientMessage(playerid, COLOR_RED, "UTILISATION: /vspawn [ID Véhicule] (pour savoir les ID des voitures, tappez /vid)");
return 1;
}

Enfin, avec mes compétences en programmation en d' autres langages, l' erreur de la ligne 138 engendre l' erreur de la ligne 139 car on utilise la variable tmp dans la ligne 139 qui engendre encore la troisième erreur qui dit que la variable n' est pas utilisé !

Donc si je ne me trompe faut régler l' erreur 006 de la ligne 138 ...
Seulement, je n' en ai aucune idée de comment ...

Merci d' avance de l' aide !

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #7 le: 29 Juin 2010, 22:28:41 »
Must be indexed in a array soit array = tableau donc il doit être déclarer dans un tableau donc new tmp[128]; ;)

Hors ligne xrf22

  • *
  • Criminel
  • Messages: 27
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #8 le: 29 Juin 2010, 22:33:04 »
Ah c' est ça un tableau en pawn !!!!

Pfiou, je m' imaginais un truc horrible =/

J' essaie et je dis des nouvelles juste après !

Merci ^^

Double post
Bon bah non, toujours le même bug :

Lorsque j' écris "/vspawn" dans le tchat, ça me répond "ID Invalide" au lieu de "UTILISATION: /vspawn [ID Véhicule] (pour savoir les ID des voitures, tappez /vid)"

Et lorsque j' écris la bonne syntaxe avec un ID valide ou invalide, cela m' écrit "Unknow command" (commande inconnue)
« Modifié: 29 Juin 2010, 22:36:31 par xrf22 »

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #9 le: 30 Juin 2010, 00:23:25 »
Ah ben au moins tu as réparé des bugs sans le savoir ;)

Mais perso j'aime pas trop ta commande avec les strval etc.. sa cloche mais j'sais pas ^^

vehiculeid = strval(strtok(cmdtext, idx)); comme sa pas courant Oo

met tout simplement  strval(tmp);
puisque le tmp = strtok(cmdtext, idx);

pour sa me semble bizarre, ta sortie sa d'un FS et claqué comme sa dans le GM ? :)

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #10 le: 30 Juin 2010, 01:18:50 »
Salut,

chneubeul tu as raison sur ce qui doit être fait
mais pas sur la raison

en fait strtok te sortira un truc différent l'appel suivant.
pourquoi?

le premier strtok débute à l'index 0 (donc au début) et te sort le /vspawn. or la valeur de idx est modifié par la fonction, elle passera à 8 (je crois). Soit la première lettre/chiffre suivant l'espace après /vspawn.
Par la suite tu fais un second appel pour récupérer le modèle. Ce que tu obtient (ensuite idx est placé quelques caractères plus loin) avec le tmp = strtok.
Donc, si tu veut savoir si le joueur n'as pas entré de paramètre tu fais le test if(strlen(tmp) == 0) (tu peut aussi utiliser le define isnull que l'on trouvais sur le forum sa-mp et que je peut te recomposer si besoin...).
Par la suite, tu veut toujours travailler avec cette même valeur, si tu appèle de nouveau strtok ce ne sera pas le bon texte qu'il te sortira (un texte vide en fait comme il ne devrait plus rien avoir après le modèle). Il te faut utiliser le texte que tu avais préalablement stocké dans la variable tmp. Donc, strval(tmp)

bonne chance, si quelqu'un désire des précisions supplémentaires, n'hésitez pas à le demander.

NB. idx est ici utilisé un peu comme un pointeur, il indique à quel endroit dans le texte nous sommes rendus à séparer.

++Sim++





Hors ligne xrf22

  • *
  • Criminel
  • Messages: 27
    • Voir le profil
Re : Re : bug commande spawn véhicule
« Réponse #11 le: 30 Juin 2010, 10:24:39 »
Ah ben au moins tu as réparé des bugs sans le savoir ;)

Mais perso j'aime pas trop ta commande avec les strval etc.. sa cloche mais j'sais pas ^^

vehiculeid = strval(strtok(cmdtext, idx)); comme sa pas courant Oo

met tout simplement  strval(tmp);
puisque le tmp = strtok(cmdtext, idx);

pour sa me semble bizarre, ta sortie sa d'un FS et claqué comme sa dans le GM ? :)

Non, j' ai fais la commande moi même, j' avais mis des variables mais comme je n' avais pas fais de tableau, ça ne marchait alors j' avais enlevé les variables

Citer
Salut,

chneubeul tu as raison sur ce qui doit être fait
mais pas sur la raison

en fait strtok te sortira un truc différent l'appel suivant.
pourquoi?

le premier strtok débute à l'index 0 (donc au début) et te sort le /vspawn. or la valeur de idx est modifié par la fonction, elle passera à 8 (je crois). Soit la première lettre/chiffre suivant l'espace après /vspawn.
Par la suite tu fais un second appel pour récupérer le modèle. Ce que tu obtient (ensuite idx est placé quelques caractères plus loin) avec le tmp = strtok.
Donc, si tu veut savoir si le joueur n'as pas entré de paramètre tu fais le test if(strlen(tmp) == 0) (tu peut aussi utiliser le define isnull que l'on trouvais sur le forum sa-mp et que je peut te recomposer si besoin...).
Par la suite, tu veut toujours travailler avec cette même valeur, si tu appèle de nouveau strtok ce ne sera pas le bon texte qu'il te sortira (un texte vide en fait comme il ne devrait plus rien avoir après le modèle). Il te faut utiliser le texte que tu avais préalablement stocké dans la variable tmp. Donc, strval(tmp)

bonne chance, si quelqu'un désire des précisions supplémentaires, n'hésitez pas à le demander.

NB. idx est ici utilisé un peu comme un pointeur, il indique à quel endroit dans le texte nous sommes rendus à séparer.

++Sim++

Merci !
Je vais médité ce que tu m' as dis =]
Pour la fonction isnull, je la retrouverais bien dans le cache google avec un peu de recherche ^^

Mais juste parce que ça ne retourne pas la bonne valeur, ça me renvoie "unknow command" ?

Double post
J' ai trouvé où est-ce que ça bug    :cop

C' est lors du strtok, ça ne fonctionne pas

Car dès que je commence à mettre un espace, la commande devient invalide donc cela prouve que il ne regarde pas après l' espace =]
Et lorsque je ne met pas d' espace, comme le strtok ne fonctionne pas, il passe direct au else{}

Le bug de merde vient de là dedans :
//Commande vspawn vehicule spawn
    if(strcmp(cmdtext, "/vspawn", true) == 0)
        {
new tmp[128], vehiculeid, idx;
tmp = strtok(cmdtext, idx);

Par contre, sur ce coup, je ne sais pas d' où ça vient ...
Donc là, je suis obligé de vous laisser corriger =/
« Modifié: 30 Juin 2010, 11:15:49 par xrf22 »

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #12 le: 30 Juin 2010, 11:45:13 »
héhé exactement Sim !  :king
Ouais j'avais pas trop compris le truc des commandes enfaites donc j'essayer d'aider mais bon.. ^^

Pour toi euh.. xrf22 ^^
envoie nous ton strtok stp

Hors ligne xrf22

  • *
  • Criminel
  • Messages: 27
    • Voir le profil
Re : Re : bug commande spawn véhicule
« Réponse #13 le: 30 Juin 2010, 12:22:00 »
héhé exactement Sim !  :king
Ouais j'avais pas trop compris le truc des commandes enfaites donc j'essayer d'aider mais bon.. ^^

Quand on sait pas on se ... xD
Non je rigole lol
c' est l' intention qui compte ;)

envoie nous ton strtok stp

strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}

new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}


voici voilou, je l' ai mit dans a_samp.inc
Car je n' en voulais pas dans mon code ^^

Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : bug commande spawn véhicule
« Réponse #14 le: 30 Juin 2010, 12:40:47 »
Ton strtok il est bon, la je vois pas du tout comme sa ^^ Re met ton code mis à jour avec ce que je t'avais dit précédemment stp :)