GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Infu le 16 Mars 2013, 20:32:23

Titre: Timer pour un joueur spécifique
Posté par: Infu le 16 Mars 2013, 20:32:23
Bonjour,

Je me lance dans une petite "fonction" qui permettrait de savoir depuis quand une personne est inactive.
C'est à dire lancé un timer, et au bout d'une minute ça mettrait +1 à la variable.

A la fin du timer par exemple, ça ferait:

Code: (pawn) [Sélectionner]
/*
 Là je récupère la position actuelle, je définis cette position comme s'appelant Pos1.
Ensuite, dans le timer je vérifie si la position récupéré (pos1) est égale à Pos2 (actuelle).
Et si la condition vaut: true alors je fais:
*/

minute++;

Si, par contre la condition retourne "false" alors je remets la variable à 0.

Code: (pawn) [Sélectionner]
minute = 0;
Le problème étant que je n'arrive pas à récupérer l'id d'un joueur précis dans un timer, j'ai essayé sous cette forme:

Code: (pawn) [Sélectionner]
forward montimer(playerid); // En haut du script

SetTimer("montimer", 1000, true); // Dans OnPlayerSpawn (donc au moment où il a spawn)

public montimer(playerid)
{
      Kick(playerid); // Juste un exemple.
      return 1;
}

Et ça ne fonctionne pas. Si vous pouviez m'éclairer.
En vous remerciant :p
Titre: Re : Timer pour un joueur spécifique
Posté par: Kiloutre le 17 Mars 2013, 01:42:30
Salut, il faut que tu utilises SetTimerEx pour avoir des paramètres dans un timer.
Voilà ce que tu devrais faire :
SetTimerEx("montimer", 1000, true, "i", playerid);On met << "i" >> car la valeur que l'on envoie est un chiffre. ("s" pour une chaine de caractères, etc...)
On peut aussi mettre plusieurs paramètres mais de type différent : exemple :
SetTimerEx("montimer", 1000, true, "isf", playerid, name, 1.005);(f pour float, tu l'auras compris :smile:, malheureusement le "s" ne marche pas actuellement)
Ravi de t'avoir aidé (si je l'ai fait)  :rolleyes:
http://wiki.sa-mp.com/wiki/SetTimerEx (http://wiki.sa-mp.com/wiki/SetTimerEx)
Titre: Re : Timer pour un joueur spécifique
Posté par: Infu le 17 Mars 2013, 11:56:49
Ah d'accord, merci beaucoup ;)
Titre: Re : Timer pour un joueur spécifique
Posté par: Eloctro le 17 Mars 2013, 13:40:54
Ou plus simple ,le callback OnPlayerUpdate est appelé à chaque actions du joueur .
Voila un petit code que je t'ai fait :
Code: (pawn) [Sélectionner]
#define GetPlayerDowntime(%0) (GetTickCount()-PlayerDowntime[%0])
new PlayerDowntime[MAX_PLAYERS];
public OnPlayerUpdate(playerid)
{
    PlayerDowntime[playerid]=GetTickCount();
    return 1;
}

Utilise GetPlayerDowntime(playerid) pour renvoyer le temps d'inactivité(en ms)
Titre: Re : Timer pour un joueur spécifique
Posté par: Ssk le 17 Mars 2013, 14:03:42
Si je me souviens GetTickCount(), ne fonctionne pas sous linux.
Titre: Re : Timer pour un joueur spécifique
Posté par: Eloctro le 17 Mars 2013, 14:37:29
Personnellement j'ai jamais rencontré ce problème.