void CUIActorMenu::highlight_item_slot(CUICellItem* cell_item) { PIItem item = (PIItem)cell_item->m_pData; if(!item) return; if(CUIDragDropListEx::m_drag_item) return; CWeapon* weapon = smart_cast<CWeapon*>(item); CHelmet* helmet = smart_cast<CHelmet*>(item); CCustomOutfit* outfit = smart_cast<CCustomOutfit*>(item); CCustomDetector* detector = smart_cast<CCustomDetector*>(item); CEatableItem* eatable = smart_cast<CEatableItem*>(item); CArtefact* artefact = smart_cast<CArtefact*>(item); if(weapon) { m_InvSlot2Highlight->Show(true); m_InvSlot3Highlight->Show(true); return; } if(helmet) { m_HelmetSlotHighlight->Show(true); return; } if(outfit) { m_OutfitSlotHighlight->Show(true); return; } if(detector) { m_DetectorSlotHighlight->Show(true); return; } if(eatable) { if(cell_item->OwnerList() && GetListType(cell_item->OwnerList())==iQuickSlot) return; for(u8 i=0; i<4; i++) m_QuickSlotsHighlight[i]->Show(true); return; } if(artefact) { if(cell_item->OwnerList() && GetListType(cell_item->OwnerList())==iActorBelt) return; Ivector2 cap = m_pInventoryBeltList->CellsCapacity(); for(u8 i=0; i<cap.x; i++) m_ArtefactSlotsHighlight[i]->Show(true); return; } }
bool CUIMpTradeWnd::OnItemDbClick(CUICellItem* itm) { CUIDragDropListEx* owner_list = itm->OwnerList(); dd_list_type owner_type = GetListType (owner_list); SBuyItemInfo* iinfo = FindItem(itm); switch(owner_type) { case dd_shop: { BuyItemAction (iinfo); } break; case dd_own_bag: case dd_own_slot: { if ( !CanBuyOrSellInList(owner_list) ) { SBuyItemInfo* tmp_iinfo = NULL; TryToSellItem (iinfo, true, tmp_iinfo); } else { OnItemLButtonClick (itm); } } break; default: NODEFAULT; }; return true; }
bool CUIMpTradeWnd::OnItemDrop(CUICellItem* itm) { CUIDragDropListEx* _owner_list = itm->OwnerList(); dd_list_type _owner_type = GetListType (_owner_list); CUIDragDropListEx* _new_owner = CUIDragDropListEx::m_drag_item->BackList(); if(!_new_owner || _new_owner==_owner_list) return true; dd_list_type _new_owner_type = GetListType (_new_owner); SBuyItemInfo* iinfo = FindItem(itm); if(_owner_type==dd_shop) { BuyItemAction (iinfo); return true; } if(_new_owner_type==dd_shop) { SBuyItemInfo* tmp_iinfo = NULL; bool res = TryToSellItem (iinfo, true, tmp_iinfo); VERIFY (res); return true; } if(_new_owner_type==dd_own_bag) { CUICellItem* citm = _owner_list->RemoveItem(itm, false); _new_owner->SetItem (citm); UpdateCorrespondingItemsForList (_owner_list); }else { VERIFY(_new_owner_type==dd_own_slot); if( _new_owner==GetMatchedListForItem(iinfo->m_name_sect) ) { CUICellItem* citm = _owner_list->RemoveItem(itm, false); _new_owner->SetItem (citm); UpdateCorrespondingItemsForList (_new_owner); } } return true; }
bool CUIActorMenu::ToActorTrade(CUICellItem* itm, bool b_use_cursor_pos) { PIItem iitem = (PIItem)itm->m_pData; if ( !CanMoveToPartner( iitem ) ) { return false; } // if(m_pActorInvOwner->inventory().CanPutInRuck(iitem)) { CUIDragDropListEx* old_owner = itm->OwnerList(); CUIDragDropListEx* new_owner = NULL; EDDListType old_owner_type = GetListType(old_owner); if(b_use_cursor_pos) { new_owner = CUIDragDropListEx::m_drag_item->BackList(); VERIFY (new_owner==m_pTradeActorList); }else new_owner = m_pTradeActorList; bool result = (old_owner_type!=iActorBag) ? m_pActorInvOwner->inventory().Ruck(iitem) : true; VERIFY (result); CUICellItem* i = old_owner->RemoveItem(itm, (old_owner==new_owner) ); if(b_use_cursor_pos) new_owner->SetItem (i,old_owner->GetDragItemPosition()); else new_owner->SetItem (i); if ( old_owner_type != iActorBag ) { SendEvent_Item2Ruck (iitem, m_pActorInvOwner->object_id()); } return true; } }
bool CUIActorMenu::OnItemDbClick(CUICellItem* itm) { InfoCurItem( NULL ); CUIDragDropListEx* old_owner = itm->OwnerList(); EDDListType t_old = GetListType(old_owner); switch ( t_old ) { case iActorSlot: { if ( m_currMenuMode == mmDeadBodySearch ) ToDeadBodyBag ( itm, false ); else ToBag ( itm, false ); break; } case iActorBag: { if ( m_currMenuMode == mmTrade ) { ToActorTrade( itm, false ); break; }else if ( m_currMenuMode == mmDeadBodySearch ) { ToDeadBodyBag( itm, false ); break; } if ( TryUseItem( itm ) ) { break; } if ( TryActiveSlot( itm ) ) { break; } if ( !ToSlot( itm, false ) ) { if ( !ToBelt( itm, false ) ) { ToSlot( itm, true ); } } break; } case iActorBelt: { ToBag( itm, false ); break; } case iActorTrade: { ToBag( itm, false ); break; } case iPartnerTradeBag: { ToPartnerTrade( itm, false ); break; } case iPartnerTrade: { ToPartnerTradeBag( itm, false ); break; } case iDeadBodyBag: { ToBag( itm, false ); break; } }; //switch UpdateItemsPlace(); return true; }
bool CUIActorMenu::OnItemDrop(CUICellItem* itm) { InfoCurItem( NULL ); CUIDragDropListEx* old_owner = itm->OwnerList(); CUIDragDropListEx* new_owner = CUIDragDropListEx::m_drag_item->BackList(); if ( old_owner==new_owner || !old_owner || !new_owner ) { return false; } EDDListType t_new = GetListType(new_owner); EDDListType t_old = GetListType(old_owner); if ( !AllowItemDrops(t_old, t_new) ) { Msg("incorrect action [%d]->[%d]",t_old, t_new); return true; } switch(t_new) { case iActorSlot: { if(GetSlotList(CurrentIItem()->GetSlot())==new_owner) ToSlot (itm, true); }break; case iActorBag: { ToBag (itm, true); }break; case iActorBelt: { ToBelt (itm, true); }break; case iActorTrade: { ToActorTrade(itm, true); }break; case iPartnerTrade: { if(t_old!=iPartnerTradeBag) return false; ToPartnerTrade(itm, true); }break; case iPartnerTradeBag: { if(t_old!=iPartnerTrade) return false; ToPartnerTradeBag(itm, true); }break; case iDeadBodyBag: { ToDeadBodyBag(itm, true); }break; #ifdef DRAG_DROP_TRASH case iTrashSlot: { if (CurrentIItem()->IsQuestItem()) return true; SendEvent_Item_Drop(CurrentIItem(), m_pActorInvOwner->object_id()); SetCurrentItem(NULL); }break; #endif }; OnItemDropped (CurrentIItem(), new_owner, old_owner); UpdateItemsPlace(); return true; }