本文整理汇总了C++中CItemBase::GetDispID方法的典型用法代码示例。如果您正苦于以下问题:C++ CItemBase::GetDispID方法的具体用法?C++ CItemBase::GetDispID怎么用?C++ CItemBase::GetDispID使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CItemBase
的用法示例。
在下文中一共展示了CItemBase::GetDispID方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ParseLine
bool CMenuItem::ParseLine( TCHAR * pszArgs, CScriptObj * pObjBase, CTextConsole * pSrc )
{
ADDTOCALLSTACK("CMenuItem::ParseLine");
if ( *pszArgs == '@' )
{
// This allows for triggers in menus
return false;
}
TCHAR * pszArgStart = pszArgs;
while ( _ISCSYM( *pszArgs ))
pszArgs++;
if ( *pszArgs )
{
*pszArgs = '\0';
pszArgs++;
GETNONWHITESPACE( pszArgs );
}
// The item id (if we want to have an item type menu) or 0
if ( strcmp( pszArgStart, "0" ) != 0 )
{
CItemBase * pItemBase = CItemBase::FindItemBase(static_cast<ITEMID_TYPE>(g_Cfg.ResourceGetIndexType( RES_ITEMDEF, pszArgStart )));
if ( pItemBase != NULL )
{
m_id = static_cast<WORD>(pItemBase->GetDispID());
pObjBase = pItemBase;
}
else
{
DEBUG_ERR(( "Bad MENU item id '%s'\n", pszArgStart ));
return( false ); // skip this.
}
}
else
{
m_id = 0;
}
if ( pObjBase != NULL )
{
pObjBase->ParseText( pszArgs, pSrc );
}
else
{
g_Serv.ParseText( pszArgs, pSrc );
}
// Parsing @color
if ( *pszArgs == '@' )
{
pszArgs++;
HUE_TYPE wHue = static_cast<HUE_TYPE>(Exp_GetVal( pszArgs ));
if ( wHue != 0 )
wHue = (wHue == 1? 0x7FF: wHue-1);
m_color = wHue;
SKIP_ARGSEP( pszArgs );
}
else
m_color = 0;
m_sText = pszArgs;
if ( m_sText.IsEmpty())
{
if ( pObjBase ) // use the objects name by default.
{
m_sText = pObjBase->GetName();
if ( ! m_sText.IsEmpty())
return( true );
}
DEBUG_ERR(( "Bad MENU item text '%s'\n", pszArgStart ));
}
return( !m_sText.IsEmpty() );
}
示例2: GetFixPoint
void CWorld::GetFixPoint( const CPointMap & pt, CGrayMapBlockState & block)
{
//Will get the highest CAN_I_PLATFORM|CAN_I_CLIMB and places it into block.Bottom
ADDTOCALLSTACK("CWorld::GetFixPoint");
CItemBase * pItemDef = NULL;
CItemBaseDupe * pDupeDef = NULL;
CItem * pItem = NULL;
DWORD wBlockThis = 0;
signed char z = 0;
int x2 = 0, y2 = 0;
// Height of statics at/above given coordinates
// do gravity here for the z.
const CGrayMapBlock * pMapBlock = GetMapBlock( pt );
if (pMapBlock == NULL)
return;
size_t iQty = pMapBlock->m_Statics.GetStaticQty();
if ( iQty > 0 ) // no static items here.
{
x2 = pMapBlock->GetOffsetX(pt.m_x);
y2 = pMapBlock->GetOffsetY(pt.m_y);
const CUOStaticItemRec * pStatic = NULL;
for ( size_t i = 0; i < iQty; ++i, z = 0, pStatic = NULL, pDupeDef = NULL )
{
if ( ! pMapBlock->m_Statics.IsStaticPoint( i, x2, y2 ))
continue;
pStatic = pMapBlock->m_Statics.GetStatic( i );
if ( pStatic == NULL )
continue;
z = pStatic->m_z;
pItemDef = CItemBase::FindItemBase( pStatic->GetDispID() );
if ( pItemDef )
{
if (pItemDef->GetID() == pStatic->GetDispID()) //parent item
{
wBlockThis = (pItemDef->m_Can & CAN_I_MOVEMASK);
z += ((wBlockThis & CAN_I_CLIMB) ? pItemDef->GetHeight()/2 : pItemDef->GetHeight());
}
else //non-parent item
{
pDupeDef = CItemBaseDupe::GetDupeRef(static_cast<ITEMID_TYPE>(pStatic->GetDispID()));
if ( ! pDupeDef )
{
g_Log.EventDebug("Failed to get non-parent reference (static) (DispID 0%x) (X: %d Y: %d Z: %d)\n",pStatic->GetDispID(),pStatic->m_x+pMapBlock->m_x,pStatic->m_y+pMapBlock->m_y,pStatic->m_z);
wBlockThis = ( pItemDef->m_Can & CAN_I_MOVEMASK );
z += ((wBlockThis & CAN_I_CLIMB) ? pItemDef->GetHeight()/2 : pItemDef->GetHeight());
}
else
{
wBlockThis = (pDupeDef->m_Can & CAN_I_MOVEMASK);
z += ((wBlockThis & CAN_I_CLIMB) ? pDupeDef->GetHeight()/2 : pDupeDef->GetHeight());
}
}
}
else if ( pStatic->GetDispID() )
CItemBase::GetItemTiledataFlags(wBlockThis,pStatic->GetDispID());
if (block.m_Bottom.m_z < z)
{
if ((z < pt.m_z+PLAYER_HEIGHT) && (wBlockThis & (CAN_I_PLATFORM|CAN_I_CLIMB|CAN_I_WATER)))
{
block.m_Bottom.m_dwBlockFlags = wBlockThis;
block.m_Bottom.m_dwTile = pStatic->GetDispID() + TERRAIN_QTY;
block.m_Bottom.m_z = z;
}
else if (block.m_Top.m_z > z)
{
block.m_Top.m_dwBlockFlags = wBlockThis;
block.m_Top.m_dwTile = pStatic->GetDispID() + TERRAIN_QTY;
block.m_Top.m_z = z;
}
}
}
}
pItemDef = NULL;
pDupeDef = NULL;
pItem = NULL;
wBlockThis = 0;
z = 0;
x2 = y2 = 0;
iQty = 0;
// Any multi items here ?
// Check all of them
CRegionLinks rlinks;
size_t iRegionQty = pt.GetRegions( REGION_TYPE_MULTI, rlinks );
if ( iRegionQty > 0 )
{
// ------------ For variables --------------------
CRegionBase * pRegion = NULL;
const CGrayMulti * pMulti = NULL;
const CUOMultiItemRec2 * pMultiItem = NULL;
x2 = 0;
y2 = 0;
// ------------ For variables --------------------
//.........这里部分代码省略.........
示例3: GetHeightPoint
void CWorld::GetHeightPoint( const CPointMap & pt, CGrayMapBlockState & block, bool fHouseCheck )
{
ADDTOCALLSTACK("CWorld::GetHeightPoint");
CItemBase * pItemDef = NULL;
CItemBaseDupe * pDupeDef = NULL;
CItem * pItem = NULL;
DWORD wBlockThis = 0;
signed char z = 0;
height_t zHeight = 0;
int x2 = 0, y2 = 0;
// Height of statics at/above given coordinates
// do gravity here for the z.
const CGrayMapBlock * pMapBlock = GetMapBlock( pt );
if (pMapBlock == NULL)
return;
size_t iQty = pMapBlock->m_Statics.GetStaticQty();
if ( iQty > 0 ) // no static items here.
{
x2 = pMapBlock->GetOffsetX(pt.m_x);
y2 = pMapBlock->GetOffsetY(pt.m_y);
const CUOStaticItemRec * pStatic = NULL;
for ( size_t i = 0; i < iQty; ++i, z = 0, zHeight = 0, pStatic = NULL, pDupeDef = NULL )
{
if ( ! pMapBlock->m_Statics.IsStaticPoint( i, x2, y2 ))
continue;
pStatic = pMapBlock->m_Statics.GetStatic( i );
if ( pStatic == NULL )
continue;
z = pStatic->m_z;
//DEBUG_ERR(("z (%d) block.m_zHeight (%d) block.m_Bottom.m_z (%d)\n",z,block.m_zHeight,block.m_Bottom.m_z));
if ( ! block.IsUsableZ( z, block.m_zHeight ))
continue;
// This static is at the coordinates in question.
// enough room for me to stand here ?
pItemDef = CItemBase::FindItemBase( pStatic->GetDispID() );
if ( pItemDef )
{
//DEBUG_ERR(("pItemDef->GetID(0%x) pItemDef->GetDispID(0%x) pStatic->GetDispID(0%x)\n",pItemDef->GetID(),pItemDef->GetDispID(),pStatic->GetDispID()));
if ( pItemDef->GetID() == pStatic->GetDispID() ) //parent item
{
zHeight = pItemDef->GetHeight();
wBlockThis = ( pItemDef->m_Can & CAN_I_MOVEMASK ); //Use only Block flags, other remove
}
else //non-parent item
{
pDupeDef = CItemBaseDupe::GetDupeRef(static_cast<ITEMID_TYPE>(pStatic->GetDispID()));
if ( ! pDupeDef )
{
g_Log.EventDebug("Failed to get non-parent reference (static) (DispID 0%x) (X: %d Y: %d Z: %d)\n",pStatic->GetDispID(),pStatic->m_x+pMapBlock->m_x,pStatic->m_y+pMapBlock->m_y,pStatic->m_z);
zHeight = pItemDef->GetHeight();
wBlockThis = ( pItemDef->m_Can & CAN_I_MOVEMASK );
}
else
{
zHeight = pDupeDef->GetHeight();
wBlockThis = ( pDupeDef->m_Can & CAN_I_MOVEMASK ); //Use only Block flags, other remove - CAN flags cannot be inherited from the parent item due to bad script pack...
}
}
}
else if ( pStatic->GetDispID() )
CItemBase::GetItemTiledataFlags(wBlockThis,pStatic->GetDispID());
block.CheckTile_Item( wBlockThis, z, zHeight, pStatic->GetDispID() + TERRAIN_QTY );
}
}
pItemDef = NULL;
pDupeDef = NULL;
pItem = NULL;
wBlockThis = 0;
z = 0;
zHeight = 0;
x2 = y2 = 0;
iQty = 0;
// Any multi items here ?
// Check all of them
if ( fHouseCheck )
{
CRegionLinks rlinks;
size_t iRegionQty = pt.GetRegions( REGION_TYPE_MULTI, rlinks );
if ( iRegionQty > 0 )
{
// ------------ For variables --------------------
CRegionBase * pRegion = NULL;
const CGrayMulti * pMulti = NULL;
const CUOMultiItemRec2 * pMultiItem = NULL;
x2 = 0;
y2 = 0;
// ------------ For variables --------------------
for ( size_t iRegion = 0; iRegion < iRegionQty; ++iRegion, pRegion = NULL, pItem = NULL, pMulti = NULL, x2 = 0, y2 = 0 )
{
//.........这里部分代码省略.........
示例4: Area
void CWorld::GetHeightPoint2( const CPointMap & pt, CGrayMapBlockState & block, bool fHouseCheck )
{
ADDTOCALLSTACK("CWorld::GetHeightPoint2");
// Height of statics at/above given coordinates
// do gravity here for the z.
DWORD wBlockThis = 0;
const CGrayMapBlock * pMapBlock = GetMapBlock( pt );
if ( !pMapBlock )
{
g_Log.EventWarn("GetMapBlock failed at %s.\n", pt.WriteUsed());
return;
}
{
size_t iStaticQty = pMapBlock->m_Statics.GetStaticQty();
if ( iStaticQty > 0 ) // no static items here.
{
int x2 = pMapBlock->GetOffsetX(pt.m_x);
int y2 = pMapBlock->GetOffsetY(pt.m_y);
for ( size_t i = 0; i < iStaticQty; i++ )
{
if ( ! pMapBlock->m_Statics.IsStaticPoint( i, x2, y2 ))
continue;
const CUOStaticItemRec * pStatic = pMapBlock->m_Statics.GetStatic( i );
signed char z = pStatic->m_z;
if ( ! block.IsUsableZ(z,PLAYER_HEIGHT))
continue;
// This static is at the coordinates in question.
// enough room for me to stand here ?
wBlockThis = 0;
height_t zHeight = CItemBase::GetItemHeight( pStatic->GetDispID(), wBlockThis );
block.CheckTile( wBlockThis, z, zHeight, pStatic->GetDispID() + TERRAIN_QTY );
}
}
}
// Any multi items here ?
if ( fHouseCheck )
{
CRegionLinks rlinks;
size_t iRegionQty = pt.GetRegions( REGION_TYPE_MULTI, rlinks );
if ( iRegionQty > 0 )
{
for ( size_t i = 0; i < iRegionQty; i++)
{
CRegionBase * pRegion = rlinks.GetAt(i);
CItem * pItem = pRegion->GetResourceID().ItemFind();
if ( pItem != NULL )
{
const CGrayMulti * pMulti = g_Cfg.GetMultiItemDefs(pItem);
if ( pMulti )
{
int x2 = pt.m_x - pItem->GetTopPoint().m_x;
int y2 = pt.m_y - pItem->GetTopPoint().m_y;
size_t iMultiQty = pMulti->GetItemCount();
for ( size_t j = 0; j < iMultiQty; j++ )
{
const CUOMultiItemRec2 * pMultiItem = pMulti->GetItem(j);
ASSERT(pMultiItem);
if ( ! pMultiItem->m_visible )
continue;
if ( pMultiItem->m_dx != x2 || pMultiItem->m_dy != y2 )
continue;
signed char zitem = static_cast<signed char>( pItem->GetTopZ() + pMultiItem->m_dz );
if ( ! block.IsUsableZ(zitem,PLAYER_HEIGHT))
continue;
wBlockThis = 0;
height_t zHeight = CItemBase::GetItemHeight( pMultiItem->GetDispID(), wBlockThis );
block.CheckTile( wBlockThis, zitem, zHeight, pMultiItem->GetDispID() + TERRAIN_QTY );
}
}
}
}
}
}
{
// Any dynamic items here ?
// NOTE: This could just be an item that an NPC could just move ?
CWorldSearch Area( pt );
for (;;)
{
CItem * pItem = Area.GetItem();
if ( pItem == NULL )
break;
signed char zitem = pItem->GetTopZ();
if ( ! block.IsUsableZ(zitem,PLAYER_HEIGHT))
continue;
// Invis items should not block ???
CItemBase * pItemDef = pItem->Item_GetDef();
ASSERT(pItemDef);
//.........这里部分代码省略.........