From: Mario <mario.mario@y7mail.com>
Date: Tue, 5 Mar 2013 15:07:01 +0000 (+1100)
Subject: Don't drop items if killed by mobkill command
X-Git-Tag: xonotic-v0.8.0~241^2^2~481
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=17626eb2141df962025c0e3192d89607c4e366c8;p=xonotic%2Fxonotic-data.pk3dir.git

Don't drop items if killed by mobkill command
---

diff --git a/qcsrc/server/monsters/lib/defs.qh b/qcsrc/server/monsters/lib/defs.qh
index 78852632bd..0eda75bdf3 100644
--- a/qcsrc/server/monsters/lib/defs.qh
+++ b/qcsrc/server/monsters/lib/defs.qh
@@ -4,6 +4,8 @@
 .float()	attack_ranged;
 .float() 	checkattack;
 
+.float candrop;
+
 .float spawner_monstercount;
 
 .float monster_respawned; // used to make sure we're not recounting respawned monster stats
diff --git a/qcsrc/server/monsters/lib/monsters.qc b/qcsrc/server/monsters/lib/monsters.qc
index 15aa66cd04..3b01e68d20 100644
--- a/qcsrc/server/monsters/lib/monsters.qc
+++ b/qcsrc/server/monsters/lib/monsters.qc
@@ -204,6 +204,9 @@ void monster_melee (entity targ, float damg, float er, float deathtype)
 
 void Monster_CheckDropCvars (string mon)
 {
+	if not(self.candrop)
+		return; // forced off
+	
 	string dropitem;
 	string dropsize;
 	
@@ -613,10 +616,10 @@ void Monster_Appear ()
 
 void monsters_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
-	if(self.frozen)
+	if(self.frozen && deathtype != DEATH_KILL)
 		return;
 		
-	if(time < self.pain_finished)
+	if(time < self.pain_finished && deathtype != DEATH_KILL)
 		return;
 		
 	if((ignore_turrets && !(attacker.turrcaps_flags & TFL_TURRCAPS_ISTURRET)) || !ignore_turrets)
@@ -652,7 +655,10 @@ void monsters_damage (entity inflictor, entity attacker, float damage, float dea
 			WaypointSprite_UpdateHealth(self.sprite, 0);
 		}
 		
-		if(self.flags & MONSTERFLAG_MINIBOSS) // TODO: cvarise the weapon drop?
+		if(deathtype == DEATH_KILL)
+			self.candrop = FALSE; // killed by mobkill command
+		
+		if(self.flags & MONSTERFLAG_MINIBOSS && self.candrop)
 			W_ThrowNewWeapon(self, WEP_NEX, 0, self.origin, self.velocity);
 			
 		activator = attacker;
@@ -802,6 +808,7 @@ float monster_initialize(string  net_name,
 	self.moveto				= self.origin;
 	self.pos1				= self.origin;
 	self.pos2				= self.angles;
+	self.candrop			= TRUE;
 	
 	if not(self.target_range)
 		self.target_range = autocvar_g_monsters_target_range;
diff --git a/qcsrc/server/monsters/monster/enforcer.qc b/qcsrc/server/monsters/monster/enforcer.qc
index b79ff04deb..3bd02bd146 100644
--- a/qcsrc/server/monsters/monster/enforcer.qc
+++ b/qcsrc/server/monsters/monster/enforcer.qc
@@ -120,16 +120,19 @@ void enforcer_die ()
 	remove(self.weaponentity);
 	self.weaponentity = world;
 	
-	if (self.attack_ranged == enf_missile_rocket)
-		W_ThrowNewWeapon(self, WEP_ROCKET_LAUNCHER, 0, self.origin, self.velocity);
-	else if (self.attack_ranged == enf_missile_plasma)
-		W_ThrowNewWeapon(self, WEP_ELECTRO, 0, self.origin, self.velocity);
-	else if (self.attack_ranged == enf_missile_shotgun)
-		W_ThrowNewWeapon(self, WEP_SHOTGUN, 0, self.origin, self.velocity);	   
-	else if (self.attack_ranged == enf_missile_uzi)
-		W_ThrowNewWeapon(self, WEP_UZI, 0, self.origin, self.velocity);
-	else
-		W_ThrowNewWeapon(self, WEP_LASER, 0, self.origin, self.velocity);
+	if(self.candrop)
+	{
+		if (self.attack_ranged == enf_missile_rocket)
+			W_ThrowNewWeapon(self, WEP_ROCKET_LAUNCHER, 0, self.origin, self.velocity);
+		else if (self.attack_ranged == enf_missile_plasma)
+			W_ThrowNewWeapon(self, WEP_ELECTRO, 0, self.origin, self.velocity);
+		else if (self.attack_ranged == enf_missile_shotgun)
+			W_ThrowNewWeapon(self, WEP_SHOTGUN, 0, self.origin, self.velocity);	   
+		else if (self.attack_ranged == enf_missile_uzi)
+			W_ThrowNewWeapon(self, WEP_UZI, 0, self.origin, self.velocity);
+		else
+			W_ThrowNewWeapon(self, WEP_LASER, 0, self.origin, self.velocity);
+	}
 		
 	self.frame = enforcer_anim_stop;
 		
diff --git a/qcsrc/server/monsters/monster/hknight.qc b/qcsrc/server/monsters/monster/hknight.qc
index cfa1c909b2..726392b92e 100644
--- a/qcsrc/server/monsters/monster/hknight.qc
+++ b/qcsrc/server/monsters/monster/hknight.qc
@@ -406,6 +406,7 @@ void hellknight_die ()
 	self.nextthink	  	= time + 2.1;
 	
 	if(chance < 0.10 || self.flags & MONSTERFLAG_MINIBOSS)
+	if(self.candrop)
 	{
 		self.superweapons_finished = time + autocvar_g_balance_superweapons_time + 5; // give the player a few seconds to find the weapon
 		W_ThrowNewWeapon(self, WEP_FIREBALL, 0, self.origin, self.velocity);
diff --git a/qcsrc/server/monsters/monster/ogre.qc b/qcsrc/server/monsters/monster/ogre.qc
index 2d8d92e828..e1435f79d4 100644
--- a/qcsrc/server/monsters/monster/ogre.qc
+++ b/qcsrc/server/monsters/monster/ogre.qc
@@ -133,7 +133,8 @@ void ogre_die()
 	self.movetype		= MOVETYPE_TOSS;
 	self.think 			= Monster_Fade;
 	
-	W_ThrowNewWeapon(self, WEP_GRENADE_LAUNCHER, 0, self.origin, self.velocity);
+	if(self.candrop)
+		W_ThrowNewWeapon(self, WEP_GRENADE_LAUNCHER, 0, self.origin, self.velocity);
 	if (random() < 0.5)
 		self.frame = ogre_anim_death1;
 	else
diff --git a/qcsrc/server/monsters/monster/shambler.qc b/qcsrc/server/monsters/monster/shambler.qc
index bafabf61c5..3c83c9131e 100644
--- a/qcsrc/server/monsters/monster/shambler.qc
+++ b/qcsrc/server/monsters/monster/shambler.qc
@@ -138,7 +138,8 @@ void shambler_die ()
 {
 	Monster_CheckDropCvars ("shambler");
 	
-	W_ThrowNewWeapon(self, WEP_NEX, 0, self.origin, self.velocity);
+	if(self.candrop)
+		W_ThrowNewWeapon(self, WEP_NEX, 0, self.origin, self.velocity);
 	
 	self.think		  	= Monster_Fade;
 	self.solid		  	= SOLID_NOT;
diff --git a/qcsrc/server/monsters/monster/soldier.qc b/qcsrc/server/monsters/monster/soldier.qc
index b17dad10f5..e9ac961aad 100644
--- a/qcsrc/server/monsters/monster/soldier.qc
+++ b/qcsrc/server/monsters/monster/soldier.qc
@@ -257,14 +257,17 @@ void soldier_die()
 	self.nextthink	  	= time + 2.1;
 	self.weaponentity	= world;
 	
-	if (self.attack_ranged == soldier_missile_uzi)
-		W_ThrowNewWeapon(self, WEP_UZI, 0, self.origin, self.velocity);	   
-	else if (self.attack_ranged == soldier_missile_shotgun)
-		W_ThrowNewWeapon(self, WEP_SHOTGUN, 0, self.origin, self.velocity);
-	else if (self.attack_ranged == soldier_missile_rl)
-		W_ThrowNewWeapon(self, WEP_ROCKET_LAUNCHER, 0, self.origin, self.velocity);
-	else
-		W_ThrowNewWeapon(self, WEP_LASER, 0, self.origin, self.velocity);
+	if(self.candrop)
+	{
+		if (self.attack_ranged == soldier_missile_uzi)
+			W_ThrowNewWeapon(self, WEP_UZI, 0, self.origin, self.velocity);	   
+		else if (self.attack_ranged == soldier_missile_shotgun)
+			W_ThrowNewWeapon(self, WEP_SHOTGUN, 0, self.origin, self.velocity);
+		else if (self.attack_ranged == soldier_missile_rl)
+			W_ThrowNewWeapon(self, WEP_ROCKET_LAUNCHER, 0, self.origin, self.velocity);
+		else
+			W_ThrowNewWeapon(self, WEP_LASER, 0, self.origin, self.velocity);
+	}
 
 	if (random() < 0.5)
 		self.frame = soldier_anim_die1;
diff --git a/qcsrc/server/monsters/monster/wizard.qc b/qcsrc/server/monsters/monster/wizard.qc
index 4f2b4e0135..31d826725f 100644
--- a/qcsrc/server/monsters/monster/wizard.qc
+++ b/qcsrc/server/monsters/monster/wizard.qc
@@ -49,6 +49,8 @@ void Wiz_StartFast ()
 	local	entity	missile;
 	local	vector	dir = '0 0 0';
 	local	float	dist = 0, flytime = 0;
+	
+	self.attack_finished_single = time + 0.2;
 
 	dir = normalize((self.enemy.origin + '0 0 10') - self.origin);
 	dist = vlen (self.enemy.origin - self.origin);