From cd27c6dd9a2260a9436da6bc61f9ab690d11f79c Mon Sep 17 00:00:00 2001 From: kadaverjack Date: Thu, 9 Feb 2006 22:55:25 +0000 Subject: [PATCH] tossed weapons now have more ammo and can be immediately picked up by other players git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1004 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- Docs/scorelog.txt | 4 +-- data/qcsrc/server/gamec/cl_weapons.c | 49 ++++++++++++++++------------ data/qcsrc/server/gamec/t_items.c | 2 ++ 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/Docs/scorelog.txt b/Docs/scorelog.txt index f396ce67d..0db529752 100644 --- a/Docs/scorelog.txt +++ b/Docs/scorelog.txt @@ -29,8 +29,8 @@ example: start of a new section: :scores:_: (if the dump was triggered by "printstats", the line starts with :status:) player entry: :player::::: (playername might contain ":", - so be sure your parser doesn't split them) - sectionend: :end + so be sure your parser doesn't split them, playtime is messured in seconds) + section end: :end team colors: Red Team = 5 diff --git a/data/qcsrc/server/gamec/cl_weapons.c b/data/qcsrc/server/gamec/cl_weapons.c index bab4bdf84..af2e61514 100644 --- a/data/qcsrc/server/gamec/cl_weapons.c +++ b/data/qcsrc/server/gamec/cl_weapons.c @@ -23,9 +23,10 @@ void(float wpn, float wrequest) weapon_action = }; // think function for tossed weapons -void() thrown_wep_think = +void() thrown_wep_think { self.solid = SOLID_TRIGGER; + self.owner = world; SUB_SetFade(self, time + 20, 1); setorigin(self, self.origin); }; @@ -33,7 +34,7 @@ void() thrown_wep_think = // toss current weapon void() W_ThrowWeapon { - local float w; + local float w, ammo; local entity wep, e; e = self; @@ -55,8 +56,9 @@ void() W_ThrowWeapon return; } weapon_shotgun(); - wep.ammo_shells = 1; - e.ammo_shells -= 1; + ammo = min(e.ammo_shells, wep.ammo_shells); + wep.ammo_shells = ammo; + e.ammo_shells -= ammo; } else if(w == WEP_UZI) { @@ -67,8 +69,9 @@ void() W_ThrowWeapon return; } weapon_uzi(); - wep.ammo_nails = 1; - e.ammo_nails -= 1; + ammo = min(e.ammo_nails, wep.ammo_nails); + wep.ammo_nails = ammo; + e.ammo_nails -= ammo; } else if(w == WEP_GRENADE_LAUNCHER) { @@ -79,8 +82,9 @@ void() W_ThrowWeapon return; } weapon_grenadelauncher(); - wep.ammo_rockets = 1; - e.ammo_rockets -= 1; + ammo = min(e.ammo_rockets, wep.ammo_rockets); + wep.ammo_rockets = ammo; + e.ammo_rockets -= ammo; } else if(w == WEP_ELECTRO) { @@ -91,8 +95,9 @@ void() W_ThrowWeapon return; } weapon_electro(); - wep.ammo_cells = 1; - e.ammo_cells -= 1; + ammo = min(e.ammo_cells, wep.ammo_cells); + wep.ammo_cells = ammo; + e.ammo_cells -= ammo; } else if(w == WEP_CRYLINK) { @@ -103,8 +108,9 @@ void() W_ThrowWeapon return; } weapon_crylink(); - wep.ammo_cells = 1; - e.ammo_cells -= 1; + ammo = min(e.ammo_cells, wep.ammo_cells); + wep.ammo_cells = ammo; + e.ammo_cells -= ammo; } else if(w == WEP_NEX) { @@ -115,8 +121,9 @@ void() W_ThrowWeapon return; } weapon_nex(); - wep.ammo_cells = 1; - e.ammo_cells -= 1; + ammo = min(e.ammo_cells, wep.ammo_cells); + wep.ammo_cells = ammo; + e.ammo_cells -= ammo; } else if(w == WEP_HAGAR) { @@ -127,8 +134,9 @@ void() W_ThrowWeapon return; } weapon_hagar(); - wep.ammo_rockets = 1; - e.ammo_rockets -= 1; + ammo = min(e.ammo_rockets, wep.ammo_rockets); + wep.ammo_rockets = ammo; + e.ammo_rockets -= ammo; } else if(w == WEP_ROCKET_LAUNCHER) { @@ -139,15 +147,16 @@ void() W_ThrowWeapon return; } weapon_rocketlauncher(); - wep.ammo_rockets = 1; - e.ammo_rockets -= 1; + ammo = min(e.ammo_rockets, wep.ammo_rockets); + wep.ammo_rockets = ammo; + e.ammo_rockets -= ammo; } if(e.items & w) sprint(e, strcat("You dropped the ^2", wep.netname, "\n")); - wep.solid = SOLID_NOT; + wep.owner = e; setorigin(wep, wep.origin); - wep.nextthink = time + 0.25; + wep.nextthink = time + 0.5; wep.think = thrown_wep_think; wep.classname = "droppedweapon"; e.items = e.items - (e.items & w); diff --git a/data/qcsrc/server/gamec/t_items.c b/data/qcsrc/server/gamec/t_items.c index 9d59f93b0..350532b16 100644 --- a/data/qcsrc/server/gamec/t_items.c +++ b/data/qcsrc/server/gamec/t_items.c @@ -28,6 +28,8 @@ void Item_Touch (void) return; if (self.health && other.health >= other.max_health) return; + if (self.owner == other) + return; // Savage: Remove the respawn effect if still present self.effects = self.effects - (self.effects & EF_STARDUST); -- 2.39.2