void CWeapon::TestClipAmmoCountIsValid() { TFireModeVector::iterator itEnd = m_firemodes.end(); for (TFireModeVector::iterator it = m_firemodes.begin(); it != itEnd; ++it) { IFireMode* pFM = *it; if (pFM && pFM->IsEnabled()) { IEntityClass* pAmmoType = pFM->GetAmmoType(); if(pAmmoType) { int clipSize = pFM->GetClipSize(); const SFireModeParams* pFireModeParams = ((CFireMode*)pFM)->GetShared(); if (pFireModeParams) { clipSize += pFireModeParams->fireparams.bullet_chamber; } const int ammoCount = GetAmmoCount(pAmmoType); if (ammoCount > clipSize) { SetAmmoCount(pAmmoType, clipSize); const int excessAmmo = ammoCount - clipSize; SetInventoryAmmoCount(pAmmoType, GetInventoryAmmoCount(pAmmoType) + excessAmmo); } } } } }
//------------------------------------------------------------------------ int CScriptBind_Weapon::IsFireModeEnabled(IFunctionHandler *pH, const char* name) { CWeapon *pWeapon = GetWeapon(pH); if (!pWeapon) return pH->EndFunction(); bool bIsEnabled = false; IFireMode* pFireMode = pWeapon->GetFireMode(name); if (pFireMode) { bIsEnabled = pFireMode->IsEnabled(); } return pH->EndFunction(bIsEnabled); }