From c977ae3537893d206c82a522144366620dee4787 Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 2 Jun 2013 08:14:58 +1000 Subject: [PATCH] Slightly better handling of monster loot for mutators --- qcsrc/server/monsters/lib/monsters.qc | 41 ++++++++++------------ qcsrc/server/mutators/base.qh | 3 +- qcsrc/server/mutators/mutator_minstagib.qc | 8 +++++ 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/qcsrc/server/monsters/lib/monsters.qc b/qcsrc/server/monsters/lib/monsters.qc index 06f9d4187..122b0de27 100644 --- a/qcsrc/server/monsters/lib/monsters.qc +++ b/qcsrc/server/monsters/lib/monsters.qc @@ -14,7 +14,7 @@ void M_Item_Touch () void monster_item_spawn() { - self.monster_delayedattack(); + self.monster_loot(); self.gravity = 1; self.velocity = randomvec() * 175 + '0 0 325'; @@ -36,40 +36,41 @@ void Monster_DropItem (string itype, string itemsize) { switch(itemsize) { - case "mega": e.monster_delayedattack = spawnfunc_item_armor_large; break; - case "large": e.monster_delayedattack = spawnfunc_item_armor_big; break; - case "medium": e.monster_delayedattack = spawnfunc_item_armor_medium; break; - case "small": e.monster_delayedattack = spawnfunc_item_armor_small; break; + case "mega": e.monster_loot = spawnfunc_item_armor_large; break; + case "large": e.monster_loot = spawnfunc_item_armor_big; break; + case "medium": e.monster_loot = spawnfunc_item_armor_medium; break; + case "small": e.monster_loot = spawnfunc_item_armor_small; break; } - break; // break here? + break; } case "health": { switch(itemsize) { - case "mega": e.monster_delayedattack = spawnfunc_item_health_mega; break; - case "large": e.monster_delayedattack = spawnfunc_item_health_large; break; - case "medium": e.monster_delayedattack = spawnfunc_item_health_medium; break; - case "small": e.monster_delayedattack = spawnfunc_item_health_small; break; + case "mega": e.monster_loot = spawnfunc_item_health_mega; break; + case "large": e.monster_loot = spawnfunc_item_health_large; break; + case "medium": e.monster_loot = spawnfunc_item_health_medium; break; + case "small": e.monster_loot = spawnfunc_item_health_small; break; } - break; // break here? + break; } case "ammo": { switch(itemsize) { - case "shells": e.monster_delayedattack = spawnfunc_item_shells; break; - case "cells": e.monster_delayedattack = spawnfunc_item_cells; break; - case "rockets": e.monster_delayedattack = spawnfunc_item_rockets; break; + case "shells": e.monster_loot = spawnfunc_item_shells; break; + case "cells": e.monster_loot = spawnfunc_item_cells; break; + case "rockets": e.monster_loot = spawnfunc_item_rockets; break; case "bullets": - case "nails": e.monster_delayedattack = spawnfunc_item_bullets; break; + case "nails": e.monster_loot = spawnfunc_item_bullets; break; } break; } } - if(g_minstagib) - e.monster_delayedattack = spawnfunc_item_minst_cells; + other = e; + MUTATOR_CALLHOOK(MonsterDropItem); + e = other; e.think = monster_item_spawn; e.nextthink = time + 0.1; @@ -238,12 +239,6 @@ void Monster_CheckDropCvars (string mon) dropitem = cvar_string(strcat("g_monster_", mon, "_drop")); dropsize = cvar_string(strcat("g_monster_", mon, "_drop_size")); - monster_dropitem = dropitem; - monster_dropsize = dropsize; - MUTATOR_CALLHOOK(MonsterDropItem); - dropitem = monster_dropitem; - dropsize = monster_dropsize; - if(autocvar_g_monsters_forcedrop) Monster_DropItem(autocvar_g_monsters_drop_type, autocvar_g_monsters_drop_size); else if(dropitem != "") diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index 75b71219f..e0e14979f 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -174,8 +174,7 @@ MUTATOR_HOOKABLE(MonsterRespawn); MUTATOR_HOOKABLE(MonsterDropItem); // called when a monster is dropping loot // INPUT, OUTPUT: - string monster_dropitem; - string monster_dropsize; + .void() monster_loot; MUTATOR_HOOKABLE(MonsterMove); // called when a monster moves diff --git a/qcsrc/server/mutators/mutator_minstagib.qc b/qcsrc/server/mutators/mutator_minstagib.qc index 28e8623d6..04de1ce4d 100644 --- a/qcsrc/server/mutators/mutator_minstagib.qc +++ b/qcsrc/server/mutators/mutator_minstagib.qc @@ -109,6 +109,13 @@ MUTATOR_HOOKFUNCTION(minstagib_MatchEnd) return FALSE; } +MUTATOR_HOOKFUNCTION(minstagib_MonsterLoot) +{ + other.monster_loot = spawnfunc_item_minst_cells; + + return FALSE; +} + MUTATOR_HOOKFUNCTION(minstagib_BotShouldAttack) { if(checkentity.items & IT_STRENGTH) @@ -402,6 +409,7 @@ MUTATOR_HOOKFUNCTION(minstagib_BuildMutatorsPrettyString) MUTATOR_DEFINITION(mutator_minstagib) { MUTATOR_HOOK(MatchEnd, minstagib_MatchEnd, CBC_ORDER_ANY); + MUTATOR_HOOK(MonsterDropItem, minstagib_MonsterLoot, CBC_ORDER_ANY); MUTATOR_HOOK(BotShouldAttack, minstagib_BotShouldAttack, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerPhysics, minstagib_PlayerPhysics, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerSpawn, minstagib_PlayerSpawn, CBC_ORDER_ANY); -- 2.39.2