]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/state.qc
dedicated_print: switch from `LOG_INFO` to `print`
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / state.qc
index 1e7582d79f673fe863fa809dd67af42670d18c41..d75e08027171aee5cf812333cb56367bb974a3e8 100644 (file)
@@ -12,15 +12,17 @@ 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;
-
-    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(int);
+void GetCvars(entity this, int);
 void DecodeLevelParms(entity this);
 void PlayerScore_Attach(entity this);
 void ClientData_Attach(entity this);
@@ -35,7 +37,7 @@ void ClientState_attach(entity this)
 {
        this._cs = NEW(ClientState, this);
 
-    GetCvars(0);  // get other cvars from player
+    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); }
@@ -69,7 +71,7 @@ void ClientState_detach(entity this)
        remove(CS(this));
        this._cs = NULL;
 
-    GetCvars(-1);  // free cvars
+    GetCvars(this, -1);  // free cvars
 
     bot_clientdisconnect(this);