From: Mario Date: Thu, 18 Apr 2013 05:16:09 +0000 (+1000) Subject: Fix more bad use of .think X-Git-Tag: xonotic-v0.8.0~241^2^2~363 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=663cbbda30cb506096a34821e7107ae73e9c09bd;p=xonotic%2Fxonotic-data.pk3dir.git Fix more bad use of .think --- diff --git a/qcsrc/server/monsters/lib/monsters.qc b/qcsrc/server/monsters/lib/monsters.qc index 89911d57f..531ad9708 100644 --- a/qcsrc/server/monsters/lib/monsters.qc +++ b/qcsrc/server/monsters/lib/monsters.qc @@ -349,9 +349,16 @@ float monster_leap (float anm, void() touchfunc, vector vel, float anim_finished float GenericCheckAttack () { // checking attack while dead? - if (self.health <= 0 || self.enemy == world) + if (self.health <= 0) return FALSE; + // reset delays when we have no enemy + if not(self.enemy) + { + self.monster_delayedattack = func_null; + self.delay = -1; + } + if(self.monster_delayedattack && self.delay != -1) { if(time < self.delay) diff --git a/qcsrc/server/monsters/monster/ogre.qc b/qcsrc/server/monsters/monster/ogre.qc index 64128af78..a340d552c 100644 --- a/qcsrc/server/monsters/monster/ogre.qc +++ b/qcsrc/server/monsters/monster/ogre.qc @@ -59,8 +59,8 @@ void ogre_swing() if(self.ogre_cycles == 1) self.attack_finished_single = time + 1.3; self.angles_y = self.angles_y + random()* 25; - self.nextthink = time + 0.2; - self.think = ogre_swing; + self.delay = time + 0.2; + self.monster_delayedattack = ogre_swing; if(self.ogre_cycles <= 2) chainsaw(); @@ -70,7 +70,10 @@ void ogre_swing() chainsaw(); if(self.ogre_cycles >= 4) - self.think = ogre_think; + { + self.monster_delayedattack = func_null; + self.delay = -1; + } } void ogre_uzi_fire() diff --git a/qcsrc/server/monsters/monster/shalrath.qc b/qcsrc/server/monsters/monster/shalrath.qc index e7eff4cfe..7d495c42e 100644 --- a/qcsrc/server/monsters/monster/shalrath.qc +++ b/qcsrc/server/monsters/monster/shalrath.qc @@ -163,8 +163,15 @@ float ShalrathCheckAttack () { vector spot1 = '0 0 0', spot2 = '0 0 0'; - if (self.health <= 0 || self.enemy == world || self.enemy.health < 1) + if (self.health <= 0) return FALSE; + + // reset delays when we have no enemy + if not(self.enemy) + { + self.monster_delayedattack = func_null; + self.delay = -1; + } if(self.monster_delayedattack && self.delay != -1) { diff --git a/qcsrc/server/monsters/monster/shambler.qc b/qcsrc/server/monsters/monster/shambler.qc index 72f02fee4..a3ba1e736 100644 --- a/qcsrc/server/monsters/monster/shambler.qc +++ b/qcsrc/server/monsters/monster/shambler.qc @@ -36,54 +36,47 @@ void shambler_think () void shambler_smash () { - float bigdmg = autocvar_g_monster_shambler_damage * self.scale; - - self.think = shambler_think; - self.attack_finished_single = time + 0.4; - self.nextthink = self.attack_finished_single; - - if (!self.enemy) - return; - - if (vlen(self.enemy.origin - self.origin) > 100 * self.scale) - return; + self.monster_delayedattack = func_null; + self.delay = -1; - Damage(self.enemy, self, self, bigdmg * monster_skill, DEATH_MONSTER_SHAMBLER_SMASH, self.enemy.origin, normalize(self.enemy.origin - self.origin)); + monster_melee(self.enemy, autocvar_g_monster_shambler_damage, 0.3, DEATH_MONSTER_SHAMBLER_SMASH, TRUE); } void shambler_delayedsmash () { monsters_setframe(shambler_anim_smash); - self.think = shambler_smash; - self.nextthink = time + 0.7; -} - -void ShamClaw (float side) -{ - monster_melee(self.enemy, autocvar_g_monster_shambler_attack_claw_damage, 0.3, DEATH_MONSTER_SHAMBLER_CLAW, TRUE); + self.monster_delayedattack = shambler_smash; + self.delay = time + 0.7; + self.attack_finished_single = time + 1.1; } void() shambler_swing_right; void shambler_swing_left () { monsters_setframe(shambler_anim_swingl); - ShamClaw(250); + monster_melee(self.enemy, autocvar_g_monster_shambler_attack_claw_damage, 0.3, DEATH_MONSTER_SHAMBLER_CLAW, TRUE); self.attack_finished_single = time + 0.8; - self.nextthink = self.attack_finished_single; - self.think = shambler_think; + self.delay = -1; + self.monster_delayedattack = func_null; if(random() < 0.5) - self.think = shambler_swing_right; + { + self.monster_delayedattack = shambler_swing_right; + self.delay = time + 0.5; + } } void shambler_swing_right () { monsters_setframe(shambler_anim_swingr); - ShamClaw(-250); + monster_melee(self.enemy, autocvar_g_monster_shambler_attack_claw_damage, 0.3, DEATH_MONSTER_SHAMBLER_CLAW, TRUE); self.attack_finished_single = time + 0.8; - self.nextthink = self.attack_finished_single; - self.think = shambler_think; + self.monster_delayedattack = func_null; + self.delay = -1; if(random() < 0.5) - self.think = shambler_swing_left; + { + self.monster_delayedattack = shambler_swing_left; + self.delay = time + 0.5; + } } void sham_melee ()