]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/g_hook.qc
Merge remote-tracking branch 'origin/master' into samual/updatecommands
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / g_hook.qc
index 7eeb8e22558452fb65deeeb8404812efe097495b..4f655ca5738220c1dc75da1c95849f347b2cef68 100644 (file)
@@ -62,11 +62,19 @@ void RemoveGrapplingHook(entity pl)
        //pl.disableclientprediction = FALSE;
 }
 
+void GrapplingHookReset(void)
+{
+       if(self.realowner.hook == self)
+               RemoveGrapplingHook(self.owner);
+       else // in any case:
+               remove(self);
+}
+
 void GrapplingHookThink();
 void GrapplingHook_Stop()
 {
        pointparticles(particleeffectnum("grapple_impact"), self.origin, '0 0 0', 1);
-       sound (self, CHAN_PROJECTILE, "weapons/hook_impact.wav", VOL_BASE, ATTN_NORM);
+       sound (self, CH_SHOTS, "weapons/hook_impact.wav", VOL_BASE, ATTN_NORM);
 
        self.state = 1;
        self.think = GrapplingHookThink;
@@ -288,8 +296,11 @@ void FireGrapplingHook (void)
        if((arena_roundbased && time < warmup) || (time < game_starttime))
                return;
 
-    if(self.freezetag_frozen)
-        return;
+  if(self.freezetag_frozen)
+               return;
+       
+       if(self.vehicle)
+               return;
 
        makevectors(self.v_angle);
 
@@ -299,8 +310,8 @@ void FireGrapplingHook (void)
        --s;
        vs = hook_shotorigin[s];
 
-       // UGLY WORKAROUND: play this on CHAN_WEAPON2 so it can't cut off fire sounds
-       sound (self, CHAN_WEAPON2, "weapons/hook_fire.wav", VOL_BASE, ATTN_NORM);
+       // UGLY WORKAROUND: play this on CH_WEAPON_B so it can't cut off fire sounds
+       sound (self, CH_WEAPON_B, "weapons/hook_fire.wav", VOL_BASE, ATTN_NORM);
        org = self.origin + self.view_ofs + v_forward * vs_x + v_right * -vs_y + v_up * vs_z;
 
        tracebox(self.origin + self.view_ofs, '-3 -3 -3', '3 3 3', org, MOVE_NORMAL, self);
@@ -311,6 +322,7 @@ void FireGrapplingHook (void)
        missile = WarpZone_RefSys_SpawnSameRefSys(self);
        missile.owner = missile.realowner = self;
        self.hook = missile;
+       missile.reset = GrapplingHookReset;
        missile.classname = "grapplinghook";
 
        missile.movetype = MOVETYPE_FLY;