本文整理汇总了C++中CChar类的典型用法代码示例。如果您正苦于以下问题:C++ CChar类的具体用法?C++ CChar怎么用?C++ CChar使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CChar类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ADDTOCALLSTACK
bool CChar::CheckCorpseCrime( const CItemCorpse *pCorpse, bool fLooting, bool fTest )
{
ADDTOCALLSTACK("CChar::CheckCorpseCrime");
// fLooting = looting as apposed to carving.
// RETURN: true = criminal act !
if ( !pCorpse || !g_Cfg.m_fLootingIsACrime )
return false;
CChar *pCharGhost = pCorpse->m_uidLink.CharFind();
if ( !pCharGhost || pCharGhost == this )
return false;
if ( pCharGhost->Noto_GetFlag(this) == NOTO_GOOD )
{
if ( !fTest )
{
// Anyone saw me doing this?
CheckCrimeSeen(SKILL_NONE, pCharGhost, pCorpse, fLooting ? g_Cfg.GetDefaultMsg(DEFMSG_LOOTING_CRIME) : NULL);
Noto_Criminal();
}
return true;
}
return false;
}
示例2: clearTradesFunctor
bool clearTradesFunctor( CBaseObject *a, UI32 &b, void *extraData )
{
bool retVal = true;
if( ValidateObject( a ) && a->CanBeObjType( OT_ITEM ) )
{
// Body of the functor goes here
CItem *i = static_cast< CItem * >(a);
if( ValidateObject( i ) )
{
if( i->GetType() == IT_TRADEWINDOW )
{
CChar *k = FindItemOwner( i );
if( ValidateObject( k ) )
{
CItem *p = k->GetPackItem();
if( ValidateObject( p ) )
{
CDataList< CItem * > *iCont = i->GetContainsList();
for( CItem *j = iCont->First(); !iCont->Finished(); j = iCont->Next() )
{
if( ValidateObject( j ) )
j->SetCont( p );
}
}
}
i->Delete();
++b; // let's track how many we cleared
}
}
}
return retVal;
}
示例3: GetZ
//o--------------------------------------------------------------------------o
//| Function - Cleanup( void )
//| Date - 26th September, 2001
//| Programmer - Abaddon
//| Modified -
//o--------------------------------------------------------------------------o
//| Purpose - Makes sure that any items and chars inside the multi
//| are removed
//o--------------------------------------------------------------------------o
void CMultiObj::Cleanup( void )
{
for( CItem *iRemove = itemInMulti.First(); !itemInMulti.Finished(); iRemove = itemInMulti.Next() )
{
if( ValidateObject( iRemove ) )
{
ItemTypes iType = iRemove->GetType();
if( iType == IT_DOOR || iType == IT_LOCKEDDOOR || iType == IT_HOUSESIGN )
iRemove->Delete();
else
{
if( iRemove->IsLockedDown() )
iRemove->SetMovable( 1 );
iRemove->SetMulti( INVALIDSERIAL );
iRemove->SetZ( GetZ() );
}
}
}
for( CChar *cRemove = charInMulti.First(); !charInMulti.Finished(); cRemove = charInMulti.Next() )
{
if( ValidateObject( cRemove ) )
{
cRemove->SetMulti( INVALIDSERIAL );
cRemove->SetZ( GetZ() );
}
}
CItem::Cleanup();
}
示例4: ADDTOCALLSTACK
bool CSector::v_AllClients( CScript & s, CTextConsole * pSrc )
{
ADDTOCALLSTACK("CSector::v_AllClients");
CScript script(s.GetArgStr());
CChar * pChar = NULL;
bool fRet = false;
// Loop through all the characters in m_Chars_Active.
// We should start at the end incase some are removed during the loop.
size_t i = m_Chars_Active.GetCount();
while ( i > 0 )
{
pChar = STATIC_CAST <CChar*>(m_Chars_Active.GetAt(--i));
// Check that a character was returned and keep looking if not.
if (pChar == NULL)
continue;
// Check that the character is a client (we only want to affect
// clients with this)
if ( ! pChar->IsClient())
continue;
// Execute the verb on the client
fRet |= pChar->r_Verb(script, pSrc);
}
return fRet;
}
示例5: restockNPC
//o---------------------------------------------------------------------------o
//| Function : void restockNPC(CChar *i, bool stockAll)
//| Date : Unknown
//| Programmer : UOX3 DevTeam
//o---------------------------------------------------------------------------o
//| Purpose : Restock NPC Vendors
//o---------------------------------------------------------------------------o
void restockNPC(CChar& i, bool stockAll)
{
if (!i.IsShop())
return; // if we aren't a shopkeeper, why bother?
CItem *ci = i.GetItemAtLayer(IL_SELLCONTAINER);
if (ValidateObject(ci))
{
CDataList< CItem * > *ciCont = ci->GetContainsList();
for (CItem *c = ciCont->First(); !ciCont->Finished(); c = ciCont->Next())
if (ValidateObject(c))
{
if (stockAll)
{
c->IncAmount(c->GetRestock());
c->SetRestock(0);
}
else if (c->GetRestock())
{
UI16 stockAmt = UOX_MIN(c->GetRestock(), static_cast<UI16>((c->GetRestock() / 2) + 1));
c->IncAmount(stockAmt);
c->SetRestock(c->GetRestock() - stockAmt);
}
if (cwmWorldState->ServerData()->TradeSystemStatus())
{
CTownRegion *tReg = calcRegionFromXY(i.GetX(), i.GetY(), i.WorldNumber());
Items->StoreItemRandomValue(c, tReg);
}
}
}
}
示例6: ADDTOCALLSTACK
int CItemMemory::FixWeirdness()
{
ADDTOCALLSTACK("CItemMemory::FixWeirdness");
int iResultCode = CItem::FixWeirdness();
if ( iResultCode )
return iResultCode;
if ( !IsItemEquipped() || (GetEquipLayer() != LAYER_SPECIAL) || !GetMemoryTypes() ) // has to be a memory of some sort.
return 0x4222; // get rid of it.
CChar *pChar = dynamic_cast<CChar *>(GetParent());
if ( !pChar )
return 0x4223; // get rid of it.
// Make sure guild/town memories are linked correctly
if ( IsMemoryTypes(MEMORY_GUILD|MEMORY_TOWN) )
{
const CItemStone *pStone = pChar->Guild_Find(static_cast<MEMORY_TYPE>(GetMemoryTypes()));
if ( !pStone || pStone->GetUID() != m_uidLink )
return 0x4224; // get rid of it.
if ( !pStone->GetMember(pChar) )
return 0x4225; // get rid of it.
}
// Make sure guard memories are linked correctly (this is not an ERROR, just make the item decay on next tick)
if ( IsMemoryTypes(MEMORY_GUARD) && !m_uidLink.ObjFind() )
{
SetAttr(ATTR_DECAY);
SetTimeout(0);
}
return 0;
}
示例7: ADDTOCALLSTACK
// ---------------------------------------------------------
bool CPartyDef::DeclineEvent( CChar * pCharDecline, CGrayUID uidInviter ) // static
{
ADDTOCALLSTACK("CPartyDef::DeclineEvent");
// This should happen after a timeout as well.
// " You notify %s that you do not wish to join the party"
CChar * pCharInviter = uidInviter.CharFind();
if ( !pCharInviter || !pCharDecline )
return( false );
if ( uidInviter == pCharDecline->GetUID() )
return( false );
CVarDefCont * sTempVal = pCharInviter->GetTagDefs()->GetKey("PARTY_LASTINVITE");
if ( !sTempVal )
return( false );
if ((DWORD)sTempVal->GetValNum() != (DWORD)pCharDecline->GetUID())
return( false );
// Remove the key
pCharInviter->DeleteKey("PARTY_LASTINVITE");
TCHAR * sTemp = Str_GetTemp();
sprintf(sTemp, g_Cfg.GetDefaultMsg(DEFMSG_PARTY_DECLINE_2), static_cast<LPCTSTR>(pCharInviter->GetName()));
pCharDecline->SysMessage( sTemp );
sTemp = Str_GetTemp();
sprintf(sTemp, g_Cfg.GetDefaultMsg(DEFMSG_PARTY_DECLINE_1), static_cast<LPCTSTR>(pCharDecline->GetName()));
pCharInviter->SysMessage( sTemp );
return( true );
}
示例8: ADDTOCALLSTACK
void CSector::SetLightNow( bool fFlash )
{
ADDTOCALLSTACK("CSector::SetLightNow");
// Set the light level for all the CClients here.
CChar * pChar = static_cast<CChar *>( m_Chars_Active.GetHead());
for ( ; pChar != NULL; pChar = pChar->GetNext())
{
if ( pChar->IsStatFlag( STATF_DEAD | STATF_NightSight ))
continue;
if ( pChar->m_pClient )
{
if ( fFlash ) // This does not seem to work predicably !
{
BYTE bPrvLight = m_Env.m_Light;
m_Env.m_Light = LIGHT_BRIGHT; // full bright.
pChar->m_pClient->addLight();
m_Env.m_Light = bPrvLight; // back to previous.
}
pChar->m_pClient->addLight();
}
// don't fire trigger when server is loading or light is flashing
if (( ! g_Serv.IsLoading() && fFlash == false ) && ( IsTrigUsed(TRIGGER_ENVIRONCHANGE) ))
{
pChar->OnTrigger( CTRIG_EnvironChange, pChar );
}
}
}
示例9: ADDTOCALLSTACK
bool CSector::v_AllClients( CScript & s, CTextConsole * pSrc )
{
ADDTOCALLSTACK("CSector::v_AllClients");
CScript script(s.GetArgStr());
script.m_iResourceFileIndex = s.m_iResourceFileIndex; // Index in g_Cfg.m_ResourceFiles of the CResourceScript (script file) where the CScript originated
script.m_iLineNum = s.m_iLineNum; // Line in the script file where Key/Arg were read
CChar * pChar = nullptr;
bool fRet = false;
// Loop through all the characters in m_Chars_Active.
// We should start at the end incase some are removed during the loop.
size_t i = m_Chars_Active.GetCount();
while ( i > 0 )
{
pChar = static_cast <CChar*>(m_Chars_Active.GetAt(--i));
// Check that a character was returned and keep looking if not.
if (pChar == nullptr)
continue;
// Check that the character is a client (we only want to affect clients with this)
if ( ! pChar->IsClient())
continue;
// Execute the verb on the client
fRet |= pChar->r_Verb(script, pSrc);
}
return fRet;
}
示例10: ADDTOCALLSTACK
// Create an NPC from script.
void CChar::NPC_LoadScript( bool fRestock )
{
ADDTOCALLSTACK("CChar::NPC_LoadScript");
if ( m_pNPC == NULL )
// Set a default brian type til we get the real one from scripts.
SetNPCBrain(GetNPCBrain(false)); // should have a default brain. watch out for override vendor.
CCharBase * pCharDef = Char_GetDef();
// 1) CHARDEF trigger
if ( m_pPlayer == NULL ) // CHARDEF triggers (based on body type)
{
CChar * pChar = this->GetChar();
if ( pChar != NULL )
{
CUID uidOldAct = pChar->m_Act_Targ;
pChar->m_Act_Targ = GetUID();
pChar->ReadScriptTrig(pCharDef, CTRIG_Create);
pChar->m_Act_Targ = uidOldAct;
}
}
//This remains untouched but moved after the chardef's section
if (( fRestock ) && ( IsTrigUsed(TRIGGER_NPCRESTOCK) ))
ReadScriptTrig(pCharDef, CTRIG_NPCRestock);
CreateNewCharCheck(); //This one is giving stats, etc to the char, so we can read/set them in the next triggers.
}
示例11: DEBUG_CHECK
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 );
}
示例12: GetParentStone
CStoneMember::~CStoneMember()
{
CItemStone * pStone = GetParentStone();
if ( ! pStone )
return;
RemoveSelf();
if ( m_iPriv == STONEPRIV_ENEMY )
{
// same as declaring peace.
CItemStone * pStoneEnemy = dynamic_cast <CItemStone *>( GetLinkUID().ItemFind());
if ( pStoneEnemy != NULL )
{
pStoneEnemy->TheyDeclarePeace( pStone, true );
}
}
else if ( pStone->GetMemoryType())
{
// If we remove a char with good loyalty we may have changed the vote count.
pStone->ElectMaster();
CChar * pChar = GetLinkUID().CharFind();
if ( pChar )
{
pChar->Memory_ClearTypes(static_cast<WORD>(pStone->GetMemoryType())); // Make them forget they were ever in this guild
}
}
}
示例13: ADDTOCALLSTACK
void CItemSpawn::AddObj(CGrayUID uid)
{
ADDTOCALLSTACK("CitemSpawn:AddObj");
// NOTE: This function is also called when loading spawn items
// on server startup. In this case, some objs UID still invalid
// (not loaded yet) so just proceed without any checks.
bool bIsSpawnChar = IsType(IT_SPAWN_CHAR);
if ( !g_Serv.IsLoading() )
{
if ( !uid.IsValidUID() )
return;
if ( bIsSpawnChar ) // IT_SPAWN_CHAR can only spawn NPCs
{
CChar *pChar = uid.CharFind();
if ( !pChar || !pChar->m_pNPC )
return;
}
else if ( !uid.ItemFind() ) // IT_SPAWN_ITEM can only spawn items
return;
CItemSpawn *pPrevSpawn = static_cast<CItemSpawn*>(uid.ObjFind()->m_uidSpawnItem.ItemFind());
if ( pPrevSpawn )
{
if ( pPrevSpawn == this ) // obj already linked to this spawn
return;
pPrevSpawn->DelObj(uid); // obj linked to other spawn, remove the link before proceed
}
}
BYTE iMax = maximum(GetAmount(), 1);
for (BYTE i = 0; i < iMax; i++ )
{
if ( !m_obj[i].IsValidUID() )
{
m_obj[i] = uid;
m_currentSpawned++;
// objects are linked to the spawn at each server start
if ( !g_Serv.IsLoading() )
{
uid.ObjFind()->m_uidSpawnItem = GetUID();
if ( bIsSpawnChar )
{
CChar *pChar = uid.CharFind();
ASSERT(pChar->m_pNPC);
pChar->StatFlag_Set(STATF_Spawned);
pChar->m_ptHome = GetTopPoint();
pChar->m_pNPC->m_Home_Dist_Wander = static_cast<WORD>(m_itSpawnChar.m_DistMax);
}
}
break;
}
}
if ( !g_Serv.IsLoading() )
ResendTooltip();
}
示例14: ADDTOCALLSTACK
bool CRegionBase::r_Verb( CScript & s, CTextConsole * pSrc ) // Execute command from script
{
ADDTOCALLSTACK("CRegionBase::r_Verb");
EXC_TRY("Verb");
LPCTSTR pszKey = s.GetKey();
if ( !strnicmp(pszKey, "CLEARTAGS", 9) )
{
pszKey = s.GetArgStr();
SKIP_SEPARATORS(pszKey);
m_TagDefs.ClearKeys(pszKey);
return true;
}
int index = FindTableSorted(pszKey, sm_szVerbKeys, COUNTOF(sm_szVerbKeys) - 1);
if ( index < 0 )
{
index = FindTableSorted(s.GetKey(), CSector::sm_szVerbKeys, SEV_QTY);
if ( index >= 0 )
return SendSectorsVerb(s.GetKey(), s.GetArgRaw(), pSrc);
}
switch ( static_cast<RV_TYPE>(index) )
{
case RV_ALLCLIENTS:
{
ClientIterator it;
for (CClient* pClient = it.next(); pClient != NULL; pClient = it.next())
{
CChar * pChar = pClient->GetChar();
if ( !pChar || (pChar->m_pArea != this) )
continue;
CScript script( s.GetArgStr() );
pChar->r_Verb(script, pSrc);
}
return true;
}
case RV_TAGLIST:
{
m_TagDefs.DumpKeys( pSrc, "TAG." );
return true;
}
default:
break;
}
return CScriptObj::r_Verb(s, pSrc);
EXC_CATCH;
EXC_DEBUG_START;
g_Log.EventDebug("command '%s' args '%s' [%p]\n", s.GetKey(), s.GetArgRaw(), static_cast<void *>(pSrc));
EXC_DEBUG_END;
return false;
}
示例15: Multi_GetMaxDist
int CItemMulti::Ship_ListObjs( CObjBase ** ppObjList )
{
// List all the objects in the structure.
// Move the ship and everything on the deck
// If too much stuff. then some will fall overboard. hehe.
if ( ! IsTopLevel())
return 0;
int iMaxDist = Multi_GetMaxDist();
// always list myself first. All other items must see my new region !
int iCount = 0;
ppObjList[iCount++] = this;
CWorldSearch AreaChar( GetTopPoint(), iMaxDist );
while ( iCount < MAX_MULTI_LIST_OBJS )
{
CChar * pChar = AreaChar.GetChar();
if ( pChar == NULL )
break;
if ( pChar->IsClient())
{
pChar->GetClient()->addPause(); // get rid of flicker. for anyone even seeing this.
}
if ( ! m_pRegion->IsInside2d( pChar->GetTopPoint()))
continue;
int zdiff = pChar->GetTopZ() - GetTopZ();
if ( abs( zdiff ) > 3 )
continue;
ppObjList[iCount++] = pChar;
}
CWorldSearch AreaItem( GetTopPoint(), iMaxDist );
while ( iCount < MAX_MULTI_LIST_OBJS )
{
CItem * pItem = AreaItem.GetItem();
if ( pItem == NULL )
break;
if ( pItem == this ) // already listed.
continue;
if ( ! Multi_IsPartOf( pItem ))
{
if ( ! m_pRegion->IsInside2d( pItem->GetTopPoint()))
continue;
if ( ! pItem->IsMovable())
continue;
int zdiff = pItem->GetTopZ() - GetTopZ();
if ( abs( zdiff ) > 3 )
continue;
}
ppObjList[iCount++] = pItem;
}
return( iCount );
}