void CInventory::Update() { bool bActiveSlotVisible; if(m_iActiveSlot == NO_ACTIVE_SLOT || !m_slots[m_iActiveSlot].m_pIItem || m_slots[m_iActiveSlot].m_pIItem->IsHidden()) { bActiveSlotVisible = false; } else { bActiveSlotVisible = true; } if(m_iNextActiveSlot != m_iActiveSlot && !bActiveSlotVisible) { if(m_iNextActiveSlot != NO_ACTIVE_SLOT && m_slots[m_iNextActiveSlot].m_pIItem) m_slots[m_iNextActiveSlot].m_pIItem->Activate(); m_iActiveSlot = m_iNextActiveSlot; } //проверить рюкзак и пояс, есть ли вещи, которые нужно выкинуть u32 drop_count = 0; for (int i = 0; i < 2; ++i) { TIItemContainer &list = i?m_ruck:m_belt; TIItemContainer::iterator it = list.begin(); while(list.end() != it) { PIItem pIItem = *it; // Msg("-- %s [%d]", pIItem->Name(), pIItem->object().ID()); R_ASSERT(pIItem); if( pIItem->GetDrop() ) { pIItem->SetDrop(FALSE); if(pIItem->object().H_Parent()) { NET_Packet P; pIItem->object().u_EventGen(P, GE_OWNERSHIP_REJECT, pIItem->object().H_Parent()->ID()); P.w_u16(u16(pIItem->object().ID())); if (OnServer()) pIItem->object().u_EventSend(P); } else m_drop_tasks.push_back(pIItem); } ++it; } } //проверить слоты for(u32 i=0; i<(int)m_slots.size(); ++i) { PIItem pIItem = m_slots[i].m_pIItem; if(pIItem && pIItem->GetDrop()) { pIItem->SetDrop (FALSE); if(pIItem->object().H_Parent()) { NET_Packet P; pIItem->object().u_EventGen(P, GE_OWNERSHIP_REJECT, pIItem->object().H_Parent()->ID()); P.w_u16(u16(pIItem->object().ID())); if (OnServer()) pIItem->object().u_EventSend(P); } else m_drop_tasks.push_back (pIItem); } } while (m_drop_tasks.size()) { drop_count = Drop(&m_drop_tasks.back()->object()) ? drop_count + 1 : drop_count; m_drop_tasks.pop_back (); } if (m_drop_last_frame) { m_drop_last_frame = false; m_pOwner->OnItemDropUpdate (); } }