This error appears at server console when player reliable channel is overflowed.
I have noticed that this happens in two different situations:
- Player loses connection or crashed and all data packets start to accumulate
- Server is sending too much data for him
That can't be fixed at all, because depends on player network.
But we can reduce the overflow on player.
First step. Configure your 'sv_timeout' cvar.
Code:
sv_timeout - Controls how long before the server disconnects a client that has stopped responding.
This isn't applied when player is AFK, only when client game doesn't receive any data packet.
Default value is 60 seconds, sooo many seconds.
I'm using right now 20 seconds and all works fine. But this can be reduced to 15 or 10 seconds.
Be careful about players that lose connection for some seconds.
Second step. Check your plugins
Plugins sending too many reliable messages like show_hudmessage, ShowSyncHud, show_dhudmessage, client_print, etc.
Try to reduce the calls.
I will expose one EXAMPLE.
In my case, I had problems with one plugin doing like this:
PHP Code:
new g_MsgSync
public plugin_init()
{
register_event("Damage", "event_damage", "b", "2!0", "3=0", "4!0")
g_MsgSync = CreateHudSyncObj()
}
public event_damage(id)
{
static attacker; attacker = get_user_attacker(id)
static damage; damage = read_data(2)
set_hudmessage(255, 0, 0, 0.45, 0.50, 2, 0.1, 2.0, 0.1, 0.1, -1)
ShowSyncHudMsg(id, g_MsgSync, "%i", damage)
}
Imagine: one player with 30k health and 20 players shooting him.
Every player doing damage is a new HUD shown. Many many calls.
This can produce player that receives damage being overflowed.
How to fix? Well, maybe trying to reduce the HUD calls.
Idea: Only show a new HUD if damage is higher or X seconds passed:
PHP Code:
new g_MsgSync
new Float:g_fLastDmgShowed[33]
new g_iLastDamageVic[33]
public plugin_init()
{
register_event("Damage", "event_damage", "b", "2!0", "3=0", "4!0")
g_MsgSync = CreateHudSyncObj()
}
public event_damage(id)
{
static attacker; attacker = get_user_attacker(id)
static damage; damage = read_data(2)
// To prevent sending too much HUDs to victims
static Float:gametime; gametime = get_gametime()
if (damage > g_iLastDamageVic[id] || gametime - g_fLastDmgShowed[id] >= 1.0)
{
set_hudmessage(255, 0, 0, 0.45, 0.50, 2, 0.1, 2.0, 0.1, 0.1, -1)
ShowSyncHudMsg(id, g_MsgSync, "%i", damage)
g_fLastDmgShowed[id] = gametime
g_iLastDamageVic[id] = damage
}
}