bool CInventory::Ruck(PIItem pIItem) { if(!CanPutInRuck(pIItem)) return false; bool in_slot = InSlot(pIItem); //вещь была в слоте if(in_slot) { if(m_iActiveSlot == pIItem->GetSlot()) Activate(NO_ACTIVE_SLOT); m_slots[pIItem->GetSlot()].m_pIItem = NULL; } else { //вещь была на поясе или вообще только поднята с земли TIItemContainer::iterator it = std::find(m_belt.begin(), m_belt.end(), pIItem); if(m_belt.end() != it) m_belt.erase(it); } m_ruck.insert (m_ruck.end(), pIItem); CalcTotalWeight (); InvalidateState (); m_pOwner->OnItemRuck (pIItem, pIItem->m_eItemPlace); pIItem->m_eItemPlace = eItemPlaceRuck; pIItem->OnMoveToRuck (); if(in_slot) pIItem->object().processing_deactivate(); return true; }
bool CInventory::Ruck(PIItem pIItem, bool strict_placement) { if(!strict_placement && !CanPutInRuck(pIItem)) return false; if (!IsGameTypeSingle()) { u16 real_parent = pIItem->object().H_Parent() ? pIItem->object().H_Parent()->ID() : u16(-1); if (GetOwner()->object_id() != real_parent) { Msg("! WARNING: CL: actor [%d] tries to place to ruck not own item [%d], that has parent [%d]", GetOwner()->object_id(), pIItem->object_id(), real_parent); return false; } } bool in_slot = InSlot(pIItem); //вещь была в слоте if(in_slot) { if(GetActiveSlot() == pIItem->CurrSlot()) Activate(NO_ACTIVE_SLOT); m_slots[pIItem->CurrSlot()].m_pIItem = NULL; }else { //вещь была на поясе или вообще только поднята с земли TIItemContainer::iterator it = std::find(m_belt.begin(), m_belt.end(), pIItem); if(m_belt.end() != it) m_belt.erase(it); if (!IsGameTypeSingle()) { u16 item_parent_id = pIItem->object().H_Parent() ? pIItem->object().H_Parent()->ID() : u16(-1) ; u16 inventory_owner_id = GetOwner()->object_id(); R_ASSERT2(item_parent_id == inventory_owner_id, make_string("! ERROR: CL: Actor[%d] tries to place to ruck not own item [%d], real item owner is [%d]", inventory_owner_id, pIItem->object_id(), item_parent_id).c_str() ); #ifdef MP_LOGGING Msg("--- Actor [%d] place to ruck item [%d]", inventory_owner_id, pIItem->object_id()); #endif } } m_ruck.insert (m_ruck.end(), pIItem); CalcTotalWeight (); InvalidateState (); m_pOwner->OnItemRuck (pIItem, pIItem->m_ItemCurrPlace); SInvItemPlace prev_place = pIItem->m_ItemCurrPlace; pIItem->m_ItemCurrPlace.type = eItemPlaceRuck; pIItem->OnMoveToRuck (prev_place); if(in_slot) pIItem->object().processing_deactivate(); return true; }