📄 areadown.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 + -