//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- int GetWeaponFromDamage( const CTakeDamageInfo &info ) { int iWeapon = TF_WEAPON_NONE; // Work out what killed the player, and send a message to all clients about it const char *killer_weapon_name = TFGameRules()->GetKillingWeaponName( info, NULL ); if ( !Q_strnicmp( killer_weapon_name, "tf_projectile", 13 ) ) { for( int i = 0; i < ARRAYSIZE( g_szProjectileNames ); i++ ) { if ( !Q_stricmp( &killer_weapon_name[ 3 ], g_szProjectileNames[ i ] ) ) { iWeapon = g_iProjectileWeapons[ i ]; break; } } } else { int iLen = Q_strlen( killer_weapon_name ); // strip off _projectile from projectiles shot from other projectiles if ( ( iLen < 256 ) && ( iLen > 11 ) && !Q_stricmp( &killer_weapon_name[ iLen - 11 ], "_projectile" ) ) { char temp[ 256 ]; Q_strcpy( temp, killer_weapon_name ); temp[ iLen - 11 ] = 0; // set the weapon used iWeapon = GetWeaponId( temp ); } else { // set the weapon used iWeapon = GetWeaponId( killer_weapon_name ); } } return iWeapon; }
void Game_Actor::ChangeEquipment(int equip_type, int item_id) { int prev_item = SetEquipment(equip_type, item_id); if (prev_item != 0) { Main_Data::game_party->AddItem(prev_item, 1); } if (item_id != 0) { Main_Data::game_party->RemoveItem(item_id, 1); } // In case you have a two_handed weapon equipped, the other weapon is removed. const RPG::Item* item = ReaderUtil::GetElement(Data::items, GetWeaponId()); const RPG::Item* item2 = ReaderUtil::GetElement(Data::items, GetShieldId()); if (item && item2 && (item->two_handed || item2->two_handed)) { ChangeEquipment(equip_type == RPG::Item::Type_weapon ? equip_type + 1 : equip_type - 1, 0); } }
//------------------------------------------------------------------------- uint16 CStatsEntityIdRegistry::GetWeaponId( const char *pWeaponName ) const { if( const IEntityClass *pClass = gEnv->pEntitySystem->GetClassRegistry()->FindClass(pWeaponName) ) { return GetWeaponId( pClass ); } else { int numWeaponExtensions = m_weaponExtensions.size(); for( int i = 0; i < numWeaponExtensions; ++i ) { if( !stricmp( m_weaponExtensions[i].m_name.c_str(), pWeaponName ) ) { return m_weaponExtensions[i].m_id; } } return m_defaultWeapon; } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void TFPlayerClassData_t::ParseData( KeyValues *pKeyValuesData ) { // Attributes. Q_strncpy( m_szClassName, pKeyValuesData->GetString( "name" ), TF_NAME_LENGTH ); // Load the high res model or the lower res model. Q_strncpy( m_szHWMModelName, pKeyValuesData->GetString( "model_hwm" ), TF_NAME_LENGTH ); Q_strncpy( m_szModelName, pKeyValuesData->GetString( "model" ), TF_NAME_LENGTH ); Q_strncpy( m_szModelHandsName, pKeyValuesData->GetString("model_hands"), TF_NAME_LENGTH); Q_strncpy( m_szLocalizableName, pKeyValuesData->GetString( "localize_name" ), TF_NAME_LENGTH ); m_flMaxSpeed = pKeyValuesData->GetFloat( "speed_max" ); m_nMaxHealth = pKeyValuesData->GetInt( "health_max" ); m_nMaxArmor = pKeyValuesData->GetInt( "armor_max" ); // Weapons. int i; char buf[32]; for ( i=0;i<TF_PLAYER_WEAPON_COUNT;i++ ) { Q_snprintf( buf, sizeof(buf), "weapon%d", i+1 ); m_aWeapons[i] = GetWeaponId( pKeyValuesData->GetString( buf ) ); } // Grenades. m_aGrenades[0] = GetWeaponId( pKeyValuesData->GetString( "grenade1" ) ); m_aGrenades[1] = GetWeaponId( pKeyValuesData->GetString( "grenade2" ) ); // Ammo Max. KeyValues *pAmmoKeyValuesData = pKeyValuesData->FindKey( "AmmoMax" ); if ( pAmmoKeyValuesData ) { for ( int iAmmo = 1; iAmmo < TF_AMMO_COUNT; ++iAmmo ) { m_aAmmoMax[iAmmo] = pAmmoKeyValuesData->GetInt( g_aAmmoNames[iAmmo], 0 ); } } // Buildables for ( i=0;i<TF_PLAYER_BUILDABLE_COUNT;i++ ) { Q_snprintf( buf, sizeof(buf), "buildable%d", i+1 ); m_aBuildable[i] = GetBuildableId( pKeyValuesData->GetString( buf ) ); } // Temp animation flags m_bDontDoAirwalk = ( pKeyValuesData->GetInt( "DontDoAirwalk", 0 ) > 0 ); m_bDontDoNewJump = ( pKeyValuesData->GetInt( "DontDoNewJump", 0 ) > 0 ); #ifdef GAME_DLL // right now we only emit these sounds from server. if that changes we can do this in both dlls // Death Sounds Q_strncpy( m_szDeathSound, pKeyValuesData->GetString( "sound_death", "Player.Death" ), MAX_PLAYERCLASS_SOUND_LENGTH ); Q_strncpy( m_szCritDeathSound, pKeyValuesData->GetString( "sound_crit_death", "TFPlayer.CritDeath" ), MAX_PLAYERCLASS_SOUND_LENGTH ); Q_strncpy( m_szMeleeDeathSound, pKeyValuesData->GetString( "sound_melee_death", "Player.MeleeDeath" ), MAX_PLAYERCLASS_SOUND_LENGTH ); Q_strncpy( m_szExplosionDeathSound, pKeyValuesData->GetString( "sound_explosion_death", "Player.ExplosionDeath" ), MAX_PLAYERCLASS_SOUND_LENGTH ); #endif // The file has been parsed. m_bParsed = true; }