Fix organs spawning due to non-Vita-Saw damage

With this commit, organs only spawn when the weapon dealing damage is the Vita-Saw - not just when the Medic deals damage and is holding the Vita-Saw.
This commit is contained in:
Thomas Kain 2025-03-14 22:55:56 -04:00 committed by EricS-Valve
parent 65aa7c910e
commit ed11b204b2

View File

@ -9096,44 +9096,40 @@ int CTFPlayer::OnTakeDamage( const CTakeDamageInfo &inputInfo )
} }
} }
if ( pTFAttacker && pTFAttacker->IsPlayerClass( TF_CLASS_MEDIC ) ) if ( pTFAttacker && pTFAttacker->IsPlayerClass( TF_CLASS_MEDIC ) && pWeapon && pWeapon->GetWeaponID() == TF_WEAPON_BONESAW )
{ {
CTFWeaponBase *pAttackerWeapon = pTFAttacker->GetActiveTFWeapon(); CTFBonesaw *pBoneSaw = static_cast< CTFBonesaw* >( pWeapon );
if ( pAttackerWeapon && pAttackerWeapon->GetWeaponID() == TF_WEAPON_BONESAW ) if ( pBoneSaw->GetBonesawType() == BONESAW_UBER_SAVEDONDEATH )
{ {
CTFBonesaw *pBoneSaw = static_cast< CTFBonesaw* >( pAttackerWeapon ); // Spawn their spleen
if ( pBoneSaw->GetBonesawType() == BONESAW_UBER_SAVEDONDEATH ) CPhysicsProp *pRandomInternalOrgan = dynamic_cast< CPhysicsProp* >( CreateEntityByName( "prop_physics_override" ) );
if ( pRandomInternalOrgan )
{ {
// Spawn their spleen pRandomInternalOrgan->SetCollisionGroup( COLLISION_GROUP_DEBRIS );
CPhysicsProp *pRandomInternalOrgan = dynamic_cast< CPhysicsProp* >( CreateEntityByName( "prop_physics_override" ) ); pRandomInternalOrgan->AddFlag( FL_GRENADE );
if ( pRandomInternalOrgan ) char buf[512];
{ Q_snprintf( buf, sizeof( buf ), "%.10f %.10f %.10f", GetAbsOrigin().x, GetAbsOrigin().y, GetAbsOrigin().z );
pRandomInternalOrgan->SetCollisionGroup( COLLISION_GROUP_DEBRIS ); pRandomInternalOrgan->KeyValue( "origin", buf );
pRandomInternalOrgan->AddFlag( FL_GRENADE ); Q_snprintf( buf, sizeof( buf ), "%.10f %.10f %.10f", GetAbsAngles().x, GetAbsAngles().y, GetAbsAngles().z );
char buf[512]; pRandomInternalOrgan->KeyValue( "angles", buf );
Q_snprintf( buf, sizeof( buf ), "%.10f %.10f %.10f", GetAbsOrigin().x, GetAbsOrigin().y, GetAbsOrigin().z ); pRandomInternalOrgan->KeyValue( "model", "models/player/gibs/random_organ.mdl" );
pRandomInternalOrgan->KeyValue( "origin", buf ); pRandomInternalOrgan->KeyValue( "fademindist", "-1" );
Q_snprintf( buf, sizeof( buf ), "%.10f %.10f %.10f", GetAbsAngles().x, GetAbsAngles().y, GetAbsAngles().z ); pRandomInternalOrgan->KeyValue( "fademaxdist", "0" );
pRandomInternalOrgan->KeyValue( "angles", buf ); pRandomInternalOrgan->KeyValue( "fadescale", "1" );
pRandomInternalOrgan->KeyValue( "model", "models/player/gibs/random_organ.mdl" ); pRandomInternalOrgan->KeyValue( "inertiaScale", "1.0" );
pRandomInternalOrgan->KeyValue( "fademindist", "-1" ); pRandomInternalOrgan->KeyValue( "physdamagescale", "0.1" );
pRandomInternalOrgan->KeyValue( "fademaxdist", "0" ); DispatchSpawn( pRandomInternalOrgan );
pRandomInternalOrgan->KeyValue( "fadescale", "1" ); pRandomInternalOrgan->m_takedamage = DAMAGE_YES; // Take damage, otherwise this can block trains
pRandomInternalOrgan->KeyValue( "inertiaScale", "1.0" ); pRandomInternalOrgan->SetHealth( 100 );
pRandomInternalOrgan->KeyValue( "physdamagescale", "0.1" ); pRandomInternalOrgan->Activate();
DispatchSpawn( pRandomInternalOrgan );
pRandomInternalOrgan->m_takedamage = DAMAGE_YES; // Take damage, otherwise this can block trains
pRandomInternalOrgan->SetHealth( 100 );
pRandomInternalOrgan->Activate();
Vector vecImpulse = RandomVector( -1.f, 1.f ); Vector vecImpulse = RandomVector( -1.f, 1.f );
vecImpulse.z = 1.f; vecImpulse.z = 1.f;
VectorNormalize( vecImpulse ); VectorNormalize( vecImpulse );
Vector vecVelocity = vecImpulse * 250.0; Vector vecVelocity = vecImpulse * 250.0;
pRandomInternalOrgan->ApplyAbsVelocityImpulse( vecVelocity ); pRandomInternalOrgan->ApplyAbsVelocityImpulse( vecVelocity );
pRandomInternalOrgan->ThinkSet( &CBaseEntity::SUB_Remove, gpGlobals->curtime + 5.f, "DieContext" ); pRandomInternalOrgan->ThinkSet( &CBaseEntity::SUB_Remove, gpGlobals->curtime + 5.f, "DieContext" );
}
} }
} }
} }