|
|
|
@ -261,14 +261,41 @@ void CWeaponHL2MPBase::FallInit( void )
@@ -261,14 +261,41 @@ void CWeaponHL2MPBase::FallInit( void )
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
SetPickupTouch(); |
|
|
|
|
|
|
|
|
|
SetThink( &CBaseCombatWeapon::FallThink ); |
|
|
|
|
|
|
|
|
|
SetThink( &CWeaponHL2MPBase::FallThink ); |
|
|
|
|
|
|
|
|
|
SetNextThink( gpGlobals->curtime + 0.1f ); |
|
|
|
|
|
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef GAME_DLL |
|
|
|
|
void CWeaponHL2MPBase::FallThink( void ) |
|
|
|
|
{ |
|
|
|
|
// Prevent the common HL2DM weapon respawn bug from happening
|
|
|
|
|
// When a weapon is spawned, the following chain of events occurs:
|
|
|
|
|
// - Spawn() is called (duh), which then calls FallInit()
|
|
|
|
|
// - FallInit() is called, and prepares the weapon's 'Think' function (CBaseCombatWeapon::FallThink())
|
|
|
|
|
// - FallThink() is called, and performs several checks before deciding whether the weapon should Materialize()
|
|
|
|
|
// - Materialize() is called (the HL2DM version above), which sets the weapon's respawn location.
|
|
|
|
|
// The problem occurs when a weapon isn't placed properly by a level designer.
|
|
|
|
|
// If the weapon is unable to move from its location (e.g. if its bounding box is halfway inside a wall), Materialize() never gets called.
|
|
|
|
|
// Since Materialize() never gets called, the weapon's respawn location is never set, so if a person picks it up, it respawns forever at
|
|
|
|
|
// 0 0 0 on the map (infinite loop of fall, wait, respawn, not nice at all for performance and bandwidth!)
|
|
|
|
|
|
|
|
|
|
if( hasSpawnFlags( SF_NORESPAWN ) == false ) |
|
|
|
|
{ |
|
|
|
|
if( GetOriginalSpawnOrigin() == vec3_origin ) |
|
|
|
|
{ |
|
|
|
|
m_vOriginalSpawnOrigin = GetAbsOrigin(); |
|
|
|
|
m_vOriginalSpawnAngles = GetAbsAngles(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return BaseClass::FallThink(); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
const CHL2MPSWeaponInfo &CWeaponHL2MPBase::GetHL2MPWpnData() const |
|
|
|
|
{ |
|
|
|
|
const FileWeaponInfo_t *pWeaponInfo = &GetWpnData(); |
|
|
|
|