DragonNest/GameCommon/MASkillUser.h

384 lines
14 KiB
C
Raw Normal View History

2024-12-19 09:48:26 +08:00
#pragma once
#include "EtMatrixEx.h"
#include "DnItem.h"
#include "DnSkill.h"
class CDnActor;
class CDnProjectile;
class MASkillUser
{
public:
MASkillUser();
virtual ~MASkillUser();
protected:
LOCAL_TIME m_LocalTime;
DnSkillHandle m_hProcessSkill;
DnSkillHandle m_hCanceledSkill;
DnSkillHandle m_hToggleSkill; //<2F>̳༮<CCB3><E0BCAE> <20><><EFBFBD>̻<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>־ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
DnSkillHandle m_hAuraSkill;
DnSkillHandle m_hItemSkill;
#ifndef PRE_FIX_SKILLLIST
DNVector(DnSkillHandle) m_vlhSkillList;
vector<bool> m_vbSelfAllocList;
#else
struct S_SKILL_OBJECT
{
DnSkillHandle hSkill;
bool bSelfAlloc;
S_SKILL_OBJECT( void ) : bSelfAlloc( false ) {};
S_SKILL_OBJECT( DnSkillHandle _hSkill, bool _bSelfAlloc )
{
hSkill = _hSkill;
bSelfAlloc = _bSelfAlloc;
};
};
#endif // #ifndef PRE_FIX_SKILLLIST
// <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ӽð<D3BD> <20>ִ<EFBFBD> <20><>ų, Į <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B0B0> <20><>ų <20><>ƾ <20>״<EFBFBD><D7B4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>͵<EFBFBD><CDB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
deque<DnSkillHandle> m_dqhItemSkillList;
DnActorHandle m_hSkillTarget;
EtVector3 m_vSkillTargetPos;
// <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD>Ƶд<C6B5>.
DNVector(DnSkillHandle) m_vlhToggleSkills;
DNVector(DnSkillHandle) m_vlhAuraSkills;
// <20>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ɷ<EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>ִ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ƽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִٰ<D6B4> ȿ<><C8BF> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> Ÿ<>̹<EFBFBD><CCB9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
DNVector(DnSkillHandle) m_vlhSelfPassiveBlowSkill;
CDnActor *m_pActor;
bool m_bIsValidActor;
#ifdef _GAMESERVER
// <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><> <20><><EFBFBD>¸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD>Ͽ<EFBFBD> <20>Ǿ <20><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD> <20><><EFBFBD><EFBFBD>)
CDnState m_ActorStateSnapshotForToggleProjectile;
#endif
// <20><><EFBFBD><EFBFBD> <20><>ų <20><>ų <20><><EFBFBD><EFBFBD>Ʈ. MASkillUser::Process <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
DNVector(DnSkillHandle) m_vlhReservedFinishSkill;
// <20><>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>޴<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
//float m_fAdjustCoolTime;
#ifdef _GAMESERVER
// cheat
bool m_bIgnoreCoolTime;
list<DnSkillHandle> m_listAutoPassiveSkills;
list<DnSkillHandle> m_listProcessAutoPassiveSkills;
// <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>.. <20><>Ÿ<EFBFBD><C5B8> <20>ǰݵ<C7B0> <20><><EFBFBD>󿡰<EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> Target <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ο<EFBFBD><CEBF>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
DNVector(IDnSkillProcessor*) m_vlpApplySEWhenNormalHitProcessor;
#else
bool m_bSkillExecutedThisFrame; // <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ñ׳<C3B1><D7B3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>. (#9886)
// <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׼<EFBFBD><D7BC≯<EFBFBD><CCB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
set<string> m_setUseActionNames;
#endif
// <20><>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>. (#21146)
float m_fCoolTimeDeltaAdjustValue;
private:
#ifdef PRE_FIX_SKILLLIST
vector<S_SKILL_OBJECT> m_vlSkillObjects;
#endif // #ifdef PRE_FIX_SKILLLIST
protected:
bool IsValidActor();
CDnSkill::UsingResult CanExecuteSkill( DnSkillHandle hSkill );
// Process
virtual void OnSkillProcess( LOCAL_TIME LocalTime, float fDelta );
// <20><>ų <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>۵Ǵ<DBB5> <20><><EFBFBD><EFBFBD> <20>нú<D0BD> <20><>ų <20>÷<EFBFBD><C3B7>״<EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD>ڷ<EFBFBD> <20>޽<EFBFBD><DEBD>ϴ<EFBFBD>.
#ifdef _GAMESERVER
virtual bool ExecuteSkill( DnSkillHandle hSkill, LOCAL_TIME LocalTime, float fDelta );
#else
virtual bool ExecuteSkill( DnSkillHandle hSkill, LOCAL_TIME LocalTime, float fDelta, bool bCheckValid = true, bool bAutoUsedFromServer = false, bool bSendPacketToServer = true );
#endif
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>Ǹ<EFBFBD> <20><><EFBFBD>۵<EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD> <20>Բ<EFBFBD> <20>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>.
virtual void OnSkillToggleProjectile( DnSkillHandle hSkill, CDnProjectile *pProjectile );
public:
// <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>.
virtual void OnSkillToggle( DnSkillHandle hSkill, bool bEnable );
// <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>.
virtual void OnSkillAura( DnSkillHandle hSkill, bool bEnable );
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8>
virtual void OnSkillProjectile( CDnProjectile *pProjectile );
virtual void OnAddSkill( DnSkillHandle hSkill, bool isInitialize = false );
virtual void OnRemoveSkill( DnSkillHandle hSkill );
virtual void OnReplacementSkill( DnSkillHandle hLegacySkill, DnSkillHandle hNewSkill ) {};
public:
DnSkillHandle FindSkill( int nSkillTableID );
virtual bool CanAddSkill( int nSkillTableID, int nLevel = 1 ){ return true; }
virtual bool AddSkill( int nSkillTableID, int nLevel = 1, int iSkillLevelApplyType = CDnSkill::PVE );
#ifndef PRE_FIX_SKILLLIST // <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB><EFBFBD> <20><><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD>.
#else
virtual void AddSkillObject( S_SKILL_OBJECT& SkillObject ) { m_vlSkillObjects.push_back( SkillObject ); };
#endif // #ifdef PRE_FIX_SKILLIST
// <20>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20>÷<EFBFBD><C3B7>̾<EFBFBD> <20><><EFBFBD>ʹ<EFBFBD> <20><>ųƮ<C5B3><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ȵ˴ϴ<CBB4>.
bool AddSkill( DnSkillHandle hSkill );
bool RemoveSkill( int nSkillTableID );
bool RemoveSkillAll();
bool EndStateEffectSkill(int nSkillTableID);
// <20><><EFBFBD><EFBFBD> Ŭ<>󿡼<EFBFBD><F3BFA1BC><EFBFBD> <20><><EFBFBD>̰<EFBFBD> <20><><EFBFBD><EFBFBD>.
#ifndef _GAMESERVER
bool ReplacementSkill( int nSkillTableID, int nLevel = 1 ); // <20>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų <20><>ü self allocation
bool ReplacementSkill( DnSkillHandle hNewSkill );
#endif
virtual bool ApplyPassiveSkill( DnSkillHandle hSkill, bool isInitialize = false );
virtual void OnApplyPassiveSkillBlow( int iBlowID ) {};
void ApplyPassiveSkills( void ); // <20><>Ȱ <20><> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų <20><> ȣ<><C8A3><EFBFBD><EFBFBD>
bool bIsPassiveSkill( DnBlowHandle hBlow );
bool IsExistSkill( int nSkillTableID, int nLevel = -1 );
void SetSkillLevel( int nSkillTableID, int nValue );
bool IsSelfAllocSkill( int nSkillTableID );
virtual CDnSkill::UsingResult UseSkill( int nSkillTableID, bool bCheckValid = true, bool bAutoUseFromServer = false, int nLuaSkillIndex=-1 ); // LuaSkillIndex <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AI <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF>ؼ<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD>.
bool IsProcessSkill();
void ResetToggleSkill();
void ResetAuraSkill();
bool IsEnabledToggleSkill()
{
//m_hToggleSkill<6C><6C><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>̻<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
return false;
};
bool IsEnabledAuraSkill() { return (m_hAuraSkill != NULL); };
DnSkillHandle GetProcessSkill();
DnSkillHandle GetEnabledToggleSkill() { return m_hToggleSkill; };
DnSkillHandle GetEnabledAuraSkill() { return m_hAuraSkill; };
DnActorHandle GetSkillTarget() { return m_hSkillTarget; }
EtVector3 *GetSkillTargetPos() { return &m_vSkillTargetPos; }
DWORD GetSkillCount();
DnSkillHandle GetSkillFromIndex( DWORD dwIndex );
bool UseItemSkill( int nSkillTableID, int nSkillLevelTableID, CDnItem::ItemSkillApplyType ItemSkillApplyType, int nItemID = -1 );
bool IsUsingItemSkill( void ) { return m_hItemSkill ? true : false; }
void ResetSkillCoolTime( void );
void ResetPvPSkillCoolTime();
void ResetLadderSkillCoolTime();
#ifdef _GAMESERVER
void IgnoreSkillCoolTime( void );
bool IsIgnoreSkillCoolTime( void ) { return m_bIgnoreCoolTime; };
#endif
#ifndef _GAMESERVER
bool IsUsingSkillAction( const char *szAction );
#endif
void ReserveFinishSkill( DnSkillHandle hSkill );
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> <20>ߴ<EFBFBD>.
void CancelUsingSkill( void );
#ifdef _GAMESERVER
// for Fire/Ice Shield
void UseAutoPassiveSkill( LOCAL_TIME LocalTime, float fDelta );
bool IsProcessingAutoPassive( int iSkillID );
void EndAutoPassiveSkill( LOCAL_TIME LocalTime, float fDelta );
//const CDnState *GetActorStateSnapshotForProjectile( void ) { return &m_ActorStateSnapshotForToggleProjectile; };
#endif
//rlkt_mastery
bool HavePassiveSkill(int iSkillID);
//void AddCoolTimeAdjustValue( float fCoolTimeAdjustValue )
//{
// _ASSERT( 0.0f < fCoolTimeAdjustValue+fCoolTimeAdjustValue && fCoolTimeAdjustValue+fCoolTimeAdjustValue < 1.0f );
// m_fAdjustCoolTime += fCoolTimeAdjustValue;
//};
//float GetCoolTimeAdjustValue( void ) { return m_fAdjustCoolTime; };
// <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20>нú<D0BD><C3BA><EFBFBD> Ư<><C6AF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD>ǵ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EBB0A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ <20>ʿ<EFBFBD>.
void OnAttachWeapon( DnWeaponHandle hWeapon, int iAttachedWeaponIndex );
void OnDetachWeapon( DnWeaponHandle hWeapon, int iDetachedWeaponIndex );
float GetCoolTimeDeltaAdjustValue( void ) { return m_fCoolTimeDeltaAdjustValue; };
#ifdef _GAMESERVER
void SelectSkillLevelDataType( int iLevelDataType, bool bPlayerSummonedMonster = false );
int GetSelectedSkillLevelDataType( void );
#endif
protected:
std::map<int, int> m_vlStateBlowIDToRemove; // [2010/12/15 semozz]<5D>ش<EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> ID<49>ߺ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> map<61><70><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
public:
void AddStateBlowIDToRemove(int blowID); //<2F><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> ID<49><44><EFBFBD><EFBFBD>
void InitStateBlowIDToRemove(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> ID<49><44><EFBFBD><EFBFBD>Ʈ <20>ʱ<EFBFBD>ȭ
virtual void RemoveResetStateBlow() {}; //<2F><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF> <20><><EFBFBD><EFBFBD>
#ifdef _GAMESERVER
void AddApplySEWhenTargetNormalHitProcessor( IDnSkillProcessor* pProcessor ) { m_vlpApplySEWhenNormalHitProcessor.push_back( pProcessor ); };
void RemoveApplySEWhenTargetNormalHitProcessor( IDnSkillProcessor* pProcessor );
#endif
#if defined(_GAMESERVER)
protected:
//<2F><><EFBFBD>Ժ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
struct PREFIX_SYSTEM_SKILLINFO
{
int slotIndex; //<2F>ش<EFBFBD> <20><><EFBFBD><EFBFBD> Index
float fRatio; //<2F><>ų Ȯ<><C8AE>
DnSkillHandle hSkill; //<2F><>ų <20>ڵ<EFBFBD>
};
typedef std::vector<PREFIX_SYSTEM_SKILLINFO> PRESIX_SYSTEM_SKILLS; //<2F><><EFBFBD>ξ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
typedef std::map<int, PRESIX_SYSTEM_SKILLS> PREFIX_SYSTEM_SKILL_COLLECTION; //<2F><>ų ID<49><44> <20>׷<EFBFBD><D7B7><EFBFBD>/<2F><EFBFBD><ECBCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׷<EFBFBD><D7B7>ο<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
typedef std::map<int, PREFIX_SYSTEM_SKILLINFO> PREFIX_SYSTEM_SKILL_LIST; //<2F><><EFBFBD>ξ<EFBFBD> <20>ý<EFBFBD><C3BD>ۿ<EFBFBD> <20><><EFBFBD>Ժ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
PREFIX_SYSTEM_SKILL_LIST m_prefixSystemDefenceSkills; //<2F><><EFBFBD>ξ<EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3>
PREFIX_SYSTEM_SKILL_COLLECTION m_PrefixSystemCandiateDefenceSkills;
PREFIX_SYSTEM_SKILL_LIST m_prefixSystemOffenceSkills; //<2F><><EFBFBD>ξ<EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݿ<EFBFBD> <20><>ų<EFBFBD><C5B3>
PREFIX_SYSTEM_SKILL_COLLECTION m_PrefixSystemCandiateOffenceSkills;
list<DnSkillHandle> m_listProcessPreFixDefenceSkills;
list<DnSkillHandle> m_listProcessPreFixOffenceSkills;
void RefreshPrefixDefenceSkills(); //<2F><><EFBFBD><EFBFBD> <20><><><C5BB><EFBFBD><EFBFBD> <20><><EFBFBD>ξ<EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.(<28><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ź<EFBFBD> <20>ϴ°<CFB4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><><C5BB><EFBFBD><EFBFBD> <20>ѹ<EFBFBD> <20><> <20><><EFBFBD>°<EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>..)
void RefreshPrefixOffenceSkills(float fHitDamageProb = 1.0f); //<2F><><EFBFBD><EFBFBD> <20><><><C5BB><EFBFBD><EFBFBD> <20><><EFBFBD>ξ<EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD>ݿ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
//<2F><><EFBFBD>ξ<EFBFBD><CEBE><EFBFBD> <20><>ų <20><>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD>
CoolTimeManager m_PrefixSkillCoolTimeManager;
public:
void EndPrefixSystemSkill( LOCAL_TIME LocalTime, float fDelta );
bool AddPreFixSystemDefenceSkill(int slotIndex, DnSkillHandle hSkill);
void RemovePreFixSystemDefenceSkill(int slotIndex);
void RemoveProcessPrefixDefenceSkill(DnSkillHandle hSkill);
bool AddPreFixSystemOffenceSkill(int slotIndex, DnSkillHandle hSkill);
void RemovePreFixSystemOffenceSkill(int slotIndex);
void RemoveProcessPrefixOffenceSkill(DnSkillHandle hSkill);
// <20><><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
void GroupingPrefixDefenceSkillsBySameSkillID(PREFIX_SYSTEM_SKILL_LIST &skillList, PREFIX_SYSTEM_SKILL_COLLECTION &sameSkillList);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><>ų<EFBFBD><C5B3> <20>ߵ<EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(+)<29>ؼ<EFBFBD> <20>ĺ<EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
void CalculateProbabilitySkill(PREFIX_SYSTEM_SKILL_LIST &candidateSkills, PREFIX_SYSTEM_SKILL_COLLECTION &sameSkillList);
// <20><><EFBFBD><EFBFBD> <20><>ųID<49><44> <20><>ų<EFBFBD><C5B3><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><EFBFBD><ECBCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
void GroupingSkillByPriority(PREFIX_SYSTEM_SKILL_COLLECTION& prefixSystemSkills, PREFIX_SYSTEM_SKILL_LIST& tempCandiateSkills, float fHitDamageProb = 1.0f);
void ProcessPrefixDefenceSkill(DnActorHandle hHitter); //<2F><><EFBFBD>ξ<EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų <20>ߵ<EFBFBD>
// <20>ڽſ<DABD><C5BF>Ը<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ų<EFBFBD><C5B2>.
void ProcessPrefixOffenceSkill(float fHitDamageProb); //<2F><><EFBFBD>ξ<EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݿ<EFBFBD> <20><>ų <20>ߵ<EFBFBD>
void ApplyPrefixOffenceSkillToTarget(DnActorHandle hTarget);//<2F><><EFBFBD>ξ<EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݿ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BFA1> <20><><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ξ<EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD>ݿ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ.
void InitPrefixOffenceSkills();
bool IsPrefixTriggerSkill();
bool IsApplyPrefixOffenceSkill() { return !m_listProcessPreFixOffenceSkills.empty(); }
#endif // _GAMESERVER
protected:
struct SkillLevelUpInfo
{
int nSkillID;
int nLevelUp;
};
std::map<int, SkillLevelUpInfo> m_SkillLevelUpInfoList;
std::map<int, int> m_SkillLevelUpInfo;
void UpdateSkillLevelUpInfo();
void SkillLevelUp(int nSkillID, int nLevelUp);
public:
void AddSkillLevelUpInfo(int nSlotIndex, int nSkillID, int nLevelUp);
void RemoveSkillLevelUpInfo(int nSlotIndex);
int GetSkillLevelUpValue(int nSkillID);
bool ExistSkillLevelUpValue();
void ApplySkillLevelUp( int nSkillTableID, int nValue ); //SetSkillLevel<65>Լ<EFBFBD><D4BC><EFBFBD> ù<><C3B9>° <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD>
//Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> LocalPlayer<65><72> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> LocalPlayerActor<6F><72><EFBFBD><EFBFBD> SkillTask<73><6B> <20><><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>)
//Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> LocalPlayer<65><72> <20>ƴ<EFBFBD> <20>ٸ<EFBFBD> ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PlayerActor<6F><72> MaSkillUser<65><72><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD>
virtual void ChangeSkillLevelUp(int nSkillID, int nSkillLevel);
protected:
std::map<int, SkillLevelUpInfo> m_CashSkillLevelUpInfoList;
std::map<int, int> m_CashSkillLevelUpInfo;
void UpdateSkillLevelUpInfoByCashItem();
public:
void AddSkillLevelUpInfoByCashItem(int nSlotIndex, int nSkillID, int nLevelUp);
void RemoveSkillLevelUpInfoByCashItem(int nSlotIndex);
#if defined(PRE_ADD_PREFIX_SYSTE_RENEW)
#if defined(_GAMESERVER)
protected:
typedef std::map<int, CDnPrefixSkill*> PREFIX_SKILL_INFO;
PREFIX_SKILL_INFO m_PrefixDefenceSkills;
PREFIX_SKILL_INFO m_PrefixOffenceSkills;
std::list<CDnPrefixSkill*> m_ProcessPrefixOffenceSkills;
public:
void AddPrefixDefenceSkill(DnSkillHandle hSkill);
void RemovePrefixDefenceSkill(DnSkillHandle hSkill);
void ProcessPrefixDefenceSkill_New(DnActorHandle hHitter);
void AddPrefixOffenceSkill(DnSkillHandle hSkill);
void RemovePrefixOffenceSkill(DnSkillHandle hSkill);
void RemoveProcessPrefixOffenceSkill(CDnPrefixSkill* pRemovePrefixSkill);
void ProcessPrefixOffenceSkill_New();
void ApplyPrefixOffenceSkillToTarget_New(DnActorHandle hTarget);
#endif // _GAMESERVER
#endif // PRE_ADD_PREFIX_SYSTE_RENEW
protected:
typedef std::map<int, DnSkillHandle> TOGGLESKILLLIST;
TOGGLESKILLLIST m_ToggleOnSkillList; //<2F><><EFBFBD><EFBFBD>On<4F><6E> <20><>ų <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
void SkillToggle(DnSkillHandle hSkill, bool isOn); //<2F><>ų <20><><EFBFBD><EFBFBD> On/Off
public:
TOGGLESKILLLIST& GetActiveToggleSkillList() { return m_ToggleOnSkillList; }
void SummonOnOffSkillInit(DWORD dwSummonMonsterID);
#if defined(PRE_FIX_62052)
void ApplyGlobalSkillCoolTime(DnSkillHandle hSkill);
#endif // PRE_FIX_62052
#if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
public:
void UpdateGlobalCoolTime(float fRate);
void ResetGlobalCoolTime(float fRate);
#endif // PRE_ADD_TOTAL_LEVEL_SKILL
};