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; CInventoryOwner* IO = smart_cast<CInventoryOwner*>(entity_alive); if ( !IO ) return false; CInventory* pInventory = pItemToEat->m_pInventory; if ( !pInventory || pInventory != this ) return false; if ( pInventory != IO->m_inventory ) return false; if ( pItemToEat->object().H_Parent()->ID() != entity_alive->ID() ) return false; if (!pItemToEat->UseBy(entity_alive)) return false; #ifdef MP_LOGGING Msg( "--- Actor [%d] use or eat [%d][%s]", entity_alive->ID(), pItemToEat->object().ID(), pItemToEat->object().cNameSect().c_str() ); #endif // MP_LOGGING if(IsGameTypeSingle() && Actor()->m_inventory == this) Actor()->callback(GameObject::eUseObject)((smart_cast<CGameObject*>(pIItem))->lua_game_object()); if(pItemToEat->Empty()) { pIItem->SetDropManual(TRUE); return false; } return true; }
void CUIInventoryWnd::SendEvent_Item_Drop(PIItem pItem) { pItem->SetDropManual (TRUE); if( OnClient() ) { NET_Packet P; pItem->object().u_EventGen (P, GE_OWNERSHIP_REJECT, pItem->object().H_Parent()->ID()); P.w_u16 (pItem->object().ID()); pItem->object().u_EventSend(P); } g_pInvWnd->PlaySnd (eInvDropItem); };
void CInventory::UpdateDropItem(PIItem pIItem) { if( pIItem->GetDropManual() ) { pIItem->SetDropManual(FALSE); if ( OnServer() ) { NET_Packet P; pIItem->object().u_EventGen (P, GE_OWNERSHIP_REJECT, pIItem->object().H_Parent()->ID()); P.w_u16 (u16(pIItem->object().ID())); pIItem->object().u_EventSend(P); } }// dropManual }