From fdcd4c48011dde730449138cb0377a1e3231ba86 Mon Sep 17 00:00:00 2001 From: div0 Date: Tue, 9 Sep 2008 18:12:19 +0000 Subject: [PATCH] again: remove portals when owner dies, but this time without crash git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4437 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_player.qc | 1 + data/qcsrc/server/portals.qc | 18 ++++++++++++++++++ data/qcsrc/server/portals.qh | 1 + 3 files changed, 20 insertions(+) diff --git a/data/qcsrc/server/cl_player.qc b/data/qcsrc/server/cl_player.qc index cbb5fe319..798086e18 100644 --- a/data/qcsrc/server/cl_player.qc +++ b/data/qcsrc/server/cl_player.qc @@ -506,6 +506,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht kh_Key_DropAll(self, TRUE); if(self.flagcarried) DropFlag(self.flagcarried); + Portal_ClearAllLater(self); // clear waypoints WaypointSprite_PlayerDead(); // make the corpse upright (not tilted) diff --git a/data/qcsrc/server/portals.qc b/data/qcsrc/server/portals.qc index e54706ff3..6b3efde60 100644 --- a/data/qcsrc/server/portals.qc +++ b/data/qcsrc/server/portals.qc @@ -543,6 +543,24 @@ void Portal_ClearAll(entity own) if(own.portal_out) Portal_Remove(own.portal_out, 0); } +void Portal_RemoveLater_Think() +{ + Portal_Remove(self, self.cnt); +} +void Portal_RemoveLater(entity portal, float kill) +{ + Portal_MakeBrokenPortal(portal); + portal.cnt = kill; + portal.think = Portal_RemoveLater_Think; + portal.nextthink = time; +} +void Portal_ClearAllLater(entity own) +{ + if(own.portal_in) + Portal_RemoveLater(own.portal_in, 0); + if(own.portal_out) + Portal_RemoveLater(own.portal_out, 0); +} void Portal_ClearWithID(entity own, float id) { if(own.portal_in) diff --git a/data/qcsrc/server/portals.qh b/data/qcsrc/server/portals.qh index e52fb5ca1..649987558 100644 --- a/data/qcsrc/server/portals.qh +++ b/data/qcsrc/server/portals.qh @@ -1,4 +1,5 @@ void Portal_ClearAll(entity own); +void Portal_ClearAllLater(entity own); float Portal_SpawnOutPortalAtTrace(entity own, vector dir, float id); float Portal_SpawnInPortalAtTrace(entity own, vector dir, float id); void Portal_ClearWithID(entity own, float id); -- 2.39.2