示例#1
0
void CSfx::Process()
{
#ifdef _DEBUG
	if( m_dwIndex == XI_SKILL_MAG_FIRE_HOTAIR01 )	// 디버깅 하려면 이걸 바꿔 쓰세요.
	{
		int a = 0;
	}
#endif
	m_nFrame++;
	if( m_nSec == 0 )	// 0은 1회 플레이후 종료.
	{
		if( m_pSfxObj->Process() )		// return true는 애니메이션 끝.
			Delete();
	}
	else
	{
		// 반복 애니메이션
		if( m_pSfxObj->Process() )		
			m_pSfxObj->m_nCurFrame = 0;
		if( m_nSec != -1 )		// 무한반복(-1)이 아니면
		{
			if( m_nFrame > ( m_nSec * 60 ) )	// 시간 체크를 한다.
				Delete();
		}
	}

#ifdef __CLIENT
	if(m_pSfxObj->m_pSfxBase != NULL)
	{
		for( int j=0; j<m_pSfxObj->m_pSfxBase->m_apParts.GetSize(); j++ )
		{
			if( m_pSfxObj->m_pSfxBase->Part(j)->m_nType != SFXPARTTYPE_MESH )
				continue;
			
			CModelObject* pMesh = NULL;
			
			pMesh = g_SfxMeshMng.Mesh( m_pSfxObj->m_pSfxBase->Part(j)->m_strTex );
			
			if( pMesh )
				pMesh->FrameMove();
		}
	}
#endif //__CLIENT

	if( m_idDest != NULL_ID )		// Dest가 지정되어 있을때.
	{
		CMover* pObjDest = (CMover*)prj.GetCtrl( m_idDest );
		if( IsValidObj( pObjDest ) )		// 유효한넘인가?
			m_vPosDest = pObjDest->GetPos();	// 당시 좌표를 계속 받아둠.  Invalid상태가 되면 마지막 좌표로 세팅된다.
		
		SetPos( m_vPosDest );	// 타겟에 오브젝트 발동.
#ifdef __CLIENT
	#if __VER >= 11 // __MA_VER11_06				// 확율스킬 효과수정 world,neuz
		if( m_dwIndex == XI_SKILL_PSY_HERO_STONE02 )
		{
			if( IsValidObj( pObjDest ) )		// 유효한넘인가?
			{
				DWORD dwTmpID =  pObjDest->GetRemoveSfxObj(XI_SKILL_PSY_HERO_STONE02 );
				if( dwTmpID && m_nFrame > 0)
				{
					Delete();
					return;
				}
			}
		}
	#endif // __MA_VER11_06				// 확율스킬 효과수정 world,neuz
		// 091022 mirchang - 프로텍션, 펜바리어 스킬 버프 해제 시 sfx 삭제
		if( m_dwIndex == XI_SKILL_MER_SHIELD_PANBARRIER02 )
		{
			if( IsValidObj( pObjDest ) )		// 유효한넘인가?
			{
				DWORD dwTmpID =  pObjDest->GetRemoveSfxObj( XI_SKILL_MER_SHIELD_PANBARRIER02 );
				if( dwTmpID && m_nFrame > 0)
				{
					Delete();
					return;
				}
			}
		}
		if( m_dwIndex == XI_SKILL_MER_SHIELD_PROTECTION02 )
		{
			if( IsValidObj( pObjDest ) )		// 유효한넘인가?
			{
				DWORD dwTmpID =  pObjDest->GetRemoveSfxObj( XI_SKILL_MER_SHIELD_PROTECTION02 );
				if( dwTmpID && m_nFrame > 0)
				{
					Delete();
					return;
				}
			}
		}
#endif	// __CLIENT
	} else
	{
		// Dest가 지정되어 있지 않을때. Src로...
		if( m_idSrc != NULL_ID )
		{
			CMover* pObjSrc = (CMover*)prj.GetCtrl( m_idSrc );
			if( IsValidObj( pObjSrc ) )			// 소스아이디가 지정되어 있으면
				SetPos( pObjSrc->GetPos() );	// 소스측에 이펙 발동.
			else
				Delete();
		}
	}
}