From 01b01aef75b953a34373f47d6fec9783b5e5533e Mon Sep 17 00:00:00 2001 From: MirceaKitsune Date: Sat, 16 Apr 2011 19:59:31 +0300 Subject: [PATCH] Fix bug with fake prey being removed from predator --- data/qcsrc/server/cl_client.qc | 4 ++-- data/qcsrc/server/vore.qc | 35 +++++++++++++++++----------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index b9f654aa..8e3754b9 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -829,6 +829,8 @@ void PutClientInServer (void) RemoveGrabber(self); // Wazat's Grabber + Vore_DeadPrey_Detach(self); + self.classname = "player"; self.wasplayer = TRUE; self.iscreature = TRUE; @@ -923,8 +925,6 @@ void PutClientInServer (void) SetCustomizer(self, Client_customizeentityforclient, Client_uncustomizeentityforclient); - Vore_DeadPrey_Detach(self); - self.model = ""; FixPlayermodel(); diff --git a/data/qcsrc/server/vore.qc b/data/qcsrc/server/vore.qc index 1df5d2f4..780a28c1 100644 --- a/data/qcsrc/server/vore.qc +++ b/data/qcsrc/server/vore.qc @@ -298,22 +298,24 @@ void Vore_DeadPrey_Detach(entity e) return; e.fakepredator = world; + e.fakeprey = FALSE; e.aiment = world; - - if(!e.deadflag) - e.fakeprey = FALSE; + e.movetype = MOVETYPE_TOSS; } -void Vore_PreyRelease(entity e) +void Vore_PreyRelease(entity e, float pred_disconnect) { // if the keepdeadprey feature is on, don't spit a dead prey's carcass out if(e.health <= 0 && cvar("g_vore_keepdeadprey")) { - Vore_DeadPrey_Configure(e); - // if keepdeadprey is enabled and the predator disconnected, detach the dead prey - if(e.fakepredator.classname != "player") - Vore_DeadPrey_Detach(e); + if(pred_disconnect) + { + if(e.fakeprey) + Vore_DeadPrey_Detach(e); + } + else + Vore_DeadPrey_Configure(e); } else Vore_Regurgitate(e); @@ -325,19 +327,16 @@ void Vore_Disconnect() // prey disconnects or goes spectating while inside someone's belly if(self.predator.classname == "player") - Vore_PreyRelease(self); + Vore_PreyRelease(self, TRUE); // pred disconnects or goes spectating with players in their belly - else if(self.stomach_load > 0) + entity head; + FOR_EACH_PLAYER(head) { - entity head; - FOR_EACH_PLAYER(head) - { - if(head.predator == self) - Vore_PreyRelease(head); - } - Vore_GurgleSound(); // stop the gurgling sound + if(head.predator == self || head.fakepredator == self) + Vore_PreyRelease(head, TRUE); } + Vore_GurgleSound(); // stop the gurgling sound self.stomach_load = self.gravity = 0; // prevents a bug } @@ -617,7 +616,7 @@ void Vore() if(self.deadflag) { - Vore_PreyRelease(self); + Vore_PreyRelease(self, FALSE); return; } -- 2.39.2