]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Don't drop items if killed by mobkill command
authorMario <mario.mario@y7mail.com>
Tue, 5 Mar 2013 15:07:01 +0000 (02:07 +1100)
committerMario <mario.mario@y7mail.com>
Tue, 5 Mar 2013 15:07:01 +0000 (02:07 +1100)
qcsrc/server/monsters/lib/defs.qh
qcsrc/server/monsters/lib/monsters.qc
qcsrc/server/monsters/monster/enforcer.qc
qcsrc/server/monsters/monster/hknight.qc
qcsrc/server/monsters/monster/ogre.qc
qcsrc/server/monsters/monster/shambler.qc
qcsrc/server/monsters/monster/soldier.qc
qcsrc/server/monsters/monster/wizard.qc

index 78852632bd51b36a10a59db7281010e6f6b71092..0eda75bdf3bb0efce3621178d7abba463a2eb3b4 100644 (file)
@@ -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
index 15aa66cd04be9e2b67f8c67a0bbb15d02c1e0a23..3b01e68d20c3afd873a89e156532b52f7009022f 100644 (file)
@@ -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;
index b79ff04debe145f14c720f4eeb55188f18e20f10..3bd02bd146efe691d36cd28c60cab6775faadd84 100644 (file)
@@ -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;
                
index cfa1c909b27ff2ddf5abda77743dd7c52be75ade..726392b92ea35fa6bce5bf8c093312386a76f218 100644 (file)
@@ -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);
index 2d8d92e82821860f7e028822780d230b5cdebc11..e1435f79d4bc1dd28f113df5cf02a17f35fa35cc 100644 (file)
@@ -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
index bafabf61c5f8be4aa5c407eb0fe6972bb2d43c69..3c83c9131ed848ebd42bb19848e91e2bfe4ce182 100644 (file)
@@ -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;
index b17dad10f53f3885d2275db1f767e6bbf89eaaa4..e9ac961aad6b90921c1c0c475ef4b93d859010a7 100644 (file)
@@ -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;
index 4f2b4e0135bf1144e4a88806e15fcd21a8815500..31d826725fb8465d754e763135b9f3b4d3a2910b 100644 (file)
@@ -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);