#include new gTimerID_1SecondPerPlayerTimer[MAX_PLAYERS] = {-1, ...};//L'ascociation de la valeur -1 à toutes les celules permet de repérer d'éventuels erreurs innatendues (voir plus bas). /* NB: Quand on script proprement, on ne choisie pas les noms de ses éléments en fonction de leur longueur ou du temps qu'on met à les re-taper au clavier mais en fonction de leur clarté ! Oui le nom de ce tableau est long à écrire mais au moins on comprend de suite à quoi il sert (pour peu qu'on ais quelques notions en anglais). */ main() { /* Ce n'est pas parceque l-on n'utilise pas concrétement la fonction main() que les lignes de son appel doivent être mal indentés voir dégeulase. */ } public OnPlayerConnect(playerid) { gTimerID_1SecondPerPlayerTimer[playerid] = SetTimerEx("OneSecondPerPLayerTimer", 1000, true, "i", playerid); } public OnPlayerDisconnect(playerid, reason) { if(gTimerID_1SecondPerPlayerTimer[playerid] == -1) printf("[WARNING] Type: Valeur inatendue - Localisation: Callback OnPlayerDisconnect - Informations: La cellule du tableau gTimerID_OneSecondPerPlayerTimer[] ascocié au joueur ID %i vaux %i", playerid, gTimerID_1SecondPerPlayerTimer); else { KillTimer(gTimerID_1SecondPerPlayerTimer[playerid]); gTimerID_1SecondPerPlayerTimer[playerid] = -1; } /* Explications: Si gTimerID_OneSecondPerPlayeTimer[] vaux -1 pour l'ID de joueur donné, ceka signifie que la cellule ne stock aucun ID de timer, ce qui n'est pas censsé se produire à ce moment de l'éxécution. Il faut toujours prévoir tout les cas imaginables même les plus farfelues et improbables ! */ } forward OneSecondPerPlayerTimer(playerid); public OneSecondPerPlayerTimer(playerid) { /* Ainsi, cette "callback" sera appelé toute les secondes pour chaque joueur. */ }