X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fstate.qc;h=a9bc3e5e3cf8aa379ead84d3cc37163b70e46df1;hb=9e84ff8daa3826ef32e2891a7c5224a7cd436d23;hp=21e009022145aa9bbcef21d404190f8e5abed328;hpb=37cf62041a76248472ef6a78feaaed33e35a2260;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/state.qc b/qcsrc/common/state.qc index 21e009022..a9bc3e5e3 100644 --- a/qcsrc/common/state.qc +++ b/qcsrc/common/state.qc @@ -12,12 +12,16 @@ void PlayerState_attach(entity 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; + PlayerState ps = PS(this); + if (!ps) return; // initial connect + PS(this) = NULL; - Inventory_delete(self); + if (ps.m_client != this) return; // don't own state, spectator + + FOREACH_CLIENT(PS(it) == ps, { PS(it) = NULL; }); + delete(ps); + + Inventory_delete(this); } void GetCvars(entity this, int); @@ -37,14 +41,12 @@ void ClientState_attach(entity this) GetCvars(this, 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); + PlayerStats_PlayerBasic_CheckUpdate(this); ClientData_Attach(this); accuracy_init(this); entcs_attach(this); @@ -57,8 +59,8 @@ void ClientState_attach(entity this) void bot_clientdisconnect(entity this); void W_HitPlotClose(entity this); -void anticheat_report(entity this); -void playerdemo_shutdown(); +void anticheat_report_to_eventlog(entity this); +void playerdemo_shutdown(entity this); void entcs_detach(entity this); void accuracy_free(entity this); void ClientData_Detach(entity this); @@ -66,7 +68,7 @@ void PlayerScore_Detach(entity this); void ClientState_detach(entity this) { - remove(CS(this)); + delete(CS(this)); this._cs = NULL; GetCvars(this, -1); // free cvars @@ -74,10 +76,10 @@ void ClientState_detach(entity this) bot_clientdisconnect(this); W_HitPlotClose(this); - anticheat_report(this); - playerdemo_shutdown(); + anticheat_report_to_eventlog(this); + playerdemo_shutdown(this); entcs_detach(this); - accuracy_free(self); + accuracy_free(this); ClientData_Detach(this); - PlayerScore_Detach(self); + PlayerScore_Detach(this); }