DragonNest/GameCommon/DnAllImmuneBlow.cpp
2024-12-19 09:48:26 +08:00

123 lines
3 KiB
C++

#include "StdAfx.h"
#include "DnAllImmuneBlow.h"
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
CDnAllImmuneBlow::CDnAllImmuneBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor ),
m_fResistPercent( 0 )
{
m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_150;
SetValue( szValue );
// ; 를 구분자로 면역이 되지 않는 예외 상태효과 인덱스를 셋팅한다.
string strValue( szValue );
std::vector<string> vlTokens;
TokenizeA( strValue, vlTokens, ";" );
for( int i = 0; i < (int)vlTokens.size(); ++i )
{
const char* pToken = vlTokens.at( i ).c_str();
int iBlowIndex = atoi( pToken );
m_setExceptionBlowIndices.insert( iBlowIndex );
}
}
CDnAllImmuneBlow::~CDnAllImmuneBlow(void)
{
}
void CDnAllImmuneBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta )
{
// OutputDebug( "CDnAllImmuneBlow::OnBegin, Value: %d\n", m_nValue );
}
void CDnAllImmuneBlow::Process( LOCAL_TIME LocalTime, float fDelta )
{
// 이 녀석은 면역 말고 하는 게 없음..
CDnBlow::Process( LocalTime, fDelta );
}
bool CDnAllImmuneBlow::IsImmuned( const CDnSkill::SkillInfo* pParentSkillInfo, STATE_BLOW::emBLOW_INDEX BlowIndex )
{
if( NULL == pParentSkillInfo )
return false;
bool bResult = true;
// 예외 셋에 존재하는 상태효과 인덱스는 면역이 되지 않고 통과.
// 나머지는 전부 면역.
set<int>::iterator iter = m_setExceptionBlowIndices.find( (int)BlowIndex );
if( m_setExceptionBlowIndices.end() != iter )
bResult = false;
return bResult;
};
void CDnAllImmuneBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta )
{
// OutputDebug( "CDnAllImmuneBlow::OnEndn" );
}
void CDnAllImmuneBlow::OnDuplicate( const STATE_BLOW& StateBlowInfo )
{
// 상태효과 면역 상태효과는 아무것도 하지 않는다.
}
bool CDnAllImmuneBlow::IsImmuned( STATE_BLOW::emBLOW_INDEX BlowIndex )
{
bool bResult = true;
// 예외 셋에 존재하는 상태효과 인덱스는 면역이 되지 않고 통과.
// 나머지는 전부 면역.
set<int>::iterator iter = m_setExceptionBlowIndices.find( (int)BlowIndex );
if( m_setExceptionBlowIndices.end() != iter )
bResult = false;
return bResult;
}
#if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
void CDnAllImmuneBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
{
char szBuff[128] = {0, };
szNewValue = szOrigValue;
//szOrigValue 마지막에 ";"가 없으면 추가 해서 szAddValue를 추가 한다.
int nLength = (int)strlen(szOrigValue);
if (nLength == 0 || szOrigValue[nLength - 1] == ';')
szNewValue += szAddValue;
else
{
szNewValue += ";";
szNewValue += szAddValue;
}
}
void CDnAllImmuneBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
{
char szBuff[128] = {0, };
//"###;###;###;###;....;##;##;##"
//|<--이전 문자열----->|<-AddValue->|
//szOrigValue에서 szAddValue 문자열길이 만큼 뒤에서 자른다.
int nOrigLength = (int)strlen(szOrigValue);
int nAddLength = (int)strlen(szAddValue);
int nCount = nOrigLength - nAddLength;
sprintf_s(szBuff, "%s", szOrigValue);
szBuff[nCount] = 0;
szNewValue = szBuff;
}
#endif // PRE_ADD_PREFIX_SYSTE_RENEW