From aedd74788359122e9e5c2682c50d528fd55f5c35 Mon Sep 17 00:00:00 2001 From: div0 Date: Wed, 26 Jul 2006 23:10:37 +0000 Subject: [PATCH] please test: unified W_ThrowWeapon and SpawnThrownWeapon. Nothing should have changed, apart from the dying-while-throwing-a-weapon bug which should be fixed by this. git-svn-id: svn://svn.icculus.org/nexuiz/trunk@1778 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_impulse.qc | 2 +- data/qcsrc/server/cl_player.qc | 38 ++-------------- data/qcsrc/server/cl_weapons.qc | 78 +++++++++++++++++++++------------ 3 files changed, 56 insertions(+), 62 deletions(-) diff --git a/data/qcsrc/server/cl_impulse.qc b/data/qcsrc/server/cl_impulse.qc index 5bfce2d14..44fdcfa05 100644 --- a/data/qcsrc/server/cl_impulse.qc +++ b/data/qcsrc/server/cl_impulse.qc @@ -111,7 +111,7 @@ void ImpulseCommands (void) if (self.weapon != WEP_LASER && !cvar("g_minstagib") && !cvar("g_instagib") && !cvar("g_rocketarena") && !cvar("g_lms") && cvar("g_pickup_items") && !cvar("g_nixnex")) - W_ThrowWeapon(); + W_ThrowWeapon(self.velocity * 0.5 + v_forward * 750, '0 0 0', TRUE); } else { diff --git a/data/qcsrc/server/cl_player.qc b/data/qcsrc/server/cl_player.qc index 1a0396a02..f5572773c 100644 --- a/data/qcsrc/server/cl_player.qc +++ b/data/qcsrc/server/cl_player.qc @@ -122,45 +122,15 @@ void player_anim (void) void SpawnThrownWeapon (vector org, float w) { - local entity oldself; - if (!cvar("g_pickup_items")) if (!cvar("g_minstagib")) return; + if (!w) + return; if (w == IT_LASER) return; - oldself = self; - self = spawn(); - // this will cause it to be removed later - self.classname = "droppedweapon"; - - setorigin(self, org); - self.velocity = randomvec() * 100 + '0 0 200'; - SUB_SetFade(self, time + 20, 1); - - if (w == WEP_UZI) - weapon_uzi (); - else if (w == WEP_SHOTGUN) - weapon_shotgun (); - else if (w == WEP_GRENADE_LAUNCHER) - weapon_grenadelauncher (); - else if (w == WEP_ELECTRO) - weapon_electro (); - else if (w == WEP_CRYLINK) - weapon_crylink (); - else if (w == WEP_NEX) - weapon_nex (); - else if (w == WEP_HAGAR) - weapon_hagar (); - else if (w == WEP_ROCKET_LAUNCHER) - weapon_rocketlauncher (); - - // making absolutely sure... - self.classname = "droppedweapon"; - self.colormap = oldself.colormap; - - self = oldself; + W_ThrowWeapon(randomvec() * 100 + '0 0 200', org - self.origin, FALSE); } void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) @@ -321,7 +291,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht // become fully visible self.alpha = 1; // throw a weapon - SpawnThrownWeapon (self.origin + (self.mins + self.maxs) * 0.5, self.weapon); + SpawnThrownWeapon (self.origin + (self.mins + self.maxs) * 0.5, self.switchweapon); // print an obituary message Obituary (attacker, self, deathtype); DropAllRunes(self); diff --git a/data/qcsrc/server/cl_weapons.qc b/data/qcsrc/server/cl_weapons.qc index 06c03ef22..d59773b73 100644 --- a/data/qcsrc/server/cl_weapons.qc +++ b/data/qcsrc/server/cl_weapons.qc @@ -34,7 +34,7 @@ void() thrown_wep_think }; // toss current weapon -void() W_ThrowWeapon +void(vector velo, vector delta, float doreduce) W_ThrowWeapon { local float w, ammo; local entity wep, e; @@ -43,10 +43,10 @@ void() W_ThrowWeapon wep = spawn(); self = wep; w = e.weapon; - setorigin(wep, e.origin); + setorigin(wep, e.origin + delta); makevectors(e.angles); wep.classname = "droppedweapon"; - wep.velocity = e.velocity * 0.5 + v_forward * 750; + wep.velocity = velo; // e.velocity * 0.5 + v_forward * 750; SUB_SetFade(wep, time + 20, 1); if(w == WEP_SHOTGUN) @@ -58,9 +58,12 @@ void() W_ThrowWeapon return; } weapon_shotgun(); - ammo = min(e.ammo_shells, wep.ammo_shells); - wep.ammo_shells = ammo; - e.ammo_shells -= ammo; + if(doreduce) + { + ammo = min(e.ammo_shells, wep.ammo_shells); + wep.ammo_shells = ammo; + e.ammo_shells -= ammo; + } } else if(w == WEP_UZI) { @@ -71,9 +74,12 @@ void() W_ThrowWeapon return; } weapon_uzi(); - ammo = min(e.ammo_nails, wep.ammo_nails); - wep.ammo_nails = ammo; - e.ammo_nails -= ammo; + if(doreduce) + { + ammo = min(e.ammo_nails, wep.ammo_nails); + wep.ammo_nails = ammo; + e.ammo_nails -= ammo; + } } else if(w == WEP_GRENADE_LAUNCHER) { @@ -84,9 +90,12 @@ void() W_ThrowWeapon return; } weapon_grenadelauncher(); - ammo = min(e.ammo_rockets, wep.ammo_rockets); - wep.ammo_rockets = ammo; - e.ammo_rockets -= ammo; + if(doreduce) + { + ammo = min(e.ammo_rockets, wep.ammo_rockets); + wep.ammo_rockets = ammo; + e.ammo_rockets -= ammo; + } } else if(w == WEP_ELECTRO) { @@ -97,9 +106,12 @@ void() W_ThrowWeapon return; } weapon_electro(); - ammo = min(e.ammo_cells, wep.ammo_cells); - wep.ammo_cells = ammo; - e.ammo_cells -= ammo; + if(doreduce) + { + ammo = min(e.ammo_cells, wep.ammo_cells); + wep.ammo_cells = ammo; + e.ammo_cells -= ammo; + } } else if(w == WEP_CRYLINK) { @@ -110,9 +122,12 @@ void() W_ThrowWeapon return; } weapon_crylink(); - ammo = min(e.ammo_cells, wep.ammo_cells); - wep.ammo_cells = ammo; - e.ammo_cells -= ammo; + if(doreduce) + { + ammo = min(e.ammo_cells, wep.ammo_cells); + wep.ammo_cells = ammo; + e.ammo_cells -= ammo; + } } else if(w == WEP_NEX) { @@ -123,9 +138,12 @@ void() W_ThrowWeapon return; } weapon_nex(); - ammo = min(e.ammo_cells, wep.ammo_cells); - wep.ammo_cells = ammo; - e.ammo_cells -= ammo; + if(doreduce) + { + ammo = min(e.ammo_cells, wep.ammo_cells); + wep.ammo_cells = ammo; + e.ammo_cells -= ammo; + } } else if(w == WEP_HAGAR) { @@ -136,9 +154,12 @@ void() W_ThrowWeapon return; } weapon_hagar(); - ammo = min(e.ammo_rockets, wep.ammo_rockets); - wep.ammo_rockets = ammo; - e.ammo_rockets -= ammo; + if(doreduce) + { + ammo = min(e.ammo_rockets, wep.ammo_rockets); + wep.ammo_rockets = ammo; + e.ammo_rockets -= ammo; + } } else if(w == WEP_ROCKET_LAUNCHER) { @@ -149,9 +170,12 @@ void() W_ThrowWeapon return; } weapon_rocketlauncher(); - ammo = min(e.ammo_rockets, wep.ammo_rockets); - wep.ammo_rockets = ammo; - e.ammo_rockets -= ammo; + if(doreduce) + { + ammo = min(e.ammo_rockets, wep.ammo_rockets); + wep.ammo_rockets = ammo; + e.ammo_rockets -= ammo; + } } if(e.items & w) -- 2.39.2