]> de.git.xonotic.org Git - voretournament/voretournament.git/blobdiff - data/qcsrc/server/g_grabber.qc
Limit how often the Grabber's beam effect is sent (lightning bolt from the weapon...
[voretournament/voretournament.git] / data / qcsrc / server / g_grabber.qc
index 079a0e12768ddc4d8e38da260a3917e7fb5933eb..333362035b4a4bdb891ce67bcfc2610481bd6511 100644 (file)
@@ -85,6 +85,7 @@ float LostMovetypeFollow(entity ent)
 }\r
 \r
 .float grabber_length;\r
+.float grabber_sendbeam;\r
 \r
 void RemoveGrabber(entity pl)\r
 {\r
@@ -102,10 +103,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
@@ -131,7 +135,7 @@ 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.predator.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
@@ -244,8 +248,12 @@ void GrabberThink()
                }\r
        }\r
 \r
-       makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0');\r
-       te_beam(self.owner, WarpZone_RefSys_TransformOrigin(self, self.owner, self.origin) + v_forward * (-9), org);\r
+       if(self.grabber_sendbeam < time) // don't kill the bandwidth by sending this each frame\r
+       {\r
+               makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0');\r
+               te_beam(self.owner, WarpZone_RefSys_TransformOrigin(self, self.owner, self.origin) + v_forward * (-9), org);\r
+               self.grabber_sendbeam = time + cvar("sys_ticrate");\r
+       }\r
 }\r
 \r
 void GrabberTouch (void)\r
@@ -269,7 +277,7 @@ void GrabberTouch (void)
                                if(other.BUTTON_CHAT)\r
                                        self.owner.typehitsound += 1;\r
                                else\r
-                                       self.owner.hitsound += 1;\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
@@ -353,16 +361,7 @@ void GrabberFrame()
                self.grabber_state &~= GRABBER_WAITING_FOR_RELEASE;\r
 \r
                self.grabber_state &~= GRABBER_RELEASING;\r
-               if(self.BUTTON_CROUCH)\r
-               {\r
-                       self.grabber_state &~= GRABBER_PULLING;\r
-                       //self.grabber_state |= GRABBER_RELEASING;\r
-               }\r
-               else\r
-               {\r
-                       self.grabber_state |= GRABBER_PULLING;\r
-                       //self.grabber_state &~= GRABBER_RELEASING;\r
-               }\r
+               self.grabber_state |= GRABBER_PULLING;\r
        }\r
 \r
        if(self.weapon != WEP_GRABBER)\r