初步修复

This commit is contained in:
Cussrro 2024-12-19 09:48:26 +08:00
parent 8fc4357cc6
commit e4714f3f0e
46705 changed files with 12004901 additions and 0 deletions

View file

@ -0,0 +1,142 @@
#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이 중간에 바뀌는 이유는 테이블에서는 비율로 값을 넣었지만
// 실제 적용 되는것은 기본 스탯의 비율을 곱한값을 절대 값으로 넣는다.
// 그래서 절대 값이 필요한 경우 절대값 상태효과로 바꿔준다.
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 );
}