DragonNest/GameCommon/DnBasicStateBaseAddState.cpp

142 lines
3.7 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "Stdafx.h"
#include "DnBasicStateBaseAddState.h"
CDnBasicStateBaseAddState::CDnBasicStateBaseAddState( DnActorHandle hActor, const char* szValue )
: CDnBlow( hActor )
{
m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_271;
SetValue( szValue );
}
CDnBasicStateBaseAddState::~CDnBasicStateBaseAddState(void)
{
SAFE_DELETE_PVEC( m_vecBasicBlow );
}
void CDnBasicStateBaseAddState::OnBegin( LOCAL_TIME LocalTime, float fDelta )
{
std::string str = m_StateBlow.szValue;
std::vector<std::string> tokens;
TokenizeA( str, tokens, ";" );
for( DWORD itr = 0; itr < tokens.size(); ++itr )
{
int nStateType = atoi( tokens[itr].c_str() );
++itr;
if( itr < tokens.size() )
{
float fStateValue = (float)atof( tokens[itr].c_str() );
AddState( nStateType, fStateValue, LocalTime, fDelta );
}
}
__super::OnBegin( LocalTime, fDelta );
}
void CDnBasicStateBaseAddState::Process( LOCAL_TIME LocalTime, float fDelta )
{
__super::Process( LocalTime, fDelta );
}
void CDnBasicStateBaseAddState::OnEnd( LOCAL_TIME LocalTime, float fDelta )
{
for( DWORD itr = 0; itr < m_vecBasicBlow.size(); ++itr )
{
if( NULL == m_vecBasicBlow[itr] )
continue;
m_vecBasicBlow[itr]->OnEnd( LocalTime, fDelta );
}
__super::OnEnd( LocalTime, fDelta );
}
// nStateType<70><65> <20>߰<EFBFBD><DFB0><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǵ°<C7B4><C2B0><EFBFBD> <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD><D1B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ´<D6B4>.
// <20>׷<EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2>ش<EFBFBD>.
void CDnBasicStateBaseAddState::AddState( int nStateType, const float fStateValue, LOCAL_TIME LocalTime, float fDelta )
{
CDnState * pBaseState = const_cast<CDnState*>(m_hActor->GetBaseState());
if( NULL == pBaseState )
return;
char buff[64] = {0,};
switch( nStateType )
{
case STATE_BLOW::BLOW_058:
{
INT64 nMaxHP = (INT64)(pBaseState->GetMaxHP() * fStateValue);
sprintf_s( buff, "%I64d", nMaxHP );
nStateType = STATE_BLOW::BLOW_009;
AddBasicBlow( nStateType, buff, LocalTime, fDelta );
#ifdef _GAMESERVER
m_hActor->SetHP(m_hActor->GetMaxHP());
m_hActor->RequestHPMPDelta( CDnState::ElementEnum_Amount, m_hActor->GetMaxHP(), m_hActor->GetUniqueID() , false , false );
#endif
}
return;
case STATE_BLOW::BLOW_002:
{
int nAttackP = (int)( pBaseState->GetAttackPMin() + pBaseState->GetAttackPMax() ) / 2;
nAttackP = (int)(nAttackP * fStateValue);
sprintf_s( buff, "%d", nAttackP );
nStateType = STATE_BLOW::BLOW_001;
}
break;
case STATE_BLOW::BLOW_029:
{
int nAttackM = (int)( pBaseState->GetAttackMMin() + pBaseState->GetAttackMMax() ) / 2;
nAttackM = (int)(nAttackM * fStateValue);
sprintf_s( buff, "%d", nAttackM );
nStateType = STATE_BLOW::BLOW_028;
}
break;
case STATE_BLOW::BLOW_004:
{
int nDefenseP = (int)(pBaseState->GetDefenseP() * fStateValue);
sprintf_s( buff, "%d", nDefenseP );
nStateType = STATE_BLOW::BLOW_003;
}
break;
case STATE_BLOW::BLOW_094:
{
int nDefenseM = (int)(pBaseState->GetDefenseM() * fStateValue);
sprintf_s( buff, "%d", nDefenseM );
nStateType = STATE_BLOW::BLOW_093;
}
break;
case STATE_BLOW::BLOW_061:
{
int nSuperAmmor = (int)(pBaseState->GetSuperAmmor() * fStateValue);
sprintf_s( buff, "%d", nSuperAmmor );
}
break;
default:
return;
}
AddBasicBlow( nStateType, buff, LocalTime, fDelta );
}
void CDnBasicStateBaseAddState::AddBasicBlow( const int nStateType, char * buff, LOCAL_TIME LocalTime, float fDelta )
{
CDnBasicBlow * pBasicBlow = new CDnBasicBlow( m_hActor, buff );
pBasicBlow->SetBlow( (STATE_BLOW::emBLOW_INDEX)nStateType );
pBasicBlow->SetParentSkillInfo( &m_ParentSkillInfo );
pBasicBlow->SetDurationTime( m_StateBlow.fDurationTime );
pBasicBlow->OnBegin(LocalTime, fDelta);
m_vecBasicBlow.push_back( pBasicBlow );
}