DragonNest/GameCommon/DnPayBackMPBlow.cpp

202 lines
5.3 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "DnPayBackMPBlow.h"
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
CDnPayBackMPBlow::CDnPayBackMPBlow( DnActorHandle hActor, const char* szValue ) : CDnBlow( hActor ),
m_fApplyProb( 0.0f ),
m_fConsumeDecreaseProb( 0.0f )
#ifndef _GAMESERVER
,m_bShowActivateEffect( false )
,m_ShowActivateEffectTime( 0 )
,m_PrevFrameLocalTime( 0 )
#endif
{
m_StateBlow.emBlowIndex = STATE_BLOW::BLOW_068;
SetValue( szValue );
//m_fValue = (float)atof( szValue );
string strValue( szValue );
int iSemiColonIndex = (int)strValue.find_first_of( ';', 0 );
bool bValidArgument = (string::npos != iSemiColonIndex);
_ASSERT( bValidArgument && "PayBack Mana <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> ȿ<><C8BF> <20><>ġ<EFBFBD><C4A1> <20>߸<EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> ã<><C3A3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>" );
if( bValidArgument )
{
string strApplyProb = strValue.substr( 0, iSemiColonIndex );
string strConsumeDecreaseProb = strValue.substr( iSemiColonIndex+1, strValue.length() );
// Ȯ<><C8AE>
m_fApplyProb = (float)atof( strApplyProb.c_str() );
m_fConsumeDecreaseProb = (float)atof( strConsumeDecreaseProb.c_str() );
}
AddCallBackType( SB_ONUSEMP );
}
CDnPayBackMPBlow::~CDnPayBackMPBlow(void)
{
}
void CDnPayBackMPBlow::OnBegin( LOCAL_TIME LocalTime, float fDelta )
{
OutputDebug( "CDnPayBackMPBlow::OnBegin\n" );
}
void CDnPayBackMPBlow::Process( LOCAL_TIME LocalTime, float fDelta )
{
CDnBlow::Process( LocalTime, fDelta );
#ifndef _GAMESERVER
if( m_bShowActivateEffect )
{
// 1.5 <20>ʰ<EFBFBD><CAB0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
if( 1500 < LocalTime - m_ShowActivateEffectTime )
{
_DetachGraphicEffect();
m_bShowActivateEffect = false;
}
}
m_PrevFrameLocalTime = LocalTime;
#endif
}
void CDnPayBackMPBlow::OnEnd( LOCAL_TIME LocalTime, float fDelta )
{
OutputDebug( "CDnPayBackMPBlow::OnEnd\n" );
}
void CDnPayBackMPBlow::OnDuplicate( const STATE_BLOW& StateBlowInfo )
{
// <20><><EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƹ<EFBFBD><C6B9>͵<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
}
#ifdef _GAMESERVER
int CDnPayBackMPBlow::OnUseMP( int iMPDelta )
{
int iResult = 0;
if( _rand(GetRoom())%10000 <= m_fApplyProb*10000.0f )
{
iResult = int(-iMPDelta * m_fConsumeDecreaseProb);
m_hActor->RequestSEProbSuccess( m_ParentSkillInfo.iSkillID, m_StateBlow.emBlowIndex );
}
return iResult;
}
#else
void CDnPayBackMPBlow::OnActivate( void )
{
m_bShowActivateEffect = true;
_AttachGraphicEffect();
m_ShowActivateEffectTime = m_PrevFrameLocalTime;
}
#endif
#if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
void CDnPayBackMPBlow::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>
float fApplyProb[2] = {0.0f, };
float fConsumeDecreaseProb[2] = {0.0f, };
//////////////////////////////////////////////////////////////////////////
//ù<><C3B9>° <20><><EFBFBD>ڿ<EFBFBD> <20>Ľ<EFBFBD>.
strArgument[0] = szOrigValue;
TokenizeA( strArgument[0], vlTokens[0], ";" );
if( vlTokens[0].size() == 2 ) {
fApplyProb[0] = (float)atof( vlTokens[0][0].c_str() );
fConsumeDecreaseProb[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 ) {
fApplyProb[1] = (float)atof( vlTokens[1][0].c_str() );
fConsumeDecreaseProb[1] = (float)atof( vlTokens[1][1].c_str() );
}
//////////////////////////////////////////////////////////////////////////
//<2F><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
float fResultApplyProb = fApplyProb[0] + fApplyProb[1];
float fResultConsumeDecreaseProb = fConsumeDecreaseProb[0] + fConsumeDecreaseProb[1];
sprintf_s(szBuff, "%f;%f", fResultApplyProb, fResultConsumeDecreaseProb);
szNewValue = szBuff;
}
void CDnPayBackMPBlow::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>
float fApplyProb[2] = {0.0f, };
float fConsumeDecreaseProb[2] = {0.0f, };
//////////////////////////////////////////////////////////////////////////
//ù<><C3B9>° <20><><EFBFBD>ڿ<EFBFBD> <20>Ľ<EFBFBD>.
strArgument[0] = szOrigValue;
TokenizeA( strArgument[0], vlTokens[0], ";" );
if( vlTokens[0].size() == 2 ) {
fApplyProb[0] = (float)atof( vlTokens[0][0].c_str() );
fConsumeDecreaseProb[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 ) {
fApplyProb[1] = (float)atof( vlTokens[1][0].c_str() );
fConsumeDecreaseProb[1] = (float)atof( vlTokens[1][1].c_str() );
}
//////////////////////////////////////////////////////////////////////////
//<2F><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
float fResultApplyProb = fApplyProb[0] - fApplyProb[1];
float fResultConsumeDecreaseProb = fConsumeDecreaseProb[0] - fConsumeDecreaseProb[1];
sprintf_s(szBuff, "%f;%f", fResultApplyProb, fResultConsumeDecreaseProb);
szNewValue = szBuff;
}
#endif // PRE_ADD_PREFIX_SYSTE_RENEW