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);
+ PlayerState ps = PS(this);
+ if (!ps) return; // initial connect
+ PS(this) = NULL;
+ if (ps.m_client != this) return; // don't own state, spectator
+ FOREACH_CLIENT(PS(it) == ps, { PS(it) = NULL; });
+ remove(ps);
+
+ Inventory_delete(this);
}
void GetCvars(entity this, int);
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); }
+ if (IS_REAL_CLIENT(this)) { PlayerStats_PlayerBasic_CheckUpdate(this); }
// TODO: fold all of these into ClientState
void bot_clientdisconnect(entity this);
void W_HitPlotClose(entity this);
void anticheat_report(entity this);
-void playerdemo_shutdown();
+void playerdemo_shutdown(entity this);
void entcs_detach(entity this);
void accuracy_free(entity this);
void ClientData_Detach(entity this);
W_HitPlotClose(this);
anticheat_report(this);
- playerdemo_shutdown();
+ playerdemo_shutdown(this);
entcs_detach(this);
- accuracy_free(self);
+ accuracy_free(this);
ClientData_Detach(this);
- PlayerScore_Detach(self);
+ PlayerScore_Detach(this);
}