]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/miscfunctions.qc
now CHAN_PLAYER dies
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / miscfunctions.qc
index 8b7806e566e91968bf6cc1211fa759aa4d27ac02..a130049102c0c3be423d73063b2add6bdb30d9b5 100644 (file)
@@ -1361,6 +1361,8 @@ void soundtoat(float dest, entity e, vector o, float chan, string samp, float vo
     entno = num_for_edict(e);
     idx = precache_sound_index(samp);
 
+    chan = ((chan & 0x07) | ((chan & 0x1F0) / 2));
+
     float sflags;
     sflags = 0;
 
@@ -1371,7 +1373,7 @@ void soundtoat(float dest, entity e, vector o, float chan, string samp, float vo
         sflags |= SND_VOLUME;
     if (atten != 64)
         sflags |= SND_ATTENUATION;
-    if (entno >= 8192)
+    if (entno >= 8192 || chan > 7)
         sflags |= SND_LARGEENTITY;
     if (idx >= 256)
         sflags |= SND_LARGESOUND;
@@ -1412,7 +1414,7 @@ void soundto(float dest, entity e, float chan, string samp, float vol, float att
 }
 void soundat(entity e, vector o, float chan, string samp, float vol, float atten)
 {
-    soundtoat(MSG_BROADCAST, e, o, chan, samp, vol, atten);
+    soundtoat(((chan & 8) ? MSG_ALL : MSG_BROADCAST), e, o, chan, samp, vol, atten);
 }
 void stopsoundto(float dest, entity e, float chan)
 {
@@ -1422,8 +1424,9 @@ void stopsoundto(float dest, entity e, float chan)
         return;
 
     entno = num_for_edict(e);
+    chan = ((chan & 0x07) | ((chan & 0x1F0) / 2));
 
-    if (entno >= 8192)
+    if (entno >= 8192 || chan > 7)
     {
         float idx, sflags;
         idx = precache_sound_index("misc/null.wav");
@@ -1461,7 +1464,7 @@ void play2(entity e, string filename)
 {
     //stuffcmd(e, strcat("play2 ", filename, "\n"));
     msg_entity = e;
-    soundtoat(MSG_ONE, world, '0 0 0', CHAN_AUTO, filename, VOL_BASE, ATTN_NONE);
+    soundtoat(MSG_ONE, world, '0 0 0', CH_INFO, filename, VOL_BASE, ATTN_NONE);
 }
 
 // use this one if you might be causing spam (e.g. from touch functions that might get called more than once per frame)
@@ -1499,7 +1502,7 @@ void play2all(string samp)
     if (autocvar_bot_sound_monopoly)
         return;
 
-    sound(world, CHAN_AUTO, samp, VOL_BASE, ATTN_NONE);
+    sound(world, CH_INFO, samp, VOL_BASE, ATTN_NONE);
 }
 
 void PrecachePlayerSounds(string f);
@@ -2014,13 +2017,17 @@ float SUB_NoImpactCheck()
 
 #define SUB_OwnerCheck() (other && (other == self.owner))
 
+void RemoveGrapplingHook(entity pl);
 float WarpZone_Projectile_Touch_ImpactFilter_Callback()
 {
        if(SUB_OwnerCheck())
                return TRUE;
        if(SUB_NoImpactCheck())
        {
-               remove(self);
+               if(self.classname == "grapplinghook")
+                       RemoveGrapplingHook(self.realowner);
+               else
+                       remove(self);
                return TRUE;
        }
        if(trace_ent && trace_ent.solid > SOLID_TRIGGER)
@@ -3123,3 +3130,23 @@ float LostMovetypeFollow(entity ent)
        }
        return 0;
 }
+
+float isPushable(entity e)
+{
+       if(e.iscreature)
+               return TRUE;
+       switch(e.classname)
+       {
+               case "body":
+               case "droppedweapon":
+               case "keepawayball":
+               case "nexball_basketball":
+               case "nexball_football":
+                       return TRUE;
+               case "bullet": // antilagged bullets can't hit this either
+                       return FALSE;
+       }
+       if (e.projectiledeathtype)
+               return TRUE;
+       return FALSE;
+}