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

📄 channel.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include "StdAfx.h"
#include ".\channel.h"
#include "ZoneFactory.h"
#include "Zone.h"
#include "User.h"
#include "UserManager.h"

// 轰器飘 贸府侩
#include "ViewPortManager.h"

// 稠府利 悼立 沥焊 贸府侩
#include "ChannelManager.h"

Channel::Channel(void)
{
	m_pCharSceneZone = new Zone;

	m_dwVillageUserNum = 0;
	m_dwLobbyUserNum = 0;
	m_dwMissionUserNum = 0;
	m_dwHuntingUserNum = 0;
	m_dwQuestUserNum = 0;
	m_dwPVPUserNum = 0;
	m_dwEventUserNum = 0;
	m_dwGuildUserNum = 0;
	m_dwSiegeUserNum = 0;

	m_ChatRoomKeyGenerator.Create( 1, 10000 );	// 老窜 10000俺 力茄...盲泼规篮 穿备唱 父甸 荐 乐扁 锭巩俊 捞 捞惑老 荐档 乐促
}

Channel::~Channel(void)
{
	delete m_pCharSceneZone;
}

VOID Channel::Init()
{
	m_pCharSceneZone->Init();
	m_pCharSceneZone->SetKey( 0 );
	m_pViewPortManager = new ViewPortManager();
	m_pViewPortManager->TestLoadMap();
}

VOID Channel::Release()
{
	USER_MAP_ITER	it;
	User			*pUser;

	// 盲澄 蜡廉 府胶飘俊 甸绢乐绰 蜡廉甸 刚历 力芭 贸府
	// 捞磐饭捞飘 档吝 RemoveUser救俊辑 捞磐饭捞磐啊 昏力瞪 荐 乐栏骨肺 汗荤等 府胶飘 荤侩
	USER_MAP m_mapUsersClone = m_mapUsers;
	for( it = m_mapUsersClone.begin(); it != m_mapUsersClone.end(); ++it )
	{
		pUser = it->second;
		RemoveUser( pUser );
	}
	m_mapUsersClone.clear();
	//m_mapUsers.clear();	<== RemoveUser救俊辑 m_mapUsers狼 葛电 element绰 昏力登绢具 壳澜

	// 某腐磐 急琶粮 付公府
	m_pCharSceneZone->Release();

	ZONE_MAP_ITER	zone_it;
	Zone			*pZone;

	// 付阑粮甸 付公府
	for( zone_it = m_mapVillageZones.begin(); zone_it != m_mapVillageZones.end(); ++zone_it )
	{
		pZone = zone_it->second;
		pZone->Release();
	}
	m_mapVillageZones.clear();

	m_pViewPortManager->Release();
	delete m_pViewPortManager;
/*
	// 傈捧粮甸 付公府
	for( zone_it = m_mapBattleZones.begin(); zone_it != m_mapBattleZones.end(); ++zone_it )
	{
		pZone = zone_it->second;
		pZone->Release();
	}
	m_mapBattleZones.clear();
*/
	for( zone_it = m_mapLobby.begin(); zone_it != m_mapLobby.end(); ++zone_it )
	{
		pZone = zone_it->second;
		pZone->Release();
	}
	m_mapLobby.clear();

	for( zone_it = m_mapMissionZones.begin(); zone_it != m_mapMissionZones.end(); ++zone_it )
	{
		pZone = zone_it->second;
		pZone->Release();
	}
	m_mapMissionZones.clear();

	for( zone_it = m_mapHuntingZones.begin(); zone_it != m_mapHuntingZones.end(); ++zone_it )
	{
		pZone = zone_it->second;
		pZone->Release();
	}
	m_mapHuntingZones.clear();

	for( zone_it = m_mapQuestZones.begin(); zone_it != m_mapQuestZones.end(); ++zone_it )
	{
		pZone = zone_it->second;
		pZone->Release();
	}
	m_mapQuestZones.clear();

	for( zone_it = m_mapPVPZones.begin(); zone_it != m_mapPVPZones.end(); ++zone_it )
	{
		pZone = zone_it->second;
		pZone->Release();
	}
	m_mapPVPZones.clear();

	for( zone_it = m_mapEventZones.begin(); zone_it != m_mapEventZones.end(); ++zone_it )
	{
		pZone = zone_it->second;
		pZone->Release();
	}
	m_mapEventZones.clear();

	for( zone_it = m_mapGuildZones.begin(); zone_it != m_mapGuildZones.end(); ++zone_it )
	{
		pZone = zone_it->second;
		pZone->Release();
	}
	m_mapGuildZones.clear();

	for( zone_it = m_mapSiegeZones.begin(); zone_it != m_mapSiegeZones.end(); ++zone_it )
	{
		pZone = zone_it->second;
		pZone->Release();
	}
	m_mapSiegeZones.clear();

	for( zone_it = m_mapFriendChat.begin(); zone_it != m_mapFriendChat.end(); ++zone_it )
	{
		pZone = zone_it->second;
		pZone->Release();
	}
	m_mapFriendChat.clear();

	// 立加磊 檬扁拳
	m_dwVillageUserNum = 0;
	m_dwLobbyUserNum = 0;
	m_dwMissionUserNum = 0;
	m_dwHuntingUserNum = 0;
	m_dwQuestUserNum = 0;
	m_dwPVPUserNum = 0;
	m_dwEventUserNum = 0;
	m_dwGuildUserNum = 0;
	m_dwSiegeUserNum = 0;

}

VOID Channel::Update()
{
}

Zone* Channel::AddVillage( DWORD dwZoneKey )
{
	Zone *pZone = ZoneFactory::Instance()->AllocZone();
	pZone->SetZoneType( eZONETYPE_VILLAGE );
	pZone->SetKey( dwZoneKey );
	m_mapVillageZones.insert( ZONE_MAP_PAIR( dwZoneKey, pZone ) );

	return pZone;
}
/*
Zone* Channel::AddBattleZone( DWORD dwZoneKey )
{
	Zone *pZone = ZoneFactory::Instance()->AllocZone();
	pZone->SetZoneType( (eZONE_TYPE)ZT_BATTLEZONE );
	pZone->SetKey( dwZoneKey );
	m_mapBattleZones.insert( ZONE_MAP_PAIR( dwZoneKey, pZone ) );

	return pZone;
}
*/
Zone* Channel::AddLobby( DWORD dwZoneKey )
{
	Zone *pZone = ZoneFactory::Instance()->AllocZone();
	pZone->SetZoneType( eZONETYPE_LOBBY );
	pZone->SetKey( dwZoneKey );
	m_mapLobby.insert( ZONE_MAP_PAIR( dwZoneKey, pZone ) );

	return pZone;
}

Zone* Channel::AddMissionZone( DWORD dwZoneKey )
{
	Zone *pZone = ZoneFactory::Instance()->AllocZone();
	pZone->SetZoneType( eZONETYPE_MISSION );
	pZone->SetKey( dwZoneKey );
	m_mapMissionZones.insert( ZONE_MAP_PAIR( dwZoneKey, pZone ) );

	return pZone;
}

Zone* Channel::AddHuntingZone( DWORD dwZoneKey )
{
	Zone *pZone = ZoneFactory::Instance()->AllocZone();
	pZone->SetZoneType( eZONETYPE_HUNTING );
	pZone->SetKey( dwZoneKey );
	m_mapHuntingZones.insert( ZONE_MAP_PAIR( dwZoneKey, pZone ) );

	MessageOut( eFULL_LOG, "CreateHuntingZone[%u]", dwZoneKey );
	return pZone;
}

Zone* Channel::AddQuestZone( DWORD dwZoneKey )
{
	Zone *pZone = ZoneFactory::Instance()->AllocZone();
	pZone->SetZoneType( eZONETYPE_QUEST );
	pZone->SetKey( dwZoneKey );
	m_mapQuestZones.insert( ZONE_MAP_PAIR( dwZoneKey, pZone ) );

	return pZone;
}

Zone* Channel::AddPVPZone( DWORD dwZoneKey )
{
	Zone *pZone = ZoneFactory::Instance()->AllocZone();
	pZone->SetZoneType( eZONETYPE_PVP );
	pZone->SetKey( dwZoneKey );
	m_mapPVPZones.insert( ZONE_MAP_PAIR( dwZoneKey, pZone ) );

	return pZone;
}

Zone* Channel::AddEventZone( DWORD dwZoneKey )
{
	Zone *pZone = ZoneFactory::Instance()->AllocZone();
	pZone->SetZoneType( eZONETYPE_EVENT );
	pZone->SetKey( dwZoneKey );
	m_mapEventZones.insert( ZONE_MAP_PAIR( dwZoneKey, pZone ) );

	return pZone;
}

Zone* Channel::AddGuildZone( DWORD dwZoneKey )
{
	Zone *pZone = ZoneFactory::Instance()->AllocZone();
	pZone->SetZoneType( eZONETYPE_GUILD );
	pZone->SetKey( dwZoneKey );
	m_mapGuildZones.insert( ZONE_MAP_PAIR( dwZoneKey, pZone ) );

	return pZone;
}
Zone* Channel::AddSiegeZone( DWORD dwZoneKey )
{
	Zone *pZone = ZoneFactory::Instance()->AllocZone();
	pZone->SetZoneType( eZONETYPE_SIEGE );
	pZone->SetKey( dwZoneKey );
	m_mapSiegeZones.insert( ZONE_MAP_PAIR( dwZoneKey, pZone ) );

	return pZone;
}

Zone* Channel::AddFriendChat( DWORD dwZoneKey )
{
	Zone *pZone = ZoneFactory::Instance()->AllocZone();
	pZone->SetZoneType( eZONETYPE_MAX );
	pZone->SetKey( dwZoneKey );
	m_mapFriendChat.insert( ZONE_MAP_PAIR( dwZoneKey, pZone ) );

	return pZone;
}

VOID Channel::RemoveVillage( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapVillageZones.find( dwZoneKey );
	assert( it != m_mapVillageZones.end() );
	Zone *pZone = it->second;
	m_mapVillageZones.erase( it );

	ZoneFactory::Instance()->FreeZone( pZone );
}
/*
VOID Channel::RemoveBattleZone( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapBattleZones.find( dwZoneKey );
	assert( it != m_mapBattleZones.end() );
	Zone *pZone = it->second;
	m_mapBattleZones.erase( it );

	ZoneFactory::Instance()->FreeZone( pZone );
}
*/
VOID Channel::RemoveLobby( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapLobby.find( dwZoneKey );
	assert( it != m_mapLobby.end() );
	Zone *pZone = it->second;
	m_mapLobby.erase( it );

	ZoneFactory::Instance()->FreeZone( pZone );
}

VOID Channel::RemoveMissionZone( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapMissionZones.find( dwZoneKey );
	assert( it != m_mapMissionZones.end() );
	Zone *pZone = it->second;
	m_mapMissionZones.erase( it );

	ZoneFactory::Instance()->FreeZone( pZone );
}

VOID Channel::RemoveHuntingZone( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapHuntingZones.find( dwZoneKey );
	assert( it != m_mapHuntingZones.end() );
	Zone *pZone = it->second;
	m_mapHuntingZones.erase( it );

	ZoneFactory::Instance()->FreeZone( pZone );
}

VOID Channel::RemoveQuestZone( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapQuestZones.find( dwZoneKey );
	assert( it != m_mapQuestZones.end() );
	Zone *pZone = it->second;
	m_mapQuestZones.erase( it );

	ZoneFactory::Instance()->FreeZone( pZone );
}

VOID Channel::RemovePVPZone( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapPVPZones.find( dwZoneKey );
	assert( it != m_mapPVPZones.end() );
	Zone *pZone = it->second;
	m_mapPVPZones.erase( it );

	ZoneFactory::Instance()->FreeZone( pZone );
}

VOID Channel::RemoveEventZone( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapEventZones.find( dwZoneKey );
	assert( it != m_mapEventZones.end() );
	Zone *pZone = it->second;
	m_mapEventZones.erase( it );

	ZoneFactory::Instance()->FreeZone( pZone );
}

VOID Channel::RemoveGuildZone( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapGuildZones.find( dwZoneKey );
	assert( it != m_mapGuildZones.end() );
	Zone *pZone = it->second;
	m_mapGuildZones.erase( it );

	ZoneFactory::Instance()->FreeZone( pZone );
}

VOID Channel::RemoveSiegeZone( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapSiegeZones.find( dwZoneKey );
	assert( it != m_mapSiegeZones.end() );
	Zone *pZone = it->second;
	m_mapSiegeZones.erase( it );

	ZoneFactory::Instance()->FreeZone( pZone );
}

VOID Channel::RemoveFriendChat( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapFriendChat.find( dwZoneKey );
	assert( it != m_mapFriendChat.end() );
	Zone *pZone = it->second;
	m_mapFriendChat.erase( it );

	ZoneFactory::Instance()->FreeZone( pZone );
}

Zone* Channel::FindZone( eZONETYPE eZoneType, DWORD dwZoneKey )
{
	// 瘤沥茄 ZoneType俊 嘎霸 茫酒霖促
	switch( eZoneType )
	{
	case eZONETYPE_CHARSELECT:
		return m_pCharSceneZone;
	case eZONETYPE_VILLAGE:
		return FindVillage( dwZoneKey );
	case eZONETYPE_LOBBY:
		return FindLobby( dwZoneKey );
	case eZONETYPE_MISSION:
		return FindMissionZone( dwZoneKey );
	case eZONETYPE_HUNTING:
		return FindHuntingZone( dwZoneKey );
	case eZONETYPE_QUEST:
		return FindQuestZone( dwZoneKey );
	case eZONETYPE_PVP:
		return FindPVPZone( dwZoneKey );
	case eZONETYPE_EVENT:
		return FindEventZone( dwZoneKey );
	case eZONETYPE_GUILD:
		return FindGuildZone( dwZoneKey );
	case eZONETYPE_SIEGE:
		return FindSiegeZone( dwZoneKey );
	default:
#ifdef _DEBUG
		assert( !"FindZone - invalid user status" );
#else
		MessageOut( eCRITICAL_LOG, "[Guid:%u] Channel::FindZone Error - Invalid ZoneType[%u][ZK:%u]", eZoneType, dwZoneKey );
		// 酪绢滚啡栏聪 谗绢滚妨!!!
#endif
		break;
	}

	return NULL;
}

Zone* Channel::FindVillage( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapVillageZones.find( dwZoneKey );
	if( it != m_mapVillageZones.end() )
	{
		return it->second;
	}
	else
	{
		return NULL;
	}
}
/*
Zone* Channel::FindBattleZone( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapBattleZones.find( dwZoneKey );
	if( it != m_mapBattleZones.end() )
	{
		return it->second;
	}
	else
	{
		return NULL;
	}
}
*/
Zone* Channel::FindLobby( DWORD dwZoneKey )
{
	ZONE_MAP_ITER it = m_mapLobby.find( dwZoneKey );
	if( it != m_mapLobby.end() )
	{
		return it->second;
	}
	else
	{
		return NULL;
	}
}

⌨️ 快捷键说明

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