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

Titre: Getplayername
Posté 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
Titre: Re : Getplayername
Posté par: S!m le 18 Septembre 2009, 15:49:08
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++
Titre: Re : Getplayername
Posté par: Syg le 18 Septembre 2009, 16:28:50
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
Titre: Re : Getplayername
Posté par: S!m le 18 Septembre 2009, 16:37:50
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++
Titre: Re : Getplayername
Posté par: Syg le 21 Septembre 2009, 11:13:39
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
Titre: Re : Getplayername
Posté par: MrFredo le 21 Septembre 2009, 11:27:29
Voila une fonction que j'ai faite en vitesse qui recupere le tag en debut de pseudo
Code: (pawn) [Sélectionner]
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
}
Titre: Re : Getplayername
Posté par: Street le 26 Septembre 2009, 17:50:54
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 ^^
Titre: Re : Getplayername
Posté par: cristab le 26 Septembre 2009, 18:01:31
sa ne prend pas les "[""]"
Titre: Re : Getplayername
Posté par: MrFredo le 27 Septembre 2009, 11:23:20
Cette fonction recupere le tag sans les [] apres ta juste a faire un test du genre:
Code: (pawn) [Sélectionner]
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 ...
}
Titre: Re : Getplayername
Posté par: Street le 27 Septembre 2009, 14:33:27
Yeah :D merci bien!
Titre: Re : Getplayername
Posté par: Ssk le 27 Septembre 2009, 16:42:47
GG fredo pour le code ;)
Titre: Re : Getplayername
Posté par: BuBuNo le 27 Septembre 2009, 17:02:51
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
}
Titre: Re : Getplayername
Posté par: MrFredo le 27 Septembre 2009, 17:06:36
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
Titre: Re : Getplayername
Posté par: BuBuNo le 27 Septembre 2009, 18:09:53
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
Titre: Re : Re : Getplayername
Posté par: S!m le 27 Septembre 2009, 18:38:54
Salut,

je ne faisais que regarder en passant, mes le code GetPlayerTag contient une ndition légèrement inutile:
Code: (pawn) [Sélectionner]
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 à:

Code: (pawn) [Sélectionner]
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:

Code: (pawn) [Sélectionner]
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++
Titre: Re : Getplayername
Posté par: BuBuNo le 27 Septembre 2009, 18:50:26
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 ?
Titre: Re : Getplayername
Posté par: Ssk le 27 Septembre 2009, 20:22:30
Ca c ' est rien ca veut juste dire que tu n' as jamais utiliser la fonction
Titre: Re : Getplayername
Posté par: BuBuNo le 29 Septembre 2009, 19:32:54
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
Titre: Re : Getplayername
Posté par: » Lukubi™ le 29 Septembre 2009, 19:40:12
Essaye comme sa :


Code: (pawn) [Sélectionner]
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®
Titre: Re : Re : Getplayername
Posté par: Street le 30 Septembre 2009, 16:24:28
Essaye comme sa :


Code: (pawn) [Sélectionner]
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®
Titre: Re : Getplayername
Posté par: » Lukubi™ le 30 Septembre 2009, 16:26:58
J'ai pas compris pourquoi tu a citer mon message et modifier mon code, qui était bon.  ???



++
MrT®
Titre: Re : Getplayername
Posté par: Street le 01 Octobre 2009, 01:38:37
J'ai juste remplacer
Citer
Tu est Pas de la team XST
car tu lui a remis tu et bien dans la team PDK :P
Titre: Re : Getplayername
Posté par: » Lukubi™ le 01 Octobre 2009, 12:40:17
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®
Titre: Re : Getplayername
Posté par: BuBuNo le 01 Octobre 2009, 16:27:26
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
Titre: Re : Getplayername
Posté par: Street le 02 Octobre 2009, 20:59:37
Ok desoler ^^