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
-
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:
/*
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.
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:
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
-
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)
-
Ah d'accord, merci beaucoup ;)
-
Ou plus simple ,le callback OnPlayerUpdate est appelé à chaque actions du joueur .
Voila un petit code que je t'ai fait :
#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)
-
Si je me souviens GetTickCount(), ne fonctionne pas sous linux.
-
Personnellement j'ai jamais rencontré ce problème.