exceded ackslimits
#1

Hola, disculpen que moleste, їPuede ser esta la causa de que el servidor quede freezado?

Код:
warning client exceeded 'ackslimit' 186.118.235.103:49299 (7176) Limit: 5000/sec
Por quй despuйs de que sale ese error el juego se congela, figuran X cantidad de jugadores conectados y queda ahi pero no te deja entrar.

El comando que creo que es el problema:

Код:
CMD:smaletero(playerid, params[])
{
	if(GetPVarInt(playerid, "IsInArena") == 1) {
		return SendClientMessageEx(playerid, ERROR, "Info: No puedes usar este comando mientras estбs en el paintball.");
	}
	else if(GetPVarInt( playerid, "EventToken") != 0) {
		return SendClientMessageEx(playerid, ERROR, "Info: No puedes usar este comando mientras estбs en un evento.");
	}
	else if(Info[playerid][pConnectTime] < 2 || Info[playerid][pWRestricted] > 0)
	{
		return SendClientMessageEx(playerid, ERROR, "Info: No puedes usar este comando ya que tienes restricciуn de armas.");
	}
	else if(GetPVarInt(playerid, "GiveWeaponTimer") >= 1) {

		/*new
			szMessage[59];*/

		format(szMessage, sizeof(szMessage), "   Necesitas esperar %d segundos despuйs de haber agarrado un arma.", GetPVarInt(playerid, "GiveWeaponTimer"));
		return SendClientMessageEx(playerid, ERROR, szMessage);
	}
	new
		Float: fVehPos[3],
		iWeaponSlot = strval(params);
	for(new d = 0 ; d < MAX_PLAYERVEHICLES; d++) {
		if(PlayerVehicleInfo[playerid][d][pvId] != INVALID_PLAYER_VEHICLE_ID) {
			GetVehiclePos(PlayerVehicleInfo[playerid][d][pvId], fVehPos[0], fVehPos[1], fVehPos[2]);
			if(IsPlayerInRangeOfPoint(playerid, 5.0, fVehPos[0], fVehPos[1], fVehPos[2])) {
				if(isnull(params)) {

					/*new
						szMessage[64];*/

					format(szMessage, sizeof(szMessage), "*** %s - %s ***", GetPlayerNameEx(playerid), GetVehicleName(PlayerVehicleInfo[playerid][d][pvId]));
					SendClientMessageEx(playerid, COLOR_WHITE, szMessage);
					for(new s = 0; s < 3; s++) if(PlayerVehicleInfo[playerid][d][pvWeapons][s] != 0) {

						new
							szWeapon[16];

						GetWeaponName(PlayerVehicleInfo[playerid][d][pvWeapons][s], szWeapon, sizeof(szWeapon));
						format(szMessage, sizeof(szMessage), "Ranura %d: %s", s+1, szWeapon);
						SendClientMessageEx(playerid, COLOR_WHITE, szMessage);
					}
					return SendClientMessageEx(playerid, ERROR, "Uso: /smaletero (slot)");
				}
				else if(GetVehicleModel(PlayerVehicleInfo[playerid][d][pvId]) == 481 || GetVehicleModel(PlayerVehicleInfo[playerid][d][pvId]) == 509) {
					return SendClientMessageEx(playerid,COLOR_WHITE,"Ese vehiculo no tiene maletero.");
				}
				new
					engine, lights, alarm, doors, bonnet, boot, objective;
				GetVehicleParamsEx(PlayerVehicleInfo[playerid][d][pvId], engine, lights, alarm, doors, bonnet, boot, objective);

				if(boot == VEHICLE_PARAMS_OFF || boot == VEHICLE_PARAMS_UNSET)
				{
					return SendClientMessageEx(playerid, ERROR, "Info: No puedes tomar armas del maletero, si estб cerrado {5ABAFF}/v maletero{FFFFFF} para abrirlo.");
				}
				else if(iWeaponSlot > PlayerVehicleInfo[playerid][d][pvWepUpgrade] + 1)
				{
					return SendClientMessageEx(playerid, COLOR_WHITE, "Ranura especнficada Invбlida {5ABAFF}/mejorarmaletero{FFFFFF}.");
				}
				else if(PlayerVehicleInfo[playerid][d][pvWeapons][iWeaponSlot - 1] != 0) {
					/*new
						szMessage[128];*/
   				    if(Info[playerid][pManoDer] == 1) return SendClientMessageEx(playerid, ERROR, "Info: No puedes hacer esto si tienes algo en la mano derecha.");
    {
 		GivePlayerValidWeapon(playerid, PlayerVehicleInfo[playerid][d][pvWeapons][iWeaponSlot - 1]);
		PonerObjeto(playerid, 1, PlayerVehicleInfo[playerid][d][pvWeapons][iWeaponSlot - 1]);
					PlayerVehicleInfo[playerid][d][pvWeapons][iWeaponSlot - 1] = 0;
					format(szMessage, sizeof(szMessage), "Retiraste un %s del maletero de tu coche.", ObjetoInfo[PlayerVehicleInfo[playerid][d][pvWeapons][iWeaponSlot - 1]]);
					SendClientMessageEx(playerid, COLOR_WHITE, szMessage);
					format(szMessage, sizeof(szMessage), "* %s ha retirado un %s del maletero de su coche.", GetPlayerNameEx(playerid), ObjetoInfo[PlayerVehicleInfo[playerid][d][pvWeapons][iWeaponSlot - 1]]);
					return ProxDetector(30.0, playerid, szMessage, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
}
}
				else return SendClientMessageEx(playerid, ERROR, "Info: No tienes un arma almacenada en esa ranura.");
			}
  }
  }
		return 1;
  }
Reply
#2

El warning significa que el server esta enviando mucha informacion a un jugador, lo que provocaria lag.
Reply
#3

їQue puedo hacer? te agradecerнa

EDIT: Agrego

Код:
debug] Run time error 4: "Array index out of bounds"
[debug]  Accessing element at negative index -1
[debug] AMX backtrace:
[debug] #0 002fec98 in public cmd_smaletero (0x00000008, 0x015a9000) from nlrp.amx
[debug] #1 native CallLocalFunction () [080dfac0] from samp03svr
[debug] #2 0002c388 in ?? (0x00000008, 0x015a8fb8) from nlrp.amx
[debug] #3 0000a250 in public OnPlayerCommandText (0x00000008, 0x015a8fb8) from nlrp.amx
Reply
#4

Tendrбs demasiados objetos en un punto ? Algo similar posiblemente sea la causa ...
Reply
#5

PHP код:
                else if(PlayerVehicleInfo[playerid][d][pvWeapons][iWeaponSlot 1] != 0) {
                    
/*new
                        szMessage[128];*/
                       
if(Info[playerid][pManoDer] == 1) return SendClientMessageEx(playeridERROR"Info: No puedes hacer esto si tienes algo en la mano derecha.");
    { 
Revisa si iWeaponSlot-1 no es menor a 0 si es un array, recuerda que strval retorna 0 cuando no se pudo hacer la funciуn correctamente.

tambiйn estбs usando el string szMessage sin ser definido en SendClientMessageEx, y supongo que tu funciуn Ex es para colocar parбmetros extra por lo que no serнa necesario usar format, revisa eso.

El ackslimits probablemente no tenga nada que ver, probablemente un usuario estй enviando paquetes falsos al servidor.
Reply
#6

Server.cfg
Код:
messageholelimit 3000
messageslimit 500
ackslimit 3000
Reply
#7

Quote:
Originally Posted by jhgr16
Посмотреть сообщение
PHP код:
                else if(PlayerVehicleInfo[playerid][d][pvWeapons][iWeaponSlot 1] != 0) {
                    
/*new
                        szMessage[128];*/
                       
if(Info[playerid][pManoDer] == 1) return SendClientMessageEx(playeridERROR"Info: No puedes hacer esto si tienes algo en la mano derecha.");
    { 
Revisa si iWeaponSlot-1 no es menor a 0 si es un array, recuerda que strval retorna 0 cuando no se pudo hacer la funciуn correctamente.

tambiйn estбs usando el string szMessage sin ser definido en SendClientMessageEx, y supongo que tu funciуn Ex es para colocar parбmetros extra por lo que no serнa necesario usar format, revisa eso.

El ackslimits probablemente no tenga nada que ver, probablemente un usuario estй enviando paquetes falsos al servidor.
correcto. que pasa si pongo /smaletero 0?
el codigo va a intentar acceder a el elemento del array con el indice iWeaponSlot - 1, y iWeaponSlot va a valer 0, por lo tanto va a intentar acceder al elemento -1 del array, produciendo el error.
sobre el ack limit, opino lo mismo
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)