SA-MP Forums Archive
Manera correcta de guardar datos del jugador - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Manera correcta de guardar datos del jugador (/showthread.php?tid=525990)



Manera correcta de guardar datos del jugador - YazukiAkira - 15.07.2014

Hola quisiera saber cual seria la forma de guardar los datos del jugador para mantenerlos seguros.


Actualmente tengo una funcion para guardar los datos del jugador y esta la tengo en OnGameModeExit y OnPlayerDisconnect, me gustaria saber si deberia guardar los datos del jugador en otro lado... Ej realizar un timer o algo por el estilo.

Mi funcion:
pawn Код:
public GuardarJugadorInfo(playerid)
{
    new Float:X, Float:Y, Float:Z, Float:Angle, Float:Health, Float:Armour;
    GetPlayerPos(playerid, X, Y, Z);
    GetPlayerFacingAngle(playerid, Angle);
    GetPlayerHealth(playerid, Health);
    GetPlayerArmour(playerid, Armour);

    mysql_format(MySQL, Query, sizeof(Query), "UPDATE `usuarios` set Experiencia = '%d', Nivel = '%d', Admin = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', Angulo = '%f', Interior = '%d', Mundo = '%d', Dinero = '%d', Vida = '%f', Armadura = '%f', Conectado = 0 WHERE Nombre = '%e'",
    JugadorInfo[playerid][Experiencia], JugadorInfo[playerid][Nivel], JugadorInfo[playerid][Admin], X, Y, Z, Angle, GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid), GetPlayerMoney(playerid), Health, Armour, NombreJugador(playerid));
    mysql_tquery(MySQL, Query);
    return 1;

}
Utilizo MySQL.


Respuesta: Manera correcta de guardar datos del jugador - Thewin - 15.07.2014

Con solo tenerlo en onplayerdisconnect lo guardaria unicamente cuando el jugador se desconecte, asi lo utilizo yo...

Ahora, si quieres mas seguridad y que se guarden las cuentas por ejemplo cada 5 minutos, hazlo con un timer que se repita y listo, no afecta en nada..


Re: Manera correcta de guardar datos del jugador - YazukiAkira - 15.07.2014

Una duda que tengo con los timer es si se ejecuta a X tiempo desde que el jugador esta conectado en el server, o no importa si esta conectado el jugador.

EJ:
Pepito se conecta 14:00 -> Si creo un timer de 5 minutos este deberia ejecutarse 14:05
Juancito se conecto 14:02 -> їEl timer se ejecuta 14:07 o 14:05 ?
Pepita se conecta 15:36 -> їEl timer se ejecuta a los 5 minutos de conectado este jugador, 15:41?

Esta consulta me viene debido a que no me parece muy factible guardar todos los datos de los jugadores a la vez, es decir ejecutar la funcion GuardarJugadorInfo. Si hubieran 500 usuarios conectado cada 5 minutos tendria que mandar 500 consultas de MySQL, quisiera que se tengan intervalos.


Respuesta: Manera correcta de guardar datos del jugador - Juance - 15.07.2014

Hacelo sуlo con OnPlayerDisconnect, porque el servidor se cerrarнa con tu permiso, a menos que se caiga, entonces antes de cerrar el servidor desconectas a todos los jugadores.
Otra forma de guardar los datos es en OnPlayerUpdate, pero no estoy del todo seguro, y no se si eso podrнa provocar lag.


Re: Manera correcta de guardar datos del jugador - YazukiAkira - 15.07.2014

Juance, si se cae el servidor por un crash o algo asi no se guardarian los datos no? O siempre al desconectarse un usuario no importa cual sea la circunstancia se ejecuta OnPlayerDisconnect?


Respuesta: Manera correcta de guardar datos del jugador - Juance - 15.07.2014

Yo creo que sн, la funciуn se ejecutarнa igual al jugador caerse, porque en OnPlayerDisconnect estб el "reason" que es para ver como desconectу el jugador.


Respuesta: Manera correcta de guardar datos del jugador - deryan - 15.07.2014

Los datos no se te guardan si te crashean el servidor o lo cierras directamente de la consola, pero en cambio si sale el jugador, crashea o es kickeado, todo se guardarб con йxito . Para evitar eso yo harнa lo siguiente:
pawn Код:
for(new i; i<MAX_PLAYERS; i++)
{
OnPlayerDisconnect(i, 0);
}
suerte amigo

Edito: el cуdigo va en OnGameModeExit.


Respuesta: Manera correcta de guardar datos del jugador - Juance - 15.07.2014

No creo que funcione bien. El tiempo del cierre del GM es de 1 segundo, y ese proceso tardarнa mбs de un segundo. En detectar todos los jugadores y desconectar. No sй si darнa tiempo.


Respuesta: Manera correcta de guardar datos del jugador - Zume - 15.07.2014

Quote:
Originally Posted by Juance
Посмотреть сообщение
Hacelo sуlo con OnPlayerDisconnect, porque el servidor se cerrarнa con tu permiso, a menos que se caiga, entonces antes de cerrar el servidor desconectas a todos los jugadores.
Otra forma de guardar los datos es en OnPlayerUpdate, pero no estoy del todo seguro, y no se si eso podrнa provocar lag.
Aclarando esto. por la cantidad de veces que esta callback se ejecuta por segundo, usarlo para archivos o ya sea bases de datos causarнa un tremendo lag, en absoluto no se recomienda.

La soluciуn a tu problema serнa un temporizador de 5 minutos como dijo Thewin, si el servidor se cayera no se perderнan datos lejanos a 5 minutos.

Quote:
Originally Posted by YazukiAkira
Посмотреть сообщение
Una duda que tengo con los timer es si se ejecuta a X tiempo desde que el jugador esta conectado en el server, o no importa si esta conectado el jugador.

EJ:
Pepito se conecta 14:00 -> Si creo un timer de 5 minutos este deberia ejecutarse 14:05
Juancito se conecto 14:02 -> їEl timer se ejecuta 14:07 o 14:05 ?
Pepita se conecta 15:36 -> їEl timer se ejecuta a los 5 minutos de conectado este jugador, 15:41?

Esta consulta me viene debido a que no me parece muy factible guardar todos los datos de los jugadores a la vez, es decir ejecutar la funcion GuardarJugadorInfo. Si hubieran 500 usuarios conectado cada 5 minutos tendria que mandar 500 consultas de MySQL, quisiera que se tengan intervalos.
El timer se ejecutarб a la misma hora si es un timer global, aunque puedes hacer un timer individual para cada player pero quizб serнa mucho peso


Respuesta: Manera correcta de guardar datos del jugador - benjas09 - 15.07.2014

Zume, de que manera se podria hacer un timer global?
Si se hiciera un timer por usuario causaria mucho lag?


Ya que estaba aprovecho esto, ya que es interesante jaja