float CUITradeWnd::CalcItemsWeight(CUIDragDropListEx* pList) { float res = 0.0f; for(u32 i=0; i<pList->ItemsCount(); ++i) { CUICellItem* itm = pList->GetItemIdx (i); PIItem iitem = (PIItem)itm->m_pData; res += iitem->Weight(); for(u32 j=0; j<itm->ChildsCount(); ++j){ PIItem jitem = (PIItem)itm->Child(j)->m_pData; res += jitem->Weight(); } } return res; }
bool move_item_check( PIItem itm, CInventoryOwner* from, CInventoryOwner* to, bool weight_check ) { if ( weight_check ) { float invWeight = to->inventory().CalcTotalWeight(); float maxWeight = to->MaxCarryWeight(); float itmWeight = itm->Weight(); if ( invWeight + itmWeight >= maxWeight ) { return false; } } move_item_from_to( from->object_id(), to->object_id(), itm->object_id() ); return true; }
bool CUICarBodyWnd::TransferItem(PIItem itm, CInventoryOwner* owner_from, CInventoryOwner* owner_to, bool b_check) { VERIFY (NULL==m_pInventoryBox); CGameObject* go_from = smart_cast<CGameObject*>(owner_from); CGameObject* go_to = smart_cast<CGameObject*>(owner_to); if(smart_cast<CBaseMonster*>(go_to)) return false; if(b_check) { float invWeight = owner_to->inventory().CalcTotalWeight(); float maxWeight = owner_to->inventory().GetMaxWeight(); float itmWeight = itm->Weight(); if(invWeight+itmWeight >=maxWeight) return false; } move_item(go_from->ID(), go_to->ID(), itm->object().ID()); return true; }
bool CUITradeWnd::CanMoveToOther(PIItem pItem) { float r1 = CalcItemsWeight(&m_uidata->UIOurTradeList); // our float r2 = CalcItemsWeight(&m_uidata->UIOthersTradeList); // other float itmWeight = pItem->Weight(); float otherInvWeight = m_pOthersInv->CalcTotalWeight(); float otherMaxWeight = m_pOthersInv->GetMaxWeight(); if (!m_pOthersInvOwner->trade_parameters().enabled( CTradeParameters::action_buy(0), pItem->object().cNameSect() )) return (false); if(otherInvWeight-r2+r1+itmWeight > otherMaxWeight) return false; return true; }
bool CUIActorMenu::CanMoveToPartner(PIItem pItem) { if(!pItem->CanTrade()) return false; if ( !m_pPartnerInvOwner->trade_parameters().enabled( CTradeParameters::action_buy(0), pItem->object().cNameSect() ) ) { return false; } float r1 = CalcItemsWeight( m_pTradeActorList ); // actor float r2 = CalcItemsWeight( m_pTradePartnerList ); // partner float itmWeight = pItem->Weight(); float partner_inv_weight = m_pPartnerInvOwner->inventory().CalcTotalWeight(); float partner_max_weight = m_pPartnerInvOwner->MaxCarryWeight(); if ( partner_inv_weight - r2 + r1 + itmWeight > partner_max_weight ) { return false; } return true; }