Même si tu ne le souhaitais pas, c'est une bêtise. Mais bien tenté !
Ce qu'il faut savoir, c'est que les variables passées en arguments sont dîtes locales. À la fin de l'exécution d'une fonction, ces dernières sont supprimées de la mémoire. La variable killerid de la callback OnPlayerDeath (qui n'est rien d'autre qu'une fonction événementielle) est supprimée dès lors que la fonction se termine.
Maintenant, en ce qui concerne ce que tu souhaites faire. J'ai du mal à cerner l'intérêt de récupérer cette variable, dans le sens où presque toutes les actions possibles et imaginables sont réalisables au sein de la callback. Il serait bon que tu m'expliques ce que tu penses en faire, pour que je t'aiguille vers une manière de faire plus adéquate.
À défaut de savoir précisément ce que tu souhaites faire, voici un exemple d'application. Le code suivant enregistre pour chaque joueur l'identifiant de la dernière personne a l'avoir tué. Autrement dit, si le joueur A tue le joueur B, la valeur pour le joueur B sera l'identifiant du joueur A. Ça peut être pratique... si on a besoin de savoir par qui un joueur s'est précédemment fait tuer.
// On définit un tableau avec une case pour chaque joueur
new t_LastKill[MAX_PLAYERS];
// On initialise chaque case avec une valeur qui ne peut pas être un identifiant de joueur (en l’occurrence, -1)
for(new i = 0; i < MAX_PLAYERS; i++)
{
t_LastKill[i] = -1;
}
// Dans la callback OnPlayerDeath, on enregistre dans la case du joueur l'identifiant de celui qui l'a tué
public OnPlayerDeath(playerid, killerid, reason)
{
t_LastKill[playerid] = killerid;
return 1;
}
// On peut maintenant utiliser notre variable comme bon nous semble
new s_PlayerName[MAX_PLAYER_NAME],
s_KillerName[MAX_PLAYER_NAME],
s_MSG[128];
if(IsPlayerConnected(t_LastKill[playerid])
{
GetPlayerName(playerid, s_PlayerName, MAX_PLAYER_NAME);
GetPlayerName(t_LastKill[playerid], s_KillerName, MAX_PLAYER_NAME);
format(s_MSG, sizeof(s_MSG), "%s (id: %d) a récemment été tué par %s (id %d)", s_PlayerName, playerid, s_KillerName, t_LastKill[playerid]);
SendClientMessageToAll(COULEUR, s_MSG);
}
else
// Le tueur s'est déconnecté depuis le meurtre
Ce qu'il faut retenir : la variable killerid ne comporte qu'une simple valeur numérique entière. Cette valeur, identifiant d'un joueur, peut être enregistrée dans n'importe quel autre variable du même type. Libre à toi de l'utiliser ensuite comme bon te semble.
En espérant t'avoir aidé.