From e7486d6192776718649d9c4a68f8cff9f74ac400 Mon Sep 17 00:00:00 2001 From: TimePath Date: Sun, 13 Mar 2016 13:59:20 +1100 Subject: [PATCH] antilag: use ClientState --- qcsrc/common/_all.inc | 3 ++ qcsrc/common/state.qc | 83 ++++++++++++++++++++++++++++++++++++++ qcsrc/common/state.qh | 85 ++------------------------------------- qcsrc/server/antilag.qc | 27 +++++++------ qcsrc/server/cl_client.qc | 2 +- 5 files changed, 105 insertions(+), 95 deletions(-) create mode 100644 qcsrc/common/state.qc diff --git a/qcsrc/common/_all.inc b/qcsrc/common/_all.inc index 5ebc52886..78d2373e2 100644 --- a/qcsrc/common/_all.inc +++ b/qcsrc/common/_all.inc @@ -7,6 +7,9 @@ #include "mapinfo.qc" #include "playerstats.qc" +#ifdef SVQC + #include "state.qc" +#endif #include "util.qc" #ifndef CSQC diff --git a/qcsrc/common/state.qc b/qcsrc/common/state.qc new file mode 100644 index 000000000..226ff1ba5 --- /dev/null +++ b/qcsrc/common/state.qc @@ -0,0 +1,83 @@ +#include "state.qh" + +void Inventory_new(entity this); +void Inventory_delete(entity this); + +void PlayerState_attach(entity this) +{ + this._ps = NEW(PlayerState, this); + + Inventory_new(this); +} + +void PlayerState_detach(entity this) +{ + if (!PS(this)) return; // initial connect + FOREACH_CLIENT(PS(it) == PS(this), { PS(it) = NULL; }); + remove(PS(this)); + this._ps = NULL; + + Inventory_delete(self); +} + +void GetCvars(int); +void DecodeLevelParms(entity this); +void PlayerScore_Attach(entity this); +void ClientData_Attach(entity this); +void accuracy_init(entity this); +void entcs_attach(entity this); +void playerdemo_init(entity this); +void anticheat_init(entity this); +void W_HitPlotOpen(entity this); +void bot_clientconnect(entity this); + +void ClientState_attach(entity this) +{ + this._cs = NEW(ClientState, this); + + GetCvars(0); // get other cvars from player + + // TODO: xonstat elo.txt support, until then just 404s + if (false && IS_REAL_CLIENT(this)) { PlayerStats_PlayerBasic_CheckUpdate(this); } + + // TODO: fold all of these into ClientState + + DecodeLevelParms(this); + + PlayerScore_Attach(this); + ClientData_Attach(this); + accuracy_init(this); + entcs_attach(this); + playerdemo_init(this); + anticheat_init(this); + W_HitPlotOpen(this); + + bot_clientconnect(this); +} + +void bot_clientdisconnect(); +void W_HitPlotClose(entity this); +void anticheat_report(); +void playerdemo_shutdown(); +void entcs_detach(entity this); +void accuracy_free(entity this); +void ClientData_Detach(entity this); +void PlayerScore_Detach(entity this); + +void ClientState_detach(entity this) +{ + remove(CS(this)); + this._cs = NULL; + + GetCvars(-1); // free cvars + + bot_clientdisconnect(); + + W_HitPlotClose(this); + anticheat_report(); + playerdemo_shutdown(); + entcs_detach(this); + accuracy_free(self); + ClientData_Detach(this); + PlayerScore_Detach(self); +} diff --git a/qcsrc/common/state.qh b/qcsrc/common/state.qh index f5f0c4240..64ae3e7fe 100644 --- a/qcsrc/common/state.qh +++ b/qcsrc/common/state.qh @@ -30,27 +30,9 @@ ENDCLASS(PlayerState) PlayerState PS(entity this) { assert(IS_CLIENT(this)); return this._ps; } #endif -void Inventory_new(entity this); -void Inventory_delete(entity this); - // TODO: renew on death - -void PlayerState_attach(entity this) -{ - this._ps = NEW(PlayerState, this); - - Inventory_new(this); -} - -void PlayerState_detach(entity this) -{ - if (!PS(this)) return; // initial connect - FOREACH_CLIENT(PS(it) == PS(this), { PS(it) = NULL; }); - remove(PS(this)); - this._ps = NULL; - - Inventory_delete(self); -} +void PlayerState_attach(entity this); +void PlayerState_detach(entity this); /** * Purpose: common client state, usable on client and server @@ -74,64 +56,5 @@ ENDCLASS(ClientState) ClientState CS(entity this) { assert(IS_CLIENT(this)); assert(this._cs); return this._cs; } #endif -void GetCvars(int); -void DecodeLevelParms(entity this); -void PlayerScore_Attach(entity this); -void ClientData_Attach(entity this); -void accuracy_init(entity this); -void entcs_attach(entity this); -void playerdemo_init(entity this); -void anticheat_init(entity this); -void W_HitPlotOpen(entity this); -void bot_clientconnect(entity this); - -void ClientState_attach(entity this) -{ - this._cs = NEW(ClientState, this); - - GetCvars(0); // get other cvars from player - - // TODO: xonstat elo.txt support, until then just 404s - if (false && IS_REAL_CLIENT(this)) { PlayerStats_PlayerBasic_CheckUpdate(this); } - - // TODO: fold all of these into ClientState - - DecodeLevelParms(this); - - PlayerScore_Attach(this); - ClientData_Attach(this); - accuracy_init(this); - entcs_attach(this); - playerdemo_init(this); - anticheat_init(this); - W_HitPlotOpen(this); - - bot_clientconnect(this); -} - -void bot_clientdisconnect(); -void W_HitPlotClose(entity this); -void anticheat_report(); -void playerdemo_shutdown(); -void entcs_detach(entity this); -void accuracy_free(entity this); -void ClientData_Detach(entity this); -void PlayerScore_Detach(entity this); - -void ClientState_detach(entity this) -{ - remove(CS(this)); - this._cs = NULL; - - GetCvars(-1); // free cvars - - bot_clientdisconnect(); - - W_HitPlotClose(this); - anticheat_report(); - playerdemo_shutdown(); - entcs_detach(this); - accuracy_free(self); - ClientData_Detach(this); - PlayerScore_Detach(self); -} +void ClientState_attach(entity this); +void ClientState_detach(entity this); diff --git a/qcsrc/server/antilag.qc b/qcsrc/server/antilag.qc index 36734976c..6b80c945e 100644 --- a/qcsrc/server/antilag.qc +++ b/qcsrc/server/antilag.qc @@ -1,7 +1,8 @@ #if defined(CSQC) #elif defined(MENUQC) #elif defined(SVQC) - #include "../common/vehicles/all.qh" + #include + #include #include "antilag.qh" #endif @@ -22,13 +23,13 @@ void antilag_record(entity e, float t) if(e.vehicle) antilag_record(e.vehicle, t); - if(time < e.(antilag_times[e.antilag_index])) + if(time < CS(e).antilag_times[e.antilag_index]) return; e.antilag_index = e.antilag_index + 1; if(e.antilag_index >= ANTILAG_MAX_ORIGINS) e.antilag_index = 0; - e.(antilag_times[e.antilag_index]) = t; - e.(antilag_origins[e.antilag_index]) = e.origin; + CS(e).antilag_times[e.antilag_index] = t; + CS(e).antilag_origins[e.antilag_index] = e.origin; if(e.antilag_debug) te_spark(antilag_takebackorigin(e, t - e.antilag_debug), '0 0 0', 32); @@ -39,17 +40,17 @@ void antilag_record(entity e, float t) float antilag_find(entity e, float t) { for(int i = e.antilag_index; i > 0; --i) - if(e.(antilag_times[i]) >= t) - if(e.(antilag_times[i - 1]) < t) + if(CS(e).antilag_times[i] >= t) + if(CS(e).antilag_times[i - 1] < t) return i - 1; - if(e.(antilag_times[0]) >= t) - if(e.(antilag_times[ANTILAG_MAX_ORIGINS - 1]) < t) + if(CS(e).antilag_times[0] >= t) + if(CS(e).antilag_times[ANTILAG_MAX_ORIGINS - 1] < t) return ANTILAG_MAX_ORIGINS - 1; for(int i = ANTILAG_MAX_ORIGINS - 1; i > e.antilag_index + 1; --i) - if(e.(antilag_times[i]) >= t) - if(e.(antilag_times[i - 1]) < t) + if(CS(e).antilag_times[i] >= t) + if(CS(e).antilag_times[i - 1] < t) return i - 1; // if we get here, t is sandwiched nowhere, so let's assume it's in the present @@ -71,7 +72,7 @@ vector antilag_takebackorigin(entity e, float t) if (i1 >= ANTILAG_MAX_ORIGINS) i1 = 0; - return lerpv(e.(antilag_times[i0]), e.(antilag_origins[i0]), e.(antilag_times[i1]), e.(antilag_origins[i1]), t); + return lerpv(CS(e).antilag_times[i0], CS(e).antilag_origins[i0], CS(e).antilag_times[i1], CS(e).antilag_origins[i1], t); } vector antilag_takebackavgvelocity(entity e, float t0, float t1) @@ -122,8 +123,8 @@ void antilag_clear(entity e) antilag_restore(e); for (int i = 0; i < ANTILAG_MAX_ORIGINS; ++i) { - e.(antilag_times[i]) = -2342; - e.(antilag_origins[i]) = e.origin; + CS(e).antilag_times[i] = -2342; + CS(e).antilag_origins[i] = e.origin; } e.antilag_index = ANTILAG_MAX_ORIGINS - 1; // next one is 0 } diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index fb07e400b..026277dd6 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -23,7 +23,7 @@ #include "bot/navigation.qh" #include "../common/ent_cs.qh" -#include "../common/state.qh" +#include #include "../common/triggers/teleporters.qh" -- 2.39.2