02.03.2016, 02:23
Olб! Recentemente, o Cidade Social RPG (RPG criado do zero) vem sofrendo bastante LAG do nada; de inнcio, eu achei que fosse a nossa mitigaзгo, mas segundo a prуpria empresa em que hospedamos (One Cloud Service), ninguйm estб atacando (vale citar que a proteзгo anti DDOS da empresa й excelente).
Pensei tambйm ser algum exploit, entгo eu adicionei no server.cfg as linhas: messageholelimit e ackslimit.
Porйm, mesmo assim, o LAG comeзou (logo apуs um jogador ter saнdo do servidor, DETALHE: foi DO NADA, pois houve saнda / entrada de jogadores no servidor antes deste em questгo).
Eu reiniciei o servidor e, para a minha surpresa, o LAG havia parado (foi aн que eu percebi que o LAG causado nгo era por um exploit).
Eu deduzi entгo que teria sido a minha include de salvamento, que havia sido atualizada hб pouco... Antes, eu estava usando variбveis globais para tudo, exemplo: new File:bCini7_Archive_File; no inнcio da include, e nгo apenas nas funзхes em que ela й utilizada.
Isto poderia ter acarretado em algo? Em um loop infinito, ou algo deste tipo?
Vale citar que eu jб mudei tudo e jб fiz mais algumas mudanзas (na prуpria include bCini7), sendo que a include atual estб desta forma:
Eu irei atualizar aqui se acontecer alguma queda novamente, mas, depois de ter atualizado isto tudo, por favor, me respondam o seguinte: Й possнvel que tenha sido a include antiga?
Por favor, responda aqui apenas se tiver uma resposta concreta e fundamentada!
Obrigado a todos.
Pensei tambйm ser algum exploit, entгo eu adicionei no server.cfg as linhas: messageholelimit e ackslimit.
Porйm, mesmo assim, o LAG comeзou (logo apуs um jogador ter saнdo do servidor, DETALHE: foi DO NADA, pois houve saнda / entrada de jogadores no servidor antes deste em questгo).
Eu reiniciei o servidor e, para a minha surpresa, o LAG havia parado (foi aн que eu percebi que o LAG causado nгo era por um exploit).
Eu deduzi entгo que teria sido a minha include de salvamento, que havia sido atualizada hб pouco... Antes, eu estava usando variбveis globais para tudo, exemplo: new File:bCini7_Archive_File; no inнcio da include, e nгo apenas nas funзхes em que ela й utilizada.
Isto poderia ter acarretado em algo? Em um loop infinito, ou algo deste tipo?
Vale citar que eu jб mudei tudo e jб fiz mais algumas mudanзas (na prуpria include bCini7), sendo que a include atual estб desta forma:
pawn Код:
// Include bCini7
#define bCini7_Open fopen
#define bCini7_Exists fexist
#define bCini7_Write fwrite
#define bCini7_Read fread
#define bCini7_Close fclose
#define bCini7_Create(%0) if(!bCini7_Exists(%0)) bCini7_Close(bCini7_Open(%0,io_write)) && bCini7_OpenArchive(%0)
#define bCini7_Delete(%0) if(bCini7_Exists(%0)) fremove(%0)
// Variables
stock bCini7_Archive_Name[64] = "null",bCini7_Archive_Line[100][64],bCini7_Archive_Value[100][64],bCini7_Lines_Archive = 1,bCini7_Line_ID,bool:bCini7_Archive_Is_Used,bCini7_File_Var[64];
// Definitions
stock bCini7_Archive_Format_2[128];
#define bCini7_SetInt(%0,%1,%2) format(bCini7_Archive_Format_2,128,"%d",%2) && bCini7_SetText(%0,%1,bCini7_Archive_Format_2)
#define bCini7_SetFloat(%0,%1,%2) format(bCini7_Archive_Format_2,128,"%.2f",%2) && bCini7_SetText(%0,%1,bCini7_Archive_Format_2)
#define bCini7_Log(%0,%1) new File:bCini7_File_Open_2 = bCini7_Open(%0,io_append); bCini7_Write(bCini7_File_Open_2,%1) && bCini7_Close(bCini7_File_Open_2)
// Used functions
stock bCini7_SetText(archive[],line[],value[])
{
if(bCini7_Lines_Archive ^ 100)
{
bCini7_Create(archive);
bCini7_OpenArchive(archive);
bCini7_Line_ID = GetSVarInt(line);
if(!bCini7_Line_ID)
{
SetSVarInt(line,bCini7_Lines_Archive);
bCini7_Line_ID = bCini7_Lines_Archive;
++bCini7_Lines_Archive;
}
strunpack(bCini7_Archive_Line[bCini7_Line_ID],line);
strunpack(bCini7_Archive_Value[bCini7_Line_ID],value);
bCini7_Archive_Is_Used = true;
}
return 1;
}
stock bCini7_ReadText(archive[],line[])
{
bCini7_OpenArchive(archive);
return bCini7_Archive_Value[GetSVarInt(line)];
}
stock bCini7_ReadInt(archive[],line[])
{
bCini7_OpenArchive(archive);
return strval(bCini7_Archive_Value[GetSVarInt(line)]);
}
stock Float:bCini7_ReadFloat(archive[],line[])
{
bCini7_OpenArchive(archive);
return floatstr(bCini7_Archive_Value[GetSVarInt(line)]);
}
stock bCini7_IsSet(archive[],line[])
{
bCini7_OpenArchive(archive);
return GetSVarInt(line);
}
stock bCini7_DeleteSet(archive[],line[])
{
if(bCini7_Exists(archive)) // Is needed
{
bCini7_OpenArchive(archive);
bCini7_Line_ID = GetSVarInt(line);
if(bCini7_Line_ID)
{
DeleteSVar(bCini7_Archive_Line[bCini7_Line_ID]);
bCini7_Archive_Line[bCini7_Line_ID][0] = 0;
bCini7_Archive_Value[bCini7_Line_ID][0] = 0;
bCini7_Archive_Is_Used = true;
}
}
return 1;
}
stock bCini7_Copy(archive_1[],archive_2[],bool:delete_archive)
{
if(bCini7_Exists(archive_1))
{
if(!bCini7_Exists(archive_2))
{
bCini7_OpenArchive(archive_1);
new bCini7_Archive_Format[128],File:bCini7_File_Open = bCini7_Open(archive_2,io_write);
for(new bCini7_Var_x; bCini7_Var_x <= bCini7_Lines_Archive; ++bCini7_Var_x)
{
format(bCini7_Archive_Format,128,"%s=%s\r\n",bCini7_Archive_Line[bCini7_Var_x],bCini7_Archive_Value[bCini7_Var_x]);
if(bCini7_Archive_Line[bCini7_Var_x][0])
{
if(bCini7_Archive_Value[bCini7_Var_x][0])
{
bCini7_Write(bCini7_File_Open,bCini7_Archive_Format);
}
}
}
bCini7_Close(bCini7_File_Open);
if(delete_archive == true)
{
bCini7_Delete(archive_1);
}
}
}
return 1;
}
stock bCini7_ChangeLine(archive[],line[],name[])
{
if(bCini7_Exists(archive)) // Is needed
{
bCini7_OpenArchive(archive);
bCini7_Line_ID = GetSVarInt(line);
strunpack(bCini7_Archive_Line[bCini7_Line_ID],name);
bCini7_Archive_Is_Used = true;
}
return 1;
}
// Unused functions
stock bCini7_OpenArchive(archive[])
{
if(strcmp(bCini7_Archive_Name,archive,false))
{
if(bCini7_Exists(archive))
{
bCini7_CloseArchive();
strunpack(bCini7_Archive_Name,archive);
new File:bCini7_File_Open = bCini7_Open(archive,io_read),bCini7_System_Lines[2];
while(bCini7_Read(bCini7_File_Open,bCini7_File_Var))
{
if(bCini7_File_Var[0])
{
if(bCini7_File_Var[0] >= 255)
{
strdel(bCini7_File_Var,0,1);
}
bCini7_System_Lines[0] = strlen(bCini7_File_Var);
if(bCini7_File_Var[bCini7_System_Lines[0]-1] == '\r' || bCini7_File_Var[bCini7_System_Lines[0]-1] == '\n')
{
bCini7_File_Var[bCini7_System_Lines[0]-1] = 0;
}
if(bCini7_File_Var[bCini7_System_Lines[0]-2] == '\r' || bCini7_File_Var[bCini7_System_Lines[0]-2] == '\n')
{
bCini7_File_Var[bCini7_System_Lines[0]-2] = 0;
}
bCini7_System_Lines[1] = strfind(bCini7_File_Var,"=");
strmid(bCini7_Archive_Line[bCini7_Lines_Archive],bCini7_File_Var,0,bCini7_System_Lines[1],bCini7_System_Lines[1]+1);
strmid(bCini7_Archive_Value[bCini7_Lines_Archive],bCini7_File_Var,bCini7_System_Lines[1]+1,bCini7_System_Lines[0]);
SetSVarInt(bCini7_Archive_Line[bCini7_Lines_Archive],bCini7_Lines_Archive);
++bCini7_Lines_Archive;
}
}
bCini7_Close(bCini7_File_Open);
}
}
return 1;
}
bCini7_CloseArchive()
{
if(!bCini7_Exists(bCini7_Archive_Name) || bCini7_Archive_Is_Used == false)
{
for(new bCini7_Var_x; bCini7_Var_x <= bCini7_Lines_Archive; ++bCini7_Var_x)
{
DeleteSVar(bCini7_Archive_Line[bCini7_Var_x]);
bCini7_Archive_Line[bCini7_Var_x][0] = 0;
bCini7_Archive_Value[bCini7_Var_x][0] = 0;
}
}
else
{
new bCini7_Archive_Format[128],File:bCini7_File_Open = bCini7_Open(bCini7_Archive_Name,io_write);
for(new bCini7_Var_x; bCini7_Var_x <= bCini7_Lines_Archive; ++bCini7_Var_x)
{
if(bCini7_Archive_Line[bCini7_Var_x][0])
{
if(bCini7_Archive_Value[bCini7_Var_x][0])
{
format(bCini7_Archive_Format,128,"%s=%s\r\n",bCini7_Archive_Line[bCini7_Var_x],bCini7_Archive_Value[bCini7_Var_x]);
bCini7_Write(bCini7_File_Open,bCini7_Archive_Format);
}
}
DeleteSVar(bCini7_Archive_Line[bCini7_Var_x]);
bCini7_Archive_Line[bCini7_Var_x][0] = 0;
bCini7_Archive_Value[bCini7_Var_x][0] = 0;
}
bCini7_Close(bCini7_File_Open);
}
bCini7_Archive_Name = "null";
bCini7_Lines_Archive = 1;
bCini7_Archive_Is_Used = false;
}
// End of include
Por favor, responda aqui apenas se tiver uma resposta concreta e fundamentada!
Obrigado a todos.