2024-12-21 10:04:04 +08:00
# 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 ( ) ;
// <20> ӽ÷<D3BD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> θ<EFBFBD> <20> ȴ<EFBFBD> . (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> 101<30> <31> )
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: <20> ϴ<EFBFBD> <20> <EFBFBD> Ʈ<EFBFBD> ̹Ƿ<CCB9> <20> <> <EFBFBD> <EFBFBD> activate <20> ǵ<EFBFBD> <C7B5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( m_iActivateElementIndex ! = m_iNowActionElementIndex )
CmdAction ( " Activate " ) ;
// TODO: <20> <> ¿ <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ScanActor<6F> <72> <20> ؾ<EFBFBD> <20> <> . <20> ǾƱ<C7BE> <C6B1> п<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Scan <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <D9B8> <EFBFBD> <EFBFBD> <EFBFBD> <20> ؾ<EFBFBD> <D8BE> <EFBFBD> .
// <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> Ѵ <EFBFBD> .
DNVector ( DnActorHandle ) vlNeighboringActors ;
CDnActor : : ScanActor ( GetRoom ( ) , * GetPosition ( ) , m_fCheckRadius , vlNeighboringActors ) ;
if ( false = = vlNeighboringActors . empty ( ) )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <20> <> <EFBFBD> ͵<EFBFBD> <CDB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
set < DWORD > 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 <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> ༮<EFBFBD> <E0BCAE> <20> <> <EFBFBD> <EFBFBD> <20> ༮<EFBFBD> <E0BCAE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
vector < DWORD > vlNewMember ;
set_difference ( m_setAffectedActorsID . begin ( ) , m_setAffectedActorsID . end ( ) , setPrevAffectedActorsID . begin ( ) , setPrevAffectedActorsID . end ( ) ,
back_inserter ( vlNewMember ) ) ;
vector < DWORD > 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 )
{
// <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ߰<EFBFBD> ..
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 )
{
// <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> .
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;
//}
}