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_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); }
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; }
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 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 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; }
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); }
bool CInventory::Ruck(PIItem pIItem, bool strict_placement) { if(!strict_placement && !CanPutInRuck(pIItem)) return false; if (!IsGameTypeSingle()) { u16 real_parent = pIItem->object().H_Parent() ? pIItem->object().H_Parent()->ID() : u16(-1); if (GetOwner()->object_id() != real_parent) { Msg("! WARNING: CL: actor [%d] tries to place to ruck not own item [%d], that has parent [%d]", GetOwner()->object_id(), pIItem->object_id(), real_parent); return false; } } bool in_slot = InSlot(pIItem); //вещь была в слоте if(in_slot) { if(GetActiveSlot() == pIItem->CurrSlot()) Activate(NO_ACTIVE_SLOT); m_slots[pIItem->CurrSlot()].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); if (!IsGameTypeSingle()) { u16 item_parent_id = pIItem->object().H_Parent() ? pIItem->object().H_Parent()->ID() : u16(-1) ; u16 inventory_owner_id = GetOwner()->object_id(); R_ASSERT2(item_parent_id == inventory_owner_id, make_string("! ERROR: CL: Actor[%d] tries to place to ruck not own item [%d], real item owner is [%d]", inventory_owner_id, pIItem->object_id(), item_parent_id).c_str() ); #ifdef MP_LOGGING Msg("--- Actor [%d] place to ruck item [%d]", inventory_owner_id, pIItem->object_id()); #endif } } m_ruck.insert (m_ruck.end(), pIItem); CalcTotalWeight (); InvalidateState (); m_pOwner->OnItemRuck (pIItem, pIItem->m_ItemCurrPlace); SInvItemPlace prev_place = pIItem->m_ItemCurrPlace; pIItem->m_ItemCurrPlace.type = eItemPlaceRuck; pIItem->OnMoveToRuck (prev_place); if(in_slot) pIItem->object().processing_deactivate(); return true; }
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 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 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); };
bool CWeaponMagazined::Attach(PIItem pIItem, bool b_send_event) { bool result = false; CScope* pScope = smart_cast<CScope*>(pIItem); CSilencer* pSilencer = smart_cast<CSilencer*>(pIItem); CGrenadeLauncher* pGrenadeLauncher = smart_cast<CGrenadeLauncher*>(pIItem); if (pScope && m_eScopeStatus == CSE_ALifeItemWeapon::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonScope) == 0 && (m_sScopeName == pIItem->object().cNameSect())) { m_flagsAddOnState |= CSE_ALifeItemWeapon::eWeaponAddonScope; result = true; } else if (pSilencer && m_eSilencerStatus == CSE_ALifeItemWeapon::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonSilencer) == 0 && (m_sSilencerName == pIItem->object().cNameSect())) { m_flagsAddOnState |= CSE_ALifeItemWeapon::eWeaponAddonSilencer; result = true; } else if (pGrenadeLauncher && m_eGrenadeLauncherStatus == CSE_ALifeItemWeapon::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher) == 0 && (m_sGrenadeLauncherName == pIItem->object().cNameSect())) { m_flagsAddOnState |= CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher; result = true; } if (result) { if (b_send_event && OnServer()) { //уничтожить подсоединенную вещь из инвентаря //. pIItem->Drop (); pIItem->object().DestroyObject(); }; UpdateAddonsVisibility(); InitAddons(); return true; } else return inherited::Attach(pIItem, b_send_event); }
void CInventory::UpdateDropItem(PIItem pIItem) { if( pIItem->GetDropManual() ) { pIItem->SetDropManual(FALSE); if ( OnServer() ) { NET_Packet P; pIItem->object().u_EventGen (P, GE_OWNERSHIP_REJECT, pIItem->object().H_Parent()->ID()); P.w_u16 (u16(pIItem->object().ID())); pIItem->object().u_EventSend(P); } }// dropManual }
//ищем на поясе гранату такоже типа PIItem CInventory::Same(const PIItem pIItem, bool bSearchRuck) const { const TIItemContainer &list = bSearchRuck ? m_ruck : m_belt; for(TIItemContainer::const_iterator it = list.begin(); list.end() != it; ++it) { const PIItem l_pIItem = *it; if((l_pIItem != pIItem) && !xr_strcmp(l_pIItem->object().cNameSect(), pIItem->object().cNameSect())) return l_pIItem; } return NULL; }
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; }
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() ); } } }
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 }
//положить вещь в слот bool CInventory::Slot(PIItem pIItem, bool bNotActivate) { VERIFY(pIItem); // Msg("To Slot %s[%d]", *pIItem->object().cName(), pIItem->object().ID()); if(!CanPutInSlot(pIItem)) { #if 0//def _DEBUG Msg("there is item %s[%d,%x] in slot %d[%d,%x]", *m_slots[pIItem->GetSlot()].m_pIItem->object().cName(), m_slots[pIItem->GetSlot()].m_pIItem->object().ID(), m_slots[pIItem->GetSlot()].m_pIItem, pIItem->GetSlot(), pIItem->object().ID(), pIItem); #endif if(m_slots[pIItem->GetSlot()].m_pIItem == pIItem && !bNotActivate ) Activate(pIItem->GetSlot()); return false; } m_slots[pIItem->GetSlot()].m_pIItem = pIItem; //удалить из рюкзака или пояса TIItemContainer::iterator it = std::find(m_ruck.begin(), m_ruck.end(), pIItem); if(m_ruck.end() != it) m_ruck.erase(it); it = std::find(m_belt.begin(), m_belt.end(), pIItem); if(m_belt.end() != it) m_belt.erase(it); if (( (m_iActiveSlot==pIItem->GetSlot())||(m_iActiveSlot==NO_ACTIVE_SLOT) && m_iNextActiveSlot==NO_ACTIVE_SLOT) && (!bNotActivate)) Activate (pIItem->GetSlot()); m_pOwner->OnItemSlot (pIItem, pIItem->m_eItemPlace); pIItem->m_eItemPlace = eItemPlaceSlot; pIItem->OnMoveToSlot (); pIItem->object().processing_activate(); return true; }
void CUIActorMenu::highlight_weapons_for_ammo( PIItem ammo_item, CUIDragDropListEx* ddlist ) { VERIFY( ammo_item ); VERIFY( ddlist ); CWeaponAmmo* ammo = smart_cast<CWeaponAmmo*>(ammo_item); if ( !ammo ) { return; } shared_str const& ammo_name = ammo_item->object().cNameSect(); 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; } CWeapon* weapon = smart_cast<CWeapon*>(item); if ( !weapon ) { continue; } xr_vector<shared_str>::iterator itb = weapon->m_ammoTypes.begin(); xr_vector<shared_str>::iterator ite = weapon->m_ammoTypes.end(); for ( ; itb != ite; ++itb ) { if ( ammo_name._get() == (*itb)._get() ) { ci->m_select_armament = true; break; // for itb } } CWeaponMagazinedWGrenade* wg = smart_cast<CWeaponMagazinedWGrenade*>(item); if ( !wg || !wg->IsGrenadeLauncherAttached() || !wg->m_ammoTypes2.size() ) { continue; // for i } itb = wg->m_ammoTypes2.begin(); ite = wg->m_ammoTypes2.end(); for ( ; itb != ite; ++itb ) { if ( ammo_name._get() == (*itb)._get() ) { ci->m_select_armament = true; break; // for itb } } }//for i }
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 CWeaponMagazinedWGrenade::CanAttach(PIItem pIItem) { 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())) return true; else return inherited::CanAttach(pIItem); }
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; }
bool CWeaponMagazined::CanAttach(PIItem pIItem) { CScope* pScope = smart_cast<CScope*>(pIItem); CSilencer* pSilencer = smart_cast<CSilencer*>(pIItem); CGrenadeLauncher* pGrenadeLauncher = smart_cast<CGrenadeLauncher*>(pIItem); if (pScope && m_eScopeStatus == ALife::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonScope) == 0 && (m_sScopeName == pIItem->object().cNameSect())) return true; else if (pSilencer && m_eSilencerStatus == ALife::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonSilencer) == 0 && (m_sSilencerName == pIItem->object().cNameSect())) return true; else if (pGrenadeLauncher && m_eGrenadeLauncherStatus == ALife::eAddonAttachable && (m_flagsAddOnState&CSE_ALifeItemWeapon::eWeaponAddonGrenadeLauncher) == 0 && (m_sGrenadeLauncherName == pIItem->object().cNameSect())) return true; else return inherited::CanAttach(pIItem); }
void CUIInventoryWnd::AttachAddon(PIItem item_to_upgrade) { PlaySnd (eInvAttachAddon); R_ASSERT (item_to_upgrade); if (OnClient()) { NET_Packet P; item_to_upgrade->object().u_EventGen (P, GE_ADDON_ATTACH, item_to_upgrade->object().ID()); P.w_u32 (CurrentIItem()->object().ID()); item_to_upgrade->object().u_EventSend (P); }; item_to_upgrade->Attach (CurrentIItem(), true); //спр¤тать вещь из активного слота в инвентарь на врем¤ вызова менюшки CActor *pActor = smart_cast<CActor*>(Level().CurrentEntity()); if(pActor && item_to_upgrade == pActor->inventory().ActiveItem()) { m_iCurrentActiveSlot = pActor->inventory().GetActiveSlot(); pActor->inventory().Activate (NO_ACTIVE_SLOT); } SetCurrentItem (NULL); }
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; }
void game_cl_ArtefactHunt::OnSellItemsFromRuck () { if (!local_player || local_player->testFlag(GAME_PLAYER_FLAG_VERY_VERY_DEAD) || !local_player->testFlag(GAME_PLAYER_FLAG_ONBASE)) return; CActor* pCurActor = smart_cast<CActor*> (Level().Objects.net_Find (local_player->GameID)); if (!pCurActor) return; TIItemContainer::const_iterator IRuck = pCurActor->inventory().m_ruck.begin(); TIItemContainer::const_iterator ERuck = pCurActor->inventory().m_ruck.end(); NET_Packet P; pCurActor->u_EventGen(P, GEG_PLAYER_ITEM_SELL, pCurActor->ID()); P.w_u16(u16(pCurActor->inventory().m_ruck.size() & 0xffff)); for ( ; IRuck != ERuck; ++IRuck) { PIItem pItem = *IRuck; P.w_u16 (pItem->object().ID()); }; pCurActor->u_EventSend(P); };
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; }
CUICellItem* CUIBagWnd::CreateNewItem(const u8 grpNum, u8 uIndexInSlot) { u32 sz = m_allItems.size(); VERIFY (sz); CUICellItem* item; PIItem iitem = NULL; CUICellItem* new_item; for (u32 i = 0; i < sz; i++){ item = m_allItems[i]; if (m_info[item->m_index].pos_in_section == uIndexInSlot && m_info[item->m_index].section == grpNum ) { iitem = (PIItem)item->m_pData; break; } } R_ASSERT (iitem); new_item = CreateItem(iitem->object().cNameSect()); new_item->m_index = m_allItems.size(); m_allItems.push_back (new_item); ItmInfo ii; ii.price = pSettings->r_s32(*m_sectionPrice, m_wpnSectStorage[grpNum][uIndexInSlot].c_str()); m_info.push_back (ii); m_info[new_item->m_index].short_cut = NULL; m_info[new_item->m_index].active = true; m_info[new_item->m_index].bought = false; m_info[new_item->m_index].section = grpNum; m_info[new_item->m_index].pos_in_section = uIndexInSlot; m_info[new_item->m_index].external = false; PutItemToGroup (new_item, grpNum); return new_item; }