From 1fc44c8dd3145e1a1caead9bab000dbbaea3cdbe Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 20 Mar 2014 12:25:17 +1100 Subject: [PATCH] Clean up monster mutator hooks --- qcsrc/server/mutators/mutator_overkill.qc | 72 ++++++++++++++--------- 1 file changed, 45 insertions(+), 27 deletions(-) diff --git a/qcsrc/server/mutators/mutator_overkill.qc b/qcsrc/server/mutators/mutator_overkill.qc index 89888317b..3c8154b11 100644 --- a/qcsrc/server/mutators/mutator_overkill.qc +++ b/qcsrc/server/mutators/mutator_overkill.qc @@ -7,7 +7,7 @@ void ok_DecreaseCharge(entity ent, float wep) if(wepent.weapon == 0) return; // dummy - ent.ammo_charge[wep] -= cvar(sprintf("g_overkill_ammo_decharge_%s", wepent.netname)); + ent.ammo_charge[wep] -= max(0, cvar(sprintf("g_overkill_ammo_decharge_%s", wepent.netname))); } void ok_IncreaseCharge(entity ent, float wep) @@ -62,9 +62,11 @@ MUTATOR_HOOKFUNCTION(ok_PlayerDamage_Calculate) frag_damage = 0; if(frag_attacker != frag_target) + if(frag_target.health > 0) + if(frag_target.freezetag_frozen == 0) + if(frag_target.deadflag == DEAD_NO) { - if(frag_target.health >= 1 && !frag_target.freezetag_frozen && frag_target.deadflag == DEAD_NO) - Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_SECONDARY_NODAMAGE); + Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_SECONDARY_NODAMAGE); frag_force = '0 0 0'; } } @@ -76,9 +78,6 @@ MUTATOR_HOOKFUNCTION(ok_PlayerDies) { entity oldself = self; - if(other.flags & FL_MONSTER) - other.monster_loot = func_null; // this hook is shared with monsters - self.ok_lastwep = self.weapon; self.ok_deathloc = self.origin; self = spawn(); @@ -98,6 +97,12 @@ MUTATOR_HOOKFUNCTION(ok_PlayerDies) return FALSE; } +MUTATOR_HOOKFUNCTION(ok_MonsterSpawn) +{ + self.candrop = FALSE; // no default item drops + return FALSE; +} + MUTATOR_HOOKFUNCTION(ok_ForbidThrowCurrentWeapon) { return TRUE; @@ -171,28 +176,40 @@ MUTATOR_HOOKFUNCTION(ok_OnEntityPreSpawn) { if(autocvar_g_powerups) if(autocvar_g_overkill_powerups_replace) - if(self.classname == "item_strength") { - entity wep = spawn(); - setorigin(wep, self.origin); - wep.ok_item = TRUE; - wep.think = start_hmg; - wep.nextthink = time + 0.1; - wep.noalign = self.noalign; - return TRUE; - } + if(self.classname == "item_strength") + { + entity wep = spawn(); + setorigin(wep, self.origin); + setmodel(wep, "models/weapons/g_ok_hmg.md3"); + wep.classname = "weapon_hmg"; + wep.ok_item = TRUE; + wep.noalign = self.noalign; + wep.cnt = self.cnt; + wep.team = self.team; + wep.respawntime = autocvar_g_overkill_superguns_respawn_time; + wep.pickup_anyway = TRUE; + wep.think = spawnfunc_weapon_hmg; + wep.nextthink = time + 0.1; + return TRUE; + } - if(autocvar_g_powerups) - if(autocvar_g_overkill_powerups_replace) - if(self.classname == "item_invincible") - { - entity wep = spawn(); - setorigin(wep, self.origin); - wep.ok_item = TRUE; - wep.think = start_rpc; - wep.nextthink = time + 0.1; - wep.noalign = self.noalign; - return TRUE; + if(self.classname == "item_invincible") + { + entity wep = spawn(); + setorigin(wep, self.origin); + setmodel(wep, "models/weapons/g_ok_rl.md3"); + wep.classname = "weapon_rpc"; + wep.ok_item = TRUE; + wep.noalign = self.noalign; + wep.cnt = self.cnt; + wep.team = self.team; + wep.respawntime = autocvar_g_overkill_superguns_respawn_time; + wep.pickup_anyway = TRUE; + wep.think = spawnfunc_weapon_rpc; + wep.nextthink = time + 0.1; + return TRUE; + } } return FALSE; @@ -314,9 +331,10 @@ MUTATOR_DEFINITION(mutator_overkill) MUTATOR_HOOK(PlayerSpawn, ok_PlayerSpawn, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerDamage_Calculate, ok_PlayerDamage_Calculate, CBC_ORDER_LAST); MUTATOR_HOOK(PlayerDies, ok_PlayerDies, CBC_ORDER_ANY); + MUTATOR_HOOK(MonsterDies, ok_PlayerDies, CBC_ORDER_ANY); + MUTATOR_HOOK(MonsterSpawn, ok_MonsterSpawn, CBC_ORDER_ANY); MUTATOR_HOOK(OnEntityPreSpawn, ok_OnEntityPreSpawn, CBC_ORDER_ANY); MUTATOR_HOOK(FilterItem, ok_ItemRemove, CBC_ORDER_ANY); - MUTATOR_HOOK(MonsterDropItem, ok_PlayerDies, CBC_ORDER_ANY); MUTATOR_HOOK(SpectateCopy, ok_SpectateCopy, CBC_ORDER_ANY); MUTATOR_HOOK(SetStartItems, ok_StartItems, CBC_ORDER_ANY); MUTATOR_HOOK(BuildMutatorsString, ok_BuildMutatorsString, CBC_ORDER_ANY); -- 2.39.2