• 06 Juillet 2025, 10:37:49


Auteur Sujet: Probleme de commande Id , arme , munition  (Lu 1641 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Probleme de commande Id , arme , munition
« le: 23 Avril 2009, 19:59:16 »
Donc voila je n' ai jamais ete confronter a ce probleme donc je ne sais pas comment le regler

voila le probleme je veut faire une commande qui permet de donner une armer a une personne et le nombre de muition voila le code =D


if (strcmp("/arme", cmd, true, 10) == 0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,couleur_rouge, "[INFO]: /arme < id joueur > < id arme > < munnition >");
return 1;
}
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, couleur_rouge, "[INFO]: /arme < id joueur > < id arme > < munnition >");
return 1;
}
new idjoueur = strval(tmp);
new arme = strval(result);
GetPlayerName(idjoueur,nom,sizeof(nom));
GivePlayerWeapon(idjoueur,arme,0);
new stringgun[256];
format(stringgun,sizeof(stringgun),"[INFO]: Un admin donne une arme à %s (id: %d ) id de l' arme: %s",nom,idjoueur,result);
print(stringgun);
return 1;
}



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Probleme de commande Id , arme , munition
« Réponse #1 le: 24 Avril 2009, 10:48:27 »
Tu n'a pas dit où se trouvait le problème.
Mais bon, en analysant ta commande, je vois que tu récupères mal les paramètres.

Tu fait un premier strtok dans ta commande qui permet de récupérer le premier paramètre (idJoueur).
Jusque là, pas de problème.

Ensuite, tu pars dans un boucle qui compte les caractères jusqu'au premier espace (' ').
Le problème ici, c'est que tu comptes les caractères depuis le début de la chaîne. Donc tu n'auras pas le paramètre que tu veux (arme) mais le nom de la commande.

Sinon, tu ne récupères pas le paramètre munitions (mais je pense que tu l'avais laissé de côté).

Le plus judicieux dans tous les cas pour une commande avec paramètres, c'est de faire un strtok par paramètre de la commande.
if (strcmp("/arme", cmd, true, 10) == 0)
{
new idjoueur;
new arme;
new munitions;

/* On récupère le paramètre idjoueur */
tmp = strtok(cmdtext, idx);
if(strlen(tmp) == 0)
{
SendClientMessage(playerid,couleur_rouge, "[INFO]: /arme < id joueur > < id arme > < munnition >");
return 1;
}
idjoueur = strval (tmp);

/* On récupère le paramètre arme */
tmp = strtok(cmdtext, idx);
if(strlen(tmp) == 0)
{
SendClientMessage(playerid,couleur_rouge, "[INFO]: /arme < id joueur > < id arme > < munnition >");
return 1;
}
arme = strval (tmp);

/* On récupère le paramètre munition */
tmp = strtok(cmdtext, idx);
if(strlen(tmp) == 0)
{
/* Dans ce cas, on peut mettre un valeur par défaut pour munitions */
munitions = 50;
}
else
{
munitions = strval (tmp);
}

/* Maintenant qu'on a tous nos paramètres, on peut faire ce que l'on veut avec */
GetPlayerName(idjoueur,nom,sizeof(nom));
GivePlayerWeapon(idjoueur,arme,munition);
new stringgun[256];
format(stringgun,sizeof(stringgun),"[INFO]: Un admin donne une l'arme %d à %s (id: %d ) avec %d munitions",arme, nom, idjoueur, munitions);
print(stringgun);
return 1;
}

NB : Je n'ai pas eu le temps de tester ce bout de script, il se peut que j'ai fait des erreurs mais le principe est correct.

++
Syg
Courtesy of GtaManiac

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Probleme de commande Id , arme , munition
« Réponse #2 le: 24 Avril 2009, 11:54:39 »
Le probleme c' est que je ne sais pas comment faire plusieurs strtok donc j' utilise cette methode et pour le munnition si je l ai etst laisser tomber c' est que j arrive pas as l' obtenir dans la commande

on peut m' expliquer svp merci =D
« Modifié: 24 Avril 2009, 18:09:22 par sasuke78200 »



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Probleme de commande Id , arme , munition
« Réponse #3 le: 24 Avril 2009, 19:22:55 »
Salut,

tu dois comprendre que strtok utilisé plusieurs fois de suite de récupère pas le même bout de texte, dépendant de ce que tu fais avec la variable idx (cette variable est modifié à chaque utilisation)

donc strtok commecnce à examiner le script à la position indiquée par idx jusqu'à en trouver la fin ou le caractère de séparation (espace habituellement)

++Sim++





Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Probleme de commande Id , arme , munition
« Réponse #4 le: 24 Avril 2009, 19:26:03 »
lol c 'est trop cool alors merci sim de m' avoir eclairer je test et je vous dit si tout fonctionnent =D



EDit: On peut m' expliquer un peu comment l' utiliser s.v.p merci   :-[.
« Modifié: 25 Avril 2009, 13:39:10 par sasuke78200 »



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Probleme de commande Id , arme , munition
« Réponse #5 le: 25 Avril 2009, 23:43:20 »
Au cas où tu ne l'aurais pas remarqué, le bout de script que j'ai donné et montre comment faire plusieurs strtok à la suite.

Pour compléter les explications de Sim, la variable idx contient l'index du caractère où la fonction strtok doit commencer sa recherche. A la fin de la fonction, cette variable contient l'index du caractère suivant l'espace trouvé dans la chaîne.

Exemple :
cmdtext = "/arme 8 52 320" (taille = 14)
idx=0


Premier appel de strtok (normalement fait au tout début de OnPlayerCommandText)
cmd = strtok(cmdtext, idx);
cmd= "/arme"
Idx = 6


Deuxième appel
tmp = strtok(cmdtext, idx);
tmp = "8"
idx = 8


Troisième appel
tmp = strtok(cmdtext, idx);
tmp = "52"
idx = 11


Dernier appel
tmp = strtok(cmdtext, idx);
tmp = "320"
idx = 14
(car il n'y a pas d'espace à la fin de la chaîne de départ)

++
Syg
Courtesy of GtaManiac

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : Probleme de commande Id , arme , munition
« Réponse #6 le: 26 Avril 2009, 11:33:00 »
Ah ok merci

Ô grand Syg  :P



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog