From 248f7122d2fa547a8cca593c994b58b1ca1ebbe0 Mon Sep 17 00:00:00 2001 From: div0 Date: Mon, 12 Jan 2009 09:10:27 +0000 Subject: [PATCH] new mode: g_weapon_stay 2 players start with one ammo pickup full of ammo for each of the ammo types picking up weapons won't gain any ammo at all git-svn-id: svn://svn.icculus.org/nexuiz/trunk@5494 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/miscfunctions.qc | 27 +++++++++++++++++++++++++++ data/qcsrc/server/t_items.qc | 19 +++++++++++++++---- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 3c486741c..ad5cc8cb2 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -735,6 +735,7 @@ float warmup_start_ammo_rockets; float warmup_start_ammo_cells; float warmup_start_health; float warmup_start_armorvalue; +float g_weapon_stay; entity get_weaponinfo(float w); @@ -917,6 +918,28 @@ void readplayerstartcvars() start_weapons &~= WEPBIT_HOOK; warmup_start_weapons &~= WEPBIT_HOOK; } + + if(g_weapon_stay == 2) + { + if(!start_ammo_shells) start_ammo_shells = g_pickup_shells; + if(!start_ammo_nails) start_ammo_shells = g_pickup_nails; + if(!start_ammo_cells) start_ammo_shells = g_pickup_cells; + if(!start_ammo_rockets) start_ammo_shells = g_pickup_rockets; + if(!warmup_start_ammo_shells) warmup_start_ammo_shells = g_pickup_shells; + if(!warmup_start_ammo_nails) warmup_start_ammo_shells = g_pickup_nails; + if(!warmup_start_ammo_cells) warmup_start_ammo_shells = g_pickup_cells; + if(!warmup_start_ammo_rockets) warmup_start_ammo_shells = g_pickup_rockets; + } + + start_ammo_shells = max(0, start_ammo_shells); + start_ammo_nails = max(0, start_ammo_nails); + start_ammo_cells = max(0, start_ammo_cells); + start_ammo_rockets = max(0, start_ammo_rockets); + + warmup_start_ammo_shells = max(0, warmup_start_ammo_shells); + warmup_start_ammo_nails = max(0, warmup_start_ammo_nails); + warmup_start_ammo_cells = max(0, warmup_start_ammo_cells); + warmup_start_ammo_rockets = max(0, warmup_start_ammo_rockets); } float g_bugrigs; @@ -1029,6 +1052,10 @@ void readlevelcvars(void) g_pickup_healthmega = cvar("g_pickup_healthmega"); g_pickup_healthmega_max = cvar("g_pickup_healthmega_max"); + g_weapon_stay = cvar("g_weapon_stay"); + if(!g_weapon_stay && (cvar("deathmatch") == 2)) + g_weapon_stay = 1; + if not(inWarmupStage) { game_starttime = cvar("g_start_delay"); diff --git a/data/qcsrc/server/t_items.qc b/data/qcsrc/server/t_items.qc index 10d821b1a..c26b115ca 100644 --- a/data/qcsrc/server/t_items.qc +++ b/data/qcsrc/server/t_items.qc @@ -108,12 +108,12 @@ float Item_GiveTo(entity item, entity player) } else { - if (cvar("deathmatch") == 2 || cvar("g_weapon_stay")) + if (g_weapon_stay == 1) { if (item.flags & FL_WEAPON && player.weapons & item.weapons && item.classname != "droppedweapon") - return 0; + goto skip; if (player.weapons & item.weapons && item.flags & FL_TOSSED) // don't let players stack ammo by tossing weapons - return 0; + goto skip; } // in case the player has autoswitch enabled do the following: @@ -200,6 +200,7 @@ float Item_GiveTo(entity item, entity player) } } +:skip // always eat teamed entities if(item.team) pickedup = TRUE; @@ -238,7 +239,7 @@ void Item_Touch (void) if (self.classname == "droppedweapon") remove (self); - else if((self.flags & FL_WEAPON) && !self.team && (cvar("deathmatch") == 2 || cvar("g_weapon_stay"))) + else if((self.flags & FL_WEAPON) && !self.team && g_weapon_stay) return; else { @@ -687,6 +688,16 @@ void weapon_defaultspawnfunc(float wpn) self.ammofield = cvar(strcat("g_pickup_", Item_CounterFieldName(e.items))); } + if(g_weapon_stay == 2) + { + self.ammo_shells = 0; + self.ammo_nails = 0; + self.ammo_cells = 0; + self.ammo_rockets = 0; + // weapon stay 2: don't use ammo on weapon pickups; instead + // initialize all ammo types to the pickup ammo unless set by g_start_ammo_* + } + StartItem(e.model, "weapons/weaponpickup.wav", self.respawntime, e.message, 0, e.weapons, FL_WEAPON, weapon_pickupevalfunc, e.bot_pickupbasevalue); if (self.modelindex) // don't precache if self was removed weapon_action(e.weapon, WR_PRECACHE); -- 2.39.2