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

📄 zone.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "StdAfx.h"
#include ".\zone.h"
#include "User.h"
#include <assert.h>

Zone::Zone(void)
{
}

Zone::~Zone(void)
{
}

VOID Zone::Init()
{
}

VOID Zone::Release()
{
	m_mapUsers.clear();
}

BOOL Zone::AddUser( DWORD dwGuid, User *pUser )
{
	USER_MAP_ITER it = m_mapUsers.find( dwGuid );
	if( it != m_mapUsers.end() )
	{
		MessageOut( eCRITICAL_LOG, "Zone::AddUser[Guid:%u] Error - Already In Zone[ZT:%u][ZK:%u]", pUser->GetGUID(), m_zoneType, m_dwKey );
		m_mapUsers.erase( it );	// 扁粮 单捞磐啊 乐栏搁 瘤况霖促
	}
	m_mapUsers.insert( USER_MAP_PAIR( dwGuid, pUser ) );

	pUser->OnEnterZone( this );
	MessageOut( eFULL_LOG, "Zone::AddUser[Type:%u][Key:%u][Guid:%u]", m_zoneType, m_dwKey, pUser->GetGUID() );

	return TRUE;
}

VOID Zone::AddSectorUser( DWORD dwGuid, User *pUser )
{
	USER_MAP_ITER it = m_mapUsers.find( dwGuid );
#ifdef _DEBUG
	assert( it == m_mapUsers.end() );
#else
	if( it != m_mapUsers.end() )
	{
		MessageOut( eCRITICAL_LOG, "Zone::AddSectorUser[Guid:%u] Error - Already In Zone[ZT:%u][ZK:%u]", pUser->GetGUID(), m_zoneType, m_dwKey );
		m_mapUsers.erase( it );	// 瘤况林绊 促矫 持绰促
	}
#endif
	m_mapUsers.insert( USER_MAP_PAIR( dwGuid, pUser ) );

	pUser->OnEnterSector( this );
}

BOOL Zone::RemoveUser( DWORD dwGuid )
{
	USER_MAP_ITER it = m_mapUsers.find( dwGuid );
	//assert( it != m_mapUsers.end() );
	if( it != m_mapUsers.end() )
	{
		User *pUser = it->second;
		m_mapUsers.erase( it );
		if( !pUser )
		{
			MessageOut( eCRITICAL_LOG, "[Guid:%u]User Not In Zone[ZT:%u][ZK:%u]", dwGuid, m_zoneType, m_dwKey );
			return FALSE;
		}
		MessageOut( eFULL_LOG, "Zone::RemoveUser [%s][Guid:%u][ZT:%u][ZK:%u]", pUser->GetCharName().c_str(), pUser->GetGUID(), m_zoneType, m_dwKey );
		pUser->OnLeaveZone( this );
		return TRUE;
	}
	return FALSE;
}

VOID Zone::RemoveSectorUser( DWORD dwGuid )
{
	USER_MAP_ITER it = m_mapUsers.find( dwGuid );
	//assert( it != m_mapUsers.end() );
	if( it != m_mapUsers.end() )
	{
		User *pUser = it->second;
		m_mapUsers.erase( it );
		pUser->OnLeaveSector( this );
	}
}

VOID Zone::SendToAll( BYTE *pMsg, WORD wSize )
{
	USER_MAP_ITER	it;
	User			*pUser;
	for( it = m_mapUsers.begin(); it != m_mapUsers.end(); ++it )
	{
		pUser = it->second;
		if( !pUser )
		{
			MessageOut( eCRITICAL_LOG, "Zone::SendAll : User Data Error - In Zone [%u]", m_dwKey );
			continue;
		}
		pUser->Send( pMsg, wSize );
	}
}

⌨️ 快捷键说明

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