Created
February 11, 2022 05:03
-
-
Save SanjaySRocks/8c54b03bb21fd58a2120541855eb9aa8 to your computer and use it in GitHub Desktop.
Server sleeps when no player on server to reduce load on cpu
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Author: https://github.com/djearthquake | |
#include amxmodx | |
#include amxmisc | |
#include engine_stocks | |
#define MAX_PLAYERS 32 | |
#if !defined client_disconnect | |
#define client_disconnected client_disconnect | |
#endif | |
new const SzRope_msg[]="Plugin paused due to env_rope would be invisible." | |
new g_timing, g_iTic_quota, g_iTic_sleep, g_iTic; | |
public plugin_init() | |
{ | |
register_plugin("Variable sys_ticrate", "B", ".sρiηX҉."); | |
g_timing = register_cvar("sys_timing", "1"); //0|1 disables|enables plugin. | |
g_iTic_sleep = register_cvar("sys_sleep", "32"); //Tic hibernation rate. | |
g_iTic_quota = register_cvar("sys_quota", "32"); //Tic rate quota. | |
g_iTic = get_cvar_pointer("sys_ticrate"); //Base tic rate. Only used to launch server with. | |
set_task(7.5, "@Cpu_saver", 1541,_,_,"b") | |
} | |
public client_putinserver(id) | |
if (get_pcvar_num(g_timing) == 1) | |
{ | |
remove_task(1541) | |
if( find_ent(-1,"env_rope") || find_ent(-1,"env_electrified_wire") ) //Rope can disappear over 70fps. | |
{ | |
set_pcvar_num(g_iTic,70) | |
log_amx SzRope_msg | |
server_print "Tic_setting:%i",get_pcvar_num(g_iTic) | |
pause("a") | |
} | |
else if(is_user_connected(id) && !is_user_bot(id)) | |
{ | |
@set_tic() | |
} | |
else server_print "bot detected!" | |
set_task(7.5, "@Cpu_saver", 1541,_,_,"b") | |
} | |
public client_remove(id) | |
{ | |
(get_pcvar_num(g_timing) && iPlayers() < 2) ? set_pcvar_num(g_iTic,get_pcvar_num(g_iTic_sleep)) : @set_tic() | |
server_print "Tic_setting:%i",get_pcvar_num(g_iTic) | |
} | |
stock iPlayers() | |
{ | |
new players[ MAX_PLAYERS ],iHeadcount;get_players(players,iHeadcount,"ch") | |
return iHeadcount | |
} | |
@set_tic() | |
{ | |
new iAlloted_Tic = iPlayers() ? get_pcvar_num(g_iTic_quota)*iPlayers() : get_pcvar_num(g_iTic_sleep) | |
set_pcvar_num(g_iTic, iAlloted_Tic ? iAlloted_Tic : g_iTic_sleep) | |
server_print "Tic_setting:%i",get_pcvar_num(g_iTic) | |
} | |
@Cpu_saver() | |
{ | |
new iPing,iLoss | |
new players[ MAX_PLAYERS ],iHeadcount;get_players(players,iHeadcount,"ch") | |
for(new lot;lot < sizeof players;lot++) | |
get_user_ping(players[lot],iPing,iLoss) | |
if(iLoss) | |
if(iLoss > 2) | |
{ | |
server_print "%i|%i",iPing,iLoss | |
set_pcvar_num g_iTic,iLoss > 1 ? 35 : 70 | |
server_print "Tic_setting:%i",get_pcvar_num(g_iTic) | |
log_amx "Adjusting tic based on turbulence." | |
} | |
else | |
@set_tic() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment