本文整理汇总了C++中CChar::Delete方法的典型用法代码示例。如果您正苦于以下问题:C++ CChar::Delete方法的具体用法?C++ CChar::Delete怎么用?C++ CChar::Delete使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CChar
的用法示例。
在下文中一共展示了CChar::Delete方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Spawn_KillChildren
void CItem::Spawn_KillChildren()
{
// kill all creatures spawned from this !
DEBUG_CHECK( IsType(IT_SPAWN_CHAR));
int iCurrent = m_itSpawnChar.m_current;
for ( int j = 0; j < 256; j++ ) // loop through all maps
{
if ( !g_MapList.m_maps[j] ) continue; // skip unsupported maps
for ( int i = 0; i < g_MapList.GetSectorQty(j); i++ )
{
CSector * pSector = g_World.GetSector(j, i);
ASSERT(pSector);
CChar * pCharNext;
CChar * pChar = STATIC_CAST <CChar*>( pSector->m_Chars_Active.GetHead());
for ( ; pChar!=NULL; pChar = pCharNext )
{
pCharNext = pChar->GetNext();
if ( pChar->NPC_IsSpawnedBy( this ))
{
pChar->Delete();
iCurrent --;
}
}
}
}
if (iCurrent && ! g_Serv.IsLoading())
{
DEBUG_CHECK(iCurrent==0);
}
m_itSpawnChar.m_current = 0; // Should not be necessary
Spawn_OnTick( false );
}
示例2: DeleteChars
void CCharRefArray::DeleteChars()
{
ADDTOCALLSTACK("CCharRefArray::DeleteChars");
size_t iQty = m_uidCharArray.GetCount();
while ( iQty > 0 )
{
CChar *pChar = m_uidCharArray[--iQty].CharFind();
if ( pChar )
pChar->Delete();
}
m_uidCharArray.RemoveAll();
}
示例3: GenerateChar
void CItemSpawn::GenerateChar(CResourceDef *pDef)
{
ADDTOCALLSTACK("CitemSpawn:GenerateChar");
RESOURCE_ID_BASE rid = pDef->GetResourceID();
if ( rid.GetResType() == RES_SPAWN )
{
const CRandGroupDef *pSpawnGroup = static_cast<const CRandGroupDef *>(pDef);
ASSERT(pSpawnGroup);
size_t i = pSpawnGroup->GetRandMemberIndex();
if ( i != pSpawnGroup->BadMemberIndex() )
rid = pSpawnGroup->GetMemberID(i);
}
if ( (rid.GetResType() != RES_CHARDEF) && (rid.GetResType() != RES_UNKNOWN) )
return;
CPointMap pt = GetTopPoint();
CRegionBase *pRegion = pt.GetRegion(REGION_TYPE_AREA);
if ( !pRegion )
return;
CChar *pChar = CChar::CreateBasic(static_cast<CREID_TYPE>(rid.GetResIndex()));
if ( !pChar )
return;
pChar->NPC_LoadScript(true);
pChar->StatFlag_Set(STATF_Spawned);
// Try placing the char near the spawn
if ( !pChar->MoveNearObj(this, m_itSpawnChar.m_DistMax) || !pChar->CanSeeLOS(pt) )
{
// If this fails, try placing the char over the spawn
if ( !pChar->MoveTo(pt) )
{
DEBUG_ERR(("Spawn UID:0%lx is unable to place a character inside the world.\n", static_cast<DWORD>(GetUID())));
pChar->Delete();
return;
}
}
AddObj(pChar->GetUID());
pChar->NPC_CreateTrigger(); // removed from NPC_LoadScript() and triggered after char placement and attachment to the spawnitem
pChar->Update();
size_t iCount = GetTopSector()->GetCharComplexity();
if ( iCount > g_Cfg.m_iMaxCharComplexity )
g_Log.Event(LOGL_WARN, "%" FMTSIZE_T " chars at %s. Sector too complex!\n", iCount, GetTopSector()->GetBasePoint().WriteUsed());
}
示例4: GenerateChar
void CItemSpawn::GenerateChar(CResourceDef *pDef)
{
ADDTOCALLSTACK("CitemSpawn:GenerateChar");
if ( !IsTopLevel() )
return;
RESOURCE_ID_BASE rid = pDef->GetResourceID();
if ( rid.GetResType() == RES_SPAWN )
{
const CRandGroupDef *pSpawnGroup = static_cast<const CRandGroupDef *>(pDef);
ASSERT(pSpawnGroup);
size_t i = pSpawnGroup->GetRandMemberIndex();
if ( i != pSpawnGroup->BadMemberIndex() )
rid = pSpawnGroup->GetMemberID(i);
}
if ( (rid.GetResType() != RES_CHARDEF) && (rid.GetResType() != RES_UNKNOWN) )
return;
CChar *pChar = CChar::CreateBasic(static_cast<CREID_TYPE>(rid.GetResIndex()));
if ( !pChar )
return;
CPointMap pt = GetTopPoint();
pChar->NPC_LoadScript(true);
pChar->StatFlag_Set(STATF_Spawned);
pChar->MoveTo(pt);
// Check if the NPC can spawn in this region
CRegionBase *pRegion = GetTopPoint().GetRegion(REGION_TYPE_AREA);
if ( !pRegion || (pRegion->IsGuarded() && pChar->Noto_IsEvil()) )
{
pChar->Delete();
return;
}
AddObj(pChar->GetUID());
pChar->NPC_CreateTrigger(); // removed from NPC_LoadScript() and triggered after char placement and attachment to the spawnitem
pChar->Update();
size_t iCount = GetTopSector()->GetCharComplexity();
if ( iCount > g_Cfg.m_iMaxCharComplexity )
g_Log.Event(LOGL_WARN, "%d chars at %s. Sector too complex!\n", iCount, GetTopSector()->GetBasePoint().WriteUsed());
}
示例5: OnTick
//.........这里部分代码省略.........
// regen all creatures and do AI
ProfileTask charactersTask(PROFILE_CHARS);
//pChar = STATIC_CAST <CChar*>( m_Chars_Active.GetHead());
CChar * pCharNext = NULL;
CChar * pChar = dynamic_cast <CChar*>( m_Chars_Active.GetHead());
for ( ; pChar != NULL; pChar = pCharNext )
{
EXC_TRYSUB("TickChar");
pCharNext = pChar->GetNext();
if (( fEnvironChange ) && ( IsTrigUsed(TRIGGER_ENVIRONCHANGE) ))
pChar->OnTrigger(CTRIG_EnvironChange, pChar);
if ( pChar->IsClient())
{
CClient * pClient = pChar->GetClient();
ASSERT( pClient );
if ( sound )
pClient->addSound(sound, pChar);
if ( fLightChange && ! pChar->IsStatFlag( STATF_DEAD | STATF_NightSight ))
pClient->addLight();
if ( fWeatherChange )
pClient->addWeather(GetWeather());
if ( iRegionPeriodic && pChar->m_pArea )
{
if (( iRegionPeriodic == 2 )&&( IsTrigUsed(TRIGGER_REGPERIODIC) ))
{
pChar->m_pArea->OnRegionTrigger( pChar, RTRIG_REGPERIODIC );
iRegionPeriodic--;
}
if ( IsTrigUsed(TRIGGER_CLIPERIODIC) )
pChar->m_pArea->OnRegionTrigger( pChar, RTRIG_CLIPERIODIC );
}
}
// Can only die on your own tick.
if ( !pChar->OnTick() )
pChar->Delete();
EXC_CATCHSUB("Sector");
EXC_DEBUGSUB_START;
CPointMap pt = GetBasePoint();
g_Log.EventDebug("char 0%lx '%s'\n", static_cast<DWORD>(pChar->GetUID()), pChar->GetName());
g_Log.EventDebug("sector #%d [%d,%d,%d,%d]\n", GetIndex(), pt.m_x, pt.m_y, pt.m_z, pt.m_map);
EXC_DEBUGSUB_END;
}
// decay items on ground = time out spells / gates etc.. etc..
// No need to check these so often !
ProfileTask itemsTask(PROFILE_ITEMS);
CItem * pItemNext = NULL;
CItem * pItem = dynamic_cast <CItem*>( m_Items_Timer.GetHead());
for ( ; pItem != NULL; pItem = pItemNext )
{
EXC_TRYSUB("TickItem");
pItemNext = pItem->GetNext();
EXC_SETSUB("TimerExpired");
if ( pItem->IsTimerExpired() )
{
EXC_SETSUB("ItemTick");
if ( !pItem->OnTick() )
{
EXC_SETSUB("ItemDelete");
pItem->Delete();
}
else
{
EXC_SETSUB("TimerExpired2");
if ( pItem->IsTimerExpired() ) // forgot to clear the timer.? strange.
{
EXC_SETSUB("SetTimeout");
pItem->SetTimeout(-1);
}
}
}
EXC_SETSUB("UpdateFlags");
pItem->OnTickStatusUpdate();
#ifdef _WIN32
EXC_CATCHSUB("Sector");
EXC_DEBUGSUB_START;
CPointMap pt = GetBasePoint();
g_Log.EventError("item 0%lx '%s' [timer=%lld, type=%lld]\n", static_cast<DWORD>(pItem->GetUID()), pItem->GetName(), pItem->GetTimerAdjusted(), static_cast<int>(pItem->GetType()));
g_Log.EventError("sector #%d [%d,%d,%d,%d]\n", GetIndex(), pt.m_x, pt.m_y, pt.m_z, pt.m_map);
EXC_DEBUGSUB_END;
#else
}
#ifndef _DEBUG
catch ( const CGrayError& e )
示例6: GenerateChar
void CItemSpawn::GenerateChar(CResourceDef * pDef)
{
ADDTOCALLSTACK("CitemSpawn:GenerateChar");
if ( !IsTopLevel() || ( m_itSpawnChar.m_current >= GetAmount() ) || ( GetTopSector()->GetCharComplexity() > g_Cfg.m_iMaxCharComplexity ))
return;
int iDistMax = m_itSpawnChar.m_DistMax;
RESOURCE_ID_BASE rid = pDef->GetResourceID();
if ( rid.GetResType() == RES_SPAWN )
{
const CRandGroupDef * pSpawnGroup = STATIC_CAST <const CRandGroupDef *>(pDef);
ASSERT(pSpawnGroup);
size_t i = pSpawnGroup->GetRandMemberIndex();
if ( i != pSpawnGroup->BadMemberIndex() )
{
rid = pSpawnGroup->GetMemberID(i);
}
}
if (( rid.GetResType() != RES_CHARDEF ) && ( rid.GetResType() != RES_UNKNOWN ))
return;
CREID_TYPE id = static_cast<CREID_TYPE>(rid.GetResIndex());
bool isBadPlaceToSpawn = false;
CChar * pChar = CChar::CreateBasic(id);
if( pChar == NULL )
{
return;
}
pChar->NPC_LoadScript(true);
AddObj(pChar->GetUID());
pChar->m_uidSpawnItem = GetUID(); // SpawnItem for this char
pChar->StatFlag_Set( STATF_Spawned );
pChar->MoveTo(GetTopPoint());
pChar->NPC_CreateTrigger(); //Removed from NPC_LoadScript() and triggered after char placement
if( pChar->GetRegion() == NULL )
{
isBadPlaceToSpawn = true;
}
else if( pChar->GetRegion()->IsGuarded() && pChar->Noto_IsEvil() )
{
isBadPlaceToSpawn = true;
}
// Deny definitely known a bad place to spawn (like red NPCs in guarded areas)
// Usually caused by wide range near the edge of the towns
if( isBadPlaceToSpawn )
{
pChar->Delete();
//m_itSpawnChar.m_current--;
return;
}
ASSERT(pChar->m_pNPC);
if ( iDistMax )
{
pChar->m_ptHome = GetTopPoint();
pChar->m_pNPC->m_Home_Dist_Wander = static_cast<WORD>(iDistMax);
}
pChar->Update();
}
示例7: CreateNPC
CChar * CChar::Use_Figurine( CItem * pItem, bool bCheckFollowerSlots )
{
ADDTOCALLSTACK("CChar::Use_Figurine");
// NOTE: The figurine is NOT destroyed.
bool bCreatedNewNpc = false;
if ( !pItem )
return NULL;
if ( pItem->m_uidLink.IsValidUID() && pItem->m_uidLink.IsChar() && pItem->m_uidLink != GetUID() && !IsPriv(PRIV_GM) )
{
SysMessageDefault(DEFMSG_MSG_FIGURINE_NOTYOURS);
return NULL;
}
// Create a new NPC if there's no one linked to this figurine
CChar *pPet = pItem->m_itFigurine.m_UID.CharFind();
if ( !pPet )
{
CREID_TYPE id = pItem->m_itFigurine.m_ID;
if ( !id )
{
id = CItemBase::FindCharTrack(pItem->GetID());
if ( !id )
{
DEBUG_ERR(("FIGURINE id 0%x, no creature\n", pItem->GetDispID()));
return NULL;
}
}
bCreatedNewNpc = true;
pPet = CreateNPC(id);
ASSERT(pPet);
pPet->SetName(pItem->GetName());
if ( pItem->GetHue() )
{
pPet->m_prev_Hue = pItem->GetHue();
pPet->SetHue(pItem->GetHue());
}
}
if ( bCheckFollowerSlots && IsSetOF(OF_PetSlots) )
{
if ( !FollowersUpdate(pPet, static_cast<short>(maximum(1, pPet->GetDefNum("FOLLOWERSLOTS", true, true))), true) )
{
SysMessageDefault(DEFMSG_PETSLOTS_TRY_CONTROL);
if ( bCreatedNewNpc )
pPet->Delete();
return NULL;
}
}
if ( pPet->IsDisconnected() )
pPet->StatFlag_Clear(STATF_Ridden); // pull the creature out of IDLE space
pItem->m_itFigurine.m_UID.InitUID();
pPet->m_dirFace = m_dirFace;
pPet->NPC_PetSetOwner(this);
pPet->MoveToChar(pItem->GetTopLevelObj()->GetTopPoint());
pPet->Update();
pPet->Skill_Start(SKILL_NONE); // was NPCACT_RIDDEN
pPet->SoundChar(CRESND_RAND1);
return pPet;
}