GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Street le 18 Septembre 2009, 12:31:07
-
Lu a tous,
Je fait un petit fs en smoment
est jaimerai savoir comment faire pour
Faire un getplayername Qui prend qune parti du pseudo
du style je mé [PDK] mais que sa Get Le PDK o debu pour que sa préne qune parti du pseudo
Merci davance
Cordialement
-
Salut,
si tu désire vérifier si un texte contient une expression et/ou en trouver la position, utiliser strfind
new idx = strfind(name, "[PDK]", /*true ou false dépendant de ce que tu veut...*/);
si idx vaut -1, c'est que le texte ne contient pas l'expression,
si idx vaut autre chose que -1, la valeur correspond à la position de l'expression dans le texte
++Sim++
-
Je crois qu'en fait, ce qu'il veut c'est extraire un morceau du nom.
Exemple :
[PDK]Jimmy -> Il veut extraire [PDK]
[VTT]Jack -> Il veut extraire [VTT]
Pour faire ça, il n'existe pas de fonction, il faut que tu la fasse toi-même.
La méthode est simple, tu recherches le caractère [ et tu stockes dans une chaîne intermédiaire tous les caractères que tu trouves jusqu'à ce que tu tombes sur le caractère ].
++
Syg
-
Salut,
ouais, désolé moi et ma mauvaise lecture...
pour enlever l'expression, croyez-vous que strdel ferait la job correctement (j'ignore son fonctionnement, je ne l'ai jamais utilisé)?
++Sim++
-
Pas grave pour la mauvaise lecture, ça m'arrive aussi.
Sinon, strdel supprime un partie de la chaîne.
Ici on veut en extraire une partie.
++
Syg
-
Voila une fonction que j'ai faite en vitesse qui recupere le tag en debut de pseudo
GetPlayerTag(playerid)
{
new
playername[MAX_PLAYER_NAME],
postag[2];
GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
postag[0] = strfind(playername,"["); // On cherche le caractere [ qui ouvre un tag
if(postag[0] == -1 || postag[0] != 0) //Si on n'a pas trouver le caractere ou si il n'est pas au debut du pseudo
return playername;//On renvoi le nom
postag[1] = strfind(playername,"]",false,1);//On cherche ensuite le caractere ] qui ferme un tag
if(postag[1] == -1)//Si on ne le trouve pas
return playername;//On renvoi le nom
strdel(playername,postag[1]+1,strlen(playername));//On suprime se qui suit le tag
return playername; //On renvoi le tag
}
-
Merci bien dessoler jetait absent
Mais il y a une faille la ^^ même si
je ne les pas tester jan suis sur juste en examinant ^^
si une personne a son pseudo entre parentés c considère
ou une personne qui a un tag Qui commence pas [ et se fini par ]
Mais Moi je voudrais que sa prend juste le [PDK] Pas [ ] Se qui est une faille ^^
-
sa ne prend pas les "[""]"
-
Cette fonction recupere le tag sans les [] apres ta juste a faire un test du genre:
new tag[10];
tag = GetPlayerTag(playerid);
if(strcmp(tag,"[PDK]",true) == 0)// Si le tag du joueur est PDK
{
//ton code...
}
else //Si il na pas le tag PDK
{
//ton code ...
}
-
Yeah :D merci bien!
-
GG fredo pour le code ;)
-
Heu la j'ai pas tros compris comment sa marchait :-\ ou c'est qui faut mettre :
GetPlayerTag(playerid)
{
new
playername[MAX_PLAYER_NAME],
postag[2];
GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
postag[0] = strfind(playername,"["); // On cherche le caractere [ qui ouvre un tag
if(postag[0] == -1 || postag[0] != 0) //Si on n'a pas trouver le caractere ou si il n'est pas au debut du pseudo
return playername;//On renvoi le nom
postag[1] = strfind(playername,"]",false,1);//On cherche ensuite le caractere ] qui ferme un tag
if(postag[1] == -1)//Si on ne le trouve pas
return playername;//On renvoi le nom
strdel(playername,postag[1]+1,strlen(playername));//On suprime se qui suit le tag
return playername; //On renvoi le tag
}
-
En bas de ton GM c'est une fonction ...
PS: j'ai corrigé mon code juste un peux plu haut pour te montrer comment on l'utilise car j'avait oublier les [] dans la condition
-
Bas je vien de l'essayer et sa ne marche pas.
Quand mon pseudo est [XST]Master_Bru je fait /team il me marque vous ete bien dans la team XST
et quand mon pseudo est Master_Bru je fait /team il me marque la meme chose
-
Salut,
je ne faisais que regarder en passant, mes le code GetPlayerTag contient une ndition légèrement inutile:
if(postag[0] == -1 || postag[0] != 0) //Si on n'a pas trouver le caractere ou si il n'est pas au debut du pseudo
si la position est -1 ou si la position est différente de 0.....
si la position est -1, elle est nécessairement différente de 0, donc on peut modifier à:
if(postag[0] != 0) //Si on n'a pas trouver le caractere ou si il n'est pas au debut du pseudo
et puis personnellement j'ajouterais ne longueur de tag maximale (possiblement passé en paramètre dans la fonction)
peut-être également enlever les "[]"
sinon l'implantation que j'en ferais:
GetPlayerTag(playerid, caractereouverture = '[', caracterefermeture = ']', len = 5)//taille maximale à 5 par defaut
{
new
playername[MAX_PLAYER_NAME],
i = 1;
GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
if(playername[0] == CaractereOuverture)
{
while(playername[i] && playername[i] != caracterefermeture)
{
playername[i-1] = playername[i];
i++;
if(i > len)
{
i = 0;
break;
}
}
}
playername[i] = '\0';
return playername; //On renvoi le tag (sans les séparateurs)
}
le code est peut-être imparfait mais bon....
contient peut-être des erreurs, scripté sur le forum
++Sim++
-
Et aussi j'ai oublier de presiser que j'avait un warning :
C:\DOCUME~1\BrunoLB\Bureau\ULTIMA~1\GAMEMO~1\xtreme.pwn(1796) : warning 203: symbol is never used: "GetPlayerTag"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Warning.
Donc est ce que sa ne vienderai pas de la ?
-
Ca c ' est rien ca veut juste dire que tu n' as jamais utiliser la fonction
-
Bas en faite pour moi en tout cas sa ne marche pas voila mon code :
if (strcmp(cmdtext, "/team", true) == 0){
if(strcmp(tag,"XST",true) == 0)// Si le tag du joueur est PDK
{
SendClientMessage(playerid, couleur_bleu,"Tu est bien de la team XST");
}
else //Si il na pas le tag PDK
{
SendClientMessage(playerid, couleur_bleu,"Tu n'est pas de la team XST");
}
return 1;
}
if (strcmp(cmdtext, "/teams", true) == 0){
if(strcmp(tag,"PDK",true) == 0)// Si le tag du joueur est PDK
{
SendClientMessage(playerid, couleur_bleu,"Tu est bien de la team PDK");
}
else //Si il na pas le tag PDK
{
SendClientMessage(playerid, couleur_bleu,"Tu n'est pas de la team PDK");
}
return 1;
}
Donc voila comme vous l'aurez remarquer j'en ai fait 2 un de la team XST et l'autre de la team PDK (pour voir si sa marchait)
Ensuite je me suis connecter avec le pseudo [XST]Master_Bru j'ai fait /team sa ma marquer "Tu est bien de la team XST"
Bon la c'est ok!
Mais apres sous le meme pseudo j'ai fait /teams et sa ma marquer "Tu est bien de la team PDK" c'est la ou est le probleme
Merci d'avance de votre aide
-
Essaye comme sa :
if (strcmp(cmdtext, "/team", true) == 0)
{
new tag[10];
tag = GetPlayerTag(playerid);
if(strcmp(tag,"[XST]",true) == 0) // si le joueur est XST
{
SendClientMessage(playerid, COLOR, "Tu est bien de la team XST");
}
else if(strcmp(tag,"[PDK]",true) == 0)
{
SendClientMessage(playerid, COLOR, "Tu est bien de la team PDK");
}
return 1;
}
J'ai pas testé juste codé sa sur le forum, donc surement des erreur, mais le principe est la, je pense.
++
MrT®
-
Essaye comme sa :
if (strcmp(cmdtext, "/team", true) == 0)
{
new tag[10];
tag = GetPlayerTag(playerid);
if(strcmp(tag,"[XST]",true) == 0) // si le joueur est XST
{
SendClientMessage(playerid, COLOR, "Tu est bien de la team XST");
}
else if(strcmp(tag,"[PDK]",true) == 0)
{
SendClientMessage(playerid, COLOR, "Tu est Pas de la team XST");(ici et le probléme
}
return 1;
}
J'ai pas testé juste codé sa sur le forum, donc surement des erreur, mais le principe est la, je pense.
++
MrT®
-
J'ai pas compris pourquoi tu a citer mon message et modifier mon code, qui était bon. ???
++
MrT®
-
J'ai juste remplacer
Tu est Pas de la team XST
car tu lui a remis tu et bien dans la team PDK :P
-
Donc tu n'a pas analysé mon code, je récupère le tag du joueur et il y a deux condition, une ou le tag est PDK et une autre ou le tag est XST donc mon code est juste ;).
++
MrT®
-
Oui masi bon tu n'as pas tres bien compris au lieu de dire Tu n'est pas dans la team XST. Il a mi Tu est bien dans la team PDK. car sinon sa ne servirai a rien de dire que quelqu'un de la team PDK ne soit pas dans la team XST mais dans le code sa ne change rien a part le message
-
Ok desoler ^^