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