GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: scott1 le 30 Novembre 2010, 21:22:41

Titre: [Résolut] conflit de string
Posté par: scott1 le 30 Novembre 2010, 21:22:41
Bonjour à toutes et à tous,

je viens vous voir car j'ai un soucis,

j'ai une sous commande


if(strcmp(commande,"inviter",true) == 0)
{
   if(JoueurInfos[playerid][jRang]<6) { Message(playerid,4000,"~r~Vous n'avez pas acces a cette commande."); return 1; }
   tmp = strtok(cmdtext, idx);
   if(!strlen(tmp))
   {
       SendClientMessage(playerid,grisbleu,"[Usage] (/f)action inviter [Id/PartieduNom]");
return 1;
   }
   giveplayerid = ReturnUser(tmp);
       if(!IsPlayerConnected(giveplayerid) || JoueurInfos[giveplayerid][jSpawn] != 1) { Message(playerid,4000,"~r~Ce joueur n'est pas connecte ou n'a pas encore spawn."); return 1; }
            if(!GetDistanceBetweenPlayers(playerid,giveplayerid,5.0)) { Message(playerid,4000,"~r~Ce joueur n'est pas pres de vous."); return 1; }
if(JoueurInfos[giveplayerid][jJob] != 0) { Message(playerid,4000,"~r~Ce joueur a un job il ne peu pas etre dans une faction."); return 1; }
if(JoueurInfos[giveplayerid][jFaction] != 0) { Message(playerid,4000,"~r~Ce joueur est deja dans une faction."); return 1; }
   new faction = JoueurInfos[playerid][jFaction];
   new nom2[MAX_PLAYER_NAME];
   GetPlayerName(giveplayerid,nom2,sizeof(nom2));
   JoueurInfos[giveplayerid][jFaction] = faction;
   JoueurInfos[giveplayerid][jRang] = 1;
   MettreSkinFaction(giveplayerid,faction,1);
   SauvegardeCompte(giveplayerid);
   format(string,sizeof(string),"[Faction] Le chef %s à invité %s dans le gang.",nom,nom2);
   SendFactionMessage(faction,radio,string);
   return 1;
}
et au début de la commande

GetPlayerName(playerid,nom,sizeof(nom));
le soucis s'est que ig je reçois

[Faction] Le chef nom2 à invité nom2 dans le gang."
Merci d'avance
Titre: Re : conflit de string
Posté par: Boomerkuigi le 30 Novembre 2010, 21:38:42
La var "giveplayerid" a ete cree dans le OnPlayerCommadText() ?
new giveplayerid
Titre: Re : Re : conflit de string
Posté par: steve76 le 30 Novembre 2010, 21:52:25
La var "giveplayerid" a ete cree dans le OnPlayerCommadText() ?
new giveplayerid

Il aurait eu une erreur lors de la compilation si il l'avait oublié or ce n'est pas le cas...
Titre: Re : conflit de string
Posté par: S!m le 01 Décembre 2010, 00:10:38
Salut,

ajoute des printf pour localiser ton problème, mais je te conseille de tester en plaçant ton GetPlayerName(playerid, nom, ...); juste après l'autre GetPlayerName pour voir.

++Sim++
Titre: Re : conflit de string
Posté par: scott1 le 01 Décembre 2010, 11:33:19
J'ai donc essayé ceci

new faction = JoueurInfos[playerid][jFaction];
    format(string,sizeof(string),"%s",nom);
    SendClientMessage(playerid,jauneclair,string);
    new nom2[MAX_PLAYER_NAME];
    GetPlayerName(giveplayerid,nom2,sizeof(nom2));
    format(string,sizeof(string),"%s",nom);
    SendClientMessage(playerid,jauneclair,string);
    JoueurInfos[giveplayerid][jFaction] = faction;
    JoueurInfos[giveplayerid][jRang] = 1;
    MettreSkinFaction(giveplayerid,faction,1);
    SauvegardeCompte(giveplayerid);
    format(string,sizeof(string),"[Faction] Le chef %s à invité %s dans le gang.",nom,nom2);
    SendFactionMessage(faction,radio,string);

Et j'obtient

Citer
[11:31:36] Cesar_Mendez [11:31:36]
Cesar_Mendez [11:31:36]
[Faction] Le chef Kelya_Kendall à invité Kelya_Kendall dans le gang.

Je comprend pas le soucis :s
Titre: Re : conflit de string
Posté par: Ssk le 01 Décembre 2010, 11:53:07
Tu fais un GetPlayerName sur le joueur qui tape la commande ? parce que je ne le vois pas ^^
Titre: Re : conflit de string
Posté par: scott1 le 01 Décembre 2010, 11:59:33
Oui au debut de la commande,

if(strcmp(cmd,"/f",true)==0||strcmp(cmd,"/faction",true)==0)
    {
GetPlayerName(playerid,nom,sizeof(nom));
new commande[128];
commande = strtok(cmdtext, idx);
Titre: Re : conflit de string
Posté par: Ssk le 01 Décembre 2010, 12:36:13
essai de refaire le GetPlayerName après celui que tu fais sur nom2
Titre: Re : conflit de string
Posté par: scott1 le 01 Décembre 2010, 14:04:05
Je l'ai fait, alors ça donne

une ligne vite
[Faction] Le chef Kelya_Kendall à invité Kelya_Kendall dans le gang.
Titre: Re : conflit de string
Posté par: cristab le 01 Décembre 2010, 18:59:07
pourquoi ne pas faire comme ceci


Code: (a mettre quelque part dans ton script ou cela te semble le mieux) [Sélectionner]
Pseudo(playerid)
{

   new nom[MAX_PLAYERS_NAME];
   GetPlayerName(playerid,nom,sizeof(nom));
   return nom;
}

et dans ta commande au niveau de ton format

format(string,sizeof(string),"[Faction] Le chef %s à invité %s dans le gang.",Pseudo(playerid),Pseudo(giveplayerid));
SendFactionMessage(faction,radio,string);
Titre: Re : conflit de string
Posté par: scott1 le 01 Décembre 2010, 20:15:35
ça ne sera pas plus lent puisqu'il renvoi a un public?
Titre: Re : conflit de string
Posté par: cristab le 01 Décembre 2010, 22:04:03
pas a un publique mais a une fonction et non ce ne seras pas plus lent par contre ton script seras bien plus propre
Titre: Re : conflit de string
Posté par: scott1 le 01 Décembre 2010, 22:26:18
Plus propre? ...
Titre: Re : conflit de string
Posté par: S!m le 02 Décembre 2010, 00:44:24
Salut,

ce que cristab veut dire par plus propre, c'est que ce sera sur que tu utilise bien giveplayerid et playerid, et c'est plus court en code.
Si t'as le même problème, le problème vient de tes variables d'ID de joueurs, t'aura qu'à chercher un petit peu.

++Sim++
Titre: Re : conflit de string
Posté par: scott1 le 02 Décembre 2010, 11:10:28
Oui mais bon, ici s'est pas un soucis d'id, donc la méthode de cristab reviendra au même puisque j'ai fait diffèrent sendclient pour voir justement si ça venait de l'id
Titre: Re : conflit de string
Posté par: cristab le 02 Décembre 2010, 11:21:58
Tente toujours a mon avis sa fonctionneras comme je les demontrer
Titre: Re : conflit de string
Posté par: scott1 le 02 Décembre 2010, 11:36:14
Résolut,

mon erreur faire un

new nom[max_player_name];

en début de script, et toujours formater le nom de playerid dans cette variable.

Solution,

mettre

new nom[max_player_name];

uniquement dans les callback ou il est nécéssaire



merci pour votre aide