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

📄 gamezone.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
字号:
#include "StdAfx.h"
#include ".\gamezone.h"
#include ".\Map.h"
#include ".\MapAllocator.h"
#include ".\Field.h"
#include ".\Player.h"
#include "SummonManager.h"
#include "SummonedNPCs.h"

GameZone::GameZone(void):
m_pMap(NULL),
m_MapCode(0),
m_Key(0)
{
	m_PlayerHash.Initialize( MAX_PARTYMEMBER_NUM*4 );
}

GameZone::~GameZone(void)
{
	m_PlayerHash.RemoveAll();
}

VOID GameZone::Release()
{
	ASSERT( m_pMap );
	g_MapAllocator.FreeMap( m_pMap );

	Player * pPlayer = NULL;
	m_PlayerHash.SetFirst();
	while( (pPlayer = m_PlayerHash.GetNext()) != NULL )
	{
		pPlayer->SetGameZone( ePRS_NOT_AT_ZONE, NULL, 0 );
	}
	m_PlayerHash.RemoveAll();
}

VOID GameZone::Init( KEYTYPE Key, CODETYPE MapCode )
{
	// 冯虐 悸泼
	SetKey( Key );
	SetMapCode( MapCode );

}
VOID GameZone::LoadMap( int iActiveFieldIndex )
{
	// 甘 alloc
	m_pMap = g_MapAllocator.AllocMap( GetMapCode(), iActiveFieldIndex ); //< 肋给等 备炼肺 牢茄 this passed -> 肺流篮 粮俊辑 贸府窍绰 巴捞...

	ASSERT( m_pMap );
	m_pMap->SetGameZone( this );
}

VOID GameZone::Update( DWORD dwDeltaTick )
{
	ASSERT( m_pMap );
	m_pMap->Update( dwDeltaTick );
}

VOID GameZone::Leave( Player * pPlayer )
{
	DEBUG_CODE(
	GameZone * pEnterZone	= NULL;
	CODETYPE EnterFieldCode = 0;
	eZONE_STATE eRoomState	= pPlayer->GetGameZone( pEnterZone, EnterFieldCode );
	ASSERT( (eRoomState & ePRS_AT_ZONE) );
	);

	pPlayer->SaveStartLocation();
	
	ASSERT( pPlayer->GetField() );
	pPlayer->GetField()->LeaveField( pPlayer );

	pPlayer->SetGameZone( ePRS_NOT_AT_ZONE, NULL, 0 );

	ASSERT( m_PlayerHash.GetData(pPlayer->GetObjectKey()) != NULL );
	m_PlayerHash.Remove( pPlayer->GetObjectKey() );

}

VOID GameZone::Warp( Player * pPlayer, CODETYPE FieldCode, WzID AreaID )
{
	GameZone * pEnterZone	= NULL;
	CODETYPE EnterFieldCode = 0;
	eZONE_STATE eRoomState	= pPlayer->GetGameZone( pEnterZone, EnterFieldCode );
	ASSERT( (eRoomState & ePRS_AT_ZONE) );

	if(pEnterZone) pEnterZone->Leave( pPlayer );
	else
	{
		SUNLOG( eCRITICAL_LOG, "Warp()粮捞绝促.[%u][%u]", eRoomState, EnterFieldCode );
	}

	pPlayer->SetGameZone( ePRS_BEFORE_ENTER_ZONE, this, FieldCode, AreaID );
}

BOOL GameZone::Join( Player * pPlayer, CODETYPE FieldCode, WzID AreaID )
{
	Field* pField = m_pMap->GetFieldx( FieldCode );
	DEBUG_CODE( if( !pField ) { ASSERT( !"甸绢棵妨绰 镑俊 鞘靛啊 绝促" ); SUNLOG( eFULL_LOG, "[GameZone::Join] 甸绢棵妨绰 镑俊 鞘靛啊 绝促."); return FALSE; } );

	WzVector wzVec;
	if( AreaID == 0 )
	{
		wzVec = pPlayer->GetStartVector(pField);
		//wzVec = pField->GetRandomStartingVector();
	}
	else
		pField->GetAreaRandomVector(AreaID, wzVec);

	if( FALSE == pField->EnterField( pPlayer, &wzVec ) )
	{
		SUNLOG( eCRITICAL_LOG, "[GameZone::Join] EnterField Error!!! ObjectKey[%d]", pPlayer->GetObjectKey());
		SASSERT( NULL, "[坷幅]:EnterField坷幅!!" );
		return FALSE;
	}

	ASSERT( m_PlayerHash.GetData(pPlayer->GetObjectKey()) == NULL );
	m_PlayerHash.Add( pPlayer, pPlayer->GetObjectKey() );

	return TRUE;
}

BOOL GameZone::CheckMapVersion( CODETYPE FieldCode, DWORD checksum )
{
	return GetMap()->CheckMapVersion( FieldCode, checksum );
}

CODETYPE GameZone::GetEntryFieldCode()
{
	ASSERT( m_pMap );
	ASSERT( m_pMap->GetMapInfo() );
	return m_pMap->GetMapInfo()->GetMapInfo()->FCode[0];
}

DWORD GameZone::GetEntryAreaID()
{
	ASSERT( m_pMap );
	ASSERT( m_pMap->GetMapInfo() );
	return m_pMap->GetMapInfo()->GetMapInfo()->wStartAreaID;
}






















⌨️ 快捷键说明

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