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

📄 areadown.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "stdafx.h"
#include "SkillInfoParser.h"
#include "NPC.h"
#include "Field.h"
#include <PacketStruct_CG.h>
#include "Character.h"
#include "Player.h"
#include "Skill.h"
#include "AITypes.h"
#include <Battle.h>
#include <3DTerrain\3DTerrain.h>



VOID Skill::BroadcastAreaDown()
{
	// 鸥百捞 鞘靛俊 乐绰瘤 眉农
	NPC *pNPC = m_pOwnerChar->GetField()->FindNPC( m_SkillInfo.dwPrimaryTargetKey );
	if( !pNPC )		return;

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

	// 剐府绰 芭府(绢琶矫累痢-绢琶场痢)啊 呈公 辨搁 立加阑 谗绰促.
	if( VectorLength( &( m_SkillInfo.wvCurPos - m_SkillInfo.wvDestPos ) ) > 5.0f )
	{
		DISPMSG( "Warning: 敲饭捞绢 傍拜 谅钎 秦欧 啊瓷己 乐澜\n" );
		((Player*)m_pOwnerChar)->ForceDisconnect();
		return;
	}

	// 捞力 菩哦 单捞磐甫 瓜扁肺 窍绊 敲饭捞绢 困摹甫 绢琶 矫累痢栏肺 颗败辑 剐府扁 贸府 矫累
	m_pOwnerChar->SetPos( &m_SkillInfo.wvCurPos );
	pField->FindPathThrust( m_pOwnerChar, &( m_SkillInfo.wvDestPos - m_SkillInfo.wvCurPos ) );
	m_pOwnerChar->SetMove( TRUE );
	m_pOwnerChar->SetMoveSpeed( SWIPE_SPEED );

	// 胶鸥老 傍拜 矫累俊 措茄 宏肺靛 某胶泼篮 秦霖促.
	MSG_CG_STYLE_P2M_ATTACK_BRD brdMsg;
	brdMsg.m_byCategory				= CG_STYLE;
	brdMsg.m_byProtocol				= CG_STYLE_P2M_ATTACK_BRD;
	brdMsg.dwAttackerKey			= m_pOwnerChar->GetObjectKey();
	brdMsg.byAttackType				= m_SkillInfo.byAttackType;
	brdMsg.dwClientSerial			= m_SkillInfo.dwClientSerial;
	brdMsg.dwPrimaryTargetKey		= m_SkillInfo.dwTargetKey[0];
	brdMsg.wvCurPos					= m_SkillInfo.wvCurPos;
	brdMsg.wvDestPos				= m_SkillInfo.wvDestPos;

	pField->SendPacketAround( m_pOwnerChar, (MSG_BASE_FORWARD*)&brdMsg, brdMsg.GetSize() );
}

VOID Skill::ExecuteAreaDown()
{
	Field *pField = m_pOwnerChar->GetField();
	if( !pField ) return;

	// 宏肺靛 某胶泼 菩哦 霖厚
	MSG_CG_STYLE_P2M_ATTACK_RESULT_BRD brdMsg;
	brdMsg.m_byCategory					= CG_STYLE;
	brdMsg.m_byProtocol					= CG_STYLE_P2M_ATTACK_RESULT_BRD;
	brdMsg.dwClientSerial				= m_SkillInfo.dwClientSerial;
	brdMsg.dwAttackerKey				= m_pOwnerChar->GetObjectKey();

	WzVector vPlayerPos, vNPCPos;
	m_pOwnerChar->GetPos( &vPlayerPos );

	// 罐篮 府胶飘 吝俊辑 傍拜俊 蜡瓤茄 阁胶磐甸父 单固瘤 贸府 饶 宏肺靛 某胶飘 菩哦俊 眠啊
	BOOL bMainTargetFound = FALSE;
	WzVector vDirToMainTarget;
	BYTE byHitObjectCount = 0;
	NPC *pNPC;
	WzVector wvNormalVectorP2M, wvPosAfterThrust;
	for( DWORD i = 0; i < m_SkillInfo.byNumberOfTargets; ++i )
	{
		// 傍拜 措惑 茫扁
		pNPC = pField->FindNPC( m_SkillInfo.dwTargetKey[i] );
		if( !pNPC ) continue;

		pNPC->GetPos( &vNPCPos );

		WORD wDamage = pNPC->CalculateDamage( 100 );

		pNPC->DecreaseHP( wDamage );

		// 芭府 魄喊(敲饭捞绢客 鸥百 NPC埃狼 芭府)
		if( VectorLength( &(vPlayerPos - vNPCPos) ) < m_pOwnerChar->GetAttackRange() + RANGE_DECISION_TOLERANCE )
		{
			// 皋牢 鸥百捞 酒流 绝促搁 捞 NPC肺 汲沥
			if( !bMainTargetFound )
			{
				vDirToMainTarget = vNPCPos - vPlayerPos;
				bMainTargetFound = TRUE;
			}

			// 何盲裁 眉农
			if( IsPositionInSector( &vNPCPos, &vPlayerPos, &vDirToMainTarget, WZ_PI ) )
			{
				// NPC 剐府扁 贸府.. 眠饶 傍拜 鸥涝俊 蝶扼 剐府绰 芭府 促福霸 贸府秦具 窃
				VectorNormalize( &wvNormalVectorP2M, &(vNPCPos - vPlayerPos) );
				wvNormalVectorP2M = wvNormalVectorP2M * 3.0f;
				pField->FindPathThrust( pNPC, &wvNormalVectorP2M );
				wvPosAfterThrust = pNPC->GetPathExplorer()->GetTargetPos();
				pNPC->SetMove( TRUE );
				pNPC->SetMoveSpeed( 15.0f * SPEED_MULTIPLIER );

				// NPC俊霸 剐府扁 皋技瘤甫 焊晨
				AI_MSG_THRUST aiMsg;
				pNPC->SendAIMessage( &aiMsg, sizeof(aiMsg) );

				// 菩哦俊 眠啊
				brdMsg.AttackInfo[byHitObjectCount].dwTargetKey		= pNPC->GetObjectKey();
				brdMsg.AttackInfo[byHitObjectCount].dwDamage		= wDamage;
				brdMsg.AttackInfo[byHitObjectCount].dwTargetHP		= pNPC->GetHP();
				brdMsg.AttackInfo[byHitObjectCount].wvCurPos		= vNPCPos;
				brdMsg.AttackInfo[byHitObjectCount].wvDestPos		= wvPosAfterThrust;
				byHitObjectCount++;
			}
		}
	}

	brdMsg.byNumberOfTargets = byHitObjectCount;

	if( byHitObjectCount > 0 )
	{
		pField->SendPacketAround( m_pOwnerChar, (MSG_BASE_FORWARD*)&brdMsg, (WORD)brdMsg.GetSize() );
	}
}

⌨️ 快捷键说明

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