📄 summonednpcs.cpp
字号:
#include "stdafx.h"
#include "SummonedNPCs.h"
#include "Summoned.h"
SummonedNPCs::SummonedNPCs() : m_pSummoner(NULL), m_dwSummonerKey(0)
{
m_mapNumberOfNPCs.clear();
m_pSummonedList = new util::SolarHashTable<NPC *>;
m_pSummonedList->Initialize( MAX_SUMMONED_NUM );
}
SummonedNPCs::~SummonedNPCs()
{
Release();
SAFE_DELETE( m_pSummonedList );
}
// 贸澜俊 茄锅父 悸泼茄促.
VOID SummonedNPCs::Init( Character *pSummoner, eSUMMON_COMMAND eCommand )
{
m_pSummoner = pSummoner;
m_dwSummonerKey = pSummoner->GetObjectKey();
m_eCommandState = eCommand;
}
VOID SummonedNPCs::Release()
{
// 家券眉甸阑 傈何 家戈矫挪促.
Destroy( 0 );
// 家券磊狼 家券虐甫 檬扁拳茄促.
if( m_pSummoner ) m_pSummoner->SetSummonerKey( 0 );
m_pSummoner = NULL;
m_dwSummonerKey = 0;
m_mapNumberOfNPCs.clear();
m_pSummonedList->clear();
}
DWORD SummonedNPCs::GetNumberOfAliveNPCs( DWORD dwNPCCode )
{
NUMBER_OF_NPCS_MAP_ITER it = m_mapNumberOfNPCs.find( dwNPCCode );
SASSERT( it != m_mapNumberOfNPCs.end(), "[SummonedNPCs::GetNumberOfAliveNPCs] it == m_mapNumberOfNPCs.end()" );
return it->second;
}
VOID SummonedNPCs::IncreaseSummoned( DWORD dwNPCCode, NPC *pNPC )
{
NUMBER_OF_NPCS_MAP_ITER mapit = m_mapNumberOfNPCs.find( dwNPCCode );
if ( mapit != m_mapNumberOfNPCs.end() )
{
// 家券等 NPC狼 箭磊 刘啊
++mapit->second;
}
else
{
// 脚痹 阁胶磐牢 版快 眠啊
m_mapNumberOfNPCs.insert( NUMBER_OF_NPCS_MAP_PAIR(dwNPCCode, 1) );
}
// 家券等 Summoned 眠啊
m_pSummonedList->Add( pNPC, pNPC->GetObjectKey() );
}
VOID SummonedNPCs::DecreaseSummoned( DWORD dwNPCCode, DWORD dwObjectKey )
{
NUMBER_OF_NPCS_MAP_ITER mapit = m_mapNumberOfNPCs.find( dwNPCCode );
if ( mapit == m_mapNumberOfNPCs.end() ) return;
// 家券等 NPC 箭磊 皑家
--mapit->second;
// 府胶飘俊辑 秦寸 ObjectKey甫 哗霖促.
m_pSummonedList->Remove( dwObjectKey );
}
VOID SummonedNPCs::Destroy( DWORD dwObjectKey )
{
if( dwObjectKey )
{
Summoned *pSummoned = (Summoned*)GetSummoned( dwObjectKey );
if( !pSummoned ) return;
Field *pField = pSummoned->GetField();
if( !pField ) return;
pField->AddDeadNPCList( pSummoned );
}
else
{
NPC *pNPC = NULL;
for( SUMMONED_ITERATOR it = m_pSummonedList->begin(); it != m_pSummonedList->end(); ++it )
{
pNPC = *it;
if( ( pNPC->GetObjectType() & SUMMON_OBJECT ) != SUMMON_OBJECT ) continue;
Summoned *pSummoned = (Summoned*)pNPC;
Field *pField = pSummoned->GetField();
if( !pField ) continue;
pField->AddDeadNPCList( pSummoned );
}
}
}
RC::eSUMMON_RESULT SummonedNPCs::SetCommandState( eSUMMON_COMMAND eCommand, DWORD dwObjectKey, DWORD dwTargetKey )
{
// 夸芭绰 甸绢坷搁 救登瘤父 抗寇贸府茄 巴烙!!
if( eCommand == eSUMMON_COMMAND_DESTROY )
{
Destroy( dwObjectKey );
SUNLOG( eMIDDLE_LOG, "[SummonedNPCs::SetCommandState] eSUMMON_COMMAND_DESTROY" );
return RC::RC_SUMMON_SUCCESS;
}
if( m_eCommandState == eCommand )
{
return RC::RC_SUMMON_SAME_COMMAND;
}
// 疙飞 汲沥
if( eCommand == eSUMMON_COMMAND_FOLLOW ||
eCommand == eSUMMON_COMMAND_DELEGATE_ATTACK ||
eCommand == eSUMMON_COMMAND_DELEGATE_DEFENSE )
{
m_eCommandState = eCommand;
}
NPC *pNPC = NULL;
for( SUMMONED_ITERATOR it = m_pSummonedList->begin(); it != m_pSummonedList->end(); ++it )
{
pNPC = *it;
if( dwObjectKey && dwObjectKey != pNPC->GetObjectKey() ) continue;
if( ( pNPC->GetObjectType() & SUMMON_OBJECT ) != SUMMON_OBJECT ) continue;
Summoned *pSummoned = (Summoned*)pNPC;
pSummoned->SetCommandState( eCommand, dwTargetKey );
}
return RC::RC_SUMMON_SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -