4904 lines
No EOL
154 KiB
C++
4904 lines
No EOL
154 KiB
C++
#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();
|
||
}
|
||
} |