Bonjour, je vous explique ma situation, j'ai un serveur STUNT/DM, et je voudrais, lorsqu'un joueur choisit son "équipe", son pseudo soit renommé afin d'y ajouter le suffixe "_DM" (pour le DeathMatch) ou "_ST" (pour les Stunters).
Je veux aussi utiliser ces pseudos quand le joueur tape la commande /afk ou /back afin d'ajouter/retirer le préfixe "[AFK]".
Enfin lorsque le joueur fait F4 puis /kill, il revient à l'écran de selection, je voudrais qu'à ce moment-là, son pseudo originel soit rétabli (sans aucun préfixe ni suffixe).
Pour celà, j'utiliser ces fonctions :
En Array :
new PName[MAX_PLAYERS][MAX_PLAYER_NAME]; // Stockage du pseudo originel
new PNameST[MAX_PLAYERS][MAX_PLAYER_NAME];//Stockage du pseudo avec le suffixe _ST
new PNameDM[MAX_PLAYERS][MAX_PLAYER_NAME];//Stockage du pseudo avec le suffixe _DM
new PNameafkDM[MAX_PLAYERS][MAX_PLAYER_NAME];//Stockage du pseudo (_DM) avec le préfixe [AFK]
new PNameafkST[MAX_PLAYERS][MAX_PLAYER_NAME];//Stockage du pseudo (_ST) avec le préfixe [AFK]
J'utilise aussi une variable, à 0 lorsque le joueur se connecte, et à 1 lorsqu'il a choisis une "équipe" (En Array :new EtatTeam[MAX_PLAYERS] = 0;)
Ensuite dans mon OnPlayerRequestClass :
if(EtatTeam[playerid] == 0){
GetPlayerName(playerid, PName, sizeof(PName));
}else if(EtatTeam[playerid] == 0){
SetPlayerName(playerid, PName);
EtatTeam = 0;]
Ensuite dans mon OnPlayerSpawn :
if(gTeam[playerid] == TEAM_DEATHMATCH){
SetPlayerColor(playerid,COLOR_RED);
if(EtatTeam[playerid] == 0){
format(string, sizeof(string), "**** %s a choisis le mode DeathMatch.****", PName[playerid]);
SendClientMessageToAll(COLOR_LIGHTRED, string);
print(string);
format (PNameDM[playerid], sizeof(PNameDM), "%s_DM", PName[playerid]);
SetPlayerName (playerid, PNameDM[playerid]);
EtatTeam[playerid] = 1;
}
}
else if(gTeam[playerid] == TEAM_STUNT){
SetPlayerColor(playerid,COLOR_GREEN);
if(EtatTeam[playerid] == 0){
format(string, sizeof(string), "**** %s a choisis le mode Stunt.****", PName[playerid]);
SendClientMessageToAll(COLOR_GREEN, string);
print(string);
format (PNameST[playerid], sizeof(PNameST), "%s_ST", PName[playerid]);
SetPlayerName (playerid, PNameST[playerid]);
EtatTeam[playerid] = 1;
}
}
}
return 1;
}
Et enfin dans mon OnPlayerCommandText (pour les commandes /afk et /back) :
if (strcmp("/afk", cmdtext, true, 4) == 0){
if(EtatAFK[playerid] == 1){
SendClientMessage(playerid, COLOR_RED,"Tu es déjà AFK !");
}
else
{
if(gTeam[playerid] == TEAM_STUNT){
new rand = random(sizeof(STAfkPlayerTeleport));
GetPlayerPos(playerid, PosafkST[playerid][0],PosafkST[playerid][1], PosafkST[playerid][2]);
GetPlayerFacingAngle(playerid, PosafkST[playerid][3]);
format(string, sizeof(string), "**** %s est passé AFK.****", PName[playerid]);
SendClientMessageToAll(COLOR_YELLOW, string);
print(string);
format (PNameafkST[playerid], sizeof(PNameafkST), "[AFK]%s", PNameST[playerid]);
SetPlayerName (playerid, PNameafkST[playerid]);
SetPlayerColor(playerid, COLOR_YELLOW);
SetPlayerPos(playerid, STAfkPlayerTeleport[rand][0], STAfkPlayerTeleport[rand][1], STAfkPlayerTeleport[rand][2]);
SetPlayerFacingAngle(playerid, STAfkPlayerTeleport[rand][3]);
SetCameraBehindPlayer(playerid);
SetPlayerHealth(playerid, 99999);
TogglePlayerControllable(playerid,0);
EtatAFK[playerid] = 1;
}
else if(gTeam[playerid] == TEAM_DEATHMATCH){
new rand = random(sizeof(DMAfkPlayerTeleport));
GetPlayerPos(playerid, PosafkDM[playerid][0],PosafkDM[playerid][1], PosafkDM[playerid][2]);
GetPlayerFacingAngle(playerid, PosafkDM[playerid][3]);
format(string, sizeof(string), "**** %s est passé AFK.****", PName[playerid]);
SendClientMessageToAll(COLOR_YELLOW, string);
print(string);
format (PNameafkDM[playerid], sizeof(PNameafkDM), "[AFK]%s", PNameDM[playerid]);
SetPlayerName (playerid, PNameafkDM[playerid]);
SetPlayerColor(playerid, COLOR_YELLOW);
SetPlayerPos(playerid, DMAfkPlayerTeleport[rand][0], DMAfkPlayerTeleport[rand][1], DMAfkPlayerTeleport[rand][2]);
SetPlayerFacingAngle(playerid, DMAfkPlayerTeleport[rand][3]);
SetCameraBehindPlayer(playerid);
SetPlayerHealth(playerid, 99999);
TogglePlayerControllable(playerid,0);
EtatAFK[playerid] = 1;
}
}
return 1;
}
if (strcmp("/back", cmdtext, true, 5) == 0){
if(EtatAFK[playerid] == 1)
{
if(gTeam[playerid] == TEAM_STUNT){
SetPlayerColor(playerid, COLOR_GREEN);
SetPlayerName (playerid, PNameST[playerid]);
format(string, sizeof(string), "**** %s n'est plus AFK.****", PName[playerid]);
SendClientMessageToAll(COLOR_YELLOW, string);
print(string);
SetPlayerHealth(playerid, 100);
SetPlayerPos(playerid, PosafkST[playerid][0],PosafkST[playerid][1], PosafkST[playerid][2]);
SetPlayerFacingAngle(playerid, PosafkST[playerid][3]);
SetCameraBehindPlayer(playerid);
TogglePlayerControllable(playerid,1);
EtatAFK[playerid] = 0;
}
else if(gTeam[playerid] == TEAM_DEATHMATCH){
SetPlayerColor(playerid, COLOR_RED);
SetPlayerName (playerid, PNameDM[playerid]);
format(string, sizeof(string), "**** %s n'est plus AFK.****", PName[playerid]);
SendClientMessageToAll(COLOR_YELLOW, string);
print(string);
SetPlayerHealth(playerid, 100);
SetPlayerPos(playerid, PosafkDM[playerid][0],PosafkDM[playerid][1], PosafkDM[playerid][2]);
SetPlayerFacingAngle(playerid, PosafkDM[playerid][3]);
SetCameraBehindPlayer(playerid);
TogglePlayerControllable(playerid,1);
EtatAFK[playerid] = 0;
}
}
else
{
SendClientMessage(playerid, COLOR_RED, "Tu n'es pas AFK !");
}
return 1;
}
Venons-en au fait :
Le problème se trouve avec les commandes /afk et /back et lorsqu'un joueur fait F4 puis /kill.
Son pseudo devient celui du dernier joueur arrivé en jeu.
J'ai essayé de remplacer tous les PName/PNameDM... en rajoutant [playerid] à la fin, mais rien à faire je ne trouve pas de solution.
Merci à ceux qui oseront se lancer dans une petite analyse !
Jens84
PS : Désolé pour le post "un peu" long ^^.