[Ayuda] Bug del LAG!
#1

Hola gente, bueno la verdad no tengo idea de como solucionar este problema.
Resulta que al cabo de unas horas mi servidor se laguea de tal forma que queda en connecting...
Esto se debe (Y lo comprobe) a el sistema de topplayers y topclanes de Infierno :/
Les paso el codigo de los callback's de los top's aver en que me pueden ayudar :/
pawn Код:
public OnPlayerUpdate(playerid)
{
    if(Ingresado[playerid] == false)
    {
    if(GetPlayerInterior(playerid) != 0 && GetPlayerWeapon(playerid) != 0) {
    SetPlayerArmedWeapon(playerid,1);
    return 0;
  }
}
    if(CColor[playerid] == true)
    {
        new
            keys,
            updown,
            leftright,
            Archivo[64];

        GetPlayerKeys(playerid, keys, updown, leftright);

        if(updown < 0) CSelec[playerid]--;//ARRIBA
        else if(updown > 0) CSelec[playerid]++;//ABAJO
        if(CSelec[playerid] > 4) CSelec[playerid] = 1;
        else if(CSelec[playerid] < 1) CSelec[playerid] = 4;
        if(keys & KEY_FIRE)
        {
            new
                ColorC = RGBA(COLORES[playerid][0], COLORES[playerid][1], COLORES[playerid][2], COLORES[playerid][3]);

            format(Archivo, sizeof Archivo, "Clanes/%s.ini", Clan_TAG[playerid]);
            dini_IntSet(Archivo, "Color", ColorC);
            CColor[playerid] = false;
            OcultarCombinador(playerid);
            for(new i = 0; i < MAX_PLAYERS; i++)
            {
                if(IsPlayerConnected(i))
                    if(Clan_ID[playerid] == Clan_ID[i])
                        SetPlayerColor(i, ColorC);
            }
            TogglePlayerControllable(playerid, 1);
            GameTextForPlayer(playerid, "~y~~h~ Color seleccionado", 3000, 4);
        }
        if(leftright > 0)//DERECHA
        {
            if(CSelec[playerid] == 1)//ROJO
            {
                if(keys & KEY_SPRINT) COLORES[playerid][0] += 5;
                else COLORES[playerid][0]++;
                if(COLORES[playerid][0] > 255) COLORES[playerid][0] = 0;
            }
            if(CSelec[playerid] == 2)//VERDE
            {
                if(keys & KEY_SPRINT) COLORES[playerid][1] += 5;
                else COLORES[playerid][1]++;
                if(COLORES[playerid][1] > 255) COLORES[playerid][1] = 0;
            }
            if(CSelec[playerid] == 3)//AZUL
            {
                if(keys & KEY_SPRINT) COLORES[playerid][2] += 5;
                else COLORES[playerid][2]++;
                if(COLORES[playerid][2] > 255) COLORES[playerid][2] = 0;
            }
            if(CSelec[playerid] == 4)//ALPHA
            {
                if(keys & KEY_SPRINT) COLORES[playerid][3] += 5;
                else COLORES[playerid][3]++;
                if(COLORES[playerid][3] > 255) COLORES[playerid][3] = 0;
            }

        }
        if(leftright < 0)//IZQUIERDA
        {
            if(CSelec[playerid] == 1)//ROJO
            {
                if(keys & KEY_SPRINT) COLORES[playerid][0] -= 5;
                else COLORES[playerid][0]--;
                if(COLORES[playerid][0] < 0) COLORES[playerid][0] = 255;
            }
            if(CSelec[playerid] == 2)//VERDE
            {
                if(keys & KEY_SPRINT) COLORES[playerid][1] -= 5;
                else COLORES[playerid][1]--;
                if(COLORES[playerid][1] < 0) COLORES[playerid][1] = 255;
            }
            if(CSelec[playerid] == 3)//AZUL
            {
                if(keys & KEY_SPRINT) COLORES[playerid][2] -= 5;
                else COLORES[playerid][2]--;
                if(COLORES[playerid][2] < 0) COLORES[playerid][2] = 255;
            }
            if(CSelec[playerid] == 4)//ALHPA
            {
                if(keys & KEY_SPRINT) COLORES[playerid][3] -= 5;
                else COLORES[playerid][3]--;
                if(COLORES[playerid][3] < 0) COLORES[playerid][3] = 255;
            }
        }
        ActualizarCombinador(playerid);
    }
    return 1;
}

//OnGameModeInit...
SetTimer("ActualizarListaJugadores", 1500, 1);
SetTimer("ActualizarTopPlayers", 3500, 1);
SetTimer("ActualizarTopClanes", 5000, 1);

public ActualizarTopClanes()
{
    new
        File:file,
        Archivo[64],
        string[128],
        Linea,
        Lugar,
        Float:MAX_VALOR = -1.0;

    //EXTRAER DATOS DEL ARCHIVO "Clanes.txt"
    file = fopen("Clanes.txt", io_read);
    while(fread(file, string))
    {
        new
            v = strfind(string, ";", true);

        strmid(NOMBRE[Linea], string, 0, v, 24);
        format(Archivo, sizeof Archivo, "Clanes/%s.ini", NOMBRE[Linea]);
        if(dini_Exists(Archivo))
        {
            VALOR[Linea] = dini_Float(Archivo, "Ratio");
        }
        Linea++;
    }
    fclose(file);
    //SACAR LUGARES Y GUARDARLOS
    Lugar = 1;
    while(Lugar < MAX_TOP_CLANES+1)
    {
        for(new i = 0; i < MAX_DATOS; i++)
        {
            if(EnTop[i] == false)
            {
                if(VALOR[i] > MAX_VALOR)
                {
                    MAX_VALOR = VALOR[i];
                    TopC[Lugar] = i;
                }
            }
        }
        strmid(TopInfoC[Lugar][NickTOP], NOMBRE[TopC[Lugar]], 0, strlen(NOMBRE[TopC[Lugar]]), 24);
        format(Archivo, sizeof Archivo, "Clanes/%s.ini", TopInfoC[Lugar][NickTOP]);
        TopInfoC[Lugar][AsesinatosTOP] =  dini_Int(Archivo, "Asesinatos");
        TopInfoC[Lugar][MuertesTOP] = dini_Int(Archivo, "Muertes");
        TopInfoC[Lugar][RatioTOP] = dini_Float(Archivo, "Ratio");
        EnTop[TopC[Lugar]] = true;
        MAX_VALOR = -1;
        Lugar++;
    }
    //RESETEAR DATOS:
    for(new s = 0; s < MAX_DATOS; s++)
    {
        EnTop[s] = false;
        NOMBRE[s][0] = 0;
        VALOR[s] = 0.0;
    }
    //GUARDAR DATOS EN UNA CADENA DE CARACTERES
    format(DLG_TOP_CLAN_STR, sizeof DLG_TOP_CLAN_STR, "");
    Lugar = 1;
    while(Lugar < MAX_TOP_CLANES+1)
    {
        if(strlen(TopInfoP[Lugar][NickTOP])) {
            format(DLG_TOP_CLAN_STR, sizeof DLG_TOP_CLAN_STR,
            "%s| %2d | Asesinatos: %6d | Muertes: %6d | A/M: %0.1f| Clan: %s \n",
            DLG_TOP_CLAN_STR, Lugar, TopInfoC[Lugar][AsesinatosTOP], TopInfoC[Lugar][MuertesTOP],
            TopInfoC[Lugar][RatioTOP], TopInfoC[Lugar][NickTOP]);
        }
        Lugar++;
    }
//  print(DLG_TOP_CLAN_STR); //DEBUG
    SetTimer("ActualizarTopClanes", 62000, 0);
}


public ActualizarTopPlayers()
{
    new
        File:file,
        Archivo[64],
        string[128],
        Linea,
        Lugar,
        Float:MAX_VALOR = -1.0;

    //EXTRAER DATOS DEL ARCHIVO "Jugadores.txt"
    file = fopen("Jugadores.txt", io_read);
    while(fread(file, string))
    {
        new
            v = strfind(string, ";", true);

        strmid(NOMBRE[Linea], string, 0, v, 24);
        format(Archivo, sizeof(Archivo), "Jugadores/%s.ini", NOMBRE[Linea]);
        if(dini_Exists(Archivo))
        {
            VALOR[Linea] = dini_Float(Archivo, "Ratio");
        }
        Linea++;
    }
    fclose(file);
    //SACAR LUGARES Y GUARDARLOS
    Lugar = 1;
    while(Lugar < MAX_TOP_PLAYERS+1)
    {
        for(new i = 0; i < MAX_DATOS; i++)
        {
            if(EnTop[i] == false)
            {
                if(VALOR[i] > MAX_VALOR)
                {
                    MAX_VALOR = VALOR[i];
                    TopP[Lugar] = i;
                }
            }
        }
        strmid(TopInfoP[Lugar][NickTOP], NOMBRE[TopP[Lugar]], 0, strlen(NOMBRE[TopP[Lugar]]), 24);
        format(Archivo, sizeof(Archivo), "Jugadores/%s.ini", TopInfoP[Lugar][NickTOP]);
        TopInfoP[Lugar][AsesinatosTOP] =  dini_Int(Archivo, "Asesinatos");
        TopInfoP[Lugar][MuertesTOP] = dini_Int(Archivo, "Muertes");
        TopInfoP[Lugar][RatioTOP] = dini_Float(Archivo, "Ratio");
        EnTop[TopP[Lugar]] = true;
        MAX_VALOR = -1;
        Lugar++;
    }
    //RESETEAR DATOS:
    for(new s = 0; s < MAX_DATOS; s++)
    {
        EnTop[s] = false;
        NOMBRE[s][0] = 0;
        VALOR[s] = 0.0;
    }
    //GUARDAR DATOS EN UNA CADENA DE CARACTERES
    format(DLG_TOP_PLY_STR, sizeof(DLG_TOP_PLY_STR),"");
    Lugar = 1;
    while(Lugar < MAX_TOP_PLAYERS+1)
    {
        if(strlen(TopInfoP[Lugar][NickTOP])) {
            format(DLG_TOP_PLY_STR, sizeof(DLG_TOP_PLY_STR),
            "%s| %2d | Asesinatos: %6d | Muertes: %6d | A/M: %0.1f| Nick: %s \n",
            DLG_TOP_PLY_STR, Lugar, TopInfoP[Lugar][AsesinatosTOP], TopInfoP[Lugar][MuertesTOP],
            TopInfoP[Lugar][RatioTOP], TopInfoP[Lugar][NickTOP]);
        }
        Lugar++;
    }
//  print(DLG_TOP_PLY_STR); //DEBUG
}

//Y yo creo que aqui viene el problema, por que intente ponerlo en 200 milisegundos y se lagueo de una, en vez en 60000 tarda mas en laguearse xD

SetTimer("ActualizarTopPlayers", 60000, 0); // En este
SetTimer("ActualizarListaJugadores", 10000, 0); // En este no se xD
Reply
#2

Amigo a mi me pasa lo mismo, eso no es lo que muestras hay, es un ataque ddos, lo digo porque a mi me atacan el server tambien,es ataque ddos.
Reply
#3

Quote:
Originally Posted by WHEELMANDTS
Посмотреть сообщение
Amigo a mi me pasa lo mismo, eso no es lo que muestras hay, es un ataque ddos, lo digo porque a mi me atacan el server tambien,es ataque ddos.
eso solo se puede provar mediante logs.
Reply
#4

un ataque ddos no aparece en los logs...
Reply
#5

Quote:
Originally Posted by WHEELMANDTS
Посмотреть сообщение
un ataque ddos no aparece en los logs...
logs de internet del servidor. no del servidor de sa-mp.
Reply
#6

claro que aparecen, fijense en el log's y miren los incoming conection
Reply
#7

O talves porque tiene muchas cosas el OnPlayerUpdate >.<
Reply
#8

Quote:
Originally Posted by Mr.GeEk
Посмотреть сообщение
claro que aparecen, fijense en el log's y miren los incoming conection
no confundas ataque ddos con fakeplayers... el ataque no va directo al server sino que al vp`s
Reply
#9

Nada de ataques, cuando quito esos timer's y al dia siguiente entro sigue sin lag, cuando dejo todos esos sistemas da la casualidad de que esta ese puto lag
Olvidense de los ataques DDoS ni Dos ni nada de eso.
Reply
#10

Esta claro que, si estas usando esos timers en OnGameModeInit, y guardas los datos cada vez que OnPlayerUpdate es llamada y con Dini, vas a tener ese problema, cambia el sistema, cuando el jugador se desconecte, cada 15 minutos, cada vez que mate a alguien etc.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)