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

📄 map.cpp

📁 韩国英雄王座倒闭后流出来部分源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		//	----------------------------------------------------------------------------
		//	捞悼 困摹 弥措蔼 厚背
		//	----------------------------------------------------------------------------
		nXFrom	=	MAX( nXFrom	,	0		);
		nXTo	=	MIN( nXTo	,	nMaxX	);

		nYFrom	=	MAX( nYFrom	,	0		);
		nYTo	=	MIN( nYTo	,	nMaxY	);


		for( i = nXFrom; i <= nXTo; i ++ )
		{
			for( j = nYFrom; j <= nYTo; j ++ )
			{						
				if( !(_MAP[nMapLayer][i][j].nCheckBit & CHK_MOVE)	)	continue;	// 框流 老荐 乐绰瘤 咯何 魄沥 (Tile 犬牢)	

				if( _MAP[nMapLayer][i][j].dwHandle )continue;	//	PC/NPC啊 秦寸 Cell俊 粮犁 窍瘤 臼绰 版快
				
				EnterCriticalSection( &m_MapLock );						

					_MAP[nMapLayer][i][j].dwHandle	=	pSocketFD->pPlayer->m_dwHandle;

					_MAP[nMapLayer][i][j].pObject	=	pSocketFD;
					_MAP[nMapLayer][i][j].nType	=	(BYTE)MAP_PC;		//	PC

				LeaveCriticalSection( &m_MapLock );

				//	--------------------------------------------------------------------
				//	秦寸 AOI蔼阑 历厘 矫糯 
				//	--------------------------------------------------------------------
				pSocketFD->pPlayer->m_Tile.x = i;
				pSocketFD->pPlayer->m_Tile.y = j;

				//	--------------------------------------------------------------------
				//	秦寸 AOI俊 谍 NPC/PC啊 粮犁窍绰 版快 
				//	困摹 焊沥 累诀篮 Title狼 吝埃俊 困摹 窍促废 父惦 
				//	抛胶飘 饶 困摹 钎矫啊 捞惑茄 版快 荐沥 累诀
				//	--------------------------------------------------------------------


				//	困摹 焊沥 累诀 
				if( nLevel >  0 )			 
				{
					pSocketFD->pPlayer->_PLAYERINFO.wX	=	pSocketFD->pPlayer->m_Tile.x * 100 + 50;
					pSocketFD->pPlayer->_PLAYERINFO.wY	=	pSocketFD->pPlayer->m_Tile.y * 100 + 50;
				}
				else
				{
					//	泅 困摹俊 粮犁 窍绰 版快 
					pSocketFD->pPlayer->_PLAYERINFO.wX	=	pPoint.x;
					pSocketFD->pPlayer->_PLAYERINFO.wY	=	pPoint.y;
				}

				return true;	// LOOP狐廉 唱坷扁				
			}
		}

		nLevel ++;

		// 漂沥 Level鳖瘤 贸府 窍瘤 给茄 版快
		if( nLevel > 10 ) return false;
	}

	return true;
}


////////////////////////////////////////////////////////////////////////////////////////
//	MAP Array郴 Player甫 昏力 矫糯
//
//	-	ERROR贸府 风凭 眠啊 
////////////////////////////////////////////////////////////////////////////////////////
bool Map::MAP_PlayerOut( PlayerInfo *pPlayer )
{
	m_MapPlayerHandle.Delete( pPlayer->m_dwHandle		);	//	PLAYER HANDLE昏力
		
	m_MapAccountID.Delete	( pPlayer->m_strAccountID	);	//	PLAYER ACCOUNT昏力
	
	char strTempPlayer[22] ={0,} ;	
	memcpy( strTempPlayer, pPlayer->m_strPlayerID , 20 );

	m_MapPlayerID.Delete( strupr( strTempPlayer ) );		//	PLAYER ID昏力

//#ifdef DEF_LOGOUT_TO_WORLD
//	m_MapTempPlayerID.Delete( strupr( strTempPlayer )	);			//  烙矫 历厘侩 AccountID
//#endif

	//	Map俊辑 昏力 矫糯
	if(	!AOI_PlayerDelete( pPlayer) )
	{		
		ErrorMsg
		(
			"(X) MAP_PlayerOut 荤侩磊 昏力 坷幅 Handle=%d Tile=%d,%d", 
			pPlayer->m_dwHandle	, 
			pPlayer->m_Tile.x	,
			pPlayer->m_Tile.y						
		);
		
	}

	return true;
}


////////////////////////////////////////////////////////////////////////////////////////
//	Temp Handle阑 积己 矫糯 
//
////////////////////////////////////////////////////////////////////////////////////////
int Map::CreateTempHandle()
{	
	::InterlockedDecrement( (long *) &m_nTempHandle) ;
	
	int nHandle = m_nTempHandle;

	return nHandle;
}

////////////////////////////////////////////////////////////////////////////////////////
//	NPC弥檬 积己 矫
////////////////////////////////////////////////////////////////////////////////////////
void Map::NPC_Create(NPC *pNPC, _POINT_TILE pTile)
{
	AOI_NPCPoint( pNPC ,	pTile );				// NPC甫 AOI俊 困摹 矫糯

	if(pNPC->m_nMapLayer >= m_nMaxLayer ) return ;

	m_MapNPC[pNPC->m_nMapLayer]->Insert( pNPC->m_dwHandle, pNPC );		// NPC包府 Map 秦寸 沥焊甫 涝仿 矫糯
}

////////////////////////////////////////////////////////////////////////////////////////
//	酒瘤飘 阁胶磐 殿废
//
////////////////////////////////////////////////////////////////////////////////////////
#ifdef DEF_AZIT

void Map::AzitNPC_Create(NPC *pNPC, _POINT_TILE pTile)
{
	BYTE	nMapLayer =	pNPC->m_nMapLayer;
	if( nMapLayer >= m_nMaxLayer )	return;

	int		nMaxX	=	MapConfig[nMapLayer].nMaxX;
	int		nMaxY	=	MapConfig[nMapLayer].nMaxY;

	//	--------------------------------------------------------------------------------
	//	秦寸 MAP俊 困摹矫糯
	//	--------------------------------------------------------------------------------
	int nLevel	= 0, i, j;
		
	int	nXFrom	= 0, nXTo =	0;
	int nYFrom	= 0, nYTo =	0;
	
	bool bExit=false;

	while( 1 )
	{
		nXFrom	= pTile.x  - 	nLevel;
		nXTo	= pTile.x  + 	nLevel;
	
		nYFrom	= pTile.y  - 	nLevel;
		nYTo	= pTile.y  + 	nLevel;

		nXFrom	=	MAX( nXFrom	,	0		);
		nXTo	=	MIN( nXTo	,	nMaxX	);

		nYFrom	=	MAX( nYFrom	,	0		);
		nYTo	=	MIN( nYTo	,	nMaxY	);


		for( i = nXFrom; i <= nXTo; i ++ )
		{
			for( j = nYFrom; j <= nYTo; j ++ )
			{	

				/*
				 *	秦寸 困摹俊 殿废 矫糯	
				 *
				 *
				 */

				//	PC/NPC啊 秦寸 Cell俊 粮犁 窍瘤 臼绰 版快
				if( _MAP[nMapLayer][i][j].dwHandle == 0 )
				{	
					EnterCriticalSection( &m_MapLock );						

						_MAP[nMapLayer][i][j].dwHandle	=	pNPC->m_dwHandle;
						_MAP[nMapLayer][i][j].pObject	=	pNPC;

						_MAP[nMapLayer][i][j].nType		=	MAP_MONSTER;		//	NPC

					LeaveCriticalSection( &m_MapLock );

					// 秦寸 AOI蔼阑 历厘 矫糯 
					pNPC->m_Tile.x	=	i;
					pNPC->m_Tile.y	=	j;					


					bExit = true;				// LOOP狐廉 唱坷扁 
					
				}
							
				if( bExit ) break;
			}

			if( bExit ) break;
		}

		nLevel ++;

		// 漂沥 Level鳖瘤 贸府 窍瘤 给茄 版快
		if( nLevel > 10 ) break;
	}

	// NPC包府 Map 秦寸 沥焊甫 涝仿 矫糯
	m_MapNPC[pNPC->m_nMapLayer]->Insert( pNPC->m_dwHandle, pNPC );		
}

#endif

////////////////////////////////////////////////////////////////////////////////////////
//	Monster弥檬 积己 矫
////////////////////////////////////////////////////////////////////////////////////////
void Map::Monster_Create(NPC *pNPC, _POINT_TILE pTile, BYTE nNPC)
{
	AOI_NPCPut(  pNPC ,	pTile, nNPC );					// Monaster AOI俊 困摹 矫糯

	if(pNPC->m_nMapLayer >= m_nMaxLayer ) return ;

	m_MapNPC[pNPC->m_nMapLayer]->Insert( pNPC->GetHandle(), pNPC );		// NPC包府 Map 秦寸 沥焊甫 涝仿 矫糯

}


////////////////////////////////////////////////////////////////////////////////////////
//	Socket Pop矫糯
////////////////////////////////////////////////////////////////////////////////////////
void* Map::Pool_Socket_Pop()
{
	_SOCKET_FD	*pSocketFD	= (_SOCKET_FD *)m_PoolSocket.RemoveHead();

	if( pSocketFD->nSeq != 0 )
	{
		pSocketFD->nSeq	=	0;
	}

	pSocketFD->nIO		= 0;
	pSocketFD->bLog		= false;		//Jason 2004-07-22

#if defined(DEF_SPEEDHACK) || defined(DEF_KORSPEEDHACK)

	//	Jason 2004-08-16-china	
	memset(pSocketFD->dwStartSpeedTick, 0x00, sizeof(pSocketFD->dwStartSpeedTick	));
	memset(pSocketFD->dwOldSpeedTick,	0x00, sizeof(pSocketFD->dwOldSpeedTick		));
	memset(pSocketFD->nPacketCount,		0x00, sizeof(pSocketFD->nPacketCount		));
	memset(pSocketFD->dwInitSpeedTick,	0x00, sizeof(pSocketFD->dwInitSpeedTick		));
	
	#ifdef DEF_SKILLHACK_CHANGEJOB
		memset(pSocketFD->nReactCount,	0x00, sizeof(pSocketFD->nReactCount		));
	#endif

	//	Jason 2004-09-24-china 捞霸 绝绢辑 胶乔靛琴 x瞪环 沁匙...
	memset(pSocketFD->nHackCount,		0x00, sizeof(pSocketFD->nHackCount			));

	pSocketFD->nWarningCount = 0;
	
#ifdef DEF_KORSPEEDHACKSKILL
	pSocketFD->nSkillIndex	 = 0;		//	Duke 2005-1-31	
#endif

#endif
	
#ifdef DEF_AUTHCODE
	//Jason 2004-10-06
	pSocketFD->dwAuthCode		=	-1;
	pSocketFD->nMenuStatus		=	0;
#endif

#ifdef DEF_PACKETSIZEDOWN_BADAJOA20041011
	pSocketFD->dwMoveAOISendTime	=	0;
	pSocketFD->wOldMoveX			=	0;
	pSocketFD->wOldMoveY			=	0;
#endif

#ifdef DEF_FULLGUAGEHACK
	pSocketFD->dwSkillReadyTime = 0;
	pSocketFD->dwSkillUseTime	= 0;
#endif

	pSocketFD->pPlayer->Clear_PlayerInfo();

	return pSocketFD;
}

////////////////////////////////////////////////////////////////////////////////////////
//	Player 包府 List俊 Push 矫糯
//
//	-	Error贸府 风凭 眠啊 矫糯
////////////////////////////////////////////////////////////////////////////////////////
void Map::Pool_Socket_Push( void *pSocket )
{	
	if( !pSocket )	return;

	/*
	_SOCKET_FD	*pTempSocket	=	(_SOCKET_FD *)pSocket;
	
	//	秦寸 Pointer坷幅 惯积矫
	if( !pTempSocket || pTempSocket->dwMagicNum != MAGIC_NUM )
	{
		ErrorMsg( "(X) Map : Socket Push Error ");
		return ;
	}

	pTempSocket->pPlayer->Clear_PlayerInfo();
	*/

	m_PoolSocket.Insert( pSocket );
}


////////////////////////////////////////////////////////////////////////////////////////
//	Item 包府 List俊 Pop矫糯
////////////////////////////////////////////////////////////////////////////////////////
CItem* Map::Pool_Item_Pop()
{
	CItem *pItem = (CItem *)m_PoolItem.RemoveHead();
	
	//	--------------------------------------------------------------------------------
	//	Item捞 捞固 荤侩 吝牢 版快 
	//	--------------------------------------------------------------------------------
	if(pItem == NULL)
	{
		pItem =	new CItem;				// Item 按眉甫 Memory 且寸

		if( !pItem ) return NULL;

		pItem->dwMagicNum	=	MAGIC_NUM;
	}
	else if( pItem->m_bPoolUse )
	{
		ErrorMsg( "(X) Pool_Item_Pop ITEM  realloc" );
		return NULL;
	}

	
	pItem->m_bPoolUse	=	true;		//	Item Pool	荤侩
	pItem->Clear_Item();
		
	return pItem;
}

////////////////////////////////////////////////////////////////////////////////////////
//	Item 包府 List俊 Push 矫糯
//
//	-	ITEM 吝汗 馆券 咯何 Checking
////////////////////////////////////////////////////////////////////////////////////////
void Map::Pool_Item_Push( void *pItem, int pDebugCode )
{
	CItem *p	=	(CItem *)pItem;

	if( !p->m_bPoolUse	)
	{
		MapLog("(X) (%d) Pool_Item_Push ITEM Debug Code=(%d)", _Module.m_nMapSeq, pDebugCode ) ;
		return;
	}

	p->m_bPoolUse	=	false;		//	ITEM POOL馆券	
	p->Clear_Item();

	m_PoolItem.Insert( pItem );
}


////////////////////////////////////////////////////////////////////////////////////////
//	SKILL包府 List俊 Pop矫糯
//
////////////////////////////////////////////////////////////////////////////////////////
void* Map::Pool_Skill_Pop()
{
	CEnchant *pEnchant = (CEnchant *)m_PoolSkill.RemoveHead();
	
	if(pEnchant == NULL)
	{
		pEnchant =	new CEnchant;		// Enchant 按眉甫 Memory 且寸

		if( !pEnchant ) return NULL;
	}

	pEnchant->m_bPoolUse	=	true;		//	ITEM POOL 荤侩
	pEnchant->Clear_Skill();

	return pEnchant;
}

////////////////////////////////////////////////////////////////////////////////////////
//	SKILL PUSH
//
////////////////////////////////////////////////////////////////////////////////////////
void  Map::Pool_Skill_Push( void *pSkill ,int i )		
{		
	CEnchant *pEnchant	=	(CEnchant *)pSkill;

	if( !pEnchant->m_bPoolUse	)
	{
		MapLog("(X) (%d) Pool_Skill_Push SKILL is duplicated return (%d) (%d) [%d]", _Module.m_nMapSeq ,pEnchant->m_nSlotType , pEnchant->m_wSkillIndex, i ) ;
		return;
	}	

	pEnchant->m_bPoolUse	=	false;		//	Item Pool	馆券


	m_PoolSkill.Insert( pSkill );	
}

////////////////////////////////////////////////////////////////////////////////////////
//	秦寸 Handle狼 荤侩磊甫 Map俊辑 鉴瞒 八祸栏肺 茫酒辑 昏力 矫糯
//
//	-	2003.11.01 Duke Kim Code眠啊
//	-	眠饶 包访 Search 规过阑 背眉 窃 
////////////////////////////////////////////////////////////////////////////////////////
void Map::MAP_PlayerClear( DWORD pHandle )
{
/*
	for( int i=0; i < MAX_MAPTILE_SIZE; i++)
	{
		for( int j=0; j < MAX_MAPTILE_SIZE; j++)
		{
			
			if( _MAP[0][i][j].dwHandle == pHandle )
			{
				ErrorMsg("(X) MAP_PlayerClear Hande=%d Tile=%d,%d", pHandle, i , j );
				
				AOI_PlayerDelete( pHandle, (BYTE)i, (BYTE)j );
				return;
			}
		}
	}

	//	秦寸 Handle沥焊甫 Map俊辑 茫瘤 给窍绰 版快
	ErrorMsg( "(X) Handle=%d Position infomation no find in Map", pHandle );	
*/

⌨️ 快捷键说明

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