GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: xrf22 le 29 Juin 2010, 20:02:56

Titre: [RESOLU] bug commande spawn véhicule
Posté par: xrf22 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 !
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul 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.
Titre: Re : bug commande spawn véhicule
Posté par: xrf22 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à =]
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul le 29 Juin 2010, 21:34:58
Oui, change la ligne et essaie s'il te plait ;)
Titre: Re : bug commande spawn véhicule
Posté par: xrf22 le 29 Juin 2010, 21:44:28
Toujours pareil

toujours le même bug
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul 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; }
Titre: Re : bug commande spawn véhicule
Posté par: xrf22 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 !
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul 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]; ;)
Titre: Re : bug commande spawn véhicule
Posté par: xrf22 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)
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul 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 ? :)
Titre: Re : bug commande spawn véhicule
Posté par: S!m 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++
Titre: Re : Re : bug commande spawn véhicule
Posté par: xrf22 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 =/
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul 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
Titre: Re : Re : bug commande spawn véhicule
Posté par: xrf22 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 ^^
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul 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 :)
Titre: Re : bug commande spawn véhicule
Posté par: xrf22 le 30 Juin 2010, 12:42:18
Oui chef !
//Commande vspawn vehicule spawn
    if(strcmp(cmdtext, "/vspawn", true) == 0)
        {
new tmp[128], vehiculeid, idx;
tmp = strtok(cmdtext, idx);
if(strlen(tmp) == 0)
{
SendClientMessage(playerid, COLOR_RED, "UTILISATION: /vspawn [ID Véhicule] (pour savoir les ID des voitures, tappez /vid)");

}
vehiculeid = strval(tmp);
if (vehiculeid >= 400 && vehiculeid <= 611) {
new Float:X,Float:Y,Float:Z,Float:Angle;
new vid;
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;
}
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul le 30 Juin 2010, 13:00:35
Remplace

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

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

Derien mousse ! x'P
Titre: Re : bug commande spawn véhicule
Posté par: xrf22 le 30 Juin 2010, 13:27:22
Le bug est toujours là  :lmao
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul le 30 Juin 2010, 18:04:57
 :wall
Go pendre le script ^^ Sérieux j'vois pas trop ^^ hééé, desfois sa vien d'une commande du dessus ou quoi essaye d'inverser les ordres de ta commande pour si c'est vraiment elle qui bug
Titre: Re : Re : bug commande spawn véhicule
Posté par: xrf22 le 30 Juin 2010, 18:42:08
:wall
Go pendre le script ^^ Sérieux j'vois pas trop ^^ hééé, desfois sa vien d'une commande du dessus ou quoi essaye d'inverser les ordres de ta commande pour si c'est vraiment elle qui bug

Par où j' accroche la corde ?  ;D
Je pense que tirer dedans serait plus pratique ^^  :snip

Bon autrement j' ai essayé de changer l' ordre sans trop m' attendre à un résultats car j' ai fais d' autres commandes après et avant, et elle marche nikel ^^

Mais toujours le même bug :P

Et autrement, t' aurais pas un script tout fait ? ^^
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul le 30 Juin 2010, 18:45:00
Ben si x'D
new VehicleName[212][64] = {
   "Landstalker","Bravura","Buffalo","Linerunner","Pereniel","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana",
   "Infernus","Voodoo","Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat",
   "Mr Whoopee","BF Injection","Hunter","Premier","Enforcer","Securicar","Banshee","Predator","Bus","Rhino","Barracks","Hotknife",
   "Trailer","Previon","Coach","Cabbie","Stallion","Rumpo","RC Bandit","Romero","Packer","Monster Truck","Admiral","Squalo",
   "Seasparrow","Pizzaboy","Tram","Trailer","Turismo","Speeder","Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley's RC Van",
   "Skimmer","PCJ-600","Faggio","Freeway","RC Baron","RC Raider","Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad","Coastguard",
   "Dinghy","Hermes","Sabre","Rustler","ZR-350","Walton","Regina","Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick",
   "News Chopper","Rancher","FBI Rancher","Virgo","Greenwood","Jetmax","Hotring","Sandking","Blista Compact","Police Maverick","Boxville",
   "Benson","Mesa","RC Goblin","Hotring Racer","Hotring Racer","Bloodring Banger","Rancher","Super GT","Elegant","Journey","Bike","Mountain Bike",
   "Beagle","Cropdust","Stunt","Tanker","RoadTrain","Nebula","Majestic","Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000",
   "Cement Truck","Tow Truck","Fortune","Cadrona","FBI Truck","Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade",
   "Freight","Streak","Vortex","Vincent","Bullet","Clover","Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise",
   "Merit","Utility","Nevada","Yosemite","Windsor","Monster Truck","Monster Truck","Uranus","Jester","Sultan","Stratum","Elegy","Raindance",
   "RC Tiger","Flash","Tahoma","Savanna","Bandito","Freight","Trailer","Kart","Mower","Duneride","Sweeper","Broadway","Tornado","AT-400",
   "DFT-30","Huntley","Stafford","BF-400","Newsvan","Tug","Trailer","Emperor","Wayfarer","Euros","Hotdog","Club","Trailer","Trailer","Andromada",
   "Dodo","RC Cam","Launch","Police Car (LSPD)","Police Car (SFPD)","Police Car (LVPD)","Police Ranger","Picador","S.W.A.T. Van","Alpha",
   "Phoenix","Glendale","Sadler","Luggage Trailer","Luggage Trailer","Stair Trailer","Boxville","Farm Plow","Utility Trailer"
};
if(strcmp(cmd, "/veh", true) ==0 )
{
    if (PlayerInfo[playerid][pAdmin] >= 1337)
    {
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COL_WHITE, "UTILISATION: /veh [nom/moedelid] [color1] [color2]");
return 1;
}
new modelid = ReturnModelByName(tmp);
if(modelid == 0)
{
SendClientMessage(playerid, COL_WHITE, "Modelid incorect! Assurer vous d'avoir mit un nom de vehicule existant ou d'un modelid corect!");
return 1;
}
new color1 = 0;
tmp = strtok(cmdtext, idx);
if(strlen(tmp)) color1 = strval(tmp);
new color2 = 0;
tmp = strtok(cmdtext, idx);
if(strlen(tmp)) color2 = strval(tmp);

new Float:x,Float:y,Float:z,Float:a;
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,a);
GetXYFront(x, y, a, 3.0);
new Cveh = CreateVehicle(modelid,x,y,z,a,color1,color2,-1);

   
}
    else SendClientMessage(playerid,COL_WHITE,"Vous n'ête pas autoriser a utiliser cette commande!");
return 1;
}


ReturnModelByName(const text[])
{
if (IsNumeric2(text))
{
if (strval(text) >= 400 && strval(text) <= 611)
{
return strval(text);
}
return 0;
}
new len = strlen(text);
for (new m=0;m<sizeof(VehicleName);m++)
{
if (strcmp(VehicleName[m], text, true, len) == 0)
{
return m+400;
}
}
return 0;
}

Titre: Re : bug commande spawn véhicule
Posté par: xrf22 le 30 Juin 2010, 22:06:32
Je ne comprend pas  :(
ça bug toujours et toujours le même bug >:(

Je viens de passer 30minutes à faire marcher le script pour rien  :wall (fonction IsNumeric2 et enlèvement de la condition d' être admin)
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul le 30 Juin 2010, 23:02:25
Dans ce cas c'est que c'est une commande quelque part qui fait bugger toutes les autres sa m'arrivais quand je débuté ^^
Titre: Re : Re : bug commande spawn véhicule
Posté par: xrf22 le 01 Juillet 2010, 00:32:51
Mais toute marche normalement =/

Je me pencherais demain dessus =]
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul le 01 Juillet 2010, 10:23:58
C'est bizarre, a tu d'autre commmande avec le 10 comme au tout début ?
Titre: Re : bug commande spawn véhicule
Posté par: xrf22 le 01 Juillet 2010, 12:05:38
Oui mais j' ai déjà changer le numèro, changez la ligne

Rien n' y fait  >:(

Double post
Et autrement faire un menu, tu penses que ça pourrait marcher ?   :-X
Titre: Re : bug commande spawn véhicule
Posté par: Syg le 03 Juillet 2010, 00:18:33
Je pense que toutes tes autres commandes sont des commandes sans paramètres.

Ta commande est par exemple "/vspawn 522".
Cette commande est stockée dans cmdtext.
Donc le test suivant ne marchera jamais (sauf quand tu ne mets pas de paramètre à ta commande) :
if(strcmp(cmdtext, "/vspawn", true) == 0)
Solution :
Au tout début de la callback OnPlayerCommandText, il faut que tu appelles strtok pour "extraire" la commande.
Tu trouveras un exemple dans la plupart des gamemodes mais je te le donne quand même avec des commentaires :
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256];
new idx;

/* Extraction de la commande sans ses paramètres */
cmd = strtok(cmdtext, idx);

/* Identification de la commande, le test porte sur la variable cmd qui ne
  contient que le nom de la commande*/
if(strcmp(cmd, "<LA COMMANDE SANS LES PARAMETRES>", true) == 0)
{
new tmp[128];

/* Extraction du premier paramètre (Cet appel à strtok reprend là où le
  précédent s'était arrêté dans la variable cmdtext - cf post de Sim)*/
cmd = strtok(cmdtext, idx);
...
}

/* Autres commandes */

}

++
Syg
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul le 03 Juillet 2010, 00:24:35
Donc bien ce que je pensez alors ^^ J'ai jamais trop compris les commandes, avec les byts etc.. ^^ De jour en jour j'en apprend un peu plus dessus mais bon ;) Merci quand même syg j'vais me couché moins cons x'P

Sam.
Titre: Re : bug commande spawn véhicule
Posté par: xrf22 le 03 Juillet 2010, 11:52:22
C' est obligatoire que ce soit au début du callback ?
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul le 03 Juillet 2010, 13:04:03
Salut :)
les new etc.. oui, car tu va les utiliser dans plusieurs commande et si tu les met au dessus le script va les chercher
Titre: Re : Re : bug commande spawn véhicule
Posté par: xrf22 le 03 Juillet 2010, 20:43:28
On peut pas les mettre au début de la condition (if{ }) ?
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul le 03 Juillet 2010, 20:49:05
Ben non le script va chercher autre que dans la commande, puis il faut définir aussi le cmd. Fais ce que l'on a dit et sa ira ^^ T'aura juste à écrire tes commandes avec le format que j't'ai filer
Titre: Re : bug commande spawn véhicule
Posté par: xrf22 le 04 Juillet 2010, 13:33:30
Salut !
Désolé de reprendre le scripting un Dimanche mais bon =]

Alors, j' ai fais ce que vous m' avez dit, cette fois-ci on a l' air d' avoir avancé ^^

Voici la nouvelle commande (en gardant ta commande que tu m' avais donné Chneubeul) :
//Commande /vspawn voiture véhicule
if(strcmp(cmd, "/vspawn", true) == 0)
{
new tmp[128];

/* Extraction du premier paramètre (Cet appel à strtok reprend là où le
   précédent s'était arrêté dans la variable cmdtext - cf post de Sim)*/
cmd = strtok(cmdtext, idx);

if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_RED, "UTILISATION: /vspawn [nom/ID] [couleur1] [couleur2]");
return 1;
}
new modelid = ReturnModelByName(tmp);
if(modelid == 0)
{
SendClientMessage(playerid, COLOR_RED, "ID incorect ! Assurez vous d' avoir écrit un nom/ID Correct !");
return 1;
}
new color1 = 0;
tmp = strtok(cmdtext, idx);
if(strlen(tmp)) color1 = strval(tmp);
new color2 = 0;
tmp = strtok(cmdtext, idx);
if(strlen(tmp)) color2 = strval(tmp);

new Float:x,Float:y,Float:z,Float:a;
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,a);
CreateVehicle(modelid,x,y,z,1,color1,color2,-1);

return 1;
}

Sauf que la fonction "strlen(tmp)" est toujours = a 0
Même si je rentre une commande ou pas
Que je rentre un ID correct ou incorrecte, le serveur m' affiche toujours la phrase "UTILISATION: /vspawn [nom/ID] [couleur1] [couleur2]"
Titre: Re : bug commande spawn véhicule
Posté par: chneubeul le 04 Juillet 2010, 14:30:09
oula je sais pas du tout, je connais pas trop les commandes ^^
Titre: Re : Re : bug commande spawn véhicule
Posté par: xrf22 le 04 Juillet 2010, 14:39:20
Je suis pas encore un pro des "cmd" je suis plutôt "cmdtext"  :-[ mais je pense que tu a foiré vers le "if" qui dit le message "UTILISATION: /vspawn [nom/ID] [couleur1] [couleur2]" vérifie bien ce if ...

Je l' ai changé et devine ce que ça fait !
Que dalle  >:(

Double post
Chneubeul, je crois bien qu' on a eu un manque d' attention
J' ai voulu tester ce que renvoyer la variable "tmp"
Et elle renvoyait la valeur "0"
Pourquoi ?

cmd = strtok(cmdtext, idx);
On ne doit pas extraire les paramètres de la commande dans la variable "cmd" mais dans la variable "tmp"
Donc fallait écrire :
tmp = strtok(cmdtext, idx);
Maintenant ça donne :
//Commande /vspawn voiture véhicule
if(strcmp(cmd, "/vspawn", true) == 0)
{
new tmp[128];

tmp = strtok(cmdtext, idx);

if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_RED, "UTILISATION: /vspawn [nom/ID] [couleur1] [couleur2]");
return 1;
}
new modelid = ReturnModelByName(tmp);
if(modelid == 0)
{
SendClientMessage(playerid, COLOR_RED, "ID incorect ! Assurez vous d' avoir écrit un nom/ID Correct !");
return 1;
}
new color1 = 0;
tmp = strtok(cmdtext, idx);
if(strlen(tmp)) color1 = strval(tmp);
new color2 = 0;
tmp = strtok(cmdtext, idx);
if(strlen(tmp)) color2 = strval(tmp);

new Float:x,Float:y,Float:z,Float:a;
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,a);
CreateVehicle(modelid,x,y,z,1,color1,color2,-1);

return 1;
}

Et ça marche nikel :D