Ejemplo n.º 1
0
//------------------------------------------------------------------------
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());

}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
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();
}