GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: ApocKalipsS le 07 Juillet 2009, 21:02:37
-
Bonsoir,
Je souhaiterais supprimer ce qu'il y a avant un caractère spécial, par exemple Tintin_Milou, il n'y a que le "Milou" qui s'enregistre dans une variable.
j'ai déjà trouvé ça dans un script, mais ca ne prend que "Tintin"..
new playername2[MAX_PLAYER_NAME];
new playernamesplit[3][MAX_PLAYER_NAME];
GetPlayerName(playerid, playername2, sizeof(playername2));
split(playername2, playernamesplit, '_');
-
un truque tou béte tu a esayer d'inverser " playernamesplit, '_' " ?
ou au pir de définir le prénon devant ?? => " playerPRéNONplit, '_' , playerNONplit " .
je c'est pas si sa marche test ;)
++
-
Bah.. non :(
Je pense que c'est comme le PHP, avec les "explode", mais ca marche pas..
-
Salut,
passe par un strfind et format
un indice supplémentaire:
new idx = strfind(name, "_", true);
format(tavariable, sizeof(tavariable), "%s", name[idx]);
++Sim++
-
Si je met un new idx, ca me met pleins de shadows variable ???
new idx = strfind(name, "_", true);
format(string, sizeof(string), "%s %s dit: %s", playernamesplit1[0],name[idx], text);
-
Up ;)
-
Salut,
c'est simplement parce que idx est déjà défini, si tu ne t'en sert plus après cette petite parcelle de code, tu peut simplement enlever le new, sinon change le nom de la variable
++Sim++
-
Je n'y arrive toujours pas :
new name;
GetPlayerName(playerid, name, sizeof(name));
new idx = strfind(name, "_", true);
format(string, sizeof(string), "%s", name[idx]);
-
Je reprend le topic, UP !
-
Sim voulait dire ceci
new idx5 = strfind(name, "_", true);
format(tavariable, sizeof(tavariable), "%s", name[idx5]);
-
Tout ça m'a l'air bon, aucune erreur, je vais tester.
Merci à vous !
Double post
Arf, ça ne marche pas.
Je vais vous donner mon code complet :
GetPlayerName(playerid, sendername, sizeof(sendername));
new name[MAX_PLAYERS];
new idx5 = strfind(name, "_", true);
new playernamesplit[3][MAX_PLAYER_NAME];
split(sendername, playernamesplit, '_');
if(!IsPlayerInAnyVehicle(playerid))
{
if(PlayerInfo[playerid][pMaskuse] == 1)
{
format(string, sizeof(string), "Un inconnu dit: %s", text);
ProxDetector(20.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
}
else
{
format(string, sizeof(string), "%s %s dit: %s", name[idx5], playernamesplit[0], text);
//format(string, sizeof(string), "%s", name[idx]);
ProxDetector(20.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
}
}
Ca me dit :
Machin_Truc: Text
Il n'y a même pas le "dit:", je ne comprend pas...
Merci de m'aider !
-
en gros j'ai rien compris a t'on histoire
-
Arf, je viens de recorriger quelque chose, mais il y a toujours un truc qui va pas.
Donc voilà mon script :
GetPlayerName(playerid, sendername, sizeof(sendername));
new name[MAX_PLAYER_NAME];
new sendername1[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
new idx5 = strfind(name, "_", true);
new playernamesplit[3][MAX_PLAYER_NAME];
split(sendername1, playernamesplit, '_');
if(!IsPlayerInAnyVehicle(playerid))
{
if(PlayerInfo[playerid][pMaskuse] == 1)
{
format(string, sizeof(string), "Un inconnu dit: %s", text);
ProxDetector(20.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
}
else
{
format(string, sizeof(string), "%s %s dit: %s",playernamesplit[0],name[idx5],text);
//format(string, sizeof(string), "%s", name[idx]);
ProxDetector(20.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
}
}
Le problème c'est que quand je l'utilise IG, voilà ce que j'obtient :
_Truc dit : texte
Alros que mon nom est Machin_Truc.
Je ne trouve pas l'erreur...
Et ce que je veux est :
Machin Truc dit : Texte
-
ah je comprend mieux ^^ mais je n'est pas reponse la personnellement "_" sa vaut un espace donc bon
-
Justement, au final il faut remplacé ça par un espace.
-
Pourquoi ne remplaces-tu pas simplement le "_" par un espace dans le nom du joueur :
new idx5;
idx5 = strfind (name, "_");
name[idx5] = ' ';
Ensuite, tu peux utiliser name directement :
format (string, sizeof(string), "%s dit: %s", name, text);
++
Syg
-
Encore merci à toi Syg ! :-*
-
Je rajoute ce que vous avez cités mais j'ai ca :s
C:UsersValentinDocumentssamp02Xserver.win32gamemodesD-RP.pwn(11758) : error 017: undefined symbol "name"
C:UsersValentinDocumentssamp02Xserver.win32gamemodesD-RP.pwn(11759) : error 017: undefined symbol "name"
C:UsersValentinDocumentssamp02Xserver.win32gamemodesD-RP.pwn(11759) : warning 215: expression has no effect
C:UsersValentinDocumentssamp02Xserver.win32gamemodesD-RP.pwn(11759) : error 001: expected token: ";", but found "]"
C:UsersValentinDocumentssamp02Xserver.win32gamemodesD-RP.pwn(11759) : error 029: invalid expression, assumed zero
C:UsersValentinDocumentssamp02Xserver.win32gamemodesD-RP.pwn(11759) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
5 Errors.
EDIT : Voici la commande :
//----------------------------------[Local]-----------------------------------------------
if(strcmp(cmd, "/local", true) == 0 || strcmp(cmd, "/l", true) == 0 || strcmp(cmd, "/say", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(gPlayerLogged[playerid] == 0)
{
SendClientMessage(playerid, COLOR_GREY, " Vous devez être connecté avant !");
return 1;
}
GetPlayerName(playerid, sendername, sizeof(sendername));
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, COLOR_GRAD2, "USAGE: (/l)ocal [local chat]");
return 1;
}
new idx5;
idx5 = strfind (name, "_");
name[idx5] = ' ';
format (string, sizeof(string), "%s dit: %s", name, text);
ProxDetector(20.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
printf("%s", string);
}
return 1;
}
Double post
STOP, j'ai trouvé !
Au final j'ai rien changé d'autre que ca :
new idx5;
idx5 = strfind (name, "_");
name[idx5] = ' ';
Sauf que c'est devenu ca :
new idx5;
idx5 = strfind (sendername, "_");
sendername[idx5] = ' ';
Double post
Par contre...
Quand on parle normalement, c'est où exactement dans mon GM ??? :blink
Car je fait
"t" "mon texte" "ENTRER"
et je me retrouve avec "Cristian_Walter: mon texte"
J'ai cherché en faisant "%s: %s" je trouve rien :s
-
Salut,
évite les double post, encore plus les triple post :lock
pour ce qui concerne ton problème, recherche la callback OnPlayerText et tu trouvera ton bonheur (ctrl+f recommandé)
++Sim++
-
Merci Sim :-*
EDIT :
Punaise c'est compliqué : j'ai trouvé telephone ( ca va ) et plus bas je crois que c'est "realchat" :
if (realchat)
{
if(gPlayerLogged[playerid] == 0)
{
return 0;
}
new idx5;
idx5 = strfind (sendername, "_");
sendername[idx5] = ' ';
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "%s dit: %s", sendername, text);
ProxDetector(20.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
return 0;
}
Sauf que ca marche pas et quand je fait un texte normal ca fait normalement
%s: %s Le premier étant le nom et le deuxième le texte
J'ai screené pour que vous voyiez
J'attends votre aide :s