X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fmutator%2Fgamemode_invasion.qc;h=cfd4f96123ae3daff59745fb2a0e9ed0d258e3b0;hb=dd2b9a194fa4b844241392bfc136b953abf94a7a;hp=e49bf3d546e2d726c3b3cff23075b19e2d268bf5;hpb=3b67eac43c0d85efc59129587aa71d565c9e9aea;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 e49bf3d54..cfd4f9612 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; @@ -463,8 +481,7 @@ MUTATOR_HOOKFUNCTION(inv, AllowMobSpawning) MUTATOR_HOOKFUNCTION(inv, GetTeamCount, CBC_ORDER_EXCLUSIVE) { - ret_float = invasion_teams; - return false; + M_ARGV(0, float) = invasion_teams; } MUTATOR_HOOKFUNCTION(inv, AllowMobButcher)