From c83485ba888a4ab64f8bc5b95130c27ae9cb469c Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Wed, 24 Aug 2011 12:08:04 +0200 Subject: [PATCH] disallow removing crylink spikes if they are still referenced by players somehow --- qcsrc/server/miscfunctions.qc | 2 ++ qcsrc/server/w_crylink.qc | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index 7a0257a06..3bb6e6b7c 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -1754,6 +1754,8 @@ void remove_except_protected(entity e) void remove_unsafely(entity e) { + if(e.classname == "spike") + error("Removing spikes is forbidden (crylink bug), please report"); remove_builtin(e); } diff --git a/qcsrc/server/w_crylink.qc b/qcsrc/server/w_crylink.qc index 05f381f3b..0b11b69ee 100644 --- a/qcsrc/server/w_crylink.qc +++ b/qcsrc/server/w_crylink.qc @@ -16,7 +16,7 @@ void W_Crylink_CheckLinks(entity e) if(e == world) error("W_Crylink_CheckLinks: entity is world"); - if(e.classname != "spike") + if(e.classname != "spike" || wasfreed(e)) error(sprintf("W_Crylink_CheckLinks: entity is not a spike but a %s (freed: %d)", e.classname, wasfreed(e))); p = e; @@ -39,6 +39,7 @@ void W_Crylink_Dequeue_Raw(entity own, entity prev, entity me, entity next) own.crylink_lastgroup = ((me == next) ? world : next); prev.queuenext = next; next.queueprev = prev; + me.classname = "spike_oktoremove"; if(me != next) W_Crylink_CheckLinks(next); } @@ -65,6 +66,7 @@ void W_Crylink_LinkExplode (entity e, entity e2) if(e.queuenext != e2) W_Crylink_LinkExplode(e.queuenext, e2); + e.classname = "spike_oktoremove"; remove (e); } -- 2.39.2