[AYUDA] Bug en el LAdmin...
#1

Hola, tengo un Bug con un sistema LAdmin que uso en mi servidor. u.u
Me compila bien, y todo... Pero cada vez que salgo del Servidor, este se congela, causando Lag y que se Bloquee el servidor, se bloquean los comandos, tanto en el servidor como en la consola.

Supe que era del Sistema Admin, porque probй con otros FS y todo normal. :c
Dнganme que puedo hacer. u.u
No quiero cambiarlo, porque lo he estado modificando, pero no tanto...

No se si tenga algo que ver con OnPlayerDisconnect o OnPlayerUpdate
Reply
#2

Que ladmin es?
Reply
#3

Revisa si tiene o no un bucle infinito ese FS. Saludos
Reply
#4

Revierte las ъltimas modificaciones desde que empezу a surgir el problema...

їPasa cuando cualquier sale del servidor? їA los demбs le deja de responder el servidor, pero no se apaga?

Fijate que variable estбs activando en onplayerdisconnect
Reply
#5

Quote:
Originally Posted by lucotaku1
Посмотреть сообщение
Que ladmin es?
lucotaku1: Es un LAdmin modificado de una versiуn del LAdmin 6.2 con 10 Niveles, etc...


Quote:
Originally Posted by Fluid016
Посмотреть сообщение
Revierte las ъltimas modificaciones desde que empezу a surgir el problema...

їPasa cuando cualquier sale del servidor? їA los demбs le deja de responder el servidor, pero no se apaga?

Fijate que variable estбs activando en onplayerdisconnect
Fluid016: No hice muchas modificaciones, sуlo repare un Bug de un Menu RCON en dialogo que cualquiera podнa usar, hasta que lo puse para Admin Nivel 10, y repare algunos diбlogos que hacнan interferencia con otros....

Acб estб mi funciуn OnPlayerDisconnect si la gustan revisar, la verdad es que no encuentro forma de quй algo ahн cause el Lag en el servidor, produciendo que cuando se desconecta un Player, este aparece todavнa conectado adentro del servidor, deja de responder el servidor y no responde el comando "exit" en la consola:

Код:
public OnPlayerDisconnect(playerid, reason)
{
    EstaLogueado[playerid] = false;
    Fallo[playerid] = 0;
    txdAlpha[0][playerid] = 0;
	txdAlpha[1][playerid] = 0;
    EntroAlEvento[playerid] = 0;
    EventoCmd[playerid] = 0;
    DudaEnviada[playerid] = 0;
	KillTimer(actualizaciones2[playerid]);
	new PlayerName[MAX_PLAYER_NAME];
	GetPlayerName(playerid, PlayerName, sizeof(PlayerName));

	if(ServerInfo[ConnectMessages] == 1)
 {
			switch (reason) {
			case 0:	format(str, sizeof(str), "%s [%d] Se ha Desconectado (Crash/Error de conexiуn)", PlayerName, playerid);
			case 1:	format(str, sizeof(str), "%s [%d] Se ha Desconectado (Salio)", PlayerName, playerid);
			case 2:	format(str, sizeof(str), "%s [%d] Se ha Desconectado (Kickeado/Baneado)", PlayerName, playerid);
			}
		for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && playerid != i)
		{
			if(PlayerInfo[i][Level] > 1) SendClientMessage(i,red,str);
		}
   			}


			  if(GetPVarInt(playerid, "Reconnecting") == 1)
    	{
        new iStr[128],
            iP[16];

        GetPVarString(playerid, "RecIP", iP, sizeof(iP));
        printf("%s", iP);

        format(iStr, sizeof(iStr), "unbanip %s", iP);

        SendRconCommand(iStr);
        SendRconCommand("reloadbans");

        SetPVarInt(playerid, "Reconnecting", 0);
    	}


	if(PlayerInfo[playerid][LoggedIn] == 1)	SavePlayer(playerid);
	if(udb_Exists(PlayerName2(playerid))) dUserSetINT(PlayerName2(playerid)).("loggedin",0);
  	PlayerInfo[playerid][LoggedIn] = 0;
	PlayerInfo[playerid][Level] = 0;
	PlayerInfo[playerid][pVip] 	= 0;
	PlayerInfo[playerid][Hide] = 0;
	PlayerInfo[playerid][Jailed] = 0;
	PlayerInfo[playerid][Frozen] = 0;
    EstaEnFly[playerid] = 0;
    YaUsoNuclear[playerid] = 0;
    BuscadoPorNuclear[playerid]=0;
    HanDesactivadaoLaBomba[playerid]=0;

	#if EnableTwoRcon == true
	PlayerInfo[playerid][MaxRcon] 	= 0;
	#endif

	IPDATA[playerid][Ignore] = false;

	if(PlayerInfo[playerid][Jailed] == 1) KillTimer( JailTimer[playerid] );
	if(PlayerInfo[playerid][Frozen] == 1) KillTimer( FreezeTimer[playerid] );
	if(ServerInfo[Locked] == 1)	KillTimer( LockKickTimer[playerid] );

	if(PlayerInfo[playerid][pCar] != -1) CarDeleter(PlayerInfo[playerid][pCar]);
	ADpm[playerid] = 0;

	#if defined ENABLE_SPEC
	for(new x=0; x<MAX_PLAYERS; x++)
	    if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && PlayerInfo[x][SpecID] == playerid)
   		   	AdvanceSpectate(x);
	#endif
//////////////
	if (EnDuelo[playerid]==1)
    {
      for (new i=1; i<=ARENAS; i++)
      {
         if ((Duelos[i][DesaId] == playerid || Duelos[i][DesafiadoId] == playerid) && (Duelos[i][Libre]==1))
         {
            Duelos[i][Libre] = 0;
            EnDuelo[Duelos[i][DesaId]] = 0;
            EnDuelo[Duelos[i][DesafiadoId]] = 0;
            if (playerid == Duelos[i][DesaId])
            {
                new string6[128];
               format(string6,sizeof(string6),"{ED1FE6}Duelo Info: %s a abandonado el servidor en medio de un duelo, %s es el ganador por default.",PlayerName2(playerid),PlayerName2(Duelos[i][DesafiadoId]));
               SendClientMessageToAll(COLOR_DUELO,string6);
               PlayerInfo[playerid][Dlose] ++;
               PlayerInfo[Duelos[i][DesafiadoId]][Dwin] ++;
               switch (i)
                {
                  case 1: {SetPlayerPos(Duelos[i][DesafiadoId],2347.3047,1575.4369,39.2732); SetPlayerFacingAngle(Duelos[i][DesafiadoId],270.8635); SetPlayerVirtualWorld(Duelos[i][DesafiadoId], 0);}
                  case 2: {SetPlayerPos(Duelos[i][DesafiadoId],2464.8000488281,2548.1999511719,10.89999961853); SetPlayerFacingAngle(Duelos[i][DesafiadoId],0.0); SetPlayerVirtualWorld(Duelos[i][DesafiadoId], 0);}
                  case 3: {SetPlayerPos(Duelos[i][DesafiadoId],2444.6999511719,2548.6999511719,10.89999961853); SetPlayerFacingAngle(Duelos[i][DesafiadoId],0.0); SetPlayerVirtualWorld(Duelos[i][DesafiadoId], 0);}
                  case 4: {SetPlayerPos(Duelos[i][DesafiadoId],2511.8999023438,2348.1000976563,10.800000190735); SetPlayerFacingAngle(Duelos[i][DesafiadoId],353.4433); SetPlayerVirtualWorld(Duelos[i][DesafiadoId], 0);}
               }
               for (new j=0; j<= MAX_PLAYERS; j++)
               {
                   if (ViendoDuelo[j] == i)
                   {
                       new str2[256];
                       format(str2,sizeof(str2),"~r~%s ~w~es el ganador del duelo",PlayerName2(Duelos[i][DesafiadoId]));
                     GameTextForPlayer(j,str2,5000,0);
                     ViendoDuelo[j] =-1;
                   }
               }
            }
            if (playerid == Duelos[i][DesafiadoId])
            {
                new string7[128];
               format(string7,sizeof(string7),"{ED1FE6}Duelo Info: %s a abandonado el servidor en medio de un duelo, %s es el ganador por default.",PlayerName2(playerid),PlayerName2(Duelos[i][DesaId]));
               SendClientMessageToAll(COLOR_DUELO,string7);
               PlayerInfo[playerid][Dlose] ++;
               PlayerInfo[Duelos[i][DesaId]][Dwin] ++;
               switch (i)
                {
                  case 1: {SetPlayerPos(Duelos[i][DesaId],2347.3047,1575.4369,39.2732); SetPlayerFacingAngle(Duelos[i][DesaId],270.8635); SetPlayerVirtualWorld(Duelos[i][DesaId], 0);}
                  case 2: {SetPlayerPos(Duelos[i][DesaId],1873.3582763672,1344.1617431641,25.673486709595); SetPlayerFacingAngle(Duelos[i][DesaId],0.0); SetPlayerVirtualWorld(Duelos[i][DesaId], 0);}
                  case 3: {SetPlayerPos(Duelos[i][DesaId],2444.6999511719,2548.6999511719,10.89999961853); SetPlayerFacingAngle(Duelos[i][DesaId],0.0); SetPlayerVirtualWorld(Duelos[i][DesaId], 0);}
                  case 4: {SetPlayerPos(Duelos[i][DesaId],2511.8999023438,2348.1000976563,10.800000190735); SetPlayerFacingAngle(Duelos[i][DesaId],353.4433); SetPlayerVirtualWorld(Duelos[i][DesaId], 0);}
               }
               for (new j=0; j<= MAX_PLAYERS; j++)
               {
                   if (ViendoDuelo[j] == i)
                   {
                       new str2[256];
                       format(str2,sizeof(str2),"~r~%s ~w~es el ganador del duelo",PlayerName2(Duelos[i][DesaId]));
                     GameTextForPlayer(j,str2,5000,0);
                     ViendoDuelo[j] =-1;
                     SetPlayerVirtualWorld(j, 0);
                   }
               }
            }
            Duelos[i][DesaId] = -1;
            Duelos[i][DesafiadoId] = -1;
            Duelos[i][ArmasId] = -1;
            return 1;
         }
      }
   }
   PlayerInfo[playerid][Noduelo] = false;
new OnLine;
for(new i, g = GetMaxPlayers(); i < g; i--)
if(IsPlayerConnected(i))
OnLine--;
return OnLine;
}
Reply
#6

Quote:
Originally Posted by Revelation
Посмотреть сообщение
lucotaku1: Es un LAdmin modificado de una versiуn del LAdmin 6.2 con 10 Niveles, etc...





Fluid016: No hice muchas modificaciones, sуlo repare un Bug de un Menu RCON en dialogo que cualquiera podнa usar, hasta que lo puse para Admin Nivel 10, y repare algunos diбlogos que hacнan interferencia con otros....

Acб estб mi funciуn OnPlayerDisconnect si la gustan revisar, la verdad es que no encuentro forma de quй algo ahн cause el Lag en el servidor, produciendo que cuando se desconecta un Player, este aparece todavнa conectado adentro del servidor, deja de responder el servidor y no responde el comando "exit" en la consola:

Код:
public OnPlayerDisconnect(playerid, reason)
{
    EstaLogueado[playerid] = false;
    Fallo[playerid] = 0;
    txdAlpha[0][playerid] = 0;
	txdAlpha[1][playerid] = 0;
    EntroAlEvento[playerid] = 0;
    EventoCmd[playerid] = 0;
    DudaEnviada[playerid] = 0;
	KillTimer(actualizaciones2[playerid]);
	new PlayerName[MAX_PLAYER_NAME];
	GetPlayerName(playerid, PlayerName, sizeof(PlayerName));

	if(ServerInfo[ConnectMessages] == 1)
 {
			switch (reason) {
			case 0:	format(str, sizeof(str), "%s [%d] Se ha Desconectado (Crash/Error de conexiуn)", PlayerName, playerid);
			case 1:	format(str, sizeof(str), "%s [%d] Se ha Desconectado (Salio)", PlayerName, playerid);
			case 2:	format(str, sizeof(str), "%s [%d] Se ha Desconectado (Kickeado/Baneado)", PlayerName, playerid);
			}
		for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && playerid != i)
		{
			if(PlayerInfo[i][Level] > 1) SendClientMessage(i,red,str);
		}
   			}


			  if(GetPVarInt(playerid, "Reconnecting") == 1)
    	{
        new iStr[128],
            iP[16];

        GetPVarString(playerid, "RecIP", iP, sizeof(iP));
        printf("%s", iP);

        format(iStr, sizeof(iStr), "unbanip %s", iP);

        SendRconCommand(iStr);
        SendRconCommand("reloadbans");

        SetPVarInt(playerid, "Reconnecting", 0);
    	}


	if(PlayerInfo[playerid][LoggedIn] == 1)	SavePlayer(playerid);
	if(udb_Exists(PlayerName2(playerid))) dUserSetINT(PlayerName2(playerid)).("loggedin",0);
  	PlayerInfo[playerid][LoggedIn] = 0;
	PlayerInfo[playerid][Level] = 0;
	PlayerInfo[playerid][pVip] 	= 0;
	PlayerInfo[playerid][Hide] = 0;
	PlayerInfo[playerid][Jailed] = 0;
	PlayerInfo[playerid][Frozen] = 0;
    EstaEnFly[playerid] = 0;
    YaUsoNuclear[playerid] = 0;
    BuscadoPorNuclear[playerid]=0;
    HanDesactivadaoLaBomba[playerid]=0;

	#if EnableTwoRcon == true
	PlayerInfo[playerid][MaxRcon] 	= 0;
	#endif

	IPDATA[playerid][Ignore] = false;

	if(PlayerInfo[playerid][Jailed] == 1) KillTimer( JailTimer[playerid] );
	if(PlayerInfo[playerid][Frozen] == 1) KillTimer( FreezeTimer[playerid] );
	if(ServerInfo[Locked] == 1)	KillTimer( LockKickTimer[playerid] );

	if(PlayerInfo[playerid][pCar] != -1) CarDeleter(PlayerInfo[playerid][pCar]);
	ADpm[playerid] = 0;

	#if defined ENABLE_SPEC
	for(new x=0; x<MAX_PLAYERS; x++)
	    if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && PlayerInfo[x][SpecID] == playerid)
   		   	AdvanceSpectate(x);
	#endif
//////////////
	if (EnDuelo[playerid]==1)
    {
      for (new i=1; i<=ARENAS; i++)
      {
         if ((Duelos[i][DesaId] == playerid || Duelos[i][DesafiadoId] == playerid) && (Duelos[i][Libre]==1))
         {
            Duelos[i][Libre] = 0;
            EnDuelo[Duelos[i][DesaId]] = 0;
            EnDuelo[Duelos[i][DesafiadoId]] = 0;
            if (playerid == Duelos[i][DesaId])
            {
                new string6[128];
               format(string6,sizeof(string6),"{ED1FE6}Duelo Info: %s a abandonado el servidor en medio de un duelo, %s es el ganador por default.",PlayerName2(playerid),PlayerName2(Duelos[i][DesafiadoId]));
               SendClientMessageToAll(COLOR_DUELO,string6);
               PlayerInfo[playerid][Dlose] ++;
               PlayerInfo[Duelos[i][DesafiadoId]][Dwin] ++;
               switch (i)
                {
                  case 1: {SetPlayerPos(Duelos[i][DesafiadoId],2347.3047,1575.4369,39.2732); SetPlayerFacingAngle(Duelos[i][DesafiadoId],270.8635); SetPlayerVirtualWorld(Duelos[i][DesafiadoId], 0);}
                  case 2: {SetPlayerPos(Duelos[i][DesafiadoId],2464.8000488281,2548.1999511719,10.89999961853); SetPlayerFacingAngle(Duelos[i][DesafiadoId],0.0); SetPlayerVirtualWorld(Duelos[i][DesafiadoId], 0);}
                  case 3: {SetPlayerPos(Duelos[i][DesafiadoId],2444.6999511719,2548.6999511719,10.89999961853); SetPlayerFacingAngle(Duelos[i][DesafiadoId],0.0); SetPlayerVirtualWorld(Duelos[i][DesafiadoId], 0);}
                  case 4: {SetPlayerPos(Duelos[i][DesafiadoId],2511.8999023438,2348.1000976563,10.800000190735); SetPlayerFacingAngle(Duelos[i][DesafiadoId],353.4433); SetPlayerVirtualWorld(Duelos[i][DesafiadoId], 0);}
               }
               for (new j=0; j<= MAX_PLAYERS; j++)
               {
                   if (ViendoDuelo[j] == i)
                   {
                       new str2[256];
                       format(str2,sizeof(str2),"~r~%s ~w~es el ganador del duelo",PlayerName2(Duelos[i][DesafiadoId]));
                     GameTextForPlayer(j,str2,5000,0);
                     ViendoDuelo[j] =-1;
                   }
               }
            }
            if (playerid == Duelos[i][DesafiadoId])
            {
                new string7[128];
               format(string7,sizeof(string7),"{ED1FE6}Duelo Info: %s a abandonado el servidor en medio de un duelo, %s es el ganador por default.",PlayerName2(playerid),PlayerName2(Duelos[i][DesaId]));
               SendClientMessageToAll(COLOR_DUELO,string7);
               PlayerInfo[playerid][Dlose] ++;
               PlayerInfo[Duelos[i][DesaId]][Dwin] ++;
               switch (i)
                {
                  case 1: {SetPlayerPos(Duelos[i][DesaId],2347.3047,1575.4369,39.2732); SetPlayerFacingAngle(Duelos[i][DesaId],270.8635); SetPlayerVirtualWorld(Duelos[i][DesaId], 0);}
                  case 2: {SetPlayerPos(Duelos[i][DesaId],1873.3582763672,1344.1617431641,25.673486709595); SetPlayerFacingAngle(Duelos[i][DesaId],0.0); SetPlayerVirtualWorld(Duelos[i][DesaId], 0);}
                  case 3: {SetPlayerPos(Duelos[i][DesaId],2444.6999511719,2548.6999511719,10.89999961853); SetPlayerFacingAngle(Duelos[i][DesaId],0.0); SetPlayerVirtualWorld(Duelos[i][DesaId], 0);}
                  case 4: {SetPlayerPos(Duelos[i][DesaId],2511.8999023438,2348.1000976563,10.800000190735); SetPlayerFacingAngle(Duelos[i][DesaId],353.4433); SetPlayerVirtualWorld(Duelos[i][DesaId], 0);}
               }
               for (new j=0; j<= MAX_PLAYERS; j++)
               {
                   if (ViendoDuelo[j] == i)
                   {
                       new str2[256];
                       format(str2,sizeof(str2),"~r~%s ~w~es el ganador del duelo",PlayerName2(Duelos[i][DesaId]));
                     GameTextForPlayer(j,str2,5000,0);
                     ViendoDuelo[j] =-1;
                     SetPlayerVirtualWorld(j, 0);
                   }
               }
            }
            Duelos[i][DesaId] = -1;
            Duelos[i][DesafiadoId] = -1;
            Duelos[i][ArmasId] = -1;
            return 1;
         }
      }
   }
   PlayerInfo[playerid][Noduelo] = false;
new OnLine;
for(new i, g = GetMaxPlayers(); i < g; i--)
if(IsPlayerConnected(i))
OnLine--;
return OnLine;
}
Por lo que veo este sistema es el que habia publicado creo David hace time, de lethal
despuйs hubo unos nuevos que intentaron cambiarlo 'dando modificaiones' pero yo le llamaria 'llenando de bugs todo el sistema' ya que todo esta demaciado mal por eso los problemas, quiza ayudaste ha que se daсara todo, revisa las funciones del Update y las ultimas que tocaste, (porque agregar niveles no daсa nada ni dialogos) quiza interferencia de el update de GM y sistema
Reply
#7

Si ami tambien me pasa en el ladmin6.2, todo esta bien pero te lagea mucho el server que ase que lo apage el server
Reply
#8

Muchos bucles y getplayername, recuerden que getplayername en onplayerdisconnect no funciona muy bien. Mejor hagance su propio sistema de admin, no es dificil.
Reply
#9

Quote:
Originally Posted by jotajeda
Посмотреть сообщение
Muchos bucles y getplayername, recuerden que getplayername en onplayerdisconnect no funciona muy bien. Mejor hagance su propio sistema de admin, no es dificil.
Ohh, Jotajeda comento un Post mio. <3 :'3

Un dнa que reanude mi trabajo en mi GM y revisaba este LAdmin por curiosidad, encontrй que el problema estaba al final de OnPlyerDisconnect, ya que ese Ladmin usaba un contador de Usuarios en un TextDraw, y cuando se desconectaba un usuario йste se Bloqueaba y quedaba congelado.

El problema estaba aquн:



PHP код:
public OnPlayerDisconnect(playeridreason)
{
//WEAS
new OnLine;
for(new 
iGetMaxPlayers(); gi--)
if(
IsPlayerConnected(i))
OnLine--;
return 
OnLine;

Total, hice mi propia modificaciуn del LAdmin original de LethaL mбs tarde, poniйndole lo necesario.

Igual gracias por la ayuda a todos. <3
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)