202 lines
5.3 KiB
C++
202 lines
5.3 KiB
C++
|
|
#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
|