void TryToDefuseWeapon(CWeapon const * weapon, TIItemContainer const & all_items, buffer_vector<shared_str> & dest_ammo) { if (!weapon) return; CWeaponMagazinedWGrenade const * tmp_gl_weapon = smart_cast<CWeaponMagazinedWGrenade const *>(weapon); if (weapon->IsGrenadeLauncherAttached()) TryToDefuseGrenadeLauncher(tmp_gl_weapon, all_items, dest_ammo); xr_vector<shared_str> const * tmp_ammo_types = NULL; u8 const * tmp_ammo_type = NULL; u16 ammo_elapsed = 0; if (tmp_gl_weapon && tmp_gl_weapon->m_bGrenadeMode) { tmp_ammo_types = &tmp_gl_weapon->m_ammoTypes2; tmp_ammo_type = &tmp_gl_weapon->m_ammoType2; ammo_elapsed = (u16)tmp_gl_weapon->m_magazine2.size(); } else { tmp_ammo_types = &weapon->m_ammoTypes; tmp_ammo_type = &weapon->m_ammoType; ammo_elapsed = (u16)weapon->GetAmmoElapsed(); } if (tmp_ammo_types->size() <= u32(*tmp_ammo_type)) return; shared_str ammo_section = (*tmp_ammo_types)[*tmp_ammo_type]; VERIFY2(ammo_section.size(), make_string( "ammo type of [%s] hasn't section name", weapon->cName().c_str()).c_str()); if (!ammo_section.size()) return; VERIFY(pSettings->line_exist(ammo_section.c_str(), "box_size")); u16 ammo_box_size = pSettings->r_u16(ammo_section.c_str(), "box_size"); while (ammo_elapsed >= ammo_box_size) { dest_ammo.push_back(ammo_section); ammo_elapsed = ammo_elapsed - ammo_box_size; } if (!ammo_elapsed) return; AmmoSearcherPredicate ammo_completitor(ammo_elapsed, ammo_section); TIItemContainer::const_iterator temp_iter = std::find_if( all_items.begin(), all_items.end(), ammo_completitor); if (temp_iter == all_items.end()) return; CWeaponAmmo* temp_ammo = smart_cast<CWeaponAmmo*>(*temp_iter); R_ASSERT2(temp_ammo, "failed to create ammo after defusing weapon"); temp_ammo->m_boxCurr = temp_ammo->m_boxSize; }
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) { u16 I = FirstSlot(); u16 E = LastSlot(); for(;I<=E;++I) { PIItem item = ItemFromSlot(I); if(item && (!for_trade || item->CanTrade()) ) { if(!SlotIsPersistent(I) || item->BaseSlot()==GRENADE_SLOT ) items_container.push_back(item); } } } }
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 CUITradeWnd::FillList (TIItemContainer& cont, CUIDragDropListEx& dragDropList, bool do_colorize) { TIItemContainer::iterator it = cont.begin(); TIItemContainer::iterator it_e = cont.end(); for(; it != it_e; ++it) { CUICellItem* itm = create_cell_item (*it); if(do_colorize) ColorizeItem (itm, CanMoveToOther(*it)); dragDropList.SetItem (itm); } }
// KD // functions for CInventoryOwner class CScriptGameObject *CScriptGameObject::ItemOnBelt (u32 item_id) const { CInventoryOwner *inventory_owner = smart_cast<CInventoryOwner*>(&object()); if (!inventory_owner) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"CInventoryOwner : cannot access class member item_on_belt!"); return (0); } TIItemContainer *belt = &(inventory_owner->inventory().m_belt); if (belt->size() < item_id) { ai().script_engine().script_log (ScriptStorage::eLuaMessageTypeError,"item_on_belt: item id outside belt!"); return (0); } CInventoryItem *result = belt->at(item_id); return (result ? result->object().lua_game_object() : 0); }
void CInventoryBox::AddAvailableItems(TIItemContainer& items_container) const { xr_vector<u16>::const_iterator it = m_items.begin(); xr_vector<u16>::const_iterator it_e = m_items.end(); for(;it!=it_e;++it) { PIItem itm = smart_cast<PIItem>(Level().Objects.net_Find(*it));VERIFY(itm); items_container.push_back (itm); } }