[Ayuda] Alguna forma de detectar un jugador AFK? -
Thewin - 18.04.2014
ME gustaria saber si hay una forma de detectar cuando un jugador minimiza el juego o apreta la tecla Escape, que no sea obteniendo las posiciones del jugador
Gracias.
Respuesta: [Ayuda] Alguna forma de detectar un jugador AFK? -
Swedky - 18.04.2014
Se puede haciйndolo con '
GetTickCount'.
La cosa es que cuando un jugador pulsa la tecla '
ESC' o minimiza el juego, el servidor deja de enviar informaciуn hacia el jugador.
Respuesta: [Ayuda] Alguna forma de detectar un jugador AFK? -
Thewin - 18.04.2014
Eso es lo que necesito, ahora, me podrias decir como usarlo? no tiene variables ni nada :S
Respuesta: [Ayuda] Alguna forma de detectar un jugador AFK? -
hotspicytaco - 18.04.2014
Lo que quieres hacer lo puedes lograr obteniendo el tiempo de la ъltima actualizaciуn que recibiу el jugador con GetTickCount y crear una funciуn que verifique si la ъltima actualizaciуn que recibiу fue hace mбs de 2 segundos.
pawn Код:
#include <a_samp>
//Creamos una variable para guardar el tiempo de la ъltima actualizaciуn
new pLastUpdate[MAX_PLAYERS];
public OnPlayerUpdate(playerid)
{
//Obtenemos el tiempo de la ъltima actualizaciуn que recibiу el jugador
//usando GetTickCount
pLastUpdate[playerid] = GetTickCount();
return true;
}
pawn Код:
forward bool:IsPlayerPaused(playerid);
bool:IsPlayerPaused(playerid)
{
//Verificamos si la ъltima actualizaciуn que recibiу el jugador fue hace
//mбs de 2 segundos obteniendo nuevamente el tiempo usando
//GetTickCount y restбndole el tiempo de la ъltima actualizaciуn.
if((GetTickCount) - pLastUpdate[playerid]) > 2000)
{
//El jugador estб en pausa.
return true;
}
//La ъltima actualizaciуn que recibiу el jugador fue hace menos de 2 segundos,
//el jugador no estб en pausa.
return false;
}
Y si quieres, tambiйn puedes simplificar la funciуn usando el operador ternario o define.
pawn Код:
forward bool:IsPlayerPaused(playerid);
bool:IsPlayerPaused(playerid)
{
return ((GetTickCount) - pLastUpdate[playerid]) > 2000) ? true : false;
}
pawn Код:
#define IsPlayerPaused(%1) ((GetTickCount) - pLastUpdate[%1]) > 3000)
Re: [Ayuda] Alguna forma de detectar un jugador AFK? -
bm0z - 18.04.2014
No hay que confundir minimizado (o en pausa) con afk:
http://forum.sa-mp.com/showpost.php?...0&postcount=12
Uno puede estar AFK que OnPlayerUpdate se seguirнa llamando.
Respuesta: [Ayuda] Alguna forma de detectar un jugador AFK? -
TheChaoz - 18.04.2014
Si quieres detectar si un jugador se encuentra AFK (Away from keyboard o alejado del teclado), lo mejor que puedes hacer es chequear posiciones o la cбmara y el chat.
Si quieres detectar si un jugador minimizo el juego, deberбs utilizar el callback OnPlayerUpdate para realizar algunas comparaciones.
Sin embargo, existen varios includes/filterscripts para ambos casos, por lo que no hay necesidad de reinventar la rueda. Varios de los mismos se encuentran y podrбs encontrarlos con el buscador muy rбpidamente.
PD: Sugiero que cuando busques utilices la bъsqueda avanzada con el tag [Filterscript] o [Include] (segъn tus necesidades) y con el texto "AFK" o "OnPlayerPaused".
Respuesta: [Ayuda] Alguna forma de detectar un jugador AFK? -
Swedky - 21.04.2014
Quote:
Originally Posted by LuiisRubio
Lo que quieres hacer lo puedes lograr obteniendo el tiempo de la ъltima actualizaciуn que recibiу el jugador con GetTickCount y crear una funciуn que verifique si la ъltima actualizaciуn que recibiу fue hace mбs de 2 segundos.
pawn Код:
#include <a_samp>
//Creamos una variable para guardar el tiempo de la ъltima actualizaciуn new pLastUpdate[MAX_PLAYERS];
public OnPlayerUpdate(playerid) { //Obtenemos el tiempo de la ъltima actualizaciуn que recibiу el jugador //usando GetTickCount
pLastUpdate[playerid] = GetTickCount();
return true; }
pawn Код:
forward bool:IsPlayerPaused(playerid); bool:IsPlayerPaused(playerid) { //Verificamos si la ъltima actualizaciуn que recibiу el jugador fue hace //mбs de 2 segundos obteniendo nuevamente el tiempo usando //GetTickCount y restбndole el tiempo de la ъltima actualizaciуn.
if((GetTickCount) - pLastUpdate[playerid]) > 2000) { //El jugador estб en pausa. return true; } //La ъltima actualizaciуn que recibiу el jugador fue hace menos de 2 segundos, //el jugador no estб en pausa. return false; }
Y si quieres, tambiйn puedes simplificar la funciуn usando el operador ternario o define.
pawn Код:
forward bool:IsPlayerPaused(playerid); bool:IsPlayerPaused(playerid) { return ((GetTickCount) - pLastUpdate[playerid]) > 2000) ? true : false; }
pawn Код:
#define IsPlayerPaused(%1) ((GetTickCount) - pLastUpdate[%1]) > 3000)
|
No se tendrнa que tomar en cuenta el ping del jugador? Digo, para tener en cuenta en cuбnto tiempo el cliente enviarб la informaciуn hacia el servidor, o al menos eso creo.
Respuesta: [Ayuda] Alguna forma de detectar un jugador AFK? -
adri1 - 21.04.2014
Para detectar el afk si presiona esc o minimiza el juego usa las nuevas funciones de 0.3z
pawn Код:
// Extended admin network stats
native NetStats_GetConnectedTime(playerid);
native NetStats_MessagesReceived(playerid);
native NetStats_BytesReceived(playerid);
native NetStats_MessagesSent(playerid);
native NetStats_BytesSent(playerid);
native NetStats_MessagesRecvPerSecond(playerid);
native Float:NetStats_PacketLossPercent(playerid);
native NetStats_ConnectionStatus(playerid);
native NetStats_GetIpPort(playerid, ip_port[], ip_port_len);
Una de esas se ponнa en 0 cuando estaba afk.