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

Titre: Suppression de ce qu'il y a avant une lettre.
Posté 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, '_');
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: /cartman le 07 Juillet 2009, 21:59:54
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 ;)

++
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: ApocKalipsS le 07 Juillet 2009, 22:33:04
Bah.. non  :(
Je pense que c'est comme le PHP, avec les "explode", mais ca marche pas..
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: S!m le 07 Juillet 2009, 23:43:52
Salut,

passe par un strfind et format

un indice supplémentaire:

new idx = strfind(name, "_", true);
format(tavariable, sizeof(tavariable), "%s", name[idx]);

++Sim++
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: ApocKalipsS le 08 Juillet 2009, 11:18:01
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);
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: ApocKalipsS le 10 Juillet 2009, 22:31:56
Up  ;)
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: S!m le 11 Juillet 2009, 16:40:00
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++
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: ApocKalipsS le 12 Juillet 2009, 11:48:59
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]);
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: ApocKalipsS le 24 Août 2009, 16:27:19
Je reprend le topic, UP !
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: cristab le 24 Août 2009, 16:31:21
Sim voulait dire ceci

new idx5 = strfind(name, "_", true);
format(tavariable, sizeof(tavariable), "%s", name[idx5]);
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: ApocKalipsS le 25 Août 2009, 08:11:32
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 :
Citer
Machin_Truc: Text
Il n'y a même pas le "dit:", je ne comprend pas...

Merci de m'aider !
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: cristab le 25 Août 2009, 09:30:17
en gros j'ai rien compris a t'on histoire
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: ApocKalipsS le 25 Août 2009, 09:32:40
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 :
Citer
_Truc dit : texte
Alros que mon nom est Machin_Truc.
Je ne trouve pas l'erreur...
Et ce que je veux est :
Citer
Machin Truc dit : Texte
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: cristab le 25 Août 2009, 09:41:13
ah je comprend mieux ^^ mais je n'est pas reponse la personnellement "_" sa vaut un espace donc bon
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: ApocKalipsS le 25 Août 2009, 10:06:39
Justement, au final il faut remplacé ça par un espace.
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: Syg le 26 Août 2009, 13:55:58
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
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: ApocKalipsS le 26 Août 2009, 17:19:41
Encore merci à toi Syg !  :-*
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: manathann le 02 Septembre 2009, 23:49:41
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
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: S!m le 03 Septembre 2009, 01:42:00
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++
Titre: Re : Suppression de ce qu'il y a avant une lettre.
Posté par: manathann le 03 Septembre 2009, 10:54:52
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