]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/triggers/trigger/magicear.qc
Merge branch 'master' into Mario/wepent_experimental
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / triggers / trigger / magicear.qc
index f14b75c3124b983856400b620faf2af7dbc517ce..354ed1bfedd61f284ad76ae0f0fa73107b34abda 100644 (file)
@@ -1,16 +1,16 @@
+#include "magicear.qh"
 #ifdef SVQC
 float magicear_matched;
-float W_Tuba_HasPlayed(entity pl, string melody, float instrument, float ignorepitch, float mintempo, float maxtempo);
+float W_Tuba_HasPlayed(entity pl, .entity weaponentity, string melody, float instrument, float ignorepitch, float mintempo, float maxtempo);
 string trigger_magicear_processmessage(entity ear, entity source, float teamsay, entity privatesay, string msgin)
 {
        float domatch, dotrigger, matchstart, l;
        string s, msg;
-       entity oldself;
        string savemessage;
 
        magicear_matched = false;
 
-       dotrigger = ((IS_PLAYER(source)) && (source.deadflag == DEAD_NO) && ((ear.radius == 0) || (vlen(source.origin - ear.origin) <= ear.radius)));
+       dotrigger = ((IS_PLAYER(source)) && (!IS_DEAD(source)) && ((ear.radius == 0) || (vdist(source.origin - ear.origin, <=, ear.radius))));
        domatch = ((ear.spawnflags & 32) || dotrigger);
 
        if (!domatch)
@@ -22,21 +22,21 @@ string trigger_magicear_processmessage(entity ear, entity source, float teamsay,
                if (!(ear.spawnflags & 256))
                        return msgin;
 
-               if(!W_Tuba_HasPlayed(source, ear.message, ear.movedir_x, !(ear.spawnflags & 512), ear.movedir_y, ear.movedir_z))
-                       return msgin;
+               for(int slot = 0; slot < MAX_WEAPONSLOTS; ++slot)
+               {
+                       .entity weaponentity = weaponentities[slot];
+                       if(!W_Tuba_HasPlayed(source, weaponentity, ear.message, ear.movedir_x, !(ear.spawnflags & 512), ear.movedir_y, ear.movedir_z))
+                               return msgin;
+               }
 
                magicear_matched = true;
 
                if(dotrigger)
                {
-                       oldself = self;
-                       activator = source;
-                       self = ear;
-                       savemessage = self.message;
-                       self.message = string_null;
-                       SUB_UseTargets();
-                       self.message = savemessage;
-                       self = oldself;
+                       savemessage = ear.message;
+                       ear.message = string_null;
+                       SUB_UseTargets(ear, source, NULL);
+                       ear.message = savemessage;
                }
 
                if(ear.netname != "")
@@ -120,14 +120,10 @@ string trigger_magicear_processmessage(entity ear, entity source, float teamsay,
 
        if(dotrigger)
        {
-               oldself = self;
-               activator = source;
-               self = ear;
-               savemessage = self.message;
-               self.message = string_null;
-               SUB_UseTargets();
-               self.message = savemessage;
-               self = oldself;
+               savemessage = ear.message;
+               ear.message = string_null;
+               SUB_UseTargets(ear, source, NULL);
+               ear.message = savemessage;
        }
 
        if(ear.spawnflags & 16)
@@ -165,10 +161,10 @@ string trigger_magicear_processmessage_forallears(entity source, float teamsay,
        return msgin;
 }
 
-void spawnfunc_trigger_magicear()
+spawnfunc(trigger_magicear)
 {
-       self.enemy = magicears;
-       magicears = self;
+       this.enemy = magicears;
+       magicears = this;
 
        // actually handled in "say" processing
        // spawnflags:
@@ -199,6 +195,6 @@ void spawnfunc_trigger_magicear()
        // movedir:
        //   for spawnflags 256, defines 'instrument+1 mintempo maxtempo' (zero component doesn't matter)
 
-       self.movedir_x -= 1; // map to tuba instrument numbers
+       this.movedir_x -= 1; // map to tuba instrument numbers
 }
 #endif