📄 battlesystem_client.cpp
字号:
// BattleSystem.cpp: implementation of the CBattleSystem class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#ifdef _MHCLIENT_
#include "BattleSystem_Client.h"
#include "BattleFactory.h"
#include "VimuStreet/BattleFactory_VimuStreet.h"
#include "MurimField/BattleFactory_MurimField.h"
#include "MunpaField/BattleFactory_MunpaField.h"
#include "Suryun/BattleFactory_Suryun.h"
#include "ObjectManager.h"
#include "VimuManager.h"
#include "ChatManager.h"
#include "MHMap.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBattleSystem::CBattleSystem()
{
m_pCurBattle = &m_DefaultBattle;
m_BattleFactory[eBATTLE_KIND_NONE] = NULL;
m_BattleFactory[eBATTLE_KIND_VIMUSTREET] = new CBattleFactory_VimuStreet;
m_BattleFactory[eBATTLE_KIND_MURIMFIELD] = new CBattleFactory_MurimField;
m_BattleFactory[eBATTLE_KIND_MUNPAFIELD] = NULL;
m_BattleFactory[eBATTLE_KIND_SURYUN] = new CBattleFactory_Suryun;
}
CBattleSystem::~CBattleSystem()
{
Release();
}
void CBattleSystem::Release()
{
if(m_pCurBattle != &m_DefaultBattle)
{
DeleteBattle(m_pCurBattle);
}
for(int n=0;n<eBATTLE_KIND_MAX;++n)
{
if(m_BattleFactory[n])
{
delete m_BattleFactory[n];
m_BattleFactory[n] = 0;
}
}
}
BOOL CBattleSystem::CreateBattle(BATTLE_INFO_BASE* pInfo)
{
ASSERT(pInfo->BattleKind < eBATTLE_KIND_MAX);
m_pCurBattle = m_BattleFactory[pInfo->BattleKind]->CreateBattle(pInfo, MAP->GetMapNum());
if(m_pCurBattle == NULL)
return FALSE;
return TRUE;
}
void CBattleSystem::DeleteBattle(CBattle* pBattle)
{
m_BattleFactory[pBattle->GetBattleKind()]->DeleteBattle(pBattle);
}
CBattle* CBattleSystem::GetBattle(CHero* pHero)
{
return m_pCurBattle;
}
CBattle* CBattleSystem::GetBattle(DWORD BattleID)
{
return m_pCurBattle;
}
void CBattleSystem::Render()
{
m_pCurBattle->Render();
if(m_pCurBattle->IsDestroyed() == TRUE)
{
ASSERT(m_pCurBattle != &m_DefaultBattle);
m_pCurBattle->OnDestroy();
DeleteBattle(m_pCurBattle);
m_pCurBattle = &m_DefaultBattle;
}
}
void CBattleSystem::ReleaseBattle()
{
if(m_pCurBattle != &m_DefaultBattle)
{
m_pCurBattle->OnDestroy();
DeleteBattle(m_pCurBattle);
m_pCurBattle = &m_DefaultBattle;
}
}
void CBattleSystem::NetworkMsgParse(BYTE Protocol,void* pMsg)
{
VIMUMGR->NetworkMsgParse( Protocol, pMsg );
switch(Protocol)
{
case MP_BATTLE_INFO:
{
MSG_BATTLE_INFO* pmsg = (MSG_BATTLE_INFO*)pMsg;
CreateBattle((BATTLE_INFO_BASE*)pmsg->info);
}
break;
case MP_BATTLE_START_NOTIFY:
{
m_pCurBattle->StartBattle();
}
break;
case MP_BATTLE_TEAMMEMBER_ADD_NOTIFY:
{
MSG_BATTLE_TEAMMEMBER_ADDDELETE* pmsg = (MSG_BATTLE_TEAMMEMBER_ADDDELETE*)pMsg;
m_pCurBattle->OnTeamMemberAdd(pmsg->Team,pmsg->Member.MemberID,pmsg->Member.MemberName);
// observer狼 版快 贸府 ( 救焊捞霸 : 嘎唱? )
/* if( pmsg->Team == eBattleTeam_Observer )
{
CObject* pObjcet = OBJECTMGR->GetObject( pmsg->Member.MemberID );
if( pObjcet->GetObjectKind() != eObjectKind_Player )
return;
CPlayer* pPlayer = (CPlayer*)pObjcet;
pPlayer->GetEngineObject()->HideWithScheduling();
pPlayer->GetCharacterTotalInfo()->bVisible = false;
}
*/
//-----------------------------------
}
break;
case MP_BATTLE_TEAMMEMBER_DELETE_NOTIFY:
{
MSG_BATTLE_TEAMMEMBER_ADDDELETE* pmsg = (MSG_BATTLE_TEAMMEMBER_ADDDELETE*)pMsg;
m_pCurBattle->OnTeamMemberDelete(pmsg->Team,pmsg->Member.MemberID,pmsg->Member.MemberName);
}
break;
case MP_BATTLE_TEAMMEMBER_DIE_NOTIFY:
{
MSG_DWORD3* pmsg = (MSG_DWORD3*)pMsg;
m_pCurBattle->OnTeamMemberDie(pmsg->dwData1,pmsg->dwData2,pmsg->dwData3);
}
break;
case MP_BATTLE_BATTLEOBJECT_DESTROY_NOTIFY:
{
}
break;
case MP_BATTLE_BATTLEOBJECT_CREATE_NOTIFY:
{
}
break;
case MP_BATTLE_VICTORY_NOTIFY:
{
MSG_DWORD2* pmsg = (MSG_DWORD2*)pMsg;
m_pCurBattle->Victory(pmsg->dwData1,pmsg->dwData2);
}
break;
case MP_BATTLE_DRAW_NOTIFY:
{
MSGBASE* pmsg = (MSGBASE*)pMsg;
m_pCurBattle->Draw();
}
break;
case MP_BATTLE_DESTROY_NOTIFY:
{
MSGBASE* pmsg = (MSGBASE*)pMsg;
m_pCurBattle->SetDestroyFlag();
}
break;
case MP_BATTLE_CHANGE_OBJECTBATTLE:
{
MSG_DWORD3* pmsg = (MSG_DWORD3*)pMsg;
CObject* pObject = OBJECTMGR->GetObject(pmsg->dwObjectID);
if(pObject == NULL)
return;
if( pmsg->dwData3 == eBATTLE_KIND_VIMUSTREET ) //battle Kind
{
if( pmsg->dwData2 == eBattleTeam1 ) //battle Team
{
OBJECTEFFECTDESC desc(FindEffectNum("eff_bmu_A_s.beff"));
pObject->AddObjectEffect( BATTLE_TEAMEFFECT_ID, &desc, 1 );
}
else if( pmsg->dwData2 == eBattleTeam2 )
{
OBJECTEFFECTDESC desc(FindEffectNum("eff_bmu_B_s.beff"));
pObject->AddObjectEffect( BATTLE_TEAMEFFECT_ID, &desc, 1 );
}
}
else //default battle肺
{
pObject->RemoveObjectEffect( BATTLE_TEAMEFFECT_ID );
if( pObject == HERO )
pObject->RemoveObjectEffect( BATTLE_STAGEEFFECT_ID ); //厚公厘瘤快扁
}
pObject->SetBattle(pmsg->dwData1,(BYTE)pmsg->dwData2);
}
break;
///////VIMU
case MP_BATTLE_VIMU_CREATESTAGE:
{
MSG_BATTLE_VIMU_CREATESTAGE* pmsg = (MSG_BATTLE_VIMU_CREATESTAGE*)pMsg;
CObject* pObject = OBJECTMGR->GetObject(pmsg->dwObjectID);
if(pObject == NULL)
return;
VECTOR3 vPos;
pObject->GetPosition( &vPos );
vPos.x = pmsg->vPosStage.x;
vPos.z = pmsg->vPosStage.z;
OBJECTEFFECTDESC desc( FindEffectNum("eff_bmu_side_s.beff"), EFFECT_FLAG_ABSOLUTEPOS, &vPos );
pObject->AddObjectEffect( BATTLE_STAGEEFFECT_ID, &desc, 1 );
}
break;
case MP_BATTLE_VIMU_START: //某腐磐狼 厚公矫累
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
CObject* pObject = OBJECTMGR->GetObject(pmsg->dwData);
if( pObject == NULL )
break;
}
break;
case MP_BATTLE_VIMU_END: //某腐磐狼 厚公场
{
MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
CObject* pObject = OBJECTMGR->GetObject(pmsg->dwData);
if( pObject == NULL )
break;
}
break;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -