#pragma semicolon 1
#include <sourcemod>
new Handle:hTikeRateServer;
new iTikeRateServer;
public Plugin:myinfo =
{
name = "L4D TickRate Tonggle",
author = "Figa",
description = "Switch the server and client configuration in accordance with the tickrate server.",
version = "1.1",
url = "http://fiksiki.3dn.ru"
};
public OnPluginStart()
{
hTikeRateServer = CreateConVar("tr_server", "66", "Tickrate server (33/66/100). Delete all rate settings in server.cfg for this to work.", FCVAR_NONE|FCVAR_SPONLY);
HookConVarChange(hTikeRateServer, ConVarChanged_TikeRate);
iTikeRateServer = GetConVarInt(hTikeRateServer);
SetServerTickRate();
}
public ConVarChanged_TikeRate(Handle:convar, const String:oldValue[], const String:newValue[])
{
SetServerTickRate();
}
public OnMapStart()
{
iTikeRateServer = GetConVarInt(hTikeRateServer);
if (iTikeRateServer == 33) SetConVarInt(FindConVar("fps_max"), 33);
else if (iTikeRateServer == 66) SetConVarInt(FindConVar("fps_max"), 66);
else if (iTikeRateServer == 100) SetConVarInt(FindConVar("fps_max"), 105);
}
SetServerTickRate()
{
iTikeRateServer = GetConVarInt(hTikeRateServer);
if (iTikeRateServer == 33)
{
SetConVarInt(FindConVar("sv_maxrate"), 33000);
SetConVarInt(FindConVar("sv_minrate"), 15000);
SetConVarInt(FindConVar("sv_mincmdrate"), 15);
SetConVarInt(FindConVar("sv_maxcmdrate"), 33);
SetConVarInt(FindConVar("sv_minupdaterate"), 15);
SetConVarInt(FindConVar("sv_maxupdaterate"), 33);
SetConVarInt(FindConVar("net_splitpacket_maxrate"), 15000);
SetConVarInt(FindConVar("sv_client_min_interp_ratio"), 1);
SetConVarInt(FindConVar("sv_client_max_interp_ratio"), 2);
SetConVarInt(FindConVar("fps_max"), 33);
SetConVarFloat(FindConVar("nb_update_frequency"), 0.1);
SetClientTickRate(33);
}
else if (iTikeRateServer == 66)
{
SetConVarInt(FindConVar("sv_maxrate"), 66000);
SetConVarInt(FindConVar("sv_minrate"), 33000);
SetConVarInt(FindConVar("sv_mincmdrate"), 33);
SetConVarInt(FindConVar("sv_maxcmdrate"), 66);
SetConVarInt(FindConVar("sv_minupdaterate"), 33);
SetConVarInt(FindConVar("sv_maxupdaterate"), 66);
SetConVarInt(FindConVar("net_splitpacket_maxrate"), 33000);
SetConVarInt(FindConVar("sv_client_min_interp_ratio"), 0);
SetConVarInt(FindConVar("sv_client_max_interp_ratio"), 2);
SetConVarInt(FindConVar("fps_max"), 66);
SetConVarFloat(FindConVar("nb_update_frequency"), 0.036);
SetClientTickRate(66);
}
else if (iTikeRateServer == 100)
{
SetConVarInt(FindConVar("sv_maxrate"), 0);
SetConVarInt(FindConVar("sv_minrate"), 66000);
SetConVarInt(FindConVar("sv_mincmdrate"), 66);
SetConVarInt(FindConVar("sv_maxcmdrate"), 100);
SetConVarInt(FindConVar("sv_minupdaterate"), 66);
SetConVarInt(FindConVar("sv_maxupdaterate"), 100);
SetConVarInt(FindConVar("net_splitpacket_maxrate"), 66000);
SetConVarInt(FindConVar("sv_client_min_interp_ratio"), 0);
SetConVarInt(FindConVar("sv_client_max_interp_ratio"), 2);
SetConVarInt(FindConVar("fps_max"), 105);
SetConVarFloat(FindConVar("nb_update_frequency"), 0.03);
SetClientTickRate(100);
}
else SetFailState("Please enter a valid tikerate (33/66/100)");
}
public OnClientPostAdminCheck(client)
{
if (iTikeRateServer == 33) ClientCommand(client, "cl_updaterate 33; cl_cmdrate 33; rate 15000");
else if (iTikeRateServer == 66) ClientCommand(client, "cl_updaterate 66; cl_cmdrate 66; rate 30000");
else if (iTikeRateServer == 100) ClientCommand(client, "cl_updaterate 100; cl_cmdrate 100; rate 30000");
else SetFailState("Please enter a valid tikerate (33/66/100)");
}
SetClientTickRate(rate)
{
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i) && !IsFakeClient(i))
{
if (rate == 33) ClientCommand(i, "cl_updaterate 33; cl_cmdrate 33; rate 15000");
else if (rate == 66) ClientCommand(i, "cl_updaterate 66; cl_cmdrate 66; rate 30000");
else if (rate == 100) ClientCommand(i, "cl_updaterate 100; cl_cmdrate 100; rate 30000");
}
}
}