2024-12-21 10:04:04 +08:00
# include "StdAfx.h"
# include "DnWorldMultiDurabilityProp.h"
# include "DnStateBlow.h"
# include "DnTableDB.h"
# include "DnPlayerActor.h"
# include "DnProjectile.h"
# include "TaskManager.h"
# include "DnGameTask.h"
# include "DnPropState.h"
# include "DnPropCondition.h"
# include "DnPropStateDoAction.h"
# include "DnPropStateTrigger.h"
# include "DnPropCondiDurability.h"
# include "DnPropActionCondition.h"
# include "DnPropCondiSubDurability.h"
# include "DnMonsterActor.h"
CDnWorldMultiDurabilityProp : : CDnWorldMultiDurabilityProp ( CMultiRoom * pRoom ) : CDnWorldBrokenProp ( pRoom ) , m_iNowStateIndex ( 0 ) , m_pActivateState ( NULL )
{
}
CDnWorldMultiDurabilityProp : : ~ CDnWorldMultiDurabilityProp ( void )
{
ReleasePostCustomParam ( ) ;
}
bool CDnWorldMultiDurabilityProp : : Initialize ( CEtWorldSector * pParentSector , const char * szPropName , EtVector3 & vPos , EtVector3 & vRotate , EtVector3 & vScale )
{
// <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> BrokenProp <20> <> Initialize <20> <> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> <> phase <20> <> <EFBFBD> <EFBFBD> fsm <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
if ( m_hMonster )
* m_hMonster - > GetMatEx ( ) = * GetMatEx ( ) ;
bool bResult = CDnWorldActProp : : Initialize ( pParentSector , szPropName , vPos , vRotate , vScale ) ;
if ( ! bResult )
return false ;
// <20> ϴ<EFBFBD> <20> <EFBFBD> Ʈ
SetActionQueue ( " Activate " , 0 , 3.0f , 0.0f ) ;
return true ;
}
void CDnWorldMultiDurabilityProp : : _InitializeFSM ( void )
{
// <20> ʱ idle <20> <> <EFBFBD> <EFBFBD> . Activate <20> <> <EFBFBD> °<EFBFBD> <20> Ǹ<EFBFBD> <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> .
CDnPropState * pIdleState = CDnPropState : : Create ( GetMySmartPtr ( ) , CDnPropState : : NORMAL ) ;
m_pFSM - > AddState ( pIdleState ) ;
// <20> ܺ<EFBFBD> Ʈ<> <C6AE> <EFBFBD> ſ <EFBFBD> <C5BF> <EFBFBD> Activate <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ۵ <EFBFBD> <DBB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
CDnPropState * pActivateState = CDnPropState : : Create ( GetMySmartPtr ( ) , CDnPropState : : NORMAL ) ;
m_pFSM - > AddState ( pActivateState ) ;
m_pActivateState = pActivateState ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> Ǿ<EFBFBD> <20> μ<EFBFBD> <CEBC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ<> <C6AE> <EFBFBD> Ÿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> Broken <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
CDnPropState * pTriggerState = CDnPropState : : Create ( GetMySmartPtr ( ) , CDnPropState : : TRIGGER ) ;
m_pFSM - > AddState ( pTriggerState ) ;
CDnPropState * pBrokenActionState = CDnPropState : : Create ( GetMySmartPtr ( ) , CDnPropState : : DO_ACTION ) ;
m_pFSM - > AddState ( pBrokenActionState ) ;
m_pBrokenActionState = static_cast < CDnPropStateDoAction * > ( pBrokenActionState ) ;
m_pTriggerActionState = static_cast < CDnPropStateTrigger * > ( pTriggerState ) ;
m_pTriggerActionState - > SetFuncName ( " CDnWorldProp::OnBrokenProp " ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
CDnPropCondition * pToActivate = CDnPropCondition : : Create ( GetMySmartPtr ( ) , CDnPropCondition : : ACTION_CHECK ) ; // <20> ۵ <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
static_cast < CDnPropActionCondition * > ( pToActivate ) - > SetActionName ( " Activate " ) ;
m_pFSM - > AddCondition ( pToActivate ) ;
CDnPropCondition * pToIdle = CDnPropCondition : : Create ( GetMySmartPtr ( ) , CDnPropCondition : : ACTION_CHECK ) ; // idle <20> <EFBFBD> <D7BC> ̸<EFBFBD> idle <20> <> <EFBFBD> ·<EFBFBD> .
static_cast < CDnPropActionCondition * > ( pToIdle ) - > SetActionName ( " Idle " ) ;
m_pFSM - > AddCondition ( pToIdle ) ;
// <20> ܺ<EFBFBD> Ʈ<> <C6AE> <EFBFBD> ſ <EFBFBD> <C5BF> <EFBFBD> Activate <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ۵ <EFBFBD> <DBB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> ι <EFBFBD> ° <20> <> <EFBFBD> ·<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
pIdleState - > AddTransitState ( pActivateState , pToActivate ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> ϴ<EFBFBD> <20> <> ü. -> Ʈ<> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ·<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
CDnPropCondition * pDurabilityCondition = CDnPropCondition : : Create ( GetMySmartPtr ( ) , CDnPropCondition : : COMPARE_DURABILITY ) ;
m_pFSM - > AddCondition ( pDurabilityCondition ) ;
static_cast < CDnPropCondiDurability * > ( pDurabilityCondition ) - > Initialize ( 0 , CDnPropCondiDurability : : LESS_EQUAL ) ;
// Ʈ<> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> Broken <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> ·<EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> ƹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> NULL <20> <> <EFBFBD> <EFBFBD> <20> <> ü.
CDnPropCondition * pNULLCondition = CDnPropCondition : : Create ( GetMySmartPtr ( ) , CDnPropCondition : : NULL_CONDITION ) ;
m_pFSM - > AddCondition ( pNULLCondition ) ;
// Ʈ<> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ٷ<EFBFBD> <20> ƹ<EFBFBD> <20> <> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> brokenstate <20> <> <20> Ѿ<D1BE> <EEB0A3> .
m_pTriggerActionState - > AddTransitState ( m_pBrokenActionState , pNULLCondition ) ;
for ( int i = 0 ; i < ( int ) m_vlStateInfos . size ( ) ; + + i )
{
S_STATE_INFO & StateInfo = m_vlStateInfos . at ( i ) ;
//// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̹Ƿ<CCB9> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> .
//int iSubDurCheckIndex = i - 1;
//if( iSubDurCheckIndex < 0 )
// iSubDurCheckIndex = (int)m_vlStateInfos.size() - 1;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> ǰ<EFBFBD> <20> ̾<EFBFBD> <CCBE> ֱ<EFBFBD> .
CDnPropState * pState = CDnPropState : : Create ( GetMySmartPtr ( ) , CDnPropState : : DO_ACTION ) ;
m_pFSM - > AddState ( pState ) ;
static_cast < CDnPropStateDoAction * > ( pState ) - > AddActionName ( StateInfo . pActionNameWhenSubDurabilityZero ) ;
// <20> <> Ȱ<EFBFBD> <C8B0> <20> <> <EFBFBD> ·<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̵ǰ<CCB5> <20> <> <EFBFBD> <EFBFBD> .
pState - > AddTransitState ( pIdleState , pToIdle ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> Ǿ<EFBFBD> <20> μ<EFBFBD> <CEBC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ٷ<EFBFBD> <20> μ<EFBFBD> <CEBC> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ·<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
pState - > AddTransitState ( m_pTriggerActionState , pDurabilityCondition ) ; ;
if ( 1 = = i )
{
// <20> ܺ<EFBFBD> Ʈ<> <C6AE> <EFBFBD> ſ <EFBFBD> <C5BF> <EFBFBD> Activate <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ۵ <EFBFBD> <DBB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> ̹<EFBFBD> Activate <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̹Ƿ<CCB9>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̵<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ι <EFBFBD> ° <20> <> <EFBFBD> ·<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> °<EFBFBD> <20> ѹ<EFBFBD> <D1B9> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǹ<EFBFBD> <20> <EFBFBD> <D7B6> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> Ϳ <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> º<EFBFBD> <C2BA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̼<EFBFBD> <CCBC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ȴ<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
CDnPropCondiSubDurability * pSubDurabilityCondition =
static_cast < CDnPropCondiSubDurability * > ( CDnPropCondition : : Create ( GetMySmartPtr ( ) , CDnPropCondition : : COMPARE_SUB_DURABILITY ) ) ;
m_pFSM - > AddCondition ( pSubDurabilityCondition ) ;
pSubDurabilityCondition - > Initialize ( 0 , 0 , CDnPropCondiSubDurability : : LESS_EQUAL ) ;
pActivateState - > AddTransitState ( pState , pSubDurabilityCondition ) ;
}
if ( 0 < i )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ·<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> ߰<EFBFBD> .
CDnPropState * pPrevState = m_vlStateInfos . at ( i - 1 ) . pState ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
CDnPropCondiSubDurability * pSubDurabilityCondition =
static_cast < CDnPropCondiSubDurability * > ( CDnPropCondition : : Create ( GetMySmartPtr ( ) , CDnPropCondition : : COMPARE_SUB_DURABILITY ) ) ;
m_pFSM - > AddCondition ( pSubDurabilityCondition ) ;
pSubDurabilityCondition - > Initialize ( 0 , i - 1 , CDnPropCondiSubDurability : : LESS_EQUAL ) ;
pPrevState - > AddTransitState ( pState , pSubDurabilityCondition ) ;
}
// <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ٽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> 1<> <31> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> ߰<EFBFBD> .
if ( i = = ( int ) m_vlStateInfos . size ( ) - 1 )
{
CDnPropState * pFirstState = m_vlStateInfos . front ( ) . pState ;
CDnPropCondiSubDurability * pSubDurabilityCondition =
static_cast < CDnPropCondiSubDurability * > ( CDnPropCondition : : Create ( GetMySmartPtr ( ) , CDnPropCondition : : COMPARE_SUB_DURABILITY ) ) ;
m_pFSM - > AddCondition ( pSubDurabilityCondition ) ;
pSubDurabilityCondition - > Initialize ( 0 , i , CDnPropCondiSubDurability : : LESS_EQUAL ) ;
pState - > AddTransitState ( pFirstState , pSubDurabilityCondition ) ;
}
StateInfo . pState = pState ;
}
m_pFSM - > SetEntryState ( pIdleState ) ;
}
bool CDnWorldMultiDurabilityProp : : InitializeTable ( int nTableID )
{
if ( CDnWorldActProp : : InitializeTable ( nTableID ) = = false ) return false ;
bool bResult = false ;
if ( GetData ( ) )
{
MultiDurabilityBrokenPropStruct * pStruct = ( MultiDurabilityBrokenPropStruct * ) GetData ( ) ;
int nMainDurability = pStruct - > nMainDurability ;
int nItemDropGroupTableID = pStruct - > nItemDropGroupTableID ;
int nMonsterTableID = pStruct - > nMonsterTableID ;
int nSkillTableID = pStruct - > nSkillTableID ;
int nSkillLevel = pStruct - > nSkillLevel ;
bResult = InitializeMonsterActorProp ( nMonsterTableID ) ;
if ( bResult )
{
m_SkillComponent . Initialize ( nSkillTableID , nSkillLevel ) ;
m_nDurability = nMainDurability ;
// <20> ϴ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> ..
SetAction ( " Idle " , 0.0f , 0.0f ) ;
if ( - 1 ! = m_nDurability )
{
if ( 0 = = m_nDurability ) m_nDurability = 1 ;
m_nItemDropGroupTableID = pStruct - > nItemDropGroupTableID ;
if ( m_nItemDropGroupTableID > 0 )
{
CDnDropItem : : CalcDropItemList ( GetRoom ( ) , Dungeon : : Difficulty : : Max , m_nItemDropGroupTableID , m_VecDropItemList ) ;
if ( m_VecDropItemList . empty ( ) ) {
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> α <EFBFBD>
// g_pLogConnection->QueryLogStage(GetRoom()->GetRoomID(), pTask->GetMapTableID(), 0, 0, nTableID); // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> α <EFBFBD> 090226
}
else {
for ( DWORD i = 0 ; i < m_VecDropItemList . size ( ) ; i + + ) {
# if defined(PRE_ADD_STAGE_CLEAR_ENCHANT_REWARD)
if ( CDnDropItem : : PreInitializeItem ( GetRoom ( ) , m_VecDropItemList [ i ] . nItemID , m_VecDropItemList [ i ] . nEnchantID ) = = false )
# else // #if defined(PRE_ADD_STAGE_CLEAR_ENCHANT_REWARD)
if ( CDnDropItem : : PreInitializeItem ( GetRoom ( ) , m_VecDropItemList [ i ] . nItemID ) = = false )
# endif // #if defined(PRE_ADD_STAGE_CLEAR_ENCHANT_REWARD)
{
m_VecDropItemList . erase ( m_VecDropItemList . begin ( ) + i ) ;
i - - ;
continue ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> α <EFBFBD>
// g_pLogConnection->QueryLogStage(GetRoom()->GetRoomID(), pTask->GetMapTableID(), 0, m_VecDropItemList[i].nItemID, nTableID); // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> α <EFBFBD> 090226
}
}
}
}
S_STATE_INFO StateInfo ;
StateInfo . pActionNameWhenSubDurabilityZero = pStruct - > szActionName_SubDurabilityOne ;
StateInfo . iOriginalDurability = StateInfo . iNowDurability = pStruct - > nSubDurability_One ;
m_vlStateInfos . push_back ( StateInfo ) ;
StateInfo . pActionNameWhenSubDurabilityZero = pStruct - > szActionName_SubDurabilityTwo ;
StateInfo . iOriginalDurability = StateInfo . iNowDurability = pStruct - > nSubDurability_Two ;
m_vlStateInfos . push_back ( StateInfo ) ;
StateInfo . pActionNameWhenSubDurabilityZero = pStruct - > szActionName_SubDurabilityThree ;
StateInfo . iOriginalDurability = StateInfo . iNowDurability = pStruct - > nSubDurability_Three ;
m_vlStateInfos . push_back ( StateInfo ) ;
StateInfo . pActionNameWhenSubDurabilityZero = pStruct - > szActionName_SubDurabilityFour ;
StateInfo . iOriginalDurability = StateInfo . iNowDurability = pStruct - > nSubDurability_Four ;
m_vlStateInfos . push_back ( StateInfo ) ;
// <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> BrokenProp <20> <> Initialize <20> <> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> <> <20> <> <EFBFBD> º<EFBFBD> <C2BA> <EFBFBD> fsm <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
_InitializeFSM ( ) ;
}
}
return bResult ;
}
int CDnWorldMultiDurabilityProp : : GetSubDurability ( int iIndex )
{
int iResult = 0 ;
if ( iIndex < ( int ) m_vlStateInfos . size ( ) )
{
iResult = m_vlStateInfos . at ( iIndex ) . iNowDurability ;
}
return iResult ;
}
void CDnWorldMultiDurabilityProp : : OnFSMStateEntry ( const TDnFSMState < DnPropHandle > * pState )
{
for ( int i = 0 ; i < ( int ) m_vlStateInfos . size ( ) ; + + i )
{
const S_STATE_INFO & StateInfo = m_vlStateInfos . at ( i ) ;
if ( StateInfo . pState = = pState )
{
m_iNowStateIndex = i ;
break ;
}
}
}
void CDnWorldMultiDurabilityProp : : CalcDamage ( CDnDamageBase * pHitter , CDnDamageBase : : SHitParam & HitParam )
{
if ( m_bDestroy = = true ) return ;
if ( m_bBroken ) return ;
m_pLastHitObject = pHitter ;
m_LastDamageTime = HitParam . RemainTime ;
m_nLastHitUniqueID = HitParam . iUniqueID ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
int iDurabilityAttack = ( int ) ( HitParam . fDurability * 100.f ) ;
_ASSERT ( 0 < = m_iNowStateIndex & & m_iNowStateIndex < ( int ) m_vlStateInfos . size ( ) ) ;
S_STATE_INFO & StateInfo = m_vlStateInfos . at ( m_iNowStateIndex ) ;
StateInfo . iNowDurability - = iDurabilityAttack ;
m_nDurability - = iDurabilityAttack ;
// NOTE: Ʈ<> <C6AE> <EFBFBD> ſ <EFBFBD> <C5BF> <EFBFBD> IsBroken() <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .. <20> ٸ<EFBFBD> <20> Լ<EFBFBD> <D4BC> 鵵 üũ<C3BC> غ<EFBFBD> <D8BA> <EFBFBD> <20> ҵ<EFBFBD> .
// Ʈ<> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> <> Ȳ<EFBFBD> <C8B2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڸ<EFBFBD> <DAB8> <EFBFBD> <20> <> <EFBFBD> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
if ( m_nDurability < = 0 )
{
m_bBroken = true ;
//<2F> <> ȯ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ã<> Ƽ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ؾ<EFBFBD> <20> <> .
DnActorHandle hHitterActor ;
if ( pHitter )
hHitterActor = pHitter - > GetActorHandle ( ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( hHitterActor & & hHitterActor - > IsMonsterActor ( ) )
{
DnActorHandle hMasterActor ;
CDnMonsterActor * pMonsterActor = NULL ;
pMonsterActor = static_cast < CDnMonsterActor * > ( hHitterActor . GetPointer ( ) ) ;
if ( pMonsterActor )
hMasterActor = pMonsterActor - > GetSummonerPlayerActor ( ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ã<> <C3A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , hHitterActor<6F> <72> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ͷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( hMasterActor )
hHitterActor = hMasterActor ;
}
m_pTriggerActionState - > AddFuncParam ( " LastBrokenPropActor " , hHitterActor ? hHitterActor - > GetUniqueID ( ) : - 1 ) ;
m_pFSM - > Process ( 0 , 0.0f ) ;
UpdatePropBreakToHitter ( pHitter ) ;
}
else
if ( StateInfo . iNowDurability < = 0 )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ¶<EFBFBD> <C2B6> <EFBFBD> FSM <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ű<EFBFBD> <C5B0> <20> μ<EFBFBD> <CEBC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ½<EFBFBD> <C2BD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
m_pFSM - > Process ( 0 , 0.0f ) ;
StateInfo . RestoreDurability ( ) ;
}
if ( HitParam . hWeapon ) {
if ( HitParam . hWeapon - > GetWeaponType ( ) & CDnWeapon : : Projectile ) {
CDnProjectile * pProjectile = static_cast < CDnProjectile * > ( HitParam . hWeapon . GetPointer ( ) ) ;
if ( pProjectile ) pProjectile - > OnDamageSuccess ( CDnActor : : Identity ( ) , HitParam ) ;
else HitParam . hWeapon - > SetDestroy ( ) ;
}
}
}
void CDnWorldMultiDurabilityProp : : SetActionQueue ( const char * szActionName , int nLoopCount , float fBlendFrame , float fStartFrame )
{
//// <20> <> <20> <> <EFBFBD> º<EFBFBD> <20> <EFBFBD> <D7BC> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ä<> <C3A4> <EFBFBD> ش<EFBFBD> .
//for( int i = 0; i < (int)m_vlStateInfos.size(); ++i )
//{
// S_STATE_INFO& StateInfo = m_vlStateInfos.at( i );
// if( 0 == strcmp( StateInfo.pActionNameWhenSubDurabilityZero, szActionName ) )
// {
// StateInfo.RestoreDurability();
// // <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <EFBFBD> <20> ̸<EFBFBD> <CCB8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> μ<EFBFBD> <CEBC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7BC> ̹Ƿ<CCB9>
// // <20> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> °<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> °<EFBFBD> <20> ȴ<EFBFBD> .
// m_iNowStateIndex = (i+1) % (int)m_vlStateInfos.size();
// }
//}
CDnWorldActProp : : SetActionQueue ( szActionName , nLoopCount , fBlendFrame , fStartFrame ) ;
}
void CDnWorldMultiDurabilityProp : : OnSignal ( SignalTypeEnum Type , void * pPtr , LOCAL_TIME LocalTime , LOCAL_TIME SignalStartTime , LOCAL_TIME SignalEndTime , int nSignalIndex )
{
if ( m_hMonster )
{
* ( m_hMonster - > GetMatEx ( ) ) = m_Cross ;
m_SkillComponent . OnSignal ( m_hMonster , GetMySmartPtr ( ) , Type , pPtr , LocalTime , SignalStartTime , SignalEndTime , nSignalIndex ) ;
}
CDnWorldBrokenProp : : OnSignal ( Type , pPtr , LocalTime , SignalStartTime , SignalEndTime , nSignalIndex ) ;
//// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ¾Ҵ<C2BE> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> Normal <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ٽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> .
//if( STE_Projectile == Type )
//{
// const char* pCurrentAttackAction = GetCurrentAction();
// if( strlen( pCurrentAttackAction ) )
// m_strLastActionName.assign( pCurrentAttackAction );
//}
}
void CDnWorldMultiDurabilityProp : : OnSyncComplete ( CDNUserSession * pBreakIntoGameSession /*=NULL*/ )
{
if ( pBreakIntoGameSession )
CmdAction ( GetCurrentAction ( ) , pBreakIntoGameSession ) ;
else
CmdAction ( m_szDefaultActionName . c_str ( ) , pBreakIntoGameSession ) ;
}
void CDnWorldMultiDurabilityProp : : OnChangeAction ( const char * szPrevAction )
{
//// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> <EFBFBD> <20> ʴ<EFBFBD> <20> ̻<EFBFBD> idle <20> <> <20> ݺ<EFBFBD> <DDBA> DZ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//// idle <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> 쿣 idle <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> <> <20> ѹ<EFBFBD> <D1B9> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
//// Idle <20> <EFBFBD> <D7BC> <EFBFBD> ª<> <C2AA> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ŷ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> . (#17409)
//const char* pCurrentAction = GetCurrentAction();
//if( strcmp(pCurrentAction, "Idle") == 0 )
//{
// if( strcmp(szPrevAction, "Idle") != 0 )
// {
// ActionSync( pCurrentAction );
// }
//}
//else
// ActionSync( pCurrentAction );
////if( strcmp( szPrevAction, "Hit" ) )
////{
//// if( !m_strLastActionName.empty() )
//// SetActionQueue( m_strLastActionName.c_str() );
////}
// <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ŷ <20> <> <EFBFBD> <EFBFBD> .
if ( m_nActionIndex ! = m_nPrevActionIndex )
ActionSync ( GetCurrentAction ( ) ) ;
}