]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/mutators/mutator/nades/nades.qc
Use IS_DEAD everywhere
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / mutators / mutator / nades / nades.qc
index 12a53ff1392bef5bffb9e2efb89f1a60541b7573..3fd4d6ce5c7358befb40498e1c6f43b62703b2a2 100644 (file)
@@ -31,9 +31,9 @@ entity Nade_TrailEffect(int proj, int nade_team)
 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)
@@ -82,9 +82,9 @@ bool Projectile_isnade(int p)
 }
 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;
@@ -119,25 +119,12 @@ void DrawAmmoNades(vector myPos, vector mySize, bool draw_expanding, float expan
 
 #ifdef SVQC
 
-#include "../../../gamemodes/all.qh"
-#include "../../../monsters/spawn.qh"
-#include "../../../monsters/sv_monsters.qh"
-#include "../../../../server/g_subs.qh"
+#include <common/gamemodes/all.qh>
+#include <common/monsters/spawn.qh>
+#include <common/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;
 
@@ -416,7 +403,7 @@ void nade_ice_think()
        for(e = findradius(self.origin, autocvar_g_nades_nade_radius); e; e = e.chain)
        if(e != self)
        if(!autocvar_g_nades_ice_teamcheck || (DIFF_TEAM(e, self.realowner) || e == self.realowner))
-       if(e.takedamage && e.deadflag == DEAD_NO)
+       if(e.takedamage && !IS_DEAD(e))
        if(e.health > 0)
        if(!e.revival_time || ((time - e.revival_time) >= 1.5))
        if(!e.frozen)
@@ -522,7 +509,7 @@ void nade_heal_touch()
        float maxhealth;
        float health_factor;
        if(IS_PLAYER(other) || IS_MONSTER(other))
-       if(other.deadflag == DEAD_NO)
+       if(!IS_DEAD(other))
        if(!other.frozen)
        {
                health_factor = autocvar_g_nades_heal_rate*frametime/2;
@@ -671,6 +658,11 @@ void nade_boom()
 
 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))
@@ -751,7 +743,7 @@ void nade_damage(entity inflictor, entity attacker, float damage, int deathtype,
        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)
@@ -858,7 +850,7 @@ void nades_GiveBonus(entity player, float score)
        if (IS_REAL_CLIENT(player))
        if (IS_PLAYER(player) && player.bonus_nades < autocvar_g_nades_bonus_max)
        if (player.frozen == 0)
-       if (player.deadflag == DEAD_NO)
+       if (!IS_DEAD(player))
        {
                if ( player.bonus_nade_score < 1 )
                        player.bonus_nade_score += score/autocvar_g_nades_bonus_score_max;
@@ -973,7 +965,7 @@ float CanThrowNade()
        if(gameover)
                return false;
 
-       if(self.deadflag != DEAD_NO)
+       if(IS_DEAD(self))
                return false;
 
        if (!autocvar_g_nades)
@@ -1137,20 +1129,19 @@ MUTATOR_HOOKFUNCTION(nades, PlayerPreThink)
        {
                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(!IS_DEAD(it))
+                       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
@@ -1166,11 +1157,10 @@ MUTATOR_HOOKFUNCTION(nades, PlayerPreThink)
                        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;
@@ -1319,5 +1309,12 @@ MUTATOR_HOOKFUNCTION(nades, BuildMutatorsPrettyString)
        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