📄 bossmonster.cpp
字号:
// BossMonster.cpp: implementation of the CBossMonster class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BossMonster.h"
#include "CharMove.h"
#include "SkillManager_server.h"
#include "PackedData.h"
#include "GridSystem.h"
#include "..\[CC]Header\GameResourceManager.h"
#include "BossMonsterManager.h"
#include "UserTable.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBossMonster::CBossMonster()
{
m_pBossParam = NULL;
}
CBossMonster::~CBossMonster()
{
if(m_pBossParam)
{
delete m_pBossParam;
m_pBossParam = NULL;
}
}
void CBossMonster::InitBossMonster(MONSTER_TOTALINFO* pTotalInfo)
{
CMonster::InitMonster(pTotalInfo);
switch(GetMonsterKind())
{
case eBOSSKIND_GENERAL:
{
m_pBossParam = new CGeneralBoss;
}
break;
case eBOSSKIND_YUKJI:
{
}
break;
}
m_pBossParam->SetParent(this);
}
void CBossMonster::OnEndObjectState(BYTE State)
{
switch(State)
{
case eObjectState_Die:
m_pBossParam->DoDie();
g_pServerSystem->RemoveBossMonster(GetID());
break;
}
}
void CBossMonster::DoDamage(CObject* pAttacker, RESULTINFO* pDamageInfo,DWORD beforeLife)
{
CMonster::DoDamage(pAttacker, pDamageInfo,beforeLife);
}
void CBossMonster::SetLife(DWORD Life,BOOL bSendMsg)
{
CMonster::SetLife(Life, bSendMsg);
MSG_DWORD2 msg;
msg.Category = MP_BOSSMONSTER;
msg.Protocol = MP_BOSS_LIFE_NOTIFY;
msg.dwData1 = GetLife();
msg.dwData2 = GetMonsterKind();
PACKEDDATA_OBJ->QuickSend(this,&msg,sizeof(msg));
BOSSMGR->CatchEvent(this, eBOSSEVENT_LIFE);
}
void CBossMonster::SetAddMsg(char* pAddMsg,WORD* pMsgLen,DWORD dwReceiverID,BOOL bLogin)
{
SEND_MONSTER_TOTALINFO* pMsg = (SEND_MONSTER_TOTALINFO*)pAddMsg;
pMsg->AddableInfo.Init();
pMsg->Category = MP_USERCONN;
pMsg->Protocol = MP_USERCONN_BOSSMONSTER_ADD;
pMsg->dwObjectID = dwReceiverID;
GetSendMoveInfo(&pMsg->MoveInfo,&pMsg->AddableInfo);
GetBaseObjectInfo(&pMsg->BaseObjectInfo);
GetMonsterTotalInfo(&pMsg->TotalInfo);
pMsg->bLogin = bLogin;
*pMsgLen = pMsg->GetMsgLength();
}
CObject * CBossMonster::DoSearch()
{
return g_pServerSystem->GetGridSystem()->FindPlayerInRange(CCharMove::GetPosition(this), (float)m_pSInfo->SearchRange, this, (BYTE)m_pSInfo->TargetSelect );
}
void CBossMonster::DoRecall()
{
MSG_DWORD msg;
msg.Category = MP_BOSSMONSTER;
msg.Protocol = MP_BOSS_RECALL_NOTIFY;
msg.dwData = GetMonsterKind();
PACKEDDATA_OBJ->QuickSend(this,&msg,sizeof(msg));
}
void CBossMonster::DoRest(BOOL bStart)
{
if(bStart)
{
MSG_DWORD msg;
msg.Category = MP_BOSSMONSTER;
msg.Protocol = MP_BOSS_REST_START_NOTIFY;
msg.dwData = GetMonsterKind();
PACKEDDATA_OBJ->QuickSend(this,&msg,sizeof(msg));
}
else
{
MSG_DWORD msg;
msg.Category = MP_BOSSMONSTER;
msg.Protocol = MP_BOSS_REST_END_NOTIFY;
msg.dwData = GetMonsterKind();
PACKEDDATA_OBJ->QuickSend(this,&msg,sizeof(msg));
}
}
BOOL CBossMonster::DoAttack( WORD attackNum )
{
OnStop();
// yh
if( GetState() == eObjectState_TiedUp_CanMove ||
GetState() == eObjectState_TiedUp )
return TRUE;
if(m_pTObject)
{
// 措惑捞 乐阑 锭
//SKILLMGR->MonsterAttack(GetCurAttackIndex(), this, m_pTObject);
SKILLMGR->MonsterAttack(attackNum, this, m_pTObject);
}
else
{
// 措惑捞 绝阑 锭
VECTOR3 decisionPoint;
GetPosition(&decisionPoint);
BeelinePoint(&decisionPoint, &m_MoveInfo.Move_Direction, 2000, &decisionPoint);
SKILLMGR->MonsterAttack(attackNum, this,&decisionPoint);
}
return TRUE;
}
void CBossMonster::StateProcess()
{
switch(GetState())
{
case eObjectState_Die:
{
}
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -