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::InSlot(PIItem pIItem) const { if(pIItem->GetSlot() < m_slots.size() && m_slots[pIItem->GetSlot()].m_pIItem == pIItem) return true; return false; }
bool CInventory::Belt(PIItem pIItem) { if(!CanPutInBelt(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; } m_belt.insert(m_belt.end(), pIItem); if(!in_slot) { TIItemContainer::iterator it = std::find(m_ruck.begin(), m_ruck.end(), pIItem); if(m_ruck.end() != it) m_ruck.erase(it); } CalcTotalWeight(); InvalidateState (); EItemPlace p = pIItem->m_eItemPlace; pIItem->m_eItemPlace = eItemPlaceBelt; m_pOwner->OnItemBelt(pIItem, p); pIItem->OnMoveToBelt(); if(in_slot) pIItem->object().processing_deactivate(); pIItem->object().processing_activate(); return true; }
bool CWeaponMagazinedWGrenade::Attach(PIItem pIItem, bool b_send_event) { CGrenadeLauncher* pGrenadeLauncher = smart_cast<CGrenadeLauncher*>(pIItem); if(pGrenadeLauncher && ALife::eAddonAttachable == m_eGrenadeLauncherStatus && 0 == (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher) && !xr_strcmp(*m_sGrenadeLauncherName, pIItem->object().cNameSect())) { m_flagsAddOnState |= CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher; CRocketLauncher::m_fLaunchSpeed = pGrenadeLauncher->GetGrenadeVel(); //уничтожить подствольник из инвентаря if(b_send_event) { if (OnServer()) pIItem->object().DestroyObject (); } InitAddons (); UpdateAddonsVisibility (); if(GetState()==eIdle) PlayAnimIdle (); return true; } else return inherited::Attach(pIItem, b_send_event); }
void CUIGameCTA::BuyMenuItemInserter(PIItem const & item) { VERIFY(m_pCurBuyMenu); if (!item) return; if (item->IsInvalid() || smart_cast<CWeaponKnife*>(&item->object()) ) return; CArtefact* pArtefact = smart_cast<CArtefact*>(item); if (pArtefact) return; if (!pSettings->line_exist(m_costSection, item->object().cNameSect())) return; if (!item->CanTrade()) return; u8 addons = 0; CWeapon* pWeapon = smart_cast<CWeapon*>(item); if (pWeapon) addons = pWeapon->GetAddonsState(); CWeaponAmmo* pAmmo = smart_cast<CWeaponAmmo*>(item); if (pAmmo && (pAmmo->m_boxCurr != pAmmo->m_boxSize)) return; m_pCurBuyMenu->ItemToSlot(item->object().cNameSect(), addons); }
bool CUIActorMenu::ToPartnerTrade(CUICellItem* itm, bool b_use_cursor_pos) { PIItem iitem = (PIItem)itm->m_pData; if ( !m_pPartnerInvOwner->AllowItemToTrade( iitem, eItemPlaceRuck ) ) { ///R_ASSERT2( 0, make_string( "Partner can`t cell item (%s)", iitem->NameItem() ) ); Msg( "! Partner can`t cell item (%s)", iitem->NameItem() ); return false; } CUIDragDropListEx* old_owner = itm->OwnerList(); CUIDragDropListEx* new_owner = NULL; if(b_use_cursor_pos) { new_owner = CUIDragDropListEx::m_drag_item->BackList(); VERIFY (new_owner==m_pTradePartnerList); }else new_owner = m_pTradePartnerList; 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); UpdatePrices(); return true; }
void CUICellItem::UpdateConditionProgressBar() { if(m_pParentList && m_pParentList->GetConditionProgBarVisibility()) { PIItem itm = (PIItem)m_pData; CWeapon* pWeapon = smart_cast<CWeapon*>(itm); CCustomOutfit* pOutfit = smart_cast<CCustomOutfit*>(itm); if(pWeapon || pOutfit ) { Ivector2 itm_grid_size = GetGridSize(true); if(m_pParentList->GetVerticalPlacement()) std::swap(itm_grid_size.x, itm_grid_size.y); Ivector2 cell_size = m_pParentList->CellSize(); m_pConditionState->SetWidth(cell_size.x); float x = 0.5f*(itm_grid_size.x * (cell_size.x)-m_pConditionState->GetWidth()); float y = itm_grid_size.y * (cell_size.y) - m_pConditionState->GetHeight() - 1.f; m_pConditionState->SetWndPos(Fvector2().set(x,y)); m_pConditionState->SetProgressPos(itm->GetCondition()*100.0f); m_pConditionState->Show(true); return; } } m_pConditionState->Show(false); }
void CUIGameCustom::Render() { st_vec_it it = m_custom_statics.begin(); st_vec_it it_e = m_custom_statics.end(); for(;it!=it_e;++it) (*it)->Draw(); m_window->Draw(); CEntity* pEntity = smart_cast<CEntity*>(Level().CurrentEntity()); if (pEntity) { CActor* pActor = smart_cast<CActor*>(pEntity); if(pActor && pActor->HUDview() && pActor->g_Alive() && psHUD_Flags.is(HUD_WEAPON|HUD_WEAPON_RT|HUD_WEAPON_RT2)) { u16 ISlot = pActor->inventory().FirstSlot(); u16 ESlot = pActor->inventory().LastSlot(); for( ; ISlot<=ESlot; ++ISlot) { PIItem itm = pActor->inventory().ItemFromSlot(ISlot); if(itm && itm->render_item_ui_query()) itm->render_item_ui(); } } if( GameIndicatorsShown() && psHUD_Flags.is(HUD_DRAW | HUD_DRAW_RT) ) UIMainIngameWnd->Draw(); } m_pMessagesWnd->Draw(); DoRenderDialogs(); }
bool CUIActorMenu::ToDeadBodyBag(CUICellItem* itm, bool b_use_cursor_pos) { CUIDragDropListEx* old_owner = itm->OwnerList(); CUIDragDropListEx* new_owner = NULL; if(b_use_cursor_pos) { new_owner = CUIDragDropListEx::m_drag_item->BackList(); VERIFY (new_owner==m_pDeadBodyBagList); }else new_owner = m_pDeadBodyBagList; 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); PIItem iitem = (PIItem)i->m_pData; if ( m_pPartnerInvOwner ) { move_item_from_to (m_pActorInvOwner->object_id(), m_pPartnerInvOwner->object_id(), iitem->object_id()); } else // box { move_item_from_to (m_pActorInvOwner->object_id(), m_pInvBox->ID(), iitem->object_id()); } UpdateDeadBodyBag(); return true; }
void CUIInventoryWnd::SendEvent_ActivateSlot (PIItem pItem) { NET_Packet P; pItem->object().u_EventGen (P, GEG_PLAYER_ACTIVATE_SLOT, pItem->object().H_Parent()->ID()); P.w_u32 (pItem->GetSlot()); pItem->object().u_EventSend (P); }
void CUIMainIngameWnd::UpdateActiveItemInfo() { PIItem item = m_pActor->inventory().ActiveItem(); if(item) { xr_string str_name; xr_string icon_sect_name; xr_string str_count; item->GetBriefInfo (str_name, icon_sect_name, str_count); UIWeaponSignAmmo.Show (true ); UIWeaponBack.SetText (str_name.c_str () ); UIWeaponSignAmmo.SetText (str_count.c_str () ); SetAmmoIcon (icon_sect_name.c_str () ); //------------------- m_pWeapon = smart_cast<CWeapon*> (item); }else { UIWeaponIcon.Show (false); UIWeaponSignAmmo.Show (false); UIWeaponBack.SetText (""); m_pWeapon = NULL; } }
void CInventory::AddAvailableItems(TIItemContainer& items_container, bool for_trade) const { for(TIItemContainer::const_iterator it = m_ruck.begin(); m_ruck.end() != it; ++it) { PIItem pIItem = *it; if(!for_trade || pIItem->CanTrade()) items_container.push_back(pIItem); } if(m_bBeltUseful) { for(TIItemContainer::const_iterator it = m_belt.begin(); m_belt.end() != it; ++it) { PIItem pIItem = *it; if(!for_trade || pIItem->CanTrade()) items_container.push_back(pIItem); } } if(m_bSlotsUseful) { TISlotArr::const_iterator slot_it = m_slots.begin(); TISlotArr::const_iterator slot_it_e = m_slots.end(); for(; slot_it!=slot_it_e; ++slot_it) { const CInventorySlot& S = *slot_it; if(S.m_pIItem && (!for_trade || S.m_pIItem->CanTrade()) ) { if(!S.m_bPersistent || S.m_pIItem->GetSlot()==GRENADE_SLOT ) items_container.push_back(S.m_pIItem); } } } }
void CUICarBodyWnd::TakeAll() { u32 cnt = m_pUIOthersBagList->ItemsCount(); u16 tmp_id = 0; if(m_pInventoryBox){ tmp_id = (smart_cast<CGameObject*>(m_pOurObject))->ID(); } for(u32 i=0; i<cnt; ++i) { CUICellItem* ci = m_pUIOthersBagList->GetItemIdx(i); for(u32 j=0; j<ci->ChildsCount(); ++j) { PIItem _itm = (PIItem)(ci->Child(j)->m_pData); if(m_pOthersObject) TransferItem (_itm, m_pOthersObject, m_pOurObject, false); else{ move_item (m_pInventoryBox->ID(), tmp_id, _itm->object().ID()); //. Actor()->callback(GameObject::eInvBoxItemTake)( m_pInventoryBox->lua_game_object(), _itm->object().lua_game_object() ); } } PIItem itm = (PIItem)(ci->m_pData); if(m_pOthersObject) TransferItem (itm, m_pOthersObject, m_pOurObject, false); else{ move_item (m_pInventoryBox->ID(), tmp_id, itm->object().ID()); //. Actor()->callback(GameObject::eInvBoxItemTake)(m_pInventoryBox->lua_game_object(), itm->object().lua_game_object() ); } } }
bool CInventory::Eat(PIItem pIItem) { R_ASSERT(pIItem->m_pCurrentInventory==this); //устанаовить съедобна ли вещь CEatableItem* pItemToEat = smart_cast<CEatableItem*>(pIItem); R_ASSERT (pItemToEat); CEntityAlive *entity_alive = smart_cast<CEntityAlive*>(m_pOwner); R_ASSERT (entity_alive); pItemToEat->UseBy (entity_alive); if(IsGameTypeSingle() && Actor()->m_inventory == this) Actor()->callback(GameObject::eUseObject)((smart_cast<CGameObject*>(pIItem))->lua_game_object()); if(pItemToEat->Empty() && entity_alive->Local()) { NET_Packet P; CGameObject::u_EventGen (P,GE_OWNERSHIP_REJECT,entity_alive->ID()); P.w_u16 (pIItem->object().ID()); CGameObject::u_EventSend (P); CGameObject::u_EventGen (P,GE_DESTROY,pIItem->object().ID()); CGameObject::u_EventSend (P); return false; } return true; }
void CUIActorMenu::UpdateConditionProgressBars() { PIItem itm = m_pActorInvOwner->inventory().ItemFromSlot(INV_SLOT_2); if(itm) { m_WeaponSlot1_progress->SetProgressPos(iCeil(itm->GetCondition()*15.0f)/15.0f); } else m_WeaponSlot1_progress->SetProgressPos(0); itm = m_pActorInvOwner->inventory().ItemFromSlot(INV_SLOT_3); if(itm) m_WeaponSlot2_progress->SetProgressPos(iCeil(itm->GetCondition()*15.0f)/15.0f); else m_WeaponSlot2_progress->SetProgressPos(0); itm = m_pActorInvOwner->inventory().ItemFromSlot(OUTFIT_SLOT); if(itm) m_Outfit_progress->SetProgressPos(iCeil(itm->GetCondition()*15.0f)/15.0f); else m_Outfit_progress->SetProgressPos(0); itm = m_pActorInvOwner->inventory().ItemFromSlot(HELMET_SLOT); if(itm) m_Helmet_progress->SetProgressPos(iCeil(itm->GetCondition()*15.0f)/15.0f); else m_Helmet_progress->SetProgressPos(0); }
void CActor::IR_OnMouseMove(int dx, int dy) { if(hud_adj_mode) { g_player_hud->tune (Ivector().set(dx,dy,0)); return; } PIItem iitem = inventory().ActiveItem(); if(iitem && iitem->cast_hud_item()) iitem->cast_hud_item()->ResetSubStateTime(); if (Remote()) return; if(m_holder) { m_holder->OnMouseMove(dx,dy); return; } float LookFactor = GetLookFactor(); CCameraBase* C = cameras [cam_active]; float scale = (C->f_fov/g_fov)*psMouseSens * psMouseSensScale/50.f / LookFactor; if (dx){ float d = float(dx)*scale; cam_Active()->Move((d<0)?kLEFT:kRIGHT, _abs(d)); } if (dy){ float d = ((psMouseInvert.test(1))?-1:1)*float(dy)*scale*3.f/4.f; cam_Active()->Move((d>0)?kUP:kDOWN, _abs(d)); } }
bool CUIActorMenu::highlight_addons_for_weapon( PIItem weapon_item, CUICellItem* ci ) { PIItem item = (PIItem)ci->m_pData; if ( !item ) { return false; } CScope* pScope = smart_cast<CScope*>(item); if ( pScope && weapon_item->CanAttach(pScope) ) { ci->m_select_armament = true; return true; } CSilencer* pSilencer = smart_cast<CSilencer*>(item); if ( pSilencer && weapon_item->CanAttach(pSilencer) ) { ci->m_select_armament = true; return true; } CGrenadeLauncher* pGrenadeLauncher = smart_cast<CGrenadeLauncher*>(item); if ( pGrenadeLauncher && weapon_item->CanAttach(pGrenadeLauncher) ) { ci->m_select_armament = true; return true; } return false; }
void CUIInventoryWnd::SendEvent_ActivateArtefact (PIItem pItem) { NET_Packet P; pItem->object().u_EventGen (P, GEG_PLAYER_ACTIVATEARTEFACT, pItem->object().H_Parent()->ID()); P.w_u16 (pItem->object().ID()); pItem->object().u_EventSend (P); };
void CUIInventoryWnd::SendEvent_Item_Eat (PIItem pItem) { NET_Packet P; pItem->object().u_EventGen (P, GEG_PLAYER_ITEM_EAT, pItem->object().H_Parent()->ID()); P.w_u16 (pItem->object().ID()); pItem->object().u_EventSend (P); };
void CUIInventoryWnd::SendEvent_Item2Belt (PIItem pItem) { NET_Packet P; pItem->object().u_EventGen (P, GEG_PLAYER_ITEM2BELT, pItem->object().H_Parent()->ID()); P.w_u16 (pItem->object().ID()); pItem->object().u_EventSend (P); g_pInvWnd->PlaySnd (eInvItemToBelt); };
void CUIActorMenu::highlight_ammo_for_weapon( PIItem weapon_item, CUIDragDropListEx* ddlist ) { VERIFY( weapon_item ); VERIFY( ddlist ); static xr_vector<shared_str> ammo_types; ammo_types.clear_not_free(); CWeapon* weapon = smart_cast<CWeapon*>(weapon_item); if ( !weapon ) { return; } ammo_types.assign( weapon->m_ammoTypes.begin(), weapon->m_ammoTypes.end() ); CWeaponMagazinedWGrenade* wg = smart_cast<CWeaponMagazinedWGrenade*>(weapon_item); if ( wg ) { if ( wg->IsGrenadeLauncherAttached() && wg->m_ammoTypes2.size() ) { ammo_types.insert( ammo_types.end(), wg->m_ammoTypes2.begin(), wg->m_ammoTypes2.end() ); } } if ( ammo_types.size() == 0 ) { return; } xr_vector<shared_str>::iterator ite = ammo_types.end(); u32 const cnt = ddlist->ItemsCount(); for ( u32 i = 0; i < cnt; ++i ) { CUICellItem* ci = ddlist->GetItemIdx(i); PIItem item = (PIItem)ci->m_pData; if ( !item ) { continue; } CWeaponAmmo* ammo = smart_cast<CWeaponAmmo*>(item); if ( !ammo ) { highlight_addons_for_weapon( weapon_item, ci ); continue; // for i } shared_str const& ammo_name = item->object().cNameSect(); xr_vector<shared_str>::iterator itb = ammo_types.begin(); for ( ; itb != ite; ++itb ) { if ( ammo_name._get() == (*itb)._get() ) { ci->m_select_armament = true; break; // itb } } }//for i }
void CUIInventoryWnd::SendEvent_Item_Drop (PIItem pItem) { NET_Packet P; pItem->object().u_EventGen (P, GEG_PLAYER_ITEMDROP, pItem->object().H_Parent()->ID()); P.w_u16 (pItem->object().ID()); pItem->object().u_EventSend (P); g_pInvWnd->PlaySnd (eInvDropItem); };
void CUIHudStatesWnd::UpdateActiveItemInfo( CActor* actor ) { PIItem item = actor->inventory().ActiveItem(); if ( item ) { if(m_b_force_update) { if(item->cast_weapon()) item->cast_weapon()->ForceUpdateAmmo(); m_b_force_update = false; } item->GetBriefInfo ( m_item_info ); // UIWeaponBack.SetText ( str_name.c_str() ); m_fire_mode->SetText ( m_item_info.fire_mode.c_str() ); SetAmmoIcon ( m_item_info.icon.c_str() ); m_ui_weapon_cur_ammo->Show ( true ); m_ui_weapon_fmj_ammo->Show ( true ); m_ui_weapon_ap_ammo->Show ( true ); m_fire_mode->Show ( true ); m_ui_grenade->Show ( true ); m_ui_weapon_cur_ammo->SetText ( m_item_info.cur_ammo.c_str() ); m_ui_weapon_fmj_ammo->SetText ( m_item_info.fmj_ammo.c_str() ); m_ui_weapon_ap_ammo->SetText ( m_item_info.ap_ammo.c_str() ); m_ui_grenade->SetText ( m_item_info.grenade.c_str() ); CWeaponMagazinedWGrenade* wpn = smart_cast<CWeaponMagazinedWGrenade*>(item); if(wpn && wpn->m_bGrenadeMode) { m_ui_weapon_fmj_ammo->SetTextColor(color_rgba(238,155,23,150)); m_ui_grenade->SetTextColor(color_rgba(238,155,23,255)); } else { m_ui_weapon_fmj_ammo->SetTextColor(color_rgba(238,155,23,255)); m_ui_grenade->SetTextColor(color_rgba(238,155,23,150)); } } else { m_ui_weapon_icon->Show ( false ); m_ui_weapon_cur_ammo->Show ( false ); m_ui_weapon_fmj_ammo->Show ( false ); m_ui_weapon_ap_ammo->Show ( false ); m_fire_mode->Show ( false ); m_ui_grenade->Show ( false ); } }
PIItem CInventory::Get(const u16 id, bool bSearchRuck) const { const TIItemContainer &list = bSearchRuck ? m_ruck : m_belt; for(TIItemContainer::const_iterator it = list.begin(); list.end() != it; ++it) { PIItem pIItem = *it; if(pIItem->object().ID() == id) return pIItem; } return NULL; }
bool CInventory::CanPutInSlot(PIItem pIItem) const { if(!m_bSlotsUseful) return false; if( !GetOwner()->CanPutInSlot(pIItem, pIItem->GetSlot() ) ) return false; if(pIItem->GetSlot() < m_slots.size() && m_slots[pIItem->GetSlot()].m_pIItem == NULL ) return true; return false; }
void CActor::g_PerformDrop ( ) { b_DropActivated = FALSE; PIItem pItem = inventory().ActiveItem(); if (0==pItem) return; u32 s = inventory().GetActiveSlot(); if(inventory().m_slots[s].m_bPersistent) return; pItem->Drop(); }
PIItem CInventory::item(CLASS_ID cls_id) const { const TIItemContainer &list = m_all; for(TIItemContainer::const_iterator it = list.begin(); list.end() != it; ++it) { PIItem pIItem = *it; if(pIItem->object().CLS_ID == cls_id && pIItem->Useful()) return pIItem; } return NULL; }
PIItem CInventory::Get(CLASS_ID cls_id, bool bSearchRuck) const { const TIItemContainer &list = bSearchRuck ? m_ruck : m_belt; for(TIItemContainer::const_iterator it = list.begin(); list.end() != it; ++it) { PIItem pIItem = *it; if(pIItem->object().CLS_ID == cls_id && pIItem->Useful()) return pIItem; } return NULL; }
//найти в инвенторе вещь с указанным именем PIItem CInventory::Get(LPCSTR name, bool bSearchRuck) const { const TIItemContainer &list = bSearchRuck ? m_ruck : m_belt; for(TIItemContainer::const_iterator it = list.begin(); list.end() != it; ++it) { PIItem pIItem = *it; if(!xr_strcmp(pIItem->object().cNameSect(), name) && pIItem->Useful()) return pIItem; } return NULL; }
void CUIInventoryWnd::SendEvent_Item_Drop(PIItem pItem) { pItem->SetDropManual (TRUE); if( OnClient() ) { NET_Packet P; pItem->object().u_EventGen (P, GE_OWNERSHIP_REJECT, pItem->object().H_Parent()->ID()); P.w_u16 (pItem->object().ID()); pItem->object().u_EventSend(P); } g_pInvWnd->PlaySnd (eInvDropItem); };