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

📄 gamezonemanager.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "StdAfx.h"
#include ".\gamezonemanager.h"
#include ".\GameVillage.h"
#include ".\GameHuntingRoom.h"
#include ".\GameLobbyRoom.h"
#include ".\GameMissionRoom.h"
#include ".\GamePVPRoom.h"
#include "Map.h"

GameZoneManager g_GameZoneManager;
GameZoneManager::GameZoneManager(void)
{
	m_pZoneHash = new util::SolarHashTable<GameZone *>;
	m_pZoneHash->Initialize( 1000*5 );
}

GameZoneManager::~GameZoneManager(void)
{
	Release();
}

VOID GameZoneManager::Release()
{
	DestroyZoneAll();
	SAFE_DELETE(m_pZoneHash);
}
VOID GameZoneManager::DestroyZoneAll()
{
	if( m_pZoneHash )
	{	
		GameZone * pZone = NULL;
		m_pZoneHash->SetFirst();
		while( ( pZone = m_pZoneHash->GetNext() ) != NULL )
		{
			DestroyZone(pZone->GetKey());
		}
		m_pZoneHash->RemoveAll();
	}
}

VOID GameZoneManager::_AddZone( GameZone * pZone )
{
	ASSERT( m_pZoneHash->GetData(pZone->GetKey()) == NULL );
	m_pZoneHash->Add( pZone, pZone->GetKey() );
}
VOID GameZoneManager::_RemoveZone( KEYTYPE Key )
{
	ASSERT( m_pZoneHash->GetData(Key) != NULL );
	m_pZoneHash->Remove( Key );
}
GameZone * GameZoneManager::GetZone( KEYTYPE Key )
{
	ASSERT( m_pZoneHash->GetData(Key) != NULL );
	return m_pZoneHash->GetData( Key );
}
GameVillage *		GameZoneManager::CreateVillage( KEYTYPE Key, CODETYPE MapCode, const TCHAR * pszRoomTitle, const TCHAR * pszRoomPWD, const BASE_ROOMINFO * IN pRoomInfo )
{
	GameVillage * pNewRoom = GameVillage::Create();
	pNewRoom->Init( Key, MapCode, pszRoomTitle, pszRoomPWD, pRoomInfo );
	_AddZone( (GameZone *)pNewRoom );
	return pNewRoom;
}
GameLobbyRoom *		GameZoneManager::CreateLobbyRoom( KEYTYPE Key, CODETYPE MapCode, const TCHAR * pszRoomTitle, const TCHAR * pszRoomPWD, const BASE_ROOMINFO * IN pRoomInfo )
{
	GameLobbyRoom * pNewRoom = GameLobbyRoom::Create();
	pNewRoom->Init( Key, MapCode, pszRoomTitle, pszRoomPWD, pRoomInfo );
	_AddZone( (GameZone *)pNewRoom );
	return pNewRoom;
}
GameHuntingRoom *	GameZoneManager::CreateHuntingRoom( KEYTYPE Key, CODETYPE MapCode, const TCHAR * pszRoomTitle, const TCHAR * pszRoomPWD, const BASE_ROOMINFO * IN pRoomInfo, const ADDITIONAL_ROOMINFO * IN pAdditionalInfo )
{
	GameHuntingRoom * pNewRoom = GameHuntingRoom::Create();
	pNewRoom->Init( Key, MapCode, pszRoomTitle, pszRoomPWD, pRoomInfo, pAdditionalInfo );
	_AddZone( (GameZone *)pNewRoom );
	return pNewRoom;
}
GameMissionRoom *	GameZoneManager::CreateMissionRoom( KEYTYPE Key, CODETYPE MapCode, const TCHAR * pszRoomTitle, const TCHAR * pszRoomPWD, const BASE_ROOMINFO * IN pRoomInfo )
{
	GameMissionRoom * pNewRoom = GameMissionRoom::Create();
	pNewRoom->Init( Key, MapCode, pszRoomTitle, pszRoomPWD, pRoomInfo );
	_AddZone( (GameZone *)pNewRoom );
	return pNewRoom;
}
GamePVPRoom *		GameZoneManager::CreatePVPRoom( KEYTYPE Key, CODETYPE MapCode, const TCHAR * pszRoomTitle, const TCHAR * pszRoomPWD, const BASE_ROOMINFO * IN pRoomInfo, const ADDITIONAL_PVPINFO * IN pAdditionalPVPInfo )
{
	GamePVPRoom * pNewRoom = GamePVPRoom::Create();
	pNewRoom->Init( Key, MapCode, pszRoomTitle, pszRoomPWD, pRoomInfo, pAdditionalPVPInfo );
	_AddZone( (GameZone *)pNewRoom );
	return pNewRoom;
}
VOID GameZoneManager::DestroyZone( KEYTYPE Key )
{
	GameZone * pZone = GetZone( Key );
	if( NULL == pZone )
	{
		SUNLOG( eCRITICAL_LOG, "[GameZoneManager::DestroyZone] Zone is NULL");
		return;
	}
	pZone->Release();
	_RemoveZone( Key );

	switch(pZone->GetZoneType())
	{
	case eZONETYPE_VILLAGE:
		{
			//SUNLOG( eFULL_LOG,  "[%d]:付阑 昏力", Key );
			GameVillage::Destroy( (GameVillage *)pZone );			return ;
		}
	case eZONETYPE_LOBBY:
		{
			//SUNLOG( eFULL_LOG,  "[%d]:肺厚 昏力", Key );
			GameLobbyRoom::Destroy( (GameLobbyRoom *)pZone );		return ;
		}
	case eZONETYPE_HUNTING:
		{
			//SUNLOG( eFULL_LOG,  "[%d]:清泼 昏力", Key );
			GameHuntingRoom::Destroy( (GameHuntingRoom *)pZone );	return ;
		}
	case eZONETYPE_MISSION:
		{
			//SUNLOG( eFULL_LOG,  "[%d]:固记 昏力", Key );
			GameMissionRoom::Destroy( (GameMissionRoom *)pZone );	return ;
		}
	case eZONETYPE_PVP:
		{
			GamePVPRoom::Destroy( (GamePVPRoom*)pZone );			return ;
		}
	}

	SASSERT( NULL, "肋给等 粮 鸥涝" );
}

VOID GameZoneManager::Update( DWORD dwDeltaTick )
{
	GameZone * pZone = NULL;
	m_pZoneHash->SetFirst();
	while( ( pZone = m_pZoneHash->GetNext() ) != NULL )
	{
		pZone->Update( dwDeltaTick );
	}
}
VOID GameZoneManager::ReadyPlayer( KEYTYPE Key, Player * pPlayer, CODETYPE FieldCode, WzID AreaID )
{
	GameZone * pZone = GetZone( Key );
	if(!pZone) return;
	pZone->Ready( pPlayer, FieldCode, AreaID );
}

VOID GameZoneManager::JoinPlayer( KEYTYPE Key, Player * pPlayer, CODETYPE FieldCode, WzID AreaID )
{
	GameZone * pZone = GetZone( Key );
	if(!pZone) return;
	pZone->Join( pPlayer, FieldCode, AreaID );
}

VOID GameZoneManager::LeavePlayer( KEYTYPE Key, Player * pPlayer )
{
	GameZone * pZone = GetZone( Key );
	if(!pZone) return;
	pZone->Leave( pPlayer );
}

VOID GameZoneManager::WarpPlayer( KEYTYPE Key, Player * pPlayer, CODETYPE FieldCode, WzID AreaID )
{
	GameZone * pZone = GetZone( Key );
	if(!pZone) return;
	pZone->Warp( pPlayer, FieldCode, AreaID );
}

BOOL GameZoneManager::FieldVersionCheck( KEYTYPE Key, CODETYPE FieldCode, DWORD checksum )
{
	GameZone * pZone = GetZone( Key );
	if(!pZone) return  FALSE;
	return pZone->CheckMapVersion( FieldCode, checksum );
}

VOID GameZoneManager::Display()
{
	DWORD village = 0;
	DWORD lobby = 0;
	DWORD mission = 0;
	DWORD hunting = 0;
	DWORD pvp = 0;
	DWORD MonsterNum = 0;

	GameZone * pZone = NULL;
	m_pZoneHash->SetFirst();
	while( ( pZone = m_pZoneHash->GetNext() ) != NULL )
	{
		switch(pZone->GetZoneType())
		{
		case eZONETYPE_VILLAGE:
			++village;	break;
		case eZONETYPE_LOBBY:
			++lobby;	break;
		case eZONETYPE_MISSION:
			++mission;	break;
		case eZONETYPE_HUNTING:
			++hunting;	break;			
		case eZONETYPE_PVP:
			++pvp;	break;
		}

		MonsterNum += pZone->GetMap()->GetTotalMonsterNum();
	}

	DISPMSG( "Village(%u)  Lobby(%u)  Mission(%u)  Hunting(%u) PVP(%u) Monster(%u)\n", village, lobby, mission, hunting, pvp, MonsterNum );
}

VOID GameZoneManager::DisplayPoolInfo()
{ 
	GameVillage::DisplayerPoolInfo();
	DISPMSG(  " VillagePool\n" );

	GameLobbyRoom::DisplayerPoolInfo();
	DISPMSG(  " LobbyPool\n" );

	GameMissionRoom::DisplayerPoolInfo();
	DISPMSG(  " MissionPool\n" );

	GameHuntingRoom::DisplayerPoolInfo();
	DISPMSG(  " HuntingPool\n" );

	GamePVPRoom::DisplayerPoolInfo();
	DISPMSG(  " PVPPool\n" );

}










⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -