X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fmutator%2Fgamemode_invasion.qc;h=ea2ed6e1d1a458e6838660ea92898338e985ea93;hb=5eea97bc262bfaf271817ca034439ad551f691d4;hp=e49bf3d546e2d726c3b3cff23075b19e2d268bf5;hpb=f52ddede69621c7c9d31983591902f47fd40d7d0;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/mutator/gamemode_invasion.qc b/qcsrc/server/mutators/mutator/gamemode_invasion.qc index e49bf3d546..ea2ed6e1d1 100644 --- a/qcsrc/server/mutators/mutator/gamemode_invasion.qc +++ b/qcsrc/server/mutators/mutator/gamemode_invasion.qc @@ -77,13 +77,13 @@ float autocvar_g_invasion_spawn_delay; spawnfunc(invasion_spawnpoint) { - if(!g_invasion) { remove(self); return; } + if(!g_invasion) { remove(this); return; } - self.classname = "invasion_spawnpoint"; + this.classname = "invasion_spawnpoint"; if(autocvar_g_invasion_zombies_only) // precache only if it hasn't been already - if(self.monsterid) { - Monster mon = get_monsterinfo(self.monsterid); + if(this.monsterid) { + Monster mon = get_monsterinfo(this.monsterid); mon.mr_precache(mon); } } @@ -141,7 +141,7 @@ void invasion_SpawnChosenMonster(float mon) monster = spawnmonster("", mon, world, world, e.origin, false, false, 2); else return; - e.think = SUB_Remove_self; + setthink(e, SUB_Remove); e.nextthink = time + 0.1; } else @@ -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;