2024-12-21 10:04:04 +08:00
# include "StdAfx.h"
# include "MASkillUser.h"
# include "DnSkill.h"
# include "IDnSkillUsableChecker.h"
# include "IDnSkillProcessor.h"
# include "InputReceiver.h"
# include "DnProjectile.h"
# include "DnPlayerActor.h"
# include "DnChangeProjectileProcessor.h"
# include "DnChangeActionStrProcessor.h"
# include "DnBlow.h"
# include "DnSkillTask.h"
# include "DnStateBlow.h"
# ifndef _GAMESERVER
# include "DnCantUseActiveSkillBlow.h"
# include "DnWorld.h"
# include "TaskManager.h"
# include "DnItemTask.h"
# include "DnInterface.h"
# else
# include "DNUserSession.h"
# include "DnApplySEWhenTargetNormalHitProcessor.h"
# endif
# if defined(_GAMESERVER)
# include "DnProbabilityChecker.h"
# endif
# include "DnCreateBlow.h"
# include "SmartPtrDef.h"
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
# include "TotalLevelSkillSystem.h"
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
# ifdef _DEBUG
# define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
# endif
MASkillUser : : MASkillUser ( )
//: m_vSkillTargetPos( 0.f, 0.f, 0.f )
{
m_LocalTime = 0 ;
m_pActor = NULL ;
m_bIsValidActor = true ;
//m_fAdjustCoolTime = 1.0f;
# ifdef _GAMESERVER
m_bIgnoreCoolTime = false ;
# else
m_bSkillExecutedThisFrame = false ;
# endif
m_fCoolTimeDeltaAdjustValue = 1.0f ;
//ZeroMemory( m_aEternityItemApplyStat, sizeof(m_aEternityItemApplyStat) );
}
MASkillUser : : ~ MASkillUser ( )
{
# ifndef PRE_FIX_SKILLLIST
for ( DWORD i = 0 ; i < m_vlhSkillList . size ( ) ; i + + ) {
if ( m_vbSelfAllocList [ i ] = = true ) SAFE_RELEASE_SPTR ( m_vlhSkillList [ i ] ) ;
}
SAFE_DELETE_VEC ( m_vlhSkillList ) ;
SAFE_DELETE_VEC ( m_vbSelfAllocList ) ;
# else
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
S_SKILL_OBJECT & SkillObject = m_vlSkillObjects . at ( i ) ;
if ( true = = SkillObject . bSelfAlloc )
SAFE_RELEASE_SPTR ( SkillObject . hSkill ) ;
}
SAFE_DELETE_VEC ( m_vlSkillObjects ) ;
# endif // #ifndef PRE_FIX_SKILLLIST
# if defined(_GAMESERVER)
m_PrefixSkillCoolTimeManager . InitList ( ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> ʱ<EFBFBD> ȭ
PREFIX_SYSTEM_SKILL_LIST : : iterator iter = m_prefixSystemDefenceSkills . begin ( ) ;
PREFIX_SYSTEM_SKILL_LIST : : iterator endIter = m_prefixSystemDefenceSkills . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
if ( iter - > second . hSkill )
SAFE_RELEASE_SPTR ( iter - > second . hSkill ) ;
}
SAFE_DELETE_MAP ( m_prefixSystemDefenceSkills ) ;
//<2F> <> <EFBFBD> ݿ<EFBFBD> <20> <> ų <20> ʱ<EFBFBD> ȭ
iter = m_prefixSystemOffenceSkills . begin ( ) ;
endIter = m_prefixSystemOffenceSkills . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
if ( iter - > second . hSkill )
SAFE_RELEASE_SPTR ( iter - > second . hSkill ) ;
}
SAFE_DELETE_MAP ( m_prefixSystemOffenceSkills ) ;
# endif // _GAMESERVER
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
# if defined(_GAMESERVER)
{
//<2F> <> <EFBFBD> λ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų
PREFIX_SKILL_INFO : : iterator iter = m_PrefixDefenceSkills . begin ( ) ;
PREFIX_SKILL_INFO : : iterator endIter = m_PrefixDefenceSkills . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
if ( iter - > second )
SAFE_DELETE ( iter - > second ) ;
}
m_PrefixDefenceSkills . clear ( ) ;
//<2F> <> <EFBFBD> λ<EFBFBD> <20> <> <EFBFBD> ݿ<EFBFBD> <20> <> ų
iter = m_PrefixOffenceSkills . begin ( ) ;
endIter = m_PrefixOffenceSkills . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
if ( iter - > second )
SAFE_DELETE ( iter - > second ) ;
}
m_PrefixOffenceSkills . clear ( ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> λ<EFBFBD> <20> <> <EFBFBD> ݿ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ
m_ProcessPrefixOffenceSkills . clear ( ) ;
}
# endif // _GAMESERVER
# endif // PRE_ADD_PREFIX_SYSTE_RENEW
}
bool MASkillUser : : IsValidActor ( )
{
if ( m_pActor ) return true ;
else {
if ( ! m_bIsValidActor ) return false ;
m_pActor = dynamic_cast < CDnActor * > ( this ) ;
if ( ! m_pActor ) m_bIsValidActor = false ;
}
return true ;
}
void MASkillUser : : OnAddSkill ( DnSkillHandle hSkill , bool isInitialize /* = false*/ )
{
// <20> нú<D0BD> <20> ̸鼭 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Self <20> <> <20> پ<EFBFBD> <D9BE> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ..
if ( ! IsValidActor ( ) ) return ;
bool bPassiveBuff = false ;
bPassiveBuff = ApplyPassiveSkill ( hSkill , isInitialize ) ;
# ifdef _GAMESERVER
if ( CDnSkill : : AutoPassive = = hSkill - > GetSkillType ( ) )
m_listAutoPassiveSkills . push_back ( hSkill ) ;
# else
const set < string > & setUseAction = hSkill - > GetUseActionSet ( ) ;
set < string > : : const_iterator iter = setUseAction . begin ( ) ;
for ( iter ; iter ! = setUseAction . end ( ) ; + + iter )
m_setUseActionNames . insert ( * iter ) ;
# endif
if ( bPassiveBuff )
m_vlhSelfPassiveBlowSkill . push_back ( hSkill ) ;
}
bool MASkillUser : : AddSkill ( int nSkillTableID , int nLevel /* = 1*/ , int iSkillLevelApplyType /* = CDnSkill::PVE*/ )
{
if ( IsExistSkill ( nSkillTableID , nLevel ) )
return false ;
if ( ! IsValidActor ( ) )
return false ;
# ifdef _GAMESERVER
if ( m_pActor = = NULL | | m_pActor - > GetRoom ( ) = = NULL )
return false ;
# endif
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <20> Ѵ <EFBFBD> .
int nLevelUp = GetSkillLevelUpValue ( nSkillTableID ) ;
nLevel + = nLevelUp ;
DnSkillHandle hSkill = CDnSkill : : CreateSkill ( m_pActor - > GetMySmartPtr ( ) , nSkillTableID , nLevel ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> õ<EFBFBD> <20> ߴ µ<DFB4> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȵƴٸ<C6B4>
if ( nLevelUp ! = 0 & & ! hSkill )
{
OutputDebug ( " <EFBFBD> <EFBFBD> ų (%d) <20> <> <EFBFBD> <EFBFBD> (%d) <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .. <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> Ȯ<> <C8AE> <20> <> <EFBFBD> <EFBFBD> !!!!!!\n " , nSkillTableID , nLevel ) ;
_ASSERT ( hSkill & & " <EFBFBD> <EFBFBD> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> õ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .. <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> Ȯ<> <C8AE> " ) ;
//<2F> ٽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> õ<EFBFBD> ..
nLevel - = nLevelUp ;
hSkill = CDnSkill : : CreateSkill ( m_pActor - > GetMySmartPtr ( ) , nSkillTableID , nLevel ) ;
nLevelUp = 0 ;
}
if ( ! hSkill )
return false ;
//<2F> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
hSkill - > SetLevelUpValue ( nLevelUp ) ;
// <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD>
if ( m_pActor - > IsPlayerActor ( ) )
hSkill - > SelectLevelDataType ( iSkillLevelApplyType ) ;
# ifndef PRE_FIX_SKILLLIST
m_vlhSkillList . push_back ( hSkill ) ;
m_vbSelfAllocList . push_back ( true ) ;
# else
m_vlSkillObjects . push_back ( S_SKILL_OBJECT ( hSkill , true ) ) ;
# endif // #ifndef PRE_FIX_SKILLLIST
// <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> Ƶ<EFBFBD>
CDnSkill : : DurationTypeEnum eDurationType = hSkill - > GetDurationType ( ) ;
switch ( eDurationType )
{
case CDnSkill : : ActiveToggle :
case CDnSkill : : TimeToggle :
case CDnSkill : : ActiveToggleForSummon :
m_vlhToggleSkills . push_back ( hSkill ) ;
case CDnSkill : : Aura :
m_vlhAuraSkills . push_back ( hSkill ) ;
}
if ( hSkill - > GetActor ( ) )
hSkill - > SetHasActor ( m_pActor - > GetMySmartPtr ( ) ) ;
OnAddSkill ( hSkill ) ;
return true ;
}
# if defined(PRE_FIX_62052)
void MASkillUser : : ApplyGlobalSkillCoolTime ( DnSkillHandle hSkill )
{
int nGlobalSkillGroupID = hSkill ? hSkill - > GetGlobalSkillGroupID ( ) : 0 ;
//GlobalSkillGroupID<49> <44> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ߰<EFBFBD> <20> ɶ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ID<49> <44> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <20> Ǵ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
if ( nGlobalSkillGroupID ! = 0 )
{
for ( DWORD i = 0 ; i < GetSkillCount ( ) ; + + i )
{
// m_vlGroupedSkillIDs <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <EFBFBD> <EFBFBD> <20> ׳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> ̱<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ߴ <EFBFBD> <DFB4> <EFBFBD> <20> <> <EFBFBD> ΰ<EFBFBD> Ȯ<> εǾ<CEB5> <C7BE> <EFBFBD> <20> Ѵ <EFBFBD> .
DnSkillHandle hExistSkill = GetSkillFromIndex ( i ) ;
float fElapsedDelayTime = hExistSkill - > GetElapsedDelayTime ( ) ;
if ( hExistSkill & &
hExistSkill - > GetGlobalSkillGroupID ( ) = = nGlobalSkillGroupID & &
fElapsedDelayTime > 0.0f )
{
DnSkillHandle hOrigSkill = FindSkill ( hExistSkill - > GetAnotherGlobalSkillID ( ) ) ;
hSkill - > OnAnotherGlobalSkillBeginCoolTime ( hOrigSkill ) ;
hSkill - > SetElapsedDelayTime ( fElapsedDelayTime ) ;
}
}
}
}
# endif // PRE_FIX_62052
bool MASkillUser : : AddSkill ( DnSkillHandle hSkill )
{
# ifdef _GAMESERVER
// <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ϳ <EFBFBD> <CDBF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> addskill <20> մϴ<D5B4> .
// <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <20> <> <EFBFBD> Ϳ <EFBFBD> <CDBF> Դ<EFBFBD> <20> <> ų Ʈ<> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EEB0A1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Լ<EFBFBD> <D4BC> <EFBFBD>
// playeractor <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̵<EFBFBD> <CCB5> Ͽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ<EFBFBD> <20> <> <20> Լ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϸ<EFBFBD> <20> ȵ˴ ϴ<CBB4> .
// <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> ȴٸ<C8B4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϱ <EFBFBD> <20> <> <EFBFBD> ؼ<EFBFBD> assert <20> ɾ<EFBFBD> <C9BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> .
//_ASSERT( IsValidActor() );
//_ASSERT( m_pActor->IsMonsterActor() );
# endif
if ( IsExistSkill ( hSkill - > GetClassID ( ) , hSkill - > GetLevel ( ) ) ) return false ;
# if defined(PRE_FIX_62052)
ApplyGlobalSkillCoolTime ( hSkill ) ;
# endif // PRE_FIX_62052
# ifndef PRE_FIX_SKILLLIST
m_vlhSkillList . push_back ( hSkill ) ;
m_vbSelfAllocList . push_back ( false ) ;
# else
m_vlSkillObjects . push_back ( S_SKILL_OBJECT ( hSkill , false ) ) ;
# endif // #ifndef PRE_FIX_SKILLLIST
// <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> Ƶ<EFBFBD>
CDnSkill : : DurationTypeEnum eDurationType = hSkill - > GetDurationType ( ) ;
switch ( eDurationType )
{
case CDnSkill : : ActiveToggle :
case CDnSkill : : TimeToggle :
case CDnSkill : : ActiveToggleForSummon :
m_vlhToggleSkills . push_back ( hSkill ) ;
case CDnSkill : : Aura :
m_vlhAuraSkills . push_back ( hSkill ) ;
}
OnAddSkill ( hSkill ) ;
return true ;
}
bool MASkillUser : : bIsPassiveSkill ( DnBlowHandle hBlow )
{
int iNumSkill = ( int ) m_vlhSelfPassiveBlowSkill . size ( ) ;
for ( int iSkill = 0 ; iSkill < iNumSkill ; + + iSkill )
{
DnSkillHandle hSkill = m_vlhSelfPassiveBlowSkill . at ( iSkill ) ;
_ASSERT ( CDnSkill : : Passive = = hSkill - > GetSkillType ( ) ) ;
const CDnSkill : : SkillInfo * pSkillInfo = hBlow - > GetParentSkillInfo ( ) ;
if ( pSkillInfo & & ( pSkillInfo - > iSkillID = = hSkill - > GetClassID ( ) ) )
return true ;
//if( CDnSkill::Passive == hSkill->GetSkillType() )
//{
// int iNumStateEffect = hSkill->GetStateEffectCount();
// for( int i = 0; i < iNumStateEffect; ++i )
// {
// CDnSkill::StateEffectStruct* pSE = hSkill->GetStateEffectFromIndex( i );
// if( CDnSkill::StateEffectApplyType::ApplySelf == pSE->ApplyType )
// {
// if( CDnSkill::DurationTypeEnum::Buff == hSkill->GetDurationType() )
// {
// if( hBlow->GetBlowIndex() == pSE->nID )
// return true;
// }
// }
// }
//}
}
return false ;
}
bool MASkillUser : : ApplyPassiveSkill ( DnSkillHandle hSkill , bool isInitialize /* = false*/ )
{
bool bPassiveBuf = false ;
// #24143 <20> ڱ<EFBFBD> <DAB1> ڽ<EFBFBD> <DABD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> ʱ<EFBFBD> ȭ<EFBFBD> Ҷ<EFBFBD> CDnSkillTask <20> ʿ<EFBFBD> <CABF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȹ<> <C8B9> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> AddSkill() <20> Լ<EFBFBD> <D4BC> <EFBFBD>
// ȣ <> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <CCBE> <EFBFBD> <20> <> <EFBFBD> 쿣 <20> ׳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> о <EFBFBD> <D0BE> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> Ʈ(<28> <> <EFBFBD> µ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> 0¥<30> <C2A5> <20> <> ų <20> <> <EFBFBD> <EFBFBD> )
// <20> ״<EFBFBD> <D7B4> <EFBFBD> AddSkill() <20> Լ<EFBFBD> <D4BC> <EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> µ<EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⼭ ȹ<> <C8B9> <20> <> <EFBFBD> °<EFBFBD> <20> ƴϸ<C6B4> <20> нú<D0BD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> <20> Ѵ <EFBFBD> . (hp/mp <20> ִ<EFBFBD> ġ <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> ..)
// <20> <> <EFBFBD> Ӽ<EFBFBD> <D3BC> <EFBFBD> <EFBFBD> ʿ<EFBFBD> <CABF> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ٸ<EFBFBD> <D9B8> <EFBFBD> <20> <> CDnPlayerActor <20> <> ü<EFBFBD> <C3BC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> .
// Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> ʿ<EFBFBD> <CABF> <EFBFBD> <EFBFBD> <EFBFBD> LocalPlayerActor <20> <> <20> <> <EFBFBD> 쿡 <20> <> <EFBFBD> µ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <CABF> Ϲ Ƿ<CFB9> PlayerActor <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϰ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <20> ־<EFBFBD> <D6BE> ش<EFBFBD> ..
# ifndef _GAMESERVER
if ( false = = hSkill - > IsAcquired ( ) )
return false ;
# endif // #ifndef _GAMESERVER
if ( CDnSkill : : Passive = = hSkill - > GetSkillType ( ) )
{
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
bool isTotalLevelSkill = false ;
if ( m_pActor & & m_pActor - > IsPlayerActor ( ) )
{
CDnPlayerActor * pPlayerActor = static_cast < CDnPlayerActor * > ( m_pActor ) ;
CDnTotalLevelSkillSystem * pTotalLevelSystem = pPlayerActor ? pPlayerActor - > GetTotalLevelSkillSystem ( ) : NULL ;
if ( pTotalLevelSystem )
isTotalLevelSkill = pTotalLevelSystem - > IsTotalLevelSkill ( hSkill - > GetClassID ( ) ) ;
}
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
int iNumStateEffect = hSkill - > GetStateEffectCount ( ) ;
for ( int i = 0 ; i < iNumStateEffect ; + + i )
{
CDnSkill : : StateEffectStruct * pSE = hSkill - > GetStateEffectFromIndex ( i ) ;
if ( CDnSkill : : StateEffectApplyType : : ApplySelf = = pSE - > ApplyType )
{
if ( CDnSkill : : DurationTypeEnum : : Buff = = hSkill - > GetDurationType ( ) )
{
bPassiveBuf = true ;
if ( hSkill - > IsSatisfyWeapon ( ) )
{
int iBlowID = - 1 ;
DnBlowHandle hBlow ;
# ifdef _GAMESERVER
if ( m_pActor )
{
iBlowID = m_pActor - > CDnActor : : CmdAddStateEffect ( hSkill - > GetInfo ( ) , ( STATE_BLOW : : emBLOW_INDEX ) pSE - > nID , - 1 , pSE - > szValue . c_str ( ) , true ) ; // Duration Time<6D> <65> -1 <20> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
OnApplyPassiveSkillBlow ( iBlowID ) ;
hBlow = m_pActor - > GetStateBlowFromID ( iBlowID ) ;
}
# else
if ( m_pActor )
hBlow = m_pActor - > CDnActor : : CmdAddStateEffect ( hSkill - > GetInfo ( ) , ( STATE_BLOW : : emBLOW_INDEX ) pSE - > nID , - 1 , pSE - > szValue . c_str ( ) , true ) ; // Duration Time<6D> <65> -1 <20> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
# endif
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
if ( isTotalLevelSkill = = true & & isInitialize = = true & & hBlow )
hBlow - > FromSourceItem ( ) ;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
hSkill - > SetAppliedPassiveBlows ( true ) ;
# ifndef _FINAL_BUILD
char szTemp [ 256 ] = { 0 , } ;
WideCharToMultiByte ( CP_ACP , 0 , hSkill - > GetName ( ) , - 1 , szTemp , _countof ( szTemp ) , NULL , NULL ) ;
OutputDebug ( " [<5B> нú<D0BD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : %d] \" %s \" <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Index: %d, Value:%s \n " , hSkill - > GetClassID ( ) , szTemp , pSE - > nID , pSE - > szValue . c_str ( ) ) ;
# endif // #ifndef _FINAL_BUILD
}
# ifndef _FINAL_BUILD
else
{
char szTemp [ 256 ] = { 0 , } ;
WideCharToMultiByte ( CP_ACP , 0 , hSkill - > GetName ( ) , - 1 , szTemp , _countof ( szTemp ) , NULL , NULL ) ;
OutputDebug ( " [<5B> нú<D0BD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ȵ<EFBFBD> : %d] \" %s \" <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʽ <EFBFBD> <CABD> ϴ<EFBFBD> . \n " , hSkill - > GetClassID ( ) , szTemp ) ;
}
# endif // #ifndef _FINAL_BUILD
}
# ifndef _FINAL_BUILD
else
{
char szTemp [ 256 ] = { 0 , } ;
WideCharToMultiByte ( CP_ACP , 0 , hSkill - > GetName ( ) , - 1 , szTemp , _countof ( szTemp ) , NULL , NULL ) ;
OutputDebug ( " [<5B> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <20> <> <EFBFBD> <EFBFBD> : %d] \" %s \" <20> нú<D0BD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> dz<EFBFBD> Buff <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʾ Ƽ <CABE> <20> <> <EFBFBD> <EFBFBD> <20> ȵ<EFBFBD> \n " , hSkill - > GetClassID ( ) , szTemp ) ;
}
# endif // #ifndef _FINAL_BUILD
}
}
}
return bPassiveBuf ;
}
void MASkillUser : : ApplyPassiveSkills ( void )
{
if ( ! IsValidActor ( ) ) return ;
int iNumSkill = ( int ) m_vlhSelfPassiveBlowSkill . size ( ) ;
for ( int iSkill = 0 ; iSkill < iNumSkill ; + + iSkill )
{
DnSkillHandle hSkill = m_vlhSelfPassiveBlowSkill . at ( iSkill ) ;
ApplyPassiveSkill ( hSkill ) ;
}
}
void MASkillUser : : OnRemoveSkill ( DnSkillHandle hSkill )
{
# ifndef _GAMESERVER
const set < string > & setUseAction = hSkill - > GetUseActionSet ( ) ;
set < string > : : const_iterator iter = setUseAction . begin ( ) ;
for ( iter ; iter ! = setUseAction . end ( ) ; + + iter )
m_setUseActionNames . erase ( * iter ) ;
# endif
}
bool MASkillUser : : RemoveSkillAll ( )
{
if ( ! IsValidActor ( ) )
return false ;
# ifndef PRE_FIX_SKILLLIST
int nSkillSize = ( int ) m_vlhSkillList . size ( ) ;
for ( int i = 0 ; i < nSkillSize ; i + + )
{
DnSkillHandle hSkill = m_vlhSkillList . back ( ) ;
if ( ! hSkill )
continue ;
bool bRet = RemoveSkill ( hSkill - > GetClassID ( ) ) ;
_ASSERT ( bRet ) ;
}
# else
int nSkillSize = ( int ) m_vlSkillObjects . size ( ) ;
for ( int i = 0 ; i < nSkillSize ; i + + )
{
S_SKILL_OBJECT & SkillObject = m_vlSkillObjects . back ( ) ;
DnSkillHandle hSkill = SkillObject . hSkill ;
if ( ! hSkill )
continue ;
bool bRet = RemoveSkill ( hSkill - > GetClassID ( ) ) ;
_ASSERT ( bRet ) ;
}
# endif // #ifndef PRE_FIX_SKILLLIST
return true ;
}
bool MASkillUser : : EndStateEffectSkill ( int nSkillTableID )
{
DNVector ( DnBlowHandle ) vlBlows ;
m_pActor - > GetAllAppliedStateBlow ( vlBlows ) ;
for ( int i = 0 ; i < ( int ) vlBlows . size ( ) ; + + i )
{
DnBlowHandle hBlow = vlBlows . at ( i ) ;
const CDnSkill : : SkillInfo * skillInfo = hBlow - > GetParentSkillInfo ( ) ;
if ( skillInfo - > iSkillID = = nSkillTableID )
{
hBlow - > OnEnd ( 0 , 0 ) ;
m_pActor - > OnEndStateBlow ( hBlow ) ;
m_pActor - > RemoveStateBlowFromID ( hBlow - > GetBlowID ( ) ) ; //? need test.
}
}
/*
DnSkillHandle hSkill = FindSkill ( nSkillTableID ) ;
if ( m_pActor & & m_pActor - > GetStateBlow ( ) )
{
std : : vector < int > vecRemoveBlowID ;
DNVector ( DnBlowHandle ) vlBlows ;
m_pActor - > GetAllAppliedStateBlowBySkillID ( nSkillTableID , vlBlows ) ;
int iStateEffectCount = hSkill - > GetStateEffectCount ( ) ;
for ( int iStateEffect = 0 ; iStateEffect < iStateEffectCount ; + + iStateEffect )
{
const CDnSkill : : StateEffectStruct * pSE = hSkill - > GetStateEffectFromIndex ( iStateEffect ) ;
if ( pSE & & CDnSkill : : StateEffectApplyType : : ApplySelf = = pSE - > ApplyType )
{
for ( DWORD BLOW_COUNT = 0 ; BLOW_COUNT < vlBlows . size ( ) ; BLOW_COUNT + + )
{
if ( vlBlows [ BLOW_COUNT ] & & ( vlBlows [ BLOW_COUNT ] - > GetBlowIndex ( ) = = ( STATE_BLOW : : emBLOW_INDEX ) pSE - > nID ) )
{
vecRemoveBlowID . push_back ( vlBlows [ BLOW_COUNT ] - > GetBlowID ( ) ) ;
}
}
}
}
for ( DWORD Index = 0 ; Index < vecRemoveBlowID . size ( ) ; Index + + )
{
m_pActor - > GetStateBlow ( ) - > RemoveImediatlyStateEffectFromID ( vecRemoveBlowID [ Index ] ) ;
}
}
*/
return true ;
}
bool MASkillUser : : RemoveSkill ( int nSkillTableID )
{
if ( ! IsValidActor ( ) ) return false ;
int iNumPassiveBlowSkill = ( int ) m_vlhSelfPassiveBlowSkill . size ( ) ;
for ( int iPassiveBlowSkill = 0 ; iPassiveBlowSkill < iNumPassiveBlowSkill ; + + iPassiveBlowSkill )
{
DnSkillHandle hSkill = m_vlhSelfPassiveBlowSkill . at ( iPassiveBlowSkill ) ;
if ( hSkill & & hSkill - > GetClassID ( ) = = nSkillTableID )
{
if ( m_pActor & & m_pActor - > GetStateBlow ( ) )
{
std : : vector < int > vecRemoveBlowID ;
DNVector ( DnBlowHandle ) vlBlows ;
m_pActor - > GetAllAppliedStateBlowBySkillID ( nSkillTableID , vlBlows ) ;
int iStateEffectCount = hSkill - > GetStateEffectCount ( ) ;
for ( int iStateEffect = 0 ; iStateEffect < iStateEffectCount ; + + iStateEffect )
{
const CDnSkill : : StateEffectStruct * pSE = hSkill - > GetStateEffectFromIndex ( iStateEffect ) ;
if ( pSE & & CDnSkill : : StateEffectApplyType : : ApplySelf = = pSE - > ApplyType )
{
for ( DWORD BLOW_COUNT = 0 ; BLOW_COUNT < vlBlows . size ( ) ; BLOW_COUNT + + )
{
if ( vlBlows [ BLOW_COUNT ] & & ( vlBlows [ BLOW_COUNT ] - > GetBlowIndex ( ) = = ( STATE_BLOW : : emBLOW_INDEX ) pSE - > nID ) )
{
vecRemoveBlowID . push_back ( vlBlows [ BLOW_COUNT ] - > GetBlowID ( ) ) ;
}
}
}
}
for ( DWORD Index = 0 ; Index < vecRemoveBlowID . size ( ) ; Index + + )
{
m_pActor - > GetStateBlow ( ) - > RemoveImediatlyStateEffectFromID ( vecRemoveBlowID [ Index ] ) ;
}
}
// 2009.03.16 <20> <> <EFBFBD> <EFBFBD>
m_vlhSelfPassiveBlowSkill . erase ( m_vlhSelfPassiveBlowSkill . begin ( ) + iPassiveBlowSkill ) ;
break ;
}
}
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
//<2F> <> <EFBFBD> շ<EFBFBD> <D5B7> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> Ʒ <EFBFBD> <C6B7> <EFBFBD> <20> <> ƾ<EFBFBD> <C6BE> Ż <20> ʿ䰡 <20> <> <EFBFBD> <EFBFBD> ...
if ( m_pActor & & m_pActor - > IsPlayerActor ( ) )
{
CDnPlayerActor * pPlayerActor = static_cast < CDnPlayerActor * > ( m_pActor ) ;
CDnTotalLevelSkillSystem * pTotalLevelSystem = pPlayerActor ? pPlayerActor - > GetTotalLevelSkillSystem ( ) : NULL ;
if ( pTotalLevelSystem & & pTotalLevelSystem - > IsTotalLevelSkill ( nSkillTableID ) )
return true ;
}
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
# ifdef _GAMESERVER
list < DnSkillHandle > : : iterator iter = m_listAutoPassiveSkills . begin ( ) ;
for ( iter ; m_listAutoPassiveSkills . end ( ) ! = iter ; + + iter )
{
if ( ( * iter ) - > GetClassID ( ) = = nSkillTableID )
{
m_listAutoPassiveSkills . erase ( iter ) ;
break ;
}
}
# endif
# ifndef PRE_FIX_SKILLLIST
for ( DWORD i = 0 ; i < m_vlhSkillList . size ( ) ; i + + ) {
if ( m_vlhSkillList [ i ] - > GetClassID ( ) = = nSkillTableID ) {
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̳<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
DnSkillHandle hSkill = m_vlhSkillList . at ( i ) ;
# else
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
S_SKILL_OBJECT & SkillObject = m_vlSkillObjects . at ( i ) ;
if ( SkillObject . hSkill & & SkillObject . hSkill - > GetClassID ( ) = = nSkillTableID )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̳<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
DnSkillHandle hSkill = SkillObject . hSkill ;
# endif // #ifndef PRE_FIX_SKILLLIST
if ( CDnSkill : : ActiveToggle = = hSkill - > GetDurationType ( ) | |
CDnSkill : : TimeToggle = = hSkill - > GetDurationType ( ) | |
CDnSkill : : ActiveToggleForSummon = = hSkill - > GetDurationType ( )
)
{
DNVector ( DnSkillHandle ) : : iterator Localiter = find ( m_vlhToggleSkills . begin ( ) , m_vlhToggleSkills . end ( ) , hSkill ) ;
m_vlhToggleSkills . erase ( Localiter ) ;
}
else
if ( CDnSkill : : Aura = = hSkill - > GetDurationType ( ) )
{
if ( m_hAuraSkill & & m_hAuraSkill - > GetClassID ( ) = = nSkillTableID & & m_hAuraSkill - > IsAuraOn ( ) )
{
if ( m_hAuraSkill = = m_hProcessSkill )
m_hProcessSkill . Identity ( ) ;
m_hAuraSkill - > EnableAura ( false ) ;
OnSkillAura ( m_hAuraSkill , false ) ;
m_hAuraSkill . Identity ( ) ;
}
DNVector ( DnSkillHandle ) : : iterator Localiter = find ( m_vlhAuraSkills . begin ( ) , m_vlhAuraSkills . end ( ) , hSkill ) ;
m_vlhAuraSkills . erase ( Localiter ) ;
}
# ifndef PRE_FIX_SKILLLIST
OnRemoveSkill ( m_vlhSkillList [ i ] ) ;
if ( m_vbSelfAllocList [ i ] = = true ) SAFE_RELEASE_SPTR ( m_vlhSkillList [ i ] ) ;
m_vlhSkillList . erase ( m_vlhSkillList . begin ( ) + i ) ;
m_vbSelfAllocList . erase ( m_vbSelfAllocList . begin ( ) + i ) ;
# else
OnRemoveSkill ( SkillObject . hSkill ) ;
if ( SkillObject . bSelfAlloc )
SAFE_RELEASE_SPTR ( SkillObject . hSkill ) ;
m_vlSkillObjects . erase ( m_vlSkillObjects . begin ( ) + i ) ;
# endif // #ifndef PRE_FIX_SKILLLIST
return true ;
}
}
return true ;
}
# ifndef _GAMESERVER
bool MASkillUser : : ReplacementSkill ( int nSkillTableID , int nLevel )
{
if ( ! IsValidActor ( ) ) return false ;
DnSkillHandle hSkill = CDnSkill : : CreateSkill ( m_pActor - > GetMySmartPtr ( ) , nSkillTableID , nLevel ) ;
if ( ! hSkill ) return false ;
return ReplacementSkill ( hSkill ) ;
}
bool MASkillUser : : ReplacementSkill ( DnSkillHandle hNewSkill )
{
# ifndef PRE_FIX_SKILLLIST
int iSkillID = hNewSkill - > GetClassID ( ) ;
for ( DWORD i = 0 ; i < m_vlhSkillList . size ( ) ; i + + )
{
if ( m_vlhSkillList [ i ] - > GetClassID ( ) = = iSkillID )
{
// <20> нú<D0BD> <20> <> <EFBFBD> ο <EFBFBD> <20> <> ų<EFBFBD> ΰ<EFBFBD> . <20> <EFBFBD> <D7B7> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ְ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ش<EFBFBD> .
DNVector ( DnSkillHandle ) : : iterator iter = find ( m_vlhSelfPassiveBlowSkill . begin ( ) , m_vlhSelfPassiveBlowSkill . end ( ) , m_vlhSkillList [ i ] ) ;
if ( m_vlhSelfPassiveBlowSkill . end ( ) ! = iter )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
// <20> θ<EFBFBD> <CEB8> <EFBFBD> ų<EFBFBD> <C5B3> <20> <> ġ<EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> ã<> Ƴ<EFBFBD> <C6B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( ! IsValidActor ( ) ) continue ;
// HP, SP <20> ÷<EFBFBD> <C3B7> ִ<EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> HP SP <20> <> <20> <> <EFBFBD> <EFBFBD> HP/SP<53> <50>
// Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> ǰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̸<EFBFBD> <20> Ƶ״ٰ<D7B4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> ..
INT64 iHP = m_pActor - > GetHP ( ) ;
int iSP = m_pActor - > GetSP ( ) ;
DNVector ( DnBlowHandle ) vlhAppliedSE ;
DNVector ( DnBlowHandle ) vlhSEToRemove ;
m_pActor - > GetAllAppliedStateBlow ( vlhAppliedSE ) ;
int iNumAppliedSE = ( int ) vlhAppliedSE . size ( ) ;
for ( int iSE = 0 ; iSE < iNumAppliedSE ; + + iSE )
{
DnBlowHandle hAppliedBlow = vlhAppliedSE . at ( iSE ) ;
const CDnSkill : : SkillInfo * pSkillInfo = hAppliedBlow - > GetParentSkillInfo ( ) ;
if ( pSkillInfo - > iSkillID = = ( * iter ) - > GetClassID ( ) )
vlhSEToRemove . push_back ( hAppliedBlow ) ;
}
int iNumSEToRemove = ( int ) vlhSEToRemove . size ( ) ;
for ( int iSE = 0 ; iSE < iNumSEToRemove ; + + iSE )
{
DnBlowHandle hBlow = vlhSEToRemove . at ( iSE ) ;
int iID = hBlow - > GetBlowID ( ) ;
OutputDebug ( " [<5B> нú<D0BD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : %d] %s <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Index: %d, Value:%s \n " ,
( * iter ) - > GetClassID ( ) , ( * iter ) - > GetName ( ) , hBlow - > GetBlowIndex ( ) , hBlow - > GetValue ( ) ) ;
m_pActor - > RemoveStateBlowFromID ( iID ) ;
}
m_vlhSelfPassiveBlowSkill . erase ( iter ) ;
ApplyPassiveSkill ( hNewSkill ) ;
m_vlhSelfPassiveBlowSkill . push_back ( hNewSkill ) ;
m_pActor - > SetHP ( iHP ) ;
m_pActor - > SetSP ( iSP ) ;
}
if ( m_hAuraSkill & & m_hAuraSkill - > GetClassID ( ) = = iSkillID & & m_hAuraSkill - > IsAuraOn ( ) )
{
if ( m_hAuraSkill = = m_hProcessSkill )
m_hProcessSkill . Identity ( ) ;
m_hAuraSkill - > EnableAura ( false ) ;
OnSkillAura ( m_hAuraSkill , false ) ;
m_hAuraSkill . Identity ( ) ;
}
if ( m_vbSelfAllocList [ i ] )
{
// <20> ڽ<EFBFBD> <DABD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ڽ<EFBFBD> <DABD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ϲ Ƿ<CFB9> .
DnSkillHandle hSkillToRelease = m_vlhSkillList [ i ] ;
// <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ˻<EFBFBD> <CBBB> ؼ<EFBFBD> <20> <> ü <20> <> Ŵ
DNVector ( DnSkillHandle ) : : iterator iterToggle = find ( m_vlhToggleSkills . begin ( ) , m_vlhToggleSkills . end ( ) , hSkillToRelease ) ;
if ( m_vlhToggleSkills . end ( ) ! = iterToggle )
* iterToggle = hNewSkill ;
DNVector ( DnSkillHandle ) : : iterator iterAura = find ( m_vlhAuraSkills . begin ( ) , m_vlhAuraSkills . end ( ) , hSkillToRelease ) ;
if ( m_vlhAuraSkills . end ( ) ! = iterAura )
* iterAura = hNewSkill ;
OnRemoveSkill ( hSkillToRelease ) ;
SAFE_RELEASE_SPTR ( hSkillToRelease ) ;
}
else
{
// <20> <> ų <20> ½<EFBFBD> ũ<EFBFBD> <C5A9> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> ⼭ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
DnSkillHandle hPrevLevelSkill = m_vlhSkillList [ i ] ;
// <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ˻<EFBFBD> <CBBB> ؼ<EFBFBD> <20> <> ü <20> <> Ŵ
DNVector ( DnSkillHandle ) : : iterator iterToggle = find ( m_vlhToggleSkills . begin ( ) , m_vlhToggleSkills . end ( ) , hPrevLevelSkill ) ;
if ( m_vlhToggleSkills . end ( ) ! = iterToggle )
* iterToggle = hNewSkill ;
DNVector ( DnSkillHandle ) : : iterator iterAura = find ( m_vlhAuraSkills . begin ( ) , m_vlhAuraSkills . end ( ) , hPrevLevelSkill ) ;
if ( m_vlhAuraSkills . end ( ) ! = iterAura )
* iterAura = hNewSkill ;
}
OnReplacementSkill ( m_vlhSkillList [ i ] , hNewSkill ) ;
m_vlhSkillList [ i ] = hNewSkill ;
return true ;
}
}
return false ;
# else
int iSkillID = hNewSkill - > GetClassID ( ) ;
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; i + + )
{
S_SKILL_OBJECT & SkillObject = m_vlSkillObjects . at ( i ) ;
DnSkillHandle hSkill = SkillObject . hSkill ;
if ( hSkill - > GetClassID ( ) = = iSkillID )
{
// <20> нú<D0BD> <20> <> <EFBFBD> ο <EFBFBD> <20> <> ų<EFBFBD> ΰ<EFBFBD> . <20> <EFBFBD> <D7B7> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ְ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ش<EFBFBD> .
DNVector ( DnSkillHandle ) : : iterator iter = find ( m_vlhSelfPassiveBlowSkill . begin ( ) , m_vlhSelfPassiveBlowSkill . end ( ) , hSkill ) ;
if ( m_vlhSelfPassiveBlowSkill . end ( ) ! = iter )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
// <20> θ<EFBFBD> <CEB8> <EFBFBD> ų<EFBFBD> <C5B3> <20> <> ġ<EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> ã<> Ƴ<EFBFBD> <C6B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( ! IsValidActor ( ) ) continue ;
// HP, SP <20> ÷<EFBFBD> <C3B7> ִ<EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> HP SP <20> <> <20> <> <EFBFBD> <EFBFBD> HP/SP<53> <50>
// Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> ǰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̸<EFBFBD> <20> Ƶ״ٰ<D7B4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> ..
INT64 iHP = m_pActor - > GetHP ( ) ;
int iSP = m_pActor - > GetSP ( ) ;
DNVector ( DnBlowHandle ) vlhAppliedSE ;
DNVector ( DnBlowHandle ) vlhSEToRemove ;
m_pActor - > GetAllAppliedStateBlow ( vlhAppliedSE ) ;
int iNumAppliedSE = ( int ) vlhAppliedSE . size ( ) ;
for ( int iSE = 0 ; iSE < iNumAppliedSE ; + + iSE )
{
DnBlowHandle hAppliedBlow = vlhAppliedSE . at ( iSE ) ;
const CDnSkill : : SkillInfo * pSkillInfo = hAppliedBlow - > GetParentSkillInfo ( ) ;
if ( pSkillInfo - > iSkillID = = ( * iter ) - > GetClassID ( ) )
vlhSEToRemove . push_back ( hAppliedBlow ) ;
}
int iNumSEToRemove = ( int ) vlhSEToRemove . size ( ) ;
for ( int iSE = 0 ; iSE < iNumSEToRemove ; + + iSE )
{
DnBlowHandle hBlow = vlhSEToRemove . at ( iSE ) ;
int iID = hBlow - > GetBlowID ( ) ;
OutputDebug ( " [<5B> нú<D0BD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : %d] %s <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Index: %d, Value:%s \n " ,
( * iter ) - > GetClassID ( ) , ( * iter ) - > GetName ( ) , hBlow - > GetBlowIndex ( ) , hBlow - > GetValue ( ) ) ;
m_pActor - > RemoveStateBlowFromID ( iID ) ;
}
m_vlhSelfPassiveBlowSkill . erase ( iter ) ;
ApplyPassiveSkill ( hNewSkill ) ;
m_vlhSelfPassiveBlowSkill . push_back ( hNewSkill ) ;
m_pActor - > SetHP ( iHP ) ;
m_pActor - > SetSP ( iSP ) ;
}
if ( m_hAuraSkill & & m_hAuraSkill - > GetClassID ( ) = = iSkillID & & m_hAuraSkill - > IsAuraOn ( ) )
{
if ( m_hAuraSkill = = m_hProcessSkill )
m_hProcessSkill . Identity ( ) ;
m_hAuraSkill - > EnableAura ( false ) ;
OnSkillAura ( m_hAuraSkill , false ) ;
m_hAuraSkill . Identity ( ) ;
}
if ( true = = SkillObject . bSelfAlloc )
{
// <20> ڽ<EFBFBD> <DABD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ڽ<EFBFBD> <DABD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ϲ Ƿ<CFB9> .
DnSkillHandle hSkillToRelease = hSkill ;
// <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ˻<EFBFBD> <CBBB> ؼ<EFBFBD> <20> <> ü <20> <> Ŵ
DNVector ( DnSkillHandle ) : : iterator iterToggle = find ( m_vlhToggleSkills . begin ( ) , m_vlhToggleSkills . end ( ) , hSkillToRelease ) ;
if ( m_vlhToggleSkills . end ( ) ! = iterToggle )
* iterToggle = hNewSkill ;
DNVector ( DnSkillHandle ) : : iterator iterAura = find ( m_vlhAuraSkills . begin ( ) , m_vlhAuraSkills . end ( ) , hSkillToRelease ) ;
if ( m_vlhAuraSkills . end ( ) ! = iterAura )
* iterAura = hNewSkill ;
OnRemoveSkill ( hSkillToRelease ) ;
SAFE_RELEASE_SPTR ( hSkillToRelease ) ;
}
else
{
// <20> <> ų <20> ½<EFBFBD> ũ<EFBFBD> <C5A9> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> ⼭ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
DnSkillHandle hPrevLevelSkill = hSkill ;
// <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ˻<EFBFBD> <CBBB> ؼ<EFBFBD> <20> <> ü <20> <> Ŵ
DNVector ( DnSkillHandle ) : : iterator iterToggle = find ( m_vlhToggleSkills . begin ( ) , m_vlhToggleSkills . end ( ) , hPrevLevelSkill ) ;
if ( m_vlhToggleSkills . end ( ) ! = iterToggle )
* iterToggle = hNewSkill ;
DNVector ( DnSkillHandle ) : : iterator iterAura = find ( m_vlhAuraSkills . begin ( ) , m_vlhAuraSkills . end ( ) , hPrevLevelSkill ) ;
if ( m_vlhAuraSkills . end ( ) ! = iterAura )
* iterAura = hNewSkill ;
}
OnReplacementSkill ( hSkill , hNewSkill ) ;
SkillObject . hSkill = hNewSkill ;
return true ;
}
}
return false ;
# endif // #ifndef PRE_FIX_SKILLLIST
}
# endif
bool MASkillUser : : IsExistSkill ( int nSkillTableID , int nLevel )
{
# ifndef PRE_FIX_SKILLLIST
for ( DWORD i = 0 ; i < m_vlhSkillList . size ( ) ; i + + ) {
if ( m_vlhSkillList [ i ] & & ( m_vlhSkillList [ i ] - > GetClassID ( ) = = nSkillTableID ) )
{
if ( nLevel = = - 1 ) return true ;
if ( m_vlhSkillList [ i ] - > GetLevel ( ) = = nLevel ) return true ;
}
}
return false ;
# else
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
S_SKILL_OBJECT & SkillObject = m_vlSkillObjects . at ( i ) ;
DnSkillHandle hSkill = SkillObject . hSkill ;
if ( hSkill )
{
if ( hSkill - > GetClassID ( ) = = nSkillTableID )
{
if ( - 1 = = nLevel )
return true ;
if ( hSkill - > GetLevel ( ) = = nLevel )
return true ;
}
}
}
return false ;
# endif // #ifndef PRE_FIX_SKILLLIST
}
bool MASkillUser : : IsSelfAllocSkill ( int nSkillTableID )
{
# ifndef PRE_FIX_SKILLLIST
for ( DWORD i = 0 ; i < m_vlhSkillList . size ( ) ; i + + ) {
if ( m_vlhSkillList [ i ] - > GetClassID ( ) = = nSkillTableID )
return m_vbSelfAllocList [ i ] ;
}
return false ;
# else
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
if ( m_vlSkillObjects . at ( i ) . hSkill - > GetClassID ( ) = = nSkillTableID )
return m_vlSkillObjects . at ( i ) . bSelfAlloc ;
}
return false ;
# endif // #ifndef PRE_FIX_SKILLLIST
}
void MASkillUser : : SetSkillLevel ( int nSkillTableID , int nValue )
{
if ( ! IsSelfAllocSkill ( nSkillTableID ) ) return ;
DnSkillHandle hSkill = FindSkill ( nSkillTableID ) ;
if ( ! hSkill ) return ;
if ( hSkill - > GetLevel ( ) = = nValue ) return ;
float fElapsedDelayTime = hSkill - > GetElapsedDelayTime ( ) ;
RemoveSkill ( nSkillTableID ) ;
AddSkill ( nSkillTableID , nValue ) ;
hSkill = FindSkill ( nSkillTableID ) ;
hSkill - > SetElapsedDelayTime ( fElapsedDelayTime ) ;
}
DnSkillHandle MASkillUser : : FindSkill ( int nSkillTableID )
{
# ifndef PRE_FIX_SKILLLIST
for ( DWORD i = 0 ; i < m_vlhSkillList . size ( ) ; i + + )
{
if ( m_vlhSkillList [ i ] - > GetClassID ( ) = = nSkillTableID )
return m_vlhSkillList [ i ] ;
}
return CDnSkill : : Identity ( ) ;
# else
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
if ( m_vlSkillObjects . at ( i ) . hSkill & &
m_vlSkillObjects . at ( i ) . hSkill - > GetClassID ( ) = = nSkillTableID )
return m_vlSkillObjects . at ( i ) . hSkill ;
}
return CDnSkill : : Identity ( ) ;
# endif // #ifndef PRE_FIX_SKILLLIST
}
DnSkillHandle MASkillUser : : GetProcessSkill ( )
{
return m_hProcessSkill ;
}
CDnSkill : : UsingResult MASkillUser : : CanExecuteSkill ( DnSkillHandle hSkill )
{
_ASSERT ( hSkill & & " MASkillUser::CanExecuteSkill() -> Invalid hSkill " ) ;
# ifndef _GAMESERVER
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ӿ<EFBFBD> <20> <> Ƽ <EFBFBD> <C6BC> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ұ<EFBFBD> .
if ( m_hProcessSkill & &
m_hProcessSkill - > GetSkillType ( ) = = CDnSkill : : Active & &
hSkill - > GetSkillType ( ) = = CDnSkill : : Active )
if ( m_bSkillExecutedThisFrame )
return CDnSkill : : UsingResult : : Failed ;
# endif
// [2011/02/22 semozz]
// <20> ִϸ<D6B4> <CFB8> ̼<EFBFBD> <20> <> ȯ <20> <> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ϸ<EFBFBD> <20> ɵ<EFBFBD> ...
# if !defined(_GAMESERVER)
if ( ! hSkill - > CheckAnimation ( ) )
return CDnSkill : : UsingResult : : Failed ;
# endif // _GAMESERVER
# if !defined(_GAMESERVER)
if ( hSkill - > GetGlyphActiveSkillDisable ( ) )
return CDnSkill : : UsingResult : : Failed ;
# endif // _GAMESERVER
return hSkill - > CanExecute ( ) ;
}
# ifdef _GAMESERVER
bool MASkillUser : : ExecuteSkill ( DnSkillHandle hSkill , LOCAL_TIME LocalTime , float fDelta )
# else
bool MASkillUser : : ExecuteSkill ( DnSkillHandle hSkill , LOCAL_TIME LocalTime , float fDelta ,
bool bCheckValid /*= true*/ , bool bAutoUsedFromServer /*= false*/ , bool bSendPacketToServer /*= true */ )
# endif
{
_ASSERT ( hSkill & & " Invalid hSkill " ) ;
if ( ! IsValidActor ( ) ) return false ;
if ( m_hProcessSkill )
{
// #25154 <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> onend <20> ȴ<EFBFBD> .
if ( false = = m_hProcessSkill - > IsAuraOn ( ) )
m_hProcessSkill - > OnEnd ( m_LocalTime , 0 ) ;
m_hProcessSkill . Identity ( ) ;
}
m_hProcessSkill = hSkill ;
switch ( m_hProcessSkill - > GetDurationType ( ) ) {
case CDnSkill : : Instantly :
case CDnSkill : : Buff :
case CDnSkill : : Debuff :
case CDnSkill : : SummonOnOff :
case CDnSkill : : StanceChange :
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> SP <20> <> <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD>
# ifndef _GAMESERVER
if ( CDnWorld : : MapTypeVillage ! = CDnWorld : : GetInstance ( ) . GetMapType ( ) )
# endif
m_pActor - > UseMP ( - m_hProcessSkill - > GetDecreaseMP ( ) ) ; // Compile Error. Moved by kalliste
//m_pActor->SetSP( m_pActor->GetSP() - m_hProcessSkill->GetDecreaseMP() );
// Excute <20> Լ<EFBFBD> <D4BC> <EFBFBD> OnBegin <20> <> <EFBFBD> <EFBFBD> <20> ̸<EFBFBD> <CCB8> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> <EFBFBD> <EFBFBD> <EFBFBD> .
//m_hProcessSkill->Execute( LocalTime, fDelta );
m_hProcessSkill - > OnBegin ( LocalTime , fDelta ) ;
// <20> ۷ ι <DBB7> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> ִٸ<D6B4> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7B7> <EFBFBD> <20> <> ų<EFBFBD> 鵵 <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> ..
if ( m_hProcessSkill & & 0 < m_hProcessSkill - > GetGlobalSkillGroupID ( ) )
{
for ( DWORD i = 0 ; i < GetSkillCount ( ) ; + + i )
{
// m_vlGroupedSkillIDs <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <EFBFBD> <EFBFBD> <20> ׳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> ̱<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ߴ <EFBFBD> <DFB4> <EFBFBD> <20> <> <EFBFBD> ΰ<EFBFBD> Ȯ<> εǾ<CEB5> <C7BE> <EFBFBD> <20> Ѵ <EFBFBD> .
DnSkillHandle hExistSkill = GetSkillFromIndex ( i ) ;
if ( hExistSkill & &
hExistSkill ! = m_hProcessSkill & &
hExistSkill - > GetGlobalSkillGroupID ( ) = = m_hProcessSkill - > GetGlobalSkillGroupID ( ) )
{
// <20> ۷ ι <DBB7> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> ش<EFBFBD> .
hExistSkill - > ResetCoolTime ( ) ;
hExistSkill - > OnAnotherGlobalSkillBeginCoolTime ( hSkill ) ;
hExistSkill - > OnBeginCoolTime ( ) ;
}
}
}
break ;
case CDnSkill : : TimeToggle :
case CDnSkill : : ActiveToggle :
case CDnSkill : : ActiveToggleForSummon :
{
bool bToggleEnable = ! hSkill - > IsToggleOn ( ) ;
hSkill - > EnableToggle ( bToggleEnable ) ;
OnSkillToggle ( hSkill , bToggleEnable ) ;
# ifdef _GAMESERVER
// NOTE: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ݷ<EFBFBD> <DDB7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> صд<D8B5> . <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <> <EFBFBD> ݷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <20> ͵<EFBFBD> <CDB5> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> .
if ( hSkill & & hSkill - > IsToggleOn ( ) )
{
m_ActorStateSnapshotForToggleProjectile . ResetState ( ) ;
hSkill - > CheckAndAddSelfStateEffect ( ) ;
static_cast < CDnActor * > ( this ) - > GetStateBlow ( ) - > Process ( 0 , 0.0f ) ;
CDnActor * pActor = static_cast < CDnActor * > ( this ) ;
m_ActorStateSnapshotForToggleProjectile = * ( static_cast < CDnState * > ( pActor ) ) ;
hSkill - > CheckAndRemoveInstantApplySelfStateEffect ( ) ;
}
# endif
}
break ; ;
case CDnSkill : : Aura :
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> 鳢<EFBFBD> <E9B3A2> <20> <> <EFBFBD> ۸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ̸<EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ű<EFBFBD> <C5B0> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؾ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> self blow ť<> <C5A5> <20> <> <EFBFBD> <EFBFBD> <20> ͵<EFBFBD> <CDB5> <EFBFBD>
// Ŭ<> <C5AC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ȴ<EFBFBD> .
bool bProcessingAuraOff = false ; // <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> execute <20> Ǹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
int iNumAuraSkill = ( int ) m_vlhAuraSkills . size ( ) ;
for ( int iAuraSkill = 0 ; iAuraSkill < iNumAuraSkill ; + + iAuraSkill )
{
DnSkillHandle hAuraSkill = m_vlhAuraSkills . at ( iAuraSkill ) ;
_ASSERT ( hAuraSkill - > GetDurationType ( ) = = CDnSkill : : Aura ) ;
if ( hAuraSkill - > IsAuraOn ( ) )
{
if ( m_hProcessSkill = = hAuraSkill )
bProcessingAuraOff = true ;
hAuraSkill - > EnableAura ( false ) ;
OnSkillAura ( hAuraSkill , false ) ;
break ;
}
}
// <20> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ߵ <EFBFBD> <DFB5> <EFBFBD> .
if ( false = = bProcessingAuraOff )
{
for ( int iAuraSkill = 0 ; iAuraSkill < iNumAuraSkill ; + + iAuraSkill )
{
DnSkillHandle hAuraSkill = m_vlhAuraSkills . at ( iAuraSkill ) ;
if ( hAuraSkill = = m_hProcessSkill )
{
m_hProcessSkill - > EnableAura ( true ) ;
OnSkillAura ( m_hProcessSkill , true ) ;
break ;
// Note <20> ѱ<EFBFBD> : m_hProcessSkill <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȿ<EFBFBD> ؾ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> CDnPlayerActor::CmdStop() <20> ʿ<EFBFBD> <CABF> <EFBFBD> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ش<EFBFBD> <20> <EFBFBD> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// ó<> <C3B3> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> CDnActor::OnChangeAction <20> ʿ<EFBFBD> <CABF> <EFBFBD> ProcessSkill <20> <> Identity <20> <> Ŵ.
}
}
}
else
{
// <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
m_hAuraSkill . Identity ( ) ;
m_hProcessSkill . Identity ( ) ;
}
}
break ;
}
# ifndef _GAMESERVER
m_bSkillExecutedThisFrame = true ;
# endif
return true ;
}
# ifdef _GAMESERVER
void MASkillUser : : UseAutoPassiveSkill ( LOCAL_TIME LocalTime , float fDelta )
{
list < DnSkillHandle > : : iterator iter = m_listAutoPassiveSkills . begin ( ) ;
for ( iter ; m_listAutoPassiveSkills . end ( ) ! = iter ; + + iter )
{
DnSkillHandle hSkill = * iter ;
if ( CDnSkill : : UsingResult : : Success = = CanExecuteSkill ( hSkill ) )
{
BYTE pBuffer [ 128 ] = { 0 , } ;
CPacketCompressStream Stream ( pBuffer , 128 ) ;
int iSkillID = hSkill - > GetClassID ( ) ;
int iEnchantSkillID = hSkill - > GetEnchantedSkillID ( ) ;
char cLevel = hSkill - > GetLevel ( ) ;
EtVector2 vLook , vZVec ;
bool bUseApplySkillItem = false ;
char cUseSignalSkill = - 1 ;
bool bAutoUseFromServer = true ;
bool abSignalSkillCheck [ 3 ] = { false } ;
vLook = EtVec3toVec2 ( * m_pActor - > GetLookDir ( ) ) ;
vZVec = EtVec3toVec2 ( * m_pActor - > GetMoveVectorZ ( ) ) ;
Stream . Write ( & iSkillID , sizeof ( int ) ) ;
Stream . Write ( & cLevel , sizeof ( char ) ) ;
Stream . Write ( & bUseApplySkillItem , sizeof ( bool ) ) ;
Stream . Write ( abSignalSkillCheck , sizeof ( abSignalSkillCheck ) ) ;
Stream . Write ( & vZVec , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Write ( & vLook , sizeof ( EtVector2 ) , CPacketCompressStream : : VECTOR2_SHORT ) ;
Stream . Write ( & bAutoUseFromServer , sizeof ( bool ) ) ;
Stream . Write ( & iEnchantSkillID , sizeof ( int ) ) ;
# ifdef PRE_ADD_POSITION_SYNC_BY_SKILL_USAGE
Stream . Write ( m_pActor - > GetPosition ( ) , sizeof ( EtVector3 ) , CPacketCompressStream : : VECTOR3_BIT ) ;
# endif
m_pActor - > Send ( eActor : : SC_USESKILL , & Stream ) ;
ExecuteSkill ( hSkill , LocalTime , fDelta ) ;
// <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ־<EFBFBD> <D6BE> д<EFBFBD> . process <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ,
m_listProcessAutoPassiveSkills . push_back ( hSkill ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <20> ڿ<EFBFBD> <20> <> <EFBFBD> δ<EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <20> 켱<EFBFBD> <ECBCB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
m_listAutoPassiveSkills . erase ( iter ) ;
m_listAutoPassiveSkills . push_back ( hSkill ) ;
// ProcessSkill <20> <> <20> ƴϹ Ƿ<CFB9> <20> ʱ<EFBFBD> ȭ <20> <> Ŵ. ProcessSkill <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> CmdStop <20> <> <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
m_hProcessSkill . Identity ( ) ;
break ;
}
}
}
bool MASkillUser : : IsProcessingAutoPassive ( int iSkillID )
{
list < DnSkillHandle > : : iterator iter = m_listProcessAutoPassiveSkills . begin ( ) ;
for ( iter ; iter ! = m_listProcessAutoPassiveSkills . end ( ) ; + + iter )
{
DnSkillHandle hAutoPassive = * iter ;
if ( hAutoPassive - > GetClassID ( ) = = iSkillID )
return true ;
}
return false ;
}
void MASkillUser : : EndAutoPassiveSkill ( LOCAL_TIME LocalTime , float fDelta )
{
list < DnSkillHandle > : : iterator iter = m_listProcessAutoPassiveSkills . begin ( ) ;
for ( iter ; iter ! = m_listProcessAutoPassiveSkills . end ( ) ; + + iter )
{
DnSkillHandle hAutoPassive = * iter ;
hAutoPassive - > OnEnd ( LocalTime , fDelta ) ;
}
}
# endif
bool MASkillUser : : HavePassiveSkill ( int iSkillID )
{
int iNumSkill = ( int ) m_vlhSelfPassiveBlowSkill . size ( ) ;
for ( int iSkill = 0 ; iSkill < iNumSkill ; + + iSkill )
{
DnSkillHandle hSkill = m_vlhSelfPassiveBlowSkill . at ( iSkill ) ;
if ( iSkillID = = hSkill - > GetClassID ( ) )
return true ;
}
return false ;
}
void MASkillUser : : OnSkillProcess ( LOCAL_TIME LocalTime , float fDelta )
{
if ( m_hAuraSkill )
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> <C7B4> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ű<EFBFBD> <C5B0> /Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> Ŷ <20> <> <EFBFBD> <EFBFBD> ...
# if defined(_GAMESERVER)
if ( m_hAuraSkill - > IsFinished ( ) )
{
if ( m_pActor )
m_pActor - > CmdFinishAuraSkill ( m_hAuraSkill - > GetClassID ( ) ) ;
// [2011/03/22 semozz]
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ʱ<EFBFBD> ȭ.
if ( m_hProcessSkill = = m_hAuraSkill )
m_hProcessSkill . Identity ( ) ;
OnSkillAura ( m_hAuraSkill , false ) ;
}
else
# endif // _GAMESERVER
m_hAuraSkill - > ProcessExecute ( LocalTime , fDelta ) ;
}
# ifdef _GAMESERVER
if ( m_pActor & & m_pActor - > IsPlayerActor ( ) )
{
list < DnSkillHandle > : : iterator iter = m_listProcessAutoPassiveSkills . begin ( ) ;
for ( iter ; m_listProcessAutoPassiveSkills . end ( ) ! = iter ; )
{
DnSkillHandle hSkill = * iter ;
//<2F> <> ų <20> ڵ<EFBFBD> <20> <> ȿ<EFBFBD> <C8BF> üũ <20> ߰<EFBFBD>
if ( ! hSkill )
{
iter = m_listProcessAutoPassiveSkills . erase ( iter ) ;
}
else
{
if ( hSkill - > IsFinished ( ) )
{
iter = m_listProcessAutoPassiveSkills . erase ( iter ) ;
}
else
{
hSkill - > ProcessExecute ( LocalTime , fDelta ) ;
+ + iter ;
}
}
}
m_PrefixSkillCoolTimeManager . Process ( LocalTime , fDelta ) ;
iter = m_listProcessPreFixDefenceSkills . begin ( ) ;
for ( iter ; m_listProcessPreFixDefenceSkills . end ( ) ! = iter ; )
{
DnSkillHandle hSkill = * iter ;
//<2F> <> ų <20> ڵ<EFBFBD> <20> <> ȿ<EFBFBD> <C8BF> üũ <20> ߰<EFBFBD>
if ( ! hSkill )
{
iter = m_listProcessPreFixDefenceSkills . erase ( iter ) ;
}
else
{
if ( hSkill - > IsFinished ( ) )
{
hSkill - > OnEnd ( LocalTime , fDelta ) ;
iter = m_listProcessPreFixDefenceSkills . erase ( iter ) ;
}
else
{
hSkill - > ProcessExecute ( LocalTime , fDelta ) ;
+ + iter ;
}
}
}
iter = m_listProcessPreFixOffenceSkills . begin ( ) ;
for ( iter ; m_listProcessPreFixOffenceSkills . end ( ) ! = iter ; )
{
DnSkillHandle hSkill = * iter ;
if ( ! hSkill )
{
iter = m_listProcessPreFixOffenceSkills . erase ( iter ) ;
}
else
{
if ( hSkill - > IsFinished ( ) )
{
hSkill - > OnEnd ( LocalTime , fDelta ) ;
iter = m_listProcessPreFixOffenceSkills . erase ( iter ) ;
}
else
{
hSkill - > ProcessExecute ( LocalTime , fDelta ) ;
+ + iter ;
}
}
}
if ( ! m_prefixSystemDefenceSkills . empty ( ) )
{
PREFIX_SYSTEM_SKILL_LIST : : iterator iter = m_prefixSystemDefenceSkills . begin ( ) ;
PREFIX_SYSTEM_SKILL_LIST : : iterator enditer = m_prefixSystemDefenceSkills . end ( ) ;
for ( ; iter ! = enditer ; + + iter )
{
if ( iter - > second . hSkill )
iter - > second . hSkill - > Process ( LocalTime , fDelta ) ;
}
}
if ( ! m_prefixSystemOffenceSkills . empty ( ) )
{
PREFIX_SYSTEM_SKILL_LIST : : iterator iter = m_prefixSystemOffenceSkills . begin ( ) ;
PREFIX_SYSTEM_SKILL_LIST : : iterator enditer = m_prefixSystemOffenceSkills . end ( ) ;
for ( ; iter ! = enditer ; + + iter )
{
if ( iter - > second . hSkill )
iter - > second . hSkill - > Process ( LocalTime , fDelta ) ;
}
}
}
# else
m_bSkillExecutedThisFrame = false ;
# endif
if ( m_hProcessSkill )
{
if ( m_hProcessSkill - > IsFinished ( ) )
{
m_hProcessSkill - > OnEnd ( LocalTime , fDelta ) ;
m_hProcessSkill . Identity ( ) ;
}
else
m_hProcessSkill - > ProcessExecute ( LocalTime , fDelta ) ;
}
// <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( m_pActor & & m_pActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_096 ) )
{
DNVector ( DnBlowHandle ) vlhCoolTimeBlows ;
m_pActor - > GetStateBlow ( ) - > GetStateBlowFromBlowIndex ( STATE_BLOW : : BLOW_096 , vlhCoolTimeBlows ) ;
// <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̱<CCB1> <E2B6A7> <EFBFBD> <EFBFBD> <20> <> ø<EFBFBD> Ǹ<EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
float fCoolTimeDeltaAdjust = 1.0f ;
int iNumBlow = ( int ) vlhCoolTimeBlows . size ( ) ;
for ( int i = 0 ; i < iNumBlow ; + + i )
{
fCoolTimeDeltaAdjust - = ( 1.0f - vlhCoolTimeBlows . at ( i ) - > GetFloatValue ( ) ) ;
}
// #40670 <20> <> <EFBFBD> Ǹ<EFBFBD> <20> ν <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> .
// <20> <> ø<EFBFBD> <C3B8> WeightTable <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ް<EFBFBD> <20> ȴ<EFBFBD> .
float fCoolTimeAccelMax = CGlobalWeightTable : : GetInstance ( ) . GetValue ( CGlobalWeightTable : : CoolTimeAccellSE_Max ) ;
if ( fCoolTimeDeltaAdjust < 1.0f - fCoolTimeAccelMax )
fCoolTimeDeltaAdjust = 1.0f - fCoolTimeAccelMax ;
// 1.0f <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ġ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> ڰ<EFBFBD> <DAB0> <EFBFBD> <20> <> ü <20> <> Ÿ<EFBFBD> ӿ<EFBFBD> <20> ״<EFBFBD> <D7B4> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̹Ƿ<CCB9>
// <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> <20> <> Ÿ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ѵ <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <20> <> <EFBFBD> Ϳ <EFBFBD> <CDBF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ͼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> . 2415<31> <35> Ÿ<> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̼<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> .
m_fCoolTimeDeltaAdjustValue = 1.0f / fCoolTimeDeltaAdjust ;
}
else
m_fCoolTimeDeltaAdjustValue = 1.0f ;
# ifdef _GAMESERVER
# ifndef PRE_FIX_SKILLLIST
# ifdef PRE_FIX_GAMESERVER_PERFOMANCE
// <20> <> Ÿ<EFBFBD> <C5B8> ó<> <C3B3> . <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <> Ÿ<> <C5B8> <20> Ӹ<EFBFBD> <20> ƴ϶<C6B4> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Processing <20> <> <20> ϰ<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
if ( m_pActor & & m_pActor - > IsPlayerActor ( ) /*&& m_pActor->IsAllowCallSkillProcess( fDelta )*/ )
{
# endif // #ifdef PRE_FIX_GAMESERVER_PERFOMANCE
for ( DWORD i = 0 ; i < m_vlhSkillList . size ( ) ; i + + )
{
if ( m_vlhSkillList . at ( i ) )
m_vlhSkillList [ i ] - > Process ( LocalTime , fDelta ) ;
}
# ifdef PRE_FIX_GAMESERVER_PERFOMANCE
}
# endif // #ifdef PRE_FIX_GAMESERVER_PERFOMANCE
# else
# ifdef PRE_FIX_GAMESERVER_PERFOMANCE
if ( m_pActor & & m_pActor - > IsPlayerActor ( ) /*&& m_pActor->IsAllowCallSkillProcess( fDelta )*/ )
{
# endif // #ifdef PRE_FIX_GAMESERVER_PERFOMANCE
PROFILE_TIME_TEST_BLOCK_START ( " OnSkillProcess() - SkillHandleLoop " ) ;
// <20> <> Ÿ<EFBFBD> <C5B8> ó<> <C3B3> . <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <> Ÿ<> <C5B8> <20> Ӹ<EFBFBD> <20> ƴ϶<C6B4> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Processing <20> <> <20> ϰ<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; i + + )
{
// Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> 쿣 <20> <> ų <20> <> ü <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> SkillTask <20> <> <20> <> <EFBFBD> <EFBFBD> <20> Ҹ<EFBFBD> <D2B8> Ǿ<EFBFBD> valid üũ<C3BC> <C5A9> <20> ؾ<EFBFBD> <20> <> .
if ( m_vlSkillObjects . at ( i ) . hSkill )
m_vlSkillObjects . at ( i ) . hSkill - > Process ( LocalTime , fDelta ) ;
}
PROFILE_TIME_TEST_BLOCK_END ( ) ;
# ifdef PRE_FIX_GAMESERVER_PERFOMANCE
}
# endif // #ifdef PRE_FIX_GAMESERVER_PERFOMANCE
# endif // #ifndef PRE_FIX_SKILLLIST
# else
# ifndef PRE_FIX_SKILLLIST
for ( DWORD i = 0 ; i < m_vlhSkillList . size ( ) ; i + + )
{
if ( m_vlhSkillList . at ( i ) )
m_vlhSkillList [ i ] - > Process ( LocalTime , fDelta ) ;
}
# else
// <20> <> Ÿ<EFBFBD> <C5B8> ó<> <C3B3> . <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <> Ÿ<> <C5B8> <20> Ӹ<EFBFBD> <20> ƴ϶<C6B4> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Processing <20> <> <20> ϰ<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; i + + )
{
// Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> 쿣 <20> <> ų <20> <> ü <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> SkillTask <20> <> <20> <> <EFBFBD> <EFBFBD> <20> Ҹ<EFBFBD> <D2B8> Ǿ<EFBFBD> valid üũ<C3BC> <C5A9> <20> ؾ<EFBFBD> <20> <> .
if ( m_vlSkillObjects . at ( i ) . hSkill )
m_vlSkillObjects . at ( i ) . hSkill - > Process ( LocalTime , fDelta ) ;
}
# endif // #ifndef PRE_FIX_SKILLLIST
# endif // #ifdef _GAMESERVER
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ۿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ִٸ<D6B4> Process
if ( m_hItemSkill )
{
if ( m_hItemSkill - > IsFinished ( ) )
{
m_hItemSkill - > OnEnd ( LocalTime , fDelta ) ;
deque < DnSkillHandle > : : iterator iter = find ( m_dqhItemSkillList . begin ( ) , m_dqhItemSkillList . end ( ) , m_hItemSkill ) ;
_ASSERT ( m_dqhItemSkillList . end ( ) ! = iter ) ;
m_dqhItemSkillList . erase ( iter ) ;
SAFE_RELEASE_SPTR ( m_hItemSkill ) ;
}
else
m_hItemSkill - > ProcessExecute ( LocalTime , fDelta ) ;
}
for ( DWORD i = 0 ; i < m_dqhItemSkillList . size ( ) ; + + i )
{
m_dqhItemSkillList . at ( i ) - > Process ( LocalTime , fDelta ) ;
}
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> Ŵ.
int iNumReservedFinishSkill = ( int ) m_vlhReservedFinishSkill . size ( ) ;
for ( int iSkill = 0 ; iSkill < iNumReservedFinishSkill ; + + iSkill )
{
DnSkillHandle hSkill = m_vlhReservedFinishSkill . at ( iSkill ) ;
if ( hSkill = = m_hProcessSkill )
{
m_hProcessSkill - > OnEnd ( LocalTime , fDelta ) ;
m_hProcessSkill . Identity ( ) ;
}
else
if ( hSkill = = m_hToggleSkill )
{
_ASSERT ( m_hToggleSkill - > IsToggleOn ( ) ) ;
if ( m_hToggleSkill - > IsToggleOn ( ) )
OnSkillToggle ( m_hToggleSkill , false ) ;
}
else
if ( hSkill = = m_hAuraSkill )
{
_ASSERT ( m_hAuraSkill - > IsAuraOn ( ) ) ;
if ( m_hAuraSkill - > IsAuraOn ( ) )
OnSkillAura ( m_hAuraSkill , false ) ;
}
}
if ( false = = m_vlhReservedFinishSkill . empty ( ) )
m_vlhReservedFinishSkill . clear ( ) ;
}
// <20> <> <20> Լ<EFBFBD> <D4BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ͵<EFBFBD> <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <CCBE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> OnSignal <20> <> <EFBFBD> <EFBFBD> Projectile <20> <> <20> ɸ<EFBFBD> <C9B8> <EFBFBD> <20> <EFBFBD> ȣ <> <C8A3> <EFBFBD> ȴ<EFBFBD> !!
void MASkillUser : : OnSkillProjectile ( CDnProjectile * pProjectile )
{
if ( ! IsValidActor ( ) )
return ;
// Projectile <20> <> <20> Ѹ<EFBFBD> <D1B8> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> ش<EFBFBD> .
bool bClientSide = false ;
# if defined( _GAMESERVER )
if ( m_pActor - > GetClassID ( ) < = CDnActor : : Reserved6 & & m_pActor - > IsPlayerActor ( ) & & ( ( CDnPlayerActor * ) m_pActor ) - > IsLocalActor ( ) )
bClientSide = true ;
# endif // #if defined( _GAMESERVER )
if ( m_hToggleSkill & & m_hToggleSkill - > IsToggleOn ( ) )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Enable <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> ó<> <C3B3> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
_ASSERT ( m_hToggleSkill - > IsToggleOn ( ) ) ;
CDnChangeProjectileProcessor * pChangeProj = static_cast < CDnChangeProjectileProcessor * > ( m_hToggleSkill - > GetProcessor ( IDnSkillProcessor : : CHANGE_PROJECTILE ) ) ;
if ( pChangeProj )
{
int iCheckProjectileID = ( bClientSide ) ? pChangeProj - > GetSourceWeaponID ( ) : pChangeProj - > GetChangeWeaponID ( ) ;
if ( pProjectile - > GetClassID ( ) = = iCheckProjectileID )
{
if ( m_hToggleSkill - > GetDurationType ( ) = = CDnSkill : : ActiveToggle )
{
if ( ! ( m_hToggleSkill - > GetDecreaseMP ( ) > 0 & & m_pActor - > GetSP ( ) < m_hToggleSkill - > GetDecreaseMP ( ) ) )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> SP <20> <> <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD>
# ifndef _GAMESERVER
if ( CDnWorld : : MapTypeVillage ! = CDnWorld : : GetInstance ( ) . GetMapType ( ) )
# endif
m_pActor - > UseMP ( - m_hToggleSkill - > GetDecreaseMP ( ) ) ;
//m_pActor->SetSP( m_pActor->GetSP() - m_hToggleSkill->GetDecreaseMP() );
if ( bClientSide )
{
int iWeaponLength = pProjectile - > GetWeaponLength ( ) - pProjectile - > GetOriginalWeaponLength ( ) ;
* ( CDnWeapon * ) pProjectile = * pChangeProj - > GetProjectile ( ) ;
pProjectile - > SetWeaponLength ( iWeaponLength + pProjectile - > GetOriginalWeaponLength ( ) ) ;
}
OnSkillToggleProjectile ( m_hToggleSkill , pProjectile ) ;
if ( m_pActor - > GetSP ( ) < m_hToggleSkill - > GetDecreaseMP ( ) )
{
OnSkillToggle ( m_hToggleSkill , false ) ;
}
}
}
}
}
else
{
// ChangeAction <20> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> ȣ <EFBFBD> <C8A3> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD>
CDnChangeActionStrProcessor * pChangeAction = static_cast < CDnChangeActionStrProcessor * > ( m_hToggleSkill - > GetProcessor ( IDnSkillProcessor : : CHANGE_ACTIONSTR ) ) ;
if ( pChangeAction )
{
if ( m_hToggleSkill - > GetDurationType ( ) = = CDnSkill : : ActiveToggle )
{
if ( ! ( m_hToggleSkill - > GetDecreaseMP ( ) > 0 & & m_pActor - > GetSP ( ) < m_hToggleSkill - > GetDecreaseMP ( ) ) )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> SP <20> <> <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD>
# ifndef _GAMESERVER
if ( CDnWorld : : MapTypeVillage ! = CDnWorld : : GetInstance ( ) . GetMapType ( ) )
# endif
m_pActor - > UseMP ( - m_hToggleSkill - > GetDecreaseMP ( ) ) ;
//m_pActor->SetSP( m_pActor->GetSP() - m_hToggleSkill->GetDecreaseMP() );
OnSkillToggleProjectile ( m_hToggleSkill , pProjectile ) ;
if ( m_pActor - > GetSP ( ) < m_hToggleSkill - > GetDecreaseMP ( ) )
{
OnSkillToggle ( m_hToggleSkill , false ) ;
}
}
}
}
}
}
# ifdef _GAMESERVER
if ( pProjectile & & ! bClientSide )
{
// Note <20> ѱ<EFBFBD> : <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 꿡 <20> ʿ<EFBFBD> <CABF> <EFBFBD> ActorState <20> <> Projectile <20> <> <20> Ǿ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ƴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> 쿣 <20> <> <EFBFBD> ⼭ <20> <> <EFBFBD> ݷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( ! m_hToggleSkill & & m_hProcessSkill )
{
static_cast < CDnActor * > ( this ) - > GetStateBlow ( ) - > Process ( 0 , 0.0f ) ;
CDnActor * pActor = static_cast < CDnActor * > ( this ) ;
// ü<> <C3BC> <20> <> ų <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü<EFBFBD> <C3BC>
// CDnState <20> <> <EFBFBD> 簡 <20> ſ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> Ͼ <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> shaared_ptr <20> <> <EFBFBD> <EFBFBD> .
boost : : shared_ptr < CDnState > pActorStateSnapshot = boost : : shared_ptr < CDnState > ( new CDnState ) ;
* pActorStateSnapshot = * ( static_cast < CDnState * > ( pActor ) ) ;
// <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> 쿡<EFBFBD> <ECBFA1> <20> <> <EFBFBD> ⼭
pProjectile - > FromSkill ( true ) ;
pProjectile - > SetShooterStateSnapshot ( pActorStateSnapshot ) ;
# if defined(PRE_FIX_65287)
float fFinalDamageRate = 0.0f ;
if ( pActor & & pActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_050 ) )
{
DNVector ( DnBlowHandle ) vlhBlows ;
pActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_050 , vlhBlows ) ;
int iNumBlow = ( int ) vlhBlows . size ( ) ;
for ( int i = 0 ; i < iNumBlow ; + + i )
{
fFinalDamageRate + = vlhBlows [ i ] - > GetFloatValue ( ) ;
}
}
pProjectile - > SetShooterFinalDamageRate ( fFinalDamageRate ) ;
# endif // PRE_FIX_65287
}
else if ( m_hToggleSkill & & m_hToggleSkill - > IsToggleOn ( ) )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> <20> <> <EFBFBD> ܵ<EFBFBD> . 2011.03.15
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ɷ<EFBFBD> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> Ͽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> .
boost : : shared_ptr < CDnState > pActorStatesnapshot = boost : : shared_ptr < CDnState > ( new CDnState ) ;
* pActorStatesnapshot = m_ActorStateSnapshotForToggleProjectile ;
pProjectile - > SetShooterStateSnapshot ( pActorStatesnapshot ) ;
pProjectile - > FromSkill ( true ) ;
# if defined(PRE_FIX_65287)
CDnActor * pActor = static_cast < CDnActor * > ( this ) ;
float fFinalDamageRate = 0.0f ;
if ( pActor & & pActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_050 ) )
{
DNVector ( DnBlowHandle ) vlhBlows ;
pActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_050 , vlhBlows ) ;
int iNumBlow = ( int ) vlhBlows . size ( ) ;
for ( int i = 0 ; i < iNumBlow ; + + i )
{
fFinalDamageRate + = vlhBlows [ i ] - > GetFloatValue ( ) ;
}
}
pProjectile - > SetShooterFinalDamageRate ( fFinalDamageRate ) ;
# endif // PRE_FIX_65287
}
else if ( m_pActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_121 ) | | m_pActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_129 ) )
{
// #30362 <20> <> <EFBFBD> ĵ<EFBFBD> <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 쿡<EFBFBD> <ECBFA1> <20> <> ų <20> <EFBFBD> ü<EFBFBD> <C3BC> ó<> <C3B3> <20> <> .
pProjectile - > FromSkill ( true ) ;
}
}
# endif
}
void MASkillUser : : OnSkillToggleProjectile ( DnSkillHandle hSkill , CDnProjectile * pProjectile )
{
}
void MASkillUser : : OnSkillToggle ( DnSkillHandle hSkill , bool bEnable )
{
if ( ! IsValidActor ( ) ) return ;
if ( bEnable )
{
switch ( hSkill - > GetDurationType ( ) )
{
case CDnSkill : : ActiveToggle :
case CDnSkill : : ActiveToggleForSummon :
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> SP <20> <> <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD>
# ifndef _GAMESERVER
if ( CDnWorld : : MapTypeVillage ! = CDnWorld : : GetInstance ( ) . GetMapType ( ) )
# endif
// <20> <> <EFBFBD> ۸<EFBFBD> <DBB8> Ҷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> . <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD>
//m_pActor->SetSP( m_pActor->GetSP() - hSkill->GetDecreaseSP() );
hSkill - > OnBegin ( m_LocalTime , 0.0f ) ;
break ;
case CDnSkill : : TimeToggle :
hSkill - > OnBegin ( m_LocalTime , 0.0f ) ;
break ;
}
SkillToggle ( hSkill , true ) ;
}
else
{
SkillToggle ( hSkill , false ) ;
hSkill - > OnEnd ( m_LocalTime , 0.0f ) ;
hSkill - > EnableToggle ( false ) ;
}
//if( bEnable ) {
// switch( hSkill->GetDurationType() ) {
// case CDnSkillBase::TimeToggle:
// pActor->SetSP( pActor->GetSP() - hSkill->GetDecreaseSP() );
// hSkill->Execute( m_LocalTime, 0.f );
// break;
// case CDnSkillBase::ActiveToggle:
// hSkill->Execute( m_LocalTime, 0.f );
// break;
// case CDnSkillBase::Aura:
// pActor->SetSP( pActor->GetSP() - hSkill->GetDecreaseSP() );
// hSkill->Execute( m_LocalTime, 0.f );
// break;
// }
//}
//else {
// hSkill->Finish( m_LocalTime, 0.f );
//}
}
void MASkillUser : : OnSkillAura ( DnSkillHandle hSkill , bool bEnable )
{
if ( ! IsValidActor ( ) ) return ;
if ( bEnable )
{
switch ( hSkill - > GetDurationType ( ) )
{
case CDnSkill : : Aura :
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> SP <20> <> <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD>
# ifndef _GAMESERVER
if ( CDnWorld : : MapTypeVillage ! = CDnWorld : : GetInstance ( ) . GetMapType ( ) )
# endif
m_pActor - > UseMP ( - hSkill - > GetDecreaseMP ( ) ) ;
//m_pActor->SetSP( m_pActor->GetSP() - hSkill->GetDecreaseMP() );
hSkill - > OnBegin ( m_LocalTime , 0.0f ) ;
break ;
}
m_hAuraSkill = hSkill ;
}
else
{
hSkill - > OnEnd ( m_LocalTime , 0.0f ) ;
hSkill - > EnableAura ( false ) ;
if ( m_hAuraSkill = = hSkill )
m_hAuraSkill . Identity ( ) ;
}
}
void MASkillUser : : ResetToggleSkill ( )
{
//if( m_hToggleSkill )
// m_hToggleSkill.Identity();
//int iNumToggle = (int)m_vlhToggleSkills.size();
//for( int i = 0; i < iNumToggle; ++i )
//{
// if( m_vlhToggleSkills.at(i)->IsToggleOn() )
// OnSkillToggle( m_vlhToggleSkills.at(i), false );
//}
}
void MASkillUser : : ResetAuraSkill ( )
{
//if( m_hAuraSkill )
// m_hAuraSkill.Identity();
//int iNumAura = (int)m_vlhAuraSkills.size();
//for( int i = 0; i < iNumAura; ++i )
//{
// if( m_vlhAuraSkills.at(i)->IsAuraOn() )
// OnSkillAura( m_vlhAuraSkills.at(i), false );
//}
}
bool MASkillUser : : IsProcessSkill ( )
{
if ( ! m_hProcessSkill ) return false ;
return ! m_hProcessSkill - > IsFinished ( ) ;
return true ;
}
DWORD MASkillUser : : GetSkillCount ( )
{
# ifndef PRE_FIX_SKILLLIST
return ( DWORD ) m_vlhSkillList . size ( ) ;
# else
return ( DWORD ) m_vlSkillObjects . size ( ) ;
# endif // #ifndef PRE_FIX_SKILLLIST
}
DnSkillHandle MASkillUser : : GetSkillFromIndex ( DWORD dwIndex )
{
# ifndef PRE_FIX_SKILLLIST
if ( dwIndex < 0 | | dwIndex > = m_vlhSkillList . size ( ) ) return CDnSkill : : Identity ( ) ;
return m_vlhSkillList [ dwIndex ] ;
# else
if ( dwIndex < 0 | | dwIndex > = m_vlSkillObjects . size ( ) )
return CDnSkill : : Identity ( ) ;
return m_vlSkillObjects . at ( dwIndex ) . hSkill ;
# endif // #ifndef PRE_FIX_SKILLLIST
}
CDnSkill : : UsingResult MASkillUser : : UseSkill ( int nSkillTableID , bool bCheckValid , bool bAutoUseFromServer /* = false*/ , int nLuaSkillIndex /*=-1*/ )
{
CDnSkill : : UsingResult eResult = CDnSkill : : UsingResult : : Failed ;
DnSkillHandle hSkill = FindSkill ( nSkillTableID ) ;
if ( hSkill )
{
if ( m_pActor & & m_pActor - > IsPlayerActor ( ) )
{
if ( hSkill - > GetSkillType ( ) = = CDnSkill : : SkillTypeEnum : : EnchantPassive )
return CDnSkill : : UsingResult : : Hack ;
}
# ifdef _GAMESERVER
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> 0.5<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ΰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ,
// <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> Ҷ<EFBFBD> <D2B6> <EFBFBD> <20> <> Ÿ 0.5<EFBFBD> <EFBFBD> <20> ̻<EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <20> <> <EFBFBD> ο <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ξ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ϳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> Ÿ<EFBFBD> Ӻ<EFBFBD> Ÿ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ũ<> ٸ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> ִ<EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> ʱ<EFBFBD> ȭ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> Ѵ <EFBFBD> . (#19737)
hSkill - > UpdateSkillCoolTimeExactly ( ) ;
# endif
eResult = CanExecuteSkill ( hSkill ) ;
if ( ! bCheckValid | | CDnSkill : : UsingResult : : Success = = eResult )
{
# if defined(_CLIENT)
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> ȯ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͱ<EFBFBD> <20> ִٸ<D6B4> <20> <> ȯ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȯ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȵ<EFBFBD> ..
if ( hSkill - > GetDurationType ( ) = = CDnSkill : : DurationTypeEnum : : SummonOnOff )
{
if ( hSkill - > SummonMonsterOff ( ) )
return eResult ;
}
# endif // _CLIENT
# ifdef _GAMESERVER
ExecuteSkill ( hSkill , m_LocalTime , 0.f ) ;
# else
ExecuteSkill ( hSkill , m_LocalTime , 0.f , bCheckValid , bAutoUseFromServer ) ;
# endif
}
# if defined(_CLIENT)
else
{
// <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ߴ <EFBFBD> <DFB4> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȯ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͱ<EFBFBD> <20> ִٸ<D6B4> <20> <> ȯ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȯ <20> <> <EFBFBD> <EFBFBD> <20> <> Ŵ.
if ( hSkill - > GetDurationType ( ) = = CDnSkill : : DurationTypeEnum : : SummonOnOff )
hSkill - > SummonMonsterOff ( ) ;
}
# endif // _CLIENT
}
return eResult ;
}
bool MASkillUser : : UseItemSkill ( int nSkillTableID , int nSkillLevelTableID , CDnItem : : ItemSkillApplyType ItemSkillApplyType , int nItemID /* = -1*/ )
{
if ( ! IsValidActor ( ) ) return false ;
bool bResult = true ;
switch ( ItemSkillApplyType )
{
case CDnItem : : ApplySkill :
{
// <20> <> <EFBFBD> ⼭ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> OnProcessSkill <20> Լ<EFBFBD> <D4BC> <EFBFBD> <EFBFBD> <EFBFBD> Finish üũ<C3BC> <C5A9> <20> Ͽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> ˾Ƽ <CBBE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
DnSkillHandle hSkill = CDnSkill : : CreateSkill ( m_pActor - > GetMySmartPtr ( ) , nSkillTableID , nSkillLevelTableID ) ;
if ( ! hSkill ) {
bResult = false ;
break ;
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ۿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
hSkill - > AsItemSkill ( ) ;
# if defined(_GAMESERVER)
hSkill - > SetItemID ( nItemID ) ;
# endif // _GAMESERVER
m_dqhItemSkillList . push_back ( hSkill ) ;
ExecuteSkill ( hSkill , m_LocalTime , 0.f ) ;
m_hItemSkill = hSkill ;
}
break ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
case CDnItem : : ApplyStateBlow :
{
//// <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Instant <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> CDnItemTask <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
//DnSkillHandle hSkill = CDnSkill::CreateSkill( m_pActor->GetMySmartPtr(), nSkillTableID, nSkillLevelTableID );
//
//if( !hSkill )
// bResult = false;
//hSkill->AsItemSkill();
//// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> ⸦ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> <20> Լ<EFBFBD> .
//hSkill->OnBeginForceSync( m_LocalTime, 0.0f );
//hSkill->Release();
}
break ;
}
return bResult ;
}
void MASkillUser : : ResetSkillCoolTime ( void )
{
# ifndef PRE_FIX_SKILLLIST
int iNumSkill = ( int ) m_vlhSkillList . size ( ) ;
for ( int iSkill = 0 ; iSkill < iNumSkill ; + + iSkill )
{
DnSkillHandle hSkill = m_vlhSkillList . at ( iSkill ) ;
if ( hSkill )
hSkill - > ResetCoolTime ( ) ;
}
# else
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
DnSkillHandle hSkill = m_vlSkillObjects . at ( i ) . hSkill ;
if ( hSkill )
hSkill - > ResetCoolTime ( ) ;
}
# endif // #ifndef PRE_FIX_SKILLLIST
# if defined(_GAMESERVER)
m_listProcessPreFixDefenceSkills . clear ( ) ;
m_listProcessPreFixOffenceSkills . clear ( ) ;
if ( ! m_prefixSystemDefenceSkills . empty ( ) )
{
PREFIX_SYSTEM_SKILL_LIST : : iterator iter = m_prefixSystemDefenceSkills . begin ( ) ;
PREFIX_SYSTEM_SKILL_LIST : : iterator enditer = m_prefixSystemDefenceSkills . end ( ) ;
for ( ; iter ! = enditer ; + + iter )
{
if ( iter - > second . hSkill )
iter - > second . hSkill - > ResetCoolTime ( ) ;
}
}
if ( ! m_prefixSystemOffenceSkills . empty ( ) )
{
PREFIX_SYSTEM_SKILL_LIST : : iterator iter = m_prefixSystemOffenceSkills . begin ( ) ;
PREFIX_SYSTEM_SKILL_LIST : : iterator enditer = m_prefixSystemOffenceSkills . end ( ) ;
for ( ; iter ! = enditer ; + + iter )
{
if ( iter - > second . hSkill )
iter - > second . hSkill - > ResetCoolTime ( ) ;
}
}
m_PrefixSkillCoolTimeManager . InitList ( ) ;
# endif // _GAMESERVER
}
void MASkillUser : : ResetPvPSkillCoolTime ( )
{
# ifndef PRE_FIX_SKILLLIST
int iNumSkill = ( int ) m_vlhSkillList . size ( ) ;
for ( int iSkill = 0 ; iSkill < iNumSkill ; + + iSkill )
{
DnSkillHandle hSkill = m_vlhSkillList . at ( iSkill ) ;
if ( hSkill - > GetSkillType ( ) = = CDnSkill : : SkillTypeEnum : : Active )
{
hSkill - > OnBeginCoolTime ( ) ;
}
}
# else
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
DnSkillHandle hSkill = m_vlSkillObjects . at ( i ) . hSkill ;
if ( hSkill - > GetSkillType ( ) = = CDnSkill : : SkillTypeEnum : : Active )
{
hSkill - > OnBeginCoolTime ( ) ;
}
}
# endif // #ifndef PRE_FIX_SKILLLIST
}
void MASkillUser : : ResetLadderSkillCoolTime ( )
{
# ifndef PRE_FIX_SKILLLIST
ResetSkillCoolTime ( ) ;
int iNumSkill = ( int ) m_vlhSkillList . size ( ) ;
for ( int iSkill = 0 ; iSkill < iNumSkill ; + + iSkill )
{
DnSkillHandle hSkill = m_vlhSkillList . at ( iSkill ) ;
hSkill - > SetElapsedDelayTime ( hSkill - > GetDelayTime ( ) / 2 ) ;
}
# else
ResetSkillCoolTime ( ) ;
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
DnSkillHandle hSkill = m_vlSkillObjects . at ( i ) . hSkill ;
hSkill - > SetElapsedDelayTime ( hSkill - > GetDelayTime ( ) / 2 ) ;
}
# endif // #ifndef PRE_FIX_SKILLLIST
}
# ifdef _GAMESERVER
void MASkillUser : : IgnoreSkillCoolTime ( void )
{
# ifndef PRE_FIX_SKILLLIST
int iNumSkill = ( int ) m_vlhSkillList . size ( ) ;
for ( int iSkill = 0 ; iSkill < iNumSkill ; + + iSkill )
{
DnSkillHandle hSkill = m_vlhSkillList . at ( iSkill ) ;
hSkill - > IgnoreCoolTime ( ) ;
}
m_bIgnoreCoolTime = true ;
# else
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
DnSkillHandle hSkill = m_vlSkillObjects . at ( i ) . hSkill ;
hSkill - > IgnoreCoolTime ( ) ;
}
m_bIgnoreCoolTime = true ;
# endif // #ifndef PRE_FIX_SKILLLIST
}
# endif
void MASkillUser : : ReserveFinishSkill ( DnSkillHandle hSkill )
{
if ( hSkill )
{
m_vlhReservedFinishSkill . push_back ( hSkill ) ;
}
}
void MASkillUser : : CancelUsingSkill ( void )
{
if ( m_hProcessSkill )
{
m_hProcessSkill - > OnEnd ( 0 , 0.0f ) ;
m_hProcessSkill . Identity ( ) ;
}
} ;
void MASkillUser : : OnAttachWeapon ( DnWeaponHandle hWeapon , int iChangedWeaponIndex )
{
// <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> ߿<EFBFBD> <20> <> <EFBFBD> 밡<EFBFBD> <EBB0A1> <20> <> <EFBFBD> ⸦ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ͵<EFBFBD> <CDB5> <EFBFBD> <20> ֳ<EFBFBD> üũ.
// <20> ٸ<EFBFBD> <20> <> <EFBFBD> ⸦ <20> <> <EFBFBD> <EFBFBD> <20> ־ <20> нú<D0BD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> °<EFBFBD> <20> ƴ϶<C6B4> <CFB6> <EFBFBD> Ȱ<> <C8B0> ȭ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
int iNumSelfBlowPassiveSkills = ( int ) m_vlhSelfPassiveBlowSkill . size ( ) ;
for ( int i = 0 ; i < iNumSelfBlowPassiveSkills ; + + i )
{
DnSkillHandle hSkill = m_vlhSelfPassiveBlowSkill . at ( i ) ;
if ( false = = hSkill - > IsAppliedPassiveBlows ( ) )
{
// <20> <> <EFBFBD> ο <EFBFBD> <CEBF> <EFBFBD> <20> <> <EFBFBD> 밡<EFBFBD> <EBB0A1> <20> <> <EFBFBD> <EFBFBD> üũ <20> <> .
ApplyPassiveSkill ( hSkill ) ;
}
}
// rangechecker <20> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> á<> <C3A1> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> ش<EFBFBD> .
# ifndef _GAMESERVER
# ifndef PRE_FIX_SKILLLIST
int iNumSkill = ( int ) m_vlhSkillList . size ( ) ;
for ( int i = 0 ; i < iNumSkill ; + + i )
{
DnSkillHandle hSkill = m_vlhSkillList . at ( i ) ;
hSkill - > UpdateRangeChecker ( hSkill - > GetSelectedLevelDataType ( ) ) ;
}
# else
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
DnSkillHandle hSkill = m_vlSkillObjects . at ( i ) . hSkill ;
hSkill - > UpdateRangeChecker ( hSkill - > GetSelectedLevelDataType ( ) ) ;
}
# endif // #ifndef PRE_FIX_SKILLLIST
# endif
}
void MASkillUser : : OnDetachWeapon ( DnWeaponHandle hWeapon , int iDetachedWeaponIndex )
{
// <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> ߿<EFBFBD> <20> <> <EFBFBD> 밡<EFBFBD> <EBB0A1> <20> <> <EFBFBD> ⸦ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ͵<EFBFBD> <CDB5> <EFBFBD> <20> ֳ<EFBFBD> üũ.
// <20> 䱸<EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ ٸ<C2B4> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
int iNumSelfBlowPassiveSkills = ( int ) m_vlhSelfPassiveBlowSkill . size ( ) ;
for ( int i = 0 ; i < iNumSelfBlowPassiveSkills ; + + i )
{
DnSkillHandle hSkill = m_vlhSelfPassiveBlowSkill . at ( i ) ;
if ( hSkill - > IsAppliedPassiveBlows ( ) )
{
if ( false = = hSkill - > IsSatisfyWeapon ( ) )
{
int iNumStateBlow = hSkill - > GetStateEffectCount ( ) ;
for ( int iBlow = 0 ; iBlow < iNumStateBlow ; + + iBlow )
{
const CDnSkill : : StateEffectStruct * pSE = hSkill - > GetStateEffectFromIndex ( iBlow ) ;
DNVector ( DnBlowHandle ) vlAppliedBlows ;
m_pActor - > GatherAppliedStateBlowByBlowIndex ( ( STATE_BLOW : : emBLOW_INDEX ) pSE - > nID , vlAppliedBlows ) ;
int iNumAppliedBlow = ( int ) vlAppliedBlows . size ( ) ;
for ( int iAppliedBlow = 0 ; iAppliedBlow < iNumAppliedBlow ; + + iAppliedBlow )
{
DnBlowHandle hBlow = vlAppliedBlows . at ( iAppliedBlow ) ;
if ( hBlow - > GetParentSkillInfo ( ) - > iSkillID = = hSkill - > GetClassID ( ) )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
//m_pActor->GetStateBlow()->RemoveImediatlyStateEffectFromID( hBlow->GetBlowID() );
//RebirthBlow<6F> <77> <EFBFBD> <EFBFBD> OnBegin<69> <6E> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ͼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǵ<EFBFBD> <20> <> <EFBFBD> 찡 <20> <EFBFBD> .
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
m_pActor - > GetStateBlow ( ) - > RemoveStateBlowFromID ( hBlow - > GetBlowID ( ) ) ;
}
}
}
hSkill - > SetAppliedPassiveBlows ( false ) ;
}
}
}
// rangechecker <20> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> á<> <C3A1> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> ش<EFBFBD> .
# ifndef _GAMESERVER
# ifndef PRE_FIX_SKILLLIST
int iNumSkill = ( int ) m_vlhSkillList . size ( ) ;
for ( int i = 0 ; i < iNumSkill ; + + i )
{
DnSkillHandle hSkill = m_vlhSkillList . at ( i ) ;
hSkill - > UpdateRangeChecker ( hSkill - > GetSelectedLevelDataType ( ) ) ;
}
# else
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
DnSkillHandle hSkill = m_vlSkillObjects . at ( i ) . hSkill ;
hSkill - > UpdateRangeChecker ( hSkill - > GetSelectedLevelDataType ( ) ) ;
}
# endif // #ifndef PRE_FIX_SKILLLIST
# endif
}
# ifdef _GAMESERVER
void MASkillUser : : SelectSkillLevelDataType ( int iLevelDataType , bool bPlayerSummonedMonster /* = false*/ )
{
# ifndef PRE_FIX_SKILLLIST
for ( int i = 0 ; i < ( int ) m_vlhSkillList . size ( ) ; + + i )
{
DnSkillHandle hSkill = m_vlhSkillList . at ( i ) ;
hSkill - > SelectLevelDataType ( iLevelDataType , bPlayerSummonedMonster ) ;
}
# else
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
DnSkillHandle hSkill = m_vlSkillObjects . at ( i ) . hSkill ;
hSkill - > SelectLevelDataType ( iLevelDataType , bPlayerSummonedMonster ) ;
}
# endif // #ifndef PRE_FIX_SKILLLIST
}
int MASkillUser : : GetSelectedSkillLevelDataType ( void )
{
# ifndef PRE_FIX_SKILLLIST
if ( m_vlhSkillList . empty ( ) )
return CDnSkill : : NUM_SKILLLEVEL_APPLY_TYPE ;
else
return m_vlhSkillList . front ( ) - > GetSelectedLevelDataType ( ) ;
# else
if ( m_vlSkillObjects . empty ( ) )
return CDnSkill : : NUM_SKILLLEVEL_APPLY_TYPE ;
else
return m_vlSkillObjects . front ( ) . hSkill - > GetSelectedLevelDataType ( ) ;
# endif // #ifndef PRE_FIX_SKILLLIST
}
# endif
# ifndef _GAMESERVER
bool MASkillUser : : IsUsingSkillAction ( const char * szAction )
{
if ( m_setUseActionNames . find ( szAction ) ! = m_setUseActionNames . end ( ) ) return true ;
return false ;
}
# endif
void MASkillUser : : AddStateBlowIDToRemove ( int blowID )
{
m_vlStateBlowIDToRemove . insert ( std : : map < int , int > : : value_type ( blowID , blowID ) ) ;
}
void MASkillUser : : InitStateBlowIDToRemove ( )
{
m_vlStateBlowIDToRemove . clear ( ) ;
}
# ifdef _GAMESERVER
void MASkillUser : : RemoveApplySEWhenTargetNormalHitProcessor ( IDnSkillProcessor * pProcessor )
{
DNVector ( IDnSkillProcessor * ) : : iterator iter = find ( m_vlpApplySEWhenNormalHitProcessor . begin ( ) , m_vlpApplySEWhenNormalHitProcessor . end ( ) , pProcessor ) ;
if ( m_vlpApplySEWhenNormalHitProcessor . end ( ) ! = iter )
m_vlpApplySEWhenNormalHitProcessor . erase ( iter ) ;
}
# endif
# if defined(_GAMESERVER)
bool MASkillUser : : AddPreFixSystemDefenceSkill ( int slotIndex , DnSkillHandle hSkill )
{
if ( ! hSkill )
{
RemovePreFixSystemDefenceSkill ( slotIndex ) ;
return false ;
}
PREFIX_SYSTEM_SKILLINFO skillInfo ;
skillInfo . slotIndex = slotIndex ;
skillInfo . hSkill = hSkill ;
skillInfo . hSkill - > SetItemPrefixSkill ( ) ;
//<2F> ش<EFBFBD> <20> <> ų<EFBFBD> <C5B3> Ȯ<> <C8AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ´ <EFBFBD> .
CDnProbabilityChecker * pProbabilityChecker = static_cast < CDnProbabilityChecker * > ( hSkill - > GetChecker ( IDnSkillUsableChecker : : PROB_CHECKER ) ) ;
skillInfo . fRatio = pProbabilityChecker ? pProbabilityChecker - > GetProbability ( ) : 0.0f ;
bool bResult = m_prefixSystemDefenceSkills . insert ( PREFIX_SYSTEM_SKILL_LIST : : value_type ( slotIndex , skillInfo ) ) . second ;
// if (bResult)
// RefreshPrefixDefenceSkills();
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
AddPrefixDefenceSkill ( hSkill ) ;
# endif // PRE_ADD_PREFIX_SYSTE_RENEW
return bResult ;
}
void MASkillUser : : RemovePreFixSystemDefenceSkill ( int slotIndex )
{
PREFIX_SYSTEM_SKILL_LIST : : iterator iter = m_prefixSystemDefenceSkills . find ( slotIndex ) ;
if ( iter ! = m_prefixSystemDefenceSkills . end ( ) )
{
DnSkillHandle hSkill = iter - > second . hSkill ;
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
RemovePrefixDefenceSkill ( hSkill ) ;
# endif // PRE_ADD_PREFIX_SYSTE_RENEW
RemoveProcessPrefixDefenceSkill ( hSkill ) ;
SAFE_RELEASE_SPTR ( hSkill ) ;
m_prefixSystemDefenceSkills . erase ( iter ) ;
//RefreshPrefixDefenceSkills();
}
}
void MASkillUser : : RemoveProcessPrefixDefenceSkill ( DnSkillHandle hSkill )
{
list < DnSkillHandle > : : iterator iter = m_listProcessPreFixDefenceSkills . begin ( ) ;
for ( ; iter ! = m_listProcessPreFixDefenceSkills . end ( ) ; )
{
DnSkillHandle hProcessPrefixDefenceSkill = * iter ;
if ( hProcessPrefixDefenceSkill = = hSkill )
{
iter = m_listProcessPreFixDefenceSkills . erase ( iter ) ;
continue ;
}
+ + iter ;
}
}
void MASkillUser : : RefreshPrefixDefenceSkills ( )
{
PREFIX_SYSTEM_SKILL_COLLECTION sameSkillList ;
//1. <20> <> <EFBFBD> Ժ<EFBFBD> <D4BA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
GroupingPrefixDefenceSkillsBySameSkillID ( m_prefixSystemDefenceSkills , sameSkillList ) ;
PREFIX_SYSTEM_SKILL_LIST tempCandiateDefenceSkills ;
//2. <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> Ȯ<> <C8AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ؼ<EFBFBD> Ȯ<> <C8AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ༮<EFBFBD> <E0BCAE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
CalculateProbabilitySkill ( tempCandiateDefenceSkills , sameSkillList ) ;
//3. <20> <> ųID<49> <44> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ༮<EFBFBD> <E0BCAE> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> 켱<EFBFBD> <ECBCB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7B7> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
GroupingSkillByPriority ( m_PrefixSystemCandiateDefenceSkills , tempCandiateDefenceSkills ) ;
}
bool MASkillUser : : AddPreFixSystemOffenceSkill ( int slotIndex , DnSkillHandle hSkill )
{
if ( ! hSkill )
{
RemovePreFixSystemOffenceSkill ( slotIndex ) ;
return false ;
}
PREFIX_SYSTEM_SKILLINFO skillInfo ;
skillInfo . slotIndex = slotIndex ;
skillInfo . hSkill = hSkill ;
skillInfo . hSkill - > SetItemPrefixSkill ( ) ;
//<2F> ش<EFBFBD> <20> <> ų<EFBFBD> <C5B3> Ȯ<> <C8AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ´ <EFBFBD> .
CDnProbabilityChecker * pProbabilityChecker = static_cast < CDnProbabilityChecker * > ( hSkill - > GetChecker ( IDnSkillUsableChecker : : PROB_CHECKER ) ) ;
skillInfo . fRatio = pProbabilityChecker ? pProbabilityChecker - > GetProbability ( ) : 0.0f ;
bool bResult = m_prefixSystemOffenceSkills . insert ( PREFIX_SYSTEM_SKILL_LIST : : value_type ( slotIndex , skillInfo ) ) . second ;
// if (bResult)
// RefreshPrefixOffenceSkills();
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
AddPrefixOffenceSkill ( hSkill ) ;
# endif // PRE_ADD_PREFIX_SYSTE_RENEW
return bResult ;
}
void MASkillUser : : RemovePreFixSystemOffenceSkill ( int slotIndex )
{
PREFIX_SYSTEM_SKILL_LIST : : iterator iter = m_prefixSystemOffenceSkills . begin ( ) ;
for ( ; iter ! = m_prefixSystemOffenceSkills . end ( ) ; )
{
if ( iter - > first = = slotIndex )
{
DnSkillHandle hSkill = iter - > second . hSkill ;
hSkill - > OnEnd ( 0 , 0.f ) ;
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
RemovePrefixOffenceSkill ( hSkill ) ;
# endif // PRE_ADD_PREFIX_SYSTE_RENEW
RemoveProcessPrefixOffenceSkill ( hSkill ) ;
SAFE_RELEASE_SPTR ( hSkill ) ;
iter = m_prefixSystemOffenceSkills . erase ( iter ) ;
continue ;
}
+ + iter ;
}
}
void MASkillUser : : RemoveProcessPrefixOffenceSkill ( DnSkillHandle hSkill )
{
list < DnSkillHandle > : : iterator iter = m_listProcessPreFixOffenceSkills . begin ( ) ;
for ( ; iter ! = m_listProcessPreFixOffenceSkills . end ( ) ; )
{
DnSkillHandle hProcessPrefixOffenceSkill = * iter ;
if ( hProcessPrefixOffenceSkill = = hSkill )
{
iter = m_listProcessPreFixOffenceSkills . erase ( iter ) ;
continue ;
}
+ + iter ;
}
}
void MASkillUser : : RefreshPrefixOffenceSkills ( float fHitDamageProb )
{
PREFIX_SYSTEM_SKILL_COLLECTION sameSkillList ;
//1. <20> <> <EFBFBD> Ժ<EFBFBD> <D4BA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
GroupingPrefixDefenceSkillsBySameSkillID ( m_prefixSystemOffenceSkills , sameSkillList ) ;
PREFIX_SYSTEM_SKILL_LIST tempCandiateOffenceSkills ;
//2. <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> Ȯ<> <C8AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ؼ<EFBFBD> Ȯ<> <C8AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ༮<EFBFBD> <E0BCAE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
CalculateProbabilitySkill ( tempCandiateOffenceSkills , sameSkillList ) ;
//3. <20> <> ųID<49> <44> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ༮<EFBFBD> <E0BCAE> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> 켱<EFBFBD> <ECBCB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7B7> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
GroupingSkillByPriority ( m_PrefixSystemCandiateOffenceSkills , tempCandiateOffenceSkills , fHitDamageProb ) ;
}
void MASkillUser : : ProcessPrefixDefenceSkill ( DnActorHandle hHitter )
{
//<2F> <> <EFBFBD> ξ<EFBFBD> <20> ý<EFBFBD> <C3BD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ϵ<EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴٸ<CAB4>
if ( m_prefixSystemDefenceSkills . empty ( ) )
return ;
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> ξ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> -----------------------------!!\n " ) ;
//<2F> <> <EFBFBD> ξ<EFBFBD> <20> ý<EFBFBD> <C3BD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ..
RefreshPrefixDefenceSkills ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ߿<EFBFBD> <DFBF> <EFBFBD> <20> 켱<EFBFBD> <ECBCB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( m_PrefixSystemCandiateDefenceSkills . empty ( ) )
{
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> ξ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> õȰ<C3B5> <20> <> <EFBFBD> <EFBFBD> .-----------------------------!!\n " ) ;
return ;
}
PREFIX_SYSTEM_SKILL_COLLECTION : : iterator selectIter = m_PrefixSystemCandiateDefenceSkills . begin ( ) ;
PRESIX_SYSTEM_SKILLS & skills = selectIter - > second ;
PRESIX_SYSTEM_SKILLS : : iterator iter = skills . begin ( ) ;
PRESIX_SYSTEM_SKILLS : : iterator endIter = skills . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
DnSkillHandle hSkill = ( * iter ) . hSkill ;
if ( ! hSkill /*|| CDnSkill::UsingResult::Success != hSkill->CanExecute()*/ )
continue ;
/*
//<2F> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> dzʶ<C7B3> .
if ( hSkill - > GetCoolTime ( ) ! = 0.0f & & hSkill - > GetElapsedDelayTime ( ) > 0.0f )
continue ;
*/
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> ξ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų(%d) <20> <> <EFBFBD> <EFBFBD> ....\n " , hSkill - > GetClassID ( ) ) ;
//Skill <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> ?
hSkill - > OnBeginCoolTime ( ) ;
m_PrefixSkillCoolTimeManager . AddCoolTime ( hSkill ) ;
int nStateEffectCount = hSkill - > GetStateEffectCount ( ) ;
// <20> ش<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ߺ <EFBFBD> ó<> <C3B3> Ȯ<> <C8AE> <EFBFBD> ϰ<EFBFBD> ,
// <20> <> <EFBFBD> ͺ <EFBFBD> <CDBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ؾ<EFBFBD> <20> ҵ<EFBFBD> <20> ѵ <EFBFBD> ...
for ( DWORD k = 0 ; k < hSkill - > GetStateEffectCount ( ) ; k + + )
{
CDnSkill : : StateEffectStruct * pLocalStruct = hSkill - > GetStateEffectFromIndex ( k ) ;
DnActorHandle hApplyActor ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> Ÿ<> Կ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
switch ( pLocalStruct - > ApplyType )
{
case CDnSkill : : ApplySelf : // <20> ڽ<EFBFBD> <DABD> <EFBFBD> <EFBFBD> <EFBFBD>
hApplyActor = m_pActor - > GetActorHandle ( ) ;
break ;
case CDnSkill : : ApplyTarget : // Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
hApplyActor = hHitter ;
break ;
case CDnSkill : : ApplyEnemy : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̴<EFBFBD> ..)
if ( m_pActor - > GetTeam ( ) = = hHitter - > GetTeam ( ) )
continue ;
else
hApplyActor = hHitter ;
break ;
case CDnSkill : : ApplyFriend : // <20> <> <EFBFBD> <EFBFBD> <20> <> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ..?)
if ( m_pActor - > GetTeam ( ) ! = hHitter - > GetTeam ( ) )
continue ;
else
hApplyActor = hHitter ;
break ;
}
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> 0<> ̰<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> Ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD>
// <20> <> ų<EFBFBD> <C5B3> m_vlApplyNoPacketStateEffectList<73> <74> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> ...[2011/01/13 semozz]
bool isSelfPermentStateEffect = false ;
if ( CDnSkill : : ApplySelf = = pLocalStruct - > ApplyType & &
( 0 = = pLocalStruct - > nDurationTime | |
- 1 = = pLocalStruct - > nDurationTime ) )
{
pLocalStruct - > nDurationTime = - 1 ;
isSelfPermentStateEffect = true ;
}
CDnStateBlow * pStateBlow = hApplyActor - > GetStateBlow ( ) ;
CDnSkill : : CanApply eResult = CDnSkill : : CanApply : : Apply ;
if ( pStateBlow )
eResult = pStateBlow - > CanApplySkillStateEffect ( hSkill - > GetInfo ( ) , * pLocalStruct ) ;
if ( CDnSkill : : CanApply : : Fail ! = eResult )
{
hApplyActor - > RemoveResetStateBlow ( ) ;
int nBlowID = hApplyActor - > CmdAddStateEffect ( hSkill - > GetInfo ( ) , ( STATE_BLOW : : emBLOW_INDEX ) pLocalStruct - > nID ,
pLocalStruct - > nDurationTime , pLocalStruct - > szValue . c_str ( ) , false , false ) ;
if ( isSelfPermentStateEffect )
hSkill - > AddPrefixBlow ( hApplyActor , nBlowID ) ;
}
hApplyActor - > InitStateBlowIDToRemove ( ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> ..
m_listProcessPreFixDefenceSkills . push_back ( hSkill ) ;
}
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> ξ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> -----------------------------!!\n " ) ;
}
void MASkillUser : : ProcessPrefixOffenceSkill ( float fHitDamageProb )
{
//<2F> <> <EFBFBD> ξ<EFBFBD> <20> ý<EFBFBD> <C3BD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ϵ<EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴٸ<CAB4>
if ( m_prefixSystemOffenceSkills . empty ( ) )
return ;
//<2F> <> <EFBFBD> ξ<EFBFBD> <20> ý<EFBFBD> <C3BD> <EFBFBD> <20> <> <EFBFBD> ݿ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ..
RefreshPrefixOffenceSkills ( fHitDamageProb ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ߿<EFBFBD> <DFBF> <EFBFBD> <20> 켱<EFBFBD> <ECBCB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( m_PrefixSystemCandiateOffenceSkills . empty ( ) )
return ;
PREFIX_SYSTEM_SKILL_COLLECTION : : iterator selectIter = m_PrefixSystemCandiateOffenceSkills . begin ( ) ;
PRESIX_SYSTEM_SKILLS & skills = selectIter - > second ;
PRESIX_SYSTEM_SKILLS : : iterator iter = skills . begin ( ) ;
PRESIX_SYSTEM_SKILLS : : iterator endIter = skills . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
DnSkillHandle hSkill = ( * iter ) . hSkill ;
if ( ! hSkill /* || CDnSkill::UsingResult::Success != hSkill->CanExecute()*/ )
continue ;
//Skill <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> ?
hSkill - > OnBeginCoolTime ( ) ;
m_PrefixSkillCoolTimeManager . AddCoolTime ( hSkill ) ;
int nStateEffectCount = hSkill - > GetStateEffectCount ( ) ;
// <20> ش<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ߺ <EFBFBD> ó<> <C3B3> Ȯ<> <C8AE> <EFBFBD> ϰ<EFBFBD> ,
// <20> <> <EFBFBD> ͺ <EFBFBD> <CDBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ؾ<EFBFBD> <20> ҵ<EFBFBD> <20> ѵ <EFBFBD> ...
for ( DWORD k = 0 ; k < hSkill - > GetStateEffectCount ( ) ; k + + )
{
CDnSkill : : StateEffectStruct * pLocalStruct = hSkill - > GetStateEffectFromIndex ( k ) ;
DnActorHandle hApplyActor ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> Ÿ<> Կ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
switch ( pLocalStruct - > ApplyType )
{
case CDnSkill : : ApplySelf : // <20> ڽ<EFBFBD> <DABD> <EFBFBD> <EFBFBD> <EFBFBD>
hApplyActor = m_pActor - > GetActorHandle ( ) ;
break ;
case CDnSkill : : ApplyTarget : // Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
continue ;
case CDnSkill : : ApplyEnemy : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̴<EFBFBD> ..)
continue ;
break ;
case CDnSkill : : ApplyFriend : // <20> <> <EFBFBD> <EFBFBD> <20> <> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ..?)
continue ;
break ;
}
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> 0<> ̰<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> Ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD>
// <20> <> ų<EFBFBD> <C5B3> m_vlApplyNoPacketStateEffectList<73> <74> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> ...[2011/01/13 semozz]
bool isSelfPermentStateEffect = false ;
if ( CDnSkill : : ApplySelf = = pLocalStruct - > ApplyType & &
( 0 = = pLocalStruct - > nDurationTime | |
- 1 = = pLocalStruct - > nDurationTime ) )
{
pLocalStruct - > nDurationTime = - 1 ;
isSelfPermentStateEffect = true ;
}
CDnStateBlow * pStateBlow = hApplyActor - > GetStateBlow ( ) ;
CDnSkill : : CanApply eResult = CDnSkill : : CanApply : : Apply ;
if ( pStateBlow )
eResult = pStateBlow - > CanApplySkillStateEffect ( hSkill - > GetInfo ( ) , * pLocalStruct ) ;
if ( CDnSkill : : CanApply : : Fail ! = eResult )
{
hApplyActor - > RemoveResetStateBlow ( ) ;
int nBlowID = hApplyActor - > CmdAddStateEffect ( hSkill - > GetInfo ( ) , ( STATE_BLOW : : emBLOW_INDEX ) pLocalStruct - > nID ,
pLocalStruct - > nDurationTime , pLocalStruct - > szValue . c_str ( ) , false , false ) ;
if ( isSelfPermentStateEffect )
hSkill - > AddPrefixBlow ( hApplyActor , nBlowID ) ;
}
hApplyActor - > InitStateBlowIDToRemove ( ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> ..
m_listProcessPreFixOffenceSkills . push_back ( hSkill ) ;
}
}
void MASkillUser : : ApplyPrefixOffenceSkillToTarget ( DnActorHandle hTarget )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ߿<EFBFBD> <DFBF> <EFBFBD> <20> 켱<EFBFBD> <ECBCB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( m_listProcessPreFixOffenceSkills . empty ( ) )
return ;
list < DnSkillHandle > : : iterator iter = m_listProcessPreFixOffenceSkills . begin ( ) ;
list < DnSkillHandle > : : iterator endIter = m_listProcessPreFixOffenceSkills . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
DnSkillHandle hSkill = ( * iter ) ;
if ( ! hSkill )
continue ;
int nStateEffectCount = hSkill - > GetStateEffectCount ( ) ;
// <20> ش<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ߺ <EFBFBD> ó<> <C3B3> Ȯ<> <C8AE> <EFBFBD> ϰ<EFBFBD> ,
// <20> <> <EFBFBD> ͺ <EFBFBD> <CDBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ؾ<EFBFBD> <20> ҵ<EFBFBD> <20> ѵ <EFBFBD> ...
for ( DWORD k = 0 ; k < hSkill - > GetStateEffectCount ( ) ; k + + )
{
CDnSkill : : StateEffectStruct * pLocalStruct = hSkill - > GetStateEffectFromIndex ( k ) ;
DnActorHandle hApplyActor ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> Ÿ<> Կ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
switch ( pLocalStruct - > ApplyType )
{
case CDnSkill : : ApplySelf : // <20> ڽ<EFBFBD> <DABD> <EFBFBD> <EFBFBD> <EFBFBD>
continue ;
case CDnSkill : : ApplyTarget : // Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
hApplyActor = hTarget ;
break ;
case CDnSkill : : ApplyEnemy : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̴<EFBFBD> ..)
if ( m_pActor - > GetTeam ( ) = = hTarget - > GetTeam ( ) )
continue ;
else
hApplyActor = hTarget ;
break ;
case CDnSkill : : ApplyFriend : // <20> <> <EFBFBD> <EFBFBD> <20> <> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ..?)
if ( m_pActor - > GetTeam ( ) ! = hTarget - > GetTeam ( ) )
continue ;
else
hApplyActor = hTarget ;
break ;
}
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> 0<> ̰<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> Ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD>
// <20> <> ų<EFBFBD> <C5B3> m_vlApplyNoPacketStateEffectList<73> <74> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> ...[2011/01/13 semozz]
bool isSelfPermentStateEffect = false ;
if ( CDnSkill : : ApplySelf = = pLocalStruct - > ApplyType & &
( 0 = = pLocalStruct - > nDurationTime | |
- 1 = = pLocalStruct - > nDurationTime ) )
{
pLocalStruct - > nDurationTime = - 1 ;
isSelfPermentStateEffect = true ;
}
CDnStateBlow * pStateBlow = hApplyActor - > GetStateBlow ( ) ;
CDnSkill : : CanApply eResult = CDnSkill : : CanApply : : Apply ;
if ( pStateBlow )
eResult = pStateBlow - > CanApplySkillStateEffect ( hSkill - > GetInfo ( ) , * pLocalStruct ) ;
if ( CDnSkill : : CanApply : : Fail ! = eResult )
{
hApplyActor - > RemoveResetStateBlow ( ) ;
int nBlowID = hApplyActor - > CmdAddStateEffect ( hSkill - > GetInfo ( ) , ( STATE_BLOW : : emBLOW_INDEX ) pLocalStruct - > nID ,
pLocalStruct - > nDurationTime , pLocalStruct - > szValue . c_str ( ) , false , false ) ;
if ( isSelfPermentStateEffect )
hSkill - > AddPrefixBlow ( hApplyActor , nBlowID ) ;
}
hApplyActor - > InitStateBlowIDToRemove ( ) ;
}
}
}
void MASkillUser : : CalculateProbabilitySkill ( PREFIX_SYSTEM_SKILL_LIST & candidateSkills ,
PREFIX_SYSTEM_SKILL_COLLECTION & sameSkillList )
{
//<2F> ĺ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ <20> ʱ<EFBFBD> ȭ
candidateSkills . clear ( ) ;
PREFIX_SYSTEM_SKILL_COLLECTION : : iterator iter = sameSkillList . begin ( ) ;
PREFIX_SYSTEM_SKILL_COLLECTION : : iterator endIter = sameSkillList . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> ųID<49> <44> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> Ȯ<> <C8AE> <EFBFBD> <EFBFBD> <20> ջ<EFBFBD> <D5BB> Ѵ <EFBFBD> .
PRESIX_SYSTEM_SKILLS : : iterator skillIter = iter - > second . begin ( ) ;
PRESIX_SYSTEM_SKILLS : : iterator skillEndIter = iter - > second . end ( ) ;
float fProbability = 0.0f ;
DnSkillHandle hSelectedSkill ;
int nSlotIndex = - 1 ;
for ( ; skillIter ! = skillEndIter ; + + skillIter )
{
if ( skillIter - > hSkill )
{
fProbability + = skillIter - > fRatio ;
// <20> ش<EFBFBD> <20> <> ų
if ( ! hSelectedSkill )
{
hSelectedSkill = skillIter - > hSkill ;
nSlotIndex = skillIter - > slotIndex ;
}
else
{
if ( hSelectedSkill - > GetLevel ( ) < skillIter - > hSkill - > GetLevel ( ) )
{
hSelectedSkill = skillIter - > hSkill ;
nSlotIndex = skillIter - > slotIndex ;
}
}
}
}
// <20> <> <EFBFBD> õ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> ĺ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> <DFB0> Ѵ <EFBFBD> .
if ( hSelectedSkill & & - 1 ! = nSlotIndex & & 0.0f ! = fProbability )
{
int nSkillID = hSelectedSkill - > GetClassID ( ) ;
PREFIX_SYSTEM_SKILLINFO skillInfo ;
skillInfo . fRatio = fProbability ;
skillInfo . hSkill = hSelectedSkill ;
skillInfo . slotIndex = nSlotIndex ;
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų(%d) <20> ջ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> (%f) <20> <> <EFBFBD> <EFBFBD> Index(%d)<29> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> !!!!!\n " , skillInfo . hSkill - > GetClassID ( ) , skillInfo . fRatio , skillInfo . slotIndex ) ;
candidateSkills . insert ( PREFIX_SYSTEM_SKILL_LIST : : value_type ( nSkillID , skillInfo ) ) ;
}
}
}
void MASkillUser : : GroupingPrefixDefenceSkillsBySameSkillID ( PREFIX_SYSTEM_SKILL_LIST & skillList , PREFIX_SYSTEM_SKILL_COLLECTION & sameSkillList )
{
PREFIX_SYSTEM_SKILL_LIST : : iterator iter = skillList . begin ( ) ;
PREFIX_SYSTEM_SKILL_LIST : : iterator endIter = skillList . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
int nSkillID = - 1 ;
int nSlotIndex = iter - > first ; //<2F> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD>
PREFIX_SYSTEM_SKILLINFO skillInfo = iter - > second ;
if ( ! skillInfo . hSkill )
continue ;
nSkillID = skillInfo . hSkill - > GetClassID ( ) ;
PREFIX_SYSTEM_SKILL_COLLECTION : : iterator findIter = sameSkillList . find ( nSkillID ) ;
if ( findIter ! = sameSkillList . end ( ) )
{
//<2F> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ųID<49> <44> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ִٸ<D6B4>
skillInfo . slotIndex = nSlotIndex ;
findIter - > second . push_back ( skillInfo ) ;
}
else
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴٸ<CAB4> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ..
PRESIX_SYSTEM_SKILLS skillList ;
skillInfo . slotIndex = nSlotIndex ;
skillList . push_back ( skillInfo ) ;
sameSkillList . insert ( PREFIX_SYSTEM_SKILL_COLLECTION : : value_type ( nSkillID , skillList ) ) ;
}
}
}
void MASkillUser : : GroupingSkillByPriority ( PREFIX_SYSTEM_SKILL_COLLECTION & prefixSystemSkills , PREFIX_SYSTEM_SKILL_LIST & tempCandiateSkills , float fHitDamageProb /* = 1.0f*/ )
{
prefixSystemSkills . clear ( ) ;
PREFIX_SYSTEM_SKILL_LIST : : iterator iter = tempCandiateSkills . begin ( ) ;
PREFIX_SYSTEM_SKILL_LIST : : iterator endIter = tempCandiateSkills . end ( ) ;
//<2F> <> ǥ <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> ȸ <20> ϸ鼭 <20> 켱 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <D7B7> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
for ( ; iter ! = endIter ; + + iter )
{
int nPriority = 0 ;
PREFIX_SYSTEM_SKILLINFO skillInfo = iter - > second ;
if ( ! skillInfo . hSkill )
continue ;
nPriority = skillInfo . hSkill - > GetPrefixSystemPriority ( ) ;
//<2F> <> ų <20> <> Ÿ<EFBFBD> <C5B8> Ȯ<> <C8AE> ...
//if (skillInfo.hSkill->GetCoolTime() > 0.0f && skillInfo.hSkill->GetElapsedDelayTime() > 0.0f)
if ( m_PrefixSkillCoolTimeManager . IsCoolTime ( skillInfo . hSkill - > GetClassID ( ) ) )
{
OutputDebug ( " <EFBFBD> <EFBFBD> ų(%d) <20> <> Ÿ<EFBFBD> <C5B8> <20> <> .........!!!!\n " , skillInfo . hSkill - > GetClassID ( ) ) ;
continue ;
}
//Ȯ<> <C8AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> <DFB0> Ѵ <EFBFBD> ...
bool bExecuteable = rand ( ) % 10000 < = ( iter - > second . fRatio * fHitDamageProb ) ;
if ( ! bExecuteable )
{
OutputDebug ( " <EFBFBD> <EFBFBD> ų(%d) Ȯ<> <C8AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> ...!!!!\n " , skillInfo . hSkill - > GetClassID ( ) ) ;
continue ;
}
OutputDebug ( " <EFBFBD> 켱<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (%d)<29> <> <20> <> ų(%d) <20> <> <EFBFBD> ϵ<EFBFBD> !!!!\n " , nPriority , skillInfo . hSkill - > GetClassID ( ) ) ;
PREFIX_SYSTEM_SKILL_COLLECTION : : iterator findIter = prefixSystemSkills . find ( nPriority ) ;
if ( findIter ! = prefixSystemSkills . end ( ) )
{
//<2F> ̹<EFBFBD> <20> 켱<EFBFBD> <ECBCB1> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> ִٸ<D6B4>
//<2F> 켱<EFBFBD> <ECBCB1> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> Ѵ <EFBFBD> .
findIter - > second . push_back ( skillInfo ) ;
}
else
{
//<2F> <> <EFBFBD> <EFBFBD> <20> 켱<EFBFBD> <ECBCB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴٸ<CAB4> ..
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> <DFB0> Ѵ <EFBFBD> .
PRESIX_SYSTEM_SKILLS skillList ;
skillList . push_back ( skillInfo ) ;
prefixSystemSkills . insert ( PREFIX_SYSTEM_SKILL_COLLECTION : : value_type ( nPriority , skillList ) ) ;
}
}
}
void MASkillUser : : EndPrefixSystemSkill ( LOCAL_TIME LocalTime , float fDelta )
{
list < DnSkillHandle > : : iterator iter = m_listProcessPreFixDefenceSkills . begin ( ) ;
for ( iter ; iter ! = m_listProcessPreFixDefenceSkills . end ( ) ; + + iter )
{
DnSkillHandle hAutoPassive = * iter ;
hAutoPassive - > OnEnd ( LocalTime , fDelta ) ;
}
iter = m_listProcessPreFixOffenceSkills . begin ( ) ;
for ( iter ; iter ! = m_listProcessPreFixOffenceSkills . end ( ) ; + + iter )
{
DnSkillHandle hAutoPassive = * iter ;
hAutoPassive - > OnEnd ( LocalTime , fDelta ) ;
}
}
void MASkillUser : : InitPrefixOffenceSkills ( )
{
m_PrefixSystemCandiateOffenceSkills . clear ( ) ;
}
bool MASkillUser : : IsPrefixTriggerSkill ( )
{
if ( ! m_hProcessSkill )
return false ;
return m_hProcessSkill - > IsPrefixTriggerSkill ( ) ;
}
# endif // _GAMESERVER
void MASkillUser : : UpdateSkillLevelUpInfo ( )
{
std : : map < int , SkillLevelUpInfo > : : iterator iter = m_SkillLevelUpInfoList . begin ( ) ;
std : : map < int , SkillLevelUpInfo > : : iterator endIter = m_SkillLevelUpInfoList . end ( ) ;
m_SkillLevelUpInfo . clear ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
SkillLevelUpInfo & skillLevelUpInfo = iter - > second ;
//<2F> <> ų ID / <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD>
if ( skillLevelUpInfo . nSkillID ! = 0 & & skillLevelUpInfo . nLevelUp ! = 0 )
{
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> ã<> ´ <EFBFBD> .
std : : map < int , int > : : iterator findIter = m_SkillLevelUpInfo . find ( skillLevelUpInfo . nSkillID ) ;
if ( findIter ! = m_SkillLevelUpInfo . end ( ) )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ũ<> ٸ<EFBFBD> <20> dzʶ<C7B3> .
if ( findIter - > second > skillLevelUpInfo . nLevelUp )
continue ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ũ<> <C5A9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> ..
m_SkillLevelUpInfo . erase ( findIter ) ;
}
// <20> <> <EFBFBD> ο <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
m_SkillLevelUpInfo . insert ( std : : make_pair ( skillLevelUpInfo . nSkillID , skillLevelUpInfo . nLevelUp ) ) ;
}
}
}
void MASkillUser : : AddSkillLevelUpInfo ( int nSlotIndex , int nSkillID , int nLevelUp )
{
DnSkillHandle hSkill = FindSkill ( nSkillID ) ;
if ( hSkill )
{
if ( hSkill - > GetElapsedDelayTime ( ) > 0.0f | | hSkill - > IsToggleOn ( ) )
return ;
}
SkillLevelUpInfo skillLevelUpInfo ;
skillLevelUpInfo . nSkillID = nSkillID ;
skillLevelUpInfo . nLevelUp = nLevelUp ;
m_SkillLevelUpInfoList . insert ( std : : make_pair ( nSlotIndex , skillLevelUpInfo ) ) ;
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ..
UpdateSkillLevelUpInfo ( ) ;
int nSkillLevelUp = GetSkillLevelUpValue ( nSkillID ) ;
SkillLevelUp ( nSkillID , nSkillLevelUp ) ;
}
void MASkillUser : : RemoveSkillLevelUpInfo ( int nSlotIndex )
{
std : : map < int , SkillLevelUpInfo > : : iterator findIter = m_SkillLevelUpInfoList . find ( nSlotIndex ) ;
if ( findIter ! = m_SkillLevelUpInfoList . end ( ) )
{
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ۿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų ID<49> <44> <20> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> .
int nSkillID = findIter - > second . nSkillID ;
DnSkillHandle hSkill = FindSkill ( nSkillID ) ;
if ( hSkill )
{
if ( hSkill - > GetElapsedDelayTime ( ) > 0.0f | | hSkill - > IsToggleOn ( ) )
return ;
}
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
m_SkillLevelUpInfoList . erase ( findIter ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
UpdateSkillLevelUpInfo ( ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD>
int nLevelUp = GetSkillLevelUpValue ( nSkillID ) ;
SkillLevelUp ( nSkillID , nLevelUp ) ;
}
}
int MASkillUser : : GetSkillLevelUpValue ( int nSkillID )
{
int nLevelUpValue = 0 ;
int nLevelUpValueByNormalItem = 0 ;
std : : map < int , int > : : iterator findNormalIter = m_SkillLevelUpInfo . find ( nSkillID ) ;
if ( findNormalIter ! = m_SkillLevelUpInfo . end ( ) )
nLevelUpValueByNormalItem = findNormalIter - > second ;
int nLevelUpValueByCashItem = 0 ;
std : : map < int , int > : : iterator findCashIter = m_CashSkillLevelUpInfo . find ( nSkillID ) ;
if ( findCashIter ! = m_CashSkillLevelUpInfo . end ( ) )
nLevelUpValueByCashItem = findCashIter - > second ;
//ij<> þ<EFBFBD> <C3BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 1
if ( nLevelUpValueByCashItem > 1 )
nLevelUpValueByCashItem = 1 ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߺ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> Ѵ <EFBFBD> .
nLevelUpValue = max ( nLevelUpValueByNormalItem , nLevelUpValueByCashItem ) ;
return nLevelUpValue ;
}
bool MASkillUser : : ExistSkillLevelUpValue ( )
{
if ( m_SkillLevelUpInfo . empty ( ) & & m_CashSkillLevelUpInfo . empty ( ) )
return false ;
return true ;
}
void MASkillUser : : SkillLevelUp ( int nSkillID , int nLevelUp )
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> ã<> Ƽ <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ְ<EFBFBD> , <20> ʱ<EFBFBD> ȭ <20> <> <20> <> ų<EFBFBD> <C5B3> <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ų<EFBFBD> <C5B2> .
DnSkillHandle hSkill = FindSkill ( nSkillID ) ;
if ( ! hSkill )
return ;
int nCurentSkillLevel = hSkill - > GetLevel ( ) ;
int nCurLevlUpValue = hSkill - > GetLevelUpValue ( ) ;
bool bChangeLevel = true ;
if ( nCurentSkillLevel = = 0 )
bChangeLevel = false ;
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʿ䰡 <20> <> <EFBFBD> <EFBFBD> .
if ( nCurLevlUpValue = = nLevelUp )
bChangeLevel = false ;
if ( bChangeLevel )
{
//SetSkillLevel<65> <6C> <EFBFBD> <EFBFBD> AddSkill<6C> <6C> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ..
int nOrigLevel = nCurentSkillLevel - nCurLevlUpValue ;
ChangeSkillLevelUp ( nSkillID , nOrigLevel ) ;
}
# if defined(_GAMESERVER)
# else
else
hSkill - > DisableSkillByItemMove ( false ) ;
# endif // _GAMESERVER
}
void MASkillUser : : ChangeSkillLevelUp ( int nSkillID , int nOrigLevel )
{
RemoveSkill ( nSkillID ) ;
AddSkill ( nSkillID , nOrigLevel ) ;
}
// std::map<int, SkillLevelUpInfo> m_CashSkillLevelUpInfoList;
void MASkillUser : : AddSkillLevelUpInfoByCashItem ( int nSlotIndex , int nSkillID , int nLevelUp )
{
SkillLevelUpInfo skillLevelUpInfo ;
skillLevelUpInfo . nSkillID = nSkillID ;
skillLevelUpInfo . nLevelUp = nLevelUp ;
m_CashSkillLevelUpInfoList . insert ( std : : make_pair ( nSlotIndex , skillLevelUpInfo ) ) ;
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ..
UpdateSkillLevelUpInfoByCashItem ( ) ;
int nSkillLevelUp = GetSkillLevelUpValue ( nSkillID ) ;
SkillLevelUp ( nSkillID , nSkillLevelUp ) ;
}
void MASkillUser : : UpdateSkillLevelUpInfoByCashItem ( )
{
std : : map < int , SkillLevelUpInfo > : : iterator iter = m_CashSkillLevelUpInfoList . begin ( ) ;
std : : map < int , SkillLevelUpInfo > : : iterator endIter = m_CashSkillLevelUpInfoList . end ( ) ;
m_CashSkillLevelUpInfo . clear ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
SkillLevelUpInfo & skillLevelUpInfo = iter - > second ;
//<2F> <> ų ID / <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD>
if ( skillLevelUpInfo . nSkillID ! = 0 & & skillLevelUpInfo . nLevelUp ! = 0 )
{
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> ã<> ´ <EFBFBD> .
std : : map < int , int > : : iterator findIter = m_CashSkillLevelUpInfo . find ( skillLevelUpInfo . nSkillID ) ;
if ( findIter ! = m_CashSkillLevelUpInfo . end ( ) )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ũ<> ٸ<EFBFBD> <20> dzʶ<C7B3> .
if ( findIter - > second > skillLevelUpInfo . nLevelUp )
continue ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ũ<> <C5A9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> ..
m_CashSkillLevelUpInfo . erase ( findIter ) ;
}
// <20> <> <EFBFBD> ο <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
m_CashSkillLevelUpInfo . insert ( std : : make_pair ( skillLevelUpInfo . nSkillID , skillLevelUpInfo . nLevelUp ) ) ;
}
}
}
void MASkillUser : : RemoveSkillLevelUpInfoByCashItem ( int nSlotIndex )
{
std : : map < int , SkillLevelUpInfo > : : iterator findIter = m_CashSkillLevelUpInfoList . find ( nSlotIndex ) ;
if ( findIter ! = m_CashSkillLevelUpInfoList . end ( ) )
{
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ۿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų ID<49> <44> <20> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> .
int nSkillID = findIter - > second . nSkillID ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
m_CashSkillLevelUpInfoList . erase ( findIter ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
UpdateSkillLevelUpInfoByCashItem ( ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD>
int nLevelUp = GetSkillLevelUpValue ( nSkillID ) ;
SkillLevelUp ( nSkillID , nLevelUp ) ;
}
}
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
# if defined(_GAMESERVER)
void MASkillUser : : AddPrefixDefenceSkill ( DnSkillHandle hSkill )
{
if ( ! hSkill )
return ;
//<2F> <> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> λ<EFBFBD> <20> <> ų Ÿ<> <C5B8> (<28> <> <EFBFBD> <EFBFBD> /<2F> ı <EFBFBD> ....)
int nPrefixSkillType = hSkill - > GetPrefixSkillType ( ) ;
PREFIX_SKILL_INFO : : iterator findIter = m_PrefixDefenceSkills . find ( nPrefixSkillType ) ;
//<2F> <> <EFBFBD> <EFBFBD> ī<> װ<EFBFBD> <D7B0> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4>
if ( findIter ! = m_PrefixDefenceSkills . end ( ) )
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> λ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> ü<EFBFBD> <C3BC> <20> <> ų<EFBFBD> <C5B3> <20> ߰<EFBFBD> <20> ϰ<EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
findIter - > second - > AddSkill ( hSkill ) ;
}
else
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϵ<EFBFBD> <20> <> <EFBFBD> λ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
CDnPrefixSkill * pPrefixSkill = new CDnPrefixSkill ( nPrefixSkillType ) ;
pPrefixSkill - > AddSkill ( hSkill ) ;
m_PrefixDefenceSkills . insert ( make_pair ( nPrefixSkillType , pPrefixSkill ) ) ;
}
}
void MASkillUser : : RemovePrefixDefenceSkill ( DnSkillHandle hSkill )
{
//<2F> <> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> λ<EFBFBD> <20> <> ų Ÿ<> <C5B8> (<28> <> <EFBFBD> <EFBFBD> /<2F> ı <EFBFBD> ....)
int nPrefixSkillType = hSkill - > GetPrefixSkillType ( ) ;
PREFIX_SKILL_INFO : : iterator findIter = m_PrefixDefenceSkills . find ( nPrefixSkillType ) ;
//<2F> <> <EFBFBD> <EFBFBD> ī<> װ<EFBFBD> <D7B0> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4>
if ( findIter ! = m_PrefixDefenceSkills . end ( ) )
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> λ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> ü<EFBFBD> <C3BC> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
findIter - > second - > RemoveSkill ( hSkill ) ;
//<2F> <> <EFBFBD> ϵ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
if ( findIter - > second - > GetSkillCount ( ) = = 0 )
{
SAFE_DELETE ( findIter - > second ) ;
m_PrefixDefenceSkills . erase ( findIter ) ;
}
}
}
void MASkillUser : : ProcessPrefixDefenceSkill_New ( DnActorHandle hHitter )
{
//<2F> <> <EFBFBD> ξ<EFBFBD> <20> ý<EFBFBD> <C3BD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ϵ<EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴٸ<CAB4>
if ( m_PrefixDefenceSkills . empty ( ) )
return ;
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> ξ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> -----------------------------!!\n " ) ;
//<2F> <> <EFBFBD> λ<EFBFBD> <20> <> ų <20> ߵ <EFBFBD> Ȯ<> <C8AE> <20> <> <EFBFBD> <EFBFBD> ..
PREFIX_SKILL_INFO : : iterator iter = m_PrefixDefenceSkills . begin ( ) ;
PREFIX_SKILL_INFO : : iterator endIter = m_PrefixDefenceSkills . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
CDnPrefixSkill * pPrefixSkill = iter - > second ;
if ( ! pPrefixSkill )
continue ;
//<2F> <> <EFBFBD> λ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <EFBFBD> Ѵ <EFBFBD> ..
if ( m_PrefixSkillCoolTimeManager . IsCoolTime ( pPrefixSkill - > GetSkillType ( ) ) )
{
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų(%d) <20> <> Ÿ<EFBFBD> <C5B8> <20> <> !!!!!!!!!!\n " , pPrefixSkill - > GetSkillType ( ) ) ;
continue ;
}
//<2F> <> <EFBFBD> λ<EFBFBD> <20> <> ų <20> ߵ <EFBFBD> Ȯ<> <C8AE> Ȯ<> <C8AE> .
bool bExecuteable = rand ( ) % 10000 < = pPrefixSkill - > GetProbability ( ) ;
if ( ! bExecuteable )
{
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų(%d) Ȯ<> <C8AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> ...!!!!\n " , pPrefixSkill - > GetSkillType ( ) ) ;
continue ;
}
//<2F> <> ǥ <20> <> ų
DnSkillHandle hSkill = pPrefixSkill - > GetSkillHandle ( ) ;
if ( ! hSkill )
continue ;
hSkill - > OnBeginCoolTime ( ) ;
//Skill <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> ?
m_PrefixSkillCoolTimeManager . AddCoolTime ( pPrefixSkill ) ;
int nStateEffectCount = pPrefixSkill - > GetStateEffectCount ( ) ;
// <20> ش<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ߺ <EFBFBD> ó<> <C3B3> Ȯ<> <C8AE> <EFBFBD> ϰ<EFBFBD> ,
// <20> <> <EFBFBD> ͺ <EFBFBD> <CDBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ؾ<EFBFBD> <20> ҵ<EFBFBD> <20> ѵ <EFBFBD> ...
for ( int k = 0 ; k < pPrefixSkill - > GetStateEffectCount ( ) ; k + + )
{
CDnSkill : : StateEffectStruct * pLocalStruct = pPrefixSkill - > GetStateEffectFromIndex ( k ) ;
DnActorHandle hApplyActor ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> Ÿ<> Կ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
switch ( pLocalStruct - > ApplyType )
{
case CDnSkill : : ApplySelf : // <20> ڽ<EFBFBD> <DABD> <EFBFBD> <EFBFBD> <EFBFBD>
hApplyActor = m_pActor - > GetActorHandle ( ) ;
break ;
case CDnSkill : : ApplyTarget : // Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
hApplyActor = hHitter ;
break ;
case CDnSkill : : ApplyEnemy : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̴<EFBFBD> ..)
if ( m_pActor - > GetTeam ( ) = = hHitter - > GetTeam ( ) )
continue ;
else
hApplyActor = hHitter ;
break ;
case CDnSkill : : ApplyFriend : // <20> <> <EFBFBD> <EFBFBD> <20> <> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ..?)
if ( m_pActor - > GetTeam ( ) ! = hHitter - > GetTeam ( ) )
continue ;
else
hApplyActor = hHitter ;
break ;
}
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> 0<> ̰<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> Ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD>
// <20> <> ų<EFBFBD> <C5B3> m_vlApplyNoPacketStateEffectList<73> <74> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> ...[2011/01/13 semozz]
bool isSelfPermentStateEffect = false ;
if ( CDnSkill : : ApplySelf = = pLocalStruct - > ApplyType & &
( 0 = = pLocalStruct - > nDurationTime | |
- 1 = = pLocalStruct - > nDurationTime ) )
{
pLocalStruct - > nDurationTime = - 1 ;
isSelfPermentStateEffect = true ;
}
CDnStateBlow * pStateBlow = hApplyActor - > GetStateBlow ( ) ;
CDnSkill : : CanApply eResult = CDnSkill : : CanApply : : Apply ;
if ( pStateBlow )
eResult = pStateBlow - > CanApplySkillStateEffect ( hSkill - > GetInfo ( ) , * pLocalStruct ) ;
if ( CDnSkill : : CanApply : : Fail ! = eResult )
{
hApplyActor - > RemoveResetStateBlow ( ) ;
int nBlowID = hApplyActor - > CmdAddStateEffect ( hSkill - > GetInfo ( ) , ( STATE_BLOW : : emBLOW_INDEX ) pLocalStruct - > nID ,
pLocalStruct - > nDurationTime , pLocalStruct - > szValue . c_str ( ) , false , false ) ;
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų(%d) <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> (%d)-(%s)\n " , pPrefixSkill - > GetSkillType ( ) , pLocalStruct - > nID , pLocalStruct - > szValue . c_str ( ) ) ;
if ( isSelfPermentStateEffect )
hSkill - > AddPrefixBlow ( hApplyActor , nBlowID ) ;
}
hApplyActor - > InitStateBlowIDToRemove ( ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> ..
m_listProcessPreFixDefenceSkills . push_back ( hSkill ) ;
}
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> ξ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> -----------------------------!!\n " ) ;
}
void MASkillUser : : AddPrefixOffenceSkill ( DnSkillHandle hSkill )
{
if ( ! hSkill )
return ;
//<2F> <> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> λ<EFBFBD> <20> <> ų Ÿ<> <C5B8> (<28> <> <EFBFBD> <EFBFBD> /<2F> ı <EFBFBD> ....)
int nPrefixSkillType = hSkill - > GetPrefixSkillType ( ) ;
PREFIX_SKILL_INFO : : iterator findIter = m_PrefixOffenceSkills . find ( nPrefixSkillType ) ;
//<2F> <> <EFBFBD> <EFBFBD> ī<> װ<EFBFBD> <D7B0> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4>
if ( findIter ! = m_PrefixOffenceSkills . end ( ) )
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> λ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> ü<EFBFBD> <C3BC> <20> <> ų<EFBFBD> <C5B3> <20> ߰<EFBFBD> <20> ϰ<EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
findIter - > second - > AddSkill ( hSkill ) ;
}
else
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϵ<EFBFBD> <20> <> <EFBFBD> λ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
CDnPrefixSkill * pPrefixSkill = new CDnPrefixSkill ( nPrefixSkillType ) ;
pPrefixSkill - > AddSkill ( hSkill ) ;
m_PrefixOffenceSkills . insert ( make_pair ( nPrefixSkillType , pPrefixSkill ) ) ;
}
}
void MASkillUser : : RemovePrefixOffenceSkill ( DnSkillHandle hSkill )
{
//<2F> <> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> λ<EFBFBD> <20> <> ų Ÿ<> <C5B8> (<28> <> <EFBFBD> <EFBFBD> /<2F> ı <EFBFBD> ....)
int nPrefixSkillType = hSkill - > GetPrefixSkillType ( ) ;
PREFIX_SKILL_INFO : : iterator findIter = m_PrefixOffenceSkills . find ( nPrefixSkillType ) ;
//<2F> <> <EFBFBD> <EFBFBD> ī<> װ<EFBFBD> <D7B0> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4>
if ( findIter ! = m_PrefixOffenceSkills . end ( ) )
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> λ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> ü<EFBFBD> <C3BC> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
findIter - > second - > RemoveSkill ( hSkill ) ;
//<2F> <> <EFBFBD> ϵ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
if ( findIter - > second - > GetSkillCount ( ) = = 0 )
{
RemoveProcessPrefixOffenceSkill ( findIter - > second ) ;
SAFE_DELETE ( findIter - > second ) ;
m_PrefixOffenceSkills . erase ( findIter ) ;
}
}
}
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> (<28> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ӿ<EFBFBD> <D3BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ̷<EFBFBD> <CCB7> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ѵ <EFBFBD> ..) <20> <> <EFBFBD> ݿ<EFBFBD> <20> <> <EFBFBD> ̻<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> ɶ<EFBFBD>
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> ̻<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
void MASkillUser : : RemoveProcessPrefixOffenceSkill ( CDnPrefixSkill * pRemovePrefixSkill )
{
if ( NULL = = pRemovePrefixSkill )
return ;
list < CDnPrefixSkill * > : : iterator iter = m_ProcessPrefixOffenceSkills . begin ( ) ;
for ( ; iter ! = m_ProcessPrefixOffenceSkills . end ( ) ; )
{
CDnPrefixSkill * pPrefixSkill = ( * iter ) ;
if ( pPrefixSkill & & pPrefixSkill = = pRemovePrefixSkill )
{
iter = m_ProcessPrefixOffenceSkills . erase ( iter ) ;
continue ;
}
+ + iter ;
}
}
void MASkillUser : : ProcessPrefixOffenceSkill_New ( )
{
//<2F> <> <EFBFBD> ξ<EFBFBD> <20> ý<EFBFBD> <C3BD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ϵ<EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴٸ<CAB4>
if ( m_PrefixOffenceSkills . empty ( ) )
return ;
//<2F> <> <EFBFBD> λ<EFBFBD> <20> <> ų <20> ߵ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
m_ProcessPrefixOffenceSkills . clear ( ) ;
//<2F> <> <EFBFBD> λ<EFBFBD> <20> <> ų <20> ߵ <EFBFBD> Ȯ<> <C8AE> <20> <> <EFBFBD> <EFBFBD> ..
PREFIX_SKILL_INFO : : iterator iter = m_PrefixOffenceSkills . begin ( ) ;
PREFIX_SKILL_INFO : : iterator endIter = m_PrefixOffenceSkills . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
CDnPrefixSkill * pPrefixSkill = iter - > second ;
if ( ! pPrefixSkill )
continue ;
//<2F> <> <EFBFBD> λ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <EFBFBD> Ѵ <EFBFBD> ..(<28> <> <EFBFBD> <EFBFBD> /<2F> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȴ<EFBFBD> ??)
if ( m_PrefixSkillCoolTimeManager . IsCoolTime ( pPrefixSkill - > GetSkillType ( ) ) )
{
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų(%d) <20> <> Ÿ<EFBFBD> <C5B8> <20> <> !!!!!!!!!!\n " , pPrefixSkill - > GetSkillType ( ) ) ;
continue ;
}
//<2F> <> <EFBFBD> λ<EFBFBD> <20> <> ų <20> ߵ <EFBFBD> Ȯ<> <C8AE> Ȯ<> <C8AE> .
bool bExecuteable = rand ( ) % 10000 < = pPrefixSkill - > GetProbability ( ) ;
if ( ! bExecuteable )
{
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų(%d) Ȯ<> <C8AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> ...!!!!\n " , pPrefixSkill - > GetSkillType ( ) ) ;
continue ;
}
//<2F> <> ǥ <20> <> ų
DnSkillHandle hSkill = pPrefixSkill - > GetSkillHandle ( ) ;
if ( ! hSkill )
continue ;
//Skill <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> ?
hSkill - > OnBeginCoolTime ( ) ;
m_PrefixSkillCoolTimeManager . AddCoolTime ( pPrefixSkill ) ;
int nStateEffectCount = pPrefixSkill - > GetStateEffectCount ( ) ;
// <20> ش<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ߺ <EFBFBD> ó<> <C3B3> Ȯ<> <C8AE> <EFBFBD> ϰ<EFBFBD> ,
// <20> <> <EFBFBD> ͺ <EFBFBD> <CDBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ؾ<EFBFBD> <20> ҵ<EFBFBD> <20> ѵ <EFBFBD> ...
for ( int k = 0 ; k < pPrefixSkill - > GetStateEffectCount ( ) ; k + + )
{
CDnSkill : : StateEffectStruct * pLocalStruct = pPrefixSkill - > GetStateEffectFromIndex ( k ) ;
DnActorHandle hApplyActor ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> Ÿ<> Կ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
switch ( pLocalStruct - > ApplyType )
{
case CDnSkill : : ApplySelf : // <20> ڽ<EFBFBD> <DABD> <EFBFBD> <EFBFBD> <EFBFBD>
hApplyActor = m_pActor - > GetActorHandle ( ) ;
break ;
case CDnSkill : : ApplyTarget : // Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
continue ;
case CDnSkill : : ApplyEnemy : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̴<EFBFBD> ..)
continue ;
break ;
case CDnSkill : : ApplyFriend : // <20> <> <EFBFBD> <EFBFBD> <20> <> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ..?)
continue ;
break ;
}
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> 0<> ̰<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> Ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD>
// <20> <> ų<EFBFBD> <C5B3> m_vlApplyNoPacketStateEffectList<73> <74> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> ...[2011/01/13 semozz]
bool isSelfPermentStateEffect = false ;
if ( CDnSkill : : ApplySelf = = pLocalStruct - > ApplyType & &
( 0 = = pLocalStruct - > nDurationTime | |
- 1 = = pLocalStruct - > nDurationTime ) )
{
pLocalStruct - > nDurationTime = - 1 ;
isSelfPermentStateEffect = true ;
}
CDnStateBlow * pStateBlow = hApplyActor - > GetStateBlow ( ) ;
CDnSkill : : CanApply eResult = CDnSkill : : CanApply : : Apply ;
if ( pStateBlow )
eResult = pStateBlow - > CanApplySkillStateEffect ( hSkill - > GetInfo ( ) , * pLocalStruct ) ;
if ( CDnSkill : : CanApply : : Fail ! = eResult )
{
hApplyActor - > RemoveResetStateBlow ( ) ;
int nBlowID = hApplyActor - > CmdAddStateEffect ( hSkill - > GetInfo ( ) , ( STATE_BLOW : : emBLOW_INDEX ) pLocalStruct - > nID ,
pLocalStruct - > nDurationTime , pLocalStruct - > szValue . c_str ( ) , false , false ) ;
//
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų(%d) <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ڽ<EFBFBD> <DABD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> (%d)-(%s)\n " , pPrefixSkill - > GetSkillType ( ) , pLocalStruct - > nID , pLocalStruct - > szValue . c_str ( ) ) ;
if ( isSelfPermentStateEffect )
hSkill - > AddPrefixBlow ( hApplyActor , nBlowID ) ;
}
hApplyActor - > InitStateBlowIDToRemove ( ) ;
}
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> ..
m_listProcessPreFixOffenceSkills . push_back ( hSkill ) ;
//<2F> <> <EFBFBD> <EFBFBD> <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <20> <> <EFBFBD> ݿ<EFBFBD> <20> <> <EFBFBD> λ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> .
m_ProcessPrefixOffenceSkills . push_back ( pPrefixSkill ) ;
}
}
void MASkillUser : : ApplyPrefixOffenceSkillToTarget_New ( DnActorHandle hTarget )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ߿<EFBFBD> <DFBF> <EFBFBD> <20> 켱<EFBFBD> <ECBCB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( m_ProcessPrefixOffenceSkills . empty ( ) )
return ;
list < CDnPrefixSkill * > : : iterator iter = m_ProcessPrefixOffenceSkills . begin ( ) ;
list < CDnPrefixSkill * > : : iterator endIter = m_ProcessPrefixOffenceSkills . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
CDnPrefixSkill * pPrefixSkill = ( * iter ) ;
if ( ! pPrefixSkill )
continue ;
DnSkillHandle hSkill = pPrefixSkill - > GetSkillHandle ( ) ;
if ( ! hSkill )
continue ;
int nStateEffectCount = pPrefixSkill - > GetStateEffectCount ( ) ;
// <20> ش<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ߺ <EFBFBD> ó<> <C3B3> Ȯ<> <C8AE> <EFBFBD> ϰ<EFBFBD> ,
// <20> <> <EFBFBD> ͺ <EFBFBD> <CDBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ؾ<EFBFBD> <20> ҵ<EFBFBD> <20> ѵ <EFBFBD> ...
for ( int k = 0 ; k < pPrefixSkill - > GetStateEffectCount ( ) ; k + + )
{
CDnSkill : : StateEffectStruct * pLocalStruct = pPrefixSkill - > GetStateEffectFromIndex ( k ) ;
DnActorHandle hApplyActor ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> Ÿ<> Կ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
switch ( pLocalStruct - > ApplyType )
{
case CDnSkill : : ApplySelf : // <20> ڽ<EFBFBD> <DABD> <EFBFBD> <EFBFBD> <EFBFBD>
continue ;
case CDnSkill : : ApplyTarget : // Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
hApplyActor = hTarget ;
break ;
case CDnSkill : : ApplyEnemy : // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̴<EFBFBD> ..)
if ( m_pActor - > GetTeam ( ) = = hTarget - > GetTeam ( ) )
continue ;
else
hApplyActor = hTarget ;
break ;
case CDnSkill : : ApplyFriend : // <20> <> <EFBFBD> <EFBFBD> <20> <> .. (<28> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̸<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ..?)
if ( m_pActor - > GetTeam ( ) ! = hTarget - > GetTeam ( ) )
continue ;
else
hApplyActor = hTarget ;
break ;
}
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> 0<> ̰<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> Ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD>
// <20> <> ų<EFBFBD> <C5B3> m_vlApplyNoPacketStateEffectList<73> <74> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> ...[2011/01/13 semozz]
bool isSelfPermentStateEffect = false ;
if ( CDnSkill : : ApplySelf = = pLocalStruct - > ApplyType & &
( 0 = = pLocalStruct - > nDurationTime | |
- 1 = = pLocalStruct - > nDurationTime ) )
{
pLocalStruct - > nDurationTime = - 1 ;
isSelfPermentStateEffect = true ;
}
CDnStateBlow * pStateBlow = hApplyActor - > GetStateBlow ( ) ;
CDnSkill : : CanApply eResult = CDnSkill : : CanApply : : Apply ;
if ( pStateBlow )
eResult = pStateBlow - > CanApplySkillStateEffect ( hSkill - > GetInfo ( ) , * pLocalStruct ) ;
if ( CDnSkill : : CanApply : : Fail ! = eResult )
{
hApplyActor - > RemoveResetStateBlow ( ) ;
int nBlowID = hApplyActor - > CmdAddStateEffect ( hSkill - > GetInfo ( ) , ( STATE_BLOW : : emBLOW_INDEX ) pLocalStruct - > nID ,
pLocalStruct - > nDurationTime , pLocalStruct - > szValue . c_str ( ) , false , false ) ;
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų(%d) <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> 뿡 <20> <> <EFBFBD> <EFBFBD> (%d)-(%s)\n " , pPrefixSkill - > GetSkillType ( ) , pLocalStruct - > nID , pLocalStruct - > szValue . c_str ( ) ) ;
if ( isSelfPermentStateEffect )
hSkill - > AddPrefixBlow ( hApplyActor , nBlowID ) ;
}
hApplyActor - > InitStateBlowIDToRemove ( ) ;
}
}
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ǽ<EFBFBD> <20> ڵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ..
m_ProcessPrefixOffenceSkills . clear ( ) ;
}
# endif // _GAMESERVER
# endif // PRE_ADD_PREFIX_SYSTE_RENEW
void MASkillUser : : SkillToggle ( DnSkillHandle hSkill , bool isOn )
{
if ( ! hSkill ) return ;
# if defined(_CLIENT)
CDnSkill : : DurationTypeEnum eDurationType = hSkill - > GetDurationType ( ) ;
if ( eDurationType = = CDnSkill : : DurationTypeEnum : : SummonOnOff )
{
hSkill - > SummonMonsterOff ( ) ;
}
# endif // _CLIENT
int skillID = hSkill - > GetClassID ( ) ;
TOGGLESKILLLIST : : iterator findIter = m_ToggleOnSkillList . find ( skillID ) ;
if ( isOn )
{
//<2F> ̹<EFBFBD> <20> <> ų <20> <> <EFBFBD> ϵǾ<CFB5> <20> <> <EFBFBD> <EFBFBD> ..
if ( findIter ! = m_ToggleOnSkillList . end ( ) )
return ;
m_ToggleOnSkillList . insert ( std : : make_pair ( skillID , hSkill ) ) ;
}
else
{
//<2F> <> <EFBFBD> ϵ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> ٸ<EFBFBD>
if ( findIter = = m_ToggleOnSkillList . end ( ) )
return ;
m_ToggleOnSkillList . erase ( findIter ) ;
}
}
void MASkillUser : : SummonOnOffSkillInit ( DWORD dwSummonMonsterID )
{
DNVector ( DnSkillHandle ) summonOnOffSkills ;
# if defined(PRE_FIX_SKILLLIST)
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; i + + )
{
DnSkillHandle hSkill = m_vlSkillObjects [ i ] . hSkill ;
if ( hSkill & & hSkill - > GetDurationType ( ) = = CDnSkill : : DurationTypeEnum : : SummonOnOff )
summonOnOffSkills . push_back ( hSkill ) ;
}
# endif // PRE_FIX_SKILLLIST
for ( DWORD i = 0 ; i < summonOnOffSkills . size ( ) ; + + i )
{
DnSkillHandle hSkill = summonOnOffSkills [ i ] ;
if ( hSkill & & hSkill - > GetSummonMonsterID ( ) = = dwSummonMonsterID )
hSkill - > EnableToggle ( false ) ;
}
}
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
void MASkillUser : : UpdateGlobalCoolTime ( float fRate )
{
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
if ( m_vlSkillObjects . at ( i ) . hSkill )
m_vlSkillObjects . at ( i ) . hSkill - > UpdateGlobalCoolTime ( fRate ) ;
}
}
void MASkillUser : : ResetGlobalCoolTime ( float fRate )
{
for ( DWORD i = 0 ; i < m_vlSkillObjects . size ( ) ; + + i )
{
if ( m_vlSkillObjects . at ( i ) . hSkill )
m_vlSkillObjects . at ( i ) . hSkill - > ResetGlobalCoolTime ( fRate ) ;
}
}
# endif // PRE_ADD_TOTAL_LEVEL_SKILL