Une erreur classique avec les tableaux que l'on ne voit pas quand on fait les tests avec un seul joueur (ID=0).
Tu fais
GetPlayerName(playerid, PlayerName2, sizeof(PlayerName2));
Cette ligne est correcte mais elle ira toujours écrire dans le premier élément du tableau PlayerName2, donc l'élément correspondant au joueur 0.
Le ligne qui fonctionne est :
GetPlayerName(playerid, PlayerName2[playerid], sizeof(PlayerName2[playerid]));
Idem pour la commande /back, il faut remplacer
SetPlayerName(playerid,PlayerName2);
par
SetPlayerName(playerid,PlayerName2[playerid]);
Et idem pour la variable Float:PlayerHealth qui devrait être un tableau.
new Float:PlayerHealth[MAX_PLAYERS];
GetPlayerHealth(playerid, PlayerHealth[playerid]);
dans /afk
SetPlayerHealth(playerid, PlayerHealth[playerid]);
dans /back
Autre erreur assez embêtante : le timer GodTimer
Ce timer est lancé sans paramètre donc il ne fonctionnera que pour le joueur 0 (encore une fois, quand on fait les tests avec un seul joueur tout marche correctement) ainsi, si le joueur 10 fait /afk, c'est le joueur 0 qui verra sa vie remise à 100% toute les secondes.
La solution :
- Démarrer le timer dans OnFilterScriptInit.
- L'arrêter dans OnFilterScriptExit
- Modifier la fonction du timer comme suit :
public GodUpdate ()
{
for (new i=0 ; i<MAX_PLAYERS ; i++)
{
/* Si le joueur est connecté et en AFK */
if (IsPlayerConnected (i) && InAfk[playerid]==1)
{
SetPlayerHealth(i, 100000);
}
}
return 1;
}
Et bien sur, supprimer le KillTimer dans la commande /back
Sinon, coté suggestions, il serait bien de mettre un message d'erreur lorsque le joueur fait /afk et qu'il est déjà AFK ou /back alors qu'il n'est pas AFK. Il n'y a rien de plus déroutant qu'un commande qui n'affiche rien (on croit alors qu'on est parti en timeout).
Et il manque un SendClientMessageToAll après
format(msg,sizeof(msg)," %s Est revenu(e)", PlayerName(playerid));
++
Syg