DragonNest/Server/DNGameServer/DnWorldTrapProp.cpp

195 lines
5.3 KiB
C++
Raw Permalink Normal View History

#include "stdafx.h"
#include "DnWorldTrapProp.h"
#include "DnPartyTask.h"
#include "DNUserSession.h"
//#include "DnActorClassDefine.h"
#include "DnMonsterActor.h"
CDnWorldTrapProp::CDnWorldTrapProp( CMultiRoom *pRoom )
: CDnWorldActProp( pRoom )
, CDnDamageBase( DamageObjectTypeEnum::Prop )
, m_iActivateType( LOOP )
, m_nIdleElementIndex( -1 )
, m_nActivateElementIndex( -1 )
, m_nNowActionElementIndex( -1 )
, m_bIdle( false )
{
}
CDnWorldTrapProp::~CDnWorldTrapProp()
{
}
bool CDnWorldTrapProp::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 CDnWorldTrapProp::InitializeTable( int nTableID )
{
if( CDnWorldActProp::InitializeTable( nTableID ) == false ) return false;
if( GetData() )
{
TrapStruct *pStruct = (TrapStruct *)GetData();
int nMonsterTableID = pStruct->nMonsterTableID;
bool bResult = false;
//#61146 TrapŸ<70><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>.
#ifdef PER_ADD_PROP_TRAP_DIFFICULT_SET
bResult = InitializeMonsterActorProp( nMonsterTableID, pStruct->MonsterWeight );
#else
bResult = InitializeMonsterActorProp( nMonsterTableID );
#endif
if( bResult )
{
// m_hMonster->SetUniqueID( STATIC_INSTANCE(CDnActor::s_dwUniqueCount)++ );
m_HitComponent.Initialize( m_hMonster, &m_Cross, GetMySmartPtr(), this );
m_iActivateType = pStruct->ActivateType;
}
}
return true;
}
bool CDnWorldTrapProp::CreateObject()
{
bool bResult = CDnWorldActProp::CreateObject();
if( bResult )
{
m_nIdleElementIndex = GetElementIndex( "Idle" );
m_nActivateElementIndex = GetElementIndex( "Activate" );
//if( LOOP == m_iActivateType )
// GetElement( m_nActivateElementIndex )->szNextActionName.assign( "Activate" );
//else
//if( BOUNDING_BOX_CHECK == m_iActivateType )
// GetElement( m_nActivateElementIndex )->szNextActionName.assign( "Idle" );
}
return bResult;
}
void CDnWorldTrapProp::SetActionQueue( const char *szActionName, int nLoopCount , float fBlendFrame , float fStartFrame )
{
//if( LOOP == m_iActivateType && strcmp( szActionName, "Idle" ) == 0 )
//{
// //SetActionQueue( "Activate" );
// szActionName = "Activate";
//}
CDnWorldActProp::SetActionQueue( szActionName, nLoopCount, fBlendFrame, fStartFrame );
//if( strcmp( szActionName, "Idle" ) == 0 )
// m_bIdle = true;
//else
// m_bIdle = false;
}
// <20>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> idle <20><> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20>ٲ<EFBFBD><D9B2>ش<EFBFBD>.
void CDnWorldTrapProp::OnFinishAction( const char* szPrevAction, LOCAL_TIME time )
{
//if( LOOP == m_iActivateType && strcmp( szPrevAction, "Idle" )/*false == m_bIdle*/ )
// SetActionQueue( "Activate" );
}
void CDnWorldTrapProp::Process( LOCAL_TIME LocalTime, float fDelta )
{
CDnWorldActProp::Process( LocalTime, fDelta );
if( !m_Handle ) return;
if( m_nIdleElementIndex == -1 ) return;
//OutputDebug( "TrapFrame : %.2f\n", CDnActionBase::m_fFrame );
m_nNowActionElementIndex = GetElementIndex( GetCurrentAction() );
switch( m_iActivateType )
{
case BOUNDING_BOX_CHECK:
{
if( m_nIdleElementIndex == m_nNowActionElementIndex )
{
SOBB Box;
GetBoundingBox( Box );
for( DWORD i=0; i<CDnPartyTask::GetInstance(GetRoom()).GetUserCount(); i++ )
{
CDNUserSession *pSession = CDnPartyTask::GetInstance(GetRoom()).GetUserData(i);
DnActorHandle hActor = pSession->GetActorHandle();
if( !hActor ) continue;
if( hActor->IsDie() ) continue;
if( Box.IsInside( *hActor->GetPosition() ) == true ) {
CmdAction( "Activate" );
break;
}
}
}
}
break;
//case LOOP:
// {
// if( m_nActivateElementIndex == m_nNowActionElementIndex )
// {
// CEtActionBase::ActionElementStruct* pElement = GetElementIndex( m_nActivateElementIndex );
// if( (pElement->dwLength / s_fDefaultFps) - m_fFrame - fDelta < 0.0f )
//
// }
// }
// break;
}
}
void CDnWorldTrapProp::OnSignal( SignalTypeEnum Type, void *pPtr, LOCAL_TIME LocalTime, LOCAL_TIME SignalStartTime,
LOCAL_TIME SignalEndTime, int nSignalIndex )
{
m_HitComponent.OnSignal( Type, pPtr, LocalTime, SignalStartTime, SignalEndTime, nSignalIndex );
CDnWorldActProp::OnSignal( Type, pPtr, LocalTime, SignalStartTime, SignalEndTime, nSignalIndex );
}
// Ʈ<><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD>ü<EFBFBD><C3BC> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȯ<EFBFBD>ϰ<EFBFBD> <20>¾ƾ<C2BE> <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׼<EFBFBD> <20><><EFBFBD><EFBFBD><E6B6A7><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
void CDnWorldTrapProp::OnChangeAction( const char *szPrevAction )
{
//// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ʈ<><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Activate <20>׼Ǹ<D7BC> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
//if( LOOP == m_iActivateType )
//{
// if( m_szAction == "Activate" )
// ActionSync( "Activate" );
//}
//else
//{
// // <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( stricmp(pCurrentAction, "Idle") == 0 || stricmp(pCurrentAction, "off") )
// {
// if( stricmp(szPrevAction, "Idle") != 0 )
// {
// ActionSync( pCurrentAction );
// }
// }
// else
// ActionSync( pCurrentAction );
//}
// <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() );
}