//------------------------------------------------------------------------ void CItem::OnPickedUp(EntityId actorId, bool destroyed) { if(GetISystem()->IsSerializingFile() == 1) return; CActor *pActor=GetActor(actorId); if (!pActor) return; RegisterAsUser(); if(gEnv->bMultiplayer && pActor->IsClient() && IsSelected()) { COffHand* pOffHand = static_cast<COffHand*>(pActor->GetWeaponByClass(CItem::sOffHandClass)); if(pOffHand && pOffHand->GetOffHandState()==eOHS_HOLDING_GRENADE) pOffHand->FinishAction(eOHA_RESET); } if (!IsServer()) return; //if (destroyed && m_params.unique) { if (!m_bonusAccessoryAmmo.empty()) { for (TAccessoryAmmoMap::iterator it=m_bonusAccessoryAmmo.begin(); it!=m_bonusAccessoryAmmo.end(); ++it) { int count=it->second; AddAccessoryAmmoToInventory(it->first,count,pActor); } m_bonusAccessoryAmmo.clear(); } } m_pItemSystem->UnregisterForCollection(GetEntityId()); }
void CHeavyMountedWeapon::StartUse(EntityId userId) { HighlightWeapon(false); if(m_rippedOff) { m_stats.dropped = false; BaseClass::StartUse(userId); } else { CWeapon::StartUse(userId); if (IsOwnerFP()) { DrawSlot(eIGS_FirstPerson, true, true); } } RegisterAsUser(); CActor* pOwner = GetOwnerActor(); if (pOwner) { CHANGED_NETWORK_STATE(pOwner, CPlayer::ASPECT_CURRENT_ITEM); if (!m_rippedOff) { IPlayerInput* pPlayerInput = pOwner && pOwner->IsPlayer() ? static_cast<CPlayer*>(pOwner)->GetPlayerInput() : 0; if (pPlayerInput) pPlayerInput->ClearXIMovement(); } } m_expended_ammo = 0; }
void CHeavyWeapon::StartUse(EntityId userId) { // holster user item here SetOwnerId(userId); CActor* pOwner = GetOwnerActor(); if (!pOwner) return; HighlightWeapon(false); Physicalize(false, false); if(gEnv->bMultiplayer) { m_properties.usable &= strlen(g_pGameCVars->g_forceHeavyWeapon->GetString()) == 0; CHANGED_NETWORK_STATE(pOwner, CPlayer::ASPECT_CURRENT_ITEM); } if(IItem* pCurrentItem = pOwner->GetCurrentItem()) { //Don't keep history if we're switching from Pick & Throw otherwsie we'll switch back to it when we're done with the heavy weapon static IEntityClass* pPickAndThrowWeaponClass = gEnv->pEntitySystem->GetClassRegistry()->FindClass("PickAndThrowWeapon"); m_pItemSystem->SetActorItem(pOwner, GetEntityId(), pCurrentItem->GetEntity()->GetClass() != pPickAndThrowWeaponClass); } else { m_pItemSystem->SetActorItem(pOwner, GetEntityId(), true); } TriggerRespawn(); EnableUpdate(true, eIUS_General); RequireUpdate(eIUS_General); RegisterAsUser(); HandleHeavyWeaponPro(*pOwner); m_stats.brandnew = false; m_stats.used = true; m_stats.detached = false; if(IsClient() && gEnv->pGame->GetIGameFramework()->GetClientActorId()==userId) { if(IEntity* pEntity = GetEntity()) { const char* collectibleId = pEntity->GetClass()->GetName(); CPersistantStats* pStats = g_pGame->GetPersistantStats(); if(pStats && pStats->GetStat(collectibleId, EMPS_SPWeaponByName) == 0) { pStats->SetMapStat(EMPS_SPWeaponByName, collectibleId, eDatabaseStatValueFlag_Available); if(!gEnv->bMultiplayer) { // Show hud unlock msg SHUDEventWrapper::DisplayWeaponUnlockMsg(collectibleId); } } } } if (IsServer()) { pOwner->GetGameObject()->InvokeRMIWithDependentObject(CActor::ClStartUse(), CActor::ItemIdParam(GetEntityId()), eRMI_ToAllClients|eRMI_NoLocalCalls, GetEntityId()); g_pGame->GetGameRules()->AbortEntityRemoval(GetEntityId()); } OnStartUsing(); }