本文整理汇总了C++中CItemBase::IsType方法的典型用法代码示例。如果您正苦于以下问题:C++ CItemBase::IsType方法的具体用法?C++ CItemBase::IsType怎么用?C++ CItemBase::IsType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CItemBase
的用法示例。
在下文中一共展示了CItemBase::IsType方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: FindTypeNear_Top
CPointMap CWorld::FindTypeNear_Top( const CPointMap & pt, IT_TYPE iType, int iDistance )
{
ADDTOCALLSTACK("CWorld::FindTypeNear_Top");
#define RESOURCE_Z_CHECK 8
CPointMap ptFound;
CItemBase * pItemDef = NULL;
CItem * pItem = NULL;
CItemBaseDupe * pDupeDef = NULL;
height_t Height = 0;
BYTE z = 0;
CPointMap ptTest;
unsigned int iRetElem = 4;
CPointMap ptElem[5];
memset(ptElem, 0, sizeof(ptElem));
//for ( iQty = 0; iQty < 4; ++iQty )
// ptElem[iQty].m_z = UO_SIZE_MIN_Z;
ptElem[0].m_z = ptElem[1].m_z = ptElem[2].m_z = ptElem[3].m_z = UO_SIZE_MIN_Z;
ptElem[4] = CPointMap(USHRT_MAX, USHRT_MAX, UO_SIZE_MIN_Z);
bool fElem[4] = { false, false, false, false };
// Check dynamics
CWorldSearch Area( pt, iDistance );
Area.SetAllShow( true );
for (;;)
{
z = 0;
Height = 0;
pItem = Area.GetItem();
if ( pItem == NULL )
break;
if ( pt.GetDist( pItem->GetTopPoint() ) > iDistance )
continue;
pItemDef = CItemBase::FindItemBase( pItem->GetDispID() );
if ( pItemDef == NULL )
continue;
Height = pItemDef->GetHeight();
if ( pItemDef->GetID() != pItem->GetDispID() ) //not a parent item
{
pDupeDef = CItemBaseDupe::GetDupeRef(static_cast<ITEMID_TYPE>(pItem->GetDispID()));
if ( ! pDupeDef )
{
g_Log.EventDebug("Failed to get non-parent reference (dynamic) (DispID 0%x) (X: %d Y: %d Z: %d)\n",pItem->GetDispID(),ptTest.m_x,ptTest.m_y,ptTest.m_z);
Height = pItemDef->GetHeight();
}
else
Height = pDupeDef->GetHeight();
}
z = minimum( Height + pItem->GetTopPoint().m_z, UO_SIZE_Z ); //height + current position = the top point
if ( ptElem[0].m_z > z ) //if ( ptElem[0].m_z > pItem->GetTopPoint().m_z )
continue;
if ( ((( z - pt.m_z ) > 0) && ( z - pt.m_z ) > RESOURCE_Z_CHECK ) || ((( pt.m_z - z ) < 0) && (( pt.m_z - z ) < - RESOURCE_Z_CHECK ))) //if ( ((( pItem->GetTopPoint().m_z - pt.m_z ) > 0) && ( pItem->GetTopPoint().m_z - pt.m_z ) > RESOURCE_Z_CHECK ) || ((( pt.m_z - pItem->GetTopPoint().m_z ) < 0) && (( pt.m_z - pItem->GetTopPoint().m_z ) < - RESOURCE_Z_CHECK )))
continue;
if (( z < ptElem[0].m_z ) || (( z == ptElem[0].m_z ) && ( fElem[0] )))
continue;
ptElem[0] = pItem->GetTopPoint();
ptElem[0].m_z = z;
fElem[0] = false;
//DEBUG_ERR(("dynamic pItem->IsType( iType %d) %d\n",iType,pItem->IsType( iType )));
if ( pItem->IsType( iType ) ) //( pItem->Item_GetDef()->IsType(iType) ) )
{
fElem[0] = true;
iRetElem = 0;
}
}
// Parts of multis ?
const CGrayMulti * pMulti = NULL; // Multi Def (multi check)
const CUOMultiItemRec2 * pMultiItem = NULL; // Multi item iterator
CRegionBase * pRegion = NULL;
CRegionLinks rlinks;
size_t iRegionQty = pt.GetRegions( REGION_TYPE_MULTI, rlinks );
if ( iRegionQty > 0 )
{
for ( size_t iRegion = 0; iRegion < iRegionQty; pMulti = NULL, ++iRegion)
{
pRegion = rlinks.GetAt(iRegion);
pItem = pRegion->GetResourceID().ItemFind();
if ( !pItem )
continue;
pMulti = g_Cfg.GetMultiItemDefs(pItem);
if ( !pMulti )
continue;
size_t iMultiQty = pMulti->GetItemCount();
for ( size_t iMulti = 0; iMulti < iMultiQty; pItemDef = NULL, pMultiItem = NULL, Height = 0, ++iMulti )
{
pMultiItem = pMulti->GetItem(iMulti);
if ( !pMultiItem )
break;
//.........这里部分代码省略.........