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

📄 npc.cpp

📁 韩国英雄王座倒闭后流出来部分源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			//啊鳖捞 乐瘤 臼栏搁 框流牢促.
			if(GetDistance(m_pGuardTarget) > m_nSightRange)
			{ 
				MoveTo( m_pGuardTarget );
				return;
			}


			//阿 拌凯 喊肺 瘤盔茄促.			
			if((m_pGuardTarget->m_nHP * 100.) / m_pGuardTarget->m_nMaxHP < 50 )
			{
				Heal(m_pGuardTarget);
				return;
			}

			//父老 焊龋窍绊磊 窍绰 措惑阑 鲍酚洒绰 磊啊 荤扼瘤搁 措扁肺 倒酒埃促.
			if(m_pGuardTarget->m_pTarget == NULL)
			{
				m_pGuardTarget	= NULL;
				m_nStatus		= STATUS_STAY;
				m_nStatusLevel	= STATLVL_CALM;

				return;
			}
			else if(IsAttackable(m_pGuardTarget->m_pTarget))	//傍拜茄促.
			{
				m_pTarget = m_pGuardTarget->m_pTarget;
				Attack(m_pTarget);
			}

			break;
*/
	}
}


////////////////////////////////////////////////////////////////////////////////////////
//	15固磐 郴狼 瘤开阑 烙狼肺 急沥茄促.
////////////////////////////////////////////////////////////////////////////////////////
_POINT_TILE	 NPC::RandomSelectRoamingArea(_POINT_TILE center)
{
	//	--------------------------------------------------------------------------------
	//	秦寸 甘狼 MAX X/Y Size沥焊甫 掘澜
	//
	//	-	NPC Load矫 Map包访 沥焊甫 鞍捞 涝仿矫糯
	//	--------------------------------------------------------------------------------
	int		nMaxX	=	g_pMap->MapConfig[m_nMapLayer].nMaxX;
	int		nMaxY	=	g_pMap->MapConfig[m_nMapLayer].nMaxY;
	

	_POINT_TILE nextRoam;

	int  x = BETWEEN( center.x + (rand() % 30 -15),0,(nMaxX-1) );
	int  y = BETWEEN( center.y + (rand() % 30 -15),0,(nMaxY-1) );
	

	nextRoam.x = x;
	nextRoam.y = y;

	// 捞悼 瘤开 困摹 焊沥 (哎荐 绝绰 镑牢 版快 哎荐 乐绰 Point肺 捞悼 矫糯)

	//	--------------------------------------------------------------------------------
	//	NOTENOTE: 2003-10-30 badajoa NPC 炮饭器飘 泅惑 狼缴瘤开 荐沥吝 
	//	--------------------------------------------------------------------------------

	if( g_pMap->AOI_MovePoint( m_nMapLayer, nextRoam )  == -1 )
	{
		nextRoam.x = center.x;
		nextRoam.y = center.y;
	}

	return nextRoam;
}

////////////////////////////////////////////////////////////////////////////////////////
//	困摹 捞悼 窃荐
//
//	-	内靛狼 弥利拳 累诀捞 鞘夸
////////////////////////////////////////////////////////////////////////////////////////
void NPC::MoveTo( _POINT_TILE target )
{	
	if(m_bHoldTurn || m_nMaxMoveTile == 0 )			return ;

	//	--------------------------------------------------------------------------------
	//	秦寸 甘狼 MAX X/Y Size沥焊甫 掘澜
	//
	//	-	NPC Load矫 Map包访 沥焊甫 鞍捞 涝仿矫糯
	//	--------------------------------------------------------------------------------
	int		nMaxX	=	g_pMap->MapConfig[m_nMapLayer].nMaxX;
	int		nMaxY	=	g_pMap->MapConfig[m_nMapLayer].nMaxY;

	_POINT	MoveTile;

	BYTE nNPC = MAP_MONSTER ;

	if(m_nClassType == MONSTER_SUMMON )
		nNPC = MAP_SUMMONNPC ;
		

	int nDeltaX = target.x - m_Tile.x;
	int nDeltaY = target.y - m_Tile.y;

	//	--------------------------------------------------------------------------------
	//	茄锅俊 框流老荐 乐绰 芭府 父怒 捞悼 矫糯 
	//	老窜篮 弥措 框流老荐 乐绰 m_nMaxMoveTile蔼阑 阑 劝侩窃
	//	--------------------------------------------------------------------------------
	if( abs( nDeltaX ) > m_nMaxMoveTile )
	{
		MoveTile.x = BETWEEN( m_Tile.x + ((nDeltaX>0)?m_nMaxMoveTile:-m_nMaxMoveTile),0,nMaxX-1);
	}
	else
	{
		MoveTile.x = BETWEEN( m_Tile.x + nDeltaX,0,nMaxX-1);
	}

	if( abs( nDeltaY ) > m_nMaxMoveTile )
	{
		MoveTile.y = BETWEEN( m_Tile.y + ((nDeltaY>0)?m_nMaxMoveTile:-m_nMaxMoveTile),0,nMaxY-1);
	}
	else
	{
		MoveTile.y = BETWEEN( m_Tile.y + nDeltaY,0,nMaxY-1);
	}

	//	--------------------------------------------------------------------------------
	//	捞悼 包访 
	//	--------------------------------------------------------------------------------
	m_MoveFrom.x	=	m_MoveTo.x;
	m_MoveFrom.y	=	m_MoveTo.y;


	//	--------------------------------------------------------------------------------
	//	AOI包府 Array俊 秦寸蔼 涝仿 饶 框流老 蔼阑 Setting矫糯
	//	--------------------------------------------------------------------------------
	int nReturn = g_pMap->AOI_NPCMove( this ,	MoveTile, nNPC );	// MAP俊辑 捞悼 矫糯 
	
	//	--------------------------------------------------------------------------------
	//	巩力 惯积矫 馆措 规氢栏肺 捞悼
	//	--------------------------------------------------------------------------------
	if( nReturn == -1 )
	{
		_POINT DeltaPoint;
		
		DeltaPoint.x	= MoveTile.x - m_Tile.x;
		DeltaPoint.y	= MoveTile.y - m_Tile.y;
			
		MoveTile.x		= m_Tile.x - DeltaPoint.x;
		MoveTile.y		= m_Tile.y - DeltaPoint.y;
	
		MoveTile.x		= BETWEEN_INT( MoveTile.x, 0, nMaxX ); 
		MoveTile.y		= BETWEEN_INT( MoveTile.y, 0, nMaxY );
		
		nReturn = g_pMap->AOI_NPCMove( this ,	MoveTile, nNPC );

		if( nReturn == -1 )
		{
			//	TRACE( "NPC MOVE 2瞒 矫档 角菩 %d\n", m_dwHandle );			
		}
	}
	
	g_pServer->PacketSend_NPCMove( this );		//	NPC捞悼 Packet阑 傈价 矫糯 
}



////////////////////////////////////////////////////////////////////////////////////////
//	困摹 捞悼 窃荐
//
////////////////////////////////////////////////////////////////////////////////////////
void NPC::TeleportTo( _POINT_TILE target )
{	

	if(m_bHoldTurn || m_nMaxMoveTile == 0 )			return ;

	//	--------------------------------------------------------------------------------
	//	秦寸 甘狼 MAX X/Y Size沥焊甫 掘澜
	//
	//	-	NPC Load矫 Map包访 沥焊甫 鞍捞 涝仿矫糯
	//	--------------------------------------------------------------------------------
	int		nMaxX	=	g_pMap->MapConfig[m_nMapLayer].nMaxX;
	int		nMaxY	=	g_pMap->MapConfig[m_nMapLayer].nMaxY;

	_POINT	MoveTile;

	BYTE nNPC = MAP_MONSTER ;

	if(m_nClassType == MONSTER_SUMMON )
		nNPC = MAP_SUMMONNPC ;
		

	int nDeltaX = target.x - m_Tile.x;
	int nDeltaY = target.y - m_Tile.y;

	//	--------------------------------------------------------------------------------
	//	茄锅俊 框流老荐 乐绰 芭府 父怒 捞悼 矫糯 
	//	老窜篮 弥措 框流老荐 乐绰 m_nMaxMoveTile蔼阑 阑 劝侩窃
	//	--------------------------------------------------------------------------------
	MoveTile.x = BETWEEN( m_Tile.x + nDeltaX,0,(nMaxX-1) );
	MoveTile.y = BETWEEN( m_Tile.y + nDeltaY,0,(nMaxY-1) );

	//	--------------------------------------------------------------------------------
	//	捞悼 包访 
	//	--------------------------------------------------------------------------------
	m_MoveFrom.x	=	m_MoveTo.x;
	m_MoveFrom.y	=	m_MoveTo.y;

	//	--------------------------------------------------------------------------------
	//	AOI包府 Array俊 秦寸蔼 涝仿 饶 框流老 蔼阑 Setting矫糯
	//	--------------------------------------------------------------------------------
	int nReturn = g_pMap->AOI_NPCMove( this ,	MoveTile, nNPC );	// MAP俊辑 捞悼 矫糯 
	
	if( nReturn != -1 )
		g_pServer->PacketSend_NPCMove( this );		//	NPC捞悼 Packet阑 傈价 矫糯 
}



////////////////////////////////////////////////////////////////////////////////////////
//	秦寸 困摹 菊率栏肺 捞悼 矫糯	
//
//		 1,-1 (6)	0, 1 (7)	1, 1 (8)
//		-1, 0 (3)	0, 0 (4)	1, 0 (5)
//		-1,-1 (0)	0,-1 (1)	1,-1 (2)
////////////////////////////////////////////////////////////////////////////////////////
const	_sPOINT	_NPCMOVE_TABLE_[9][9]	=	{	
	{ {-1,-1}, {-1, 0}, { 0,-1}, { 1,-1}, { 1,-1}, { 0, 1}, { 1, 0}, { 1, 1}, { 0, 0}	},	//	0
	{ { 0,-1}, {-1,-1}, { 1,-1}, {-1, 0}, { 1, 0}, { 1,-1}, { 1, 1}, { 0, 1}, { 0, 0}	},	//	1
	{ { 1,-1}, { 0,-1}, { 1, 0}, {-1,-1}, { 1, 1}, {-1,	0}, { 0, 1}, { 1,-1}, { 0, 0}	},	//	2
	{ {-1, 0}, { 1,-1}, {-1,-1}, { 0, 1}, { 0,-1}, { 1, 1}, { 1,-1}, { 0, 0}, { 1, 0},	},	//	3
	{ { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, { 0,	0}, { 0, 0}, { 0, 0}, { 0, 0}	},	//	4
	{ { 1, 0}, { 1,-1}, { 1, 1}, { 0,-1}, { 0, 1}, {-1,-1}, { 1,-1}, { 0, 0}, {-1, 0},	},	//	5
	{ { 1,-1}, { 0, 1}, {-1, 0}, { 1, 1}, {-1,-1}, { 1,	0}, { 0,-1}, { 1,-1}, { 0, 0}	},	//	6
	{ { 0, 1}, { 1,-1}, { 1, 1}, {-1, 0}, { 1, 0}, {-1,-1}, { 1,-1}, { 0,-1}, { 0, 0}	},	//	7
	{ { 1, 1}, { 0, 1}, { 1, 0}, { 1,-1}, { 1,-1}, {-1, 0}, { 0,-1}, {-1,-1}, { 0, 0}	}	//	8
};

////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
void NPC::MoveTo(CPlayer *pPlayer )
{
	_POINT_TILE MoveTile;

	//	--------------------------------------------------------------------------------
	//	捞悼 困摹甫 焊沥 风凭 
	//	--------------------------------------------------------------------------------
	int nDeltaX =	pPlayer->m_Tile.x	-	m_Tile.x;
	int nDeltaY =	pPlayer->m_Tile.y	-	m_Tile.y;

	int	 nTempMoveIndex = 0;

	//	--------------------------------------------------------------------------------
	//	X困摹 茫扁 
	//	--------------------------------------------------------------------------------
	if( nDeltaX < 0 )
		nTempMoveIndex	=	0;
	else if( nDeltaX > 0 )
		nTempMoveIndex	=	2;
	else
		nTempMoveIndex	=	1;

	//	--------------------------------------------------------------------------------
	//	Y困摹 焊沥 
	//	--------------------------------------------------------------------------------
	if( nDeltaY  < 0 )
		nTempMoveIndex	+=	0;
	else if( nDeltaY > 0 )
		nTempMoveIndex	+=	6;
	else
		nTempMoveIndex	+=	3;

	//	--------------------------------------------------------------------------------
	//	框流老 Point甫 掘澜
	//	--------------------------------------------------------------------------------
	for( int i=0; i<9; i++ )
	{
		MoveTile.x = pPlayer->m_Tile.x	- _NPCMOVE_TABLE_[nTempMoveIndex][i].x;		//	X困摹
		MoveTile.y = pPlayer->m_Tile.y	- _NPCMOVE_TABLE_[nTempMoveIndex][i].y;		//	Y困摹
		
		if( g_pMap->IsMoveable( m_nMapLayer,  MoveTile ) ) break;
	}

	MoveTo( MoveTile );		//	秦寸困摹肺 捞悼

	return  ; 
}


////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
void NPC::MoveToTarget(CPlayer *pPlayer )
{
	_POINT_TILE MoveTile;

	//	--------------------------------------------------------------------------------	
	//	捞悼 困摹甫 焊沥 风凭 
	//	--------------------------------------------------------------------------------
	int nDeltaX =	pPlayer->m_Tile.x	-	m_Tile.x;
	int nDeltaY =	pPlayer->m_Tile.y	-	m_Tile.y;

	int	 nTempMoveIndex = 0;

	//	--------------------------------------------------------------------------------
	//	X困摹 茫扁 
	//	--------------------------------------------------------------------------------
	if( nDeltaX < 0 )
		nTempMoveIndex	=	0;
	else if( nDeltaX > 0 )
		nTempMoveIndex	=	2;
	else
		nTempMoveIndex	=	1;

	//	--------------------------------------------------------------------------------
	//	Y困摹 焊沥 
	//	--------------------------------------------------------------------------------
	if( nDeltaY  < 0 )
		nTempMoveIndex	+=	0;
	else if( nDeltaY > 0 )
		nTempMoveIndex	+=	6;
	else
		nTempMoveIndex	+=	3;

	//	--------------------------------------------------------------------------------
	//	框流老 Point甫 掘澜
	//	--------------------------------------------------------------------------------
	for( int i=0; i<9; i++ )
	{
		MoveTile.x = pPlayer->m_Tile.x	- 2*_NPCMOVE_TABLE_[nTempMoveIndex][i].x;		//	X困摹
		MoveTile.y = pPlayer->m_Tile.y	- 2*_NPCMOVE_TABLE_[nTempMoveIndex][i].y;		//	Y困摹
		
		if( g_pMap->IsMoveable( m_nMapLayer,  MoveTile ) ) break;
	}

	MoveTo( MoveTile );		//	秦寸困摹肺 捞悼

	return  ; 
}

////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
void NPC::TeleportTo(CPlayer *pPlayer )
{
	_POINT_TILE MoveTile;

	//	--------------------------------------------------------------------------------	
	//	捞悼 困摹甫 焊沥 风凭 
	//	--------------------------------------------------------------------------------
	int nDeltaX =	pPlayer->m_Tile.x	-	m_Tile.x;
	int nDeltaY =	pPlayer->m_Tile.y	-	m_Tile.y;

	int	 nTempMoveIndex = 0;

	//	--------------------------------------------------------------------------------
	//	X困摹 茫扁 
	//	--------------------------------------------------------------------------------
	if( nDeltaX < 0 )
		nTempMoveIndex	=	0;
	else if( nDeltaX > 0 )
		nTempMoveIndex	=	2;
	else
		nTempMoveIndex	=	1;

	//	--------------------------------------------------------------------------------
	//	Y困摹 焊沥 
	//	--------------------------------------------------------------------------------
	if( nDeltaY  < 0 )
		nTempMoveIndex	+=	0;
	else if( nDeltaY > 0 )
		nTempMoveIndex	+=	6;
	else
		nTempMoveIndex	+=	3;

⌨️ 快捷键说明

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