本文整理汇总了C++中CMover::IsFlyingNPC方法的典型用法代码示例。如果您正苦于以下问题:C++ CMover::IsFlyingNPC方法的具体用法?C++ CMover::IsFlyingNPC怎么用?C++ CMover::IsFlyingNPC使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CMover
的用法示例。
在下文中一共展示了CMover::IsFlyingNPC方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
BOOL CAIMonster2::SelectTarget()
{
CMover *pMover = GetMover();
CWorld *pWorld = GetWorld();
int nAttackFirstRange = pMover->GetProp()->m_nAttackFirstRange;
FLOAT fRadius = pMover->GetRadiusXZ(); // this의 반지름
FLOAT fRadiusSq = fRadius * fRadius; // 반지름Sq버전.
CMover *pLastAttacker = prj.GetMover( m_idLastAttacker );
if( IsValidObj( pLastAttacker ) && pLastAttacker->IsDie() )
{
m_idLastAttacker = NULL_ID;
pLastAttacker = NULL;
}
if( pLastAttacker == NULL ) // LastAttacker가 없어졌으면 타겟 다시 잡을 수 있도록 하자.
{
m_idLastAttacker = NULL_ID;
}
else
{
D3DXVECTOR3 vDist = pLastAttacker->GetPos() - pMover->GetPos();
FLOAT fDistSq = D3DXVec3LengthSq( &vDist ); // 목표지점까지의 거리.
if( fDistSq >= fRadiusSq * 10.0f ) // 라스트어태커가 내 반지름의 10배이상 떨어져있으면
{
// 타겟 포기
m_idLastAttacker = NULL_ID;
pLastAttacker = NULL;
}
}
m_idTarget = NULL_ID;
m_vTarget.x = m_vTarget.y = m_vTarget.z = 0; // 일단 이건 안쓰는걸로 하자.
if( m_idLastAttacker == NULL_ID ) // 아직 날 때린쉐리가 없다.
{
CMover* pTarget = NULL;
pTarget = ScanTarget( pMover, nAttackFirstRange, JOB_ALL );
if( pTarget )
{
if( pMover->IsFlyingNPC() == pTarget->m_pActMover->IsFly() ) // 위상이 같으면 OK
m_idTarget = pTarget->GetId();
else
return FALSE;
}
else
return FALSE;
}
else
{
// 날 때린 쉐리가 있다.
DWORD dwNum = xRandom( 100 ); // 0 ~ 99까지으 난수.
DWORD dwAggroRate = 50;
if( IsValidObj( pLastAttacker ) )
{
if( pLastAttacker->GetJob() == JOB_MERCENARY ) // 마지막으로 날때린 쉐리가 머서면 어그로 좀더 주자.
dwAggroRate = 70;
}
if( dwNum < dwAggroRate )
{
// dwAggroRate% 확률로 마지막으로 날 때린넘 공격.
m_idTarget = m_idLastAttacker; // 날 공격한 쉐리를 타겟으로 지정하자.
}
else if( dwNum < 75 )
{
// 50미터 반경내에서 가장 쎈넘을 잡자.
CMover *pTarget = ScanTargetStrong( pMover, (float)( nAttackFirstRange ) );
if( pTarget )
{
// this가 비행형 몬스터거나 || 타겟이 비행중이 아닐때만 공격.
if( pMover->IsFlyingNPC() == pTarget->m_pActMover->IsFly() )
m_idTarget = pTarget->GetId();
else
m_idTarget = m_idLastAttacker; // 타겟이 공격하기가 여의치 않으면 마지막으로 때린쉐리 공격하자.
}
else
m_idTarget = m_idLastAttacker; // 타겟이 공격하기가 여의치 않으면 마지막으로 때린쉐리 공격하자.
}
else if( dwNum < 100 )
{
// 오버힐하는 어시를 죽이자.
CMover *pTarget = ScanTargetOverHealer( pMover, (float)( nAttackFirstRange ) );
if( pTarget )
{
// this가 비행형 몬스터거나 || 타겟이 비행중이 아닐때만 공격.
if( pMover->IsFlyingNPC() == pTarget->m_pActMover->IsFly() )
m_idTarget = pTarget->GetId();
else
m_idTarget = m_idLastAttacker; // 타겟이 공격하기가 여의치 않으면 마지막으로 때린쉐리 공격하자.
}
else
m_idTarget = m_idLastAttacker; // 타겟이 공격하기가 여의치 않으면 마지막으로 때린쉐리 공격하자.
}
}
return TRUE;
}