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