From: Mario <mario.mario@y7mail.com>
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 89911d57f7..531ad97089 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 64128af788..a340d552cb 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 e7eff4cfec..7d495c42e3 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 72f02fee44..a3ba1e736b 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 ()