214 lines
5.6 KiB
C++
214 lines
5.6 KiB
C++
|
|
#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
|