Akcslimit bug
#1

Код:
Warning: client exceeded 'ackslimit' 5.43.68.93:52706 (9840) Limit: 8000/sec
How to fix this?
Reply
#2

Do you have alot of code in OnPlayerUpdate, especially loops?

This is the result of too many messages per second between server and client.

A good example could be having "Kill(playerid)" inside OnPlayerDeath.
This one was posted a few weeks ago on the forum.

Killing a player called OnPlayerDeath, which killed the player again, calling OnPlayerDeath again.
A never-ending loop, which communicates alot between server and client.

The default max-limit is set to 3000 and using normal and good written code should never even come close to that.
You have 9840 messages sent between server and client every second.
Search for big loops, fast timers and such things to spot the problem.
Reply
#3

Код:
public OnPlayerUpdate(playerid)
{
	if(!IsPlayerConnected(playerid)) return 0;

	if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
	{
		for(new i = 1; i < sizeof(SpikeInfo); i++)
		{
			if(IsPlayerInRangeOfPoint(playerid, 3.0, SpikeInfo[i][sgX], SpikeInfo[i][sgY], SpikeInfo[i][sgZ]))
			{
				if(SpikeInfo[i][sgCreated] == 1)
				{
					new panels, tires;
					new carid = GetPlayerVehicleID(playerid);
					GetVehicleDamageStatus(carid, panels, doors, lights, tires);
					tires = encode_tires(1, 1, 1, 1);
					UpdateVehicleDamageStatus(carid, panels, doors, lights, tires);
					return 0;
				}
			}
		}
	}

	return 1;
}
This is my OnPlayerUpdate.
Reply
#4

BUMP!
Reply
#5

put this on the end line in server.cfg

ackslimit 100000
messageholelimit 100000
messageslimit 100000
playertimeout 100000
Reply
#6

I want to fix this,i set ackslimit on 40000 then block players because acks is bigger than ackslimit.
How to fix this?
Reply
#7

Код:
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
	{
		for(new i = 1; i < sizeof(SpikeInfo); i++)
		{
			if(IsPlayerInRangeOfPoint(playerid, 3.0, SpikeInfo[i][sgX], SpikeInfo[i][sgY], SpikeInfo[i][sgZ]))
			{
				if(SpikeInfo[i][sgCreated] == 1)
				{
					new panels, tires;
					new carid = GetPlayerVehicleID(playerid);
					GetVehicleDamageStatus(carid, panels, doors, lights, tires);
					tires = encode_tires(1, 1, 1, 1);
					UpdateVehicleDamageStatus(carid, panels, doors, lights, tires);
					return 0;
				}
			}
		}
	}
Man, OPU is called very frequently per second (something like timer for 40ms). Move this code to timer for 1000ms.
Reply
#8

Thanks man.I think this is fixed,if don't work i will open thread.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)