2024-12-21 10:04:04 +08:00
# include "StdAfx.h"
# include "DnStateBlow.h"
# include "DnCreateBlow.h"
# include "DnBlow.h"
# include "DnImmuneBlow.h"
# include "DnAllImmuneBlow.h"
# include "DnUsingSkillWhenDieBlow.h"
# include "DnTableDB.h"
# include "DnPlayerActor.h"
# include "DnProbInvincibleAtBlow.h"
# include "DnIgnoreEffectBlow.h"
# include "DnComboDamageLimitBlow.h"
# include "DnPileAddEffectBlow.h"
# ifdef PRE_ADD_DECREASE_EFFECT
# include "DnPuppetBlow.h"
# endif // PRE_ADD_DECREASE_EFFECT
# ifdef PRE_FIX_MEMOPT_EXT
# ifndef _GAMESERVER
# include "DnCommonUtil.h"
# endif
# endif
# ifdef _DEBUG
# define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
# endif
# ifndef _GAMESERVER
std : : map < int , EffectOutputInfo * > CDnStateBlow : : s_nMapEffectOutputInfo ;
bool CDnStateBlow : : s_bStopProcess = false ;
# else
STATIC_DECL_INIT ( CDnStateBlow , bool , s_bStopProcess ) = { false , } ;
# endif
# ifndef _GAMESERVER
int CDnStateBlow : : s_iStateBlowIDCount = 0 ;
# else
STATIC_DECL_INIT ( CDnStateBlow , int , s_iStateBlowIDCount ) = { 0 , } ;
# endif
CDnStateBlow : : CDnStateBlow ( DnActorHandle hActor )
{
m_hActor = hActor ;
ZeroMemory ( m_aiApplied , sizeof ( m_aiApplied ) ) ;
# ifndef _GAMESERVER
m_bAllowDiffuseVariation = true ;
_LoadStateEffectOutputInfo ( ) ;
# endif
m_bLockStateBlowList = false ;
m_bLockRemoveReservedList = false ;
}
CDnStateBlow : : ~ CDnStateBlow ( void )
{
DelAllStateBlow ( ) ;
}
bool CDnStateBlow : : InitializeClass ( )
{
# ifndef _GAMESERVER
_LoadStateEffectOutputInfo ( ) ;
# endif
return true ;
}
void CDnStateBlow : : ReleaseClass ( )
{
# ifndef _GAMESERVER
_ReleaseStateEffectOutputInfo ( ) ;
# endif
}
# ifndef _GAMESERVER
void CDnStateBlow : : _LoadStateEffectOutputInfo ( void )
{
if ( ! s_nMapEffectOutputInfo . empty ( ) )
return ;
DNTableFileFormat * pStateEffectTable = CDnTableDB : : GetInstancePtr ( ) - > GetTable ( CDnTableDB : : TSTATEEFFECT ) ;
# ifdef PRE_FIX_MEMOPT_EXT
DNTableFileFormat * pFileNameSox = CDnTableDB : : GetInstancePtr ( ) - > GetTable ( CDnTableDB : : TFILE ) ;
if ( pFileNameSox = = NULL )
return ;
# endif
int iNumItem = pStateEffectTable - > GetItemCount ( ) ;
for ( int i = 0 ; i < iNumItem ; i + + )
{
int iItem = pStateEffectTable - > GetItemID ( i ) ;
EffectOutputInfo * pNewInfo = new EffectOutputInfo ;
int iStateEffectIndex = pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _StateEffectIndex " ) - > GetInteger ( ) ;
_ASSERT ( pNewInfo - > iStateEffectIndex < STATE_BLOW : : BLOW_MAX ) ;
pNewInfo - > iStateEffectIndex = iStateEffectIndex ;
pNewInfo - > iShowTimingType = pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _ShowTimingType " ) - > GetInteger ( ) ;
pNewInfo - > iOutputType = pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _EffectOutputType " ) - > GetInteger ( ) ;
pNewInfo - > iPlayType = pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _EffectPlayType " ) - > GetInteger ( ) ;
# ifdef PRE_FIX_MEMOPT_EXT
CommonUtil : : GetFileNameFromFileEXT ( pNewInfo - > strSkinFileName , pStateEffectTable , iItem , " _EffectSkinFileName " , pFileNameSox ) ;
CommonUtil : : GetFileNameFromFileEXT ( pNewInfo - > strAniFileName , pStateEffectTable , iItem , " _EffectAniFileName " , pFileNameSox ) ;
CommonUtil : : GetFileNameFromFileEXT ( pNewInfo - > strActFileName , pStateEffectTable , iItem , " _EffectActFileName " , pFileNameSox ) ;
# else
pNewInfo - > strSkinFileName = pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _EffectSkinFileName " ) - > GetString ( ) ;
pNewInfo - > strAniFileName = pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _EffectAniFileName " ) - > GetString ( ) ;
pNewInfo - > strActFileName = pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _EffectActFileName " ) - > GetString ( ) ;
# endif
pNewInfo - > strActorActionName = pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _ActorActionName " ) - > GetString ( ) ;
pNewInfo - > iUseDiffuseVariationMethod = pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _UseDiffuseVariation " ) - > GetInteger ( ) ;
pNewInfo - > afDiffuseRed [ 0 ] = ( float ) pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _DiffuseR1 " ) - > GetFloat ( ) ;
pNewInfo - > afDiffuseBlue [ 0 ] = ( float ) pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _DiffuseG1 " ) - > GetFloat ( ) ;
pNewInfo - > afDiffuseGreen [ 0 ] = ( float ) pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _DiffuseB1 " ) - > GetFloat ( ) ;
pNewInfo - > afDiffuseRed [ 1 ] = ( float ) pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _DiffuseR2 " ) - > GetFloat ( ) ;
pNewInfo - > afDiffuseBlue [ 1 ] = ( float ) pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _DiffuseG2 " ) - > GetFloat ( ) ;
pNewInfo - > afDiffuseGreen [ 1 ] = ( float ) pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _DiffuseB2 " ) - > GetFloat ( ) ;
pNewInfo - > fDiffuseChangeSpeed = ( float ) pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _DiffuseChangeSpeed " ) - > GetFloat ( ) ;
// ; <20> <> <20> <> <EFBFBD> е <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ƿ<DEBE>
const char * pIndices = pStateEffectTable - > GetFieldFromLablePtr ( iItem , " _LinkBoneIndex " ) - > GetString ( ) ;
string strIndices ( pIndices ) ;
if ( ( int ) strIndices . length ( ) > 0 )
{
int nFoundPos = - 1 ;
if ( strIndices . at ( strIndices . length ( ) - 1 ) ! = ' ; ' )
strIndices . push_back ( ' ; ' ) ;
while ( true )
{
int nStartPos = nFoundPos + 1 ;
nFoundPos = ( int ) strIndices . find_first_of ( ' ; ' , nStartPos ) ;
if ( nFoundPos ! = ( int ) string : : npos )
{
string strIndex ( strIndices . substr ( nStartPos , nFoundPos - nStartPos ) ) ;
pNewInfo - > vlDummyBoneIndices . push_back ( atoi ( strIndex . c_str ( ) ) ) ;
}
else
break ;
}
}
s_nMapEffectOutputInfo . insert ( make_pair ( iItem , pNewInfo ) ) ;
}
}
void CDnStateBlow : : _ReleaseStateEffectOutputInfo ( void )
{
SAFE_DELETE_PMAP ( TMapEffectOutputInfo , s_nMapEffectOutputInfo ) ;
}
void CDnStateBlow : : _ProcessDuplicateEffectBoneRotateShow ( LOCAL_TIME LocalTime , float fDelta )
{
// <20> <> <EFBFBD> μ<EFBFBD> <CEBC> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> .
for ( int i = 0 ; i < CDnActor : : Max_FX_Dummy_Bone ; + + i )
{
list < S_BONE_EFFECT > & listBoneEffect = m_aListBoneEffectStatus [ i ] ;
list < S_BONE_EFFECT > : : iterator iter = listBoneEffect . begin ( ) ;
for ( iter ; iter ! = listBoneEffect . end ( ) ; )
{
if ( ! iter - > hEffect )
{
bool bNextShow = iter - > bShow ;
iter = listBoneEffect . erase ( iter ) ;
if ( listBoneEffect . end ( ) ! = iter )
if ( bNextShow )
iter - > Show ( bNextShow ) ;
continue ;
}
+ + iter ;
}
}
for ( int i = 0 ; i < CDnActor : : Max_FX_Dummy_Bone ; + + i )
{
list < S_BONE_EFFECT > & listBoneEffect = m_aListBoneEffectStatus [ i ] ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
if ( 1 < ( int ) listBoneEffect . size ( ) )
{
list < S_BONE_EFFECT > : : iterator iter = listBoneEffect . begin ( ) ;
for ( iter ; iter ! = listBoneEffect . end ( ) ; + + iter )
{
if ( iter - > bShow )
{
iter - > fOutputElapsedTime + = fDelta ;
if ( 1.0f < iter - > fOutputElapsedTime )
{
list < S_BONE_EFFECT > : : iterator iterNext = iter ;
iterNext + + ;
if ( listBoneEffect . end ( ) = = iterNext )
iterNext = listBoneEffect . begin ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> µǴ<C2B5> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
iter - > Show ( false ) ;
iter - > fOutputElapsedTime = 0.0f ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
iterNext - > Show ( true ) ;
iterNext - > fOutputElapsedTime = 0.f ;
break ;
}
}
}
}
}
}
# endif
void CDnStateBlow : : Process ( LOCAL_TIME LocalTime , float fDelta , bool bForceInitialize )
{
# ifdef _GAMESERVER
if ( m_hActor & & true = = s_bStopProcess [ m_hActor - > GetRoom ( ) - > GetRoomID ( ) ] )
return ;
# else
if ( s_bStopProcess )
return ;
# endif
if ( ! m_listBlowHandle . empty ( ) )
{
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
# ifndef _GAMESERVER
if ( m_bAllowDiffuseVariation )
{
// diffuse variation <20> <> <EFBFBD> ڰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD>
BLOW_HANDLE_LIST_ITER iterAllowDV = m_listBlowHandle . end ( ) ;
int iBiggest = 0 ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
if ( ( * iter ) & & ( * iter ) - > IsUseTableDefinedGraphicEffect ( ) )
{
( * iter ) - > AllowDiffuseVariation ( false ) ;
const EffectOutputInfo * pEffectInfo = ( * iter ) - > GetEffectOutputInfo ( ) ;
if ( pEffectInfo & & pEffectInfo - > iUseDiffuseVariationMethod > 0 )
{
if ( iBiggest < pEffectInfo - > iUseDiffuseVariationMethod )
{
iBiggest = pEffectInfo - > iUseDiffuseVariationMethod ;
iterAllowDV = iter ;
}
}
}
}
if ( m_listBlowHandle . end ( ) ! = iterAllowDV )
{
( * iterAllowDV ) - > AllowDiffuseVariation ( true ) ;
}
}
# endif
# ifndef _FINAL_BUILD
_CrashIfProcessListLocked ( ) ;
# endif // #ifdef _FINAL_BUILD
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 鼭 process <20> ߿<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> . üũ.
// <20> <> <EFBFBD> ̳<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> ƴѰ<C6B4> <D1B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <EFBFBD> <D7BE> <EFBFBD> .
m_bLockStateBlowList = true ;
Process_StateBlow_New ( LocalTime , fDelta , bForceInitialize ) ;
}
m_bLockStateBlowList = false ;
# ifndef _GAMESERVER
# if !defined(SW_MODIFY_SE_EFFECTOUTPUT_20091119_jhk8211)
_ProcessDuplicateEffectBoneRotateShow ( LocalTime , fDelta ) ;
# endif
# endif
# if defined( _GAMESERVER )
// <20> <> <EFBFBD> ⼭ StateBlow::Process() OnRebith() <20> <> <20> Ҹ<EFBFBD> <D2B8> <EFBFBD> <20> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ӱ<EFBFBD> StateBlow::Process() <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ó<EFBFBD> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> <EFBFBD> <EFBFBD> ´ <EFBFBD> .
if ( m_hActor )
m_hActor - > OnStateBlowProcessAfter ( ) ;
# endif // #if defined( _GAMESERVER )
RemoveStateBlowReservedList ( ) ;
}
int CDnStateBlow : : CanAddThisBlow ( const CDnSkill : : SkillInfo * pParentSkill , STATE_BLOW : : emBLOW_INDEX BlowIndex )
{
int iResult = ADD_SUCCESS ;
// #35335 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> ȭ<> <C8AD> , <20> <> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( IsApplied ( STATE_BLOW : : BLOW_099 ) )
{
if ( ( STATE_BLOW : : BLOW_042 = = BlowIndex ) | |
( STATE_BLOW : : BLOW_044 = = BlowIndex ) )
return ADD_FAIL_BY_INVINCIBLE ;
}
# ifdef _GAMESERVER
// 226<32> <36> Ư<> <C6AF> <20> <> ų Ȯ<> <C8AE> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ش<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <EFBFBD> ΰ<EFBFBD> .
if ( pParentSkill & & IsApplied ( STATE_BLOW : : BLOW_226 ) )
{
DNVector ( DnBlowHandle ) vlhBlows ;
GetStateBlowFromBlowIndex ( STATE_BLOW : : BLOW_226 , vlhBlows ) ;
for ( int i = 0 ; i < ( int ) vlhBlows . size ( ) ; + + i )
{
bool bCanAdd = static_cast < CDnProbInvincibleAtBlow * > ( vlhBlows . at ( i ) . GetPointer ( ) ) - > CanAddThisSkillsStateBlow ( pParentSkill - > iSkillID ) ;
if ( false = = bCanAdd )
return ADD_FAIL_BY_PROB_SKILL_INVINCIBLE ;
}
}
# endif // #ifdef _GAMESERVER
if ( pParentSkill & & pParentSkill - > bIgnoreImmune )
return iResult ;
# if defined (_GAMESERVER)
//#34452<35> <32> <20> ̽<EFBFBD> <CCBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
bool bCheckGuildPriority = false ;
if ( pParentSkill & & pParentSkill - > bIsGuildSkill = = false )
bCheckGuildPriority = true ;
# endif
// <20> <> <EFBFBD> <EFBFBD> <20> 鿪<EFBFBD> <E9BFAA> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ
// <20> <> Ȱ(<28> <> <EFBFBD> <EFBFBD> ) <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Դ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ɸ<EFBFBD> <C9B8> <EFBFBD> <20> ʴ´ <CAB4> .
list < DnBlowHandle > : : iterator iter = m_listBlowHandle . begin ( ) ;
for ( iter ; iter ! = m_listBlowHandle . end ( ) ; )
{
DnBlowHandle hNowBlow = ( * iter ) ;
if ( hNowBlow )
{
if ( ( hNowBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_077 ) )
{
bool bImmuned = static_cast < CDnImmuneBlow * > ( hNowBlow . GetPointer ( ) ) - > IsImmuned ( pParentSkill , BlowIndex ) ;
if ( bImmuned )
iResult = ADD_FAIL_BY_IMMUNE ;
}
else if ( ( hNowBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_150 ) )
{
bool bImmuned = static_cast < CDnAllImmuneBlow * > ( hNowBlow . GetPointer ( ) ) - > IsImmuned ( pParentSkill , BlowIndex ) ;
if ( bImmuned )
iResult = ADD_FAIL_BY_IMMUNE ;
}
else if ( IsApplied ( STATE_BLOW : : BLOW_057 ) )
{
// <20> <> Ȱ <20> <> <EFBFBD> ϶<EFBFBD> <CFB6> <EFBFBD> <20> ڱ<EFBFBD> <20> ڽ<EFBFBD> <DABD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> ο <EFBFBD> <CEBF> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> .. Ȥ<> <C8A4> , <20> <> <EFBFBD> <EFBFBD> /<2F> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ų<EFBFBD> <C5B2> .
if ( pParentSkill )
{
CDnSkill : : SkillInfo * pSkillInfo = const_cast < CDnSkill : : SkillInfo * > ( pParentSkill ) ;
if ( pSkillInfo - > hSkillUser )
{
if ( ! ( pSkillInfo - > hSkillUser = = m_hActor ) & &
( CDnSkill : : Buff ! = pSkillInfo - > eDurationType ) & &
( CDnSkill : : Aura ! = pSkillInfo - > eDurationType ) & &
( CDnSkill : : StanceChange ! = pSkillInfo - > eDurationType ) )
{
iResult = ADD_FAIL_BY_REVIVAL ;
}
}
}
}
else if ( hNowBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_252 )
{
//#53722 Ư<> <C6AF> <20> <> ų<EFBFBD> <C5B3> <20> 鿪<EFBFBD> ϴ<EFBFBD> <20> <> ųȿ<C5B3> <C8BF> <20> <> <EFBFBD> <EFBFBD> (hit<69> <74> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> ..)
CDnIngnoreEffectBlow * pIgnoreEffectBlow = static_cast < CDnIngnoreEffectBlow * > ( hNowBlow . GetPointer ( ) ) ;
if ( pIgnoreEffectBlow & & pParentSkill & & pIgnoreEffectBlow - > IsInvincibleAt ( pParentSkill - > iSkillID ) )
iResult = ADD_FAIL_BY_IMMUNE ;
}
# if defined(_GAMESERVER)
else if ( hNowBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_242 & & BlowIndex = = STATE_BLOW : : BLOW_242 )
{
//242<34> <32> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų ID<49> ̰<EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̻<EFBFBD> <20> ߰<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> <20> Ѵ <EFBFBD> .
if ( pParentSkill )
{
CDnSkill : : SkillInfo * pParentSkillInfo = const_cast < CDnSkill : : SkillInfo * > ( pParentSkill ) ;
CDnSkill : : SkillInfo * pExistSkillInfo = const_cast < CDnSkill : : SkillInfo * > ( hNowBlow - > GetParentSkillInfo ( ) ) ;
// #56880 <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <20> ؾ<EFBFBD> <20> Ѵ <EFBFBD> ..
LOCAL_TIME parentSkillStartTime = 0 ;
LOCAL_TIME nowBlowSkillStartTime = 0 ;
CDnComboDamageLimitBlow * pNowBlow = static_cast < CDnComboDamageLimitBlow * > ( hNowBlow . GetPointer ( ) ) ;
if ( pNowBlow )
nowBlowSkillStartTime = pNowBlow - > GetSkillStartTime ( ) ;
DnSkillHandle hParentSkill ;
if ( pParentSkillInfo - > hSkillUser )
hParentSkill = pParentSkillInfo - > hSkillUser - > FindSkill ( pParentSkillInfo - > iSkillID ) ;
if ( hParentSkill )
parentSkillStartTime = pParentSkillInfo - > projectileSkillStartTime ! = 0 ? pParentSkillInfo - > projectileSkillStartTime : hParentSkill - > GetSkillStartTime ( ) ;
if ( pExistSkillInfo )
{
if ( pParentSkillInfo - > hSkillUser & &
pParentSkillInfo - > hSkillUser = = pExistSkillInfo - > hSkillUser & & //<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ڰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
pParentSkillInfo - > iSkillID = = pExistSkillInfo - > iSkillID & & //<2F> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
nowBlowSkillStartTime = = parentSkillStartTime //<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
)
{
iResult = ADD_FAIL_BY_COMBOLIMITBLOW ;
}
}
}
}
else if ( hNowBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_249 )
{
//249<34> <39> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> ø <20> ǰ<EFBFBD> Ȱ<> <C8B0> ȭ?(<28> <> øī<C3B8> <C4AB> Ʈ <20> <> <EFBFBD> <EFBFBD> <20> <> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ) <20> <> <EFBFBD> ̻<EFBFBD> <20> ߰<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> ..
CDnPileAddEffectBlow * pPileAddEffectBlow = static_cast < CDnPileAddEffectBlow * > ( hNowBlow . GetPointer ( ) ) ;
if ( pPileAddEffectBlow & & pPileAddEffectBlow - > IsActivatedBlow ( ) )
iResult = ADD_FAIL_BY_COMBOLIMITBLOW ; //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <20> <> <EFBFBD> ϰ<EFBFBD> <20> ׳ <EFBFBD> <20> <> <20> ༮<EFBFBD> <E0BCAE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ..
}
# endif // _GAMESERVER
# if defined (_GAMESERVER)
if ( bCheckGuildPriority & & hNowBlow - > GetBlowIndex ( ) = = BlowIndex )
{
const CDnSkill : : SkillInfo * pNowSkillInfo = static_cast < CDnBlow * > ( hNowBlow . GetPointer ( ) ) - > GetParentSkillInfo ( ) ;
if ( pNowSkillInfo - > eDurationType = = pParentSkill - > eDurationType & & pNowSkillInfo - > bIsGuildSkill )
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ο <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <20> ִµ<D6B4> <20> <> <EFBFBD> 彺ų<E5BDBA> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ȱ<EFBFBD> <C8B0> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ұ<EFBFBD> !
iResult = ADD_FAIL_BY_GUILDBLOW_PRIORITY ;
}
}
# endif
}
+ + iter ;
}
return iResult ;
}
void CDnStateBlow : : _CheckImmediatelyBegin ( DnBlowHandle hBlow )
{
if ( STATE_BLOW : : BLOW_025 = = hBlow - > GetBlowIndex ( ) )
{
// <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ־ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǹ<EFBFBD> <20> <> Ȥ <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> ó<> <C3B3> <EFBFBD> Ѵ <EFBFBD> . #14128
# ifndef _GAMESERVER
if ( hBlow - > IsUseTableDefinedGraphicEffect ( ) )
hBlow - > AttachGraphicEffectDefaultType ( ) ;
# else
hBlow - > CheckAndStartActorActionInEffectInfo ( ) ;
# endif
hBlow - > OnBegin ( 0 , 0.0f ) ;
m_hActor - > OnBeginStateBlow ( hBlow ) ;
// <20> <> <EFBFBD> ٷ<EFBFBD> end <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> blow <20> <> <20> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ.
if ( STATE_BLOW : : STATE_END ! = hBlow - > GetBlowState ( ) )
hBlow - > SetState ( STATE_BLOW : : STATE_DURATION ) ;
}
}
int CDnStateBlow : : AddStateBlow ( DnBlowHandle hBlow )
{
ASSERT ( hBlow & & " CDnStateBlow::AddStateBlow " ) ;
if ( ! hBlow ) return - 1 ;
if ( false = = hBlow - > IsDuplicated ( ) )
hBlow - > SetBlowID ( GenerateStateBlowID ( ) ) ;
# ifndef _GAMESERVER
if ( m_bAllowDiffuseVariation )
{
const CDnSkill : : SkillInfo * pParentSkillInfo = hBlow - > GetParentSkillInfo ( ) ;
std : : string effectOutputIDs = pParentSkillInfo ? pParentSkillInfo - > effectOutputIDs : " " ;
# ifdef PRE_ADD_SKILL_ADDTIONAL_BUFF // <20> ش罺ų<E7BDBA> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ġ<EFBFBD> °<EFBFBD> <C2B0> <EFBFBD> <EFBFBD> ̸<EFBFBD> , Debuff<66> <66> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ȱ<EFBFBD> <C8B0> 쿡<EFBFBD> <ECBFA1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
if ( pParentSkillInfo & & pParentSkillInfo - > iSkillUserTeam ! = hBlow - > GetActorHandle ( ) - > GetTeam ( ) )
{
//Debuff <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <D6B4> <EFBFBD> Ȯ<> <C8AE> <20> ؼ<EFBFBD> ...
std : : vector < std : : string > infoTokens ;
std : : string delimiters = " ; " ;
bool isDebuggEffect = false ;
TokenizeA ( pParentSkillInfo - > debuffEffectOutputIDs , infoTokens , delimiters ) ;
int nTokenSize = ( int ) infoTokens . size ( ) ;
for ( int i = 0 ; i < nTokenSize ; + + i )
{
int nEffectOutputID = atoi ( infoTokens [ i ] . c_str ( ) ) ;
if ( nEffectOutputID ! = 0 )
{
isDebuggEffect = true ;
break ;
}
}
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .. debuff<66> <66> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( isDebuggEffect )
effectOutputIDs = pParentSkillInfo - > debuffEffectOutputIDs ;
}
# endif
EffectOutputInfo * pEffectInfo = NULL ;
std : : vector < std : : string > infoTokens ;
std : : string delimiters = " ; " ;
TokenizeA ( effectOutputIDs , infoTokens , delimiters ) ;
int nTokenSize = ( int ) infoTokens . size ( ) ;
for ( int i = 0 ; i < nTokenSize ; + + i )
{
int nEffectOutputID = atoi ( infoTokens [ i ] . c_str ( ) ) ;
pEffectInfo = GetEffectOutputInfo ( nEffectOutputID ) ;
if ( pEffectInfo & & hBlow - > IsMatchStateEffectIndex ( pEffectInfo - > iStateEffectIndex ) )
{
hBlow - > SetEffectOutputInfo ( pEffectInfo ) ;
}
}
}
# endif
+ + m_aiApplied [ hBlow - > GetBlowIndex ( ) ] ;
m_listBlowHandle . push_back ( hBlow ) ;
_CheckImmediatelyBegin ( hBlow ) ;
return hBlow - > GetBlowID ( ) ;
}
int CDnStateBlow : : RemoveStateBlowByBlowDefineIndex ( STATE_BLOW : : emBLOW_INDEX emBlowIndex )
{
// <20> ش<EFBFBD> BlowID<49> <44> <20> Ѱ<EFBFBD> <20> Ƽ <DEBE> ó<> <C3B3> <20> ϴ<EFBFBD> <20> κ<EFBFBD> <CEBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <EFBFBD> <D7B7> <EFBFBD> -1<> <31> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> <EFBFBD> ϴµ<CFB4> .. <20> <EFBFBD> <EEB6B3> ...[2010/12/14 semozz]
AddRemoveStateBlowInfo ( RemoveStateBlowInfo ( RemoveStateBlowInfo : : RSBI_BLOW_INDEX , emBlowIndex ) ) ;
return - 1 ;
}
void CDnStateBlow : : GetStateBlowFromBlowIndex ( STATE_BLOW : : emBLOW_INDEX emBlowIndex , /*IN OUT*/ DNVector ( DnBlowHandle ) & vlhResult )
{
int nIndex = - 1 ;
DnBlowHandle hFindedBlow ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; )
{
DnBlowHandle hBlow = ( * iter ) ;
if ( hBlow & & ( hBlow - > GetBlowIndex ( ) = = emBlowIndex ) )
{
vlhResult . push_back ( hBlow ) ;
}
+ + iter ;
}
}
bool CDnStateBlow : : IsExistStateBlowFromBlowIndex ( STATE_BLOW : : emBLOW_INDEX emBlowIndex )
{
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
if ( ( * iter ) & & ( ( * iter ) - > GetBlowIndex ( ) = = emBlowIndex ) )
return true ;
}
return false ;
}
bool CDnStateBlow : : IsExistStateBlowFromBlowID ( int nBlowID )
{
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
if ( ( * iter ) & & ( ( * iter ) - > GetBlowID ( ) = = nBlowID ) )
return true ;
}
return false ;
}
DnBlowHandle CDnStateBlow : : GetStateBlowFromID ( int nStateBlowID )
{
DnBlowHandle hFindedBlow ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
DnBlowHandle hBlow = ( * iter ) ;
if ( hBlow & & ( hBlow - > GetBlowID ( ) = = nStateBlowID ) )
{
hFindedBlow = hBlow ;
break ;
}
}
return hFindedBlow ;
}
# ifndef _GAMESERVER
DnBlowHandle CDnStateBlow : : GetStateBlowFromServerID ( int nServerID )
{
DnBlowHandle hFindedBlow ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
DnBlowHandle hBlow = ( * iter ) ;
if ( hBlow & & ( hBlow - > GetServerBlowID ( ) = = nServerID ) )
{
hFindedBlow = hBlow ;
break ;
}
}
return hFindedBlow ;
}
# endif
void CDnStateBlow : : RemoveStateBlowFromID ( int nStateBlowID )
{
AddRemoveStateBlowInfo ( RemoveStateBlowInfo ( RemoveStateBlowInfo : : RSBI_BLOW_ID , nStateBlowID ) ) ;
}
DnBlowHandle CDnStateBlow : : CreateStateBlow ( DnActorHandle hActor , const CDnSkill : : SkillInfo * pParentSkill ,
STATE_BLOW : : emBLOW_INDEX emBlowIndex , int nDurationTime , const char * szParam )
{
DnBlowHandle hBlow ;
//242<34> <32> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> <> <EFBFBD> Ѵ <EFBFBD> <D1B4> <EFBFBD> ? <20> ڵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> Ѵ <EFBFBD> ..
//<2F> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> ü<EFBFBD> <C3BC> <EFBFBD> <EFBFBD> Process<73> Լ<EFBFBD> <D4BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> Ѵ <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> ʿ<EFBFBD> <CABF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> )
if ( emBlowIndex = = STATE_BLOW : : BLOW_242 )
nDurationTime = - 1 ;
// <20> ̽<EFBFBD> 6190 <20> <> <EFBFBD> <EFBFBD> .
//<2F> <> ø
// ȿ<> <C8BF> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 <20> ̻<EFBFBD> <CCBB> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ִ<EFBFBD> <20> <> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߺ <EFBFBD> <DFBA> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ȴ<EFBFBD> .
// ȿ<> <C8BF> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1 <20> ̻<EFBFBD> <CCBB> ̳<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʋ<> <C6B2> <20> <> <EFBFBD> 쿡<EFBFBD> <ECBFA1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
// <09> ִ<EFBFBD> <20> <> ø<EFBFBD> <C3B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ø<EFBFBD> <C3B8> <20> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǹ<EFBFBD> <20> <> <EFBFBD> ӽð<D3BD> <C3B0> <EFBFBD> <20> ٽ<EFBFBD> <20> ʱ<EFBFBD> ȭ <20> ȴ<EFBFBD> .
// <20> <> <EFBFBD> ξ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ø ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
bool bItemPrefixSkill = false ;
if ( pParentSkill & & pParentSkill - > bItemPrefixSkill )
bItemPrefixSkill = true ;
bool bDuplicated = false ;
float fReduceTimeValue = 1.0f ;
if ( pParentSkill & & pParentSkill - > eDurationType ! = CDnSkill : : DurationTypeEnum : : Instantly )
{
fReduceTimeValue = GetImmuneReduceTimeValue ( emBlowIndex ) ;
nDurationTime = ( int ) ( ( float ) nDurationTime * fReduceTimeValue ) ;
# ifdef PRE_ADD_DECREASE_EFFECT
# ifdef _GAMESERVER
if ( hActor & & emBlowIndex ! = STATE_BLOW : : BLOW_247 & & fReduceTimeValue ! = 1.0f )
{
hActor - > SendAddSEFail ( CDnStateBlow : : ADD_DECREASE_EFFECT_BY_IMMUNE , emBlowIndex ) ;
}
# endif // _GAMESERVER
# endif // PRE_ADD_DECREASE_EFFECT
}
//#56880 242<34> <32> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> ø ó<> <C3B3> <20> ȵǾ<C8B5> <C7BE> <EFBFBD> <20> Ѵ <EFBFBD> ...
//#52905 253<35> <33> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> ø ó<> <C3B3> <20> ȵǾ<C8B5> <C7BE> <EFBFBD> <20> Ѵ <EFBFBD> ...
if ( emBlowIndex ! = STATE_BLOW : : BLOW_242 & &
emBlowIndex ! = STATE_BLOW : : BLOW_253 & &
false = = bItemPrefixSkill & &
0 < m_aiApplied [ emBlowIndex ] )
{
DNVector ( DnBlowHandle ) vlhResult ;
GetStateBlowFromBlowIndex ( emBlowIndex , vlhResult ) ;
_ASSERT ( ! vlhResult . empty ( ) ) ;
int iNumBlow = ( int ) vlhResult . size ( ) ;
for ( int iBlow = 0 ; iBlow < iNumBlow ; + + iBlow )
{
DnBlowHandle hExistBlow = vlhResult . at ( iBlow ) ;
if ( STATE_BLOW : : STATE_END ! = hExistBlow - > GetBlowState ( ) )
{
const CDnSkill : : SkillInfo * pExistParentSkillInfo = hExistBlow - > GetParentSkillInfo ( ) ;
if ( pExistParentSkillInfo & & pParentSkill )
{
// <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <20> <> ø<EFBFBD> <C3B8> ŵ<EFBFBD> ϴ<EFBFBD> .
bool bLevelCheck = pExistParentSkillInfo - > iSkillLevelID = = pParentSkill - > iSkillLevelID ;
bool bIndexCheck = pExistParentSkillInfo - > iSkillID = = pParentSkill - > iSkillID ;
// #65533 PileAddEffect <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ <20> <> ø<EFBFBD> <C3B8> Ű<EFBFBD> <C5B0> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> մϴ<D5B4> .
if ( emBlowIndex = = STATE_BLOW : : BLOW_249 )
bLevelCheck = true ;
if ( bLevelCheck & & bIndexCheck )
{
STATE_BLOW BlowInfo ;
BlowInfo . emBlowIndex = emBlowIndex ;
if ( nDurationTime ! = - 1 )
BlowInfo . fDurationTime = ( float ) nDurationTime * 0.001f ;
else
BlowInfo . fDurationTime = 0.0f ;
BlowInfo . szValue = szParam ;
//#53448 <20> <> ø<EFBFBD> <C3B8> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> <EFBFBD> ڷ<EFBFBD> SkillUser<65> <72> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
if ( emBlowIndex = = STATE_BLOW : : BLOW_249 )
hExistBlow - > SetParentSkillInfo ( pParentSkill ) ;
hExistBlow - > Duplicate ( BlowInfo ) ;
hBlow = hExistBlow ;
bDuplicated = true ;
// Remove List <20> <> <20> ִ<EFBFBD> <20> <> <20> <> <EFBFBD> ݽô<DDBD> .
REMOVE_STATEBLOW_LIST : : iterator removeInfoiter = m_RemoveStateBlowList . begin ( ) ;
REMOVE_STATEBLOW_LIST : : iterator removeInfoEndIter = m_RemoveStateBlowList . end ( ) ;
for ( REMOVE_STATEBLOW_LIST : : iterator it = m_RemoveStateBlowList . begin ( ) ; it ! = m_RemoveStateBlowList . end ( ) ; it + + ) {
if ( it - > m_Type = = RemoveStateBlowInfo : : RSBI_BLOW_ID & & hExistBlow - > GetBlowID ( ) = = it - > m_Value ) {
m_RemoveStateBlowList . erase ( it ) ;
break ;
}
}
}
}
}
}
}
if ( false = = bDuplicated )
{
static CDnCreateBlow createBlow ;
# ifdef PRE_MOD_MAGICALBREEZE_CHANGE_BLOW
STATE_BLOW : : emBLOW_INDEX emOriginalBlowIndex = emBlowIndex ;
emBlowIndex = CheckMagicalBreezeChangeBlow ( pParentSkill , emBlowIndex , hActor ) ;
hBlow = createBlow . CreateBlow ( emBlowIndex , hActor , szParam ) ;
if ( ! hBlow ) return hBlow ;
hBlow - > SetOriginalBlowIndex ( emOriginalBlowIndex ) ;
# else // PRE_MOD_MAGICALBREEZE_CHANGE_BLOW
hBlow = createBlow . CreateBlow ( emBlowIndex , hActor , szParam ) ;
if ( ! hBlow ) return hBlow ;
# endif // PRE_MOD_MAGICALBREEZE_CHANGE_BLOW
if ( nDurationTime = = - 1 )
hBlow - > SetPermanent ( true ) ;
else
hBlow - > SetDurationTime ( nDurationTime * 0.001f ) ;
# ifdef PRE_ADD_DECREASE_EFFECT
# ifdef _GAMESERVER
if ( emBlowIndex = = STATE_BLOW : : BLOW_247 & & fReduceTimeValue ! = 1.0f )
{
CDnPuppetBlow * pDnPuppetBlow = dynamic_cast < CDnPuppetBlow * > ( hBlow . GetPointer ( ) ) ;
if ( pDnPuppetBlow )
pDnPuppetBlow - > SetShowReduce ( true ) ;
}
# endif // _GAMESERVER
# endif // PRE_ADD_DECREASE_EFFECT
}
return hBlow ;
}
# ifdef PRE_MOD_MAGICALBREEZE_CHANGE_BLOW
STATE_BLOW : : emBLOW_INDEX CDnStateBlow : : CheckMagicalBreezeChangeBlow ( const CDnSkill : : SkillInfo * pParentSkill , STATE_BLOW : : emBLOW_INDEX emBlowIndex , DnActorHandle hActor )
{
STATE_BLOW : : emBLOW_INDEX emRtnBlowIndex = emBlowIndex ;
# ifdef _GAMESERVER
if ( hActor = = NULL ) return emRtnBlowIndex ;
if ( pParentSkill = = NULL ) return emRtnBlowIndex ;
if ( pParentSkill - > eApplyType ! = CDnSkill : : StateEffectApplyType : : ApplySelf | | pParentSkill - > eSkillType ! = CDnSkill : : SkillTypeEnum : : Active ) return emRtnBlowIndex ;
if ( pParentSkill - > bIsItemSkill ) return emRtnBlowIndex ;
if ( hActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_180 ) )
{
switch ( emBlowIndex )
{
case STATE_BLOW : : BLOW_001 : // <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ݷ<EFBFBD> <20> <> <EFBFBD> 밪 <20> <> <EFBFBD> <EFBFBD> -> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ݷ<EFBFBD> <20> <> <EFBFBD> 밪 <20> <> <EFBFBD> <EFBFBD>
emRtnBlowIndex = STATE_BLOW : : BLOW_028 ;
break ;
case STATE_BLOW : : BLOW_002 : // <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ݷ<EFBFBD> <20> <> <EFBFBD> 밪 <20> <> <EFBFBD> <EFBFBD> -> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ݷ<EFBFBD> <20> <> <EFBFBD> 밪 <20> <> <EFBFBD> <EFBFBD>
emRtnBlowIndex = STATE_BLOW : : BLOW_029 ;
break ;
case STATE_BLOW : : BLOW_200 : // <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ݷ<EFBFBD> <20> <> <EFBFBD> 밪 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> . <20> <> ų <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> DZ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
emRtnBlowIndex = STATE_BLOW : : BLOW_202 ; // -><3E> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ݷ<EFBFBD> <20> <> <EFBFBD> 밪 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> . <20> <> ų <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> DZ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
break ;
case STATE_BLOW : : BLOW_201 : // <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ݷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> . <20> <> ų <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> DZ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
emRtnBlowIndex = STATE_BLOW : : BLOW_203 ; // -><3E> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ݷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> . <20> <> ų <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> DZ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
break ;
}
}
# endif // _GAMESERVER
return emRtnBlowIndex ;
}
# endif // PRE_MOD_MAGICALBREEZE_CHANGE_BLOW
int CDnStateBlow : : GenerateStateBlowID ( )
{
# ifdef _GAMESERVER
s_iStateBlowIDCount [ m_hActor - > GetRoom ( ) - > GetRoomID ( ) ] + + ;
if ( s_iStateBlowIDCount [ m_hActor - > GetRoom ( ) - > GetRoomID ( ) ] > = INT_MAX )
s_iStateBlowIDCount [ m_hActor - > GetRoom ( ) - > GetRoomID ( ) ] = 0 ;
return s_iStateBlowIDCount [ m_hActor - > GetRoom ( ) - > GetRoomID ( ) ] ;
# else
s_iStateBlowIDCount + + ;
if ( s_iStateBlowIDCount > = INT_MAX )
s_iStateBlowIDCount = 0 ;
return s_iStateBlowIDCount ;
# endif
}
void CDnStateBlow : : OnChangedWeapon ( )
{
DnBlowHandle hBlow ;
m_bLockStateBlowList = true ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
hBlow = ( * iter ) ;
if ( hBlow & & ( hBlow - > GetCallBackType ( ) & SB_ONCHANGEDWEAPON ) )
{
hBlow - > OnChangedWeapon ( ) ;
}
}
m_bLockStateBlowList = false ;
}
bool CDnStateBlow : : OnDefenseAttack ( DnActorHandle hHitter , CDnState * pAttackerState , CDnDamageBase : : SHitParam & HitParam , bool bHitSuccess )
{
DnBlowHandle hBlow ;
bool bRetDefense ( bHitSuccess ) ;
m_bLockStateBlowList = true ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
hBlow = ( * iter ) ;
if ( hBlow & & ( hBlow - > GetCallBackType ( ) & SB_ONDEFENSEATTACK ) )
{
if ( hBlow - > OnDefenseAttack ( hHitter , pAttackerState , HitParam , bHitSuccess ) )
{
bRetDefense = false ;
}
}
}
if ( bRetDefense )
{
iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
hBlow = ( * iter ) ;
if ( hBlow & & ( hBlow - > GetCallBackType ( ) & SB_AFTERONDEFENSEATTACK ) )
{
if ( hBlow - > OnDefenseAttack ( hHitter , pAttackerState , HitParam , bHitSuccess ) )
{
bRetDefense = false ;
}
}
}
}
m_bLockStateBlowList = false ;
return bRetDefense ;
}
int CDnStateBlow : : OnUseMP ( int iMPDelta )
{
int iResult = iMPDelta ;
DnBlowHandle hBlow ;
m_bLockStateBlowList = true ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
int iDelta = 0 ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
hBlow = ( * iter ) ;
if ( hBlow & & ( hBlow - > GetCallBackType ( ) & SB_ONUSEMP ) )
iDelta + = hBlow - > OnUseMP ( iMPDelta ) ;
}
m_bLockStateBlowList = false ;
iResult + = iDelta ;
return iResult ;
}
void CDnStateBlow : : DelAllStateBlow ( )
{
DnBlowHandle hBlow ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
hBlow = ( * iter ) ;
if ( hBlow )
{
if ( hBlow - > IsDuration ( ) )
{
if ( ! m_hActor )
g_Log . Log ( LogType : : _ROOMCRASH , L " [DelAllStateBlow] Invalid ActorHandle \n " ) ;
}
SAFE_RELEASE_SPTR ( hBlow ) ;
}
}
m_listBlowHandle . clear ( ) ;
}
DnBlowHandle CDnStateBlow : : GetStateBlow ( int iIndex )
{
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( int i = 0 ; i < iIndex ; + + i )
+ + iter ;
return * iter ;
}
float CDnStateBlow : : OnCalcDamage ( float fOriginalDamage , CDnDamageBase : : SHitParam & HitParam )
{
float fResult = 0.0f ;
DnBlowHandle hBlow ;
DnBlowHandle hHighLanderBlow ;
DnBlowHandle hProbInvincibleAtBlow ;
float fStateBlowResult = 0.0f ;
float fHighLanderResult = 0.0f ;
float fProbInvincibleAtBlow = 0.0f ;
m_bLockStateBlowList = true ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
hBlow = ( * iter ) ;
if ( hBlow & & ( hBlow - > GetCallBackType ( ) & SB_ONCALCDAMAGE ) )
{
fStateBlowResult = hBlow - > OnCalcDamage ( fOriginalDamage , HitParam ) ;
if ( STATE_BLOW : : BLOW_143 = = hBlow - > GetBlowIndex ( ) )
{
hHighLanderBlow = hBlow ;
fHighLanderResult = fStateBlowResult ;
}
else
if ( STATE_BLOW : : BLOW_226 = = hBlow - > GetBlowIndex ( ) )
{
hProbInvincibleAtBlow = hBlow ;
fProbInvincibleAtBlow = fStateBlowResult ;
}
fResult + = fStateBlowResult ;
}
}
m_bLockStateBlowList = false ;
// <20> <> <EFBFBD> ̷<EFBFBD> <CCB7> <EFBFBD> , Ư<> <C6AF> <20> <> ų Ȯ<> <C8AE> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4> <20> ش<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 켱. (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> )
if ( hHighLanderBlow )
fResult = fHighLanderResult ;
else
if ( hProbInvincibleAtBlow & & fProbInvincibleAtBlow ! = 0.0f ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 츸.
fResult = fProbInvincibleAtBlow ;
return fResult ;
}
bool CDnStateBlow : : OnDie ( DnActorHandle hHitter )
{
bool bProcessed = false ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ۿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> ó<> <C3B3> .
if ( IsApplied ( STATE_BLOW : : BLOW_137 ) )
{
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
DnBlowHandle hBlow = ( * iter ) ;
if ( hBlow & & hBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_137 )
{
static_cast < CDnUsingSkillWhenDieBlow * > ( hBlow . GetPointer ( ) ) - > OnDie ( ) ;
# if defined(PRE_FIX_44884)
//UsingSkillWhenDieBlow<6F> <77> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ʹ <EFBFBD> OnDieȣ <65> <C8A3> <EFBFBD> <EFBFBD> HP<48> <50> 1<> <31> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> OnDieȣ <65> <C8A3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> ̷<EFBFBD> <CCB7> <EFBFBD> .
//<2F> <> <EFBFBD> <EFBFBD> Hitter<65> <72> <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> Ȳ<EFBFBD> ̶<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <E2BFA1> <20> <> <EFBFBD> <EFBFBD> <20> س<EFBFBD> <D8B3> ´ <EFBFBD> .
static_cast < CDnUsingSkillWhenDieBlow * > ( hBlow . GetPointer ( ) ) - > SetFinalHitterActor ( hHitter ) ;
# endif // PRE_FIX_44884
bProcessed = true ;
}
}
}
return bProcessed ;
}
void CDnStateBlow : : OnTargetHit ( DnActorHandle hTargetActor )
{
DnBlowHandle hBlow ;
m_bLockStateBlowList = true ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
hBlow = ( * iter ) ;
if ( hBlow & & ( hBlow - > GetCallBackType ( ) & SB_ONTARGETHIT ) )
{
hBlow - > OnTargetHit ( hTargetActor ) ;
}
}
m_bLockStateBlowList = false ;
}
void CDnStateBlow : : ResetStateBlowBySkillType ( int nSkillDurationType )
{
AddRemoveStateBlowInfo ( RemoveStateBlowInfo ( RemoveStateBlowInfo : : RSBI_SKILL_DURATION_TYPE , nSkillDurationType ) ) ;
}
# ifndef _GAMESERVER
void CDnStateBlow : : RestoreAllBlowGraphicEffect ( )
{
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter ) {
DnBlowHandle hBlow = * iter ;
if ( ! hBlow ) continue ;
if ( hBlow - > IsUseTableDefinedGraphicEffect ( ) ) {
hBlow - > AttachGraphicEffectDefaultType ( ) ;
}
}
}
EffectOutputInfo * CDnStateBlow : : GetEffectOutputInfo ( int nItemID )
{
std : : map < int , EffectOutputInfo * > : : iterator it = s_nMapEffectOutputInfo . find ( nItemID ) ;
if ( it = = s_nMapEffectOutputInfo . end ( ) ) return NULL ;
return it - > second ;
}
# ifndef _GAMESERVER
void CDnStateBlow : : RemoveStateBlowFromServerID ( int nServerBlowID )
{
AddRemoveStateBlowInfo ( RemoveStateBlowInfo ( RemoveStateBlowInfo : : RSBI_BLOW_SERVER_ID , nServerBlowID ) ) ;
}
# endif
# if !defined(SW_MODIFY_SE_EFFECTOUTPUT_20091119_jhk8211)
void CDnStateBlow : : AddEffectAttachedBone ( int iBone , DnEtcHandle hEffectHandle )
{
// <20> <> <EFBFBD> <EFBFBD> 0 <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> ׳ <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . #16291
if ( CDnActor : : FXDummyBoneEnum : : FX_01 ! = iBone )
return ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 鼭 <20> <> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ѷ<EFBFBD> <D1B7> <EFBFBD> <EFBFBD> <EFBFBD> .
_ASSERT ( 0 < = iBone & & iBone < CDnActor : : Max_FX_Dummy_Bone ) ;
if ( 0 < = iBone & & iBone < CDnActor : : Max_FX_Dummy_Bone )
{
S_BONE_EFFECT BoneEffect ;
BoneEffect . hEffect = hEffectHandle ;
// ó<> <C3B3> <20> ߰<EFBFBD> <DFB0> Ǵ<EFBFBD> <20> <> <EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> show ó<> <C3B3> .
// show( false ) <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ǰ<EFBFBD> <20> <> <20> <> <20> <> <EFBFBD> ʹ <EFBFBD> <20> <> <20> Դ´ <D4B4> .
if ( m_aListBoneEffectStatus [ iBone ] . empty ( ) )
BoneEffect . Show ( true ) ;
else
BoneEffect . Show ( false ) ;
m_aListBoneEffectStatus [ iBone ] . push_back ( BoneEffect ) ;
}
}
void CDnStateBlow : : DelEffectAttachedBone ( int iBone , DnEtcHandle hEffectHandle )
{
// <20> <> <EFBFBD> <EFBFBD> 0 <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> ׳ <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . #16291
if ( CDnActor : : FXDummyBoneEnum : : FX_01 ! = iBone )
return ;
_ASSERT ( 0 < = iBone & & iBone < CDnActor : : Max_FX_Dummy_Bone ) ;
if ( 0 < = iBone & & iBone < CDnActor : : Max_FX_Dummy_Bone )
{
list < S_BONE_EFFECT > & listBoneEffect = m_aListBoneEffectStatus [ iBone ] ;
list < S_BONE_EFFECT > : : iterator iter = find ( listBoneEffect . begin ( ) ,
listBoneEffect . end ( ) , hEffectHandle ) ;
if ( listBoneEffect . end ( ) ! = iter )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> ø<EFBFBD> <C3B8> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <20> ڸ<EFBFBD> <DAB8> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ༮<EFBFBD> <E0BCAE> <20> <> <EFBFBD> <EFBFBD> <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> ..
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ʸ<EFBFBD> <20> ѱ<EFBFBD> <D1B1> <EFBFBD> .
// <20> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> ٸ<EFBFBD> bone effect status list <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
if ( 1 < ( int ) listBoneEffect . size ( ) )
{
if ( iter - > bShow )
{
list < S_BONE_EFFECT > : : iterator iterNext = iter ;
iterNext + + ;
if ( listBoneEffect . end ( ) = = iterNext )
iterNext = listBoneEffect . begin ( ) ;
iterNext - > Show ( true ) ;
}
}
m_aListBoneEffectStatus [ iBone ] . erase ( iter ) ;
}
}
}
# endif
# endif
void CDnStateBlow : : OnCmdActionFromPacket ( const char * pActionName )
{
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
BLOW_HANDLE_LIST_ITER iterEnd = m_listBlowHandle . end ( ) ;
for ( iter ; iter ! = iterEnd ; + + iter )
{
if ( * iter )
( * iter ) - > OnCmdActionFromPacket ( pActionName ) ;
}
}
# ifdef _GAMESERVER
CDnSkill : : CanApply CDnStateBlow : : CanApplySkillStateEffect ( const CDnSkill : : SkillInfo * pUsingSkillInfo , const CDnSkill : : StateEffectStruct & newStateEffect )
{
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ˻<EFBFBD> <CBBB> Ҷ<EFBFBD> <20> <> <EFBFBD> ¸ <EFBFBD> <C2B8> <EFBFBD> Ʈ <20> ʱ<EFBFBD> ȭ [2010/12/09 semozz]
if ( m_hActor )
m_hActor - > InitStateBlowIDToRemove ( ) ;
CDnSkill : : CanApply eResult = CDnSkill : : CanApply : : Apply ;
// 1. <20> <> <EFBFBD> ο <EFBFBD> <20> <> <EFBFBD> °<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> ִٸ<D6B4> <20> ߰<EFBFBD> <20> <> Ų<EFBFBD> <C5B2> .
if ( ( CDnSkill : : IsNeedCheckApplyStateBlow ( ( STATE_BLOW : : emBLOW_INDEX ) newStateEffect . nID ) ) | |
( newStateEffect . nDurationTime > 0 ) )
{
// [2010/11/12 semozz]
// 2. <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> ִ<EFBFBD> StateBlow<6F> <77> <20> <> <EFBFBD> <EFBFBD>
// <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ..
// <20> <> <20> κ<EFBFBD> <CEBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD>
STATE_BLOW : : emBLOW_INDEX newBlowIndex = ( STATE_BLOW : : emBLOW_INDEX ) newStateEffect . nID ;
if ( IsApplied ( newBlowIndex ) )
{
DNVector ( DnBlowHandle ) vlhResult ;
GetStateBlowFromBlowIndex ( newBlowIndex , vlhResult ) ;
_ASSERT ( ! vlhResult . empty ( ) ) ;
vector < int > vlStateBlowIDToRemove ;
DNVector ( DnBlowHandle ) vlhSameSkillBlows ;
bool bExistingSameSkill = false ;
int iExistingSameSkillCount = 0 ;
int iNumBlow = ( int ) vlhResult . size ( ) ;
for ( int iBlow = 0 ; iBlow < iNumBlow ; + + iBlow )
{
DnBlowHandle hExistingBlow = vlhResult . at ( iBlow ) ;
const CDnSkill : : SkillInfo * pExistingParentSkillInfo = hExistingBlow ? hExistingBlow - > GetParentSkillInfo ( ) : NULL ;
// <20> <> ü <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ɸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϹ Ƿ<CFB9> <20> <> <EFBFBD> ⼭ <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ƴ<EFBFBD>
if ( NULL = = pExistingParentSkillInfo )
continue ;
// <20> <> ų <20> ߺ <EFBFBD> ī<> <C4AB> Ʈ üũ
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> ٸ<EFBFBD> <20> ߺ <EFBFBD> <DFBA> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> .
bool bIsSameSkillID = false ;
# if defined(PRE_FIX_58505)
//<2F> <> <EFBFBD> ̻<EFBFBD> <20> <> ų Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> ,
//<2F> <> <EFBFBD> ̻<EFBFBD> <20> <> ų Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̻<EFBFBD> <20> <> ų Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( pUsingSkillInfo - > bItemPrefixSkill = = true & & pUsingSkillInfo - > nPrefixSkillType ! = CDnPrefixSkill : : Prefix_Non )
bIsSameSkillID = pUsingSkillInfo - > nPrefixSkillType = = pExistingParentSkillInfo - > nPrefixSkillType ;
else
bIsSameSkillID = pUsingSkillInfo - > iSkillID = = pExistingParentSkillInfo - > iSkillID ;
# else
if ( pUsingSkillInfo - > iSkillID = = pExistingParentSkillInfo - > iSkillID )
bIsSameSkillID = true ;
# endif // PRE_FIX_58505
if ( bIsSameSkillID = = true )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> ó<> <C3B3> <20> <> <EFBFBD> ´ ٸ<C2B4> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų ī<> <C4AB> Ʈ <20> ϳ <EFBFBD> <20> ÷<EFBFBD> <C3B7> <EFBFBD> .
iExistingSameSkillCount + = hExistingBlow - > GetDuplicateCount ( ) ;
bExistingSameSkill = true ;
vlhSameSkillBlows . push_back ( hExistingBlow ) ;
}
if ( pUsingSkillInfo - > eTargetType = = CDnSkill : : TargetTypeEnum : : All //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> TargetType<70> <65> All<6C> ̰<EFBFBD> ,
& & ( 0 ! = pUsingSkillInfo - > iSkillDuplicateMethod & & ( pUsingSkillInfo - > iSkillDuplicateMethod = = pExistingParentSkillInfo - > iSkillDuplicateMethod ) ) //<2F> <> ø ó<> <C3B3> ID<49> <44> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> ְ<EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ID<49> ϶<EFBFBD> ,
& & ( m_hActor = = pUsingSkillInfo - > hSkillUser ) //<2F> ڱ<EFBFBD> <20> ڽ<EFBFBD>
)
continue ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> 0<> <30> <20> ƴ϶<C6B4> <CFB6> <EFBFBD> <20> <> ų ȿ<> <C8BF> <20> ߺ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <CABF> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> 0<> ̸<EFBFBD> <20> ׳ <EFBFBD> <20> <> ø<EFBFBD> <C3B8> .
// Ȥ<> <C8A4> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ̸鼭 <20> ִ<EFBFBD> <20> <> ø ī<> <C4AB> Ʈ<EFBFBD> <C6AE> 1<> <31> <EFBFBD> <EFBFBD> <EFBFBD> ΰ<EFBFBD> <CEB0> 쿣 <20> <> ų <20> <> ü<EFBFBD> ǵ<EFBFBD> <C7B5> <EFBFBD> ó<> <C3B3> .
# if defined(PRE_FIX_58505)
if ( 0 ! = pUsingSkillInfo - > iSkillDuplicateMethod | |
( bIsSameSkillID = = true & & pUsingSkillInfo - > iDuplicateCount < = 1 ) )
# else
if ( 0 ! = pUsingSkillInfo - > iSkillDuplicateMethod | |
( pUsingSkillInfo - > iSkillID = = pExistingParentSkillInfo - > iSkillID & & pUsingSkillInfo - > iDuplicateCount < = 1 ) )
# endif // PRE_FIX_58505
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <20> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> ΰ<EFBFBD> . <20> <EFBFBD> <D7B7> ٸ<EFBFBD> <20> <> ø<EFBFBD> <C3B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> <EEB0A3> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> øó<C3B8> <C3B3> <EFBFBD> <EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> Ѵ <EFBFBD> .
// <20> ٸ<EFBFBD> <20> <> <EFBFBD> ε<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ɸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . (#19812)
if ( ( pUsingSkillInfo - > iSkillDuplicateMethod = = pExistingParentSkillInfo - > iSkillDuplicateMethod ) & &
( pUsingSkillInfo - > iSkillUserTeam = = pExistingParentSkillInfo - > iSkillUserTeam ) )
{
if ( pUsingSkillInfo - > iLevel > = pExistingParentSkillInfo - > iLevel )
{
// 242<34> <32> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ѹ<EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> Ǹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǹ<EFBFBD> <20> ȵȴ<C8B5> .
// Ȯ<> <C8AE> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ ٸ<D1B4> <20> <> <EFBFBD> ½<EFBFBD> ų <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ־<EFBFBD> <D6BE> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> üũ<C3BC> ϴ<EFBFBD> <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <EFBFBD> <EFBFBD> üũ<C3BC> ϴ<EFBFBD> <20> <> <EFBFBD> ̱<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> ״<EFBFBD> <D7B4> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( hExistingBlow - > GetBlowIndex ( ) ! = STATE_BLOW : : BLOW_242 & &
hExistingBlow - > CanBegin ( ) )
{
vlStateBlowIDToRemove . push_back ( hExistingBlow - > GetBlowID ( ) ) ;
//mapDuplicateResult[ hExistingBlow->GetBlowIndex() ] = true;
// <20> <> <EFBFBD> µǾ<C2B5> <C7BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> µ<EFBFBD> <C2B5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> . [2010/12/08 semozz]
// <20> <> <EFBFBD> ⼭ <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> µ<EFBFBD> <C2B5> <EFBFBD> OnSignal<61> <6C> STE_ApplyStateEffect <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ҷ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ¸ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
m_hActor - > AddStateBlowIDToRemove ( hExistingBlow - > GetBlowID ( ) ) ;
}
else
{
eResult = CDnSkill : : CanApply : : Fail ; // ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> Ȯ<> <C8AE> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
}
}
else if ( pUsingSkillInfo - > iLevel < pExistingParentSkillInfo - > iLevel )
{
// ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ȵ<EFBFBD> .
eResult = CDnSkill : : CanApply : : Fail ;
// Note <20> ѱ<EFBFBD> : <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <EFBFBD> <D7B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ǥ<> <C7A5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ ٸ<D1B4> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> ϸ<EFBFBD> <20> <> .
}
}
}
}
if ( false = = vlStateBlowIDToRemove . empty ( ) )
{
// <20> <> ų ȿ<> <C8BF> <20> <> ü. <20> <> ø ī<> <C4AB> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
bExistingSameSkill = false ;
eResult = CDnSkill : : CanApply : : ApplyDuplicateSameSkill ;
}
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <20> <> ø<EFBFBD> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؾ<EFBFBD> <D8BE> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> ִ<EFBFBD> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȵȴ<C8B5> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> øó<C3B8> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
if ( CDnSkill : : CanApply : : Fail ! = eResult )
{
if ( bExistingSameSkill )
{
if ( pUsingSkillInfo - > iDuplicateCount < = iExistingSameSkillCount )
{
// <20> ִ<EFBFBD> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> ʱ<EFBFBD> ȭ <20> Ѵ <EFBFBD> .
int iNumSameSkillBlowsToResetDurationTime = ( int ) vlhSameSkillBlows . size ( ) ;
for ( int iBlow = 0 ; iBlow < iNumSameSkillBlowsToResetDurationTime ; + + iBlow )
{
DnBlowHandle hBlow = vlhSameSkillBlows . at ( iBlow ) ;
//#53448 249<34> <39> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <20> ̻<EFBFBD> <CCBB> <EFBFBD> <20> ߰<EFBFBD> <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> .
//<2F> ִ<EFBFBD> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ʒ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 鼭 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ϰ<EFBFBD> , <20> ٽ<EFBFBD> <20> ߰<EFBFBD> <20> ۾<EFBFBD> <20> ʿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( hBlow & & hBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_249 )
continue ;
// <20> ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ߴ ٰ<DFB4> <20> <> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ȯ<EFBFBD> <C8AE> .
int nDurationTime = int ( hBlow - > GetDurationTime ( ) * 1000.0f ) ;
hBlow - > ResetDurationTime ( ) ;
CDnSkill : : SkillInfo SkillInfo = * ( hBlow - > GetParentSkillInfo ( ) ) ;
STATE_BLOW : : emBLOW_INDEX BlowIndex = hBlow - > GetBlowIndex ( ) ;
string strValue ( hBlow - > GetValue ( ) ) ;
// <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> . [2011/01/18 semozz]
int nBlowID = hBlow - > GetBlowID ( ) ;
// <20> <> Ŷ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
m_hActor - > SendRemoveStateEffectFromID ( nBlowID ) ;
// <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> ..
if ( m_hActor - > GetStateBlow ( ) )
m_hActor - > GetStateBlow ( ) - > RemoveImediatlyStateEffectFromID ( nBlowID ) ;
// <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> 100% <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ѿ<EFBFBD> <20> Ϲ Ƿ<CFB9>
// CanBegin <20> Լ<EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> bCheckCanBegin <20> ÷<EFBFBD> <C3B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȣ <> <C8A3> .
m_hActor - > CmdAddStateEffect ( & SkillInfo , BlowIndex , nDurationTime , strValue . c_str ( ) , false , false ) ;
}
eResult = CDnSkill : : CanApply : : Fail ;
}
}
}
}
}
return eResult ;
}
# endif
bool RemoveStateBlowInfo : : Compare ( DnBlowHandle hBlow )
{
bool result = false ;
if ( ! hBlow )
return result ;
switch ( m_Type )
{
case RSBI_BLOW_INDEX :
{
if ( hBlow - > IsEternity ( ) = = false & & hBlow - > IsFromSourceItem ( ) = = false )
result = ( hBlow - > GetBlowIndex ( ) = = m_Value ) ;
}
break ;
case RSBI_BLOW_ID :
{
result = ( hBlow - > GetBlowID ( ) = = m_Value ) ;
}
break ;
case RSBI_SKILL_DURATION_TYPE :
{
const CDnSkill : : SkillInfo * pSkillInfo = hBlow - > GetParentSkillInfo ( ) ;
result = ( pSkillInfo & & ( CDnSkill : : DurationTypeEnum ) m_Value = = pSkillInfo - > eDurationType ) ;
}
break ;
# if !defined(_GAMESERVER)
case RSBI_BLOW_SERVER_ID :
{
result = ( hBlow - > GetServerBlowID ( ) = = m_Value ) ;
}
break ;
# endif
}
return result ;
}
void CDnStateBlow : : RemoveStateBlowReservedList ( )
{
REMOVE_STATEBLOW_LIST : : iterator removeInfoiter = m_RemoveStateBlowList . begin ( ) ;
# ifndef _FINAL_BUILD
_CrashIfRemoveListLocked ( ) ;
# endif // #ifdef _FINAL_BUILD
m_bLockRemoveReservedList = true ;
for ( ; removeInfoiter ! = m_RemoveStateBlowList . end ( ) ; + + removeInfoiter )
{
RemoveStateBlowInfo & removeInfo = ( * removeInfoiter ) ;
DnBlowHandle hBlow ;
# ifndef _FINAL_BUILD
_CrashIfProcessListLocked ( ) ;
# endif // #ifdef _FINAL_BUILD
m_bLockStateBlowList = true ;
BLOW_HANDLE_LIST_ITER blowListiter = m_listBlowHandle . begin ( ) ;
for ( ; blowListiter ! = m_listBlowHandle . end ( ) ; )
{
hBlow = ( * blowListiter ) ;
if ( removeInfo . Compare ( hBlow ) )
{
//ResetStateBlowBySkillType <20> Լ<EFBFBD> <D4BC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ŷ Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( RemoveStateBlowInfo : : RSBI_SKILL_DURATION_TYPE = = removeInfo . m_Type )
{
# if defined(_GAMESERVER)
STATE_BLOW : : emBLOW_INDEX emBlowIndex = hBlow - > GetStateBlow ( ) . emBlowIndex ;
// Ŭ<> Ե<F3BFA1B0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϶<EFBFBD> <CFB6> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
m_hActor - > SendRemoveStateEffect ( emBlowIndex ) ;
# endif // _GAMESERVER
}
_ASSERT ( m_aiApplied [ hBlow - > GetBlowIndex ( ) ] > 0 ) ;
- - m_aiApplied [ hBlow - > GetBlowIndex ( ) ] ;
hBlow - > OnEnd ( 0 , 0 ) ;
m_hActor - > OnEndStateBlow ( hBlow ) ;
SAFE_RELEASE_SPTR ( hBlow ) ;
blowListiter = m_listBlowHandle . erase ( blowListiter ) ;
//BlowIndex, DuratioType<70> <65> <20> <> <EFBFBD> <EFBFBD> ã<> Ƽ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( RemoveStateBlowInfo : : RSBI_BLOW_INDEX = = removeInfo . m_Type | |
RemoveStateBlowInfo : : RSBI_SKILL_DURATION_TYPE = = removeInfo . m_Type )
continue ;
else
break ;
}
+ + blowListiter ;
}
m_bLockStateBlowList = false ;
}
m_RemoveStateBlowList . clear ( ) ;
m_bLockRemoveReservedList = false ;
}
void CDnStateBlow : : AddRemoveStateBlowInfo ( RemoveStateBlowInfo info )
{
//<2F> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> Ÿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 鼭<EFBFBD> <E9BCAD> <20> <> <EFBFBD> <EFBFBD> ..
m_RemoveStateBlowList . push_back ( info ) ;
}
void CDnStateBlow : : RemoveImediatlyStateEffectFromID ( int nStateBlowID )
{
# ifndef _FINAL_BUILD
_CrashIfProcessListLocked ( ) ;
# endif // #ifdef _FINAL_BUILD
DnBlowHandle hBlow ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
hBlow = ( * iter ) ;
if ( hBlow & & ( hBlow - > GetBlowID ( ) = = nStateBlowID ) )
{
_ASSERT ( m_aiApplied [ hBlow - > GetBlowIndex ( ) ] > 0 ) ;
- - m_aiApplied [ hBlow - > GetBlowIndex ( ) ] ;
hBlow - > OnEnd ( 0 , 0 ) ;
m_hActor - > OnEndStateBlow ( hBlow ) ;
OutputDebug ( " %s EndBlowID: %d Index: %d " , __FUNCTION__ , hBlow - > GetBlowID ( ) , hBlow - > GetBlowIndex ( ) ) ;
SAFE_RELEASE_SPTR ( hBlow ) ;
m_listBlowHandle . erase ( iter ) ;
break ;
}
}
}
void CDnStateBlow : : RemoveImediatlyStateEffectByBlowIndex ( STATE_BLOW : : emBLOW_INDEX emBlowIndex )
{
# ifndef _FINAL_BUILD
_CrashIfProcessListLocked ( ) ;
# endif // #ifdef _FINAL_BUILD
int nIndex = - 1 ;
DnBlowHandle hBlow ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; )
{
hBlow = ( * iter ) ;
if ( hBlow & & ( ( hBlow - > IsEternity ( ) = = false & & hBlow - > IsFromSourceItem ( ) = = false ) & & hBlow - > GetBlowIndex ( ) = = emBlowIndex ) )
{
_ASSERT ( m_aiApplied [ hBlow - > GetBlowIndex ( ) ] > 0 ) ;
- - m_aiApplied [ hBlow - > GetBlowIndex ( ) ] ;
hBlow - > OnEnd ( 0 , 0 ) ;
m_hActor - > OnEndStateBlow ( hBlow ) ;
nIndex = hBlow - > GetBlowID ( ) ;
SAFE_RELEASE_SPTR ( hBlow ) ;
iter = m_listBlowHandle . erase ( iter ) ;
continue ;
}
+ + iter ;
}
}
# if !defined(_GAMESERVER)
void CDnStateBlow : : RemoveImediatlyStateEffectByServerID ( int nServerBlowID )
{
# ifndef _FINAL_BUILD
_CrashIfProcessListLocked ( ) ;
# endif // #ifdef _FINAL_BUILD
DnBlowHandle hBlow ;
BLOW_HANDLE_LIST_ITER iter = m_listBlowHandle . begin ( ) ;
for ( ; iter ! = m_listBlowHandle . end ( ) ; + + iter )
{
hBlow = ( * iter ) ;
if ( hBlow & & ( hBlow - > GetServerBlowID ( ) = = nServerBlowID ) )
{
_ASSERT ( m_aiApplied [ hBlow - > GetBlowIndex ( ) ] > 0 ) ;
- - m_aiApplied [ hBlow - > GetBlowIndex ( ) ] ;
hBlow - > OnEnd ( 0 , 0 ) ;
m_hActor - > OnEndStateBlow ( hBlow ) ;
SAFE_RELEASE_SPTR ( hBlow ) ;
m_listBlowHandle . erase ( iter ) ;
break ;
}
}
}
# endif // _GAMESERVER
bool CDnStateBlow : : IsImmuned ( STATE_BLOW : : emBLOW_INDEX blowIndex )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( IsApplied ( STATE_BLOW : : BLOW_099 ) )
{
return false ;
}
// <20> <> <EFBFBD> <EFBFBD> <20> 鿪<EFBFBD> <E9BFAA> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ
// <20> <> Ȱ(<28> <> <EFBFBD> <EFBFBD> ) <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Դ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ɸ<EFBFBD> <C9B8> <EFBFBD> <20> ʴ´ <CAB4> .
list < DnBlowHandle > : : iterator iter = m_listBlowHandle . begin ( ) ;
for ( iter ; iter ! = m_listBlowHandle . end ( ) ; )
{
DnBlowHandle hNowBlow = ( * iter ) ;
if ( hNowBlow )
{
if ( ( hNowBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_077 ) )
{
bool bImmuned = static_cast < CDnImmuneBlow * > ( hNowBlow . GetPointer ( ) ) - > IsImmuned ( blowIndex ) ;
if ( bImmuned )
return true ;
}
else
if ( ( hNowBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_150 ) )
{
bool bImmuned = static_cast < CDnAllImmuneBlow * > ( hNowBlow . GetPointer ( ) ) - > IsImmuned ( blowIndex ) ;
if ( bImmuned )
return true ;
}
}
+ + iter ;
}
return false ;
}
# ifndef _FINAL_BUILD
void CDnStateBlow : : _CrashIfProcessListLocked ( void )
{
if ( m_bLockStateBlowList )
{
_ASSERT ( 0 ) ;
int * pNull = NULL ;
* pNull = 0xffffeeee ;
}
}
void CDnStateBlow : : _CrashIfRemoveListLocked ( void )
{
if ( m_bLockRemoveReservedList )
{
_ASSERT ( 0 ) ;
int * pNull = NULL ;
* pNull = 0xeeeeffff ;
}
}
# endif // #ifdef _FINAL_BUILD
void CDnStateBlow : : Process_StateBlow_Old ( LOCAL_TIME LocalTime , float fDelta , bool bForceInitialize )
{
BLOW_HANDLE_LIST : : iterator iter ;
DnBlowHandle hBlow ;
for ( iter = m_listBlowHandle . begin ( ) ; iter ! = m_listBlowHandle . end ( ) ; )
{
hBlow = ( * iter ) ;
if ( hBlow )
{
// <20> <> <EFBFBD> Ӽ<EFBFBD> <D3BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ȯ<> ο <EFBFBD> .
if ( ! ( hBlow - > GetActorHandle ( ) ) )
hBlow - > SetActorHandle ( m_hActor ) ;
//////////////////////////////////////////////////////////////////////////
if ( hBlow - > IsBegin ( ) )
{
// <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ־ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǹ<EFBFBD> <20> <> Ȥ <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> ó<> <C3B3> <EFBFBD> Ѵ <EFBFBD> . #14128
# ifndef _GAMESERVER
if ( hBlow - > IsUseTableDefinedGraphicEffect ( ) )
hBlow - > AttachGraphicEffectDefaultType ( ) ;
# else
hBlow - > CheckAndStartActorActionInEffectInfo ( ) ;
# endif
hBlow - > OnBegin ( LocalTime , fDelta ) ;
m_hActor - > OnBeginStateBlow ( hBlow ) ;
// <20> <> <EFBFBD> ٷ<EFBFBD> end <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> blow <20> <> <20> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ.
if ( STATE_BLOW : : STATE_END ! = hBlow - > GetBlowState ( ) )
hBlow - > SetState ( STATE_BLOW : : STATE_DURATION ) ;
}
else if ( hBlow - > IsDuration ( ) )
{
hBlow - > Process ( LocalTime , fDelta ) ;
}
else if ( hBlow - > IsEnd ( ) )
{
RemoveStateBlowFromID ( hBlow - > GetBlowID ( ) ) ;
}
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> blow <20> Ŀ<EFBFBD> process <20> Ŀ<EFBFBD> <20> <> , ȭ<> <C8AD> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> interval <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> װų<D7B0> <20> ϴ<EFBFBD> <20> <> <EFBFBD> 쿣 <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> ٷ<EFBFBD> <20> ٽ<EFBFBD> <20> ٰ<EFBFBD> <20> Ǵµ<C7B4>
// <20> <EFBFBD> <D7BE> <EFBFBD> <20> <> <20> <> Ȱ <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> Ѵ <EFBFBD> .
# ifdef _GAMESERVER
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϶<EFBFBD> <20> <> <EFBFBD> Ͱ<EFBFBD> gm trace <20> <> <20> <> <EFBFBD> <EFBFBD> <20> Ʒ <EFBFBD> <20> <> Ȱ ó<> <C3B3> <20> <> ƾ<EFBFBD> <C6BE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EEB0A1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϳ <EFBFBD> <20> <> <20> ɾ<EFBFBD> <C9BE> ش<EFBFBD> .
if ( ! m_hActor - > IsGMTrace ( ) & & ! bForceInitialize & & m_hActor - > IsPlayerActor ( ) & & m_hActor - > IsDie ( ) )
# else
if ( ! bForceInitialize & & m_hActor - > IsPlayerActor ( ) & & m_hActor - > IsDie ( ) )
# endif
{
// <20> <> Ȱ <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
bool bExistRebirth = false ;
for ( iter = m_listBlowHandle . begin ( ) ; m_listBlowHandle . end ( ) ! = iter ; + + iter )
{
if ( ! ( * iter ) )
continue ;
if ( ( * iter ) - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_057 | | ( * iter ) - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_230 )
{
bExistRebirth = true ;
break ;
}
}
if ( false = = bExistRebirth )
break ;
}
else
+ + iter ;
}
}
void CDnStateBlow : : Process_StateBlow_New ( LOCAL_TIME LocalTime , float fDelta , bool bForceInitialize )
{
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , Rebirth<74> <68> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
bool bIsDie = false ;
bool bExistRebirth = false ;
BLOW_HANDLE_LIST : : iterator rebirthStateIter = m_listBlowHandle . end ( ) ;
BLOW_HANDLE_LIST : : iterator spectatorStateIter = m_listBlowHandle . end ( ) ;
# ifdef _GAMESERVER
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϶<EFBFBD> <20> <> <EFBFBD> Ͱ<EFBFBD> gm trace <20> <> <20> <> <EFBFBD> <EFBFBD> <20> Ʒ <EFBFBD> <20> <> Ȱ ó<> <C3B3> <20> <> ƾ<EFBFBD> <C6BE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EEB0A1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϳ <EFBFBD> <20> <> <20> ɾ<EFBFBD> <C9BE> ش<EFBFBD> .
if ( ! m_hActor - > IsGMTrace ( ) & & ! bForceInitialize & & m_hActor - > IsPlayerActor ( ) & & m_hActor - > IsDie ( ) )
# else
if ( ! bForceInitialize & & m_hActor - > IsPlayerActor ( ) & & m_hActor - > IsDie ( ) )
# endif
{
bIsDie = true ;
for ( BLOW_HANDLE_LIST : : iterator iter = m_listBlowHandle . begin ( ) ; m_listBlowHandle . end ( ) ! = iter ; + + iter )
{
if ( ! ( * iter ) )
continue ;
if ( ( * iter ) - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_057 )
{
bExistRebirth = true ;
rebirthStateIter = iter ;
}
if ( ( * iter ) - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_230 )
{
bExistRebirth = true ;
spectatorStateIter = iter ;
}
}
}
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̰<EFBFBD> ,
if ( bIsDie )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Rebirth<74> <68> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ ٸ<D1B4> Rebirth<74> <68> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> ó<> <C3B3>
if ( rebirthStateIter ! = m_listBlowHandle . end ( ) )
{
DnBlowHandle hRebirthBlow = ( * rebirthStateIter ) ;
Process_BlowHandle ( hRebirthBlow , LocalTime , fDelta ) ;
}
if ( spectatorStateIter ! = m_listBlowHandle . end ( ) )
{
DnBlowHandle hSpectatorBlow = ( * spectatorStateIter ) ;
Process_BlowHandle ( hSpectatorBlow , LocalTime , fDelta ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <CFB0> <EFBFBD> <20> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> ó<> <C3B3> <20> <> <EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> <> <EFBFBD> ⼭ <20> <> <EFBFBD> <EFBFBD> ...
return ;
}
DnBlowHandle hBlow ;
for ( BLOW_HANDLE_LIST : : iterator iter = m_listBlowHandle . begin ( ) ; iter ! = m_listBlowHandle . end ( ) ; )
{
hBlow = ( * iter ) ;
//<2F> <> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ..
if ( ! hBlow )
{
iter = m_listBlowHandle . erase ( iter ) ;
continue ;
}
Process_BlowHandle ( hBlow , LocalTime , fDelta ) ;
+ + iter ;
}
}
void CDnStateBlow : : Process_BlowHandle ( DnBlowHandle hBlow , LOCAL_TIME LocalTime , float fDelta )
{
if ( ! hBlow )
return ;
if ( hBlow - > IsBegin ( ) )
{
// <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ־ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǹ<EFBFBD> <20> <> Ȥ <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> ó<> <C3B3> <EFBFBD> Ѵ <EFBFBD> . #14128
# ifndef _GAMESERVER
if ( hBlow - > IsUseTableDefinedGraphicEffect ( ) )
hBlow - > AttachGraphicEffectDefaultType ( ) ;
# else
hBlow - > CheckAndStartActorActionInEffectInfo ( ) ;
# endif
hBlow - > OnBegin ( LocalTime , fDelta ) ;
m_hActor - > OnBeginStateBlow ( hBlow ) ;
// <20> <> <EFBFBD> ٷ<EFBFBD> end <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> blow <20> <> <20> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ.
if ( STATE_BLOW : : STATE_END ! = hBlow - > GetBlowState ( ) )
hBlow - > SetState ( STATE_BLOW : : STATE_DURATION ) ;
}
else if ( hBlow - > IsDuration ( ) )
{
hBlow - > Process ( LocalTime , fDelta ) ;
}
else if ( hBlow - > IsEnd ( ) )
{
RemoveStateBlowFromID ( hBlow - > GetBlowID ( ) ) ;
}
}
float CDnStateBlow : : GetImmuneReduceTimeValue ( STATE_BLOW : : emBLOW_INDEX blowIndex )
{
float fReduceTimeValue = 1.0f ;
//<2F> 鿪 <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 鼭 blowIndex<65> <78> <20> 鿪<EFBFBD> <E9BFAA> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ӽð<D3BD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ´ <EFBFBD> .
DNVector ( DnBlowHandle ) vlhResult ;
GetStateBlowFromBlowIndex ( STATE_BLOW : : BLOW_077 , vlhResult ) ;
int nListCount = ( int ) vlhResult . size ( ) ;
for ( int i = 0 ; i < nListCount ; + + i )
{
DnBlowHandle hExistBlow = vlhResult . at ( i ) ;
int nBlowIndex = ( int ) hExistBlow - > GetFloatValue ( ) ;
if ( ( STATE_BLOW : : emBLOW_INDEX ) ( nBlowIndex ) = = blowIndex )
{
//blowIndex <20> <> <EFBFBD> ӽð<D3BD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ߿<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> ..
float fValue = static_cast < CDnImmuneBlow * > ( hExistBlow . GetPointer ( ) ) - > GetReduceTimeValue ( ) ;
if ( fReduceTimeValue > fValue )
fReduceTimeValue = fValue ;
}
}
return fReduceTimeValue ;
}
# ifdef _GAMESERVER
# ifdef PRE_ADD_PROJECTILE_SE_INFO
void CDnStateBlow : : MakeCloneStateBlowList ( BLOW_HANDLE_LIST BlowList )
{
if ( BlowList . empty ( ) )
return ;
static CDnCreateBlow createBlow ;
BLOW_HANDLE_LIST_ITER iter = BlowList . begin ( ) ;
for ( iter ; iter ! = BlowList . end ( ) ; + + iter )
{
DnBlowHandle hBlow = ( * iter ) ;
if ( hBlow )
{
if ( hBlow - > GetBlowIndex ( ) > STATE_BLOW : : BLOW_NONE & & hBlow - > GetBlowIndex ( ) < STATE_BLOW : : BLOW_MAX )
{
DnBlowHandle hBlow = createBlow . CreateBlow ( ( * iter ) - > GetBlowIndex ( ) , ( * iter ) - > GetActorHandle ( ) , ( * iter ) - > GetValue ( ) ) ;
m_listBlowHandle . push_back ( hBlow ) ;
+ + m_aiApplied [ hBlow - > GetBlowIndex ( ) ] ;
}
}
}
}
# endif
# endif