本文整理汇总了C++中CMover::IsPlayer方法的典型用法代码示例。如果您正苦于以下问题:C++ CMover::IsPlayer方法的具体用法?C++ CMover::IsPlayer怎么用?C++ CMover::IsPlayer使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CMover
的用法示例。
在下文中一共展示了CMover::IsPlayer方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DamageToTarget
//
// nDmgCnt : 일반적으론 0 : 지속데미지를 사용할경우에 0이 아닌값이 들어온다.
//
void CSfx::DamageToTarget( int nDmgCnt, float fDmgAngle, float fDmgPower, int nMaxDmgCnt )
{
CMover* pObjSrc = (CMover*)prj.GetCtrl( m_idSrc );
CCtrl* pObjDest = prj.GetCtrl( m_idDest );
if( IsInvalidObj(pObjSrc) ) return; // 지금은 걍 리턴하지만 이렇게 실패한경우는 m_idSfxHit을 Clear해주는작업이 필요하다.
if( IsInvalidObj(pObjDest) ) return;
if( pObjDest->GetType() == OT_MOVER )
{
CMover* pMover = (CMover*) pObjDest;
#ifdef __CLIENT
PLAYSND( pMover->GetProp()->dwSndDmg2, &pMover->GetPos() ); // 마법류 맞을때 타격음.
#endif
#ifdef __CLIENT
// 쏜놈이 플레이어이거나 / 쏜놈은 플레이어가 아닌데 맞은놈이 플레이어일경우 전송
if( pObjSrc->IsActiveMover() || (pObjSrc->IsPlayer() == FALSE && pObjDest->IsActiveObj()) )
{
pMover->SetDmgCnt( 10 ); // 발사체 맞아도 이제 흔들린다,
g_DPlay.SendSfxHit( m_idSfxHit, m_nMagicPower, m_dwSkill, pObjSrc->GetId(), nDmgCnt, fDmgAngle, fDmgPower );
if( nMaxDmgCnt == 1 ) // 한방짜리 데미지만 id를 클리어 함.
m_idSfxHit = 0; // 0으로 해놔야 this가 삭제될때 SendSfxClear를 또 보내지 않는다.
}
#endif // __CLIENT
}
}
示例2: DestroyWall
void CCommonCtrl::DestroyWall( void )
{
#ifdef __WORLDSERVER
// 시전자의 사이킥월 생성정보에서 지워줌.
CMover *pAttacker = prj.GetMover( m_idAttacker );
if( IsValidObj(pAttacker) )
{
if( pAttacker->IsPlayer() )
{
for( int i = 0; i < 2; i ++ )
{
if( ((CUser *)pAttacker)->m_pWall[i] == this )
((CUser *)pAttacker)->m_pWall[i] = NULL;
}
}
}
Delete();
#endif // WorldServer
}
示例3: SetDestObj
//
// fRange = 도달범위. 디폴트는 0.0f은 상대방의 반경까지 붙는거다.
void CMover::SetDestObj( OBJID objid, float fRange, BOOL bSend )
{
#ifdef __WORLDSERVER
if( FALSE == IsPlayer() && m_idDest != objid )
m_nCorr = -1;
#else // __WORLDSERVER
if( bSend && IsActiveMover() && m_idDest != objid )
{
#ifdef __BS_ADJUST_SYNC
CMover* pTarget = prj.GetMover( m_idDest );
if( pTarget )
{
if( pTarget->IsPlayer( ) )
g_DPlay.SendPlayerBehavior(); // 새로운 Obj로 이동할경우 동기화 한번 맞춰주고....
}
#endif
g_DPlay.SendPlayerDestObj( objid, fRange );
m_nCorr = -1;
}
#endif // not __WORLDSERVER
m_idDest = objid;
m_fArrivalRange = fRange;
ClearDestPos();
#ifdef __WORLDSERVER
// 서버에서 SetDestObj를 실행하면 클라들에게 보내주는게 없어서 이걸 넣음.
if( bSend )
g_UserMng.AddMoverSetDestObj( this, objid, fRange, FALSE );
#endif // __WORLDSERVER
#ifdef __CLIENT
m_oaCmd = OBJACT_NONE; // CMD_ 시리즈를 거치지 않고 이것만 호출되는 경우는 Cmd를 해제시키자.
#endif // Client
// if( IsPlayer() )
// TRACE( "SetDestObj %08x\n", objid );
}
示例4: ProcessMoveArrival
//
//
// 클라이언트용
void CMover::ProcessMoveArrival( CCtrl *pObj )
{
// 클라이언트 처리
if( IsActiveMover() )
{
switch( m_oaCmd ) // 목표에 도착한 후의 명령 처리.
{
case OBJACT_USESKILL:
if( pObj->GetType() == OT_MOVER && ( m_SkillTimerStop || m_SkillTimer.TimeOut() ) )
{
CWorld *pWorld = GetWorld();
D3DXVECTOR3 vStart = GetPos(); vStart.y += 0.5f;
D3DXVECTOR3 vEnd = pObj->GetPos(); vEnd.y += 0.5f;
if( pWorld->IntersectObjLine( NULL, vStart, vEnd, FALSE, FALSE ) )
{
g_WndMng.PutString( prj.GetText( TID_GAME_BLOCKTARGETING ), NULL, prj.GetTextColor( TID_GAME_BLOCKTARGETING ) );
g_WndMng.m_pWndWorld->SetNextSkill( NEXTSKILL_NONE );
break;
}
PlayCombatMusic();
int nSkillIdx = GetCmdParam(0);
OBJID idTarget = (OBJID)GetCmdParam(1);
SKILLUSETYPE sutType = (SKILLUSETYPE)GetCmdParam(2);
if( (m_dwReqFlag & REQ_USESKILL) == 0 ) // 응답 요청중일땐 다시 보내선 안된다.
{
LPSKILL pSkill = GetSkill( 0, nSkillIdx ); // this가 가진 스킬중 nIdx에 해당하는 스킬을 꺼낸다.
if( pSkill == NULL )
{
Error( "CMD_SetUseSkill : %s skill(%d) not found", m_szName, nSkillIdx );
return; // skill not found
}
if( pSkill->dwSkill == SI_MAG_MAG_BLINKPOOL )
{
CWndWorld* pWndWorld;
pWndWorld = (CWndWorld*)g_WndMng.m_pWndWorld;
{
vStart = GetPos(); vStart.y += 1.0f;
vEnd = pWndWorld->m_vTelePos;
if( pWorld->IntersectObjLine( NULL, vStart, vEnd, FALSE, FALSE ) )
{
g_WndMng.m_pWndWorld->SetNextSkill( NEXTSKILL_NONE );
g_WndMng.PutString( prj.GetText( TID_GAME_BLOCKTARGETING ), NULL, prj.GetTextColor( TID_GAME_BLOCKTARGETING ) );
break;
}
}
if(g_pMoveMark!=NULL) g_pMoveMark->m_pSfxObj->m_nCurFrame=180;
CreateSfx(g_Neuz.m_pd3dDevice,XI_GEN_MOVEMARK01,pWndWorld->m_vTelePos);
}
// 뒤에서 공격가능한 스킬인지 판단한다
// 강탈 스킬은 뒤에서 사용가능(일단 클라에서 판정하자~)
if( pSkill->GetProp() && pSkill->GetProp()->dwAtkStyle == AS_BACK )
{
D3DXVECTOR3 v3Pos;
D3DXVECTOR3 v3PosSrc;
D3DXVECTOR3 v3PosDest;
// 방향벡터 1
v3PosSrc = pObj->GetPos() - GetPos();
D3DXVec3Normalize( &v3PosSrc, &v3PosSrc );
// 방향벡터 2
AngleToVectorXZ( &v3Pos, pObj->GetAngle(), 3.0f );
v3PosDest = (pObj->GetPos()+v3Pos) - pObj->GetPos();
D3DXVec3Normalize( &v3PosDest, &v3PosDest );
FLOAT fDir = D3DXVec3Dot( &v3PosSrc, &v3PosDest );
// 뒤가 아니면 스킬 사용 불가!
if( fDir < 0.3f )
{
g_WndMng.PutString( prj.GetText(TID_GAME_NEVERKILLSTOP) );
break;
}
}
#if __VER >= 8 // __S8_PK
// 카오에게 좋은 스킬을 사용할때는 Control 키를 눌러야 함
if( g_eLocal.GetState( EVE_PK ) )
{
CMover * pMover;
pMover = prj.GetMover( idTarget );
if( IsValidObj(pMover) && pMover != g_pPlayer && pMover->IsPlayer() && pMover->IsChaotic() )
if( pSkill->GetProp()->nEvildoing > 0 ) // 좋은 스킬
if( !(GetAsyncKeyState(VK_CONTROL) & 0x8000) )
break;
}
#endif // __VER >= 8 // __S8_PK
TRACE( "OBJACT_USESKILL %d\n", nSkillIdx );
#if __VER >= 8 // __S8_PK
//.........这里部分代码省略.........
示例5: _ProcessWall
// 싸이킥 월
void CCommonCtrl::_ProcessWall( void )
{
if( m_nCount == 0 )
{
#ifdef __CLIENT
m_pSfxModel = new CSfxModel;
m_pSfxModel2 = new CSfxModel;
m_pSfxModel->SetSfx( "sfx_sklpsypsychicwall02" );
m_pSfxModel2->SetSfx( "sfx_sklpsypsychicwall04" );
#endif
}
D3DXVECTOR3 vPos = GetPos();
#ifndef __CLIENT
CObj* pObj;
BOOL bApply;
#endif //__CLIENT
int nRange = 4;
// 일반적으로 fDepth가 가장 길기때문에 검사 영역은 fDepth로 했다.
float fDepth = 3;
if( fDepth <= 4.0f ) nRange = 4;
else if( fDepth <= 8.0f ) nRange = 8;
else if( fDepth <= 16.0f ) nRange = 16;
else nRange = 32;
#ifdef __WORLDSERVER
CMover *pAttacker = prj.GetMover( m_idAttacker );
if( IsInvalidObj( pAttacker ) ) // 일단 어태커가 사라지면 컨트롤도 사라지게 하자.
{
DestroyWall();
return;
}
int nMin = m_pAddSkillProp->dwAbilityMin + (pAttacker->GetLevel() + (pAttacker->GetInt() / 10) * (int)m_pAddSkillProp->dwSkillLvl);
int nMax = m_pAddSkillProp->dwAbilityMax + (pAttacker->GetLevel() + (pAttacker->GetInt() / 10) * (int)m_pAddSkillProp->dwSkillLvl);
int nDamage = xRandom( nMin, nMax );
#if __VER >= 9 // __SKILL_0706
int nMinPVP = m_pAddSkillProp->dwAbilityMinPVP + ( pAttacker->GetLevel() + ( pAttacker->GetInt() / 10 ) * (int)m_pAddSkillProp->dwSkillLvl );
int nMaxPVP = m_pAddSkillProp->dwAbilityMaxPVP + ( pAttacker->GetLevel() + ( pAttacker->GetInt() / 10 ) * (int)m_pAddSkillProp->dwSkillLvl );
int nDamagePVP = xRandom( nMinPVP, nMaxPVP );
#endif // __SKILL_0706
int nHitPoint = 0;
int nTargetHP = 0;
FOR_LINKMAP( GetWorld(), vPos, pObj, nRange, CObj::linkDynamic, GetLayer() )
{
bApply = FALSE;
if( pObj->GetType() == OT_MOVER ) // 대상이 무버일때만.
{
CMover *pTarget = (CMover *)pObj;
if( pTarget->IsPeaceful() == FALSE ) // NPC가 아닌경우만 적용
bApply = TRUE;
#if __VER >= 8 // #ifdef __JHMA_VER_8_5_1 // 8.5차 경비병 범위스킬 공격효과 불가로 수정 World
if( pAttacker->IsPlayer() && pAttacker->IsChaotic() == FALSE && pTarget->GetProp()->dwClass == RANK_GUARD )
bApply = FALSE;
#endif // #endif // __JHMA_VER_8_5_1 // 8.5차 경비병 범위스킬 공격효과 불가로 수정 World
if( bApply )
{
if( IsValidObj( pTarget ) && pTarget->IsLive() )
{
if( pObj->IsRangeObj( vPos, 1.0f ) )
{
if( IsValidObj(pAttacker) )
{
nTargetHP = pTarget->GetHitPoint();
nHitPoint = nTargetHP - nDamage;
if( nHitPoint > 0 )
{
pTarget->m_nHitPoint = nHitPoint;
g_UserMng.AddDamage( pTarget, pAttacker->GetId(), nDamage, AF_GENERIC );
}
else
{
pAttacker->SubExperience( pTarget ); // pTarget를 죽이고 난후의 m_pAttacker 경험치 처리.
pTarget->DropItemByDied( pAttacker ); // 몬스터였다면 아이템 드랍.
pAttacker->m_nAtkCnt = 0; // 타겟을 죽였으면 공격자의 어택카운트 클리어
pTarget->DoDie( pAttacker ); // pTarget 죽어라.
pTarget->m_nHitPoint = 0;
}
}
m_nLife ++; // 부딪힐때마다 카운트 올라감
if( m_nLife >= (int)(m_pAddSkillProp->dwSkillLvl / 2) )
DestroyWall();
// 뒤로 밀리기 처리.
#if __VER >= 10 // __AI_0711
if( pTarget->IsRank( RANK_MIDBOSS ) == FALSE )
#endif // __AI_0711
{
FLOAT fPushAngle = pTarget->GetAngle() + 180.0f;
FLOAT fPower = 0.825f;
AngleToVectorXZ( &pTarget->m_pActMover->m_vDeltaE, fPushAngle, fPower );
g_UserMng.AddPushPower( pTarget, pTarget->GetPos(), pTarget->GetAngle(), fPushAngle, fPower );
}
}
//.........这里部分代码省略.........
示例6: DoUsePartySkill
void CParty::DoUsePartySkill( u_long uPartyId, u_long uLeaderid, int nSkill )
{
#ifdef __WORLDSERVER
CUser* pMember = NULL;
int i;
if( IsLeader( uLeaderid ) && m_nKindTroup == 1 )
{
ItemProp* pItemProp = prj.GetPartySkill( nSkill );
if( pItemProp )
{
#ifndef __PARTYDEBUG
if( int( GetLevel() - pItemProp->dwReqDisLV ) >= 0 )
#endif // __PARTYDEBUG
{
#ifndef __PARTYDEBUG
#if __VER >= 12 // __JHMA_VER12_1 //12차 극단유료아이템
CUser *pLeadertmp = g_UserMng.GetUserByPlayerID( m_aMember[0].m_uPlayerId ); // 리더의 포인터
if( IsValidObj( pLeadertmp ) == FALSE )
return;
int nHasCashSkill = 0,nFPoint = 0;
if( pLeadertmp->HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP01 )
|| pLeadertmp->HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP02 )
|| pLeadertmp->HasBuff( BUFF_ITEM2, II_SYS_SYS_SCR_PARTYSKILLUP01_01 ) )
{
if( nSkill == ST_LINKATTACK
|| nSkill == ST_FORTUNECIRCLE
|| nSkill == ST_STRETCHING
|| nSkill == ST_GIFTBOX )
nHasCashSkill = 1;
}
DWORD dwSkillTime = pItemProp->dwSkillTime;
int nRemovePoint = pItemProp->dwExp;
nFPoint = int( GetPoint() - pItemProp->dwExp);
#if __VER >= 12 // __LORD
// 군주의 극단
// 군주가 극단장 으로써 극단스킬 사용 시,
// 지속시간 4배 증가(소모 포인트는 동일)
if( CSLord::Instance()->IsLord( uLeaderid ) )
dwSkillTime *= 4;
#endif // __LORD
if( nFPoint >= 0 )
#else
if( int( GetPoint() - pItemProp->dwExp) >= 0 )
#endif // //12차 극단유료아이템
#endif // __PARTYDEBUG
{
switch( nSkill )
{
case ST_CALL:
{
g_DPCoreClient.SendRemovePartyPoint( uPartyId, pItemProp->dwExp );
CUser *pLeader = g_UserMng.GetUserByPlayerID( m_aMember[0].m_uPlayerId ); // 리더의 포인터
if( IsValidObj( pLeader ) == FALSE )
break;
// 단장 중심으로 모여달라는 표시
for( i = 0; i < m_nSizeofMember; i ++ ) // 단장(0)에게는 보낼필요 없다.
{
pMember = g_UserMng.GetUserByPlayerID( m_aMember[i].m_uPlayerId );
// 단장 어라운드 지역에 있는 사람에게만 보낸다
if( IsValidObj( (CObj*)pMember ) )
pMember->AddPartySkillCall( pLeader->GetPos() ); // 각 멤버들에게 단장이 좌표를 전송함.
}
}
break;
case ST_BLITZ:
{
CUser *pLeader = g_UserMng.GetUserByPlayerID( m_aMember[0].m_uPlayerId ); // 리더의 포인터
if( IsValidObj( pLeader ) == FALSE )
break;
if( pLeader->m_idSetTarget != NULL_ID )
{
CMover *pT = prj.GetMover( pLeader->m_idSetTarget );
if( pT && !pT->IsPlayer() )
{
g_DPCoreClient.SendRemovePartyPoint( uPartyId, pItemProp->dwExp );
// 단장이 타겟으로 집중공격 표시
for( i = 0; i < m_nSizeofMember; i ++ )
{
pMember = g_UserMng.GetUserByPlayerID( m_aMember[i].m_uPlayerId );
if( IsValidObj( (CObj*)pMember ) )
{
if( m_nModeTime[PARTY_GIFTBOX_MODE] || m_nModeTime[PARTY_FORTUNECIRCLE_MODE] )
{
pMember->AddPartySkillBlitz( pLeader->m_idSetTarget ); // 각 멤버들에게 단장타겟으로 잡은 무버의 아이디를 보냄.
}
else
{
if( pLeader->IsNearPC( pMember ) )
pMember->AddPartySkillBlitz( pLeader->m_idSetTarget ); // 각 멤버들에게 단장타겟으로 잡은 무버의 아이디를 보냄.
}
}
}
}
else
//.........这里部分代码省略.........
示例7: if
//.........这里部分代码省略.........
pHitObj->SetJJim( pMover ); // 공격이 시작되면 타겟에다가 내가 찜했다는걸 표시.
pMover->OnAttackStart( pHitObj, dwMsg ); // 공격시작 핸들러.
pMover->m_nAtkCnt = 1; // 카운트 시작.
}
break;
// 공격 - 리턴값 -2는 클라로 부터 받은 명령을 완전 무시한다.
case OBJMSG_ATK1: // 공격 1
case OBJMSG_ATK2: // 공격 2
case OBJMSG_ATK3: // 공격 3
case OBJMSG_ATK4: // 공격 4
{
if( IsAction() )
return 0;
if( pMover->m_dwFlag & MVRF_NOATTACK )
return -2; // 공격금지 상태면 걍 리턴.
if( pMover->IsMode( NO_ATTACK_MODE ) )
return -2;
#ifdef __CLIENT
if( pMover->IsActiveMover() )
#endif
{
// 기본은 오른손 검사( 완드용 )
CItemElem* pItemElem = pMover->GetWeaponItem();
if( pItemElem && (pItemElem->GetProp()->dwItemKind3 == IK3_WAND || pItemElem->GetProp()->dwItemKind3 == IK3_BOW ) )
return -2;
}
CMover* pHitObj = prj.GetMover( nParam1 );
if( IsValidObj( (CObj*)pHitObj ) == FALSE )
return( -1 );
#ifdef __XUZHU
if( pMover->IsPlayer() )
{
int a = 0;
}
#endif // xuzhu
m_idTarget = (DWORD)nParam1; // 공격 타겟.
#ifdef __WORLDSERVER
if( !g_eLocal.GetState( EVE_STEAL ) )
{
if( pMover->IsSteal( pHitObj ) ) // pHitObj를 스틸하려하면 이공격은 무시.
return -2;
}
#endif
if( pHitObj->m_pActMover->IsDie() ) return( -1 );
if( GetState() & OBJSTA_ATK_ALL ) return( 0 ); // 이미 공격중이면 리턴
if( IsSit() ) // 앉아있는상태였으면 해제
ResetState( OBJSTA_MOVE_ALL );
if( GetDmgState() == OBJSTA_DMG ) // 피격 중 공격명령이면 피격 상태를 클리어 시킨다.
ResetState( OBJSTA_DMG_ALL );
else
if( GetState() & OBJSTA_DMG_ALL ) // 그외 피격동작은 다 취소
return -3;
if( IsStateFlag( OBJSTAF_COMBAT ) == FALSE )
SendActMsg( OBJMSG_MODE_COMBAT );
SendActMsg( OBJMSG_STOP_TURN ); // 공격할땐 턴을 정지시킴
SendActMsg( OBJMSG_STAND );
DWORD dwOption = MOP_SWDFORCE | MOP_NO_TRANS;
#ifdef __XSLOW1018
int nMin, nTemp;
pMover->GetHitMinMax( &nMin, &nTemp );