Bucle de usuarios conectados
#1

Hola estoy haciendo un timer para guardar los datos de los usuarios cada 2 minutos. Hice el timer y la funcion, pero me di cuenta que con el bucle que hice mi funcion la llama la cantidad de slots que tenga el servidor con MAX_PLAYER.

Esto se me ejecuta la cantidad de slots vacios del servidor. Si tengo 5/50 el codigo de abajo se ejecuta 45 veces y 5 veces con los datos de los usuarios...

Код:
[19:54:39] [DEBUG] mysql_format - connection: 1, len: 2056, format: "UPDATE `usuarios` set Experiencia = '%d', Nivel = '%d', Admin = '%d', PosX = '%f', PosY = '%f', PosZ = '%f', Angulo = '%f', Inte..."
[19:54:39] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE `usuarios` set Experiencia = '1', Nivel = '1', Admin = '0", callback: "(null)", format: "(null)"
pawn Код:
SetTimer("T_GuardarJugadorInfo", 120000, false); // 2 minutos
pawn Код:
public T_GuardarJugadorInfo()
{
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        new string[256];
        GuardarJugadorInfo(i);
        format(string, sizeof(string), "Guardando datos en MySQL.");
        SendClientMessage(i, COLOR_NARANJA, string);
    }
    return 1;
}
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), JugadorInfo[playerid][Dinero], Health, Armour, NombreJugador(playerid));
    mysql_tquery(MySQL, Query);
    return 1;

}
Reply
#2

Proba asн:

pawn Код:
public T_GuardarJugadorInfo()
{
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
           new string[256];
           GuardarJugadorInfo(i);
           format(string, sizeof(string), "Guardando datos en MySQL.");
           SendClientMessage(i, COLOR_NARANJA, string);
        }    
     }
     return 1;
}
Reply
#3

Gracias Juance
Reply
#4

Decian que con foreach era mas optimizado.
Reply
#5

Quote:
Originally Posted by chusothe41
Посмотреть сообщение
Decian que con foreach era mas optimizado.
Exactamente.
Reply
#6

Se complican para hacer un cуdigo tan simple...

pawn Код:
public T_GuardarJugadorInfo()
{
    for (new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            GuardarJugadorInfo(i);
        }    
    }
    SendClientMessageToAll(COLOR_NARANJA, "Guardando datos en MySQL.");
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)