REGISTER_MUTATOR(cl_nades, true);
MUTATOR_HOOKFUNCTION(cl_nades, HUD_Draw_overlay)
{
- if (getstatf(STAT_HEALING_ORB) <= time) return false;
+ if (STAT(HEALING_ORB) <= time) return false;
MUTATOR_ARGV(0, vector) = NADE_TYPE_HEAL.m_color;
- MUTATOR_ARGV(0, float) = getstatf(STAT_HEALING_ORB_ALPHA);
+ MUTATOR_ARGV(0, float) = STAT(HEALING_ORB_ALPHA);
return true;
}
MUTATOR_HOOKFUNCTION(cl_nades, Ent_Projectile)
}
void DrawAmmoNades(vector myPos, vector mySize, bool draw_expanding, float expand_time)
{
- float bonusNades = getstatf(STAT_NADE_BONUS);
- float bonusProgress = getstatf(STAT_NADE_BONUS_SCORE);
- float bonusType = getstati(STAT_NADE_BONUS_TYPE);
+ float bonusNades = STAT(NADE_BONUS);
+ float bonusProgress = STAT(NADE_BONUS_SCORE);
+ float bonusType = STAT(NADE_BONUS_TYPE);
Nade def = Nades_from(bonusType);
vector nadeColor = def.m_color;
string nadeIcon = def.m_icon;
#include "../../../monsters/sv_monsters.qh"
#include "../../../../server/g_subs.qh"
-REGISTER_MUTATOR(nades, cvar("g_nades"))
-{
- MUTATOR_ONADD
- {
- addstat(STAT_NADE_TIMER, AS_FLOAT, nade_timer);
- addstat(STAT_NADE_BONUS, AS_FLOAT, bonus_nades);
- addstat(STAT_NADE_BONUS_TYPE, AS_INT, nade_type);
- addstat(STAT_NADE_BONUS_SCORE, AS_FLOAT, bonus_nade_score);
- addstat(STAT_HEALING_ORB, AS_FLOAT, stat_healing_orb);
- addstat(STAT_HEALING_ORB_ALPHA, AS_FLOAT, stat_healing_orb_alpha);
- }
-
- return false;
-}
+REGISTER_MUTATOR(nades, cvar("g_nades"));
.float nade_time_primed;
void nade_touch()
{SELFPARAM();
+ if(other)
+ UpdateCSQCProjectile(self);
+
+ if(other == self.realowner)
+ return; // no self impacts
/*float is_weapclip = 0;
if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NODRAW)
if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NONSOLID))
self.velocity += force;
UpdateCSQCProjectile(self);
- if(damage <= 0 || ((self.flags & FL_ONGROUND) && IS_PLAYER(attacker)))
+ if(damage <= 0 || ((IS_ONGROUND(self)) && IS_PLAYER(attacker)))
return;
if(self.health == self.max_health)
fn.colormod = Nades_from(n.nade_type).m_color;
fn.colormap = self.colormap;
fn.glowmod = self.glowmod;
- fn.think = SUB_Remove;
+ fn.think = SUB_Remove_self;
fn.nextthink = n.wait;
self.nade = n;
{
vector revive_extra_size = '1 1 1' * autocvar_g_freezetag_revive_extra_size;
n = 0;
- FOR_EACH_PLAYER(other) if(self != other)
- {
- if(other.deadflag == DEAD_NO)
- if(other.frozen == 0)
- if(SAME_TEAM(other, self))
- if(boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax))
+ FOREACH_CLIENT(IS_PLAYER(it) && it != self, LAMBDA(
+ if(it.deadflag == DEAD_NO)
+ if(it.frozen == 0)
+ if(SAME_TEAM(it, self))
+ if(boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, it.absmin, it.absmax))
{
if(!o)
- o = other;
+ o = it;
if(self.frozen == 1)
- other.reviving = true;
+ it.reviving = true;
++n;
}
- }
+ ));
}
if(n && self.frozen == 3) // OK, there is at least one teammate reviving us
Send_Notification(NOTIF_ONE, o, MSG_CENTER, CENTER_FREEZETAG_REVIVE, self.netname);
}
- FOR_EACH_PLAYER(other) if(other.reviving)
- {
+ FOREACH_CLIENT(IS_PLAYER(it) && it.reviving, LAMBDA(
other.revive_progress = self.revive_progress;
other.reviving = false;
- }
+ ));
}
return false;
ret_string = strcat(ret_string, ", Nades");
return false;
}
+
+MUTATOR_HOOKFUNCTION(nades, BuildGameplayTipsString)
+{
+ ret_string = strcat(ret_string, "\n\n^3nades^8 are enabled, press 'g' to use them\n");
+ return false;
+}
+
#endif
#endif