DragonNest/GameCommon/DnCoolTimeChangeBlow.cpp

214 lines
5.6 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "DnCoolTimeChangeBlow.h"
#if defined( _GAMESERVER )
#include "DnPlayerActor.h"
#endif // #if defined( _GAMESERVER )
#if !defined( USE_BOOST_MEMPOOL )
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
#endif // #if !defined( USE_BOOST_MEMPOOL )
CDnCoolTimeChangeBlow::CDnCoolTimeChangeBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor )
{
m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_171;
SetValue( szValue );
m_nSkillType = -1;
m_fCoolTimeRate = 1.0f;
std::string str = szValue;//"<22><>ųŸ<C5B3><C5B8>(<28><>Ƽ<EFBFBD><C6BC>/<2F>нú<D0BD>);<3B><>Ÿ<EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>";
std::vector<std::string> tokens;
std::string delimiters = ";";
//1. <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
TokenizeA(str, tokens, delimiters);
if (2 == tokens.size())
{
m_nSkillType = atoi( tokens[0].c_str() );
m_fCoolTimeRate = (float)atof( tokens[1].c_str() );
}
else
OutputDebug("%s Invalid value!!!\n", __FUNCTION__);
}
CDnCoolTimeChangeBlow::~CDnCoolTimeChangeBlow(void)
{
if (!m_OrigSkillCoolTimeAdjustValues.empty())
ResetCoolTime();
}
void CDnCoolTimeChangeBlow::OnBegin(LOCAL_TIME LocalTime, float fDelta )
{
__super::OnBegin(LocalTime, fDelta);
OutputDebug( "CDnCoolTimeChangeBlow::OnBegin\n");
DNVector(DnSkillHandle) vlSkillList;
m_hActor->FindSkillBySkillType((CDnSkill::SkillTypeEnum)m_nSkillType, vlSkillList);
if (vlSkillList.empty())
return;
int nCount = (int)vlSkillList.size();
for (int i = 0; i < nCount; ++i)
{
DnSkillHandle hSkill = vlSkillList.at(i);
if (!hSkill)
continue;
//<2F><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> Adjust<73><74><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>...
int nSkillID = hSkill->GetClassID();
float fOrigCoolTimeAdjustValue = hSkill->GetCoolTimeAdjustValue();
m_OrigSkillCoolTimeAdjustValues.insert(std::map<int, float>::value_type(nSkillID, fOrigCoolTimeAdjustValue));
//<2F><>ų <20><>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
hSkill->SetCoolTimeAdjustValue(m_fCoolTimeRate);
}
}
void CDnCoolTimeChangeBlow::Process( LOCAL_TIME LocalTime, float fDelta )
{
__super::Process( LocalTime, fDelta );
}
void CDnCoolTimeChangeBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta )
{
__super::OnEnd(LocalTime, fDelta);
OutputDebug( "CDnCoolTimeChangeBlow::OnEnd\n");
ResetCoolTime();
return;
}
void CDnCoolTimeChangeBlow::ResetCoolTime()
{
DNVector(DnSkillHandle) vlSkillList;
m_hActor->FindSkillBySkillType((CDnSkill::SkillTypeEnum)m_nSkillType, vlSkillList);
if (vlSkillList.empty())
return;
int nCount = (int)vlSkillList.size();
for (int i = 0; i < nCount; ++i)
{
DnSkillHandle hSkill = vlSkillList.at(i);
if (!hSkill)
continue;
float fOrigAdjustValue = 1.0f;
//<2F><>ų<EFBFBD><C5B3> <20><20><>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> ȸ<><C8B8> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>
int nSkillID = hSkill->GetClassID();
std::map<int, float>::iterator iter = m_OrigSkillCoolTimeAdjustValues.find(nSkillID);
if (iter != m_OrigSkillCoolTimeAdjustValues.end())
fOrigAdjustValue = iter->second;
hSkill->SetCoolTimeAdjustValue(fOrigAdjustValue);
}
m_OrigSkillCoolTimeAdjustValues.clear();
}
#if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
void CDnCoolTimeChangeBlow::AddStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
{
char szBuff[128] = {0, };
//<2F>Ľ̿<C4BD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
std::vector<string> vlTokens[2];
string strArgument[2];
//<2F>ʿ<EFBFBD><CABF><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
int nSkillType[2] = { 0, };
float fCoolTimeRate[2] = { 0.0f, };
//////////////////////////////////////////////////////////////////////////
//ù<><C3B9>° <20><><EFBFBD>ڿ<EFBFBD> <20>Ľ<EFBFBD>.
strArgument[0] = szOrigValue;
TokenizeA( strArgument[0], vlTokens[0], ";" );
if( vlTokens[0].size() == 2 )
{
nSkillType[0] = atoi( vlTokens[0][0].c_str() );
fCoolTimeRate[0] = (float)atof( vlTokens[0][1].c_str() );
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//<2F>ι<EFBFBD>° <20><><EFBFBD>ڿ<EFBFBD> <20>Ľ<EFBFBD>
strArgument[1] = szAddValue;
TokenizeA( strArgument[1], vlTokens[1], ";" );
if( vlTokens[1].size() == 2 )
{
nSkillType[1] = atoi( vlTokens[1][0].c_str() );
fCoolTimeRate[1] = (float)atof( vlTokens[1][1].c_str() );
}
//////////////////////////////////////////////////////////////////////////
//<2F><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
int nResultSkillType = nSkillType[0];
float fResultCoolTimeRate = fCoolTimeRate[0] + fCoolTimeRate[1];
sprintf_s(szBuff, "%d;%f", nResultSkillType, fResultCoolTimeRate);
szNewValue = szBuff;
}
void CDnCoolTimeChangeBlow::RemoveStateEffectValue(const char* szOrigValue, const char* szAddValue, std::string& szNewValue)
{
char szBuff[128] = {0, };
//<2F>Ľ̿<C4BD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
std::vector<string> vlTokens[2];
string strArgument[2];
//<2F>ʿ<EFBFBD><CABF><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
int nSkillType[2] = { 0, };
float fCoolTimeRate[2] = { 0.0f, };
//////////////////////////////////////////////////////////////////////////
//ù<><C3B9>° <20><><EFBFBD>ڿ<EFBFBD> <20>Ľ<EFBFBD>.
strArgument[0] = szOrigValue;
TokenizeA( strArgument[0], vlTokens[0], ";" );
if( vlTokens[0].size() == 2 )
{
nSkillType[0] = atoi( vlTokens[0][0].c_str() );
fCoolTimeRate[0] = (float)atof( vlTokens[0][1].c_str() );
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//<2F>ι<EFBFBD>° <20><><EFBFBD>ڿ<EFBFBD> <20>Ľ<EFBFBD>
strArgument[1] = szAddValue;
TokenizeA( strArgument[1], vlTokens[1], ";" );
if( vlTokens[1].size() == 2 )
{
nSkillType[1] = atoi( vlTokens[1][0].c_str() );
fCoolTimeRate[1] = (float)atof( vlTokens[1][1].c_str() );
}
//////////////////////////////////////////////////////////////////////////
//<2F><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
int nResultSkillType = nSkillType[0];
float fResultCoolTimeRate = fCoolTimeRate[0] - fCoolTimeRate[1];
sprintf_s(szBuff, "%d;%f", nResultSkillType, fResultCoolTimeRate);
szNewValue = szBuff;
}
#endif // PRE_ADD_PREFIX_SYSTE_RENEW