2024-12-21 10:04:04 +08:00
# include "StdAfx.h"
# include "DnSkill.h"
# include "DnTableDB.h"
# include "DnItemTask.h"
# include "IDnSkillUsableChecker.h"
# include "IDnSkillProcessor.h"
# include "DnDivideSEArgumentByTargets.h"
# include "DnPlayerActor.h"
# include "DnBlow.h"
# include "TaskManager.h"
# include "DnPartyTask.h"
# include "DNUserSession.h"
# include "DnPlayAniProcess.h"
# include "DnPartialPlayProcessor.h"
# include "DnApplySEWhenActionSetBlowEnabledProcessor.h"
# include "DnChangeActionStrProcessor.h"
# include "DnChangeActionStrByBubbleProcessor.h"
# include "DnStateEffectApplyOnOffByBubbleProcessor.h"
# include "DnStateBlow.h"
# include "DnBubbleSystem.h"
# include "DnObserverEventMessage.h"
# include "DnPingpongBlow.h"
# include "DnBasicBlow.h"
# include "DnHealingBlow.h"
# include "DnHPIncBlow.h"
# include "DnInvincibleAtBlow.h"
# include "DnProbabilityChecker.h"
# include "DnCreateBlow.h"
# include "DnAllowedSkillsBlow.h"
# include "DnMonsterActor.h"
# include "DnProjectile.h"
# include "DnAdditionalStateInfoBlow.h"
# include "DnAddStateBySkillGroupBlow.h"
# include "DnTransformBlow.h"
# include "DnBloodSuckingBlow.h"
# include "DnOrderMySummonedMonsterBlow.h"
# if defined(PRE_FIX_NEXTSKILLINFO)
# include "DNGameDataManager.h"
# endif // PRE_FIX_NEXTSKILLINFO
# if defined(PRE_FIX_46381)
# include "DnContinueBaseMPIncBlow.h"
# endif // PRE_FIX_46381
using namespace BubbleSystem ;
using namespace boost ;
DECL_MULTISMART_PTR_STATIC ( CDnSkill , MAX_SESSION_COUNT , 100 )
CDnSkill : : CDnSkill ( DnActorHandle hActor ) : CMultiSmartPtrBase < CDnSkill , MAX_SESSION_COUNT > ( hActor - > GetRoom ( ) ) ,
m_hActor ( hActor ) ,
m_LastTimeToggleMPDecreaseTime ( 0 ) ,
m_bToggle ( false ) ,
m_bAura ( false ) ,
m_bItemSkill ( false ) ,
m_fPassiveActionSkillLength ( 0.0f ) ,
m_eElement ( CDnState : : ElementEnum_Amount ) ,
m_iNextLevelSkillPoint ( - 1 ) ,
m_bChainingPassiveSkill ( false ) ,
m_bAppliedPassiveSelfBlows ( false ) ,
m_bTempSkill ( false )
{
SecureZeroMemory ( m_iNeedItemID , sizeof ( m_iNeedItemID ) ) ;
SecureZeroMemory ( m_iNeedItemDecreaseCount , sizeof ( m_iNeedItemDecreaseCount ) ) ;
SecureZeroMemory ( m_fHPConsumeType , sizeof ( m_fHPConsumeType ) ) ;
SecureZeroMemory ( m_fMPConsumeType , sizeof ( m_fMPConsumeType ) ) ;
SecureZeroMemory ( m_iNeedHP , sizeof ( m_iNeedHP ) ) ;
SecureZeroMemory ( m_iNeedMP , sizeof ( m_iNeedMP ) ) ;
SecureZeroMemory ( m_iIncreaseRange , sizeof ( m_iIncreaseRange ) ) ;
SecureZeroMemory ( m_iDecreaseHP , sizeof ( m_iDecreaseHP ) ) ;
SecureZeroMemory ( m_iDecreaseMP , sizeof ( m_iDecreaseMP ) ) ;
SecureZeroMemory ( m_fOriginalDelayTime , sizeof ( m_fOriginalDelayTime ) ) ;
SecureZeroMemory ( m_fDelayTime , sizeof ( m_fDelayTime ) ) ;
m_iSkillID = 0 ;
m_iSkillLevelID = 0 ;
m_iDissolvable = 0 ;
m_iDuplicateCount = 0 ;
m_iSkillDuplicateMethod = 0 ;
m_iEffectDuplicateMethod = 0 ;
m_iLevel = 0 ;
m_iMaxLevel = 0 ;
m_eSkillType = SkillTypeEnum : : Active ;
m_eDurationType = DurationTypeEnum : : Instantly ;
m_eTargetType = TargetTypeEnum : : Self ;
m_iLevelLimit = 0 ;
m_fLeftDelayTime = 0.f ;
m_fCoolTime = 0.f ;
m_iAdditionalThreat = 0 ;
m_iCPScore = 0 ;
m_pEffectAction = NULL ;
m_fOnceDelayTime = 0.0f ;
m_fOnceElapsedDelayTime = 0.0f ;
m_bEquipItemSkill = false ;
m_iEquipIndex = - 1 ;
m_fCoolTimeAdjustBlowValue = 1.0f ;
m_fStartSuperArmor = 0.0f ;
m_bStartCanHit = true ;
m_fResetCooltime = 0.0f ;
m_dwLastUseSkillTimeStamp = 0 ;
m_iExclusiveID = 0 ;
m_iSelectedSkillLevelDataApplyType = PVE ; // <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> pve <20> ̴<EFBFBD> .
m_iBaseSkillID = 0 ;
m_iAppliedEnchantPassiveSkillID = 0 ;
m_nPriority = 0 ;
m_nItemID = - 1 ;
m_fCoolTimeMultipier = 1.0f ;
m_isIgnoreImmuneBackup = false ;
m_nLevelUpValue = 0 ;
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
m_nPrefixSkillType = - 1 ;
# endif // PRE_ADD_PREFIX_SYSTE_RENEW
m_iGlobalSkillGroupID = 0 ;
SecureZeroMemory ( m_afGlobalCoolTime , sizeof ( m_afGlobalCoolTime ) ) ;
m_fAnotherGlobalSkillCoolTime = 0.0f ;
m_nAnotherGlobakSkillID = 0 ;
# if defined( PRE_ADD_ACADEMIC )
m_iSummonerDecreaseSP = 0 ;
m_iSummonerDecreaseSPSkillID = 0 ;
# endif // #if defined( PRE_ADD_ACADEMIC )
m_SummonMonsterID = - 1 ;
m_bAddStateEffectQueue = false ;
m_bEnchantedFromBubble = false ;
m_SkillStartTime = 0 ;
m_bFinished = false ;
m_bIsPrefixTriggerSkill = false ;
m_iNeedJobClassID = 0 ;
m_iNowLevelSkillPoint = 0 ;
memset ( m_iOriginalNeedMP , 0x00 , sizeof ( m_iOriginalNeedMP ) ) ;
memset ( m_aeNeedEquipType , 0x00 , sizeof ( m_aeNeedEquipType ) ) ;
# if defined(PRE_FIX_64312)
m_isAppliedSummonMonsterEnchantSkill = false ;
m_bIsSummonMonsterSkill = false ;
# endif // PRE_FIX_64312
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
m_fDeltaGlobalCoolTime = 0.0f ;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
}
CDnSkill : : ~ CDnSkill ( void )
{
for ( int iSelectedLevelData = PVE ; iSelectedLevelData < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSelectedLevelData )
{
SAFE_DELETE_PVEC ( m_vlpUsableCheckers [ iSelectedLevelData ] ) ;
}
for ( int iSelectedLevelData = PVE ; iSelectedLevelData < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSelectedLevelData )
{
SAFE_DELETE_PVEC ( m_vlpProcessors [ iSelectedLevelData ] ) ;
}
for ( int iSelectedLevelData = PVE ; iSelectedLevelData < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSelectedLevelData )
{
SAFE_DELETE_PVEC ( m_vlpProcessorBackup [ iSelectedLevelData ] ) ;
}
# if defined(PRE_FIX_66175)
for ( int iSelectedLevelData = PVE ; iSelectedLevelData < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSelectedLevelData )
{
SAFE_DELETE_PVEC ( m_vlUsableCheckersBackup [ iSelectedLevelData ] ) ;
}
# endif // PRE_FIX_66175
}
void CDnSkill : : SetHasActor ( DnActorHandle hActor )
{
_ASSERT ( hActor & & " CDnSkill::SetHasActor() <20> <> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> <DAB5> <EFBFBD> NULL <20> <> " ) ;
m_hActor = hActor ;
for ( int iSelectedLevelData = PVE ; iSelectedLevelData < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSelectedLevelData )
{
int iNumChecker = ( int ) m_vlpUsableCheckers [ iSelectedLevelData ] . size ( ) ;
for ( int iChecker = 0 ; iChecker < iNumChecker ; + + iChecker )
{
IDnSkillUsableChecker * pChecker = m_vlpUsableCheckers [ iSelectedLevelData ] . at ( iChecker ) ;
pChecker - > SetHasActor ( hActor ) ;
}
}
for ( int iSelectedLevelData = PVE ; iSelectedLevelData < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSelectedLevelData )
{
int iNumProcessor = ( int ) m_vlpProcessors [ iSelectedLevelData ] . size ( ) ;
for ( int iProcessor = 0 ; iProcessor < iNumProcessor ; + + iProcessor )
{
IDnSkillProcessor * pProcessor = m_vlpProcessors [ iSelectedLevelData ] . at ( iProcessor ) ;
pProcessor - > SetHasActor ( hActor ) ;
pProcessor - > SetParentSkill ( GetMySmartPtr ( ) ) ;
}
}
}
DnSkillHandle CDnSkill : : CreateSkill ( DnActorHandle hActor , int iSkillTableID , int iLevel )
{
CDnSkill * pNewSkill = NULL ;
// <20> <> ų <20> ߵ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> ߵ <EFBFBD> <20> <> <EFBFBD> μ<EFBFBD> <CEBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <DEBE> ش<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> 5<> <35> <EFBFBD> <EFBFBD> <20> ְ<EFBFBD> <20> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 10<31> <30> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ɼ<EFBFBD> <C9BC> <EFBFBD> <20> ִ<EFBFBD> .
pNewSkill = new CDnSkill ( hActor ) ;
bool bResult = pNewSkill - > Initialize ( iSkillTableID , iLevel ) ;
if ( false = = bResult )
{
delete pNewSkill ;
return CDnSkill : : Identity ( ) ;
}
if ( hActor & & hActor - > IsPlayerActor ( ) )
{
CDnPlayerActor * pPlayerActor = static_cast < CDnPlayerActor * > ( hActor . GetPointer ( ) ) ;
pNewSkill - > RegisterObserver ( pPlayerActor - > GetBubbleSystem ( ) ) ;
}
return pNewSkill - > GetMySmartPtr ( ) ;
}
# ifdef PRE_FIX_GAMESERVER_OPTIMIZE
bool CDnSkill : : _LoadMonsterSkillLevelData ( int iSkillTableID , int iLevel , int iSkillLevelDataApplyType )
{
DNTableFileFormat * pSkillTable = GetDNTable ( CDnTableDB : : TSKILL ) ;
DNTableFileFormat * pSkillLevelTable = GetDNTable ( CDnTableDB : : TSKILLLEVEL ) ;
vector < int > vlSkillLevelList ;
if ( pSkillLevelTable - > GetItemIDListFromField ( " _SkillIndex " , iSkillTableID , vlSkillLevelList ) < = 0 )
return false ;
if ( ! pSkillTable - > IsExistItem ( iSkillTableID ) )
return false ;
// pve, pvp <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <EFBFBD> Ͽ<EFBFBD> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> .
vector < int > : : iterator iterLevelList = vlSkillLevelList . begin ( ) ;
for ( iterLevelList ; iterLevelList ! = vlSkillLevelList . end ( ) ; )
{
int iSkillLevelTableID = * iterLevelList ;
int iApplyType = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _ApplyType " ) - > GetInteger ( ) ;
if ( iApplyType ! = iSkillLevelDataApplyType )
iterLevelList = vlSkillLevelList . erase ( iterLevelList ) ;
else
+ + iterLevelList ;
}
// <20> ش<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 쿣 <20> ׳ <EFBFBD> <20> ƹ<EFBFBD> <C6B9> ͵<EFBFBD> <20> <> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϸ<EFBFBD> <20> ȴ<EFBFBD> .
if ( vlSkillLevelList . empty ( ) )
return true ;
int iSkillLevelTableID = - 1 ;
for ( int i = 0 ; i < ( int ) vlSkillLevelList . size ( ) ; + + i )
{
int iNowLevel = pSkillLevelTable - > GetFieldFromLablePtr ( vlSkillLevelList . at ( i ) , " _SkillLevel " ) - > GetInteger ( ) ;
if ( iNowLevel = = iLevel )
{
iSkillLevelTableID = vlSkillLevelList . at ( i ) ;
break ;
}
}
if ( - 1 = = iSkillLevelTableID )
return false ;
char caLabel [ 32 ] ;
int iCheckerParamOffset = 0 ;
int iProcessorParamOffset = 0 ;
for ( int i = 0 ; i < MAX_PROCESSOR_COUNT ; + + i )
{
// <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ü <20> ̸<EFBFBD> <CCB8> <EFBFBD> ã<> ´ <EFBFBD> . <20> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʵ尡 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Լ<EFBFBD> <D4BC> 鿡<EFBFBD> <E9BFA1> NULL <20> <> <EFBFBD> ϵ<EFBFBD>
sprintf_s ( caLabel , " _UsableChecker%d " , i + 1 ) ;
int iUsableChecker = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , caLabel ) - > GetInteger ( ) ;
sprintf_s ( caLabel , " _Processor%d " , i + 1 ) ;
int iProcessor = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , caLabel ) - > GetInteger ( ) ;
int iOffsetCheck = iCheckerParamOffset ;
IDnSkillUsableChecker * pUsableChecker = IDnSkillUsableChecker : : Create ( m_hActor , iUsableChecker , iSkillLevelTableID , & iCheckerParamOffset ) ;
if ( NULL ! = pUsableChecker )
{
if ( ( iCheckerParamOffset - iOffsetCheck ) ! = pUsableChecker - > GetNumArgument ( ) )
{
OutputDebug ( " [SkillLevelTable Error!] %d <20> <> <20> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߸<EFBFBD> <DFB8> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> ϴ<EFBFBD> . \n " , iSkillLevelTableID ) ;
_ASSERT ( ! " <EFBFBD> <EFBFBD> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <20> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߸<EFBFBD> <DFB8> <EFBFBD> . OutputDebug <20> <> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> !" ) ;
}
this - > AddUsableCheckers ( pUsableChecker , iSkillLevelDataApplyType ) ;
}
iOffsetCheck = iProcessorParamOffset ;
IDnSkillProcessor * pSkillProcessor = IDnSkillProcessor : : Create ( m_hActor , iProcessor , iSkillLevelTableID , & iProcessorParamOffset , this - > GetUseActionNames ( ) ) ;
if ( NULL ! = pSkillProcessor )
{
if ( ( iProcessorParamOffset - iOffsetCheck ) ! = pSkillProcessor - > GetNumArgument ( ) )
{
OutputDebug ( " [SkillLevelTable Error!] %d <20> <> <20> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߸<EFBFBD> <DFB8> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> ϴ<EFBFBD> . \n " , iSkillLevelTableID ) ;
_ASSERT ( ! " <EFBFBD> <EFBFBD> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <20> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߸<EFBFBD> <DFB8> <EFBFBD> . OutputDebug <20> <> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> !" ) ;
}
this - > AddProcessor ( pSkillProcessor , iSkillLevelDataApplyType ) ;
}
}
// skill table
m_strStaticName = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _StaticName " ) - > GetString ( ) ;
char caLable [ 64 ] ;
ZeroMemory ( caLable , sizeof ( caLable ) ) ;
for ( int i = 0 ; i < 2 ; + + i )
{
sprintf_s ( caLable , " _NeedWeaponType%d " , i + 1 ) ;
int iEquipType = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , caLable ) - > GetInteger ( ) ;
if ( - 1 ! = iEquipType )
m_aeNeedEquipType [ i ] = ( CDnWeapon : : EquipTypeEnum ) iEquipType ;
else
m_aeNeedEquipType [ i ] = CDnWeapon : : EquipTypeEnum_Amount ;
}
// <20> <> ų <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ŷ<EFBFBD> <C5B7> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> . -_-
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ.
if ( 0 = = m_iMaxLevel )
{
m_iMaxLevel = ( int ) vlSkillLevelList . size ( ) ;
}
else
{
_ASSERT ( m_iMaxLevel = = ( int ) vlSkillLevelList . size ( ) ) ;
}
m_eSkillType = ( SkillTypeEnum ) pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _SkillType " ) - > GetInteger ( ) ;
m_eDurationType = ( DurationTypeEnum ) pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _DurationType " ) - > GetInteger ( ) ;
m_eTargetType = ( TargetTypeEnum ) pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _TargetType " ) - > GetInteger ( ) ;
m_iDissolvable = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _Dissolvable " ) - > GetInteger ( ) ;
m_iDuplicateCount = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _EffectAmassCount " ) - > GetInteger ( ) ;
m_iSkillDuplicateMethod = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _SkillDuplicate " ) - > GetInteger ( ) ;
m_iEffectDuplicateMethod = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _EffectDuplicate " ) - > GetInteger ( ) ;
m_eElement = ( CDnState : : ElementEnum ) pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _Element " ) - > GetInteger ( ) ;
m_iNeedJobClassID = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _NeedJob " ) - > GetInteger ( ) ;
if ( ( CDnState : : ElementEnum ) - 1 = = m_eElement )
m_eElement = CDnState : : ElementEnum_Amount ;
// skill level table
m_iSkillLevelID = iSkillLevelTableID ;
m_iLevel = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _SkillLevel " ) - > GetInteger ( ) ;
m_iNowLevelSkillPoint = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _NeedSkillPoint " ) - > GetInteger ( ) ;
# if defined(PRE_FIX_NEXTSKILLINFO)
SKILL_LEVEL_INFO * pTabelInfo = g_pDataManager - > GetSkillLevelTableIDList ( iSkillTableID , iSkillLevelDataApplyType ) ;
int nextSkillLevel = m_iLevel + 1 ;
if ( m_iLevel < m_iMaxLevel )
{
int nextLevelTableID = - 1 ;
SKILL_LEVEL_TABLE_IDS : : iterator findIter = pTabelInfo - > _SkillLevelTableIDs . find ( nextSkillLevel ) ;
if ( findIter ! = pTabelInfo - > _SkillLevelTableIDs . end ( ) )
nextLevelTableID = findIter - > second ;
m_iNextLevelSkillPoint = pSkillLevelTable - > GetFieldFromLablePtr ( nextLevelTableID , " _NeedSkillPoint " ) - > GetInteger ( ) ;
}
else
m_iNextLevelSkillPoint = 0 ;
# else
if ( m_iLevel < m_iMaxLevel )
m_iNextLevelSkillPoint = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID + 1 , " _NeedSkillPoint " ) - > GetInteger ( ) ;
else
m_iNextLevelSkillPoint = 0 ;
# endif // PRE_FIX_NEXTSKILLINFO
m_iIncreaseRange [ iSkillLevelDataApplyType ] = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _AddRange " ) - > GetInteger ( ) ;
m_iAdditionalThreat = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _AddThreat " ) - > GetInteger ( ) ;
m_iCPScore = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _CPScore " ) - > GetInteger ( ) ;
m_fStartSuperArmor = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _StartSuperArmor " ) - > GetFloat ( ) ;
m_bStartCanHit = ( pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _StartCanHit " ) - > GetInteger ( ) = = 1 ) ? true : false ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD>
StateEffectStruct StateEffect ;
for ( int i = 0 ; i < MAX_STATE_EFFECT_COUNT ; + + i )
{
sprintf_s ( caLable , " _EffectClass%d " , i + 1 ) ;
StateEffect . nID = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , caLable ) - > GetInteger ( ) ;
if ( StateEffect . nID < 1 )
continue ;
sprintf_s ( caLable , " _EffectClass%dApplyType " , i + 1 ) ;
int iApplyType = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , caLable ) - > GetInteger ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . Ÿ<> ٸ<EFBFBD> <20> ٸ<EFBFBD> <D9B8> <EFBFBD> <20> ؼ<EFBFBD> <20> Ȱ<EFBFBD> <C8B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> 2<> <32> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> ش<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȭ <20> нú<D0BD> <C3BA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> 2<> <32> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> ׳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> ٸ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> ȭ<EFBFBD> <C8AD> Ű<EFBFBD> <C5B0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ҹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
bool bApplyAll = ( StateEffectApplyType : : ApplyAll = = iApplyType ) & & ( SkillTypeEnum : : EnchantPassive ! = m_eSkillType ) ;
if ( bApplyAll )
StateEffect . ApplyType = StateEffectApplyType : : ApplySelf ;
else
StateEffect . ApplyType = ( StateEffectApplyType ) iApplyType ;
sprintf_s ( caLable , " _EffectClassValue%d " , i + 1 ) ;
StateEffect . szValue = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , caLable ) - > GetString ( ) ;
sprintf_s ( caLable , " _EffectClassValue%dDuration " , i + 1 ) ;
StateEffect . nDurationTime = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , caLable ) - > GetInteger ( ) ;
m_vlStateEffectList [ iSkillLevelDataApplyType ] . push_back ( StateEffect ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̸<EFBFBD> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٲ㼭 <20> Ȱ<EFBFBD> <C8B0> <EFBFBD> <20> <> <20> <> <20> <> <20> ־<EFBFBD> <D6BE> <EFBFBD> .
if ( bApplyAll )
{
StateEffect . ApplyType = StateEffectApplyType : : ApplyTarget ;
m_vlStateEffectList [ iSkillLevelDataApplyType ] . push_back ( StateEffect ) ;
}
}
SkillInfo & MySkillInfo = m_SkillInfo [ iSkillLevelDataApplyType ] ;
MySkillInfo . iSkillID = m_iSkillID ;
MySkillInfo . iSkillLevelID = m_iSkillLevelID ;
MySkillInfo . iLevel = m_iLevel ;
MySkillInfo . iSkillDuplicateMethod = m_iSkillDuplicateMethod ;
MySkillInfo . iDuplicateCount = m_iDuplicateCount ;
MySkillInfo . eSkillType = m_eSkillType ;
MySkillInfo . eDurationType = m_eDurationType ;
MySkillInfo . eTargetType = m_eTargetType ;
MySkillInfo . eApplyType = StateEffect . ApplyType ;
MySkillInfo . iDissolvable = m_iDissolvable ;
MySkillInfo . eSkillElement = m_eElement ;
MySkillInfo . hSkillUser = m_hActor ; // Note: <20> <> <EFBFBD> Ͱ<EFBFBD> <20> <EFBFBD> <20> <> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ƴ<EFBFBD>
if ( m_hActor )
MySkillInfo . iSkillUserTeam = m_hActor - > GetTeam ( ) ;
if ( m_hActor & & _tcslen ( m_hActor - > GetName ( ) ) > 0 )
MySkillInfo . strUserName = m_hActor - > GetName ( ) ;
MySkillInfo . szEffectOutputIDs = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _StateEffectTableID " ) - > GetString ( ) ;
return true ;
}
bool CDnSkill : : InitializeMonsterSkill ( int iSkillTableID , int iLevel )
{
m_iSkillID = iSkillTableID ;
// <20> <> <20> <> <EFBFBD> 庰<EFBFBD> <E5BAB0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> . <20> <> <EFBFBD> <EFBFBD> PVP <20> <> <20> д´ <D0B4> .
// PVE <20> <> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> ̱<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 庰<EFBFBD> <E5BAB0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ä<> <C3A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȴ<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> Լ<EFBFBD> <D4BC> ̹Ƿ<CCB9> PVE <20> <> ȣ <> <C8A3> .
if ( false = = _LoadSkillLevelData ( iSkillTableID , iLevel , PVP ) )
return false ;
if ( false = = _LoadSkillLevelData ( iSkillTableID , iLevel , PVE ) )
return false ;
int iNumProcessor = ( int ) m_vlpProcessors [ PVE ] . size ( ) ;
for ( int iProcessor = 0 ; iProcessor < iNumProcessor ; + + iProcessor )
{
IDnSkillProcessor * pProcessor = m_vlpProcessors [ PVE ] . at ( iProcessor ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ܺο <DCBA> <CEBF> <EFBFBD> <20> <> ȸ<EFBFBD> <C8B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ä<> <C3A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( pProcessor - > GetType ( ) = = IDnSkillProcessor : : PLAY_ANI )
m_setUseActionNames . insert ( static_cast < CDnPlayAniProcess * > ( pProcessor ) - > GetActionName ( ) ) ;
else
if ( pProcessor - > GetType ( ) = = IDnSkillProcessor : : PARTIAL_PLAY_ANI )
{
CDnPartialPlayProcessor * pPartialPlayAni = static_cast < CDnPartialPlayProcessor * > ( pProcessor ) ;
m_setUseActionNames . insert ( pPartialPlayAni - > GetStartActionName ( ) ) ;
m_setUseActionNames . insert ( pPartialPlayAni - > GetLoopActionName ( ) ) ;
m_setUseActionNames . insert ( pPartialPlayAni - > GetEndActionName ( ) ) ;
}
}
// <20> ʱ<EFBFBD> ȭ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> pve <20> <> <EFBFBD> 尡 <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> .
m_iSelectedSkillLevelDataApplyType = PVE ;
return true ;
}
DnSkillHandle CDnSkill : : CreateMonsterSkill ( DnActorHandle hActor , int iSkillTableID , int iLevel )
{
if ( hActor )
{
CDnSkill * pNewSkill = pNewSkill = new CDnSkill ( hActor ) ;
if ( pNewSkill )
{
bool bResult = pNewSkill - > InitializeMonsterSkill ( iSkillTableID , iLevel ) ;
if ( false = = bResult )
{
SAFE_DELETE ( pNewSkill ) ;
return CDnSkill : : Identity ( ) ;
}
if ( hActor - > IsPlayerActor ( ) )
{
CDnPlayerActor * pPlayerActor = static_cast < CDnPlayerActor * > ( hActor . GetPointer ( ) ) ;
pNewSkill - > RegisterObserver ( pPlayerActor - > GetBubbleSystem ( ) ) ;
}
return pNewSkill - > GetMySmartPtr ( ) ;
}
else
{
SAFE_DELETE ( pNewSkill ) ;
return CDnSkill : : Identity ( ) ;
}
}
return CDnSkill : : Identity ( ) ;
}
# endif // #ifdef PRE_FIX_GAMESERVER_OPTIMIZE
void CDnSkill : : CreateSkillInfo ( int nSkillID , int nSkillLevel , CDnSkill : : SkillInfo & sSkillInfo , std : : vector < CDnSkill : : StateEffectStruct > & vecSkillEffect , bool bUseBattleGround /* = false*/ )
{
if ( nSkillID = = 0 | | nSkillLevel = = 0 )
return ;
DNTableFileFormat * pSkillTable = NULL ;
DNTableFileFormat * pSkillLevelTable = NULL ;
if ( bUseBattleGround )
{
pSkillTable = GetDNTable ( CDnTableDB : : TBATTLEGROUNDSKILL ) ;
pSkillLevelTable = GetDNTable ( CDnTableDB : : TBATTLEGROUNDSKILLLEVEL ) ;
}
else
{
pSkillTable = GetDNTable ( CDnTableDB : : TSKILL ) ;
pSkillLevelTable = GetDNTable ( CDnTableDB : : TSKILLLEVEL ) ;
}
if ( pSkillLevelTable = = NULL | | pSkillTable = = NULL )
{
_DANGER_POINT ( ) ;
return ;
}
std : : vector < int > vlSkillLevelList ;
if ( pSkillLevelTable - > GetItemIDListFromField ( " _SkillIndex " , nSkillID , vlSkillLevelList ) < = 0 )
return ;
int iSkillLevelTableID = - 1 ;
for ( int i = 0 ; i < ( int ) vlSkillLevelList . size ( ) ; + + i )
{
int iNowLevel = pSkillLevelTable - > GetFieldFromLablePtr ( vlSkillLevelList . at ( i ) , " _SkillLevel " ) - > GetInteger ( ) ;
if ( iNowLevel = = nSkillLevel )
{
iSkillLevelTableID = vlSkillLevelList . at ( i ) ;
break ;
}
}
if ( - 1 = = iSkillLevelTableID )
return ;
sSkillInfo . iSkillID = nSkillID ;
sSkillInfo . iSkillLevelID = iSkillLevelTableID ;
# ifdef PRE_FIX_SYNC_ENCHANT_SKILL
sSkillInfo . iAppliedEnchantSkillID = 0 ;
# endif
sSkillInfo . iLevel = nSkillLevel ;
sSkillInfo . eDurationType = ( CDnSkill : : DurationTypeEnum ) pSkillTable - > GetFieldFromLablePtr ( nSkillID , " _DurationType " ) - > GetInteger ( ) ;
sSkillInfo . eTargetType = ( CDnSkill : : TargetTypeEnum ) pSkillTable - > GetFieldFromLablePtr ( nSkillID , " _TargetType " ) - > GetInteger ( ) ;
sSkillInfo . iSkillDuplicateMethod = pSkillTable - > GetFieldFromLablePtr ( nSkillID , " _SkillDuplicate " ) - > GetInteger ( ) ;
sSkillInfo . iDuplicateCount = pSkillTable - > GetFieldFromLablePtr ( nSkillID , " _EffectAmassCount " ) - > GetInteger ( ) ;
sSkillInfo . iDissolvable = pSkillTable - > GetFieldFromLablePtr ( nSkillID , " _Dissolvable " ) - > GetInteger ( ) ;
sSkillInfo . szEffectOutputIDToClient = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _StateEffectTableID " ) - > GetString ( ) ;
sSkillInfo . bFromBuffProp = true ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD>
CDnSkill : : StateEffectStruct StateEffect ;
char caLable [ 64 ] ;
ZeroMemory ( caLable , sizeof ( caLable ) ) ;
for ( int i = 0 ; i < MAX_STATE_EFFECT_COUNT ; + + i )
{
sprintf_s ( caLable , " _EffectClass%d " , i + 1 ) ;
StateEffect . nID = pSkillTable - > GetFieldFromLablePtr ( nSkillID , caLable ) - > GetInteger ( ) ;
if ( StateEffect . nID < 1 )
continue ;
sprintf_s ( caLable , " _EffectClass%dApplyType " , i + 1 ) ;
StateEffect . ApplyType = ( CDnSkill : : StateEffectApplyType ) pSkillTable - > GetFieldFromLablePtr ( nSkillID , caLable ) - > GetInteger ( ) ;
sprintf_s ( caLable , " _EffectClassValue%d " , i + 1 ) ;
StateEffect . szValue = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , caLable ) - > GetString ( ) ;
sprintf_s ( caLable , " _EffectClassValue%dDuration " , i + 1 ) ;
StateEffect . nDurationTime = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , caLable ) - > GetInteger ( ) ;
vecSkillEffect . push_back ( StateEffect ) ;
}
}
void CDnSkill : : CreateBattleGroundSkillInfo ( int nSkillID , int nSkillLevel , CDnSkill : : SkillInfo & sSkillInfo , std : : vector < CDnSkill : : StateEffectStruct > & vecSkillEffect )
{
CreateSkillInfo ( nSkillID , nSkillLevel , sSkillInfo , vecSkillEffect , true ) ;
}
bool CDnSkill : : _LoadSkillLevelData ( int iSkillTableID , int iLevel , int iSkillLevelDataApplyType )
{
DNTableFileFormat * pSkillTable = GetDNTable ( CDnTableDB : : TSKILL ) ;
DNTableFileFormat * pSkillLevelTable = GetDNTable ( CDnTableDB : : TSKILLLEVEL ) ;
vector < int > vlSkillLevelList ;
if ( pSkillLevelTable - > GetItemIDListFromField ( " _SkillIndex " , iSkillTableID , vlSkillLevelList ) < = 0 )
return false ;
if ( ! pSkillTable - > IsExistItem ( iSkillTableID ) )
return false ;
// pve, pvp <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <EFBFBD> Ͽ<EFBFBD> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> .
vector < int > : : iterator iterLevelList = vlSkillLevelList . begin ( ) ;
for ( iterLevelList ; iterLevelList ! = vlSkillLevelList . end ( ) ; )
{
int iSkillLevelTableID = * iterLevelList ;
int iApplyType = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _ApplyType " ) - > GetInteger ( ) ;
if ( iApplyType ! = iSkillLevelDataApplyType )
iterLevelList = vlSkillLevelList . erase ( iterLevelList ) ;
else
+ + iterLevelList ;
}
// <20> ش<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 쿣 <20> ׳ <EFBFBD> <20> ƹ<EFBFBD> <C6B9> ͵<EFBFBD> <20> <> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϸ<EFBFBD> <20> ȴ<EFBFBD> .
if ( vlSkillLevelList . empty ( ) )
return true ;
int iSkillLevelTableID = - 1 ;
for ( int i = 0 ; i < ( int ) vlSkillLevelList . size ( ) ; + + i )
{
int iNowLevel = pSkillLevelTable - > GetFieldFromLablePtr ( vlSkillLevelList . at ( i ) , " _SkillLevel " ) - > GetInteger ( ) ;
if ( iNowLevel = = iLevel )
{
iSkillLevelTableID = vlSkillLevelList . at ( i ) ;
break ;
}
}
if ( - 1 = = iSkillLevelTableID )
return false ;
# if defined(PRE_FIX_NEXTSKILLINFO)
//NextLevel<65> <6C> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ִ<EFBFBD> .. <20> <EFBFBD> <D7B7> <EFBFBD> <20> <> <EFBFBD> ⼭ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ <20> <> <EFBFBD> ̺<EFBFBD> ID<49> <44> ã<> <C3A3> <20> <> <EFBFBD> ´ <EFBFBD> .
int iMinSkillLevelTableID = - 1 ;
int iNextSkillLevelTableID = - 1 ;
SKILL_LEVEL_INFO * pTableInfo = g_pDataManager - > GetSkillLevelTableIDList ( iSkillLevelTableID , iSkillLevelDataApplyType ) ;
SKILL_LEVEL_TABLE_IDS : : iterator findIter = pTableInfo - > _SkillLevelTableIDs . find ( pTableInfo - > _MinLevel ) ;
if ( findIter ! = pTableInfo - > _SkillLevelTableIDs . end ( ) )
iMinSkillLevelTableID = findIter - > second ;
findIter = pTableInfo - > _SkillLevelTableIDs . find ( iLevel + 1 ) ;
if ( findIter ! = pTableInfo - > _SkillLevelTableIDs . end ( ) )
iNextSkillLevelTableID = findIter - > second ;
# endif // PRE_FIX_NEXTSKILLINFO
char caLabel [ 32 ] ;
int iCheckerParamOffset = 0 ;
int iProcessorParamOffset = 0 ;
for ( int i = 0 ; i < MAX_PROCESSOR_COUNT ; + + i )
{
// <20> ߵ <EFBFBD> <DFB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ü <20> ̸<EFBFBD> <CCB8> <EFBFBD> ã<> ´ <EFBFBD> . <20> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʵ尡 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Լ<EFBFBD> <D4BC> 鿡<EFBFBD> <E9BFA1> NULL <20> <> <EFBFBD> ϵ<EFBFBD>
sprintf_s ( caLabel , " _UsableChecker%d " , i + 1 ) ;
int iUsableChecker = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , caLabel ) - > GetInteger ( ) ;
sprintf_s ( caLabel , " _Processor%d " , i + 1 ) ;
int iProcessor = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , caLabel ) - > GetInteger ( ) ;
int iOffsetCheck = iCheckerParamOffset ;
IDnSkillUsableChecker * pUsableChecker = IDnSkillUsableChecker : : Create ( m_hActor , iUsableChecker , iSkillLevelTableID , & iCheckerParamOffset ) ;
if ( NULL ! = pUsableChecker )
{
if ( ( iCheckerParamOffset - iOffsetCheck ) ! = pUsableChecker - > GetNumArgument ( ) )
{
OutputDebug ( " [SkillLevelTable Error!] %d <20> <> <20> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߸<EFBFBD> <DFB8> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> ϴ<EFBFBD> . \n " , iSkillLevelTableID ) ;
_ASSERT ( ! " <EFBFBD> <EFBFBD> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <20> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߸<EFBFBD> <DFB8> <EFBFBD> . OutputDebug <20> <> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> !" ) ;
}
this - > AddUsableCheckers ( pUsableChecker , iSkillLevelDataApplyType ) ;
}
iOffsetCheck = iProcessorParamOffset ;
IDnSkillProcessor * pSkillProcessor = IDnSkillProcessor : : Create ( m_hActor , iProcessor , iSkillLevelTableID , & iProcessorParamOffset , this - > GetUseActionNames ( ) ) ;
if ( NULL ! = pSkillProcessor )
{
if ( ( iProcessorParamOffset - iOffsetCheck ) ! = pSkillProcessor - > GetNumArgument ( ) )
{
OutputDebug ( " [SkillLevelTable Error!] %d <20> <> <20> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߸<EFBFBD> <DFB8> Ǿ<EFBFBD> <C7BE> <EFBFBD> <EFBFBD> ϴ<EFBFBD> . \n " , iSkillLevelTableID ) ;
_ASSERT ( ! " <EFBFBD> <EFBFBD> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <20> Ķ<EFBFBD> <C4B6> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߸<EFBFBD> <DFB8> <EFBFBD> . OutputDebug <20> <> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> !" ) ;
}
this - > AddProcessor ( pSkillProcessor , iSkillLevelDataApplyType ) ;
}
}
// skill table
m_strStaticName = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _StaticName " ) - > GetString ( ) ;
char caLable [ 64 ] ;
ZeroMemory ( caLable , sizeof ( caLable ) ) ;
for ( int i = 0 ; i < 2 ; + + i )
{
sprintf_s ( caLable , " _NeedWeaponType%d " , i + 1 ) ;
int iEquipType = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , caLable ) - > GetInteger ( ) ;
if ( - 1 ! = iEquipType )
m_aeNeedEquipType [ i ] = ( CDnWeapon : : EquipTypeEnum ) iEquipType ;
else
m_aeNeedEquipType [ i ] = CDnWeapon : : EquipTypeEnum_Amount ;
}
// <20> <> ų <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ŷ<EFBFBD> <C5B7> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> . -_-
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ.
if ( 0 = = m_iMaxLevel )
{
m_iMaxLevel = ( int ) vlSkillLevelList . size ( ) ;
}
else
{
_ASSERT ( m_iMaxLevel = = ( int ) vlSkillLevelList . size ( ) ) ;
}
m_eSkillType = ( SkillTypeEnum ) pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _SkillType " ) - > GetInteger ( ) ;
m_eDurationType = ( DurationTypeEnum ) pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _DurationType " ) - > GetInteger ( ) ;
m_eTargetType = ( TargetTypeEnum ) pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _TargetType " ) - > GetInteger ( ) ;
m_iDissolvable = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _Dissolvable " ) - > GetInteger ( ) ;
m_iDuplicateCount = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _EffectAmassCount " ) - > GetInteger ( ) ;
m_iSkillDuplicateMethod = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _SkillDuplicate " ) - > GetInteger ( ) ;
m_iEffectDuplicateMethod = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _EffectDuplicate " ) - > GetInteger ( ) ;
m_eElement = ( CDnState : : ElementEnum ) pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _Element " ) - > GetInteger ( ) ;
m_iNeedJobClassID = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _NeedJob " ) - > GetInteger ( ) ;
if ( ( CDnState : : ElementEnum ) - 1 = = m_eElement )
m_eElement = CDnState : : ElementEnum_Amount ;
m_iExclusiveID = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _DuplicatedSkillType " ) - > GetInteger ( ) ;
m_iBaseSkillID = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _BaseSkillID " ) - > GetInteger ( ) ;
m_iGlobalSkillGroupID = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _GlobalSkillGroup " ) - > GetInteger ( ) ;
float fGlobalCoolTime = 0.0f ;
if ( PVE = = iSkillLevelDataApplyType )
fGlobalCoolTime = ( float ) pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _GlobalCoolTimePvE " ) - > GetInteger ( ) / 1000.0f ;
else
if ( PVP = = iSkillLevelDataApplyType )
fGlobalCoolTime = ( float ) pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _GlobalCoolTimePvP " ) - > GetInteger ( ) / 1000.0f ;
m_afGlobalCoolTime [ iSkillLevelDataApplyType ] = fGlobalCoolTime ;
// skill level table
m_iSkillLevelID = iSkillLevelTableID ;
m_iLevel = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _SkillLevel " ) - > GetInteger ( ) ;
m_iNowLevelSkillPoint = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _NeedSkillPoint " ) - > GetInteger ( ) ;
if ( m_iLevel < m_iMaxLevel )
# if defined(PRE_FIX_NEXTSKILLINFO)
m_iNextLevelSkillPoint = pSkillLevelTable - > GetFieldFromLablePtr ( iNextSkillLevelTableID , " _NeedSkillPoint " ) - > GetInteger ( ) ;
# else
m_iNextLevelSkillPoint = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID + 1 , " _NeedSkillPoint " ) - > GetInteger ( ) ;
# endif // PRE_FIX_NEXTSKILLINFO
else
m_iNextLevelSkillPoint = 0 ;
m_iNeedItemID [ iSkillLevelDataApplyType ] = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _NeedItem " ) - > GetInteger ( ) ;
m_iNeedItemDecreaseCount [ iSkillLevelDataApplyType ] = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _NeedItemDecreaseCount " ) - > GetInteger ( ) ;
m_iIncreaseRange [ iSkillLevelDataApplyType ] = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _AddRange " ) - > GetInteger ( ) ;
m_iDecreaseHP [ iSkillLevelDataApplyType ] = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _DecreaseHP " ) - > GetInteger ( ) ;
m_iDecreaseMP [ iSkillLevelDataApplyType ] = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _DecreaseSP " ) - > GetInteger ( ) ;
m_iLevelLimit = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _LevelLimit " ) - > GetInteger ( ) ;
m_fDelayTime [ iSkillLevelDataApplyType ] = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _DelayTime " ) - > GetInteger ( ) / 1000.f ;
// <20> <> <EFBFBD> <EFBFBD> <20> ۷ ι <DBB7> <20> <> ų <20> <EFBFBD> <D7B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <C7BE> ִٸ<D6B4> <20> <> ų <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> ۷ ι <DBB7> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ü <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
if ( 0 < m_iGlobalSkillGroupID )
m_fDelayTime [ iSkillLevelDataApplyType ] = m_afGlobalCoolTime [ iSkillLevelDataApplyType ] ;
m_fOriginalDelayTime [ iSkillLevelDataApplyType ] = m_fDelayTime [ iSkillLevelDataApplyType ] ;
m_iAdditionalThreat = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _AddThreat " ) - > GetInteger ( ) ;
m_fHPConsumeType [ iSkillLevelDataApplyType ] = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _HPConsumeType " ) - > GetFloat ( ) ;
m_fMPConsumeType [ iSkillLevelDataApplyType ] = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _SPConsumeType " ) - > GetFloat ( ) ;
m_iCPScore = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _CPScore " ) - > GetInteger ( ) ;
m_fStartSuperArmor = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _StartSuperArmor " ) - > GetFloat ( ) ;
m_bStartCanHit = ( pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _StartCanHit " ) - > GetInteger ( ) = = 1 ) ? true : false ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD>
StateEffectStruct StateEffect ;
for ( int i = 0 ; i < MAX_STATE_EFFECT_COUNT ; + + i )
{
sprintf_s ( caLable , " _EffectClass%d " , i + 1 ) ;
StateEffect . nID = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , caLable ) - > GetInteger ( ) ;
if ( StateEffect . nID < 1 )
continue ;
sprintf_s ( caLable , " _EffectClass%dApplyType " , i + 1 ) ;
int iApplyType = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , caLable ) - > GetInteger ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . Ÿ<> ٸ<EFBFBD> <20> ٸ<EFBFBD> <D9B8> <EFBFBD> <20> ؼ<EFBFBD> <20> Ȱ<EFBFBD> <C8B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> 2<> <32> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> ش<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȭ <20> нú<D0BD> <C3BA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> 2<> <32> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʰ<EFBFBD> <20> ׳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> ٸ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> ȭ<EFBFBD> <C8AD> Ű<EFBFBD> <C5B0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ҹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
bool bApplyAll = ( StateEffectApplyType : : ApplyAll = = iApplyType ) & & ( SkillTypeEnum : : EnchantPassive ! = m_eSkillType ) ;
if ( bApplyAll )
{
StateEffect . ApplyType = StateEffectApplyType : : ApplySelf ;
StateEffect . bApplyAllPair = true ;
}
else
StateEffect . ApplyType = ( StateEffectApplyType ) iApplyType ;
sprintf_s ( caLable , " _EffectClassValue%d " , i + 1 ) ;
StateEffect . szValue = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , caLable ) - > GetString ( ) ;
sprintf_s ( caLable , " _EffectClassValue%dDuration " , i + 1 ) ;
StateEffect . nDurationTime = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , caLable ) - > GetInteger ( ) ;
m_vlStateEffectList [ iSkillLevelDataApplyType ] . push_back ( StateEffect ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̸<EFBFBD> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٲ㼭 <20> Ȱ<EFBFBD> <C8B0> <EFBFBD> <20> <> <20> <> <20> <> <20> ־<EFBFBD> <D6BE> <EFBFBD> .
if ( bApplyAll )
{
StateEffect . ApplyType = StateEffectApplyType : : ApplyTarget ;
m_vlStateEffectList [ iSkillLevelDataApplyType ] . push_back ( StateEffect ) ;
}
}
SkillInfo & MySkillInfo = m_SkillInfo [ iSkillLevelDataApplyType ] ;
MySkillInfo . iSkillID = m_iSkillID ;
MySkillInfo . iSkillLevelID = m_iSkillLevelID ;
MySkillInfo . iLevel = m_iLevel ;
MySkillInfo . iSkillDuplicateMethod = m_iSkillDuplicateMethod ;
MySkillInfo . iDuplicateCount = m_iDuplicateCount ;
MySkillInfo . eSkillType = m_eSkillType ;
MySkillInfo . eDurationType = m_eDurationType ;
MySkillInfo . eTargetType = m_eTargetType ;
MySkillInfo . eApplyType = StateEffect . ApplyType ;
MySkillInfo . iDissolvable = m_iDissolvable ;
MySkillInfo . eSkillElement = m_eElement ;
MySkillInfo . hSkillUser = m_hActor ; // Note: <20> <> <EFBFBD> Ͱ<EFBFBD> <20> <EFBFBD> <20> <> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ƴ<EFBFBD>
if ( m_hActor )
MySkillInfo . iSkillUserTeam = m_hActor - > GetTeam ( ) ;
if ( m_hActor & & _tcslen ( m_hActor - > GetName ( ) ) > 0 )
MySkillInfo . strUserName = m_hActor - > GetName ( ) ;
MySkillInfo . szEffectOutputIDs = pSkillLevelTable - > GetFieldFromLablePtr ( iSkillLevelTableID , " _StateEffectTableID " ) - > GetString ( ) ;
if ( 0.0f = = m_fHPConsumeType [ iSkillLevelDataApplyType ] )
{
m_iNeedHP [ iSkillLevelDataApplyType ] = m_iDecreaseHP [ iSkillLevelDataApplyType ] ;
}
else
{
m_iNeedHP [ iSkillLevelDataApplyType ] = int ( ( float ) m_hActor - > GetMaxHP ( ) * m_fHPConsumeType [ iSkillLevelDataApplyType ] ) ;
}
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
m_nPrefixSkillType = pSkillTable - > GetFieldFromLablePtr ( iSkillTableID , " _Group " ) - > GetInteger ( ) ;
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̻<EFBFBD> <20> <> ų <20> <EFBFBD> ID<49> <44> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> ´ <EFBFBD> ..(Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ?...)
SetPrefixSkillType ( m_nPrefixSkillType ) ;
# endif // PRE_ADD_PREFIX_SYSTE_RENEW
return true ;
}
void CDnSkill : : _OnInitialize ( void )
{
// 129<32> <39> ChangeActionSet <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> DnApplySEWhenActionSetBlowEnabledProcessor <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> ִٸ<D6B4> ChangeActionSet <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <C5B8> <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ְ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> Ŀ<EFBFBD> <20> ٲ<EFBFBD> <20> ǿ<D7BC> <C7BF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> ȿ<EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> Կ<EFBFBD> <D4BF> <EFBFBD> <20> <> Ʈ<EFBFBD> <C6AE> <20> ϰ<EFBFBD> <20> ȴ<EFBFBD> .
// <20> 켱 <20> ׳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ..
for ( int k = PVE ; k < NUM_SKILLLEVEL_APPLY_TYPE ; + + k )
{
CDnApplySEWhenActionSetBlowEnabledProcessor * pApplySEWhenActionSetBlowEnableProcessor =
static_cast < CDnApplySEWhenActionSetBlowEnabledProcessor * > ( GetProcessor ( IDnSkillProcessor : : APPLY_SE_WHEN_ACTIONSET_ENABLED , k ) ) ;
if ( pApplySEWhenActionSetBlowEnableProcessor )
{
// <20> <> <20> <> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> ִµ<D6B4> ChangeActionSet <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> ChangeActionStr <20> <> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ..
bool bValid = false ;
for ( int i = 0 ; i < ( int ) m_vlStateEffectList [ k ] . size ( ) ; + + i )
{
StateEffectStruct & StateEffect = m_vlStateEffectList [ k ] . at ( i ) ;
if ( STATE_BLOW : : BLOW_129 = = StateEffect . nID )
{
bValid = true ;
break ;
}
}
if ( bValid )
{
CDnChangeActionStrProcessor * pChangeActionStrProcessor = static_cast < CDnChangeActionStrProcessor * > ( GetProcessor ( IDnSkillProcessor : : CHANGE_ACTIONSTR , k ) ) ;
if ( pChangeActionStrProcessor )
bValid = true ;
else
bValid = false ;
}
if ( bValid )
{
for ( int i = 0 ; i < ( int ) m_vlStateEffectList [ k ] . size ( ) ; + + i )
{
StateEffectStruct & StateEffect = m_vlStateEffectList [ k ] . at ( i ) ;
if ( STATE_BLOW : : BLOW_129 ! = StateEffect . nID )
{
pApplySEWhenActionSetBlowEnableProcessor - > AddStateEffect ( & StateEffect ) ;
StateEffect . bApplyInProcessor = true ;
}
}
}
}
}
}
bool CDnSkill : : Initialize ( int iSkillTableID , int iLevel )
{
m_iSkillID = iSkillTableID ;
// <20> <> <20> <> <EFBFBD> 庰<EFBFBD> <E5BAB0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> . <20> <> <EFBFBD> <EFBFBD> PVP <20> <> <20> д´ <D0B4> .
// PVE <20> <> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> ̱<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 庰<EFBFBD> <E5BAB0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ä<> <C3A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȴ<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 쿣 pvp <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> Լ<EFBFBD> <20> ȿ<EFBFBD> <C8BF> <EFBFBD> <20> ƹ<EFBFBD> <C6B9> ͵<EFBFBD> <20> ȵǰ<C8B5> <20> <> <EFBFBD> ϵȴ<CFB5> .
// <20> <> <EFBFBD> <EFBFBD> <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> <CCBE> ε<EFBFBD> <20> ƹ<EFBFBD> <C6B9> ͵<EFBFBD> <20> <> <EFBFBD> ٸ<EFBFBD> <20> ߸<EFBFBD> <DFB8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( false = = _LoadSkillLevelData ( iSkillTableID , iLevel , PVP ) )
return false ;
if ( false = = _LoadSkillLevelData ( iSkillTableID , iLevel , PVE ) )
return false ;
// <20> ʱ<EFBFBD> ȭ <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ƴ<EFBFBD> <C6B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
DNTableFileFormat * pSkillTable = GetDNTable ( CDnTableDB : : TSKILL ) ;
RefreshDecreaseMP ( ) ;
int iNumProcessor = ( int ) m_vlpProcessors [ PVE ] . size ( ) ;
for ( int iProcessor = 0 ; iProcessor < iNumProcessor ; + + iProcessor )
{
IDnSkillProcessor * pProcessor = m_vlpProcessors [ PVE ] . at ( iProcessor ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ܺο <DCBA> <CEBF> <EFBFBD> <20> <> ȸ<EFBFBD> <C8B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ä<> <C3A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( pProcessor - > GetType ( ) = = IDnSkillProcessor : : PLAY_ANI )
m_setUseActionNames . insert ( static_cast < CDnPlayAniProcess * > ( pProcessor ) - > GetActionName ( ) ) ;
else
if ( pProcessor - > GetType ( ) = = IDnSkillProcessor : : PARTIAL_PLAY_ANI )
{
CDnPartialPlayProcessor * pPartialPlayAni = static_cast < CDnPartialPlayProcessor * > ( pProcessor ) ;
m_setUseActionNames . insert ( pPartialPlayAni - > GetStartActionName ( ) ) ;
m_setUseActionNames . insert ( pPartialPlayAni - > GetLoopActionName ( ) ) ;
m_setUseActionNames . insert ( pPartialPlayAni - > GetEndActionName ( ) ) ;
}
}
// <20> ʱ<EFBFBD> ȭ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> pve <20> <> <EFBFBD> 尡 <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> .
m_iSelectedSkillLevelDataApplyType = PVE ;
_OnInitialize ( ) ;
if ( m_eDurationType = = SummonOnOff )
OnInitializeSummonMonsterInfo ( ) ;
return true ;
}
bool CDnSkill : : AddUsableCheckers ( IDnSkillUsableChecker * pUsableChecker , int iSelectedLevelData )
{
bool bResult = false ;
if ( pUsableChecker )
{
m_vlpUsableCheckers [ iSelectedLevelData ] . push_back ( pUsableChecker ) ;
bResult = true ;
}
return bResult ;
}
bool CDnSkill : : AddProcessor ( IDnSkillProcessor * pProcessor , int iSelectedLevelData )
{
bool bResult = false ;
if ( pProcessor )
{
m_vlpProcessors [ iSelectedLevelData ] . push_back ( pProcessor ) ;
bResult = true ;
}
return bResult ;
}
bool CDnSkill : : IsSatisfyWeapon ( void )
{
bool bSatisfy = true ;
if ( ( CDnWeapon : : EquipTypeEnum_Amount ! = m_aeNeedEquipType [ 0 ] ) | |
( CDnWeapon : : EquipTypeEnum_Amount ! = m_aeNeedEquipType [ 1 ] ) )
{
bSatisfy = false ;
if ( CDnWeapon : : EquipTypeEnum_Amount ! = m_aeNeedEquipType [ 0 ] & & CDnWeapon : : EquipTypeEnum_Amount ! = m_aeNeedEquipType [ 1 ] )
{
if ( CDnWeapon : : IsSubWeapon ( m_aeNeedEquipType [ 0 ] ) = = CDnWeapon : : IsSubWeapon ( m_aeNeedEquipType [ 1 ] ) ) // 1. <20> Ѵ <EFBFBD> <20> ֹ<EFBFBD> <D6B9> <EFBFBD> <EFBFBD> ̰ų<CCB0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> or
{
int nWeapon = CDnWeapon : : IsSubWeapon ( m_aeNeedEquipType [ 0 ] ) ? 1 : 0 ;
# ifdef _GAMESERVER
if ( m_hActor - > GetWeapon ( nWeapon ) & & m_aeNeedEquipType [ 0 ] = = m_hActor - > GetWeapon ( nWeapon ) - > GetEquipType ( )
| | m_hActor - > GetWeapon ( nWeapon ) & & m_aeNeedEquipType [ 1 ] = = m_hActor - > GetWeapon ( nWeapon ) - > GetEquipType ( ) )
# else // _GAMESERVER
if ( m_hActor - > GetWeapon ( nWeapon , false ) & & m_aeNeedEquipType [ 0 ] = = m_hActor - > GetWeapon ( nWeapon , false ) - > GetEquipType ( )
| | m_hActor - > GetWeapon ( nWeapon , false ) & & m_aeNeedEquipType [ 1 ] = = m_hActor - > GetWeapon ( nWeapon , false ) - > GetEquipType ( ) )
# endif // _GAMESERVER
bSatisfy = true ;
}
else // 2. <20> ֹ<EFBFBD> <D6B9> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> and
{
if ( CDnWeapon : : IsSubWeapon ( m_aeNeedEquipType [ 0 ] ) )
{
# ifdef _GAMESERVER
if ( m_hActor - > GetWeapon ( 1 ) & & m_aeNeedEquipType [ 0 ] = = m_hActor - > GetWeapon ( 1 ) - > GetEquipType ( )
& & m_hActor - > GetWeapon ( 0 ) & & m_aeNeedEquipType [ 1 ] = = m_hActor - > GetWeapon ( 0 ) - > GetEquipType ( ) )
# else // _GAMESERVER
if ( m_hActor - > GetWeapon ( 1 , false ) & & m_aeNeedEquipType [ 0 ] = = m_hActor - > GetWeapon ( 1 , false ) - > GetEquipType ( )
& & m_hActor - > GetWeapon ( 0 , false ) & & m_aeNeedEquipType [ 1 ] = = m_hActor - > GetWeapon ( 0 , false ) - > GetEquipType ( ) )
# endif // _GAMESERVER
bSatisfy = true ;
}
else
{
# ifdef _GAMESERVER
if ( m_hActor - > GetWeapon ( 0 ) & & m_aeNeedEquipType [ 0 ] = = m_hActor - > GetWeapon ( 0 ) - > GetEquipType ( )
& & m_hActor - > GetWeapon ( 1 ) & & m_aeNeedEquipType [ 1 ] = = m_hActor - > GetWeapon ( 1 ) - > GetEquipType ( ) )
# else // _GAMESERVER
if ( m_hActor - > GetWeapon ( 0 , false ) & & m_aeNeedEquipType [ 0 ] = = m_hActor - > GetWeapon ( 0 , false ) - > GetEquipType ( )
& & m_hActor - > GetWeapon ( 1 , false ) & & m_aeNeedEquipType [ 1 ] = = m_hActor - > GetWeapon ( 1 , false ) - > GetEquipType ( ) )
# endif // _GAMESERVER
bSatisfy = true ;
}
}
}
else
{
for ( int i = 0 ; i < MAX_SKILL_NEED_EQUIP_COUNT ; + + i )
{
if ( CDnWeapon : : EquipTypeEnum_Amount ! = m_aeNeedEquipType [ i ] )
{
for ( int k = 0 ; k < 2 ; + + k )
{
// bActionMatchWeapon <20> <> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> true <20> <> ȣ <> <C8A3> <EFBFBD> ϴϱ <CFB4> <20> ǿ<D7BC> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ⱑ <20> ٸ<EFBFBD> <D9B8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> Ͽ<EFBFBD> <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ַ<EFBFBD> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> ..
# ifdef _GAMESERVER
if ( m_hActor - > GetWeapon ( k ) & & m_aeNeedEquipType [ i ] = = m_hActor - > GetWeapon ( k ) - > GetEquipType ( ) )
# else // _GAMESERVER
if ( m_hActor - > GetWeapon ( k , false ) & & m_aeNeedEquipType [ i ] = = m_hActor - > GetWeapon ( k , false ) - > GetEquipType ( ) )
# endif // _GAMESERVER
{
bSatisfy = true ;
break ;
}
}
if ( bSatisfy )
break ;
}
}
}
}
return bSatisfy ;
}
CDnSkill : : UsingResult CDnSkill : : CanExecute ( void )
{
UsingResult eResult = UsingResult : : Failed ;
if ( ! m_hActor )
return UsingResult : : Failed ;
if ( m_hActor - > IsPlayerActor ( ) )
{
CDnPlayerActor * pPlayerActor = static_cast < CDnPlayerActor * > ( m_hActor . GetPointer ( ) ) ;
if ( pPlayerActor & & pPlayerActor - > IsSwapSingleSkin ( ) )
{
if ( pPlayerActor - > IsTransformSkill ( GetClassID ( ) ) = = false )
return UsingResult : : Failed ;
}
}
if ( m_hActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_176 ) )
{
DNVector ( DnBlowHandle ) vlBlows ;
CDnAllowedSkillsBlow * pAllowedSkillBlow = NULL ;
m_hActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_176 , vlBlows ) ;
for ( int i = 0 ; i < ( int ) vlBlows . size ( ) ; + + i )
{
pAllowedSkillBlow = static_cast < CDnAllowedSkillsBlow * > ( vlBlows [ i ] . GetPointer ( ) ) ;
if ( ! pAllowedSkillBlow ) continue ;
if ( ! pAllowedSkillBlow - > IsAllowSkill ( m_iSkillID ) )
return UsingResult : : Failed ;
}
}
// <20> ܿ<EFBFBD> SP üũ, ü<> <C3BC> üũ, <20> <> <EFBFBD> <EFBFBD> üũ <20> <> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ȱ<> <C8B0> ȭ <20> <> <EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> MP <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <20> ִ<EFBFBD> .
if ( ! IsToggleOn ( ) & & ! IsAuraOn ( ) )
if ( m_hActor - > GetSP ( ) < m_iNeedMP [ m_iSelectedSkillLevelDataApplyType ] )
return UsingResult : : Failed ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 갰<EFBFBD> <EAB0B0> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϶<EFBFBD> <CFB6> <EFBFBD> <20> <> <EFBFBD> 밡<EFBFBD> <EBB0A1> <EFBFBD> ؾ<EFBFBD> <20> Ѵ <EFBFBD> .
// <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <20> <> <EFBFBD> ݺҰ<DDBA> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> ұ<EFBFBD> <D2B1> ϴٰ<CFB4> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 꿡<EFBFBD> <EABFA1> <EFBFBD> <EFBFBD> <20> ǹ<EFBFBD> <C7B9> ִ<EFBFBD> <20> <> <EFBFBD> ̹Ƿ<CCB9>
// <20> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̰<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <20> <> <EFBFBD> Ѻ<EFBFBD> <D1BA> <EFBFBD> <20> <EFBFBD> ȭ <20> <> Ű<EFBFBD> <C5B0> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
// <20> 켱 Dissolve <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ൿ <20> Ұ<EFBFBD> üũ<C3BC> <C5A9> <20> dzʶڴ<CAB6> .
// <20> <> ų<EFBFBD> <C5B3> <20> ش<EFBFBD> <D8B4> ϴ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> State <20> ñ׳ ο <D7B3> <20> ݵ<EFBFBD> <DDB5> <EFBFBD> IgnorectCantAction <20> <> <20> <> <EFBFBD> <EFBFBD> <20> ־<EFBFBD> <D6BE> <EFBFBD> <20> <> ų <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
bool bPassCheckCantAction = false ;
for ( DWORD i = 0 ; i < GetStateEffectCount ( ) ; + + i )
{
//#40480 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <20> <> <EFBFBD> ཽ<EFBFBD> <E0BDBD> Ȱ<> <C8B0> ȭ<EFBFBD> <C8AD> <20> <> <EFBFBD> ؼ<EFBFBD> ..
CDnSkill : : StateEffectStruct * pSE = GetStateEffectFromIndex ( i ) ;
if ( STATE_BLOW : : BLOW_069 = = pSE - > nID )
{
// 76643 ( Dissolvable <20> <> 2<> <32> <20> ׳ <EFBFBD> <20> <> Ȱ<EFBFBD> <C8B0> ȭ <20> ش<D8B4> <DEB6> <EFBFBD> <20> մϴ<D5B4> )
for ( int i = 0 ; i < m_hActor - > GetNumAppliedStateBlow ( ) ; + + i )
{
DnBlowHandle hBlow = m_hActor - > GetAppliedStateBlow ( i ) ;
if ( hBlow )
{
const CDnSkill : : SkillInfo * pSkillInfo = hBlow - > GetParentSkillInfo ( ) ;
if ( pSkillInfo & & pSkillInfo - > iDissolvable = = 2 )
return UsingResult : : Failed ;
}
}
bPassCheckCantAction = true ;
break ;
}
if ( STATE_BLOW : : BLOW_155 = = pSE - > nID )
{
bPassCheckCantAction = true ;
break ;
}
}
// <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ұ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> mp <20> Ҹ<EFBFBD> <D2B8> ϴ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
if ( 0 < m_hActor - > GetCantUseSkillSEReferenceCount ( ) )
if ( 0 < m_iNeedMP [ m_iSelectedSkillLevelDataApplyType ] )
return UsingResult : : Failed ;
// 67<36> <37> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ƽ <EFBFBD> <C6BC> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
if ( m_eSkillType = = CDnSkill : : Active )
{
int iAppliedStateBlow = m_hActor - > GetNumAppliedStateBlow ( ) ;
for ( int iBlow = 0 ; iBlow < iAppliedStateBlow ; + + iBlow )
{
DnBlowHandle hBlow = m_hActor - > GetAppliedStateBlow ( iBlow ) ;
if ( hBlow & & hBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_067 )
return UsingResult : : Failed ;
}
}
// HP
if ( m_hActor - > GetHP ( ) < m_iNeedHP [ m_iSelectedSkillLevelDataApplyType ] )
return UsingResult : : Failed ;
bool isCharacterLevelCheck = true ;
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ۿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> ų<EFBFBD> <C5B3> ij<> <C4B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> üũ <20> <> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> <20> Ѵ <EFBFBD> .
isCharacterLevelCheck = ( GetLevelUpValue ( ) = = 0 ) ;
if ( isCharacterLevelCheck )
{
if ( m_hActor - > GetLevel ( ) < m_iLevelLimit )
return UsingResult : : Failed ;
}
// <20> ʿ<EFBFBD> <20> <> <EFBFBD> Ⱑ <20> ִٸ<D6B4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ߴ <EFBFBD> <DFB4> <EFBFBD> Ȯ<> <C8AE> . <20> ִ<EFBFBD> 2<> <32> <EFBFBD> <EFBFBD> . <20> <> <20> <> <20> ϳ <EFBFBD> <CFB3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ǵ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( ( CDnWeapon : : EquipTypeEnum_Amount ! = m_aeNeedEquipType [ 0 ] ) | |
( CDnWeapon : : EquipTypeEnum_Amount ! = m_aeNeedEquipType [ 1 ] ) )
{
bool bSatisfy = false ;
for ( int i = 0 ; i < MAX_SKILL_NEED_EQUIP_COUNT ; + + i )
{
if ( CDnWeapon : : EquipTypeEnum_Amount ! = m_aeNeedEquipType [ i ] )
{
for ( int k = 0 ; k < 2 ; + + k )
{
// #11120 <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> ⸦ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Լ<EFBFBD> <D4BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> ⸦ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( m_hActor - > CDnActor : : GetWeapon ( k ) & & m_aeNeedEquipType [ i ] = = m_hActor - > CDnActor : : GetWeapon ( k ) - > GetEquipType ( ) )
{
bSatisfy = true ;
break ;
}
}
if ( bSatisfy )
break ;
}
}
if ( false = = bSatisfy )
return UsingResult : : Failed ;
}
// ȭ<> <C8AD> <20> <> <EFBFBD> <EFBFBD> <20> Ҹ<EFBFBD> <D2B8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ȯ<> <C8AE>
bool bCheckNeedItem = true ;
if ( GetRoom ( ) & & bIsExtremitySkill ( ) & & static_cast < CDNGameRoom * > ( GetRoom ( ) ) - > bIsLadderRoom ( ) ) // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ñر<C3B1> <20> <> ų
bCheckNeedItem = false ;
if ( bCheckNeedItem & & m_iNeedItemID [ m_iSelectedSkillLevelDataApplyType ] > 0 )
{
int iNumNeedItem = CDnItemTask : : GetInstance ( m_hActor - > GetRoom ( ) ) . ScanItemFromID ( m_hActor , m_iNeedItemID [ m_iSelectedSkillLevelDataApplyType ] , NULL ) ;
if ( iNumNeedItem < m_iNeedItemDecreaseCount [ m_iSelectedSkillLevelDataApplyType ] )
return UsingResult : : Failed ;
}
// <20> <> <EFBFBD> <EFBFBD> üũ
//if( m_hActor->GetClassID() <= CDnActor::Reserved6 )
if ( m_hActor - > IsPlayerActor ( ) )
{
//CDnPlayerActor* pActor = dynamic_cast<CDnPlayerActor*>(m_hActor.GetPointer());
CDnPlayerActor * pActor = static_cast < CDnPlayerActor * > ( m_hActor . GetPointer ( ) ) ;
if ( NULL = = pActor )
return UsingResult : : Failed ;
if ( 0 ! = m_iNeedJobClassID )
{
if ( pActor - > IsPassJob ( m_iNeedJobClassID ) = = false )
return UsingResult : : Failed ;
}
// <20> <> Ʋ <20> <> <EFBFBD> 尡 <20> ƴϸ<C6B4> <20> <> ų <20> ߵ <EFBFBD> <20> Ұ<EFBFBD> !
if ( ! pActor - > IsBattleMode ( ) )
return UsingResult : : Failed ;
}
switch ( m_eDurationType )
{
case CDnSkill : : Instantly :
case CDnSkill : : Buff :
case CDnSkill : : Debuff :
case CDnSkill : : SummonOnOff :
case CDnSkill : : StanceChange :
{
// <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʾ Ҵٸ<D2B4> <20> <> ų <20> ߵ <EFBFBD> <20> Ұ<EFBFBD> .. <20> 켱 Ŭ<> <EFBFBD> üũ<C3BC> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ֹǷ<D6B9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ణ<EFBFBD> <E0B0A3> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> <> <EFBFBD> ܵд<DCB5> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̰ų<CCB0> <20> <> <EFBFBD> <EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> 쿣 Į<> <C4AE> <EFBFBD> <EFBFBD> üũ.
if ( m_hActor - > IsMonsterActor ( ) | |
SkillTypeEnum : : AutoPassive = = m_eSkillType )
{
if ( m_fCoolTime > 0.0f )
return UsingResult : : FailedByCooltime ;
}
else
{
if ( m_fLeftDelayTime > 0.5f )
return UsingResult : : FailedByCooltime ;
}
}
break ;
case CDnSkill : : TimeToggle :
break ;
case CDnSkill : : ActiveToggle :
case CDnSkill : : ActiveToggleForSummon :
break ;
case CDnSkill : : Aura :
break ;
}
if ( m_vlpUsableCheckers [ m_iSelectedSkillLevelDataApplyType ] . empty ( ) )
eResult = UsingResult : : Success ;
else
{
int iNumChecker = ( int ) m_vlpUsableCheckers [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int iChecker = 0 ; iChecker < iNumChecker ; + + iChecker )
{
IDnSkillUsableChecker * pChecker = m_vlpUsableCheckers [ m_iSelectedSkillLevelDataApplyType ] . at ( iChecker ) ;
if ( false = = pChecker - > CanUse ( ) )
{
eResult = UsingResult : : FailedByUsableChecker ;
break ;
}
else
eResult = UsingResult : : Success ;
}
}
return eResult ;
}
float CDnSkill : : GetDelayTime ( void )
{
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
float fDelayTime = 0.0f ;
if ( 0.0f < m_fAnotherGlobalSkillCoolTime )
{
fDelayTime = m_fAnotherGlobalSkillCoolTime ;
DnSkillHandle hAnotherSkill ;
if ( m_hActor )
hAnotherSkill = m_hActor - > FindSkill ( m_nAnotherGlobakSkillID ) ;
if ( hAnotherSkill )
{
if ( hAnotherSkill - > GetAnotherGlobalSkillID ( ) ! = GetClassID ( ) )
fDelayTime = hAnotherSkill - > GetDelayTime ( ) ;
}
}
else
//<2F> <> m_fAnotherGlobalSkillCoolTime<6D> <65> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> ..
{
fDelayTime = m_fDelayTime [ m_iSelectedSkillLevelDataApplyType ] ;
float fGlobalCoolTimeRate = 0.0f ;
if ( m_hActor & &
m_hActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_269 ) & &
m_iGlobalSkillGroupID > 0 )
{
DNVector ( DnBlowHandle ) vlBlows ;
m_hActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_269 , vlBlows ) ;
{
int nCount = ( int ) vlBlows . size ( ) ;
for ( int i = 0 ; i < nCount ; + + i )
{
DnBlowHandle hBlow = vlBlows [ i ] ;
if ( hBlow & & hBlow - > IsEnd ( ) = = false )
{
fGlobalCoolTimeRate + = hBlow - > GetFloatValue ( ) ;
}
}
}
}
fDelayTime - = fDelayTime * fGlobalCoolTimeRate ;
}
return fDelayTime ;
# else
if ( 0.0f < m_fAnotherGlobalSkillCoolTime )
return m_fAnotherGlobalSkillCoolTime ;
return m_fDelayTime [ m_iSelectedSkillLevelDataApplyType ] ;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
}
void CDnSkill : : OnBeginCoolTime ( )
{
m_dwLastUseSkillTimeStamp = timeGetTime ( ) ;
m_fCoolTime = ( GetDelayTime ( ) = = 0.0f ) ? 0.0f : 1.0f ;
m_fCoolTimeAdjustBlowValue = 1.0f ;
m_fLeftDelayTime = GetDelayTime ( ) * m_fCoolTimeAdjustBlowValue ;
m_fLeftDelayTime * = m_fCoolTimeMultipier ;
// [2011/03/09 semozz]
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ҷ<EFBFBD> LeftDelayTime<6D> <65> 0.0<EFBFBD> <EFBFBD> <20> Ǹ<EFBFBD> m_fCoolTime<6D> <65> 0.0f<EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؾ<EFBFBD> <D8BE> Ѵ <EFBFBD> .
// <20> <EFBFBD> <D7B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> 1.0<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .(Process<73> Լ<EFBFBD> <D4BC> <EFBFBD> <EFBFBD> <EFBFBD> m_fLeftDelayTime<6D> <65> 0<> ̸<EFBFBD> CoolTime<6D> <65> <EFBFBD> žȵ<C5BE> .
if ( m_fLeftDelayTime = = 0.0f )
{
m_fCoolTime = 0.0f ;
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
m_fDeltaGlobalCoolTime = 0.0f ;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
}
}
void CDnSkill : : _OnBeginProcessException ( void )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ǯ<> <C7AE> <EFBFBD> ش<EFBFBD> . #12438
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ɸ<EFBFBD> <20> <> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> self <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> <> ų<EFBFBD> <C5B3>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ϲ <EFBFBD> ȭ <20> <> Ŵ.
if ( m_hActor & &
(
m_hActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_041 ) | |
m_hActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_146 ) | |
m_hActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_218 ) //#53900 Escape<70> <65> ų <20> ߰<EFBFBD>
) )
{
int iNumStateBlow = ( int ) m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int i = 0 ; i < iNumStateBlow ; + + i )
{
const StateEffectStruct & SE = m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . at ( i ) ;
if ( STATE_BLOW : : BLOW_069 = = SE . nID & &
StateEffectApplyType : : ApplySelf = = SE . ApplyType )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ǯ<> <C7AE> <EFBFBD> ش<EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ƾ<EFBFBD> <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> ư<EFBFBD> <C6B0> <EFBFBD>
// <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> ư<EFBFBD> <C6B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EEB0A3> .
while ( 0 < m_hActor - > GetFrameStopRefCount ( ) )
m_hActor - > RemovedFrameStop ( ) ;
break ;
}
}
}
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD>
ClearStigmaStateEffect ( ) ;
}
void CDnSkill : : ClearStigmaStateEffect ( )
{
//////////////////////////////////////////////////////////////////////////
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> ...
bool hasStigmaState = false ;
int nListCount = ( int ) m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int i = 0 ; i < nListCount ; + + i )
{
const StateEffectStruct & SE = m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . at ( i ) ;
if ( SE . nID = = STATE_BLOW : : BLOW_246 )
{
hasStigmaState = true ;
break ;
}
}
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> ã<> Ƽ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> ...
if ( hasStigmaState = = true )
{
DNVector ( DnActorHandle ) hVecList ;
m_hActor - > ScanActor ( m_hActor - > GetRoom ( ) , * m_hActor - > GetPosition ( ) , FLT_MAX , hVecList ) ;
int nActorCount = ( int ) hVecList . size ( ) ;
for ( int i = 0 ; i < nActorCount ; + + i )
{
DnActorHandle hActor = hVecList [ i ] ;
if ( hActor & & hActor - > IsDie ( ) = = false & & hActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_246 ) )
{
DNVector ( DnBlowHandle ) vlhBlows ;
hActor - > GetStateBlow ( ) - > GetStateBlowFromBlowIndex ( STATE_BLOW : : BLOW_246 , vlhBlows ) ;
int iNumBlow = ( int ) vlhBlows . size ( ) ;
for ( int j = 0 ; j < iNumBlow ; + + j )
{
DnBlowHandle hBlow = vlhBlows [ j ] ;
if ( hBlow & & hBlow - > IsEnd ( ) = = false )
{
CDnSkill : : SkillInfo * pSkillInfo = const_cast < CDnSkill : : SkillInfo * > ( hBlow - > GetParentSkillInfo ( ) ) ;
if ( pSkillInfo & & pSkillInfo - > hSkillUser = = m_hActor )
{
int nBlowID = hBlow - > GetBlowID ( ) ;
hActor - > SendRemoveStateEffectFromID ( nBlowID ) ; //<2F> <> <EFBFBD> <EFBFBD> <20> <> Ŷ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
hActor - > GetStateBlow ( ) - > RemoveImediatlyStateEffectFromID ( nBlowID ) ; //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
}
}
}
}
}
}
//////////////////////////////////////////////////////////////////////////
}
// <20> <> ų<EFBFBD> <C5B3> <20> <EFBFBD> <DEB7> ִ<EFBFBD> Processor <20> <> <20> ߿<EFBFBD> <20> <> ó<EFBFBD> <C3B3> <20> ؾ<EFBFBD> <D8BE> ϴ<EFBFBD> <20> ͵<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ó<> <C3B3> .
void CDnSkill : : CheckProcessorOnBegin ( void )
{
CheckChangeActionStrByBubbleProcessor ( ) ;
CheckStateEffectApplyOnOffByBubbleProcessor ( ) ;
}
void CDnSkill : : CheckChangeActionStrByBubbleProcessor ( void )
{
CDnChangeActionStrByBubbleProcessor * pProcessor = static_cast < CDnChangeActionStrByBubbleProcessor * > ( GetProcessor ( IDnSkillProcessor : : CHANGE_ACTIONSTR_BY_BUBBLE ) ) ;
if ( pProcessor )
{
bool bChanged = false ;
const char * pChangedActionName = pProcessor - > GetChangeActionNameAndRemoveNeedBubble ( & bChanged ) ;
if ( bChanged )
{
// <20> <EFBFBD> <D7BC> <EFBFBD> <20> ٲ<EFBFBD> <D9B2> ش<EFBFBD> .
CDnPlayAniProcess * pPlayAniProcessor = static_cast < CDnPlayAniProcess * > ( GetProcessor ( IDnSkillProcessor : : PLAY_ANI ) ) ;
if ( pPlayAniProcessor )
pPlayAniProcessor - > ChangeActionNameOnce ( pChangedActionName ) ;
}
}
}
void CDnSkill : : CheckStateEffectApplyOnOffByBubbleProcessor ( void )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ű<EFBFBD> <C5B0> Processor
CDnStateEffectApplyOnOffByBubbleProcessor * pProcessor = static_cast < CDnStateEffectApplyOnOffByBubbleProcessor * > ( GetProcessor ( IDnSkillProcessor : : STATE_EFFECT_APPLY_ONOFF_BY_BUBBLE ) ) ;
if ( pProcessor )
{
pProcessor - > SelectAvailableSE ( m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] ) ;
}
}
void CDnSkill : : OnBegin ( LOCAL_TIME LocalTime , float fDelta )
{
ApplyAddtionalStateInfo ( ) ;
// <20> <> <EFBFBD> ϵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> <DEBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
boost : : shared_ptr < IDnObserverNotifyEvent > pNotifyEvent ( new CDnUseSkillMessage ) ;
boost : : shared_ptr < CDnUseSkillMessage > pSkillUseEvent = shared_polymorphic_downcast < CDnUseSkillMessage > ( pNotifyEvent ) ;
pSkillUseEvent - > SetSkillID ( m_iSkillID ) ;
CDnObservable : : Notify ( pNotifyEvent ) ;
CheckProcessorOnBegin ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> ۷ ι <DBB7> ID <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> ٸ<EFBFBD> <20> ۷ ι <DBB7> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͽ<EFBFBD> <20> <> <EFBFBD> õ<EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
m_fAnotherGlobalSkillCoolTime = 0.0f ;
m_nAnotherGlobakSkillID = 0 ;
m_SkillStartTime = LocalTime ;
//m_LastAuraCheckTime = 0;
# if defined( PRE_ADD_ACADEMIC ) // <20> <> ȯ<EFBFBD> <C8AF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ƽ <EFBFBD> <C6BC> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ʿ䰡 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> .
if ( m_eDurationType ! = DurationTypeEnum : : ActiveToggleForSummon )
//OnBeginCoolTime();
{
//--------------------------------------------------
//[debug_skill] server
//<2F> <> <EFBFBD> ܴ<EFBFBD> <DCB4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//Ѹ<> <D1B8> ն=6001 <20> <> <EFBFBD> ζ<EFBFBD> <CEB6> <EFBFBD> =6003 <20> 콵<EFBFBD> <ECBDB5> <EFBFBD> <EFBFBD> =6204 <20> <> <EFBFBD> ȴ<EFBFBD> <C8B4> <EFBFBD> =6208
if ( 6001 = = GetClassID ( ) | | 6003 = = GetClassID ( ) | | 6204 = = GetClassID ( ) | | 6208 = = GetClassID ( ) )
{
//int nSkillID = GetClassID();
}
else
{
OnBeginCoolTime ( ) ;
}
//--------------------------------------------------
}
# else
//--------------------------------------------------
//[debug_skill] server
//<2F> <> <EFBFBD> ܴ<EFBFBD> <DCB4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//Ѹ<> <D1B8> ն=6001 <20> <> <EFBFBD> ζ<EFBFBD> <CEB6> <EFBFBD> =6003 <20> 콵<EFBFBD> <ECBDB5> <EFBFBD> <EFBFBD> =6204 <20> <> <EFBFBD> ȴ<EFBFBD> <C8B4> <EFBFBD> =6208
if ( 6001 = = GetClassID ( ) | | 6003 = = GetClassID ( ) | | 6204 = = GetClassID ( ) | | 6208 = = GetClassID ( ) )
{
int nSkillID = GetClassID ( ) ;
}
else
{
OnBeginCoolTime ( ) ;
}
//--------------------------------------------------
# endif
m_LastTimeToggleMPDecreaseTime = LocalTime ;
m_bFinished = false ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ҹ<EFBFBD> <D2B8> <EFBFBD> <20> <> <EFBFBD> õǾ<C3B5> <C7BE> ִٸ<D6B4> <20> Ҹ<EFBFBD> <D2B8> ϵ<EFBFBD> <CFB5> <EFBFBD> ó<> <C3B3> .
bool bCheckNeedItem = true ;
if ( GetRoom ( ) & & bIsExtremitySkill ( ) & & static_cast < CDNGameRoom * > ( GetRoom ( ) ) - > bIsLadderRoom ( ) ) // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ñر<C3B1> <20> <> ų
bCheckNeedItem = false ;
if ( bCheckNeedItem & & m_iNeedItemID [ m_iSelectedSkillLevelDataApplyType ] > 0 )
{
if ( m_hActor & & m_hActor - > IsPlayerActor ( ) )
{
CDNUserItem * pUserItem = static_cast < CDnPlayerActor * > ( m_hActor . GetPointer ( ) ) - > GetUserSession ( ) - > GetItem ( ) ;
//int iNeedItemSlotIndex = pUserItem->FindInventorySlot( m_iNeedItemID, m_iNeedItemDecreaseCount );
if ( ! pUserItem - > DeleteInventoryByItemID ( m_iNeedItemID [ m_iSelectedSkillLevelDataApplyType ] , m_iNeedItemDecreaseCount [ m_iSelectedSkillLevelDataApplyType ] , DBDNWorldDef : : UseItem : : Use ) ) return ;
}
}
if ( ActiveToggle ! = m_eDurationType & & TimeToggle ! = m_eDurationType & & ActiveToggleForSummon ! = m_eDurationType )
{
CheckAndAddSelfStateEffect ( ) ;
}
int iNumProcessor = ( int ) m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int iProcessor = 0 ; iProcessor < iNumProcessor ; + + iProcessor )
{
IDnSkillProcessor * pProcessor = m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . at ( iProcessor ) ;
pProcessor - > OnBegin ( LocalTime , fDelta , GetMySmartPtr ( ) ) ;
}
if ( false = = m_bItemSkill )
{
m_hActor - > SetSkillSuperAmmor ( int ( m_hActor - > GetSuperAmmor ( ) * m_fStartSuperArmor ) ) ;
m_hActor - > SetHittable ( m_bStartCanHit ) ;
}
// <20> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ȳ ó<> <C3B3> .
_OnBeginProcessException ( ) ;
if ( m_hActor - > IsPlayerActor ( ) & & 0.0f ! = m_fResetCooltime )
{
int nRand = _rand ( m_hActor - > GetRoom ( ) ) % 100 ;
if ( nRand < ( int ) ( m_fResetCooltime * 100 ) )
{
static_cast < CDnPlayerActor * > ( m_hActor . GetPointer ( ) ) - > RequestCooltimeReset ( m_iSkillID ) ;
m_fCoolTime = 0.0f ;
m_fLeftDelayTime = 0.0f ;
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
m_fDeltaGlobalCoolTime = 0.0f ;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
}
}
# if defined(PRE_ADD_50903)
//<2F> <> ų <20> <> <EFBFBD> ۵ ɶ<DBB5> <20> <> <EFBFBD> <EFBFBD> <20> <> Ŵ..
SetHitCountForVarianceDamage ( 0 ) ;
# endif // PRE_ADD_50903
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ߵ <EFBFBD> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> ÿ<EFBFBD> ó<> <C3B3>
void CDnSkill : : ProcessExecute ( LOCAL_TIME LocalTime , float fDelta )
{
switch ( m_eDurationType )
{
case DurationTypeEnum : : TimeToggle :
break ;
case DurationTypeEnum : : Aura :
break ;
}
// <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> μ<EFBFBD> <CEBC> <EFBFBD> ó<> <C3B3>
int iNumProcessor = ( int ) m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int iProcessor = 0 ; iProcessor < iNumProcessor ; + + iProcessor )
{
IDnSkillProcessor * pProcessor = m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . at ( iProcessor ) ;
pProcessor - > Process ( LocalTime , fDelta ) ;
}
// -1 <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ó<> <C3B3> <20> <> <EFBFBD> <EFBFBD> Ű<EFBFBD> <C5B0> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִµ<D6B4> <C2B5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ߵ <EFBFBD> <DFB5> Ǵ<EFBFBD> <20> <> ų.
if ( - 1.0f ! = m_fPassiveActionSkillLength )
{
m_fPassiveActionSkillLength - = fDelta ;
if ( m_fPassiveActionSkillLength < 0.0f )
{
m_fPassiveActionSkillLength = 0.0f ;
}
}
}
void CDnSkill : : OnEnd ( LOCAL_TIME LocalTime , float fDelta )
{
CheckAndRemoveInstantApplySelfStateEffect ( ) ;
//<2F> <> <EFBFBD> ξ<CEBE> <EEBFA1> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD>
RemovePrefixBlow ( ) ;
int iNumProcessor = ( int ) m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int iProcessor = 0 ; iProcessor < iNumProcessor ; + + iProcessor )
{
IDnSkillProcessor * pProcessor = m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . at ( iProcessor ) ;
pProcessor - > OnEnd ( LocalTime , fDelta ) ;
}
m_SkillInfo - > bIgnoreImmune = m_isIgnoreImmuneBackup ;
CheckProcessorOnEnd ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȭ<EFBFBD> <C8AD> <20> <> <EFBFBD> ¶<EFBFBD> <C2B6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
if ( m_bEnchantedFromBubble )
{
ReleaseEnchantSkill ( ) ;
m_bEnchantedFromBubble = false ;
}
RemoveAddtionalStateInfo ( ) ;
# if defined(PRE_FIX_64312)
if ( m_isAppliedSummonMonsterEnchantSkill = = true )
{
ReleaseEnchantSkill ( ) ;
m_isAppliedSummonMonsterEnchantSkill = false ;
}
# endif // PRE_FIX_64312
}
void CDnSkill : : CheckProcessorOnEnd ( void )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ű<EFBFBD> <C5B0> Processor
CDnStateEffectApplyOnOffByBubbleProcessor * pProcessor = static_cast < CDnStateEffectApplyOnOffByBubbleProcessor * > ( GetProcessor ( IDnSkillProcessor : : STATE_EFFECT_APPLY_ONOFF_BY_BUBBLE ) ) ;
if ( pProcessor )
{
pProcessor - > RestoreSEList ( m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] ) ;
}
}
// <20> <> Ÿ<> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3>
void CDnSkill : : Process ( LOCAL_TIME LocalTime , float fDelta )
{
if ( TIME_ACCELERATION_SKILL_ID ! = m_iSkillID & & SPRIT_BOOST_SKILL_ID ! = m_iSkillID )
fDelta * = m_hActor - > GetCoolTimeDeltaAdjustValue ( ) ;
float fTempAdjustValue = m_fCoolTimeAdjustBlowValue ;
fTempAdjustValue * = m_fCoolTimeMultipier ;
switch ( m_eDurationType )
{
case DurationTypeEnum : : Instantly :
case DurationTypeEnum : : Buff :
case DurationTypeEnum : : Debuff :
case DurationTypeEnum : : SummonOnOff :
case DurationTypeEnum : : StanceChange :
{
if ( 0.0f = = m_fOnceElapsedDelayTime )
{
if ( m_fLeftDelayTime = = 0.0f ) return ;
m_fLeftDelayTime - = fDelta ;
if ( m_fLeftDelayTime < 0.f )
{
m_fLeftDelayTime = 0.f ;
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
m_fDeltaGlobalCoolTime = 0.0f ;
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
}
// [2011/03/09 semozz]
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŀ<EFBFBD> <C4BF> <20> <> ų<EFBFBD> <C5B3> <20> <> Ÿ<EFBFBD> ӿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> fTempAdjustValue<75> <65> 0<> ̵Ǵ<CCB5> <20> <> <EFBFBD> 찡 <20> <EFBFBD> ..
// <20> <> <EFBFBD> <EFBFBD> ó<> <C3B3> <20> ߰<EFBFBD>
float fTempDelayTime = ( GetDelayTime ( ) * fTempAdjustValue ) ;
if ( fTempDelayTime = = 0.0f )
m_fCoolTime = 0.0f ;
else
m_fCoolTime = ( 1.0f / fTempDelayTime ) * m_fLeftDelayTime ;
}
else
{
if ( m_fOnceElapsedDelayTime = = 0.0f )
{
m_fOnceDelayTime = 0.0f ;
return ;
}
m_fOnceElapsedDelayTime - = fDelta ;
if ( m_fOnceElapsedDelayTime < 0.0f )
m_fOnceElapsedDelayTime = 0.0f ;
m_fCoolTime = ( 1.0f / ( m_fOnceDelayTime * m_fCoolTimeAdjustBlowValue ) ) * m_fOnceElapsedDelayTime ;
}
}
break ;
case DurationTypeEnum : : TimeToggle :
break ;
case DurationTypeEnum : : ActiveToggle :
case DurationTypeEnum : : ActiveToggleForSummon :
break ;
case DurationTypeEnum : : Aura :
break ;
}
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ¶<EFBFBD> <C2B6> <EFBFBD> <20> <> <EFBFBD> õ<EFBFBD> <20> ۷ ι <DBB7> <20> <> ų <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> ٽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
if ( 0.0f < m_fAnotherGlobalSkillCoolTime & & 0.0f = = m_fCoolTime )
{
m_fAnotherGlobalSkillCoolTime = 0.0f ;
m_nAnotherGlobakSkillID = 0 ;
}
}
bool CDnSkill : : IsFinished ( void )
{
bool bResult = false ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> <20> ̵<EFBFBD> <20> ϱ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( Aura = = m_eDurationType )
return IsFinishedAuraSkill ( ) ;
if ( m_bFinished )
return m_bFinished ;
if ( m_bChainingPassiveSkill )
return false ;
// MP <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ҹ<EFBFBD> <D2B8> ϴ<EFBFBD> <20> <> ų<EFBFBD> ϰ<EFBFBD> <CFB0> <EFBFBD> <20> <> <EFBFBD> Ǹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ͽ<EFBFBD> <CFBF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ݴϴ<DDB4> .
if ( 0.0f < m_fPassiveActionSkillLength | | - 1.0f = = m_fPassiveActionSkillLength )
{
float fDecreaseMPRatio = 0.f ;
DNVector ( DnBlowHandle ) vlhBlows ;
m_hActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_014 , vlhBlows ) ;
for ( DWORD i = 0 ; i < vlhBlows . size ( ) ; i + + )
{
if ( vlhBlows [ i ] & & vlhBlows [ i ] - > GetParentSkillInfo ( ) - > iSkillID = = GetClassID ( ) )
{
fDecreaseMPRatio = vlhBlows [ i ] - > GetFloatValue ( ) ;
break ;
}
}
if ( m_hActor - > GetSP ( ) < m_iNeedMP [ m_iSelectedSkillLevelDataApplyType ] & & fDecreaseMPRatio < 0.f )
return true ;
return false ;
}
# ifdef PRE_FIX_76603
if ( m_hActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_232 ) )
{
DNVector ( DnBlowHandle ) vlBlows ;
m_hActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_232 , vlBlows ) ;
for ( DWORD i = 0 ; i < vlBlows . size ( ) ; i + + )
{
if ( vlBlows [ i ] )
{
CDnTransformBlow * pTransformBlow = static_cast < CDnTransformBlow * > ( vlBlows [ i ] . GetPointer ( ) ) ;
if ( pTransformBlow & & pTransformBlow - > GetParentSkillInfo ( ) - > iSkillID = = GetClassID ( ) )
{
if ( pTransformBlow - > CheckSkillDefendency ( ) = = true )
return false ;
}
}
}
}
# endif
if ( m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . empty ( ) )
bResult = true ;
else
{
int iNumProcessor = ( int ) m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int iProcessor = 0 ; iProcessor < iNumProcessor ; + + iProcessor )
{
IDnSkillProcessor * pProcessor = m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . at ( iProcessor ) ;
if ( true = = pProcessor - > IsFinished ( ) )
bResult = true ;
else
{
bResult = false ;
break ;
}
}
}
// lazy evaluation
m_bFinished = bResult ;
return bResult ;
}
IDnSkillProcessor * CDnSkill : : GetProcessor ( int iType )
{
IDnSkillProcessor * pResult = NULL ;
int iNumProcessor = ( int ) m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int iProcessor = 0 ; iProcessor < iNumProcessor ; + + iProcessor )
{
IDnSkillProcessor * pSkillProcessor = m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . at ( iProcessor ) ;
if ( iType = = pSkillProcessor - > GetType ( ) )
{
pResult = pSkillProcessor ;
break ;
}
}
return pResult ;
}
IDnSkillProcessor * CDnSkill : : GetProcessor ( int iType , int iLevelDataApplyType )
{
IDnSkillProcessor * pResult = NULL ;
int iNumProcessor = ( int ) m_vlpProcessors [ iLevelDataApplyType ] . size ( ) ;
for ( int iProcessor = 0 ; iProcessor < iNumProcessor ; + + iProcessor )
{
IDnSkillProcessor * pSkillProcessor = m_vlpProcessors [ iLevelDataApplyType ] . at ( iProcessor ) ;
if ( iType = = pSkillProcessor - > GetType ( ) )
{
pResult = pSkillProcessor ;
break ;
}
}
return pResult ;
}
void CDnSkill : : CheckTargetCount ( int iTargetActorCount )
{
// <20> ϴ<EFBFBD> <CFB4> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̸<EFBFBD> <CCB8> <EFBFBD> <EEBFA1> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̰<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> ..
IDnSkillProcessor * pProcessor = GetProcessor ( IDnSkillProcessor : : DIVIDE_STATE_EFFECT_ARG ) ;
if ( pProcessor )
{
// <20> 극<EFBFBD> <EAB7B9> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> θ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> ⼭ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> ϰ<EFBFBD> <20> մϴ<D5B4> .
_ASSERT ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> κ<EFBFBD> <CEBA> <EFBFBD> <20> 극<EFBFBD> <EAB7B9> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Դϴ<D4B4> ..." & & m_iSkillID = = 3004 ) ;
CDnDivideSEArgumentByTargets * pDivideSEProcessor = static_cast < CDnDivideSEArgumentByTargets * > ( pProcessor ) ;
int iSEArgument = pDivideSEProcessor - > GetStateEffectArgument ( ) ;
// <20> ڱ<EFBFBD> <20> ڽű<DABD> <C5B1> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> <20> ϳ <EFBFBD> <20> <> <20> ߰<EFBFBD>
int iDividedValue = iSEArgument / ( iTargetActorCount + 1 ) ;
int iNumStateEffect = ( int ) m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
char acBuf [ 256 ] ;
for ( int iStateEffect = 0 ; iStateEffect < iNumStateEffect ; + + iStateEffect )
{
ZeroMemory ( acBuf , sizeof ( acBuf ) ) ;
StateEffectStruct & StateEffect = m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . at ( iStateEffect ) ;
itoa ( iDividedValue , acBuf , 10 ) ;
StateEffect . szValue . assign ( acBuf ) ;
// <20> ڱ<EFBFBD> <20> ڽſ <DABD> <C5BF> Ե<EFBFBD> <20> ߰<EFBFBD>
int iID = m_hActor - > CmdAddStateEffect ( /*m_hActor,*/ GetInfo ( ) , ( STATE_BLOW : : emBLOW_INDEX ) StateEffect . nID ,
StateEffect . nDurationTime , StateEffect . szValue . c_str ( ) ) ;
}
}
# if defined(PRE_ADD_50903)
SetHitCountForVarianceDamage ( iTargetActorCount ) ;
# endif // PRE_ADD_50903
}
void CDnSkill : : CheckAndAddSelfStateEffect ( void )
{
map < int , bool > mapDuplicateResult ; // <20> ڱ<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> Ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <20> <> ø ó<> <C3B3> <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
CanApply eResult = CDnSkill : : CanApplySkillStateEffect ( m_hActor , GetMySmartPtr ( ) , mapDuplicateResult ) ;
if ( CanApply : : Fail ! = eResult )
{
int nID ( - 1 ) ;
StateEffectStruct * pStruct ( NULL ) ;
// Note <20> ѱ<EFBFBD> : 2009.12.21
// <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <20> <> <EFBFBD> <EFBFBD> (#1911)
// <20> ڱ<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> ã<> Ƽ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> 쿣 playaniprocessor <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> κп<CEBA> <D0BF> <EFBFBD> <20> ɷ<EFBFBD> <C9B7> <EFBFBD> <EFBFBD> <EFBFBD> .
// <20> ڱ<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Ÿ<> ̹<EFBFBD> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ŀ<EFBFBD> <20> нú<D0BD> <C3BA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <EFBFBD> <20> <> ų<EFBFBD> 鵵 <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Ÿ<> ̹<EFBFBD> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> <20> ʿ<EFBFBD> <CABF> ϴٸ<CFB4>
// <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> <EFBFBD> <20> ۾<EFBFBD> <DBBE> <EFBFBD> <20> ʿ<EFBFBD> <CABF> ϴ<EFBFBD> .
bool bUseApplySelfStateBlowSignal = false ;
CDnPlayAniProcess * pPlayAniProcessor = static_cast < CDnPlayAniProcess * > ( GetProcessor ( IDnSkillProcessor : : PLAY_ANI ) ) ;
if ( pPlayAniProcessor )
{
const char * pActionName = pPlayAniProcessor - > GetActionName ( ) ;
CEtActionBase : : ActionElementStruct * pActionElement = m_hActor - > GetElement ( pActionName ) ;
_ASSERT ( pActionElement ) ;
if ( pActionElement )
{
int iApplyStateEffectSignalCount = 0 ;
int iNumSignal = ( int ) pActionElement - > pVecSignalList . size ( ) ;
for ( int iSignal = 0 ; iSignal < iNumSignal ; + + iSignal )
{
CEtActionSignal * pSignal = pActionElement - > pVecSignalList . at ( iSignal ) ;
if ( STE_ApplyStateEffect = = pSignal - > GetSignalIndex ( ) )
{
bUseApplySelfStateBlowSignal = true ;
+ + iApplyStateEffectSignalCount ;
}
}
}
}
for ( DWORD i = 0 ; i < m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ; i + + )
{
pStruct = & m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] [ i ] ;
if ( ! pStruct )
continue ;
// <20> <> <EFBFBD> <EFBFBD> Ÿ<EFBFBD> Կ<EFBFBD> <D4BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> Ʈ<EFBFBD> <C6AE> <20> ϴ<EFBFBD> <20> <> <EFBFBD> 찡 <20> <> <EFBFBD> <EFBFBD> . (<28> <> <EFBFBD> <EFBFBD> ũ<EFBFBD> <C5A9> <EFBFBD> <EFBFBD> <20> ظӸ<D8B8> )
if ( pStruct - > bApplyInProcessor )
continue ;
if ( pStruct - > ApplyType = = ApplySelf )
{
// <20> <EFBFBD> <D7BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> <20> ڱ<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> .
if ( 0 = = pStruct - > nDurationTime | | - 1 = = pStruct - > nDurationTime )
{
// <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <EFBFBD> <EFBFBD> 0<> <30> <EFBFBD> <EFBFBD> <20> ϳ <EFBFBD> -1<> <31> <20> ϳ <EFBFBD> <20> <> <EFBFBD> α <CEB1> <D7B7> ʿ<EFBFBD> <CABF> <EFBFBD> -1<> <31> <20> <> <EFBFBD> ؽ<EFBFBD> Ŵ
pStruct - > nDurationTime = - 1 ;
// <20> ѱ<EFBFBD> 2009.7.27
// <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <20> <> <EFBFBD> <EFBFBD> (#1911)
// <20> <> ų <20> <> ȭ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ƴϹ Ƿ<CFB9>
// <20> ڱ<EFBFBD> <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> Ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Ÿ<> ̹<EFBFBD> <20> ñ׳ <C3B1> <D7B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> ٷ<EFBFBD> <20> ߰<EFBFBD> .
if ( bUseApplySelfStateBlowSignal & & ( 0 = = pStruct - > nGlyphID ) )
{
StateEffectStruct InstantSelfStateEffect = * pStruct ;
InstantSelfStateEffect . nDurationTime = pStruct - > nDurationTime ;
m_hActor - > AddStateEffectQueue ( * GetInfo ( ) , InstantSelfStateEffect ) ;
SetAddStateEffectQueue ( true ) ;
}
else
{
// [2010/12/13 semozz]
// <20> <> <EFBFBD> <EFBFBD> <20> <> Ŷ <20> <> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <20> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> m_vlApplyNoPacketStateEffectList<73> <74> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> µ<EFBFBD> ,
// <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> , m_vlApplyNoPacketStateEffectList<73> <74> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> .
// #32160 <20> ٲ<EFBFBD> <20> <> ų <20> <> ø ó<> <C3B3> <20> <> ƾ<EFBFBD> <C6BE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ǵ<EFBFBD> <C7B5> <EFBFBD> ó<> <C3B3> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ӹ<EFBFBD> <20> ƴ϶<C6B4> ApplyStateEffect <20> ñ׳ <C3B1> <20> <> <20> پ<EFBFBD> <D9BE> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> ⼭ <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ߰<EFBFBD> <20> ǹǷ<C7B9> <20> <> <EFBFBD> ߵ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
m_hActor - > RemoveResetStateBlow ( ) ;
nID = m_hActor - > CmdAddStateEffect ( GetInfo ( ) , ( STATE_BLOW : : emBLOW_INDEX ) pStruct - > nID , pStruct - > nDurationTime , pStruct - > szValue . c_str ( ) ) ;
if ( - 1 = = nID )
continue ;
// Note <20> ѱ<EFBFBD> : <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> 1<> <31> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ÿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ƽ <DEBE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ<> <C5AC> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 鼭 <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> .. HP <20> <> <EFBFBD> <EFBFBD> Ʋ<> <C6B2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( m_bItemSkill )
{
DnBlowHandle hBlow = m_hActor - > GetStateBlowFromID ( nID ) ;
hBlow - > OnBegin ( 0 , 0.0f ) ;
# ifndef _GAMESERVER
if ( hBlow - > IsUseTableDefinedGraphicEffect ( ) )
hBlow - > AttachGraphicEffectDefaultType ( ) ;
# endif
m_hActor - > OnBeginStateBlow ( hBlow ) ;
hBlow - > SetState ( STATE_BLOW : : STATE_DURATION ) ;
}
m_vlApplySelfNoDurationStateEffectList . push_back ( nID ) ;
}
}
else
{
// <20> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> ִ<EFBFBD> self <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF>
if ( bUseApplySelfStateBlowSignal & & ( 0 = = pStruct - > nGlyphID ) )
{
m_hActor - > AddStateEffectQueue ( * GetInfo ( ) , * pStruct ) ;
SetAddStateEffectQueue ( true ) ;
}
else
{
// #32160 <20> ٲ<EFBFBD> <20> <> ų <20> <> ø ó<> <C3B3> <20> <> ƾ<EFBFBD> <C6BE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ǵ<EFBFBD> <C7B5> <EFBFBD> ó<> <C3B3> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ӹ<EFBFBD> <20> ƴ϶<C6B4> ApplyStateEffect <20> ñ׳ <C3B1> <20> <> <20> پ<EFBFBD> <D9BE> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> ⼭ <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ߰<EFBFBD> <20> ǹǷ<C7B9> <20> <> <EFBFBD> ߵ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
m_hActor - > RemoveResetStateBlow ( ) ;
nID = m_hActor - > CmdAddStateEffect ( /*m_hActor,*/ GetInfo ( ) , ( STATE_BLOW : : emBLOW_INDEX ) pStruct - > nID ,
pStruct - > nDurationTime , pStruct - > szValue . c_str ( ) ) ;
if ( - 1 = = nID )
continue ;
}
}
}
}
}
}
void CDnSkill : : CheckAndRemoveInstantApplySelfStateEffect ( void )
{
for ( DWORD i = 0 ; i < m_vlApplySelfNoDurationStateEffectList . size ( ) ; i + + )
{
if ( m_hActor )
m_hActor - > CmdRemoveStateEffectFromID ( m_vlApplySelfNoDurationStateEffectList [ i ] ) ;
}
if ( m_hActor )
{
// #40768 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> MASkillUser::m_hItemSkill <20> <> MASkillUser::m_hProcessSkill <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD>
// m_hItemSkill <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ<EFBFBD> <CAB4> <EFBFBD> <EFBFBD> <EFBFBD> m_hProcessSkill <20> <> <20> <> <EFBFBD> ۵ <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> <20> <> <EFBFBD> ¿<EFBFBD> <C2BF> <EFBFBD>
// m_hItemSkill <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> <> <20> Լ<EFBFBD> <D4BC> <EFBFBD> ȣ <> <C8A3> <EFBFBD> Ǹ<EFBFBD> m_hProcessSkill <20> <> <20> <> <EFBFBD> ϵ<EFBFBD> BlowQueue <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȴ<EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> Ѵ <EFBFBD> .
//#40760
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̻<EFBFBD> <20> <> ų <20> ߵ <EFBFBD> <DFB5> ɶ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD>
//<2F> <> <EFBFBD> ̻<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ʒ <EFBFBD> <20> Լ<EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ؼ<EFBFBD> ť<> <C5A5> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 찡 <20> <EFBFBD> .
//AddStateEffectQueueȣ <65> <C8A3> <20> <> SetAddStateEffectQueue(true)<29> <> <20> ÷<EFBFBD> <C3B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD>
//<2F> ÷<EFBFBD> <C3B7> װ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> ť<> <C5A5> <20> ʱ<EFBFBD> ȭ <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> Ѵ <EFBFBD> ..
if ( IsAddStateEffectQueue ( ) )
m_hActor - > ClearSelfStateSignalBlowQueue ( IsItemSkill ( ) ) ;
}
SAFE_DELETE_VEC ( m_vlApplySelfNoDurationStateEffectList ) ;
}
DWORD CDnSkill : : GetStateEffectCount ( void )
{
return ( DWORD ) m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
}
CDnSkill : : StateEffectStruct * CDnSkill : : GetStateEffectFromIndex ( DWORD dwIndex )
{
if ( dwIndex > = m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ) return NULL ;
return & m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] [ dwIndex ] ;
}
bool CDnSkill : : IsUseCheckerType ( int iCheckerType )
{
bool bResult = false ;
int iNumChecker = ( int ) m_vlpUsableCheckers [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int iChecker = 0 ; iChecker < iNumChecker ; + + iChecker )
{
if ( m_vlpUsableCheckers [ m_iSelectedSkillLevelDataApplyType ] . at ( iChecker ) - > GetType ( ) = = iCheckerType )
{
bResult = true ;
break ;
}
}
return bResult ;
}
bool CDnSkill : : IsUseProcessorType ( int iProcessorType )
{
bool bResult = false ;
int iNumProcessor = ( int ) m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int iProcessor = 0 ; iProcessor < iNumProcessor ; + + iProcessor )
{
if ( m_vlpProcessors [ m_iSelectedSkillLevelDataApplyType ] . at ( iProcessor ) - > GetType ( ) = = iProcessorType )
{
bResult = true ;
break ;
}
}
return bResult ;
}
CDnSkill : : SkillTypeEnum CDnSkill : : GetSkillType ( int nSkillID )
{
if ( nSkillID < = 0 ) return SkillTypeEnum : : Active ;
DNTableFileFormat * pSkillTable = GetDNTable ( CDnTableDB : : TSKILL ) ;
if ( pSkillTable - > IsExistItem ( nSkillID ) = = false ) return SkillTypeEnum : : Active ;
return ( SkillTypeEnum ) pSkillTable - > GetFieldFromLablePtr ( nSkillID , " _SkillType " ) - > GetInteger ( ) ;
}
bool CDnSkill : : IsUseActionNames ( const set < string > & setUseActionNames )
{
list < string > listIntersect ;
set_intersection ( setUseActionNames . begin ( ) , setUseActionNames . end ( ) ,
m_setUseActionNames . begin ( ) , m_setUseActionNames . end ( ) ,
back_inserter ( listIntersect ) ) ;
return ! listIntersect . empty ( ) ;
}
void CDnSkill : : _RefreshDecreaseMP ( int iSkillLevelDataApplyType )
{
if ( 0.0f = = m_fMPConsumeType [ iSkillLevelDataApplyType ] )
{
if ( ! m_hActor | | m_hActor - > IsMonsterActor ( ) ) {
m_iNeedMP [ iSkillLevelDataApplyType ] = m_iDecreaseMP [ iSkillLevelDataApplyType ] ;
return ;
}
if ( m_hActor - > IsPlayerActor ( ) )
{
# ifndef _ADD_NEW_MPCONSUME
float fRatio = 1.f ;
if ( m_hActor - > GetLevel ( ) > 0 )
{
int nJobClassID = ( ( CDnPlayerActor * ) m_hActor . GetPointer ( ) ) - > GetJobClassID ( ) ;
float fDecreaseRatio = CPlayerLevelTable : : GetInstance ( ) . GetValueFloat ( nJobClassID , m_hActor - > GetLevel ( ) , CPlayerLevelTable : : SPDecreaseRatio ) ;
fRatio = fDecreaseRatio * m_hActor - > GetLevelWeightValue ( ) ;
}
m_iNeedMP [ iSkillLevelDataApplyType ] = ( int ) ( m_iDecreaseMP [ iSkillLevelDataApplyType ] * fRatio ) ;
# else
m_iNeedMP [ iSkillLevelDataApplyType ] = ( int ) ( m_iDecreaseMP [ iSkillLevelDataApplyType ] ) ;
# endif
}
}
else
{
m_iNeedMP [ iSkillLevelDataApplyType ] = int ( ( float ) m_hActor - > GetMaxSP ( ) * m_fMPConsumeType [ iSkillLevelDataApplyType ] ) ;
}
m_iOriginalNeedMP [ iSkillLevelDataApplyType ] = m_iNeedMP [ iSkillLevelDataApplyType ] ;
}
void CDnSkill : : RefreshDecreaseMP ( int iSkillLevelDataApplyType /*= NUM_SKILLLEVEL_APPLY_TYPE*/ )
{
if ( iSkillLevelDataApplyType = = NUM_SKILLLEVEL_APPLY_TYPE )
{
for ( int iApplyType = PVE ; iApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iApplyType )
_RefreshDecreaseMP ( iApplyType ) ;
}
else
{
_RefreshDecreaseMP ( iSkillLevelDataApplyType ) ;
}
}
void CDnSkill : : SetOnceCoolTime ( float fDelayTime , float fElapsedDelayTime )
{
_ASSERT ( fElapsedDelayTime < = fDelayTime ) ;
m_fOnceDelayTime = fDelayTime ;
m_fOnceElapsedDelayTime = fElapsedDelayTime ;
}
void CDnSkill : : SetPassiveSkillActionName ( const char * pActionName )
{
if ( pActionName )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> <DAB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
m_setUseActionNames . insert ( string ( pActionName ) ) ;
}
}
// <20> ̽<EFBFBD> #6190 <20> <> <EFBFBD> <EFBFBD> .
CDnSkill : : CanApply CDnSkill : : CanApplySkillStateEffect ( const SkillInfo * pUsingSkillInfo , DnActorHandle hTargetActor , int iSkillID , int iLevel ,
int iSkillDuplicateMethod , int iDuplicateCount , map < int , bool > & mapDuplicateResult , bool isHitProcess )
{
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ˻<EFBFBD> <CBBB> Ҷ<EFBFBD> <20> <> <EFBFBD> ¸ <EFBFBD> <C2B8> <EFBFBD> Ʈ <20> ʱ<EFBFBD> ȭ [2010/12/09 semozz]
if ( hTargetActor )
hTargetActor - > InitStateBlowIDToRemove ( ) ;
CDnSkill : : CanApply eResult = CDnSkill : : CanApply : : Apply ;
bool bExistingSameSkill = false ;
int iExistingSameSkillCount = 0 ;
// <20> ߺ <EFBFBD> <DFBA> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ŵ<EFBFBD> <20> ÿ<EFBFBD> <20> <> <EFBFBD> Ƶ״ٰ<D7B4> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
// <20> ٸ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ɷ<EFBFBD> <C9B7> ִ<EFBFBD> <20> <> <EFBFBD> 쵵 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> ݵ<EFBFBD> <DDB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ο <EFBFBD> <CEBF> <EFBFBD> <EFBFBD> <EFBFBD> id <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
vector < int > vlStateBlowIDToRemove ;
DNVector ( DnBlowHandle ) vlhSameSkillBlows ;
int iNumAppliedStateEffect = ( int ) hTargetActor - > GetNumAppliedStateBlow ( ) ;
for ( int iAppliedStateEffect = 0 ; iAppliedStateEffect < iNumAppliedStateEffect ; + + iAppliedStateEffect )
{
DnBlowHandle hExistingBlow = hTargetActor - > GetAppliedStateBlow ( iAppliedStateEffect ) ;
const CDnSkill : : SkillInfo * pExistingParentSkillInfo = NULL ;
if ( hExistingBlow )
pExistingParentSkillInfo = hExistingBlow - > GetParentSkillInfo ( ) ;
// <20> <> ü <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ɸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴϹ Ƿ<CFB9> <20> <> <EFBFBD> ⼭ <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ƴ<EFBFBD>
if ( NULL = = pExistingParentSkillInfo )
continue ;
// <20> <> ų <20> ߺ <EFBFBD> ī<> <C4AB> Ʈ üũ
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> ٸ<EFBFBD> <20> ߺ <EFBFBD> <DFBA> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> .
bool bIsSameSkillID = false ;
# if defined(PRE_FIX_58505)
//<2F> <> <EFBFBD> ̻<EFBFBD> <20> <> ų Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϰ<EFBFBD> ,
//<2F> <> <EFBFBD> ̻<EFBFBD> <20> <> ų Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̻<EFBFBD> <20> <> ų Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( pUsingSkillInfo - > bItemPrefixSkill = = true & & pUsingSkillInfo - > nPrefixSkillType ! = CDnPrefixSkill : : Prefix_Non )
bIsSameSkillID = pUsingSkillInfo - > nPrefixSkillType = = pExistingParentSkillInfo - > nPrefixSkillType ;
else
bIsSameSkillID = iSkillID = = pExistingParentSkillInfo - > iSkillID ;
# else
if ( iSkillID = = pExistingParentSkillInfo - > iSkillID )
bIsSameSkillID = true ;
# endif // PRE_FIX_58505
if ( bIsSameSkillID = = true )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> ̵<EFBFBD> <CCB5> <EFBFBD> ó<> <C3B3> <20> <> <EFBFBD> ´ ٸ<C2B4> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų ī<> <C4AB> Ʈ <20> ϳ <EFBFBD> <20> ÷<EFBFBD> <C3B7> <EFBFBD> .
// #27335 - <20> <> Ŭ<EFBFBD> <C5AC> <20> <> <EFBFBD> <EFBFBD> [2011/01/11 semozz]
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ũ<EFBFBD> <C5A9> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> CantMove<76> <65> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ŭ<EFBFBD> <C5AC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <> <20> ڽſ <DABD> <20> ɸ<EFBFBD> CantMove<76> <65> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> ųID<49> <44> <20> <> <EFBFBD> Ƽ <EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> ߺ <EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> ɸ<EFBFBD> <C9B8> <EFBFBD> <20> <> ..
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> ApplyType<70> <65> Ȯ<> <C8AE> <EFBFBD> ؼ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> Actor<6F> <72> TargetActor<6F> <72> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD>
// <20> <> ȿ<EFBFBD> <C8BF> Actor<6F> <72> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѱ<EFBFBD> <20> ƴϸ<C6B4> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> ƴ<EFBFBD> <C6B4> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
DnActorHandle hSkillUserActor = pUsingSkillInfo - > hSkillUser ;
DnSkillHandle hSkill ;
if ( hSkillUserActor )
hSkill = hSkillUserActor - > FindSkill ( iSkillID ) ;
//Prop<6F> <70> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ִ<EFBFBD> .
if ( hSkill )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ϸ<EFBFBD> <CFB7> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <20> ϳ <EFBFBD> <CFB3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> .
StateEffectApplyType eExistingSEApplyType = ApplySelf ;
bExistingSameSkill = true ;
for ( int i = 0 ; i < ( int ) hSkill - > GetStateEffectCount ( ) ; + + i )
{
const StateEffectStruct * pSE = hSkill - > GetStateEffectFromIndex ( i ) ;
if ( pSE - > nID = = hExistingBlow - > GetBlowIndex ( )
& & pSE - > ApplyType = = pExistingParentSkillInfo - > eApplyType )
{
eExistingSEApplyType = pSE - > ApplyType ;
break ;
}
}
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> applyType<70> <65> <20> <> <EFBFBD> <EFBFBD>
switch ( eExistingSEApplyType )
{
case StateEffectApplyType : : ApplySelf :
if ( isHitProcess = = false )
bExistingSameSkill = ( hTargetActor = = hSkillUserActor ) ;
else
bExistingSameSkill = false ;
break ;
case StateEffectApplyType : : ApplyEnemy :
bExistingSameSkill = ( hTargetActor - > GetTeam ( ) ! = hSkillUserActor - > GetTeam ( ) ) ;
break ;
case StateEffectApplyType : : ApplyTarget :
bExistingSameSkill = ( hTargetActor ! = hSkillUserActor ) ;
break ;
case StateEffectApplyType : : ApplyFriend :
bExistingSameSkill = ( hTargetActor - > GetTeam ( ) = = hSkillUserActor - > GetTeam ( ) ) ;
break ;
case StateEffectApplyType : : ApplyAll :
bExistingSameSkill = true ;
break ;
}
}
else
bExistingSameSkill = true ;
if ( bExistingSameSkill )
{
iExistingSameSkillCount + = hExistingBlow - > GetDuplicateCount ( ) ;
vlhSameSkillBlows . push_back ( hExistingBlow ) ;
}
}
if ( pUsingSkillInfo - > eTargetType = = All //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> TargetType<70> <65> All<6C> ̰<EFBFBD> ,
& & ( 0 ! = iSkillDuplicateMethod & & ( iSkillDuplicateMethod = = pExistingParentSkillInfo - > iSkillDuplicateMethod ) ) //<2F> <> ø ó<> <C3B3> ID<49> <44> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> ְ<EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ID<49> ϶<EFBFBD> ,
& & ( hTargetActor = = pUsingSkillInfo - > hSkillUser ) //<2F> ڱ<EFBFBD> <20> ڽ<EFBFBD>
)
continue ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> 0<> <30> <20> ƴ϶<C6B4> <CFB6> <EFBFBD> <20> <> ų ȿ<> <C8BF> <20> ߺ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <CABF> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> <EFBFBD> 0<> ̸<EFBFBD> <20> ׳ <EFBFBD> <20> <> ø<EFBFBD> <C3B8> .
// Ȥ<> <C8A4> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ̸鼭 <20> ִ<EFBFBD> <20> <> ø ī<> <C4AB> Ʈ<EFBFBD> <C6AE> 1<> <31> <EFBFBD> <EFBFBD> <EFBFBD> ΰ<EFBFBD> <CEB0> 쿣 <20> <> ų <20> <> ü<EFBFBD> ǵ<EFBFBD> <C7B5> <EFBFBD> ó<> <C3B3> .
# if defined(PRE_FIX_58505)
if ( 0 ! = iSkillDuplicateMethod | |
( bIsSameSkillID = = true & & iDuplicateCount < = 1 ) )
# else
if ( 0 ! = iSkillDuplicateMethod | |
( iSkillID = = pExistingParentSkillInfo - > iSkillID & & iDuplicateCount < = 1 ) )
# endif // PRE_FIX_58505
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ǰ<EFBFBD> <20> ִ<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ε<EFBFBD> <CEB5> <EFBFBD> <EFBFBD> ΰ<EFBFBD> . <20> <EFBFBD> <D7B7> ٸ<EFBFBD> <20> <> ø<EFBFBD> <C3B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> <EEB0A3> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> øó<C3B8> <C3B3> <EFBFBD> <EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> Ѵ <EFBFBD> .
// <20> ٸ<EFBFBD> <20> <> <EFBFBD> ε<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ɸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . (#19812)
if ( ( iSkillDuplicateMethod = = pExistingParentSkillInfo - > iSkillDuplicateMethod ) & &
( pUsingSkillInfo - > iSkillUserTeam = = pExistingParentSkillInfo - > iSkillUserTeam ) )
{
if ( iLevel > = pExistingParentSkillInfo - > iLevel )
{
// 242<34> <32> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ѹ<EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> Ǹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǹ<EFBFBD> <20> ȵȴ<C8B5> .
// Ȯ<> <C8AE> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ ٸ<D1B4> <20> <> <EFBFBD> ½<EFBFBD> ų <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ־<EFBFBD> <D6BE> <EFBFBD> .
// <20> <> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> üũ<C3BC> ϴ<EFBFBD> <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> ü<EFBFBD> <C3BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <EFBFBD> <EFBFBD> üũ<C3BC> ϴ<EFBFBD> <20> <> <EFBFBD> ̱<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> ״<EFBFBD> <D7B4> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( hExistingBlow - > CanBegin ( ) )
{
bool isSelfStateEffect = false ;
//#60966 <20> ڽſ <DABD> <C5BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> <D9B8> ̿<EFBFBD> <CCBF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
//<2F> <> ų <20> <> <EFBFBD> ۿ<EFBFBD> <DBBF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , Hitó<74> <C3B3> <EFBFBD> ÿ<EFBFBD> <C3BF> <EFBFBD> self<6C> <66> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ٽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
//<2F> <EFBFBD> <D7B7> <EFBFBD> <20> <> Ʈ ó<> <C3B3> <EFBFBD> Ǵ<EFBFBD> <20> ߿<EFBFBD> <20> <> <EFBFBD> ⼭ self<6C> <66> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//<2F> ٽ<EFBFBD> <20> ߰<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
//<2F> <> Ʈ ó<> <C3B3> <EFBFBD> ÿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> °<EFBFBD> <C2B0> <EFBFBD> Self<6C> <66> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> ŵ..
if ( isHitProcess = = true )
{
StateEffectApplyType eExistingSEApplyType = ApplySelf ;
bool bCheck = false ;
DnActorHandle hExistingSkillUserActor = pExistingParentSkillInfo - > hSkillUser ;
DnSkillHandle hSkill ;
if ( hExistingSkillUserActor )
hSkill = hExistingSkillUserActor - > FindSkill ( pExistingParentSkillInfo - > iSkillID ) ;
if ( hSkill )
{
for ( int i = 0 ; i < ( int ) hSkill - > GetStateEffectCount ( ) ; + + i )
{
const StateEffectStruct * pSE = hSkill - > GetStateEffectFromIndex ( i ) ;
if ( pSE - > nID = = hExistingBlow - > GetBlowIndex ( )
& & pSE - > ApplyType = = pExistingParentSkillInfo - > eApplyType )
{
bCheck = true ;
eExistingSEApplyType = pSE - > ApplyType ;
break ;
}
}
//<2F> ڽſ <DABD> <C5BF> <EFBFBD> <20> Ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> ? <20> Ѵ <EFBFBD> ..
if ( StateEffectApplyType : : ApplySelf = = eExistingSEApplyType & & bCheck )
{
isSelfStateEffect = true ;
}
}
}
if ( isSelfStateEffect = = false & &
hExistingBlow - > GetBlowIndex ( ) ! = STATE_BLOW : : BLOW_242 )
{
vlStateBlowIDToRemove . push_back ( hExistingBlow - > GetBlowID ( ) ) ;
mapDuplicateResult [ hExistingBlow - > GetBlowIndex ( ) ] = true ;
// <20> <> <EFBFBD> µǾ<C2B5> <C7BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> µ<EFBFBD> <C2B5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> . [2010/12/08 semozz]
// <20> <> <EFBFBD> ⼭ <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> µ<EFBFBD> <C2B5> <EFBFBD> OnSignal<61> <6C> STE_ApplyStateEffect <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ҷ<EFBFBD>
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ¸ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
hTargetActor - > AddStateBlowIDToRemove ( hExistingBlow - > GetBlowID ( ) ) ;
}
}
else
{
eResult = CDnSkill : : CanApply : : Fail ; // ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> Ȯ<> <C8AE> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
mapDuplicateResult [ hExistingBlow - > GetBlowIndex ( ) ] = false ;
}
}
else
if ( iLevel < pExistingParentSkillInfo - > iLevel )
{
// ȿ<> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ȵ<EFBFBD> .
eResult = CDnSkill : : CanApply : : Fail ;
// Note <20> ѱ<EFBFBD> : <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <EFBFBD> <D7B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ǥ<> <C7A5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ ٸ<D1B4> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> ϸ<EFBFBD> <20> <> .
// [2011/01/20 semozz]
// ü<> ζ<EFBFBD> <CEB6> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> 콺 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
// A <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <> <20> ڿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǵ<EFBFBD> B<> <42> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , DuplicationMethod<6F> <64> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// <20> <> <EFBFBD> ⼭ <20> <> ų <20> ߰<EFBFBD> <20> ȵ<EFBFBD> <C8B5> <EFBFBD> <EFBFBD> <EFBFBD> Self<6C> <66> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> . Target<65> <74> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ..
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
DnActorHandle hExistingSkillUserActor = pExistingParentSkillInfo - > hSkillUser ;
DnSkillHandle hSkill ;
if ( hExistingSkillUserActor )
hSkill = hExistingSkillUserActor - > FindSkill ( pExistingParentSkillInfo - > iSkillID ) ;
if ( hSkill )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ϸ<EFBFBD> <CFB7> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <20> ϳ <EFBFBD> <CFB3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> .
StateEffectApplyType eExistingSEApplyType = ApplySelf ;
for ( int i = 0 ; i < ( int ) hSkill - > GetStateEffectCount ( ) ; + + i )
{
const StateEffectStruct * pSE = hSkill - > GetStateEffectFromIndex ( i ) ;
if ( pSE - > nID = = hExistingBlow - > GetBlowIndex ( )
& & pSE - > ApplyType = = pExistingParentSkillInfo - > eApplyType )
{
eExistingSEApplyType = pSE - > ApplyType ;
break ;
}
}
//<2F> ڽſ <DABD> <C5BF> <EFBFBD> <20> Ŵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> ? <20> Ѵ <EFBFBD> ..
if ( StateEffectApplyType : : ApplySelf = = eExistingSEApplyType )
{
eResult = CDnSkill : : CanApply : : Apply ;
vlStateBlowIDToRemove . push_back ( hExistingBlow - > GetBlowID ( ) ) ;
mapDuplicateResult [ hExistingBlow - > GetBlowIndex ( ) ] = true ;
hTargetActor - > AddStateBlowIDToRemove ( hExistingBlow - > GetBlowID ( ) ) ;
}
}
}
}
}
}
if ( false = = vlStateBlowIDToRemove . empty ( ) )
{
// <20> <> ų ȿ<> <C8BF> <20> <> ü. <20> <> ø ī<> <C4AB> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ó<> <C3B3> <EFBFBD> <EFBFBD> <20> ʿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
bExistingSameSkill = false ;
eResult = CDnSkill : : CanApply : : ApplyDuplicateSameSkill ;
}
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <20> <> ø<EFBFBD> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؾ<EFBFBD> <D8BE> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> ִ<EFBFBD> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȵȴ<C8B5> .
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> øó<C3B8> <C3B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
if ( CDnSkill : : CanApply : : Fail ! = eResult )
{
if ( bExistingSameSkill )
{
if ( iDuplicateCount < = iExistingSameSkillCount )
{
// <20> ִ<EFBFBD> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> ʱ<EFBFBD> ȭ <20> Ѵ <EFBFBD> .
int iNumSameSkillBlowsToResetDurationTime = ( int ) vlhSameSkillBlows . size ( ) ;
for ( int iBlow = 0 ; iBlow < iNumSameSkillBlowsToResetDurationTime ; + + iBlow )
{
DnBlowHandle hBlow = vlhSameSkillBlows . at ( iBlow ) ;
//////////////////////////////////////////////////////////////////////////
//#53448
//249<34> <39> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <20> ̻<EFBFBD> <CCBB> <EFBFBD> <20> ߰<EFBFBD> <20> <> <20> <> <20> <> <EFBFBD> <EFBFBD> .
//<2F> ִ<EFBFBD> <20> <> ø <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ʒ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 鼭 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ϰ<EFBFBD> , <20> ٽ<EFBFBD> <20> ߰<EFBFBD> <20> ۾<EFBFBD> <20> ʿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
if ( hBlow & &
( hBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_249 | | hBlow - > GetBlowIndex ( ) = = STATE_BLOW : : BLOW_242 )
)
continue ;
//////////////////////////////////////////////////////////////////////////
// <20> ƿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ߴ ٰ<DFB4> <20> <> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> Ȯ<EFBFBD> <C8AE> .
int nDurationTime = int ( hBlow - > GetDurationTime ( ) * 1000.0f ) ;
hBlow - > ResetDurationTime ( ) ;
CDnSkill : : SkillInfo SkillInfo = * ( hBlow - > GetParentSkillInfo ( ) ) ;
STATE_BLOW : : emBLOW_INDEX BlowIndex = hBlow - > GetBlowIndex ( ) ;
string strValue ( hBlow - > GetValue ( ) ) ;
// <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> . [2011/01/18 semozz]
int nBlowID = hBlow - > GetBlowID ( ) ;
// <20> <> Ŷ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
hTargetActor - > SendRemoveStateEffectFromID ( nBlowID ) ;
// <20> ٷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> ..
if ( hTargetActor - > GetStateBlow ( ) )
hTargetActor - > GetStateBlow ( ) - > RemoveImediatlyStateEffectFromID ( nBlowID ) ;
// <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ȯ<> <C8AE> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> 100% <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ѿ<EFBFBD> <20> Ϲ Ƿ<CFB9>
// CanBegin <20> Լ<EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> bCheckCanBegin <20> ÷<EFBFBD> <C3B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȣ <> <C8A3> .
hTargetActor - > CmdAddStateEffect ( & SkillInfo , BlowIndex , nDurationTime , strValue . c_str ( ) , false , false ) ;
}
eResult = CDnSkill : : CanApply : : Fail ;
}
}
}
return eResult ;
}
CDnSkill : : CanApply CDnSkill : : CanApplySkillStateEffect ( DnActorHandle hTargetActor , DnSkillHandle hUsingSkill , map < int , bool > & mapDuplicateResult , bool isHitProcess )
{
const SkillInfo * pUsingSkillInfo = hUsingSkill - > GetInfo ( ) ;
int iSkillID = hUsingSkill - > GetClassID ( ) ;
int iLevel = hUsingSkill - > GetLevel ( ) ;
int iSkillDuplicateMethod = hUsingSkill - > GetDuplicateMethod ( ) ;
int iDuplicateCount = hUsingSkill - > GetMaxDuplicateCount ( ) ;
// <20> <> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> ߿<EFBFBD> <20> <> <EFBFBD> ӽð<D3BD> <C3B0> <EFBFBD> <20> ϳ <EFBFBD> <CFB3> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ӽð<D3BD> <C3B0> <EFBFBD> <20> ִ°ɷ<C2B0> <20> Ǵ<EFBFBD>
// <20> ش<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> ӽð<D3BD> <C3B0> <EFBFBD> <20> <> <EFBFBD> ٸ<EFBFBD> <20> ׳ <EFBFBD> <20> ߰<EFBFBD> <20> <> <20> <> <20> ֵ<EFBFBD> <D6B5> <EFBFBD> <20> Ѵ <EFBFBD> . [2010/11/12 semozz]
bool hasDuration = false ;
for ( DWORD k = 0 ; k < hUsingSkill - > GetStateEffectCount ( ) ; k + + )
{
CDnSkill : : StateEffectStruct * pLocalStruct = hUsingSkill - > GetStateEffectFromIndex ( k ) ;
if ( pLocalStruct & & ( IsNeedCheckApplyStateBlow ( ( STATE_BLOW : : emBLOW_INDEX ) pLocalStruct - > nID ) | | pLocalStruct - > nDurationTime > 0 ) )
{
hasDuration = true ;
break ;
}
# if defined(PRE_FIX_52267)
//#52267
//<2F> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> ApplyType<70> <65> Self<6C> <66> <20> ƴϾ <20> <> <EFBFBD> ӽð<D3BD> <C3B0> <EFBFBD> 0<> <30> <20> <> <EFBFBD> <EFBFBD> CanApplySkillStateEffect<63> Լ<EFBFBD> ȣ <> <C8A3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʾ Ƽ <CABE>
//<2F> ǵ<EFBFBD> ġ <20> ʰ<EFBFBD> <20> <> ø<EFBFBD> <C3B8> <20> Ǵ<EFBFBD> <20> <> <EFBFBD> 찡 <20> <EFBFBD> <DFBB> Ѵ <EFBFBD> .
//ApplyType<70> <65> self<6C> <66> <20> ƴϰ<C6B4> , durationTime<6D> <65> 0<> ΰ<EFBFBD> <CEB0> 쵵 üũ <20> <> <EFBFBD> <EFBFBD> <20> ϵ<EFBFBD> <CFB5> <EFBFBD> hasDuration<6F> <6E> true<75> <65> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
else if ( pLocalStruct - > nDurationTime = = 0 & & pLocalStruct - > ApplyType ! = StateEffectApplyType : : ApplySelf )
{
hasDuration = true ;
break ;
}
# endif // PRE_FIX_52267
}
bool bResist = false ;
if ( ! hTargetActor - > IsHittableSkill ( iSkillID , bResist ) )
{
if ( bResist )
{
hTargetActor - > SendAddSEFail ( CDnStateBlow : : ADD_FAIL_BY_IMMUNE , STATE_BLOW : : BLOW_154 ) ;
}
return CDnSkill : : CanApply : : Fail ;
}
if ( false = = hasDuration )
{
return CDnSkill : : CanApply : : Apply ;
}
return CanApplySkillStateEffect ( pUsingSkillInfo , hTargetActor , iSkillID , iLevel , iSkillDuplicateMethod , iDuplicateCount , mapDuplicateResult , isHitProcess ) ;
}
// <20> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> μ<EFBFBD> <CEBC> <EFBFBD> <EFBFBD> <EFBFBD> <20> ݵ<EFBFBD> <DDB5> <EFBFBD> <20> ִ<EFBFBD> <20> <> Ƽ <EFBFBD> <C6BC> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> û!
void CDnSkill : : OnChainInput ( const char * pActionName )
{
if ( GetSkillType ( ) = = CDnSkill : : Active & &
( GetDurationType ( ) = = CDnSkill : : Instantly | |
GetDurationType ( ) = = CDnSkill : : Buff | |
GetDurationType ( ) = = CDnSkill : : Debuff | |
GetDurationType ( ) = = CDnSkill : : StanceChange ) )
{
IDnSkillProcessor * pProcessor = GetProcessor ( IDnSkillProcessor : : PLAY_ANI ) ;
_ASSERT ( pProcessor ) ;
if ( pProcessor )
{
CDnPlayAniProcess * pPlayAniProcessor = static_cast < CDnPlayAniProcess * > ( pProcessor ) ;
pPlayAniProcessor - > OnChainInput ( pActionName ) ;
}
}
else
if ( GetSkillType ( ) = = CDnSkill : : Passive )
{
CEtActionBase : : ActionElementStruct * pStruct = m_hActor - > GetElement ( pActionName ) ;
if ( pStruct )
{
m_fPassiveActionSkillLength + = ( float ) pStruct - > dwLength / s_fDefaultFps ;
m_bChainingPassiveSkill = true ;
}
}
}
bool CDnSkill : : IsChainInputAction ( const char * pActionName )
{
IDnSkillProcessor * pProcessor = GetProcessor ( IDnSkillProcessor : : PLAY_ANI ) ;
if ( pProcessor )
{
CDnPlayAniProcess * pPlayAniProcessor = static_cast < CDnPlayAniProcess * > ( pProcessor ) ;
if ( strcmp ( pActionName , pPlayAniProcessor - > GetChainActionName ( ) ) = = 0 )
{
return true ;
}
}
return false ;
}
bool CDnSkill : : CheckChainingPassiveSkill ( void )
{
bool bResult = m_bChainingPassiveSkill ;
m_bChainingPassiveSkill = false ;
return bResult ;
}
void CDnSkill : : AddGlyphStateEffect ( int nGlyphID )
{
DNTableFileFormat * pGlyphTable = GetDNTable ( CDnTableDB : : TGLYPHSKILL ) ;
if ( ! pGlyphTable ) return ;
# if defined(PRE_ADD_65808)
int monsterID = - 1 ;
if ( IsSummonMonsterRecall ( monsterID ) = = true )
{
m_hActor - > AddSummonMonsterGlyphInfo ( monsterID , nGlyphID ) ;
return ;
}
# endif // PRE_ADD_65808
char caLable [ 64 ] ;
// <20> <> ų <20> <> ȭ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> pvp/pve <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
int iNumOriginalStateEffect = ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ;
// <20> <> <EFBFBD> <EFBFBD> ȿ<> <C8BF> <20> ߰<EFBFBD>
StateEffectStruct StateEffect ;
StateEffect . nGlyphID = nGlyphID ;
for ( int i = 0 ; i < MAX_GLYPH_STATE_EFFECT_COUNT ; + + i )
{
sprintf_s ( caLable , " _EffectClass%d " , i + 1 ) ;
StateEffect . nID = pGlyphTable - > GetFieldFromLablePtr ( nGlyphID , caLable ) - > GetInteger ( ) ;
if ( StateEffect . nID < 1 )
continue ;
sprintf_s ( caLable , " _EffectClass%dApplyType " , i + 1 ) ;
int iApplyType = pGlyphTable - > GetFieldFromLablePtr ( nGlyphID , caLable ) - > GetInteger ( ) ;
bool bApplyAll = ( StateEffectApplyType : : ApplyAll = = iApplyType ) ; // <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . Ÿ<> ٸ<EFBFBD> <20> ٸ<EFBFBD> <D9B8> <EFBFBD> <20> ؼ<EFBFBD> <20> Ȱ<EFBFBD> <C8B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> 2<> <32> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> ش<EFBFBD> .
if ( bApplyAll )
{
StateEffect . ApplyType = StateEffectApplyType : : ApplySelf ;
StateEffect . bApplyAllPair = true ;
}
else
StateEffect . ApplyType = ( StateEffectApplyType ) iApplyType ;
sprintf_s ( caLable , " _EffectClassValue%d " , i + 1 ) ;
StateEffect . szValue = pGlyphTable - > GetFieldFromLablePtr ( nGlyphID , caLable ) - > GetString ( ) ;
// <20> <> <EFBFBD> ӽð<D3BD> <C3B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ״<EFBFBD> <D7B4> <EFBFBD> <20> <> ü<EFBFBD> Ѵ <EFBFBD> .
bool bFound = false ;
for ( int k = 0 ; k < iNumOriginalStateEffect ; + + k )
{
const StateEffectStruct & OriginalSE = m_vlStateEffectList [ iSkillLevelApplyType ] . at ( k ) ;
if ( OriginalSE . nID = = StateEffect . nID )
{
StateEffect . nDurationTime = OriginalSE . nDurationTime ;
bFound = true ;
}
}
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ٸ<EFBFBD> <20> <> <EFBFBD> ӽð<D3BD> <C3B0> <EFBFBD> <20> ׳ <EFBFBD> 0 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ش<EFBFBD> .
// <20> <EFBFBD> <20> ǰ<D7BC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ݸ<EFBFBD> ŭ <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ӵ<EFBFBD> .
if ( false = = bFound )
StateEffect . nDurationTime = 0 ;
m_vlStateEffectList [ iSkillLevelApplyType ] . push_back ( StateEffect ) ;
// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̸<EFBFBD> Ÿ<> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٲ㼭 <20> Ȱ<EFBFBD> <C8B0> <EFBFBD> <20> <> <20> <> <20> <> <20> ־<EFBFBD> <D6BE> <EFBFBD> .
if ( bApplyAll )
{
StateEffect . ApplyType = StateEffectApplyType : : ApplyTarget ;
m_vlStateEffectList [ iSkillLevelApplyType ] . push_back ( StateEffect ) ;
}
}
}
// <20> <> ų <20> Ӽ<EFBFBD> <20> ߰<EFBFBD>
GlyphEffectStruct GlyphEffect ;
GlyphEffect . eEffectIndex = pGlyphTable - > GetFieldFromLablePtr ( nGlyphID , " _GlyphSkillEffect " ) - > GetInteger ( ) ;
GlyphEffect . fEffectValue = pGlyphTable - > GetFieldFromLablePtr ( nGlyphID , " _GlyphSkillEffectValue " ) - > GetFloat ( ) ;
GlyphEffect . nGlyphID = nGlyphID ;
switch ( GlyphEffect . eEffectIndex )
{
case SKILLMP_PRO :
{
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
m_iNeedMP [ iSkillLevelApplyType ] + = ( int ) ( ( float ) m_iOriginalNeedMP [ iSkillLevelApplyType ] * GlyphEffect . fEffectValue ) ;
break ;
}
case SKILLDELAY_PRO :
{
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
m_fDelayTime [ iSkillLevelApplyType ] + = m_fOriginalDelayTime [ iSkillLevelApplyType ] * GlyphEffect . fEffectValue ;
break ;
}
case SKILLDELAY_RESET_PRO :
{
m_fResetCooltime + = GlyphEffect . fEffectValue ;
break ;
}
case SKILLDURATION_PRO :
{
// pair<int, int> <<3C> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> , <20> Ⱓ>
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
{
bool bEmpty = m_vlStateDurationList [ iSkillLevelApplyType ] . empty ( ) ;
for ( int itr = 0 ; itr < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + itr ) {
if ( bEmpty )
m_vlStateDurationList [ iSkillLevelApplyType ] . push_back ( make_pair ( m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . nID , m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . nDurationTime ) ) ;
else m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . nDurationTime = m_vlStateDurationList [ iSkillLevelApplyType ] [ itr ] . second ;
}
}
float fRatio = GlyphEffect . fEffectValue ;
for ( int itr = 0 ; itr < ( int ) m_vGlyphEffectList . size ( ) ; + + itr )
{
if ( SKILLDURATION_PRO = = m_vGlyphEffectList [ itr ] . eEffectIndex )
fRatio + = m_vGlyphEffectList [ itr ] . fEffectValue ;
}
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
{
for ( int itr = 0 ; itr < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + itr )
m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . nDurationTime + = ( int ) ( m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . nDurationTime * fRatio ) ;
}
break ;
}
case SKILLATTACKHEAL_ABSOLUTE :
{
float fValue = GlyphEffect . fEffectValue ;
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
{
for ( int itr = 0 ; itr < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + itr )
{
if ( m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . nID = = STATE_BLOW : : BLOW_248 )
{
m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . szValue = FormatA ( " %f " , fValue + atof ( m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . szValue . c_str ( ) ) ) . c_str ( ) ;
}
}
}
}
break ;
}
m_vGlyphEffectList . push_back ( GlyphEffect ) ;
}
void CDnSkill : : DelGlyphStateEffect ( int nGlyphID )
{
# if defined(PRE_ADD_65808)
int monsterID = - 1 ;
if ( IsSummonMonsterRecall ( monsterID ) = = true )
{
m_hActor - > RemoveSummonMonsterGlyphInfo ( monsterID , nGlyphID ) ;
return ;
}
# endif // PRE_ADD_65808
// <20> <> ų <20> <> ȭ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> pvp/pve <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> .
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
{
for ( DNVector ( StateEffectStruct ) : : iterator Itor = m_vlStateEffectList [ iSkillLevelApplyType ] . begin ( ) ;
Itor < m_vlStateEffectList [ iSkillLevelApplyType ] . end ( ) ; )
{
if ( nGlyphID = = Itor - > nGlyphID )
Itor = m_vlStateEffectList [ iSkillLevelApplyType ] . erase ( Itor ) ;
else
+ + Itor ;
}
}
for ( std : : vector < GlyphEffectStruct > : : iterator Itor = m_vGlyphEffectList . begin ( ) ;
Itor < m_vGlyphEffectList . end ( ) ; )
{
if ( nGlyphID = = Itor - > nGlyphID )
{
switch ( Itor - > eEffectIndex )
{
case SKILLMP_PRO :
{
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
m_iNeedMP [ iSkillLevelApplyType ] - = ( int ) ( ( float ) m_iOriginalNeedMP [ iSkillLevelApplyType ] * Itor - > fEffectValue ) ;
break ;
}
case SKILLDELAY_PRO :
{
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
m_fDelayTime [ iSkillLevelApplyType ] - = m_fOriginalDelayTime [ iSkillLevelApplyType ] * Itor - > fEffectValue ;
break ;
}
case SKILLDELAY_RESET_PRO :
{
m_fResetCooltime - = Itor - > fEffectValue ;
break ;
}
case SKILLDURATION_PRO :
{
// pair<int, int> <<3C> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> , <20> Ⱓ>
bool bExist = false , bOnce = true ;
float fRatio = 0.0f ;
for ( int itr = 0 ; itr < ( int ) m_vGlyphEffectList . size ( ) ; + + itr )
{
if ( Itor - > nGlyphID = = m_vGlyphEffectList [ itr ] . nGlyphID & & bOnce )
{
bOnce = false ;
continue ;
}
if ( SKILLDURATION_PRO = = m_vGlyphEffectList [ itr ] . eEffectIndex )
{
bExist = true ;
fRatio + = m_vGlyphEffectList [ itr ] . fEffectValue ;
}
}
if ( ! bExist )
{
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
{
for ( int itr = 0 ; itr < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + itr )
m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . nDurationTime = m_vlStateDurationList [ iSkillLevelApplyType ] [ itr ] . second ;
m_vlStateDurationList [ iSkillLevelApplyType ] . clear ( ) ;
}
}
else
{
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
{
for ( int itr = 0 ; itr < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + itr )
m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . nDurationTime = m_vlStateDurationList [ iSkillLevelApplyType ] [ itr ] . second + ( int ) ( m_vlStateDurationList [ iSkillLevelApplyType ] [ itr ] . second * fRatio ) ;
}
}
break ;
}
case SKILLATTACKHEAL_ABSOLUTE :
{
float fValue = Itor - > fEffectValue ;
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
{
for ( int itr = 0 ; itr < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + itr )
{
if ( m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . nID = = STATE_BLOW : : BLOW_248 )
m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . szValue = FormatA ( " %f " , atof ( m_vlStateEffectList [ iSkillLevelApplyType ] [ itr ] . szValue . c_str ( ) ) - fValue ) . c_str ( ) ;
}
}
}
break ;
}
Itor = m_vGlyphEffectList . erase ( Itor ) ;
}
else
+ + Itor ;
}
}
void CDnSkill : : UpdateSkillCoolTimeExactly ( void )
{
// 96, 171<37> <31> <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ɷ<EFBFBD> <C9B7> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <EFBFBD> <EFBFBD> <20> ʵ<EFBFBD> <CAB5> <EFBFBD> ó<> <C3B3> .
// <20> <EFBFBD> <D7BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 10<31> <30> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> پ<EFBFBD> <D9BE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƿ<EFBFBD> <20> <> <EFBFBD> ۰ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ̷<EFBFBD> <CCB7> <EFBFBD> Ǯ<> <C7AE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . 2011.07.25
DWORD dwNowTime = timeGetTime ( ) ;
if ( DWORD ( GetDelayTime ( ) * 1000.0f ) < dwNowTime - m_dwLastUseSkillTimeStamp )
{
ResetCoolTime ( ) ;
}
}
bool CDnSkill : : SelectLevelDataType ( int iSkillLevelDataType , bool bPlayerSummonedMonster /* = false*/ )
{
_ASSERT ( ( m_hActor - > IsPlayerActor ( ) | | bPlayerSummonedMonster ) & & ( PVE < = iSkillLevelDataType ) & & ( iSkillLevelDataType < NUM_SKILLLEVEL_APPLY_TYPE ) ) ;
if ( ( m_hActor - > IsPlayerActor ( ) | | bPlayerSummonedMonster ) & &
( PVE < = iSkillLevelDataType ) & &
( iSkillLevelDataType < NUM_SKILLLEVEL_APPLY_TYPE ) )
{
m_iSelectedSkillLevelDataApplyType = iSkillLevelDataType ;
return true ;
}
return false ;
} ;
bool CDnSkill : : IsNeedCheckApplyStateBlow ( STATE_BLOW : : emBLOW_INDEX emBlowIndex )
{
bool bResult = false ;
if ( STATE_BLOW : : BLOW_030 = = emBlowIndex )
bResult = true ;
return bResult ;
}
int CDnSkill : : GetBaseSkillID ( void )
{
int iResult = 0 ;
if ( EnchantPassive = = m_eSkillType )
{
iResult = m_iBaseSkillID ;
}
return iResult ;
}
// Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> ȭ <20> <> <EFBFBD> ߾<EFBFBD> <DFBE> ּ<EFBFBD> <D6BC> <EFBFBD> CheckAndDivideStateEffectArgument <20> <> <20> Լ<EFBFBD> <D4BC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ּ<EFBFBD> <D6BC> <EFBFBD>
bool CDnSkill : : CheckAndUnifyStateEffectArgument ( int iSkillLevelApplyType , StateEffectStruct * pEnchantSkillSE )
{
bool bResult = false ;
if ( CDnCreateBlow : : IsBasicBlow ( ( STATE_BLOW : : emBLOW_INDEX ) pEnchantSkillSE - > nID ) )
{
for ( int i = 0 ; i < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + i )
{
StateEffectStruct * pDestSkillSE = & ( m_vlStateEffectList [ iSkillLevelApplyType ] . at ( i ) ) ;
if ( pDestSkillSE - > nID = = pEnchantSkillSE - > nID )
{
CDnBasicBlow : : AddStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pEnchantSkillSE - > szValue . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam = pEnchantSkillSE - > szValue ;
bResult = true ;
}
}
}
else if ( STATE_BLOW : : BLOW_016 = = ( STATE_BLOW : : emBLOW_INDEX ) pEnchantSkillSE - > nID )
{
for ( int i = 0 ; i < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + i )
{
StateEffectStruct * pDestSkillSE = & ( m_vlStateEffectList [ iSkillLevelApplyType ] . at ( i ) ) ;
if ( pDestSkillSE - > nID = = pEnchantSkillSE - > nID )
{
CDnHPIncBlow : : AddStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pEnchantSkillSE - > szValue . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam = pEnchantSkillSE - > szValue ;
bResult = true ;
}
}
}
else if ( STATE_BLOW : : BLOW_208 = = ( STATE_BLOW : : emBLOW_INDEX ) pEnchantSkillSE - > nID )
{
for ( int i = 0 ; i < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + i )
{
StateEffectStruct * pDestSkillSE = & ( m_vlStateEffectList [ iSkillLevelApplyType ] . at ( i ) ) ;
if ( pDestSkillSE - > nID = = pEnchantSkillSE - > nID )
{
CDnPingpongBlow : : AddStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pEnchantSkillSE - > szValue . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam = pEnchantSkillSE - > szValue ;
bResult = true ;
}
}
}
else if ( STATE_BLOW : : BLOW_140 = = ( STATE_BLOW : : emBLOW_INDEX ) pEnchantSkillSE - > nID )
{
for ( int i = 0 ; i < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + i )
{
StateEffectStruct * pDestSkillSE = & ( m_vlStateEffectList [ iSkillLevelApplyType ] . at ( i ) ) ;
if ( pDestSkillSE - > nID = = pEnchantSkillSE - > nID )
{
CDnHealingBlow : : AddStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pEnchantSkillSE - > szValue . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam = pEnchantSkillSE - > szValue ;
bResult = true ;
}
}
}
else if ( STATE_BLOW : : BLOW_227 = = ( STATE_BLOW : : emBLOW_INDEX ) pEnchantSkillSE - > nID )
{
for ( int i = 0 ; i < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + i )
{
StateEffectStruct * pDestSkillSE = & ( m_vlStateEffectList [ iSkillLevelApplyType ] . at ( i ) ) ;
if ( pDestSkillSE - > nID = = pEnchantSkillSE - > nID )
{
CDnBloodSuckingBlow : : AddStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pEnchantSkillSE - > szValue . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam = pEnchantSkillSE - > szValue ;
bResult = true ;
}
}
}
else if ( STATE_BLOW : : BLOW_215 = = ( STATE_BLOW : : emBLOW_INDEX ) pEnchantSkillSE - > nID )
{
for ( int i = 0 ; i < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + i )
{
StateEffectStruct * pDestSkillSE = & ( m_vlStateEffectList [ iSkillLevelApplyType ] . at ( i ) ) ;
if ( pDestSkillSE - > nID = = pEnchantSkillSE - > nID )
{
CDnOrderMySummonedMonsterBlow : : AddStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pEnchantSkillSE - > szValue . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam = pEnchantSkillSE - > szValue ;
bResult = true ;
}
}
}
else if ( STATE_BLOW : : BLOW_179 = = ( STATE_BLOW : : emBLOW_INDEX ) pEnchantSkillSE - > nID
| | STATE_BLOW : : BLOW_121 = = ( STATE_BLOW : : emBLOW_INDEX ) pEnchantSkillSE - > nID
| | STATE_BLOW : : BLOW_129 = = ( STATE_BLOW : : emBLOW_INDEX ) pEnchantSkillSE - > nID
| | STATE_BLOW : : BLOW_062 = = ( STATE_BLOW : : emBLOW_INDEX ) pEnchantSkillSE - > nID
| | STATE_BLOW : : BLOW_242 = = ( STATE_BLOW : : emBLOW_INDEX ) pEnchantSkillSE - > nID )
{
for ( int i = 0 ; i < ( int ) m_vlStateEffectList [ iSkillLevelApplyType ] . size ( ) ; + + i )
{
StateEffectStruct * pDestSkillSE = & ( m_vlStateEffectList [ iSkillLevelApplyType ] . at ( i ) ) ;
if ( pDestSkillSE - > nID = = pEnchantSkillSE - > nID )
{
pDestSkillSE - > strEnchantSkillSEParam = pDestSkillSE - > szValue ;
pDestSkillSE - > szValue = pEnchantSkillSE - > szValue ;
bResult = true ;
break ;
}
}
}
return bResult ;
}
bool CDnSkill : : ApplyEnchantSkill ( DnSkillHandle hEnchantPassiveSkill )
{
bool bSuccess = false ;
if ( 0 < m_iAppliedEnchantPassiveSkillID )
return false ;
_ASSERT ( m_iSkillID = = hEnchantPassiveSkill - > GetBaseSkillID ( ) ) ;
_ASSERT ( EnchantPassive ! = m_eSkillType ) ;
if ( EnchantPassive ! = m_eSkillType )
{
int iNowLevelDataType = m_iSelectedSkillLevelDataApplyType ;
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ڰ<EFBFBD> <DAB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ְ<EFBFBD> <20> <> <EFBFBD> ο <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> .
// <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> ȭ <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EEBEBA> <EFBFBD> ش<EFBFBD> .
SelectLevelDataType ( iSkillLevelApplyType ) ;
hEnchantPassiveSkill - > SelectLevelDataType ( iSkillLevelApplyType ) ;
int iNumStateEffect = ( int ) hEnchantPassiveSkill - > GetStateEffectCount ( ) ;
for ( int i = 0 ; i < iNumStateEffect ; + + i )
{
StateEffectStruct * pEnchantPassiveSE = hEnchantPassiveSkill - > GetStateEffectFromIndex ( i ) ;
// #40643 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> EX ó<> <C3B3> Ư<> <C6AF> <EFBFBD> ϰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ڸ<EFBFBD> <20> ǵ帮<C7B5> <E5B8AE> <20> <> <EFBFBD> <EFBFBD> ..
// <20> <> ¿ <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> m_vlStateEffectList <20> <> <20> ߰<EFBFBD> <DFB0> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ƴ<EFBFBD> .
if ( false = = CheckAndUnifyStateEffectArgument ( iSkillLevelApplyType , pEnchantPassiveSE ) )
{
// <20> <> <EFBFBD> ݷ<EFBFBD> <20> <> ȭ <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ƴϰ<C6B4> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> ָ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ڵ<EFBFBD> <DAB5> <EFBFBD> <EFBFBD> <EFBFBD> <20> ɷ<EFBFBD> ġ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ȴ<EFBFBD> .
m_vlStateEffectList [ iSkillLevelApplyType ] . push_back ( * pEnchantPassiveSE ) ;
m_vlStateEffectList [ iSkillLevelApplyType ] . back ( ) . nFromEnchantPassiveSkillID = hEnchantPassiveSkill - > GetClassID ( ) ;
}
}
// <20> <EFBFBD> <20> <> <EFBFBD> μ<EFBFBD> <CEBC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȭ <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
IDnSkillProcessor * pMyPlayAniProcessor = GetProcessor ( IDnSkillProcessor : : PLAY_ANI ) ;
if ( pMyPlayAniProcessor )
{
IDnSkillProcessor * pEnchantPassiveSkillPlayAniProcessor = hEnchantPassiveSkill - > GetProcessor ( IDnSkillProcessor : : PLAY_ANI ) ;
if ( pEnchantPassiveSkillPlayAniProcessor )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
IDnSkillProcessor * pBackup = new CDnPlayAniProcess ;
pBackup - > CopyFrom ( pMyPlayAniProcessor ) ;
m_vlpProcessorBackup [ iSkillLevelApplyType ] . push_back ( pBackup ) ;
// <20> <> ȭ <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
pMyPlayAniProcessor - > CopyFrom ( pEnchantPassiveSkillPlayAniProcessor ) ;
}
}
IDnSkillProcessor * pMyPartialPlayAniProcessor = GetProcessor ( IDnSkillProcessor : : PARTIAL_PLAY_ANI ) ;
if ( pMyPartialPlayAniProcessor )
{
IDnSkillProcessor * pEnchantPassivePartialSkillPlayAniProcessor = hEnchantPassiveSkill - > GetProcessor ( IDnSkillProcessor : : PARTIAL_PLAY_ANI ) ;
if ( pEnchantPassivePartialSkillPlayAniProcessor )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
IDnSkillProcessor * pBackup = new CDnPartialPlayProcessor ;
pBackup - > CopyFrom ( pMyPartialPlayAniProcessor ) ;
m_vlpProcessorBackup [ iSkillLevelApplyType ] . push_back ( pBackup ) ;
pMyPartialPlayAniProcessor - > CopyFrom ( pEnchantPassivePartialSkillPlayAniProcessor ) ;
}
}
IDnSkillProcessor * pMyChangeActionStrProcessor = GetProcessor ( IDnSkillProcessor : : CHANGE_ACTIONSTR ) ;
if ( pMyChangeActionStrProcessor )
{
IDnSkillProcessor * pEnchantPassiveChangeActionStrProcessor = hEnchantPassiveSkill - > GetProcessor ( IDnSkillProcessor : : CHANGE_ACTIONSTR ) ;
if ( pEnchantPassiveChangeActionStrProcessor )
{
// <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> .
IDnSkillProcessor * pBackup = new CDnChangeActionStrProcessor ;
pBackup - > CopyFrom ( pMyChangeActionStrProcessor ) ;
m_vlpProcessorBackup [ iSkillLevelApplyType ] . push_back ( pBackup ) ;
pMyChangeActionStrProcessor - > CopyFrom ( pEnchantPassiveChangeActionStrProcessor ) ;
}
}
# ifdef PRE_ADD_ENCHANTSKILL_BUBBLE_ACTION
IDnSkillProcessor * pMyChangeActionStrByBubbleProcessor = GetProcessor ( IDnSkillProcessor : : CHANGE_ACTIONSTR_BY_BUBBLE ) ;
if ( pMyChangeActionStrByBubbleProcessor )
{
IDnSkillProcessor * pEnchantPassiveChangeActionStrProcessor = hEnchantPassiveSkill - > GetProcessor ( IDnSkillProcessor : : CHANGE_ACTIONSTR_BY_BUBBLE ) ;
if ( pEnchantPassiveChangeActionStrProcessor )
{
IDnSkillProcessor * pBackup = new CDnChangeActionStrByBubbleProcessor ( ) ;
pBackup - > CopyFrom ( pMyChangeActionStrByBubbleProcessor ) ;
m_vlpProcessorBackup [ iSkillLevelApplyType ] . push_back ( pBackup ) ;
pMyChangeActionStrByBubbleProcessor - > CopyFrom ( pEnchantPassiveChangeActionStrProcessor ) ;
}
}
# endif
m_eElement = hEnchantPassiveSkill - > GetElement ( ) ;
m_SkillInfo [ iSkillLevelApplyType ] . eSkillElement = hEnchantPassiveSkill - > GetElement ( ) ;
# ifdef PRE_FIX_SYNC_ENCHANT_SKILL
bool bSummonMonsterToggleSkill = ( m_isAppliedSummonMonsterEnchantSkill & & hEnchantPassiveSkill - > GetDurationType ( ) = = CDnSkill : : ActiveToggleForSummon ) ;
if ( bSummonMonsterToggleSkill = = false )
{
m_eDurationType = hEnchantPassiveSkill - > GetDurationType ( ) ;
m_SkillInfo [ iSkillLevelApplyType ] . eDurationType = hEnchantPassiveSkill - > GetDurationType ( ) ;
}
# endif
# if defined(PRE_FIX_66175)
//#66175
//UsableChecker<65> <72> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų<EFBFBD> <C5B3> EX<45> <58> ų <20> <> ü<EFBFBD> Ѵ <EFBFBD> ...
vector < IDnSkillUsableChecker * > & enchangeSkillUsableChecker = hEnchantPassiveSkill - > GetUsableChecker ( iSkillLevelApplyType ) ;
//EX<45> <58> ų<EFBFBD> <C5B3> UsableChecker<65> <72> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> 츸 <20> <> ü <20> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> Ѵ <EFBFBD> ...
if ( enchangeSkillUsableChecker . size ( ) > 0 )
{
vector < IDnSkillUsableChecker * > & baseSkillUsableChecker = GetUsableChecker ( iSkillLevelApplyType ) ;
{
//<2F> ڽ<EFBFBD> <DABD> <EFBFBD> Checker<65> <72> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ´ <EFBFBD> .
vector < IDnSkillUsableChecker * > : : iterator iter = baseSkillUsableChecker . begin ( ) ;
vector < IDnSkillUsableChecker * > : : iterator endIter = baseSkillUsableChecker . begin ( ) ;
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> س<EFBFBD> <D8B3> <EFBFBD> ...
m_vlUsableCheckersBackup [ iSkillLevelApplyType ] . clear ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
m_vlUsableCheckersBackup [ iSkillLevelApplyType ] . push_back ( ( * iter ) ) ;
}
}
//EX<45> <58> ų<EFBFBD> <C5B3> usableChecker<65> <72> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
baseSkillUsableChecker . clear ( ) ;
vector < IDnSkillUsableChecker * > : : iterator iter = enchangeSkillUsableChecker . begin ( ) ;
vector < IDnSkillUsableChecker * > : : iterator endIter = enchangeSkillUsableChecker . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
IDnSkillUsableChecker * pChecker = ( * iter ) ;
baseSkillUsableChecker . push_back ( pChecker - > Clone ( ) ) ;
}
}
# endif // PRE_FIX_66175
//EffectIDs<44> <73> <20> <> <EFBFBD> <EFBFBD> ..
string enchantEffectIDs = hEnchantPassiveSkill - > GetEffectOutputIDs ( iSkillLevelApplyType ) ;
string enchantEffectIDToClient = hEnchantPassiveSkill - > GetEffectOutputIDToClient ( iSkillLevelApplyType ) ;
m_BackupEffectOutputIDs [ iSkillLevelApplyType ] = m_SkillInfo [ iSkillLevelApplyType ] . szEffectOutputIDs ;
m_BackupEffectOutputIDToClient [ iSkillLevelApplyType ] = m_SkillInfo [ iSkillLevelApplyType ] . szEffectOutputIDToClient ;
//SC_CMDADDSTATEEFFECT <20> <> Ŷ<EFBFBD> <C5B6> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , szEffectOutputIDToClient<6E> <74> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ<> <C5AC> <EFBFBD> ̾<EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> ̺<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> о <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
//EX<45> <58> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> ų ID<49> <44> <20> <> <EFBFBD> ̽<EFBFBD> <20> <> ų ID<49> <44> <20> <> <EFBFBD> <EFBFBD> <20> DZ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , EX<45> <58> ų<EFBFBD> <C5B3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϰ<EFBFBD> <20> <> .
//eX<65> <58> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> szEffectOutputIDToClient<6E> <74> <EFBFBD> <EFBFBD> EX<45> <58> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> س<EFBFBD> <D8B3> ´ <EFBFBD> .
m_SkillInfo [ iSkillLevelApplyType ] . szEffectOutputIDs = enchantEffectIDs ;
m_SkillInfo [ iSkillLevelApplyType ] . szEffectOutputIDToClient = enchantEffectIDs ;
# ifdef PRE_FIX_SYNC_ENCHANT_SKILL
m_SkillInfo [ iSkillLevelApplyType ] . iAppliedEnchantSkillID = hEnchantPassiveSkill - > GetClassID ( ) ;
# endif
}
SelectLevelDataType ( iNowLevelDataType ) ;
m_iAppliedEnchantPassiveSkillID = hEnchantPassiveSkill - > GetClassID ( ) ;
bSuccess = true ;
}
return bSuccess ;
}
void CDnSkill : : ApplyEnchantSkillOnceFromBubble ( DnSkillHandle hEnchantPassiveSkill )
{
m_bEnchantedFromBubble = true ;
ApplyEnchantSkill ( hEnchantPassiveSkill ) ;
}
bool CDnSkill : : CheckAndDivideStateEffectArgument ( StateEffectStruct * pDestSkillSE )
{
if ( pDestSkillSE - > strEnchantSkillSEParam . empty ( ) = = true )
return false ;
bool bResult = false ;
if ( CDnCreateBlow : : IsBasicBlow ( ( STATE_BLOW : : emBLOW_INDEX ) pDestSkillSE - > nID ) )
{
CDnBasicBlow : : RemoveStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pDestSkillSE - > strEnchantSkillSEParam . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam . clear ( ) ;
bResult = true ;
}
else if ( STATE_BLOW : : BLOW_016 = = ( STATE_BLOW : : emBLOW_INDEX ) pDestSkillSE - > nID )
{
CDnHPIncBlow : : RemoveStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pDestSkillSE - > strEnchantSkillSEParam . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam . clear ( ) ;
bResult = true ;
}
else if ( STATE_BLOW : : BLOW_208 = = ( STATE_BLOW : : emBLOW_INDEX ) pDestSkillSE - > nID )
{
CDnPingpongBlow : : RemoveStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pDestSkillSE - > strEnchantSkillSEParam . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam . clear ( ) ;
bResult = true ;
}
else if ( STATE_BLOW : : BLOW_140 = = ( STATE_BLOW : : emBLOW_INDEX ) pDestSkillSE - > nID )
{
CDnHealingBlow : : RemoveStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pDestSkillSE - > strEnchantSkillSEParam . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam . clear ( ) ;
bResult = true ;
}
else if ( STATE_BLOW : : BLOW_227 = = ( STATE_BLOW : : emBLOW_INDEX ) pDestSkillSE - > nID )
{
CDnBloodSuckingBlow : : RemoveStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pDestSkillSE - > strEnchantSkillSEParam . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam . clear ( ) ;
bResult = true ;
}
else if ( STATE_BLOW : : BLOW_215 = = ( STATE_BLOW : : emBLOW_INDEX ) pDestSkillSE - > nID )
{
CDnOrderMySummonedMonsterBlow : : RemoveStateEffectValue ( pDestSkillSE - > szValue . c_str ( ) , pDestSkillSE - > strEnchantSkillSEParam . c_str ( ) , pDestSkillSE - > szValue ) ;
pDestSkillSE - > strEnchantSkillSEParam . clear ( ) ;
bResult = true ;
}
else if ( STATE_BLOW : : BLOW_179 = = ( STATE_BLOW : : emBLOW_INDEX ) pDestSkillSE - > nID
| | STATE_BLOW : : BLOW_121 = = ( STATE_BLOW : : emBLOW_INDEX ) pDestSkillSE - > nID
| | STATE_BLOW : : BLOW_129 = = ( STATE_BLOW : : emBLOW_INDEX ) pDestSkillSE - > nID
| | STATE_BLOW : : BLOW_062 = = ( STATE_BLOW : : emBLOW_INDEX ) pDestSkillSE - > nID
| | STATE_BLOW : : BLOW_242 = = ( STATE_BLOW : : emBLOW_INDEX ) pDestSkillSE - > nID )
{
pDestSkillSE - > szValue = pDestSkillSE - > strEnchantSkillSEParam ;
pDestSkillSE - > strEnchantSkillSEParam . clear ( ) ;
bResult = true ;
}
return bResult ;
}
void CDnSkill : : ReleaseEnchantSkill ( void )
{
if ( 0 = = m_iAppliedEnchantPassiveSkillID )
return ;
_ASSERT ( EnchantPassive ! = m_eSkillType ) ;
if ( EnchantPassive ! = m_eSkillType )
{
int iNowLevelDataType = m_iSelectedSkillLevelDataApplyType ;
for ( int iSkillLevelApplyType = PVE ; iSkillLevelApplyType < NUM_SKILLLEVEL_APPLY_TYPE ; + + iSkillLevelApplyType )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ڰ<EFBFBD> <DAB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ְ<EFBFBD> <20> <> <EFBFBD> ο <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> .
// <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> ȭ <20> нú<D0BD> <20> <> ų<EFBFBD> <C5B3> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EEBEBA> <EFBFBD> ش<EFBFBD> .
SelectLevelDataType ( iSkillLevelApplyType ) ;
DNVector ( StateEffectStruct ) : : iterator iter = m_vlStateEffectList [ iSkillLevelApplyType ] . begin ( ) ;
for ( iter ; iter ! = m_vlStateEffectList [ iSkillLevelApplyType ] . end ( ) ; )
{
if ( false = = CheckAndDivideStateEffectArgument ( & ( * iter ) ) )
{
if ( 0 < iter - > nFromEnchantPassiveSkillID )
{
iter = m_vlStateEffectList [ iSkillLevelApplyType ] . erase ( iter ) ;
continue ;
}
}
+ + iter ;
}
for ( int i = 0 ; i < ( int ) m_vlpProcessorBackup [ iSkillLevelApplyType ] . size ( ) ; + + i )
{
IDnSkillProcessor * pProcessor = m_vlpProcessorBackup [ iSkillLevelApplyType ] . at ( i ) ;
switch ( pProcessor - > GetType ( ) )
{
case IDnSkillProcessor : : PLAY_ANI :
{
IDnSkillProcessor * pMyPlayAniProcessor = GetProcessor ( IDnSkillProcessor : : PLAY_ANI ) ;
if ( pMyPlayAniProcessor )
pMyPlayAniProcessor - > CopyFrom ( pProcessor ) ;
}
break ;
case IDnSkillProcessor : : PARTIAL_PLAY_ANI :
{
IDnSkillProcessor * pMyPartialPlayAniProcessor = GetProcessor ( IDnSkillProcessor : : PARTIAL_PLAY_ANI ) ;
if ( pMyPartialPlayAniProcessor )
pMyPartialPlayAniProcessor - > CopyFrom ( pProcessor ) ;
}
break ;
case IDnSkillProcessor : : CHANGE_ACTIONSTR :
{
IDnSkillProcessor * pMyChangeActionStrProcessor = GetProcessor ( IDnSkillProcessor : : CHANGE_ACTIONSTR ) ;
if ( pMyChangeActionStrProcessor )
pMyChangeActionStrProcessor - > CopyFrom ( pProcessor ) ;
}
break ;
# ifdef PRE_ADD_ENCHANTSKILL_BUBBLE_ACTION
case IDnSkillProcessor : : CHANGE_ACTIONSTR_BY_BUBBLE :
{
IDnSkillProcessor * pMyChangeActionStrByBubbleProcessor = GetProcessor ( IDnSkillProcessor : : CHANGE_ACTIONSTR_BY_BUBBLE ) ;
if ( pMyChangeActionStrByBubbleProcessor )
pMyChangeActionStrByBubbleProcessor - > CopyFrom ( pProcessor ) ;
}
break ;
# endif
}
}
SAFE_DELETE_PVEC ( m_vlpProcessorBackup [ iSkillLevelApplyType ] ) ;
# if defined(PRE_FIX_66175)
if ( m_vlUsableCheckersBackup [ iSkillLevelApplyType ] . size ( ) > 0 )
{
std : : swap ( m_vlpUsableCheckers [ iSkillLevelApplyType ] , m_vlUsableCheckersBackup [ iSkillLevelApplyType ] ) ;
}
# endif // PRE_FIX_66175
//EffectIDs<44> <73> <20> <> <EFBFBD> <EFBFBD> ..
m_SkillInfo [ iSkillLevelApplyType ] . szEffectOutputIDs = m_BackupEffectOutputIDs [ iSkillLevelApplyType ] ;
m_SkillInfo [ iSkillLevelApplyType ] . szEffectOutputIDToClient = m_BackupEffectOutputIDToClient [ iSkillLevelApplyType ] ;
m_BackupEffectOutputIDs [ iSkillLevelApplyType ] . clear ( ) ;
m_BackupEffectOutputIDToClient [ iSkillLevelApplyType ] . clear ( ) ;
}
SelectLevelDataType ( iNowLevelDataType ) ;
m_iAppliedEnchantPassiveSkillID = 0 ;
}
}
IDnSkillUsableChecker * CDnSkill : : GetChecker ( int iType )
{
IDnSkillUsableChecker * pResult = NULL ;
int iNumChecker = ( int ) m_vlpUsableCheckers [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int iChecker = 0 ; iChecker < iNumChecker ; + + iChecker )
{
IDnSkillUsableChecker * pSkillChecker = m_vlpUsableCheckers [ m_iSelectedSkillLevelDataApplyType ] . at ( iChecker ) ;
if ( iType = = pSkillChecker - > GetType ( ) )
{
pResult = pSkillChecker ;
break ;
}
}
return pResult ;
}
bool CDnSkill : : IsExistUsableChecker ( int iType ) // <20> <> <EFBFBD> ǵ<EFBFBD> UsableChecker<65> <72> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ִ<EFBFBD> <D6B4> <EFBFBD> ?
{
int iNumChecker = ( int ) m_vlpUsableCheckers [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int iChecker = 0 ; iChecker < iNumChecker ; + + iChecker )
{
IDnSkillUsableChecker * pSkillChecker = m_vlpUsableCheckers [ m_iSelectedSkillLevelDataApplyType ] . at ( iChecker ) ;
if ( iType = = pSkillChecker - > GetType ( ) )
return true ;
}
return false ;
}
bool CDnSkill : : IsFinishedAuraSkill ( )
{
//<2F> <> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> ϶<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> /<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> ȭ<EFBFBD> <C8AD> <EFBFBD> <EFBFBD> <20> ջ<EFBFBD> <D5BB> ؼ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ؼ<EFBFBD>
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> θ<EFBFBD> <20> Ǵ<EFBFBD> <C7B4> Ѵ <EFBFBD> .
if ( m_hActor )
{
float fIncManaDelta = 0.0f ;
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <>
DNVector ( DnBlowHandle ) vlManaAbIncBlows ;
m_hActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_013 , vlManaAbIncBlows ) ;
if ( ! vlManaAbIncBlows . empty ( ) )
{
for ( int i = 0 ; i < ( int ) vlManaAbIncBlows . size ( ) ; + + i )
{
DnBlowHandle hBlow = vlManaAbIncBlows . at ( i ) ;
fIncManaDelta + = hBlow - > GetFloatValue ( ) ;
}
}
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <>
float fMaxMP = static_cast < float > ( m_hActor - > GetMaxSP ( ) ) ;
DNVector ( DnBlowHandle ) vlManaRateIncBlows ;
m_hActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_014 , vlManaRateIncBlows ) ;
if ( ! vlManaRateIncBlows . empty ( ) )
{
for ( int i = 0 ; i < ( int ) vlManaRateIncBlows . size ( ) ; + + i )
{
DnBlowHandle hBlow = vlManaRateIncBlows . at ( i ) ;
fIncManaDelta + = fMaxMP * hBlow - > GetFloatValue ( ) ;
}
}
# if defined(PRE_FIX_46381)
//231<33> <31> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> .
DNVector ( DnBlowHandle ) vlContinueBaseMPIncBlows ;
m_hActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_231 , vlContinueBaseMPIncBlows ) ;
if ( ! vlContinueBaseMPIncBlows . empty ( ) )
{
for ( int i = 0 ; i < ( int ) vlContinueBaseMPIncBlows . size ( ) ; + + i )
{
DnBlowHandle hBlow = vlContinueBaseMPIncBlows . at ( i ) ;
fIncManaDelta + = static_cast < CDnContinueBaseMPIncBlow * > ( hBlow . GetPointer ( ) ) - > GetMPIncValue ( ) ;
}
}
# endif // PRE_FIX_46381
//<2F> <> <EFBFBD> <EFBFBD> -<2D> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ڸ<EFBFBD> ..
if ( m_hActor - > GetSP ( ) < - ( int ) fIncManaDelta )
return true ;
}
return false ;
}
void CDnSkill : : AddPrefixBlow ( DnActorHandle hActor , int nBlowID )
{
PREFIX_SKILL_BLOWLIST : : iterator findIter = m_PrefixBlowList . find ( hActor ) ;
if ( findIter ! = m_PrefixBlowList . end ( ) )
{
findIter - > second . push_back ( nBlowID ) ;
}
else
{
BLOWLIST blowList ;
blowList . push_back ( nBlowID ) ;
m_PrefixBlowList . insert ( PREFIX_SKILL_BLOWLIST : : value_type ( hActor , blowList ) ) ;
}
}
void CDnSkill : : RemovePrefixBlow ( )
{
PREFIX_SKILL_BLOWLIST : : iterator iter = m_PrefixBlowList . begin ( ) ;
PREFIX_SKILL_BLOWLIST : : iterator endIter = m_PrefixBlowList . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
DnActorHandle hActor = iter - > first ;
if ( ! hActor )
continue ;
BLOWLIST & blowList = iter - > second ;
for ( int i = 0 ; i < ( int ) blowList . size ( ) ; + + i )
{
// [2010/12/13 semozz]
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ǹǷ<C7B9> , <20> <> Ŷ<EFBFBD> <C5B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
hActor - > CmdRemoveStateEffectFromID ( blowList [ i ] ) ;
}
blowList . clear ( ) ;
}
m_PrefixBlowList . clear ( ) ;
}
void CDnSkill : : OnInitializeSummonMonsterInfo ( )
{
if ( ! m_hActor )
return ;
set < string > : : iterator iter = m_setUseActionNames . begin ( ) ;
set < string > : : iterator endIter = m_setUseActionNames . end ( ) ;
string actionName ;
CEtActionBase : : ActionElementStruct * pActionElement = NULL ;
bool bFindMonsterID = false ;
for ( ; iter ! = endIter ; + + iter )
{
actionName = * iter ;
pActionElement = m_hActor - > GetElement ( actionName . c_str ( ) ) ;
if ( pActionElement )
{
CEtActionSignal * pSignal = NULL ;
for ( DWORD i = 0 ; i < pActionElement - > pVecSignalList . size ( ) ; i + + )
{
pSignal = pActionElement - > pVecSignalList [ i ] ;
if ( pSignal - > GetSignalIndex ( ) = = STE_SummonMonster )
{
SummonMonsterStruct * pStruct = ( SummonMonsterStruct * ) pSignal - > GetData ( ) ;
m_SummonMonsterID = pStruct ? pStruct - > MonsterID : - 1 ;
if ( m_SummonMonsterID ! = - 1 )
{
bFindMonsterID = true ;
break ;
}
}
}
}
if ( bFindMonsterID )
break ;
}
}
DnActorHandle CDnSkill : : FindSummonMonster ( int nMonsterID )
{
DnActorHandle hSummonMonster ;
if ( m_hActor & & m_hActor - > IsPlayerActor ( ) )
{
const list < DnMonsterActorHandle > & listSummonMonster = m_hActor - > GetSummonedMonsterList ( ) ;
if ( false = = listSummonMonster . empty ( ) )
{
list < DnMonsterActorHandle > : : const_iterator iter = listSummonMonster . begin ( ) ;
for ( iter ; iter ! = listSummonMonster . end ( ) ; + + iter )
{
DnMonsterActorHandle hMonster = ( * iter ) ;
if ( hMonster & & hMonster - > GetMonsterClassID ( ) = = nMonsterID )
{
hSummonMonster = hMonster ;
break ;
}
}
}
}
return hSummonMonster ;
}
bool CDnSkill : : SummonMonsterOff ( )
{
DnActorHandle hSummonMonster ;
if ( m_SummonMonsterID ! = - 1 )
hSummonMonster = FindSummonMonster ( m_SummonMonsterID ) ;
if ( hSummonMonster )
{
hSummonMonster - > CmdSuicide ( false , false ) ;
return true ;
}
else
return false ;
}
bool CDnSkill : : IsSkipStateBlow ( const char * szSkipStateBlows , STATE_BLOW : : emBLOW_INDEX blowIndex )
{
if ( szSkipStateBlows = = NULL )
return false ;
std : : string stringValue = szSkipStateBlows ;
std : : vector < std : : string > tokens ;
std : : string delimiters = " ; " ;
TokenizeA ( stringValue , tokens , delimiters ) ;
for ( UINT i = 0 ; i < tokens . size ( ) ; + + i )
{
STATE_BLOW : : emBLOW_INDEX skipStateBlowIndex = ( STATE_BLOW : : emBLOW_INDEX ) ( atoi ( tokens [ i ] . c_str ( ) ) ) ;
if ( skipStateBlowIndex = = blowIndex )
return true ;
}
return false ;
}
void CDnSkill : : AddProjectile ( CDnProjectile * pProjectile )
{
if ( pProjectile )
{
LOCAL_TIME startTime = pProjectile - > GetSkillStartTime ( ) ;
SKILL_PROJECTILE_LIST : : iterator findIter = m_ProjectileList . find ( startTime ) ;
if ( findIter = = m_ProjectileList . end ( ) )
{
PROJECTILE_LIST projectileList ;
projectileList . push_back ( pProjectile ) ;
m_ProjectileList . insert ( std : : make_pair ( startTime , projectileList ) ) ;
}
else
{
findIter - > second . push_back ( pProjectile ) ;
}
}
}
void CDnSkill : : RemoveProjectile ( CDnProjectile * pProjectile )
{
if ( pProjectile = = NULL )
return ;
LOCAL_TIME startTime = pProjectile - > GetSkillStartTime ( ) ;
SKILL_PROJECTILE_LIST : : iterator findIter = m_ProjectileList . find ( startTime ) ;
if ( findIter ! = m_ProjectileList . end ( ) )
{
PROJECTILE_LIST : : iterator iter = findIter - > second . begin ( ) ;
for ( ; iter ! = findIter - > second . end ( ) ; + + iter )
{
CDnProjectile * pTemp = * iter ;
if ( pTemp = = pProjectile )
{
iter = findIter - > second . erase ( iter ) ;
//<2F> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ٸ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( findIter - > second . empty ( ) = = true )
m_ProjectileList . erase ( findIter ) ;
break ;
}
}
}
}
int CDnSkill : : GetProjectileCount ( LOCAL_TIME startTime )
{
int nListCount = 0 ;
SKILL_PROJECTILE_LIST : : iterator findIter = m_ProjectileList . find ( startTime ) ;
if ( findIter ! = m_ProjectileList . end ( ) )
nListCount = ( int ) findIter - > second . size ( ) ;
return nListCount ;
}
void CDnSkill : : ApplyAddtionalStateInfo ( )
{
if ( ! m_hActor ) return ;
//#52905 [Į<> <C4AE> ]"<22> <> ø <20> ߰<EFBFBD> ȿ<> <C8BF> "
//<2F> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ǿ<EFBFBD> <20> ´ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <20> Ѵ <EFBFBD> ..
if ( m_hActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_253 ) )
{
DNVector ( DnBlowHandle ) vlBlows ;
m_hActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_253 , vlBlows ) ;
int nListCount = ( int ) vlBlows . size ( ) ;
for ( int iIndex = 0 ; iIndex < nListCount ; + + iIndex )
{
DnBlowHandle hBlow = vlBlows [ iIndex ] ;
if ( hBlow & & hBlow - > IsEnd ( ) = = false )
{
CDnAdditionalStateInfoBlow * pAddtionalStateInfoBlow = static_cast < CDnAdditionalStateInfoBlow * > ( hBlow . GetPointer ( ) ) ;
if ( pAddtionalStateInfoBlow )
{
STATE_BLOW : : emBLOW_INDEX DestBlowIndex = pAddtionalStateInfoBlow - > GetDestStateIndex ( ) ;
CDnSkill : : StateEffectStruct addStateInfo = pAddtionalStateInfoBlow - > GetTargetStateInfo ( ) ;
int iNumStateBlow = ( int ) m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int i = 0 ; i < iNumStateBlow ; + + i )
{
const StateEffectStruct & SE = m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . at ( i ) ;
if ( DestBlowIndex = = SE . nID )
{
addStateInfo . nDurationTime = SE . nDurationTime ; //<2F> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ð<EFBFBD> <C3B0> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
//<2F> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
m_AddtionalStateInfoList . push_back ( addStateInfo ) ;
OutputDebug ( " <EFBFBD> ߰<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .... %d, %s\n " , addStateInfo . nID , addStateInfo . szValue . c_str ( ) ) ;
}
}
}
}
}
//<2F> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> ȸ <20> ϸ鼭 <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> <20> Ѵ <EFBFBD> .
int nAddStateCount = ( int ) m_AddtionalStateInfoList . size ( ) ;
for ( int i = 0 ; i < nAddStateCount ; + + i )
{
CDnSkill : : StateEffectStruct addStateEffect = m_AddtionalStateInfoList [ i ] ;
m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . push_back ( addStateEffect ) ;
}
}
if ( m_hActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_276 ) )
{
DNVector ( DnBlowHandle ) vlBlows ;
m_hActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_276 , vlBlows ) ;
for ( DWORD i = 0 ; i < vlBlows . size ( ) ; i + + )
{
if ( vlBlows [ i ] )
{
CDnAddStateBySkillGroupBlow * pAddStateBySkillGroupBlow = static_cast < CDnAddStateBySkillGroupBlow * > ( vlBlows [ i ] . GetPointer ( ) ) ;
if ( pAddStateBySkillGroupBlow ) pAddStateBySkillGroupBlow - > ApplyAddtionalStateBlowFromSkill ( GetClassID ( ) ) ;
}
}
}
}
void CDnSkill : : RemoveAddtionalStateInfo ( )
{
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> ͵<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ...
int nListCount = ( int ) m_AddtionalStateInfoList . size ( ) ;
for ( int iIndex = 0 ; iIndex < nListCount ; + + iIndex )
{
StateEffectStruct addStateInfo = m_AddtionalStateInfoList [ iIndex ] ;
std : : vector < StateEffectStruct > : : iterator iter = m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . begin ( ) ;
for ( ; iter ! = m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . end ( ) ; + + iter )
{
StateEffectStruct SE = ( * iter ) ;
if ( SE . nID = = addStateInfo . nID & &
SE . ApplyType = = addStateInfo . ApplyType & &
/*SE.nDurationTime == addStateInfo.nDurationTime &&*/ //<2F> <> <EFBFBD> ӽð<D3BD> <C3B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ...
SE . bAddtionalStateInfo = = addStateInfo . bAddtionalStateInfo )
{
iter = m_vlStateEffectList [ m_iSelectedSkillLevelDataApplyType ] . erase ( iter ) ;
break ;
}
}
}
m_AddtionalStateInfoList . clear ( ) ;
if ( m_hActor - > IsAppliedThisStateBlow ( STATE_BLOW : : BLOW_276 ) )
{
DNVector ( DnBlowHandle ) vlBlows ;
m_hActor - > GatherAppliedStateBlowByBlowIndex ( STATE_BLOW : : BLOW_276 , vlBlows ) ;
for ( DWORD i = 0 ; i < vlBlows . size ( ) ; i + + )
{
if ( vlBlows [ i ] )
{
CDnAddStateBySkillGroupBlow * pAddStateBySkillGroupBlow = static_cast < CDnAddStateBySkillGroupBlow * > ( vlBlows [ i ] . GetPointer ( ) ) ;
if ( pAddStateBySkillGroupBlow ) pAddStateBySkillGroupBlow - > RemoveAdditionalStateBlow ( ) ;
}
}
}
}
# if defined(PRE_FIX_64312)
bool CDnSkill : : IsSummonMonsterSkill ( )
{
m_bIsSummonMonsterSkill = false ;
//<2F> <> ų Checker<65> ߿<EFBFBD> <20> <> ȯ<EFBFBD> <C8AF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> üũ<C3BC> <C5A9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ȯ<EFBFBD> <C8AF> <EFBFBD> <EFBFBD> <EFBFBD> Ϳ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϴ<EFBFBD> <20> <> ų???(<28> <> ȹ<EFBFBD> ǰ<EFBFBD> ..)
int iNumChecker = ( int ) m_vlpUsableCheckers [ m_iSelectedSkillLevelDataApplyType ] . size ( ) ;
for ( int iChecker = 0 ; iChecker < iNumChecker ; + + iChecker )
{
IDnSkillUsableChecker * pChecker = m_vlpUsableCheckers [ m_iSelectedSkillLevelDataApplyType ] . at ( iChecker ) ;
if ( pChecker & & pChecker - > GetType ( ) = = IDnSkillUsableChecker : : SUMMON_CHECKER )
{
m_bIsSummonMonsterSkill = true ;
break ;
}
}
return m_bIsSummonMonsterSkill ;
}
void CDnSkill : : AddSummonMonsterEnchantSkill ( DnSkillHandle hSkill )
{
m_SummonMonsterEnchantSkill = hSkill ;
}
void CDnSkill : : RemoveSummonMonsterEnchantSkill ( )
{
m_SummonMonsterEnchantSkill . Identity ( ) ;
}
bool CDnSkill : : ApplySummonMonsterEnchantSkill ( DnSkillHandle hSkill )
{
m_isAppliedSummonMonsterEnchantSkill = true ;
return ApplyEnchantSkill ( hSkill ) ;
}
# endif // PRE_FIX_64312
# if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
float CDnSkill : : GetOrigDelayTime ( )
{
float fDelayTime = 0.0f ;
if ( 0.0f < m_fAnotherGlobalSkillCoolTime )
fDelayTime = m_fAnotherGlobalSkillCoolTime ;
else
fDelayTime = m_fDelayTime [ m_iSelectedSkillLevelDataApplyType ] ;
return fDelayTime ;
}
void CDnSkill : : UpdateGlobalCoolTime ( float fRate )
{
//<2F> ۷ ι <DBB7> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> ְ<EFBFBD> , <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( m_iGlobalSkillGroupID > 0 )
{
if ( m_fLeftDelayTime > 0 )
{
m_fDeltaGlobalCoolTime + = fRate ;
float fOrigDelayTime = GetOrigDelayTime ( ) ;
m_fLeftDelayTime - = fOrigDelayTime * fRate ;
}
}
}
void CDnSkill : : ResetGlobalCoolTime ( float fRate )
{
//<2F> ۷ ι <DBB7> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <20> ְ<EFBFBD> , <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> ̹<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ǿ<EFBFBD> <C7BE> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( m_iGlobalSkillGroupID > 0 )
{
//<2F> ۷ ι <DBB7> <20> <> Ÿ<EFBFBD> <C5B8> <20> <> <EFBFBD> <EFBFBD> <20> <> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD>
if ( m_fDeltaGlobalCoolTime > 0.0 )
{
float fOrigDelayTime = GetOrigDelayTime ( ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ϸ<EFBFBD> <CFB7> <EFBFBD> <20> <> ġ<EFBFBD> <C4A1> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( m_fDeltaGlobalCoolTime < fRate )
fRate = m_fDeltaGlobalCoolTime ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ġ<EFBFBD> <C4A1> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ش<EFBFBD> ..
m_fDeltaGlobalCoolTime - = fRate ;
if ( m_fDeltaGlobalCoolTime < 0.0f )
m_fDeltaGlobalCoolTime = 0.0f ;
//<2F> <> <EFBFBD> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD>
if ( m_fLeftDelayTime > 0 )
m_fLeftDelayTime + = fOrigDelayTime * fRate ;
}
}
}
# endif // PRE_ADD_TOTAL_LEVEL_SKILL
# if defined(PRE_ADD_65808)
bool CDnSkill : : IsSummonMonsterRecall ( int & monsterID )
{
//PlayAniProcess<73> <73> <20> ̿<EFBFBD> <CCBF> ϰ<EFBFBD> , <20> ش<EFBFBD> <20> <> <EFBFBD> ۿ<EFBFBD> SummonMonster<65> ñ׳ <C3B1> <D7B3> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ϸ<EFBFBD> true<75> <65> <20> <> <EFBFBD> <EFBFBD> ..
CDnPlayAniProcess * pAniProcess = static_cast < CDnPlayAniProcess * > ( GetProcessor ( IDnSkillProcessor : : PLAY_ANI ) ) ;
if ( pAniProcess & & m_hActor )
{
const char * szActionName = pAniProcess - > GetActionName ( ) ;
if ( szActionName = = NULL )
return false ;
CEtActionBase : : ActionElementStruct * pStruct = m_hActor - > GetElement ( szActionName ) ;
if ( pStruct )
{
int selectedMonsterID = - 1 ;
CEtActionSignal * pSignal = NULL ;
for ( int i = 0 ; i < ( int ) pStruct - > pVecSignalList . size ( ) ; + + i )
{
pSignal = pStruct - > pVecSignalList [ i ] ;
if ( pSignal = = NULL )
continue ;
int signalIndex = pSignal - > GetSignalIndex ( ) ;
switch ( signalIndex )
{
case STE_SummonMonster :
{
SummonMonsterStruct * pSummonMonsterInfo = ( SummonMonsterStruct * ) pSignal - > GetData ( ) ;
if ( pSummonMonsterInfo )
selectedMonsterID = pSummonMonsterInfo - > MonsterID ;
}
break ;
case STE_SummonMonsterInfo :
{
SummonMonsterInfoStruct * pInfo = ( SummonMonsterInfoStruct * ) pSignal - > GetData ( ) ;
if ( pInfo )
selectedMonsterID = pInfo - > MonsterID ;
}
break ;
}
if ( selectedMonsterID ! = - 1 )
break ;
}
if ( selectedMonsterID ! = - 1 )
{
monsterID = selectedMonsterID ;
return true ;
}
}
}
return false ;
}
# endif // PRE_ADD_65808
# if defined(_GAMESERVER)
bool CoolTimeInfo : : Process ( LOCAL_TIME localTime , float fDelta )
{
switch ( m_eDurationType )
{
case CDnSkill : : DurationTypeEnum : : Instantly :
case CDnSkill : : DurationTypeEnum : : Buff :
case CDnSkill : : DurationTypeEnum : : Debuff :
case CDnSkill : : DurationTypeEnum : : SummonOnOff :
case CDnSkill : : DurationTypeEnum : : StanceChange :
{
if ( m_fLeftDelayTime = = 0.0f ) return false ;
m_fLeftDelayTime - = fDelta ;
if ( m_fLeftDelayTime < 0.f )
m_fLeftDelayTime = 0.f ;
m_fCoolTime = ( 1.0f / ( m_fDelayTime * m_fCoolTimeAdjustBlowValue ) ) * m_fLeftDelayTime ;
}
break ;
case CDnSkill : : DurationTypeEnum : : TimeToggle :
break ;
case CDnSkill : : DurationTypeEnum : : ActiveToggle :
case CDnSkill : : DurationTypeEnum : : ActiveToggleForSummon :
break ;
case CDnSkill : : DurationTypeEnum : : Aura :
break ;
}
return ( m_fCoolTime ! = 0.0f & & m_fLeftDelayTime > 0.0f ) ;
}
void CoolTimeInfo : : OnBeginCoolTime ( )
{
m_fCoolTime = ( m_fDelayTime = = 0.f ) ? 0.0f : 1.0f ;
m_fCoolTimeAdjustBlowValue = 1.0f ;
m_fLeftDelayTime = m_fDelayTime * m_fCoolTimeAdjustBlowValue ;
}
void CoolTimeInfo : : SetInfo ( DnSkillHandle & hSkill )
{
m_nSkillID = hSkill - > GetClassID ( ) ;
m_hActor = hSkill - > GetActor ( ) ;
m_eDurationType = hSkill - > GetDurationType ( ) ;
m_fCoolTimeAdjustBlowValue = 1.0f ;
m_fDelayTime = hSkill - > GetDelayTime ( ) ;
}
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
void CoolTimeInfo : : SetInfo ( CDnPrefixSkill * pPrefixSkill )
{
m_nSkillID = pPrefixSkill - > GetSkillType ( ) ;
DnSkillHandle hSkill = pPrefixSkill - > GetSkillHandle ( ) ;
if ( hSkill )
{
m_hActor = hSkill - > GetActor ( ) ;
m_eDurationType = hSkill - > GetDurationType ( ) ;
m_fCoolTimeAdjustBlowValue = 1.0f ;
m_fDelayTime = hSkill - > GetDelayTime ( ) ;
}
}
# endif // PRE_ADD_PREFIX_SYSTE_RENEW
bool CoolTimeManager : : IsCoolTime ( int nSkillID )
{
COOLTIME_LIST : : iterator findIter = m_CoolTimeList . find ( nSkillID ) ;
//<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϵǾ<CFB5> <20> ִٸ<D6B4> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʾ Ҵ<CABE> ??
return ( findIter ! = m_CoolTimeList . end ( ) ) ;
}
void CoolTimeManager : : AddCoolTime ( DnSkillHandle hSkill )
{
if ( ! hSkill )
return ;
int nSkillID = hSkill - > GetClassID ( ) ;
COOLTIME_LIST : : iterator findIter = m_CoolTimeList . find ( nSkillID ) ;
//<2F> <> <EFBFBD> <EFBFBD> <20> <> ų ID<49> <44> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( findIter = = m_CoolTimeList . end ( ) )
{
CoolTimeInfo * pCoolTimeInfo = new CoolTimeInfo ( ) ;
pCoolTimeInfo - > SetInfo ( hSkill ) ;
pCoolTimeInfo - > OnBeginCoolTime ( ) ;
m_CoolTimeList . insert ( COOLTIME_LIST : : value_type ( nSkillID , pCoolTimeInfo ) ) ;
}
}
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
void CoolTimeManager : : AddCoolTime ( CDnPrefixSkill * pPrefixSkill )
{
if ( ! pPrefixSkill )
return ;
int nSkillType = pPrefixSkill - > GetSkillType ( ) ;
COOLTIME_LIST : : iterator findIter = m_CoolTimeList . find ( nSkillType ) ;
//<2F> <> <EFBFBD> <EFBFBD> <20> <> ų ID<49> <44> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
if ( findIter = = m_CoolTimeList . end ( ) )
{
CoolTimeInfo * pCoolTimeInfo = new CoolTimeInfo ( ) ;
pCoolTimeInfo - > SetInfo ( pPrefixSkill ) ;
pCoolTimeInfo - > OnBeginCoolTime ( ) ;
m_CoolTimeList . insert ( COOLTIME_LIST : : value_type ( nSkillType , pCoolTimeInfo ) ) ;
}
}
# endif // PRE_ADD_PREFIX_SYSTE_RENEW
void CoolTimeManager : : RemoveCoolTime ( int nSkillID )
{
COOLTIME_LIST : : iterator findIter = m_CoolTimeList . find ( nSkillID ) ;
if ( findIter ! = m_CoolTimeList . end ( ) )
{
CoolTimeInfo * pCoolTimeInfo = findIter - > second ;
if ( pCoolTimeInfo )
delete pCoolTimeInfo ;
m_CoolTimeList . erase ( findIter ) ;
}
}
void CoolTimeManager : : Process ( LOCAL_TIME localTime , float fDelta )
{
COOLTIME_LIST : : iterator iter = m_CoolTimeList . begin ( ) ;
COOLTIME_LIST : : iterator endIter = m_CoolTimeList . end ( ) ;
std : : list < int > removeCoolTimeList ;
for ( ; iter ! = endIter ; + + iter )
{
if ( ! iter - > second - > Process ( localTime , fDelta ) )
removeCoolTimeList . push_back ( iter - > first ) ;
}
if ( ! removeCoolTimeList . empty ( ) )
{
std : : list < int > : : iterator iter = removeCoolTimeList . begin ( ) ;
std : : list < int > : : iterator endIter = removeCoolTimeList . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
RemoveCoolTime ( ( * iter ) ) ;
}
removeCoolTimeList . clear ( ) ;
}
}
void CoolTimeManager : : InitList ( )
{
COOLTIME_LIST : : iterator iter = m_CoolTimeList . begin ( ) ;
COOLTIME_LIST : : iterator endIter = m_CoolTimeList . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
CoolTimeInfo * pCoolTimeInfo = iter - > second ;
if ( pCoolTimeInfo )
delete pCoolTimeInfo ;
}
m_CoolTimeList . clear ( ) ;
}
# endif // _GAMESERVER
# if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
CDnPrefixSkill : : CDnPrefixSkill ( int nPrefixType )
{
m_nPrefixType = nPrefixType ;
m_fProbability = 0.0f ;
}
CDnPrefixSkill : : ~ CDnPrefixSkill ( )
{
}
void CDnPrefixSkill : : SetSkillHandle ( DnSkillHandle hSkill )
{
m_hSkill = hSkill ;
}
void CDnPrefixSkill : : UpdateCandidateSkill ( )
{
std : : list < DnSkillHandle > : : iterator iter = m_SkillList . begin ( ) ;
std : : list < DnSkillHandle > : : iterator endIter = m_SkillList . end ( ) ;
float fDelayTime = FLT_MAX ;
DnSkillHandle hSelectedSkill ;
for ( ; iter ! = endIter ; + + iter )
{
DnSkillHandle hSkill = * iter ;
if ( ! hSkill )
continue ;
float fSkillDelayTime = hSkill - > GetDelayTime ( ) ;
if ( fSkillDelayTime < fDelayTime )
{
hSelectedSkill = hSkill ;
fDelayTime = fSkillDelayTime ;
}
}
if ( hSelectedSkill )
SetSkillHandle ( hSelectedSkill ) ;
}
void CDnPrefixSkill : : AddSkill ( DnSkillHandle hSkill )
{
if ( ! hSkill ) return ;
m_SkillList . push_back ( hSkill ) ;
//<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 ) ) ;
m_fProbability + = pProbabilityChecker ? pProbabilityChecker - > GetProbability ( ) : 0.0f ;
UpdateCandidateSkill ( ) ;
AddStateEffectInfo ( hSkill ) ;
}
void CDnPrefixSkill : : RemoveSkill ( DnSkillHandle hSkill )
{
std : : list < DnSkillHandle > : : iterator iter = m_SkillList . begin ( ) ;
std : : list < DnSkillHandle > : : iterator endIter = m_SkillList . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
if ( ( * iter ) = = hSkill )
{
//<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 ) ) ;
m_fProbability - = pProbabilityChecker ? pProbabilityChecker - > GetProbability ( ) : 0.0f ;
m_SkillList . erase ( iter ) ;
break ;
}
}
UpdateCandidateSkill ( ) ;
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> <20> ɶ<EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> 鼭 <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> ٽ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> ..
UpdateStateEffects ( ) ;
}
void CDnPrefixSkill : : UpdateStateEffects ( )
{
//1.<2E> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ..
m_vlStateEffectList . clear ( ) ;
//<2F> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> 鼭 <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <20> <> <EFBFBD> <EFBFBD> .
std : : list < DnSkillHandle > : : iterator iter = m_SkillList . begin ( ) ;
std : : list < DnSkillHandle > : : iterator endIter = m_SkillList . end ( ) ;
for ( ; iter ! = endIter ; + + iter )
{
DnSkillHandle hSkill = ( * iter ) ;
if ( hSkill )
{
AddStateEffectInfo ( hSkill ) ;
}
}
}
void CDnPrefixSkill : : AddStateEffectInfo ( DnSkillHandle hSkill )
{
if ( m_vlStateEffectList . empty ( ) )
{
//hSkill<6C> <6C> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ״<EFBFBD> <D7B4> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ߰<EFBFBD> <20> Ѵ <EFBFBD> .
int nStateEffectCount = hSkill - > GetStateEffectCount ( ) ;
for ( int i = 0 ; i < nStateEffectCount ; + + i )
{
CDnSkill : : StateEffectStruct * pAddStateEffect = hSkill - > GetStateEffectFromIndex ( i ) ;
if ( pAddStateEffect )
m_vlStateEffectList . push_back ( * pAddStateEffect ) ;
}
}
else
{
//<2F> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ..
if ( m_vlStateEffectList . size ( ) ! = hSkill - > GetStateEffectCount ( ) )
return ;
switch ( m_nPrefixType )
{
case Prefix_000 : //<2F> ı <EFBFBD> <C4B1> <EFBFBD>
AddStateEffectInfo_Prefix_000 ( hSkill ) ;
break ;
case Prefix_001 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_001 ( hSkill ) ;
break ;
case Prefix_002 : //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_002 ( hSkill ) ;
break ;
case Prefix_003 : //<2F> ٶ<EFBFBD> <D9B6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_003 ( hSkill ) ;
break ;
case Prefix_004 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_004 ( hSkill ) ;
break ;
case Prefix_005 : //<2F> <> Ȥ<EFBFBD> <C8A4>
AddStateEffectInfo_Prefix_005 ( hSkill ) ;
break ;
case Prefix_006 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_006 ( hSkill ) ;
break ;
case Prefix_007 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_007 ( hSkill ) ;
break ;
case Prefix_008 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_008 ( hSkill ) ;
break ;
case Prefix_009 : //Ȱ<> <C8B0> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_009 ( hSkill ) ;
break ;
case Prefix_010 : //ġ<> <C4A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_010 ( hSkill ) ;
break ;
case Prefix_011 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_011 ( hSkill ) ;
break ;
case Prefix_012 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_012 ( hSkill ) ;
break ;
case Prefix_013 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_013 ( hSkill ) ;
break ;
case Prefix_014 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_014 ( hSkill ) ;
break ;
case Prefix_015 : //ö<> <C3B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_015 ( hSkill ) ;
break ;
case Prefix_016 : //<2F> 帷<EFBFBD> <E5B8B7> <20> <> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_016 ( hSkill ) ;
break ;
case Prefix_017 : //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_017 ( hSkill ) ;
break ;
case Prefix_018 : //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_018 ( hSkill ) ;
break ;
case Prefix_019 : //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_019 ( hSkill ) ;
break ;
case Prefix_020 : //ö<> <C3B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
AddStateEffectInfo_Prefix_020 ( hSkill ) ;
break ;
case Prefix_021 : //<2F> 帷<EFBFBD> <E5B8B7> <20> <> <EFBFBD>
AddStateEffectInfo_Prefix_021 ( hSkill ) ;
break ;
case Prefix_022 : //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
AddStateEffectInfo_Prefix_022 ( hSkill ) ;
break ;
case Prefix_023 : //<2F> ٶ<EFBFBD> <D9B6> <EFBFBD> <20> <> <EFBFBD>
AddStateEffectInfo_Prefix_023 ( hSkill ) ;
break ;
case Prefix_024 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
AddStateEffectInfo_Prefix_024 ( hSkill ) ;
break ;
case Prefix_025 : //<2F> ǰ<EFBFBD> <C7B0> <EFBFBD>
AddStateEffectInfo_Prefix_025 ( hSkill ) ;
break ;
case Prefix_026 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_026 ( hSkill ) ;
break ;
case Prefix_027 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
AddStateEffectInfo_Prefix_027 ( hSkill ) ;
break ;
case Prefix_028 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
AddStateEffectInfo_Prefix_028 ( hSkill ) ;
break ;
// case Prefix_029: //<2F> ߰<EFBFBD> <DFB0> <EFBFBD>
// AddStateEffectInfo_Prefix_029(hSkill);
// break;
case Prefix_030 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_030 ( hSkill ) ;
break ;
case Prefix_031 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
AddStateEffectInfo_Prefix_031 ( hSkill ) ;
break ;
// case Prefix_032: //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
// AddStateEffectInfo_Prefix_032(hSkill);
// break;
// case Prefix_033: //<2F> ұ<EFBFBD> <D2B1> <EFBFBD>
// AddStateEffectInfo_Prefix_033(hSkill);
// break;
case Prefix_034 : //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
AddStateEffectInfo_Prefix_034 ( hSkill ) ;
break ;
case Prefix_035 : //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
AddStateEffectInfo_Prefix_035 ( hSkill ) ;
break ;
case Prefix_036 : //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
AddStateEffectInfo_Prefix_036 ( hSkill ) ;
break ;
case Prefix_037 : //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
AddStateEffectInfo_Prefix_037 ( hSkill ) ;
break ;
default :
break ;
}
}
}
void CDnPrefixSkill : : AddStateEffectInfo ( STATE_BLOW : : emBLOW_INDEX blowList [ ] , int nCount , DnSkillHandle hSkill )
{
if ( ! hSkill )
return ;
int nAddStateEffectCount = hSkill - > GetStateEffectCount ( ) ;
//<2F> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 4<> <34>
if ( nAddStateEffectCount ! = nCount )
{
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> λ<EFBFBD> <20> <> ų Type[%d]<5D> <> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ٸ<EFBFBD> ...!!\n " , m_nPrefixType ) ;
return ;
}
for ( int i = 0 ; i < nCount ; + + i )
{
CDnSkill : : StateEffectStruct * pAddStateEffect = hSkill - > GetStateEffectFromIndex ( i ) ;
CDnSkill : : StateEffectStruct * pOrigStateEffect = & m_vlStateEffectList [ i ] ;
//<2F> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Index<65> <78> BLOW_213<31> <33> <20> ƴϸ<C6B4> <20> ߸<EFBFBD> <DFB8> ȰŴ<C8B0> ..
if ( ( STATE_BLOW : : emBLOW_INDEX ) pOrigStateEffect - > nID ! = blowList [ i ] )
{
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <EFBFBD> Index<65> <78> <20> ٸ<EFBFBD> ..%d<> ̾<EFBFBD> <CCBE> <EFBFBD> <20> ϴµ<CFB4> %d<> ̳<EFBFBD> ...!!!\n " , blowList [ i ] , pOrigStateEffect - > nID ) ;
continue ;
}
//<2F> ΰ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Index<65> <78> <20> ٸ<EFBFBD> <D9B8> <EFBFBD> ..
if ( pAddStateEffect - > nID ! = pOrigStateEffect - > nID )
{
OutputDebug ( " <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> Index<65> <78> <20> ٸ<EFBFBD> ..Orig[%d], Add[%d]..!!!\n " , pOrigStateEffect - > nID , pAddStateEffect - > nID ) ;
continue ;
}
std : : string szNewValue = " " ;
CDnCreateBlow : : AddStateEffectValue ( ( STATE_BLOW : : emBLOW_INDEX ) pOrigStateEffect - > nID , pOrigStateEffect - > szValue . c_str ( ) , pAddStateEffect - > szValue . c_str ( ) , szNewValue ) ;
OutputDebug ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (%s), <20> ߰<EFBFBD> <20> Ǵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ȿ<EFBFBD> <C8BF> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (%s), <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> (%s)\n " , pOrigStateEffect - > szValue . c_str ( ) , pAddStateEffect - > szValue . c_str ( ) , szNewValue . c_str ( ) ) ;
pOrigStateEffect - > szValue = szNewValue ;
//<2F> <> <EFBFBD> <EFBFBD> <20> ð<EFBFBD> <C3B0> <EFBFBD> ū <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
pOrigStateEffect - > nDurationTime = max ( pOrigStateEffect - > nDurationTime , pAddStateEffect - > nDurationTime ) ;
}
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_000 ( DnSkillHandle hSkill ) //<2F> ı <EFBFBD> <C4B1> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_213 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_001 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_214 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_002 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_221 ,
STATE_BLOW : : BLOW_124 ,
STATE_BLOW : : BLOW_128 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_003 ( DnSkillHandle hSkill ) //<2F> ٶ<EFBFBD> <D9B6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_221 ,
STATE_BLOW : : BLOW_126 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_004 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_214 ,
STATE_BLOW : : BLOW_036 ,
STATE_BLOW : : BLOW_037 ,
STATE_BLOW : : BLOW_038 ,
STATE_BLOW : : BLOW_039 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_005 ( DnSkillHandle hSkill ) //<2F> <> Ȥ<EFBFBD> <C8A4>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_157 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_006 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_035 ,
STATE_BLOW : : BLOW_182 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_007 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_016 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_008 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_018 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_009 ( DnSkillHandle hSkill ) //Ȱ<> <C8B0> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_014 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_010 ( DnSkillHandle hSkill ) //ġ<> <C4A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_158 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_011 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_070 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_012 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_221 ,
STATE_BLOW : : BLOW_175 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_013 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_079 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_014 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_076 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_015 ( DnSkillHandle hSkill ) //ö<> <C3B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_004 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_016 ( DnSkillHandle hSkill ) //<2F> 帷<EFBFBD> <E5B8B7> <20> <> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_094 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_017 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_032 ,
STATE_BLOW : : BLOW_182 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_018 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_033 ,
STATE_BLOW : : BLOW_182 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_019 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_034 ,
STATE_BLOW : : BLOW_182 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_020 ( DnSkillHandle hSkill ) //ö<> <C3B6> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_134 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ; ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_021 ( DnSkillHandle hSkill ) //<2F> 帷<EFBFBD> <E5B8B7> <20> <> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_135 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_022 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_124 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_023 ( DnSkillHandle hSkill ) //<2F> ٶ<EFBFBD> <D9B6> <EFBFBD> <20> <> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_126 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_024 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_036 ,
STATE_BLOW : : BLOW_037 ,
STATE_BLOW : : BLOW_038 ,
STATE_BLOW : : BLOW_039 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_025 ( DnSkillHandle hSkill ) //<2F> ǰ<EFBFBD> <C7B0> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_124 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_026 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_111 ,
STATE_BLOW : : BLOW_112 ,
STATE_BLOW : : BLOW_113 ,
STATE_BLOW : : BLOW_114 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_027 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_016 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_028 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_018 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_029 ( DnSkillHandle hSkill ) //<2F> ߰<EFBFBD> <DFB0> <EFBFBD>
{
// STATE_BLOW::emBLOW_INDEX blowList[] =
// {
// };
//
// int nCount = sizeof(blowList) / sizeof(STATE_BLOW::emBLOW_INDEX);
//
// AddStateEffectInfo(blowList, nCount, hSkill);
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_030 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_076 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_031 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_156 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_032 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
{
// STATE_BLOW::emBLOW_INDEX blowList[] =
// {
// };
//
// int nCount = sizeof(blowList) / sizeof(STATE_BLOW::emBLOW_INDEX);
//
// AddStateEffectInfo(blowList, nCount, hSkill);
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_033 ( DnSkillHandle hSkill ) //<2F> ұ<EFBFBD> <D2B1> <EFBFBD>
{
// STATE_BLOW::emBLOW_INDEX blowList[] =
// {
// };
//
// int nCount = sizeof(blowList) / sizeof(STATE_BLOW::emBLOW_INDEX);
//
// AddStateEffectInfo(blowList, nCount, hSkill);
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_034 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_036 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_035 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_037 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_036 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_038 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
void CDnPrefixSkill : : AddStateEffectInfo_Prefix_037 ( DnSkillHandle hSkill ) //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD>
{
STATE_BLOW : : emBLOW_INDEX blowList [ ] =
{
STATE_BLOW : : BLOW_039 ,
} ;
int nCount = sizeof ( blowList ) / sizeof ( STATE_BLOW : : emBLOW_INDEX ) ;
AddStateEffectInfo ( blowList , nCount , hSkill ) ;
}
# endif // PRE_ADD_PREFIX_SYSTE_RENEW
void CDnSkill : : OnAnotherGlobalSkillBeginCoolTime ( DnSkillHandle hSkill )
{
if ( hSkill )
{
m_fAnotherGlobalSkillCoolTime = hSkill - > GetDelayTime ( ) ;
m_nAnotherGlobakSkillID = hSkill - > GetClassID ( ) ;
}
}