03.06.2011, 19:27
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 :/
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