本文整理汇总了C++中CMover::IsNPC方法的典型用法代码示例。如果您正苦于以下问题:C++ CMover::IsNPC方法的具体用法?C++ CMover::IsNPC怎么用?C++ CMover::IsNPC使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CMover
的用法示例。
在下文中一共展示了CMover::IsNPC方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
//.........这里部分代码省略.........
((CUser*)pMover)->AddSetDuel( pMover );
((CUser*)pAttacker)->AddSetDuel( pAttacker );
}
else if( pMover->m_nDuel == 2 && pMover->m_idDuelParty == pAttacker->m_idparty )
{
pMover->m_nDuelState = 300;
CMover *pMember;
CParty* pParty = g_PartyMng.GetParty( pMover->m_idparty );
if( pParty )
{
int i; for( i = 0; i < pParty->m_nSizeofMember; i ++ )
{
pMember = (CMover *)g_UserMng.GetUserByPlayerID( pParty->m_aMember[i].m_uPlayerId );
if( IsValidObj( pMember ) )
((CUser*)pMember)->AddSetDuel( pMover );
}
}
CParty* pParty2 = g_PartyMng.GetParty( pMover->m_idDuelParty );
if( pParty2 )
{
int i; for( i = 0; i < pParty2->m_nSizeofMember; i ++ )
{
pMember = (CMover *)g_UserMng.GetUserByPlayerID( pParty2->m_aMember[i].m_uPlayerId );
if( IsValidObj( pMember ) )
((CUser*)pMember)->AddSetDuel( pMover );
}
}
}
#endif // __WORLDSERVER
}
if( pAttacker->IsNPC() ) // 공격자가 몹.
{ // 날때린몹의 어태커가 나일경우는 죽기전에 클리어시켜준다.
if( pAttacker->m_idAttacker == pMover->GetId() ) // 공격한몹을 친사람이 나일경우는 스틸체크 해제.
{
pAttacker->m_idAttacker = NULL_ID;
pAttacker->m_idTargeter = NULL_ID;
}
}
}
switch( nParam1 )
{
#ifdef __BS_DEATH_ACTION
case OBJMSG_DAMAGE:
case OBJMSG_DAMAGE_FORCE:
{
int rAngle = 0;
int rPower = 0;
int nCase = rand() % 6;
if( nCase < 3 )
{
rAngle = -2;
rPower = 10 + rand() % 50;
}
else if( nCase < 4 )
{
rAngle = 10;
rPower = 10 + rand() % 50;
}
else if( nCase < 5 )
{
rAngle = 50;
rPower = 10 + rand() % 50;
示例2: OnDamageMsgC
DWORD CActionMover::OnDamageMsgC( DWORD dwMsg, CMover* pAttacker, DWORD dwAtkFlags, int nParam )
{
CMover* pMover = GetMover();
BOOL bValid = IsValidObj( pMover ) && IsValidObj( pAttacker );
if( !bValid || IsState( OBJSTA_DIE_ALL ) )
return 0;
if( IsSit() ) // 앉아있다가 맞으면 앉기해제 한다.
ResetState( OBJSTA_MOVE_ALL );
SendActMsg( OBJMSG_STAND );
// 날때린놈에 대한 정보를 기록함.
if( pMover->IsNPC() && pAttacker->IsPlayer() ) // 맞은놈은 NPC , 어태커가 플레이어 일때만 적용됨
{
pMover->m_idAttacker = pAttacker->GetId(); // 날 때린넘이 어떤놈인가를 기록함.
pMover->m_idTargeter = pAttacker->GetId();
}
pAttacker->m_idLastHitMover = pMover->GetId(); // 어태커가 마지막으로 때렸던넘이 나란걸 기록함.
if( (dwAtkFlags & AF_GENERIC) )
{
ItemProp* pAttackerProp = pAttacker->GetActiveHandItemProp();
D3DXVECTOR3 vLocal;
if( pAttackerProp && pAttackerProp->dwItemKind3 == IK3_YOYO )
{
vLocal = pMover->GetPos();
vLocal.y += 1.0f;
}
else
{
AngleToVectorXZ( &vLocal, pAttacker->GetAngle(), 1.0f );
vLocal += pMover->GetPos(); //gmpbigsun : 피격자 일반 effect 09_12_17
vLocal.y += 1.0f; // 2006/6/20 xuzhu
}
if( pAttackerProp && pAttackerProp->dwSfxObj3 != NULL_ID )
CreateSfx( g_Neuz.m_pd3dDevice, pAttackerProp->dwSfxObj3, vLocal );
if( pAttackerProp && pAttackerProp->dwSfxObj5 != NULL_ID ) //gmpbigsun: 공격자 일반 effect 09_12_17
{
vLocal = pAttacker->GetPos( );
CreateSfx( g_Neuz.m_pd3dDevice, pAttackerProp->dwSfxObj5, vLocal );
}
}
else if ( (dwAtkFlags & AF_MONSTER_SP_CLIENT) )
{
// hitter
ItemProp* pAttackerProp = prj.GetItemProp( nParam >> 16 );
assert( pAttackerProp );
DWORD dwSfxObj = pAttackerProp->dwSfxObj3; // gmpbigsun:특수공격에 이펙트가 있다면 3번사용.
if( dwSfxObj != NULL_ID )
CreateSfx( D3DDEVICE, dwSfxObj, pMover->GetPos() );
// attacker
dwSfxObj = pAttackerProp->dwSfxObj5;
if( NULL_ID != dwSfxObj )
CreateSfx( D3DDEVICE, dwSfxObj, pAttacker->GetPos() );
}
示例3: GetSkill
//.........这里部分代码省略.........
fLength -= 1.0f;
vPos = GetPos() + (vDirNor * fLength);
nAttr = GetWorld()->GetHeightAttribute( vPos.x, vPos.z );
// 캐릭터의 앞 뒤로 이동불가 일 경우 뒷쪽이 이동불가 해제 될때 까지 계속 계산하여 이동시킴
// 그러므로 텔레포트 스킬 범위를 넘어설 경우 원래 자리로 텔레포트 하도록 처리
D3DXVECTOR3 vTemp = vPos - GetPos();
float fTemp = D3DXVec3LengthSq( &vTemp );
if(fTemp > fMaxDistSq)
{
vPos = GetPos();
break;
}
}
}
if( IsActiveMover() && g_eLocal.GetState( EVE_SCHOOL ) ) // 학교이벤섭이면.
{
D3DXVECTOR3 v1, v2;
v1 = GetPos(); v1.y += 0.1f;
v2 = vPos; v2.y += 0.1f;
if( GetWorld()->IntersectObjLine( NULL, v1, v2, FALSE, FALSE ) ) // 텔레포트는 라인체크함.
{
g_WndMng.PutString( prj.GetText(TID_GAME_NOMOVING), NULL, prj.GetTextColor(TID_GAME_NOMOVING) );
g_WndMng.m_pWndWorld->SetNextSkill( NEXTSKILL_NONE );
return 0;
}
}
pWndWorld->m_vTelePos = vPos;
}
else
{
g_WndMng.m_pWndWorld->SetNextSkill( NEXTSKILL_NONE );
g_WndMng.PutString( prj.GetText(TID_GAME_NOMOVING), NULL, prj.GetTextColor(TID_GAME_NOMOVING) );
return 0;
}
}
break;
#endif // __CLIENT
}
// 타인에게 쓰는경우에만 검사...
if( idTarget != GetId() )
{
CMover *pTarget = prj.GetMover( idTarget );
if( IsValidObj(pTarget) )
{
if( pSkillProp->nEvildoing < 0 ) // 나쁜 스킬은
if( IsAttackAble(pTarget) == FALSE ) // 공격허용이 되지 않으면 사용할 수 없음.
return 0;
if( pSkill->dwSkill == SI_ASS_HEAL_RESURRECTION ) // 부활을 사용했을때
{
if( pTarget->IsNPC() || pTarget->IsDie() == FALSE ) // 상대가 NPC거나 상대가 죽어있지 않다면 취소
return 0;
} else
{
if( pTarget->IsDie() ) // 부활이 아닌 스킬을 사용했을때 상대가 죽어있으면 사용안됨.
return 0;
}
}
}
// 타겟 근접 방식.
switch( pSkillProp->dwExeTarget )
{
case EXT_SELFCHGPARAMET: // 시전자 자신에게 사용하는 종류
idTarget = GetId(); // 타겟을 자기자신으로 설정.
SetDestObj( idTarget, fArrivalRange, TRUE ); // 이동할 목표물을 idTarget으로 설정. << 이게 왜 필요하지? ㅡ.ㅡ?
break;
case EXT_MAGICATKSHOT:
case EXT_MAGICATK: // 원거리에서 마법으로 타겟을 공격
case EXT_MAGICSHOT:
if( idTarget == NULL_ID ) return 0; // 타겟이 없거나 유효하지 않으면 실패.
SetDestObj( idTarget, fArrivalRange, TRUE ); // 이동할 목표물을 idTarget으로 설정. 다가가는 범위는 fArrivalRange값으로..
break;
case EXT_ANOTHERWITH: // 나 혹은 다른사람에게 시전
if( idTarget == NULL_ID ) // 타겟이 잡혀있지 않으면
idTarget = GetId(); // 자신을 타겟으로 잡음
SetDestObj( idTarget, fArrivalRange, TRUE ); // 이동할 목표물을 idTarget으로 설정.
break;
case EXT_AROUNDATK: // 내 주위적들을 대상.
idTarget = GetId(); // 타겟을 자기자신으로 설정.
SetDestObj( idTarget, fArrivalRange, TRUE ); // 이동할 목표물을 idTarget으로 설정.
break;
case EXT_OBJCHGPARAMET: // 타인에게 사용
default: // 그외는 모두 근접하자.
if( idTarget == NULL_ID ) return 0; // 타겟이 없거나 유효하지 않으면 실패.
SetDestObj( idTarget, fArrivalRange, TRUE ); // 이동할 목표물을 idTarget으로 설정.
break;
}
ClearActParam();
SetCmd( OBJACT_USESKILL, nSkillIdx, idTarget, sutType ); // 사정거리가 되었을때 실행할 명령 셋팅.
TRACE( "\n)CMD_SetUseSkill\n" );
return 1;
}