void CActor::g_PerformDrop ( ) { b_DropActivated = FALSE; PIItem pItem = inventory().ActiveItem(); if (0==pItem) return; u32 s = inventory().GetActiveSlot(); if(inventory().m_slots[s].m_bPersistent) return; pItem->Drop(); }
bool CWeaponMagazined::Attach(PIItem pIItem, bool b_send_event) { bool result = false; CScope* pScope = smart_cast<CScope*>(pIItem); CSilencer* pSilencer = smart_cast<CSilencer*>(pIItem); CGrenadeLauncher* pGrenadeLauncher = smart_cast<CGrenadeLauncher*>(pIItem); if(pScope && m_eScopeStatus == CSE_ALifeItemWeapon::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonScope) == 0 && (m_sScopeName == pIItem->object().cNameSect())) { m_flagsAddOnState |= CSE_ALifeItemWeapon::eWeaponAddonScope; result = true; } else if(pSilencer && m_eSilencerStatus == CSE_ALifeItemWeapon::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonSilencer) == 0 && (m_sSilencerName == pIItem->object().cNameSect())) { m_flagsAddOnState |= CSE_ALifeItemWeapon::eWeaponAddonSilencer; result = true; } else if(pGrenadeLauncher && m_eGrenadeLauncherStatus == CSE_ALifeItemWeapon::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher) == 0 && (m_sGrenadeLauncherName == pIItem->object().cNameSect())) { m_flagsAddOnState |= CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher; result = true; } if(result) { if (b_send_event && OnServer()) { //уничтожить подсоединенную вещь из инвентаря pIItem->Drop (); pIItem->object().DestroyObject (); }; UpdateAddonsVisibility(); InitAddons(); return true; } else return inherited::Attach(pIItem, b_send_event); }
bool CInventory::DropAll() { TIItemContainer::iterator it; for(it = m_all.begin(); m_all.end() != it; ++it) { PIItem pIItem = *it; Ruck (pIItem); pIItem->Drop (); } CalcTotalWeight (); InvalidateState (); return true; }
bool CInventory::Eat(PIItem pIItem) { //устанаовить съедобна ли вещь CEatableItem* pItemToEat = smart_cast<CEatableItem*>(pIItem); if(!pItemToEat) return false; CEntityAlive *entity_alive = smart_cast<CEntityAlive*>(m_pOwner); if(!entity_alive) return false; pItemToEat->UseBy (entity_alive); if(IsGameTypeSingle() && Actor()->m_inventory == this) Actor()->callback(GameObject::eUseObject)((smart_cast<CGameObject*>(pIItem))->lua_game_object()); if(pItemToEat->Empty() ) { pIItem->Drop(); return false; } return true; }