From 2c3ebf71f6ec09b5042782909fb89dfa33afaff8 Mon Sep 17 00:00:00 2001 From: div0 Date: Mon, 30 Jun 2008 06:39:41 +0000 Subject: [PATCH] sv_maxidle system; add #defines for buttons git-svn-id: svn://svn.icculus.org/nexuiz/trunk@3737 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_client.qc | 52 ++++++++++++++++++++++++++++-- data/qcsrc/server/cl_physics.qc | 13 +++++++- data/qcsrc/server/defs.qh | 13 ++++++++ data/qcsrc/server/miscfunctions.qc | 2 ++ 4 files changed, 77 insertions(+), 3 deletions(-) diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index ae8aaf3ea..bc2935900 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -648,7 +648,7 @@ void PutClientInServer (void) self.bot_attack = TRUE; self.statdraintime = time + 5; - self.button0 = self.button1 = self.button2 = self.button3 = 0; + self.button0 = self.button2 = self.button3 = 0; if(self.killcount == -666) { self.killcount = 0; @@ -700,7 +700,9 @@ SetNewParms */ void SetNewParms (void) { - + // initialize parms for a new player + print("SetNewParms\n"); + parm1 = -(86400 * 366); } /* @@ -710,7 +712,23 @@ SetChangeParms */ void SetChangeParms (void) { + // save parms for level change + print("SetChangeParms\n"); + parm1 = self.parm_idlesince - time; +} +/* +============= +DecodeLevelParms +============= +*/ +void DecodeLevelParms (void) +{ + // load parms + print("DecodeLevelParms\n"); + self.parm_idlesince = parm1; + if(self.parm_idlesince == -(86400 * 366)) + self.parm_idlesince = time; } /* @@ -917,6 +935,7 @@ Called when a client connects to the server ============= */ string ColoredTeamName(float t); +void DecodeLevelParms (void); //void dom_player_join_team(entity pl); void ClientConnect (void) { @@ -931,6 +950,8 @@ void ClientConnect (void) return; } + DecodeLevelParms(); + self.classname = "player_joining"; self.flags = self.flags | FL_CLIENT; self.version_nagtime = time + 10 + random() * 10; @@ -2032,6 +2053,7 @@ PlayerPostThink Called every frame for each client after the physics are run ============= */ +.float idlekick_lasttimeleft; void PlayerPostThink (void) { // Savage: Check for nameless players @@ -2040,6 +2062,32 @@ void PlayerPostThink (void) stuffcmd(self, "seta _cl_name Player\n"); } + if(sv_maxidle) + { + float timeleft; + timeleft = ceil(sv_maxidle - (time - self.parm_idlesince)); + if(timeleft <= 0) + { + bprint("^3", self.netname, "^3 was kicked for idling.\n"); + play2(self, "announcer/robotic/terminated.ogg"); + dropclient(self); + return; + } + else if(timeleft <= 10) + { + if(timeleft != self.idlekick_lasttimeleft) + { + centerprint_atprio(self, CENTERPRIO_IDLEKICK, strcat("^3Stop idling!\n^3Disconnecting in ", ftos(timeleft), "...")); + play2(self, strcat("announcer/robotic/", ftos(timeleft), ".ogg")); + } + } + else + { + centerprint_expire(self, CENTERPRIO_IDLEKICK); + } + self.idlekick_lasttimeleft = timeleft; + } + if(self.classname == "player") { CheckRules_Player(); UpdateChatBubble(); diff --git a/data/qcsrc/server/cl_physics.qc b/data/qcsrc/server/cl_physics.qc index 27b76bac0..01c8df669 100644 --- a/data/qcsrc/server/cl_physics.qc +++ b/data/qcsrc/server/cl_physics.qc @@ -110,14 +110,25 @@ void() CheckWaterJump = } }; +.vector movement_old; +.float buttons_old; void Nixnex_GiveCurrentWeapon(); void SV_PlayerPhysics() { local vector wishvel, wishdir, v; - local float wishspeed, f, maxspd_mod, spd, maxairspd, airaccel, swampspd_mod, shtest_score; + local float wishspeed, f, maxspd_mod, spd, maxairspd, airaccel, swampspd_mod, shtest_score, buttons; string temps; + buttons = self.BUTTON_ATCK + 2 * self.BUTTON_JUMP + 4 * self.BUTTON_ATCK2 + 8 * self.BUTTON_ZOOM + 16 * self.BUTTON_CROUCH + 32 * self.BUTTON_HOOK + 64 * self.BUTTON_USE; + if(buttons != self.buttons_old) + self.parm_idlesince = time; + self.buttons_old = buttons; + + if(self.movement != self.movement_old) + self.parm_idlesince = time; + self.movement_old = self.movement; + if(time > self.shtest_next) { if(self.shtest_next > 0) diff --git a/data/qcsrc/server/defs.qh b/data/qcsrc/server/defs.qh index c3ab4153a..c37944ca4 100644 --- a/data/qcsrc/server/defs.qh +++ b/data/qcsrc/server/defs.qh @@ -1,6 +1,16 @@ #define MAPINFO float require_spawnfunc_prefix; // if this float exists, only functions with spawnfunc_ name prefix qualify as spawn functions +#define BUTTON_ATCK button0 +#define BUTTON_JUMP button2 +#define BUTTON_ATCK2 button3 +#define BUTTON_ZOOM button4 +#define BUTTON_CROUCH button5 +#define BUTTON_HOOK button6 +#define BUTTON_INFO button7 +#define BUTTON_CHAT buttonchat +#define BUTTON_USE buttonuse + // Globals float g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_lms, g_runematch; @@ -432,3 +442,6 @@ float have_team_spawns; void Damage (entity targ, entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force); float lockteams; + +.float parm_idlesince; +float sv_maxidle; diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 474006b3e..ce70b9929 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -652,6 +652,7 @@ string decolorize(string s) #define CENTERPRIO_VOTE 4 #define CENTERPRIO_NORMAL 5 #define CENTERPRIO_MAPVOTE 9 +#define CENTERPRIO_IDLEKICK 50 #define CENTERPRIO_ADMIN 99 .float centerprint_priority; .float centerprint_expires; @@ -766,6 +767,7 @@ void readlevelcvars(void) g_rocketarena = cvar("g_rocketarena"); g_vampire = cvar("g_vampire"); g_tourney = cvar("g_tourney"); + sv_maxidle = cvar("sv_maxidle"); g_pickup_shells = cvar("g_pickup_shells"); g_pickup_shells_max = cvar("g_pickup_shells_max"); -- 2.39.2