From 22bd15367ebb0505b68a9af5922bd8efe1bcb721 Mon Sep 17 00:00:00 2001 From: div0 Date: Mon, 6 Oct 2008 17:52:54 +0000 Subject: [PATCH] minor portals fix again :P git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4648 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/defs.qh | 2 ++ data/qcsrc/server/portals.qc | 18 ++++++++++++++---- data/qcsrc/server/race.qc | 8 -------- data/qcsrc/server/w_porto.qc | 12 ++++++++++++ 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/data/qcsrc/server/defs.qh b/data/qcsrc/server/defs.qh index 6b3c1a42f..a8b908533 100644 --- a/data/qcsrc/server/defs.qh +++ b/data/qcsrc/server/defs.qh @@ -492,3 +492,5 @@ string cvar_changes; float game_starttime; //point in time when the countdown is over .float stat_game_starttime; + +void W_Porto_Remove (entity p); diff --git a/data/qcsrc/server/portals.qc b/data/qcsrc/server/portals.qc index c472ba664..2c7c07d3c 100644 --- a/data/qcsrc/server/portals.qc +++ b/data/qcsrc/server/portals.qc @@ -524,13 +524,18 @@ float Portal_SetOutPortal(entity own, entity portal) } return 1; } -void Portal_ClearAll(entity own) +void Portal_ClearAll_PortalsOnly(entity own) { if(own.portal_in) Portal_Remove(own.portal_in, 0); if(own.portal_out) Portal_Remove(own.portal_out, 0); } +void Portal_ClearAll(entity own) +{ + Portal_ClearAll_PortalsOnly(own); + W_Porto_Remove(own); +} void Portal_RemoveLater_Think() { Portal_Remove(self, self.cnt); @@ -542,13 +547,18 @@ void Portal_RemoveLater(entity portal, float kill) portal.think = Portal_RemoveLater_Think; portal.nextthink = time; } -void Portal_ClearAllLater(entity own) +void Portal_ClearAllLater_PortalsOnly(entity own) { if(own.portal_in) Portal_RemoveLater(own.portal_in, 0); if(own.portal_out) Portal_RemoveLater(own.portal_out, 0); } +void Portal_ClearAllLater(entity own) +{ + Portal_ClearAllLater_PortalsOnly(own); + W_Porto_Remove(own); +} void Portal_ClearWithID(entity own, float id) { if(own.portal_in) @@ -616,7 +626,7 @@ float Portal_SpawnInPortalAtTrace(entity own, vector dir, float portal_id_val) if(!portal) { // if(!own.portal_out || own.portal_out.portal_id == portal_id_val) - Portal_ClearAll(own); + Portal_ClearAll_PortalsOnly(own); return 0; } @@ -640,7 +650,7 @@ float Portal_SpawnOutPortalAtTrace(entity own, vector dir, float portal_id_val) if(!portal) { // if(!own.portal_in || own.portal_in.portal_id == portal_id_val) - Portal_ClearAll(own); + Portal_ClearAll_PortalsOnly(own); return 0; } diff --git a/data/qcsrc/server/race.qc b/data/qcsrc/server/race.qc index 0662a8f09..cfb728623 100644 --- a/data/qcsrc/server/race.qc +++ b/data/qcsrc/server/race.qc @@ -309,7 +309,6 @@ void dumpsurface(entity e) void checkpoint_passed() { string oldmsg; - entity oldself; if(other.classname == "porto") { @@ -339,13 +338,6 @@ void checkpoint_passed() * Remove unauthorized equipment */ Portal_ClearAll(other); - if(other.porto_current) - { - oldself = self; - self = other.porto_current; - W_Porto_Fail(1); - self = oldself; - } other.porto_forbidden = 2; // decreased by 1 each StartFrame diff --git a/data/qcsrc/server/w_porto.qc b/data/qcsrc/server/w_porto.qc index 4a6cd8177..2c4bd2e8a 100644 --- a/data/qcsrc/server/w_porto.qc +++ b/data/qcsrc/server/w_porto.qc @@ -47,6 +47,18 @@ void W_Porto_Fail (float failhard) remove(self); } +void W_Porto_Remove (entity p) +{ + if(p.porto_current) + { + entity oldself; + oldself = self; + self = p.porto_current; + W_Porto_Fail(1); + self = oldself; + } +} + void W_Porto_Think (void) { trace_plane_normal = '0 0 0'; -- 2.39.2