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

📄 battlesystem_client.cpp

📁 墨香最新私服
💻 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 + -