]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/mutators/mutator/gamemode_invasion.qc
Purge self from the damage/death mutator hooks
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / mutators / mutator / gamemode_invasion.qc
index d3e40465c1376323c526c52193c83b8ecee32445..ea2ed6e1d1a458e6838660ea92898338e985ea93 100644 (file)
@@ -331,6 +331,9 @@ void Invasion_RoundStart()
 
 MUTATOR_HOOKFUNCTION(inv, MonsterDies)
 {
+       entity frag_target = M_ARGV(0, entity);
+       entity frag_attacker = M_ARGV(1, entity);
+
        if(!(frag_target.spawnflags & MONSTERFLAG_RESPAWNED))
        {
                inv_numkilled += 1;
@@ -396,36 +399,49 @@ MUTATOR_HOOKFUNCTION(inv, PlayerRegen)
 }
 
 MUTATOR_HOOKFUNCTION(inv, PlayerSpawn)
-{SELFPARAM();
-       self.bot_attack = false;
+{
+       entity player = M_ARGV(0, entity);
+
+       player.bot_attack = false;
        return false;
 }
 
 MUTATOR_HOOKFUNCTION(inv, PlayerDamage_Calculate)
 {
+       entity frag_attacker = M_ARGV(1, entity);
+       entity frag_target = M_ARGV(2, entity);
+       float frag_damage = M_ARGV(4, float);
+       vector frag_force = M_ARGV(6, vector);
+
        if(IS_PLAYER(frag_attacker) && IS_PLAYER(frag_target) && frag_attacker != frag_target)
        {
                frag_damage = 0;
                frag_force = '0 0 0';
+
+               M_ARGV(4, float) = frag_damage;
+               M_ARGV(6, vector) = frag_force;
        }
 
        return false;
 }
 
 MUTATOR_HOOKFUNCTION(inv, SV_ParseClientCommand)
-{SELFPARAM();
+{
        if(MUTATOR_RETURNVALUE) // command was already handled?
                return false;
 
+       entity player = M_ARGV(0, entity);
+       string cmd_name = M_ARGV(1, string);
+
        if(cmd_name == "debuginvasion")
        {
-               sprint(self, strcat("inv_maxspawned = ", ftos(inv_maxspawned), "\n"));
-               sprint(self, strcat("inv_numspawned = ", ftos(inv_numspawned), "\n"));
-               sprint(self, strcat("inv_numkilled = ", ftos(inv_numkilled), "\n"));
-               sprint(self, strcat("inv_roundcnt = ", ftos(inv_roundcnt), "\n"));
-               sprint(self, strcat("monsters_total = ", ftos(monsters_total), "\n"));
-               sprint(self, strcat("monsters_killed = ", ftos(monsters_killed), "\n"));
-               sprint(self, strcat("inv_monsterskill = ", ftos(inv_monsterskill), "\n"));
+               sprint(player, strcat("inv_maxspawned = ", ftos(inv_maxspawned), "\n"));
+               sprint(player, strcat("inv_numspawned = ", ftos(inv_numspawned), "\n"));
+               sprint(player, strcat("inv_numkilled = ", ftos(inv_numkilled), "\n"));
+               sprint(player, strcat("inv_roundcnt = ", ftos(inv_roundcnt), "\n"));
+               sprint(player, strcat("monsters_total = ", ftos(monsters_total), "\n"));
+               sprint(player, strcat("monsters_killed = ", ftos(monsters_killed), "\n"));
+               sprint(player, strcat("inv_monsterskill = ", ftos(inv_monsterskill), "\n"));
 
                return true;
        }
@@ -450,6 +466,8 @@ MUTATOR_HOOKFUNCTION(inv, SetStartItems)
 
 MUTATOR_HOOKFUNCTION(inv, AccuracyTargetValid)
 {
+       entity frag_target = M_ARGV(1, entity);
+
        if(IS_MONSTER(frag_target))
                return MUT_ACCADD_INVALID;
        return MUT_ACCADD_INDIFFERENT;