#include "StdAfx.h" #include "DnWorldSkillUserProp.h" #include "DnSkill.h" CDnWorldSkillUserProp::CDnWorldSkillUserProp(CMultiRoom* pRoom) : CDnWorldActProp( pRoom ), m_iUseType( ONCE ), m_fCheckRadius( 0.0f ), m_iActivateElementIndex( -1 ), m_iIdleElementIndex(0), m_iNowActionElementIndex(0) { } CDnWorldSkillUserProp::~CDnWorldSkillUserProp(void) { } bool CDnWorldSkillUserProp::Initialize( CEtWorldSector *pParentSector, const char *szPropName, EtVector3 &vPos, EtVector3 &vRotate, EtVector3 &vScale ) { if( CDnWorldActProp::Initialize( pParentSector, szPropName, vPos, vRotate, vScale ) == false ) return false; if( m_hMonster ) *m_hMonster->GetMatEx() = *GetMatEx(); return true; } bool CDnWorldSkillUserProp::InitializeTable(int nTableID ) { if( CDnWorldActProp::InitializeTable( nTableID ) == false ) return false; if( GetData() ) { SkillUserStruct* pStruct = (SkillUserStruct*)GetData(); // Àӽ÷Π°Á °íºí¸° ¾×ÅÍ Çϳª ¸¸µé¾îµÎ¸é µÈ´Ù. (¸ó½ºÅÍ Å×À̺í 101¹ø) int iMonsterTableID = 101; int iSkillID = pStruct->SkillTableID; int iSkillLevel = pStruct->SkillLevel; m_fCheckRadius = pStruct->fRadius; m_iUseType = pStruct->UseType; } return true; } bool CDnWorldSkillUserProp::CreateObject() { bool bResult = CDnWorldActProp::CreateObject(); m_iIdleElementIndex = GetElementIndex( "Idle" ); m_iActivateElementIndex = GetElementIndex( "Activate" ); return bResult; } void CDnWorldSkillUserProp::Process( LOCAL_TIME LocalTime, float fDelta ) { *(m_hMonster->GetMatEx()) = m_Cross; m_iNowActionElementIndex = GetElementIndex( GetCurrentAction() ); // TODO: ÀÏ´Ü Å×½ºÆ®À̹ǷΠ°ðÀå activate µÇµµ·Ï ÇÏÀÚ. if( m_iActivateElementIndex != m_iNowActionElementIndex ) CmdAction( "Activate" ); // TODO: ¾î¿ ¼ö ¾øÀÌ ¸Å ÇÁ·¹ÀÓ ScanActor¸¦ ÇØ¾ß ÇÔ. ÇǾƱ¸ºÐ¿¡ µû¶ó Scan ÇÏ´Â °ÍÀÌ ´Ù¸£µµ·Ï ÇØ¾ßÇÔ. // ÀÏ´Ü ÇöÀç´Â ¹üÀ§ üũ·Î ¿À¶ó¿Í °°Àº ¿ªÇÒÀ» Çϵµ·Ï ÇÑ´Ù. DNVector(DnActorHandle) vlNeighboringActors; CDnActor::ScanActor( GetRoom(), *GetPosition(), m_fCheckRadius, vlNeighboringActors ); if( false == vlNeighboringActors.empty() ) { // ¿µÇâ ¹Þ´Â ¾×Å͵éÀ» °»½ÅÇÔ set setPrevAffectedActorsID = m_setAffectedActorsID; m_setAffectedActorsID.clear(); for( int i = 0; i < (int)vlNeighboringActors.size(); ++i ) m_setAffectedActorsID.insert( vlNeighboringActors.at(i)->GetUniqueID() ); switch( m_iUseType ) { case ONCE: { } break; case CONTINUOUS: { // set ÀÇ Â÷ÁýÇÕÀ¸·Î »õ·Î µé¾î°£ ³à¼®°ú ºüÁø ³à¼®µéÀ» °ñ¶ó³¿. vector vlNewMember; set_difference( m_setAffectedActorsID.begin(), m_setAffectedActorsID.end(), setPrevAffectedActorsID.begin(), setPrevAffectedActorsID.end(), back_inserter(vlNewMember) ); vector vlOutMember; set_difference( setPrevAffectedActorsID.begin(), setPrevAffectedActorsID.end(), m_setAffectedActorsID.begin(), m_setAffectedActorsID.end(), back_inserter(vlOutMember) ); int iNumNewMember = (int)vlNewMember.size(); for( int iMember = 0; iMember < iNumNewMember; ++iMember ) { // ½ºÅ³ÀÌ °®°í ÀÖ´Â »óÅÂÈ¿°ú Ãß°¡.. DnActorHandle hNewMember = CDnActor::FindActorFromUniqueID( GetRoom(), vlNewMember.at(iMember) ); if( hNewMember ) { DWORD dwNumStateEffect = m_hSkill->GetStateEffectCount(); for( DWORD dwStateEffect = 0; dwStateEffect < dwNumStateEffect; ++dwStateEffect ) { const CDnSkill::StateEffectStruct* pSE = m_hSkill->GetStateEffectFromIndex( dwStateEffect ); hNewMember->CmdAddStateEffect( m_hSkill->GetInfo(), (STATE_BLOW::emBLOW_INDEX)pSE->nID, -1/*SE.nDurationTime*/, pSE->szValue.c_str() ); } } } int iNumOutMember = (int)vlOutMember.size(); for( int iMember = 0; iMember < iNumOutMember; ++iMember ) { // ½ºÅ³ÀÌ °®°í ÀÖ´Â »óÅÂÈ¿°ú Á¦°Å. DnActorHandle hOutMember = CDnActor::FindActorFromUniqueID( GetRoom(), vlOutMember.at(iMember) ); if( hOutMember ) { DWORD dwNumStateEffect = m_hSkill->GetStateEffectCount(); for( DWORD dwStateEffect = 0; dwStateEffect < dwNumStateEffect; ++dwStateEffect ) { const CDnSkill::StateEffectStruct* pSE = m_hSkill->GetStateEffectFromIndex( dwStateEffect ); hOutMember->CmdRemoveStateEffect( (STATE_BLOW::emBLOW_INDEX)pSE->nID ); //hOutMember->DelStateBlow( (STATE_BLOW::emBLOW_INDEX)SE.nID ); } } } } break; } } } void CDnWorldSkillUserProp::OnSignal( SignalTypeEnum Type, void* pPtr, LOCAL_TIME LocalTime, LOCAL_TIME SignalStartTime, LOCAL_TIME SignalEndTime, int nSignalIndex ) { //switch( Type ) //{ // case STE_UsePropSkill: // { // CmdAction( "Activate" ); // } // break; //} }