PackItem BUG ! TESTED ON V15 -> You have the bug too

04/01/2016 11:25 sebariio#1
Take a box with 4 items inside
[Only registered and activated users can see links. Click Here To Register...]

After, open it -> Error Ok

If you have 1 free slot
[Only registered and activated users can see links. Click Here To Register...]

2 free slots:
[Only registered and activated users can see links. Click Here To Register...]

The box with 4 item is now open and the 2 last items are not created

The function :
Code:
void CUser::DoUsePackItem( CItemElem* pItemElem, PPACKITEMELEM pPackItemElem )
{
	time_t t	= 0;
	if( pPackItemElem->nSpan )	// minutes
	{
		CTime time	= CTime::GetCurrentTime() + CTimeSpan( 0, 0, pPackItemElem->nSpan, 0 );
		t	= (time_t)( time.GetTime() );
	}

	if( m_Inventory.GetEmptyCount() >= pPackItemElem->nSize )
	{
		for( int i = 0; i < pPackItemElem->nSize; i++ )
		{
			CItemElem itemElem;
			itemElem.m_dwItemId	= pPackItemElem->adwItem[i];
			itemElem.SetAbilityOption( pPackItemElem->anAbilityOption[i] );
			itemElem.m_nItemNum	= pPackItemElem->anNum[i];
			itemElem.m_bCharged		= itemElem.GetProp()->bCharged;
			itemElem.m_dwKeepTime	= (DWORD)t;

//			if( pItemElem->IsFlag( CItemElem::binds ) )
			if( pItemElem->IsBinds() )
				itemElem.SetFlag( CItemElem::binds );

			if( CreateItem( &itemElem ) )
			{
				AddDefinedText( TID_GAME_REAPITEM, "\"%s\"", itemElem.GetProp()->szName );
				g_DPSrvr.PutCreateItemLog( this, &itemElem , "E", "PACK" );
//				ItemProp* pItemProp		= itemElem.GetProp();
//				if( pItemProp->dwSfxObj3 != -1 )
//					g_UserMng.AddCreateSfxObj( this, pItemProp->dwSfxObj3, GetPos().x, GetPos().y, GetPos().z );
			}
		}
		OnAfterUseItem( pItemElem->GetProp() );
		UpdateItem( (BYTE)( pItemElem->m_dwObjId ), UI_NUM, pItemElem->m_nItemNum - 1 );
	}
	else
		AddDefinedText( TID_GAME_LACKSPACE );			
}
Anyone have a solution?
04/01/2016 12:40 ZeroTwo02#2
Te fait pas chier et remplace

if( m_Inventory.GetEmptyCount() >= pPackItemElem->nSize )

par if( m_Inventory.GetEmptyCount() >= 5 )
04/01/2016 13:57 sebariio#3
Si je fais ça les boîtes qui ont + de 5 objets sont niquées xD

Ok avec ce code la ça fonctionne bien :
void CUser::DoUsePackItem( CItemElem* pItemElem, PPACKITEMELEM pPackItemElem )
{
time_t t = 0;
if( pPackItemElem->nSpan ) // minutes
{
CTime time = CTime::GetCurrentTime() + CTimeSpan( 0, 0, pPackItemElem->nSpan, 0 );
t = (time_t)( time.GetTime() );
}

if( ( m_Inventory.GetEmptyCount() -1 ) <= pPackItemElem->nSize )
{
AddDefinedText( TID_GAME_LACKSPACE );
return;
}
else
{
for( int i = 0; i < pPackItemElem->nSize; i++ )
{
CItemElem itemElem;
itemElem.m_dwItemId = pPackItemElem->adwItem[i];
itemElem.SetAbilityOption( pPackItemElem->anAbilityOption[i] );
itemElem.m_nItemNum = pPackItemElem->anNum[i];
itemElem.m_bCharged = itemElem.GetProp()->bCharged;
itemElem.m_dwKeepTime = (DWORD)t;

// if( pItemElem->IsFlag( CItemElem::binds ) )
if( pItemElem->IsBinds() )
itemElem.SetFlag( CItemElem::binds );

if( CreateItem( &itemElem ) )
{
AddDefinedText( TID_GAME_REAPITEM, "\"%s\"", itemElem.GetProp()->szName );
g_DPSrvr.PutCreateItemLog( this, &itemElem , "E", "PACK" );
// ItemProp* pItemProp = itemElem.GetProp();
// if( pItemProp->dwSfxObj3 != -1 )
// g_UserMng.AddCreateSfxObj( this, pItemProp->dwSfxObj3, GetPos().x, GetPos().y, GetPos().z );
}
}
OnAfterUseItem( pItemElem->GetProp() );
UpdateItem( (BYTE)( pItemElem->m_dwObjId ), UI_NUM, pItemElem->m_nItemNum - 1 );
}
}