]> de.git.xonotic.org Git - voretournament/voretournament.git/blobdiff - data/qcsrc/server/g_grabber.qc
Code for my last commit
[voretournament/voretournament.git] / data / qcsrc / server / g_grabber.qc
index df3591c7076079abea9c730e76be4fadd834e3e4..264ce29e40a9a5742785dc417f7eacc2cb30b09e 100644 (file)
@@ -85,7 +85,6 @@ float LostMovetypeFollow(entity ent)
 }\r
 \r
 .float grabber_length;\r
-.float grabber_switchweapon;\r
 \r
 void RemoveGrabber(entity pl)\r
 {\r
@@ -103,10 +102,13 @@ void GrabberThink();
 void Grabber_Stop()\r
 {\r
        pointparticles(particleeffectnum("grabber_impact"), self.origin, '0 0 0', 1);\r
-       sound (self, CHAN_PROJECTILE, "weapons/grabber_impact.wav", VOL_BASE, ATTN_NORM);\r
+       if(other.classname == "player")\r
+               sound (self, CHAN_PROJECTILE, "weapons/grabber_impact_player.wav", VOL_BASE, ATTN_NORM);\r
+       else\r
+               sound (self, CHAN_PROJECTILE, "weapons/grabber_impact_world.wav", VOL_BASE, ATTN_NORM);\r
 \r
        self.state = 1;\r
-       self.think =GrabberThink;\r
+       self.think = GrabberThink;\r
        self.nextthink = time;\r
        self.touch = SUB_Null;\r
        self.velocity = '0 0 0';\r
@@ -132,12 +134,12 @@ void GrabberThink()
                WarpZone_RefSys_AddIncrementally(self, self.aiment);\r
 \r
        // prevent the grabber from sticking to a player that has been swallowed\r
-       if(self.aiment.eater.classname == "player")\r
+       if(self.aiment.stat_eaten)\r
        {\r
                // if the grabber is linked to a player that we swallowed, disconnect it (or the grabber will stick to us / the player inside us)\r
                // otherwise, link the grabber to the player who ate our linked player\r
-               if(self.aiment.eater != self.owner)\r
-                       SetMovetypeFollow(self, self.aiment.eater);\r
+               if(self.aiment.predator != self.owner)\r
+                       SetMovetypeFollow(self, self.aiment.predator);\r
                else\r
                        RemoveGrabber(self.owner);\r
        }\r
@@ -265,6 +267,15 @@ void GrabberTouch (void)
        if(other)\r
                if(other.movetype != MOVETYPE_NONE)\r
                {\r
+                       if(other.classname == "player")\r
+                       {\r
+                               if(other.BUTTON_CHAT)\r
+                                       self.owner.typehitsound += 1;\r
+                               else\r
+                                       self.owner.hitsound += 1; // play this for team mates too, as we could be grabbing them to heal them\r
+                               W_Grabber_UpdateStats(self.owner, FALSE, TRUE); // count this as a hit\r
+                       }\r
+\r
                        SetMovetypeFollow(self, other);\r
                        WarpZone_RefSys_BeginAddingIncrementally(self, self.aiment);\r
                }\r
@@ -294,6 +305,8 @@ void FireGrabber (void)
        local entity missile;\r
        local vector org;\r
 \r
+       W_Grabber_UpdateStats(self, TRUE, FALSE);\r
+\r
        if((arena_roundbased && time < warmup) || (time < game_starttime))\r
                return;\r
 \r
@@ -335,43 +348,12 @@ void FireGrabber (void)
        missile.damageforcescale = 0;\r
 }\r
 \r
-//  voidGrabberFrame()\r
-//  {\r
-//         // this function has been modified for Voretournament\r
-// -       if (self.BUTTON_JETPACK && g_grabber)\r
-//         {\r
-// -               if (!self.grabber && self.grabber_time <= time && !self.button6_pressed_before)\r
-// -                       if (timeoutStatus != 2) //only allow the player to fire the grabber if the game is not paused (timeout)\r
-// -                               FireGrabber();\r
-//         }\r
-// -       else\r
-//         {\r
-//                 if (self.grabber)\r
-//                         RemoveGrabber(self);\r
-//         }\r
-// -       self.button6_pressed_before = self.BUTTON_JETPACK;\r
-//         /*\r
-//         // if I have no grabber or it's not pulling yet, make sure I'm not flying!\r
-//         if((self.grabber == world || !self.grabber.state) && self.movetype == MOVETYPE_FLY)\r
-\r
 void GrabberFrame()\r
 {\r
        if(timeoutStatus != 2 && self.weapon != WEP_GRABBER)\r
        {\r
-               // offhand grabber controls\r
-               if(self.BUTTON_JETPACK)\r
-               {\r
-                       if not(self.grabber || (self.grabber_state & GRABBER_WAITING_FOR_RELEASE))\r
-                       {\r
-                               self.grabber_state |= GRABBER_FIRING;\r
-                               self.grabber_state |= GRABBER_WAITING_FOR_RELEASE;\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       self.grabber_state |= GRABBER_REMOVING;\r
-                       self.grabber_state &~= GRABBER_WAITING_FOR_RELEASE;\r
-               }\r
+               self.grabber_state |= GRABBER_REMOVING;\r
+               self.grabber_state &~= GRABBER_WAITING_FOR_RELEASE;\r
 \r
                self.grabber_state &~= GRABBER_RELEASING;\r
                if(self.BUTTON_CROUCH)\r
@@ -385,12 +367,6 @@ void GrabberFrame()
                        //self.grabber_state &~= GRABBER_RELEASING;\r
                }\r
        }\r
-       else if(!(self.items & IT_JETPACK) && self.switchweapon != WEP_GRABBER)\r
-       {\r
-               if(self.BUTTON_JETPACK && !self.grabber_switchweapon)\r
-                       W_SwitchWeapon(WEP_GRABBER);\r
-       }\r
-       self.grabber_switchweapon = self.BUTTON_JETPACK;\r
 \r
        if(self.weapon != WEP_GRABBER)\r
        {\r