⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 summonednpcs.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 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 + -