void CUIMpTradeWnd::SetCurrentItem(CUICellItem* itm) { if(m_pCurrentCellItem == itm) return; m_pCurrentCellItem = itm; m_item_info->InitItem (CurrentIItem()); if (m_pCurrentCellItem) { const shared_str& current_sect_name = CurrentIItem()->object().cNameSect(); string256 str; sprintf_s (str, "%d", GetItemPrice(CurrentIItem())); m_item_info->UICost->SetText (str); m_item_info->UIName->SetText (CurrentIItem()->NameShort()); string64 tex_name; string64 team; if (m_store_hierarchy->FindItem(current_sect_name) ) {// our team strcpy_s (team, _team_names[m_store_hierarchy->TeamIdx()]); }else { strcpy_s (team, _team_names[m_store_hierarchy->TeamIdx()%1]); } sprintf_s (tex_name, "ui_hud_status_%s_0%d", team, 1+get_rank(current_sect_name.c_str()) ); m_static_item_rank->InitTexture (tex_name); m_static_item_rank->TextureOn (); } else { m_static_item_rank->TextureOff (); } }
bool CUICarBodyWnd::OnItemDbClick(CUICellItem* itm) { CUIDragDropListEx* old_owner = itm->OwnerList(); CUIDragDropListEx* new_owner = (old_owner==m_pUIOthersBagList)?m_pUIOurBagList:m_pUIOthersBagList; if(m_pOthersObject) { if( TransferItem ( CurrentIItem(), (old_owner==m_pUIOthersBagList)?m_pOthersObject:m_pOurObject, (old_owner==m_pUIOurBagList)?m_pOthersObject:m_pOurObject, (old_owner==m_pUIOurBagList) ) ) { CUICellItem* ci = old_owner->RemoveItem(CurrentItem(), false); new_owner->SetItem (ci); } }else { if(false && old_owner==m_pUIOurBagList) return true; bool bMoveDirection = (old_owner==m_pUIOthersBagList); u16 tmp_id = (smart_cast<CGameObject*>(m_pOurObject))->ID(); move_item ( bMoveDirection?m_pInventoryBox->ID():tmp_id, bMoveDirection?tmp_id:m_pInventoryBox->ID(), CurrentIItem()->object().ID()); //. Actor()->callback (GameObject::eInvBoxItemTake)(m_pInventoryBox->lua_game_object(), CurrentIItem()->object().lua_game_object() ); } SetCurrentItem (NULL); return true; }
void CUIInventoryWnd::ProcessPropertiesBoxClicked () { if(UIPropertiesBox.GetClickedItem()) { switch(UIPropertiesBox.GetClickedItem()->GetID()) { case INVENTORY_TO_SLOT_ACTION: ToSlot(CurrentItem(), true); break; case INVENTORY_TO_BELT_ACTION: ToBelt(CurrentItem(),false); break; case INVENTORY_TO_BAG_ACTION: ToBag(CurrentItem(),false); break; case INVENTORY_DROP_ACTION: { void* d = UIPropertiesBox.GetClickedItem()->GetData(); bool b_all = (d==(void*)33); DropCurrentItem(b_all); }break; case INVENTORY_EAT_ACTION: EatItem(CurrentIItem()); break; case INVENTORY_ATTACH_ADDON: AttachAddon((PIItem)(UIPropertiesBox.GetClickedItem()->GetData())); break; case INVENTORY_DETACH_SCOPE_ADDON: DetachAddon(*(smart_cast<CWeapon*>(CurrentIItem()))->GetScopeName()); break; case INVENTORY_DETACH_SILENCER_ADDON: DetachAddon(*(smart_cast<CWeapon*>(CurrentIItem()))->GetSilencerName()); break; case INVENTORY_DETACH_GRENADE_LAUNCHER_ADDON: DetachAddon(*(smart_cast<CWeapon*>(CurrentIItem()))->GetGrenadeLauncherName()); break; case INVENTORY_ACTIVATE_ARTEFACT_ACTION: Activate_Artefact(); break; case INVENTORY_RELOAD_MAGAZINE: (smart_cast<CWeapon*>(CurrentIItem()))->Action(kWPN_RELOAD, CMD_START); break; case INVENTORY_UNLOAD_MAGAZINE: { CUICellItem * itm = CurrentItem(); (smart_cast<CWeaponMagazined*>((CWeapon*)itm->m_pData))->UnloadMagazine(); for(u32 i=0; i<itm->ChildsCount(); ++i) { CUICellItem * child_itm = itm->Child(i); (smart_cast<CWeaponMagazined*>((CWeapon*)child_itm->m_pData))->UnloadMagazine(); } }break; } } }
void CUIInventoryWnd::Activate_Artefact() { CActor *pActor = smart_cast<CActor*>(Level().CurrentEntity()); if(!pActor) return; SendEvent_ActivateArtefact (CurrentIItem()); };
void CUIActorMenu::OnDragItemOnTrash(CUIDragItem* item, bool b_receive) { if (b_receive && !CurrentIItem()->IsQuestItem()) item->SetCustomDraw(new CUITrashIcon()); else item->SetCustomDraw(NULL); }
bool CUITradeWnd::ToOurTrade() { if (!CanMoveToOther(CurrentIItem())) return false; move_item (CurrentItem(), &m_uidata->UIOurBagList, &m_uidata->UIOurTradeList); UpdatePrices (); return true; }
void CUICarBodyWnd::ActivatePropertiesBox() { if(m_pInventoryBox) return; m_pUIPropertiesBox->RemoveAll(); //. CWeaponMagazined* pWeapon = smart_cast<CWeaponMagazined*>(CurrentIItem()); CEatableItem* pEatableItem = smart_cast<CEatableItem*>(CurrentIItem()); CMedkit* pMedkit = smart_cast<CMedkit*> (CurrentIItem()); CAntirad* pAntirad = smart_cast<CAntirad*> (CurrentIItem()); CBottleItem* pBottleItem = smart_cast<CBottleItem*> (CurrentIItem()); bool b_show = false; LPCSTR _action = NULL; if(pMedkit || pAntirad) { _action = "st_use"; b_show = true; } else if(pEatableItem) { if(pBottleItem) _action = "st_drink"; else _action = "st_eat"; b_show = true; } if(_action) m_pUIPropertiesBox->AddItem(_action, NULL, INVENTORY_EAT_ACTION); if(b_show){ m_pUIPropertiesBox->AutoUpdateSize (); m_pUIPropertiesBox->BringAllToTop (); Fvector2 cursor_pos; Frect vis_rect; GetAbsoluteRect (vis_rect); GetUICursor()->GetPos (cursor_pos.x, cursor_pos.y); cursor_pos.sub (vis_rect.lt); m_pUIPropertiesBox->Show (vis_rect, cursor_pos); } }
void CUITradeWnd::SetCurrentItem(CUICellItem* itm) { if(m_pCurrentCellItem == itm) return; m_pCurrentCellItem = itm; m_uidata->UIItemInfo.InitItem (CurrentIItem()); if(!m_pCurrentCellItem) return; CUIDragDropListEx* owner = itm->OwnerList(); bool bBuying = (owner==&m_uidata->UIOurBagList) || (owner==&m_uidata->UIOurTradeList); if(itm && m_uidata->UIItemInfo.UICost){ string256 str; sprintf_s (str, "%d %s", m_pOthersTrade->GetItemPrice(CurrentIItem(), bBuying),*CStringTable().translate("ui_st_money_regional") ); m_uidata->UIItemInfo.UICost->SetText (str); } }
void CUICarBodyWnd::EatItem() { CActor *pActor = smart_cast<CActor*>(Level().CurrentEntity()); if(!pActor) return; NET_Packet P; CGameObject::u_EventGen (P, GEG_PLAYER_ITEM_EAT, Actor()->ID()); P.w_u16 (CurrentIItem()->object().ID()); CGameObject::u_EventSend (P); }
bool CUIActorMenu::OnKeyboard(int dik, EUIMessages keyboard_action) { /* if (UIPropertiesBox.GetVisible()) { UIPropertiesBox.OnKeyboard(dik, keyboard_action); } */ InfoCurItem( NULL ); if ( is_binded(kDROP, dik) ) { if ( WINDOW_KEY_PRESSED == keyboard_action && CurrentIItem() && !CurrentIItem()->IsQuestItem() ) { SendEvent_Item_Drop (CurrentIItem(), m_pActorInvOwner->object_id()); SetCurrentItem (NULL); } return true; } if ( is_binded(kSPRINT_TOGGLE, dik) ) { if ( WINDOW_KEY_PRESSED == keyboard_action ) { OnPressUserKey(); } return true; } if ( is_binded(kUSE, dik) ) { if ( WINDOW_KEY_PRESSED == keyboard_action ) { GetHolder()->StartStopMenu( this, true ); } return true; } if( inherited::OnKeyboard(dik,keyboard_action) )return true; return false; }
bool CUIInventoryWnd::DropItem(PIItem itm, CUIDragDropListEx* lst) { if(lst==m_pUIOutfitList) { EatItem (CurrentIItem()); return true; } CUICellItem* _citem = lst->ItemsCount() ? lst->GetItemIdx(0) : NULL; PIItem _iitem = _citem ? (PIItem)_citem->m_pData : NULL; if(!_iitem) return false; if(!_iitem->CanAttach(itm)) return false; AttachAddon (_iitem); return true; }
void CUIInventoryWnd::ActivatePropertiesBox() { // Флаг-признак для невлючения пункта контекстного меню: Dreess Outfit, если костюм уже надет bool bAlreadyDressed = false; UIPropertiesBox.RemoveAll(); CMedkit* pMedkit = smart_cast<CMedkit*> (CurrentIItem()); CAntirad* pAntirad = smart_cast<CAntirad*> (CurrentIItem()); CEatableItem* pEatableItem = smart_cast<CEatableItem*> (CurrentIItem()); CCustomOutfit* pOutfit = smart_cast<CCustomOutfit*> (CurrentIItem()); //. CArtefact* pArtefact = smart_cast<CArtefact*> (CurrentIItem()); CWeapon* pWeapon = smart_cast<CWeapon*> (CurrentIItem()); CScope* pScope = smart_cast<CScope*> (CurrentIItem()); CSilencer* pSilencer = smart_cast<CSilencer*> (CurrentIItem()); CGrenadeLauncher* pGrenadeLauncher = smart_cast<CGrenadeLauncher*> (CurrentIItem()); CBottleItem* pBottleItem = smart_cast<CBottleItem*> (CurrentIItem()); bool b_show = false; if(!pOutfit && CurrentIItem()->GetSlot()!=NO_ACTIVE_SLOT && !m_pInv->m_slots[CurrentIItem()->GetSlot()].m_bPersistent && m_pInv->CanPutInSlot(CurrentIItem())) { UIPropertiesBox.AddItem("st_move_to_slot", NULL, INVENTORY_TO_SLOT_ACTION); b_show = true; } if(CurrentIItem()->Belt() && m_pInv->CanPutInBelt(CurrentIItem())) { UIPropertiesBox.AddItem("st_move_on_belt", NULL, INVENTORY_TO_BELT_ACTION); b_show = true; } if(CurrentIItem()->Ruck() && m_pInv->CanPutInRuck(CurrentIItem()) && (CurrentIItem()->GetSlot()==u32(-1) || !m_pInv->m_slots[CurrentIItem()->GetSlot()].m_bPersistent) ) { if(!pOutfit) UIPropertiesBox.AddItem("st_move_to_bag", NULL, INVENTORY_TO_BAG_ACTION); else UIPropertiesBox.AddItem("st_undress_outfit", NULL, INVENTORY_TO_BAG_ACTION); bAlreadyDressed = true; b_show = true; } if(pOutfit && !bAlreadyDressed ) { UIPropertiesBox.AddItem("st_dress_outfit", NULL, INVENTORY_TO_SLOT_ACTION); b_show = true; } //отсоединение аддонов от вещи if(pWeapon) { if(pWeapon->GrenadeLauncherAttachable() && pWeapon->IsGrenadeLauncherAttached()) { UIPropertiesBox.AddItem("st_detach_gl", NULL, INVENTORY_DETACH_GRENADE_LAUNCHER_ADDON); b_show = true; } if(pWeapon->ScopeAttachable() && pWeapon->IsScopeAttached()) { UIPropertiesBox.AddItem("st_detach_scope", NULL, INVENTORY_DETACH_SCOPE_ADDON); b_show = true; } if(pWeapon->SilencerAttachable() && pWeapon->IsSilencerAttached()) { UIPropertiesBox.AddItem("st_detach_silencer", NULL, INVENTORY_DETACH_SILENCER_ADDON); b_show = true; } if(smart_cast<CWeaponMagazined*>(pWeapon) && IsGameTypeSingle()) { bool b = (0!=pWeapon->GetAmmoElapsed()); if(!b) { CUICellItem * itm = CurrentItem(); for(u32 i=0; i<itm->ChildsCount(); ++i) { pWeapon = smart_cast<CWeaponMagazined*>((CWeapon*)itm->Child(i)->m_pData); if(pWeapon->GetAmmoElapsed()) { b = true; break; } } } if(b){ UIPropertiesBox.AddItem("st_unload_magazine", NULL, INVENTORY_UNLOAD_MAGAZINE); b_show = true; } } } //присоединение аддонов к активному слоту (2 или 3) if(pScope) { if(m_pInv->m_slots[PISTOL_SLOT].m_pIItem != NULL && m_pInv->m_slots[PISTOL_SLOT].m_pIItem->CanAttach(pScope)) { PIItem tgt = m_pInv->m_slots[PISTOL_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_scope_to_pistol", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } if(m_pInv->m_slots[RIFLE_SLOT].m_pIItem != NULL && m_pInv->m_slots[RIFLE_SLOT].m_pIItem->CanAttach(pScope)) { PIItem tgt = m_pInv->m_slots[RIFLE_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_scope_to_rifle", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } } else if(pSilencer) { if(m_pInv->m_slots[PISTOL_SLOT].m_pIItem != NULL && m_pInv->m_slots[PISTOL_SLOT].m_pIItem->CanAttach(pSilencer)) { PIItem tgt = m_pInv->m_slots[PISTOL_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_silencer_to_pistol", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } if(m_pInv->m_slots[RIFLE_SLOT].m_pIItem != NULL && m_pInv->m_slots[RIFLE_SLOT].m_pIItem->CanAttach(pSilencer)) { PIItem tgt = m_pInv->m_slots[RIFLE_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_silencer_to_rifle", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } } else if(pGrenadeLauncher) { if(m_pInv->m_slots[RIFLE_SLOT].m_pIItem != NULL && m_pInv->m_slots[RIFLE_SLOT].m_pIItem->CanAttach(pGrenadeLauncher)) { PIItem tgt = m_pInv->m_slots[RIFLE_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_gl_to_rifle", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } } LPCSTR _action = NULL; if(pMedkit || pAntirad) { _action = "st_use"; } else if(pEatableItem) { if(pBottleItem) _action = "st_drink"; else _action = "st_eat"; } if(_action){ UIPropertiesBox.AddItem(_action, NULL, INVENTORY_EAT_ACTION); b_show = true; } //. if(pArtefact&&pArtefact->CanBeActivated()) //. UIPropertiesBox.AddItem("st_activate_artefact", NULL, INVENTORY_ACTIVATE_ARTEFACT_ACTION); if(!CurrentIItem()->IsQuestItem()){ UIPropertiesBox.AddItem("st_drop", NULL, INVENTORY_DROP_ACTION); b_show = true; if(CurrentItem()->ChildsCount()) UIPropertiesBox.AddItem("st_drop_all", (void*)33, INVENTORY_DROP_ACTION); } if(b_show) { UIPropertiesBox.AutoUpdateSize (); UIPropertiesBox.BringAllToTop (); Fvector2 cursor_pos; Frect vis_rect; GetAbsoluteRect (vis_rect); GetUICursor()->GetPos (cursor_pos.x, cursor_pos.y); cursor_pos.sub (vis_rect.lt); UIPropertiesBox.Show (vis_rect, cursor_pos); PlaySnd (eInvProperties); } }
void CUICarBodyWnd::SetCurrentItem(CUICellItem* itm) { if(m_pCurrentCellItem == itm) return; m_pCurrentCellItem = itm; m_pUIItemInfo->InitItem(CurrentIItem()); }
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; }