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

📄 execute_summon.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "stdafx.h"
#include "Ability.h"
#include "Field.h"
#include "NPCInfoParser.h"
#include "ObjectFactory.h"
#include "SummonedNPCs.h"
#include "GroupParser.h"
#include "SummonManager.h"
#include "Summoned.h"
#include "Monster.h"
#include "AIParamParser.h"


DEFINE_EXECUTE_FUNC( Summon )
{
	MSG_CG_SUMMON_SKILL_RESULT_BRD BrdMsg;
	BrdMsg.m_dwSummonerObjKey = m_pAttacker->GetObjectKey();

	Field *pField = m_pAttacker->GetField();
	if( !pField ) return FALSE;

	// 敲饭捞绢啊 荤侩茄 家券胶懦牢瘤 阁胶磐啊 荤侩茄 胶懦牢瘤俊 蝶扼辑 家券阁胶磐 辆幅啊 崔扼柳促.
	BOOL bPlayerSkill = ( m_pAttacker->GetObjectType() & PLAYER_OBJECT ) == PLAYER_OBJECT;

	// 颇扼固磐 悸泼
	BYTE bySummonType = m_pBaseAbilityInfo->m_iOption1;		// 阁胶磐(0), 弊缝(0)
	DWORD dwSummonID = m_pBaseAbilityInfo->m_iOption2;		// 阁胶磐ID, 弊缝ID
	BrdMsg.m_bySummonedNum = m_pBaseAbilityInfo->m_iParam[0];

	if( !BrdMsg.m_bySummonedNum || BrdMsg.m_bySummonedNum > MAX_SUMMONED_NUM )	return FALSE;

	// 家券 NPC 府胶飘甫 茫芭唱 绝栏搁 积己茄促.
	SummonedNPCs *pOwnerSummonNPCs = SummonManager::Instance()->AllocSummonNPCs( m_pAttacker, bPlayerSkill );
	if( !pOwnerSummonNPCs )		return FALSE;

	// 家券措惑捞 弊缝牢 版快
	if( bySummonType == 1 )
	{
		BASE_GROUPINFO *pGroupInfo = GroupParser::Instance()->GetGroupInfo( dwSummonID );
		// 老窜 焊幅...
	}

	// NPC甫 积己茄促.
	if( bPlayerSkill )
	{
		CreateSummoned( m_pAttacker, pOwnerSummonNPCs, dwSummonID, BrdMsg.m_bySummonedNum, BrdMsg.m_dwSummonedObjKey );

		// 家券沥焊 菩哦阑 焊辰促.
		BrdMsg.m_byCurCommand = eSUMMON_COMMAND_DELEGATE_ATTACK;
		m_pAttacker->SendPacketAround( &BrdMsg, BrdMsg.GetSize() );
	}
	else
	{
		CreateSummonNPC( m_pAttacker, pOwnerSummonNPCs, dwSummonID, BrdMsg.m_bySummonedNum );
	}

	m_pAttacker->SetSummonerKey( pOwnerSummonNPCs->GetSummonerKey() );

	return FALSE;
}

VOID Ability::CreateSummoned( Character *pSummoner, SummonedNPCs *pOwnerSummonNPCs, DWORD dwCode, 
							  DWORD dwNumberOfNPCs, DWORD *pSummonedObjKey )
{
	Field *pField = pSummoner->GetField();
	if( !pField ) return;

	BASE_NPCINFO* pBaseNPCInfo = NPCInfoParser::Instance()->GetMonsterInfo( dwCode );
	if( !pBaseNPCInfo )
	{
		SUNLOG( eFULL_LOG, "[Ability::CreateSummoned] 积己窍绊磊 窍绰 阁胶磐 内靛啊 胶农赋飘俊 绝嚼聪促.(%d)", dwCode );
		return;
	}

	int iCurTile = pSummoner->GetPathExplorer()->GetTile();
	DWORD dwExpireTime = m_pBaseAbilityInfo->m_iParam[2];
	AIParamInfo& stAIParamInfo = AIParamParser::Instance()->GetInfo();
	WzVector wvSummonerPos;
	pSummoner->GetPos( &wvSummonerPos );

	// 阁胶磐 积己
	for( DWORD i = 0; i < dwNumberOfNPCs; ++i )
	{
		Summoned *pSummoned = (Summoned*)ObjectFactory::Instance()->AllocObject( SUMMON_OBJECT );

		pSummoned->SetBaseInfo( pBaseNPCInfo );

		// 家券眉狼 困摹搬沥(家券磊客 呈公 钢府 冻绢瘤瘤 臼档废 茄促.)
		WzVector wvSummonPos;	float fMoveLength2 = 0;
		for( int iPosTrial = 0; iPosTrial < 51; ++iPosTrial )
		{
			wvSummonPos = pField->GetFieldInfo()->GetWorldBase()->GetRandomPosInTile( iCurTile );
			fMoveLength2 = VectorLength2( &(wvSummonerPos - wvSummonPos) );
			if( fMoveLength2 >= 4.0 && fMoveLength2 <= 16.0 )
				break;

			// 50锅阑 档绰 悼救俊档 家券眉 困摹甫 搬沥窍瘤 给沁绰啊?
			if( iPosTrial >= 50 )
			{
				SUNLOG( eFULL_LOG, "[Ability::CreateSummoned] Can't Find wvSummonPos whithin 50 Times" );
				break;
			}
		}

		// EnterField 救俊辑 NPC 沥焊啊 檬扁拳 等促.
		pField->EnterField( pSummoned, &wvSummonPos );

		// 家券磊 汲沥
		pSummoned->SetSummoner( pSummoner );

		// 父丰矫埃 汲沥
		pSummoned->SetExpireTime( dwExpireTime );

		// 家券磊狼 家券牢器俊 阁胶磐 荐 刘啊
		pOwnerSummonNPCs->IncreaseSummoned( dwCode, pSummoned );

		// 菩哦俊 角绢焊尘 坷宏璃飘 虐甫 悸泼茄促.
		pSummonedObjKey[i] = pSummoned->GetObjectKey();
	}
}

VOID Ability::CreateSummonNPC( Character *pSummoner, SummonedNPCs *pOwnerSummonNPCs, DWORD dwCode, DWORD dwNumberOfNPCs )
{
	Field *pField = pSummoner->GetField();
	if( !pField ) return;

	BASE_NPCINFO* pBaseNPCInfo = NPCInfoParser::Instance()->GetMonsterInfo( dwCode );
	if( !pBaseNPCInfo )
	{
		SUNLOG( eFULL_LOG,  "[Ability::CreateSummonNPC] 积己窍绊磊 窍绰 阁胶磐 内靛啊 胶农赋飘俊 绝嚼聪促.(%d)", dwCode );
		return;
	}

	int iCurTile = pSummoner->GetPathExplorer()->GetTile();

	// 阁胶磐 积己
	for( DWORD i = 0; i < dwNumberOfNPCs; ++i )
	{
		Monster *pMonster = (Monster*)ObjectFactory::Instance()->AllocObject( MONSTER_OBJECT );

		pMonster->SetBaseInfo( pBaseNPCInfo );

		// EnterField 救俊辑 NPC 沥焊啊 檬扁拳 等促.
		WzVector wvSummonPos = pField->GetFieldInfo()->GetWorldBase()->GetRandomPosInTile( iCurTile );
		pField->EnterField( pMonster, &wvSummonPos );

		// NPC俊 家券牢器 器牢磐 傍蜡
		pMonster->SetSummonerKey( pOwnerSummonNPCs->GetSummonerKey() );

		// 家券磊狼 家券牢器俊 阁胶磐 荐 刘啊
		pOwnerSummonNPCs->IncreaseSummoned( dwCode, pMonster );

		// 家券磊狼 鸥百阑 眠利窍档废 NPC狼 惑怕甫 官槽促.
		Character *pTargetChar = NULL;
		if( pTargetChar = pSummoner->GetTargetChar() )
		{
			pMonster->SetTargetChar( pTargetChar );
			pMonster->ChangeState( STATE_ID_HELP );
		}
	}
}










⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -