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

📄 map.cpp

📁 韩国英雄王座倒闭后流出来部分源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
////////////////////////////////////////////////////////////////////////////////////////
bool Map::CheckNPCMoveable(	BYTE pMapIndex,	int x, int y, BYTE nNPC )
{
	if( !(_MAP[pMapIndex][x][y].nCheckBit & CHK_MOVE)	)	return	false;	//	捞悼 阂啊 瘤开牢 版快

	if(  _MAP[pMapIndex][x][y].dwHandle		)	return	false;

	if( nNPC == MAP_MONSTER	)
	{
		if( _MAP[pMapIndex][x][y].nCheckBit & CHK_SAFEZONE )	return	false;	
	}

	return true;
}


////////////////////////////////////////////////////////////////////////////////////////
//	NPC檬扁 困摹 硅摹
//
////////////////////////////////////////////////////////////////////////////////////////
void Map::AOI_NPCPut(NPC *pNpcHandle, _POINT_TILE pMoveTile,BYTE nNPC)
{	
	//	--------------------------------------------------------------------------------
	//	秦寸 甘狼 沥焊甫 掘澜
	//	--------------------------------------------------------------------------------
	BYTE	nMapLayer =	pNpcHandle->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;
	
	while( 1 )
	{
		nXFrom	= pMoveTile.x  - 	nLevel;
		nXTo	= pMoveTile.x  + 	nLevel;
	
		nYFrom	= pMoveTile.y  - 	nLevel;
		nYTo	= pMoveTile.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 ++ )
			{					
				//	--------------------------------------------------------------------
				//	框流 老荐 乐绰瘤 咯何 魄沥 (Tile 犬牢)
				//	框流老荐 乐绰 困摹咯何 犬牢 
				//	救傈 瘤开捞 酒囱 版快 
				//	--------------------------------------------------------------------

				if( (_MAP[nMapLayer][i][j].nCheckBit & CHK_MOVE) == TRUE && (_MAP[nMapLayer][i][j].nCheckBit & CHK_SAFEZONE) == FALSE )
				{

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

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

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

						LeaveCriticalSection( &m_MapLock );

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

						/*	
							秦寸 AOI俊 谍 NPC/PC啊 粮犁窍绰 版快 
						--------------------------------------------------------
							困摹 焊沥 累诀篮 Title狼 吝埃俊 困摹 窍促废 父惦 
							-> 抛胶飘 饶 困摹 钎矫啊 捞惑茄 版快 荐沥 累诀
						--------------------------------------------------------
						*/
						pNpcHandle->m_MoveTo.x	=	i * 100 + 50;
						pNpcHandle->m_MoveTo.y	=	j * 100 + 50;


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

		nLevel ++;

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

	return;
}



////////////////////////////////////////////////////////////////////////////////////////
//	NPC甫 MAP俊 困摹 矫糯 
//
//	-	内靛甫 窜鉴拳 矫糯 
//	-	涝仿 Point啊 弥措 Size焊促 奴 版快 坷幅 贸府 累诀
////////////////////////////////////////////////////////////////////////////////////////
int Map::AOI_NPCMove( NPC* pNpcHandle , _POINT pMoveTile , BYTE nNPC )
{

	//	NPC狼 泅犁 困摹 <-> 框流老 芭府埃狼 烹苞 窍绰 鸥老阑 掘澜 
	_POINT_TILE NpcPoint = pNpcHandle->m_Tile;

	//	2俺狼 芭府埃 扁匡扁甫 备窃
	int	   x, y;


	//	--------------------------------------------------------------------------------
	//	沤祸 备埃阑 唱穿绢辑 八祸 备埃阑 备窃
	//
	//							|
	//						4	|	1
	//							|
	//					--------+--------
	//							|
	//						3	|	2
	//							|
	//
	//	--------------------------------------------------------------------------------

	//	--------------------------------------------------------------------------------
	//	1 备埃 
	//	--------------------------------------------------------------------------------
	if( pMoveTile.x >= NpcPoint.x && pMoveTile.y >= NpcPoint.y )
	{

		for( x= pMoveTile.x; x >= NpcPoint.x; x -- )
		{
			for( y= pMoveTile.y; y >= NpcPoint.y; y -- )
			{

				if( NpcPoint.x == x && NpcPoint.y == y  ) continue;
				

				if( CheckNPCMoveable( pNpcHandle->m_nMapLayer, x, y, nNPC ) )
				{
				
					//	----------------------------------------------------------------
					//	NOTENOTE: 2003-10-30 badajoa CriticalSection甫 临捞扁 困茄 累诀
					//	----------------------------------------------------------------
					EnterCriticalSection( &m_MapLock );						
		
						AOI_PlayerFastDelete( pNpcHandle);

						_MAP[pNpcHandle->m_nMapLayer][x][y].dwHandle	=	pNpcHandle->m_dwHandle;
						_MAP[pNpcHandle->m_nMapLayer][x][y].pObject		=	pNpcHandle;

						_MAP[pNpcHandle->m_nMapLayer][x][y].nType		=	nNPC;		//	NPC

					LeaveCriticalSection( &m_MapLock );

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

					//	----------------------------------------------------------------					
					//	秦寸 AOI俊 谍 NPC/PC啊 粮犁窍绰 版快 
					//	----------------------------------------------------------------
					//	困摹 焊沥 累诀篮 Title狼 吝埃俊 困摹 窍促废 父惦 
					//	-> 抛胶飘 饶 困摹 钎矫啊 捞惑茄 版快 荐沥 累诀
					//	----------------------------------------------------------------
					pNpcHandle->m_MoveTo.x	=	x * 100 + 50;
					pNpcHandle->m_MoveTo.y	=	y * 100 + 50;

					return 0;
				}

			}
		}
	}
	//	--------------------------------------------------------------------------------
	//	2 备埃 
	//	--------------------------------------------------------------------------------
	else if( pMoveTile.x >= NpcPoint.x && pMoveTile.y < NpcPoint.y )
	{

		for( x= pMoveTile.x; x >= NpcPoint.x; x -- )
		{
			for( y= pMoveTile.y; y <= NpcPoint.y; y ++ )
			{

				if( NpcPoint.x == x && NpcPoint.y == y  ) continue;


				if( CheckNPCMoveable( pNpcHandle->m_nMapLayer, x, y, nNPC ) )
				{

					//	----------------------------------------------------------------
					//	NOTENOTE: 2003-10-30 badajoa CriticalSection甫 临捞扁 困茄 累诀
					//	----------------------------------------------------------------

					EnterCriticalSection( &m_MapLock );						
		
						AOI_PlayerFastDelete( pNpcHandle);

						_MAP[pNpcHandle->m_nMapLayer][x][y].dwHandle	=	pNpcHandle->m_dwHandle;
						_MAP[pNpcHandle->m_nMapLayer][x][y].pObject	=	pNpcHandle;

						_MAP[pNpcHandle->m_nMapLayer][x][y].nType	=	nNPC;		//	NPC

					LeaveCriticalSection( &m_MapLock );

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

					//	----------------------------------------------------------------					
					//	秦寸 AOI俊 谍 NPC/PC啊 粮犁窍绰 版快 
					//	----------------------------------------------------------------
					//	困摹 焊沥 累诀篮 Title狼 吝埃俊 困摹 窍促废 父惦 
					//	-> 抛胶飘 饶 困摹 钎矫啊 捞惑茄 版快 荐沥 累诀
					//	----------------------------------------------------------------
					pNpcHandle->m_MoveTo.x	=	x * 100 + 50;
					pNpcHandle->m_MoveTo.y	=	y * 100 + 50;

					return 0;
				}

			}
		}
	}
	//	--------------------------------------------------------------------------------
	//	3 备埃 
	//	--------------------------------------------------------------------------------
	else if( pMoveTile.x < NpcPoint.x && pMoveTile.y < NpcPoint.y )
	{

		for( x= pMoveTile.x; x <= NpcPoint.x; x ++ )
		{
			for( y= pMoveTile.y; y <= NpcPoint.y; y ++ )
			{

				if( NpcPoint.x == x && NpcPoint.y == y  ) continue;


				if( CheckNPCMoveable( pNpcHandle->m_nMapLayer, x, y, nNPC ) )
				{

					//	----------------------------------------------------------------
					//	NOTENOTE: 2003-10-30 badajoa CriticalSection甫 临捞扁 困茄 累诀
					//	----------------------------------------------------------------
					EnterCriticalSection( &m_MapLock );						
		
						AOI_PlayerFastDelete( pNpcHandle );
				
						_MAP[pNpcHandle->m_nMapLayer][x][y].dwHandle=	pNpcHandle->m_dwHandle;
						_MAP[pNpcHandle->m_nMapLayer][x][y].pObject	=	pNpcHandle;

						_MAP[pNpcHandle->m_nMapLayer][x][y].nType	=	nNPC;		//	NPC

					LeaveCriticalSection( &m_MapLock );

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

					//	----------------------------------------------------------------					
					//	秦寸 AOI俊 谍 NPC/PC啊 粮犁窍绰 版快 
					//	----------------------------------------------------------------
					//	困摹 焊沥 累诀篮 Title狼 吝埃俊 困摹 窍促废 父惦 
					//	-> 抛胶飘 饶 困摹 钎矫啊 捞惑茄 版快 荐沥 累诀
					//	----------------------------------------------------------------
					pNpcHandle->m_MoveTo.x	=	x * 100 + 50;
					pNpcHandle->m_MoveTo.y	=	y * 100 + 50;

					return 0;
				}

			}
		}

	}
	//	--------------------------------------------------------------------------------
	//	4 备埃
	//	--------------------------------------------------------------------------------
	else
	{

		for( x= pMoveTile.x; x <= NpcPoint.x; x ++ )
		{
			for( y= pMoveTile.y; y >= NpcPoint.y; y -- )
			{

				if( NpcPoint.x == x && NpcPoint.y == y  ) continue;


				if( CheckNPCMoveable( pNpcHandle->m_nMapLayer, x, y, nNPC ) )
				{

					//	----------------------------------------------------------------
					//	NOTENOTE: 2003-10-30 badajoa CriticalSection甫 临捞扁 困茄 累诀
					//	----------------------------------------------------------------
					EnterCriticalSection( &m_MapLock );						
		
						AOI_PlayerFastDelete( pNpcHandle);

						_MAP[pNpcHandle->m_nMapLayer][x][y].dwHandle	=	pNpcHandle->m_dwHandle;
						_MAP[pNpcHandle->m_nMapLayer][x][y].pObject		=	pNpcHandle;

						_MAP[pNpcHandle->m_nMapLayer][x][y].nType		=	nNPC;		//	NPC

					LeaveCriticalSection( &m_MapLock );

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

					//	----------------------------------------------------------------					
					//	秦寸 AOI俊 谍 NPC/PC啊 粮犁窍绰 版快 
					//	----------------------------------------------------------------
					//	困摹 焊沥 累诀篮 Title狼 吝埃俊 困摹 窍促废 父惦 
					//	-> 抛胶飘 饶 困摹 钎矫啊 捞惑茄 版快 荐沥 累诀
					//	----------------------------------------------------------------
					pNpcHandle->m_MoveTo.x	=	x * 100 + 50;
					pNpcHandle->m_MoveTo.y	=	y * 100 + 50;

					return 0;
				}

			}
		}
	}


	return -1;	
}




////////////////////////////////////////////////////////////////////////////////////////
//	AOI郴俊 捞悼 啊瓷 困摹甫 掘澜 (TILE窜困 眉农)
////////////////////////////////////////////////////////////////////////////////////////
int Map::AOI_MovePoint( BYTE pMapLayer, _POINT_TILE pTile)
{
	//	--------------------------------------------------------------------------------
	//	秦寸 甘狼 沥焊甫 掘澜
	//	--------------------------------------------------------------------------------
	if( pMapLayer >= m_nMaxLayer )	return -1;

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


	//	--------------------------------------------------------------------------------
	//	--------------------------------------------------------------------------------
	int nLevel	= 0, i, j;
		
	int	nXFrom	= 0, nXTo =	0;
	int nYFrom	= 0, nYTo =	0;
	
	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 ++ )
			{						
				/* 
					框流 老荐 乐绰瘤 咯何 魄沥 (Tile 犬牢)
					- 框流老荐 乐绰 困摹 犬牢 
					- 救傈 瘤开捞 酒囱 版快 
				*/
				if( (_MAP[pMapLayer][i][j].nCheckBit & CHK_MOVE) == TRUE && (_MAP[pMapLayer][i][j].nCheckBit & CHK_SAFEZONE) == FALSE )
				{
					pTile.x	=	i;
					pTile.y	=	j;

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

		nLevel ++;

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

	return	nLevel;
}




////////////////////////////////////////////////////////////////////////////////////////
//	Item捞 MAP俊 积己 瞪锭 
//
////////////////////////////////////////////////////////////////////////////////////////
int Map::AOI_ItemCreate(CItem *pItem, _POINT_TILE pTile)
{
	if( !pItem ) return -1;
	
	//	--------------------------------------------------------------------------------
	//	秦寸 甘狼 沥焊甫 掘澜
	//	--------------------------------------------------------------------------------
	BYTE	nMapLayer =	pItem->m_nMapLayer;
	if( nMapLayer >= m_nMaxLayer )	return -1;

⌨️ 快捷键说明

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