407 lines
14 KiB
C++
407 lines
14 KiB
C++
|
|
#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() );
|
|||
|
|
}
|