From ea289f8e0decb698cc522a12ed4a9a53177fde73 Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 14 Apr 2013 14:01:52 +1000 Subject: [PATCH] Fix client side monster still moving when dead. Attempt to fix target usage --- qcsrc/server/monsters/lib/monsters.qc | 21 +++++++++++++++++++++ qcsrc/server/monsters/monster/demon.qc | 5 +++-- qcsrc/server/monsters/monster/dog.qc | 5 +++-- qcsrc/server/monsters/monster/fish.qc | 5 +++-- qcsrc/server/monsters/monster/hknight.qc | 5 +++-- qcsrc/server/monsters/monster/knight.qc | 5 +++-- qcsrc/server/monsters/monster/ogre.qc | 5 +++-- qcsrc/server/monsters/monster/shalrath.qc | 5 +++-- qcsrc/server/monsters/monster/shambler.qc | 5 +++-- qcsrc/server/monsters/monster/soldier.qc | 5 +++-- qcsrc/server/monsters/monster/spider.qc | 5 +++-- qcsrc/server/monsters/monster/wizard.qc | 20 +++----------------- qcsrc/server/monsters/monster/zombie.qc | 5 +++-- 13 files changed, 57 insertions(+), 39 deletions(-) diff --git a/qcsrc/server/monsters/lib/monsters.qc b/qcsrc/server/monsters/lib/monsters.qc index 9c2bd3af3..d4813cafd 100644 --- a/qcsrc/server/monsters/lib/monsters.qc +++ b/qcsrc/server/monsters/lib/monsters.qc @@ -649,6 +649,20 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_ self.SendFlags |= MSF_MOVE; } +void monster_dead_think() +{ + self.think = monster_dead_think; + self.nextthink = time + 0.3; // don't need to update so often now + + if(time >= self.ltime) + { + Monster_Fade(); + return; + } + + self.SendFlags |= MSF_MOVE; // keep up to date on the monster's location +} + void monsters_setstatus() { self.stat_monsters_total = monsters_total; @@ -786,6 +800,8 @@ void monsters_corpse_damage (entity inflictor, entity attacker, float damage, fl void monsters_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) { + string t1, t2; + if(self.frozen && deathtype != DEATH_KILL) return; @@ -831,11 +847,16 @@ void monsters_damage (entity inflictor, entity attacker, float damage, float dea if(deathtype == DEATH_KILL) self.candrop = FALSE; // killed by mobkill command + // TODO: fix this? activator = attacker; other = self.enemy; + t1 = self.target; + t2 = self.target2; self.target = self.target2; self.target2 = ""; SUB_UseTargets(); + self.target = t1; + self.target2 = t2; self.monster_die(); diff --git a/qcsrc/server/monsters/monster/demon.qc b/qcsrc/server/monsters/monster/demon.qc index ecf8c8418..e1a0383d1 100644 --- a/qcsrc/server/monsters/monster/demon.qc +++ b/qcsrc/server/monsters/monster/demon.qc @@ -75,8 +75,9 @@ void demon_die () { Monster_CheckDropCvars ("demon"); - self.think = Monster_Fade; - self.nextthink = time + 5; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; monsters_setframe(demon_anim_death); monster_hook_death(); // for post-death mods diff --git a/qcsrc/server/monsters/monster/dog.qc b/qcsrc/server/monsters/monster/dog.qc index 8a9b306ef..dcee7649a 100644 --- a/qcsrc/server/monsters/monster/dog.qc +++ b/qcsrc/server/monsters/monster/dog.qc @@ -70,8 +70,9 @@ void dog_die () { Monster_CheckDropCvars ("dog"); - self.think = Monster_Fade; - self.nextthink = time + 5; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; monsters_setframe(dog_anim_die); monster_hook_death(); // for post-death mods diff --git a/qcsrc/server/monsters/monster/fish.qc b/qcsrc/server/monsters/monster/fish.qc index 82cf6162a..463315db5 100644 --- a/qcsrc/server/monsters/monster/fish.qc +++ b/qcsrc/server/monsters/monster/fish.qc @@ -42,8 +42,9 @@ void fish_die () { Monster_CheckDropCvars ("fish"); - self.think = Monster_Fade; - self.nextthink = time + 5; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; monsters_setframe(fish_anim_death); monster_hook_death(); // for post-death mods diff --git a/qcsrc/server/monsters/monster/hknight.qc b/qcsrc/server/monsters/monster/hknight.qc index a916e60f6..4397efb21 100644 --- a/qcsrc/server/monsters/monster/hknight.qc +++ b/qcsrc/server/monsters/monster/hknight.qc @@ -403,8 +403,9 @@ void hellknight_die () float chance = random(); Monster_CheckDropCvars ("hellknight"); - self.think = Monster_Fade; - self.nextthink = time + 5; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; monsters_setframe((random() > 0.5) ? hellknight_anim_death1 : hellknight_anim_death2); if(chance < 0.10 || self.flags & MONSTERFLAG_MINIBOSS) diff --git a/qcsrc/server/monsters/monster/knight.qc b/qcsrc/server/monsters/monster/knight.qc index 48845d457..064b25207 100644 --- a/qcsrc/server/monsters/monster/knight.qc +++ b/qcsrc/server/monsters/monster/knight.qc @@ -52,8 +52,9 @@ void knight_die () { Monster_CheckDropCvars ("knight"); - self.think = Monster_Fade; - self.nextthink = time + 5; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; monsters_setframe((random() > 0.5) ? knight_anim_death1 : knight_anim_death2); monster_hook_death(); // for post-death mods diff --git a/qcsrc/server/monsters/monster/ogre.qc b/qcsrc/server/monsters/monster/ogre.qc index ed947bb8b..9faa79829 100644 --- a/qcsrc/server/monsters/monster/ogre.qc +++ b/qcsrc/server/monsters/monster/ogre.qc @@ -218,8 +218,9 @@ void ogre_die() { Monster_CheckDropCvars ("ogre"); - self.think = Monster_Fade; - self.nextthink = time + 5; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; monsters_setframe(ogre_anim_die); monster_hook_death(); // for post-death mods diff --git a/qcsrc/server/monsters/monster/shalrath.qc b/qcsrc/server/monsters/monster/shalrath.qc index 4b836965c..7f4554720 100644 --- a/qcsrc/server/monsters/monster/shalrath.qc +++ b/qcsrc/server/monsters/monster/shalrath.qc @@ -251,8 +251,9 @@ void shalrath_die () { Monster_CheckDropCvars ("shalrath"); - self.think = Monster_Fade; - self.nextthink = time + 5; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; monsters_setframe(shalrath_anim_death); monster_hook_death(); // for post-death mods diff --git a/qcsrc/server/monsters/monster/shambler.qc b/qcsrc/server/monsters/monster/shambler.qc index 15b505b03..44f1f9b99 100644 --- a/qcsrc/server/monsters/monster/shambler.qc +++ b/qcsrc/server/monsters/monster/shambler.qc @@ -143,8 +143,9 @@ void shambler_die () { Monster_CheckDropCvars ("shambler"); - self.think = Monster_Fade; - self.nextthink = time + 5; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; monsters_setframe(shambler_anim_death); monster_hook_death(); // for post-death mods diff --git a/qcsrc/server/monsters/monster/soldier.qc b/qcsrc/server/monsters/monster/soldier.qc index 3d5819be5..7c3727f6b 100644 --- a/qcsrc/server/monsters/monster/soldier.qc +++ b/qcsrc/server/monsters/monster/soldier.qc @@ -301,8 +301,9 @@ void soldier_die() { Monster_CheckDropCvars ("soldier"); - self.think = Monster_Fade; - self.nextthink = time + 5; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; monsters_setframe((random() > 0.5) ? soldier_anim_die1 : soldier_anim_die2); monster_hook_death(); // for post-death mods diff --git a/qcsrc/server/monsters/monster/spider.qc b/qcsrc/server/monsters/monster/spider.qc index 62c968e12..e94ecc71e 100644 --- a/qcsrc/server/monsters/monster/spider.qc +++ b/qcsrc/server/monsters/monster/spider.qc @@ -180,8 +180,9 @@ void spider_die () { Monster_CheckDropCvars ("spider"); - self.think = Monster_Fade; - self.nextthink = time + 5; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; monsters_setframe(spider_anim_attack); self.angles += '180 0 0'; diff --git a/qcsrc/server/monsters/monster/wizard.qc b/qcsrc/server/monsters/monster/wizard.qc index b49800996..c7aa9d417 100644 --- a/qcsrc/server/monsters/monster/wizard.qc +++ b/qcsrc/server/monsters/monster/wizard.qc @@ -101,27 +101,13 @@ void wizard_fastattack () Wiz_StartFast(); } -void wizard_dead_think() -{ - self.think = wizard_dead_think; - self.nextthink = time + self.ticrate; - - if(time >= self.ltime) - { - Monster_Fade(); - return; - } - - self.SendFlags |= MSF_MOVE; // keep up to date on the monster's location -} - void wizard_die () { Monster_CheckDropCvars ("wizard"); - self.think = wizard_dead_think; // exception for wizard, as it needs to keep moving - self.ltime = time + 5; - self.nextthink = time + self.ticrate; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; self.velocity_x = -200 + 400 * random(); self.velocity_y = -200 + 400 * random(); self.velocity_z = 100 + 100 * random(); diff --git a/qcsrc/server/monsters/monster/zombie.qc b/qcsrc/server/monsters/monster/zombie.qc index 99e38ab20..3ac204405 100644 --- a/qcsrc/server/monsters/monster/zombie.qc +++ b/qcsrc/server/monsters/monster/zombie.qc @@ -114,8 +114,9 @@ void zombie_die () { Monster_CheckDropCvars ("zombie"); - self.think = Monster_Fade; - self.nextthink = time + 5; + self.think = monster_dead_think; + self.nextthink = time + self.ticrate; + self.ltime = time + 5; monsters_setframe((random() > 0.5) ? zombie_anim_deathback1 : zombie_anim_deathfront1); monster_hook_death(); // for post-death mods -- 2.39.2