From: Mario 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 78852632b..0eda75bdf 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 15aa66cd0..3b01e68d2 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 b79ff04de..3bd02bd14 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 cfa1c909b..726392b92 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 2d8d92e82..e1435f79d 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 bafabf61c..3c83c9131 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 b17dad10f..e9ac961aa 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 4f2b4e013..31d826725 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);