Пример #1
0
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;
}
Пример #2
0
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);
			}
		}
	}		
}
Пример #3
0
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);
            }
        }
    }
}
Пример #4
0
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);
}
Пример #6
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);
	}
}