DragonNest/GameCommon/DnIntelligenceToPhysicAttackBlow.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

177 lines
No EOL
5.2 KiB
C++

#include "StdAfx.h"
#include "DnIntelligenceToPhysicAttackBlow.h"
#include "DnSkill.h"
#if defined(PRE_ADD_BUFF_STATE_LIMIT)
#include "DnBasicBlow.h"
#endif // PRE_ADD_BUFF_STATE_LIMIT
#if !defined( USE_BOOST_MEMPOOL )
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
#endif // #if !defined( USE_BOOST_MEMPOOL )
CDnIntelligenceToPhysicAttackBlow::CDnIntelligenceToPhysicAttackBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor )
{
m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_165;
SetValue( szValue );
m_fValue = (float)atof( szValue );
#if defined(PRE_ADD_BUFF_STATE_LIMIT)
m_pBasicBlow = NULL;
#else
m_eRefreshState = CDnActorState::StateTypeEnum::ST_AttackP;
m_bNeedRefreshState = false;
#endif // PRE_ADD_BUFF_STATE_LIMIT
}
CDnIntelligenceToPhysicAttackBlow::~CDnIntelligenceToPhysicAttackBlow(void)
{
#if defined(PRE_ADD_BUFF_STATE_LIMIT)
SAFE_DELETE(m_pBasicBlow);
#endif // PRE_ADD_BUFF_STATE_LIMIT
}
void CDnIntelligenceToPhysicAttackBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta )
{
__super::OnBegin(LocalTime, fDelta);
if (!m_hActor)
return;
//힘
int nIntelligence = m_hActor->GetIntelligence();
int nPhysicAttack = (int)((float)nIntelligence * m_fValue);
#if defined(PRE_ADD_BUFF_STATE_LIMIT)
char buff[64];
sprintf_s(buff, "%d", nPhysicAttack);
m_pBasicBlow = new CDnBasicBlow( m_hActor, buff );
m_pBasicBlow->SetBlow( STATE_BLOW::BLOW_001 ); // 물리공격력 절대값.
m_pBasicBlow->SetParentSkillInfo(&m_ParentSkillInfo);
m_pBasicBlow->SetDurationTime(m_StateBlow.fDurationTime);
m_pBasicBlow->OnBegin(LocalTime, fDelta);
#else
m_State.SetAttackPMin( nPhysicAttack );
m_State.SetAttackPMax( nPhysicAttack );
m_eRefreshState = CDnActorState::StateTypeEnum::ST_AttackP;
m_State.CalcValueType();
m_hActor->AddBlowState( &m_State, GetAddBlowStateType() );
m_bNeedRefreshState = (CDnActor::StateTypeEnum(-1) != m_eRefreshState);
if( m_bNeedRefreshState )
{
// 임의로 설정한 상태효과는 부모스킬이 없다. post state 변경이 아니라 기본 state 변경이므로 감안해준다.
// 부모 스킬이 있는 경우엔 패시브 스킬인지 구분해서 패시브인 경우엔 basic 스탯변경으로 감안해서 All Refresh 로 하고 나머지는 RefreshSkill 로 처리..
if( NeedRefreshAll() )
{
m_hActor->RefreshState( CDnActorState::RefreshAll, m_eRefreshState );
}
else
{
m_hActor->RefreshState( CDnActorState::RefreshSkill, m_eRefreshState );
}
}
#endif // PRE_ADD_BUFF_STATE_LIMIT
}
void CDnIntelligenceToPhysicAttackBlow::Process( LOCAL_TIME LocalTime, float fDelta )
{
__super::Process(LocalTime, fDelta);
}
void CDnIntelligenceToPhysicAttackBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta )
{
__super::OnEnd(LocalTime, fDelta);
#if defined(PRE_ADD_BUFF_STATE_LIMIT)
if (m_pBasicBlow)
m_pBasicBlow->OnEnd(LocalTime, fDelta);
#else
m_hActor->DelBlowState( &m_State );
if( m_bNeedRefreshState )
{
// 패시브 스킬인지 구분해서 패시브인 경우엔 All Refresh 로 하고 나머지는 RefreshSkill 로 처리
if( NeedRefreshAll() )
m_hActor->RefreshState( CDnActorState::RefreshAll, m_eRefreshState );
else
m_hActor->RefreshState( CDnActorState::RefreshSkill, m_eRefreshState );
}
#endif // PRE_ADD_BUFF_STATE_LIMIT
}
#if defined(PRE_ADD_BUFF_STATE_LIMIT)
#else
bool CDnIntelligenceToPhysicAttackBlow::NeedRefreshAll( void )
{
// 임의로 설정한 상태효과는 부모스킬이 없다. post state 변경이 아니라 기본 state 변경이므로 감안해준다.
// 부모 스킬이 있는 경우엔 패시브 스킬인지 구분해서 패시브인 경우엔 basic 스탯변경으로 감안해서 All Refresh 로 하고 나머지는 RefreshSkill 로 처리..
return ( false == m_bHasParentSkill ||
(CDnSkill::Passive == m_ParentSkillInfo.eSkillType && CDnSkill::Buff == m_ParentSkillInfo.eDurationType) );
}
#endif // PRE_ADD_BUFF_STATE_LIMIT
#if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
void CDnIntelligenceToPhysicAttackBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
{
char szBuff[128] = {0, };
//필요한 값 변수
float fValue[2];
//////////////////////////////////////////////////////////////////////////
//첫번째 값
fValue[0] = (float)atof( szOrigValue );
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//두번째
fValue[1] = (float)atof( szAddValue );
//////////////////////////////////////////////////////////////////////////
//두 값을 더한다.
float fResultValue = fValue[0] + fValue[1];
sprintf_s(szBuff, "%f", fResultValue);
szNewValue = szBuff;
}
void CDnIntelligenceToPhysicAttackBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
{
char szBuff[128] = {0, };
//필요한 값 변수
float fValue[2];
//////////////////////////////////////////////////////////////////////////
//첫번째 값
fValue[0] = (float)atof( szOrigValue );
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//두번째
fValue[1] = (float)atof( szAddValue );
//////////////////////////////////////////////////////////////////////////
//값 계산
float fResultValue = fValue[0] - fValue[1];
sprintf_s(szBuff, "%f", fResultValue);
szNewValue = szBuff;
}
#endif // PRE_ADD_PREFIX_SYSTE_RENEW