From 4da251da4a672a5c8220eeb33c3d4db2a236a8e2 Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 23 Apr 2013 06:21:19 +1000 Subject: [PATCH] Returning 1 on the MonsterMove hook will stop the monster --- qcsrc/server/monsters/lib/monsters.qc | 14 +++++++------- qcsrc/server/mutators/base.qh | 1 + qcsrc/server/mutators/gamemode_towerdefense.qc | 6 ++++++ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/qcsrc/server/monsters/lib/monsters.qc b/qcsrc/server/monsters/lib/monsters.qc index 3aa1e664e..905fc8aac 100644 --- a/qcsrc/server/monsters/lib/monsters.qc +++ b/qcsrc/server/monsters/lib/monsters.qc @@ -538,7 +538,13 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_ } } - if(gameover || time < game_starttime || (autocvar_g_campaign && !campaign_bots_may_start) || time < self.spawn_time || player_count - currentbots < 1) + targ = self.goalentity; + + monster_target = targ; + monster_speed_run = runspeed; + monster_speed_walk = walkspeed; + + if(MUTATOR_CALLHOOK(MonsterMove) || gameover || time < game_starttime || (autocvar_g_campaign && !campaign_bots_may_start) || time < self.spawn_time) { runspeed = walkspeed = 0; if(time >= self.spawn_time) @@ -548,12 +554,6 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_ return; } - targ = self.goalentity; - - monster_target = targ; - monster_speed_run = runspeed; - monster_speed_walk = walkspeed; - MUTATOR_CALLHOOK(MonsterMove); targ = monster_target; runspeed = monster_speed_run; walkspeed = monster_speed_walk; diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index 0dca24019..d9b57080e 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -161,6 +161,7 @@ MUTATOR_HOOKABLE(MonsterDropItem); MUTATOR_HOOKABLE(MonsterMove); // called when a monster moves + // returning TRUE makes the monster stop // INPUT: float monster_speed_run; float monster_speed_walk; diff --git a/qcsrc/server/mutators/gamemode_towerdefense.qc b/qcsrc/server/mutators/gamemode_towerdefense.qc index ff961ffef..4d4506f77 100644 --- a/qcsrc/server/mutators/gamemode_towerdefense.qc +++ b/qcsrc/server/mutators/gamemode_towerdefense.qc @@ -782,6 +782,12 @@ MUTATOR_HOOKFUNCTION(td_MonsterCheckBossFlag) MUTATOR_HOOKFUNCTION(td_MonsterMove) { + entity head; + float n_players = 0; + + FOR_EACH_PLAYER(head) { ++n_players; } + if(n_players < 1) return TRUE; + if not(self.enemy) // don't change targets while attacking if((vlen(monster_target.origin - self.origin) <= 100 && monster_target.classname == "td_waypoint") || (vlen(monster_target.origin - self.origin) <= 200 && (self.flags & FL_FLY) && monster_target.classname == "td_waypoint")) { -- 2.39.2