+#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)
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 != "")
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)
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:
// 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