DragonNest/GameCommon/DnSkillTreeSystem.h

299 lines
17 KiB
C
Raw Normal View History

2024-12-20 16:56:44 +08:00
<EFBFBD><EFBFBD>#pragma once
#if defined(_VILLAGESERVER) || defined(_GAMESERVER)
class CDNGameDataManager;
#else
#include "DNTableFile.h"
#endif
//------------------------------------------------------------------------------
/**
Note \<EFBFBD>0<EFBFBD>:
<EFBFBD>¬<EFBFBD> <EFBFBD>Ҭ<EFBFBD> <EFBFBD>(<EFBFBD> L<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> p<EFBFBD>t<EFBFBD>0<EFBFBD>|<EFBFBD> \<EFBFBD>ܴt<EFBFBD><EFBFBD> P<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
p<EFBFBD>t<EFBFBD>0<EFBFBD> U<EFBFBD>x<EFBFBD> <EFBFBD>ƭ<EFBFBD>/p<EFBFBD>t<EFBFBD>0<EFBFBD> <EFBFBD> <EFBFBD>ƭ<EFBFBD>D<EFBFBD> <EFBFBD>̬<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
p<EFBFBD>t<EFBFBD>0<EFBFBD><EFBFBD> l<EFBFBD>1<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD>1<EFBFBD>X<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD> p<EFBFBD>t<EFBFBD>0<EFBFBD>|<EFBFBD> }Ǵœ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD>
<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> J<EFBFBD>0<EFBFBD> L<EFBFBD>8<EFBFBD><EFBFBD><EFBFBD> @<EFBFBD><EFBFBD>Ҥ<EFBFBD><EFBFBD>ܴ <EFBFBD><EFBFBD>$<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ň<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ȳ<EFBFBD><EFBFBD>.
*/
//------------------------------------------------------------------------------
// <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD>o<EFBFBD> \<EFBFBD><EFBFBD> /<EFBFBD>…<EFBFBD>Ȳ<EFBFBD><EFBFBD>. <EFBFBD>Ҭ<EFBFBD>|<EFBFBD> <EFBFBD>Ż<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><EFBFBD> 0<EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD>|<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD> L<EFBFBD>8<EFBFBD><EFBFBD><EFBFBD>
// ̹}<EFBFBD> \<EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD>o<EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD>$<EFBFBD>|<EFBFBD> \<EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>
// R:/GameRes/Resource/UI/Skill/SkillTreeContentDlg.ui <EFBFBD>|<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij <EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD>o<EFBFBD> /<EFBFBD><EFBFBD>|<EFBFBD> ޹<EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
const int MAX_SKILL_SLOT_COUNT = 28;
const int MAX_PARENT_SKILL_COUNT = 3;
const int MAX_SKILL_PER_LINE = 4;
class CDnSkillTreeSystem
{
private:
struct S_UNLOCK_CONDITION
{
int iUnlockSkillBookItemID;
S_UNLOCK_CONDITION( void ) : iUnlockSkillBookItemID( 0 )
{
};
};
struct S_ACQUIRE_CONDITION
{
// <EFBFBD>¬<EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD>}<EFBFBD>X<EFBFBD>0<EFBFBD> <EFBFBD>\<EFBFBD> <EFBFBD> <EFBFBD>έ<EFBFBD>0<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>. <EFBFBD> <EFBFBD>¬<EFBFBD>ȹ<EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>ň<EFBFBD>L<EFBFBD>.
int iNeedLevel;
// <EFBFBD><EFBFBD>l<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>. NodeInfo <EFBFBD><EFBFBD> <EFBFBD>ǔ<EFBFBD> <EFBFBD><EFBFBD>@<EFBFBD> |<EFBFBD>X<EFBFBD>X<EFBFBD>p<EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>|<EFBFBD>̹ h<EFBFBD>.
vector<int> vlParentSkillNeedLevel;
S_ACQUIRE_CONDITION( void ) : iNeedLevel( 0 )
{
};
};
public:
// UI \<EFBFBD><EFBFBD>©<EFBFBD> l<EFBFBD><EFBFBD>.
struct S_NODE_RENDER_INFO
{
int iSkillID;
int iSlotIndex;
int iJobID;
const S_UNLOCK_CONDITION* pUnLockCondition;
const S_ACQUIRE_CONDITION* pAcquireCondition;
vector<int> vlChildSlotIndexInJob; // |ƽʀ<EFBFBD>0<EFBFBD> $<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ҭ<EFBFBD> <EFBFBD><EFBFBD>o<EFBFBD> x<EFBFBD>q<EFBFBD><EFBFBD><EFBFBD>. <EFBFBD>@<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ҭ<EFBFBD> H<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹ <EFBFBD>ǔ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <EFBFBD><EFBFBD>x<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD> <EFBFBD>¬<EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD>t<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>L<EFBFBD>.
vector<int> vlParentSkillJobIDs;
vector<int> vlParentSkillIDs;
#if defined(PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP)
vector<int> vlNeedJobSP; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD> ļ <EFBFBD> sp<EFBFBD>
#endif // PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP
S_NODE_RENDER_INFO() : iSkillID( 0 ), iSlotIndex( 0 ), iJobID( 0 ), pUnLockCondition( NULL ) , pAcquireCondition( NULL ){};
S_NODE_RENDER_INFO( int argiSkillID, int argiSlotIndex, int argiJobID,
const S_UNLOCK_CONDITION* argpUnLockCondition, const S_ACQUIRE_CONDITION* argpAcquireCondition ) :
iSkillID( argiSkillID ), iSlotIndex( argiSlotIndex ), iJobID( argiJobID ),
pUnLockCondition( argpUnLockCondition ), pAcquireCondition( argpAcquireCondition ) {};
};
private:
// <EFBFBD>¬<EFBFBD> <EFBFBD>Ҭ<EFBFBD> x<EFBFBD>ܴ <EFBFBD><EFBFBD><EFBFBD>.
struct S_NODE_INFO
{
int iJobID;
int iSkillID;
int iNeedSkillPointToAcquire; // <EFBFBD><EFBFBD>ݴX<EFBFBD>0<EFBFBD> <EFBFBD>t<EFBFBD> <EFBFBD>\<EFBFBD> <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>
//------------------------------------------------------------------------------
/**
<EFBFBD>Ҭ<EFBFBD> <EFBFBD><EFBFBD>o<EFBFBD> ID <EFBFBD><EFBFBD> |ƽʀ<EFBFBD>0<EFBFBD> $<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><<EFBFBD>\<EFBFBD> 0<EFBFBD><EFBFBD>0<EFBFBD> <EFBFBD>(<EFBFBD><EFBFBD><<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD>.
֬ǔ<EFBFBD> 4 x<EFBFBD>t<EFBFBD> \<EFBFBD> <EFBFBD> 0<EFBFBD>Ʉ<EFBFBD>.
*/
//------------------------------------------------------------------------------
int iTreeSlotIndex;
bool bDefaultLocked;
// t<EFBFBD> x<EFBFBD>ܴX<EFBFBD> <EFBFBD>¬<EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD>}<EFBFBD>, <EFBFBD><EFBFBD>ݴX<EFBFBD>0<EFBFBD> <EFBFBD>\<EFBFBD> p<EFBFBD>t<EFBFBD>
S_UNLOCK_CONDITION UnLockCondition;
S_ACQUIRE_CONDITION AcquireCondition;
vector<S_NODE_INFO*> vlpChildNodeInfo;
vector<S_NODE_INFO*> vlpParentNodeInfo; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD>x<EFBFBD>ܴ<EFBFBD><EFBFBD> \<EFBFBD><EFBFBD> 3<EFBFBD><EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>L<EFBFBD>. <EFBFBD><EFBFBD>P<EFBFBD> <EFBFBD>Ǵ<EFBFBD>|<EFBFBD> <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD>ݴ <EFBFBD><EFBFBD><EFBFBD>.
#if defined( PRE_ADD_PRESET_SKILLTREE )
vector<int> vecAdviceSkillLevel;
#endif // #if defined( PRE_ADD_PRESET_SKILLTREE )
#if defined( PRE_ADD_ONLY_SKILLBOOK )
bool bNeedSkillBook;
#endif // #if defined( PRE_ADD_ONLY_SKILLBOOK )
// x<EFBFBD>ܴ <EFBFBD>T<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>
S_NODE_RENDER_INFO* pNodeRenderInfo;
S_NODE_INFO() : iTreeSlotIndex( 0 ), iJobID( 0 ), iSkillID( 0 ), iNeedSkillPointToAcquire( 0 ),
bDefaultLocked( false ), pNodeRenderInfo( NULL )
#if defined( PRE_ADD_ONLY_SKILLBOOK )
, bNeedSkillBook( false )
#endif // #if defined( PRE_ADD_ONLY_SKILLBOOK )
{
};
};
struct S_SKILLTREE_INFO
{
int iJobID;
vector<S_NODE_INFO*> vlpNodeList; // <EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD>\<EFBFBD> <EFBFBD>¬<EFBFBD> x<EFBFBD>ܴ <EFBFBD><EFBFBD><EFBFBD>.
map<int, S_NODE_INFO*> mapNodeBySkillID; // <EFBFBD>¬<EFBFBD> ID|<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><<EFBFBD>\<EFBFBD> <EFBFBD>¬<EFBFBD> x<EFBFBD>ܴ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.
vector<S_NODE_RENDER_INFO> vlNodeRenderInfo; // x<EFBFBD>ܴ <EFBFBD>T<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.
~S_SKILLTREE_INFO()
{
SAFE_DELETE_PVEC( vlpNodeList );
}
};
vector<S_SKILLTREE_INFO*> m_vlpJobSkillTreeList;
map<int, S_SKILLTREE_INFO*> m_mapSkillTreeByJobID; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD>) ID \<EFBFBD> <EFBFBD>¬<EFBFBD> <EFBFBD>Ҭ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.
map<int, S_NODE_INFO*> m_mapNodeListBySkillBookID; // <EFBFBD>¬Ё<EFBFBD> D<EFBFBD>t<EFBFBD>\<EFBFBD> ID\<EFBFBD> x<EFBFBD>ܴ <EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> ><EFBFBD>D<EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>L<EFBFBD>.
protected:
S_NODE_INFO* _FindNode( int iSkillID );
void _MakeupParentSkillLinks( DNTableFileFormat* pSkillTreeTable, DNTableFileFormat* pSkillTable );
public:
CDnSkillTreeSystem(void);
~CDnSkillTreeSystem(void);
// L<EFBFBD>t<EFBFBD><EFBFBD> \<EFBFBD>ܴt<EFBFBD><EFBFBD> <EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>0<EFBFBD>T<EFBFBD>.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DataManager <EFBFBD><EFBFBD><EFBFBD> Ȭ<EFBFBD><EFBFBD>@<EFBFBD> p<EFBFBD>t<EFBFBD>0<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>0<EFBFBD> L<EFBFBD>8<EFBFBD><EFBFBD><EFBFBD> t<EFBFBD>x<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD> <EFBFBD>0<EFBFBD>T<EFBFBD> \<EFBFBD><EFBFBD><EFBFBD>.
#if defined(_VILLAGESERVER) || defined(_GAMESERVER)
bool InitializeTableUsingDataManager( CDNGameDataManager* pDataManager );
#endif
bool InitializeTable( void );
struct S_POSSESSED_SKILL_INFO
{
int iSkillID;
int iSkillLevel; // <EFBFBD><EFBFBD><EFBFBD>L<EFBFBD>t<EFBFBD><EFBFBD> ID D<EFBFBD>ز. <EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD> ֬<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>
bool bCurrentLock; // ֬<EFBFBD> }<EFBFBD>t<EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD> D<EFBFBD>̲<EFBFBD><EFBFBD>.
S_POSSESSED_SKILL_INFO() : iSkillID( 0 ), iSkillLevel( 0 ), bCurrentLock( true )
{
};
S_POSSESSED_SKILL_INFO( int argiSkillID, int argiSkillLevel, bool argbCurrentLock ) : iSkillID(argiSkillID),
iSkillLevel(argiSkillLevel), bCurrentLock(argbCurrentLock)
{
};
};
// `<EFBFBD>̀<EFBFBD>0<EFBFBD> 8֜<EFBFBD><EFBFBD>t<EFBFBD> H<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>.
enum ERROR_CODE
{
E_NONE = 0, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> D<EFBFBD>ز
E_CANT_FIND_SKILLNODE, // <EFBFBD>¬<EFBFBD> <EFBFBD>Ҭ<EFBFBD>x<EFBFBD>ܴ|<EFBFBD> ><EFBFBD>D<EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>L<EFBFBD>. (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD>x<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij <EFBFBD><EFBFBD>h<EFBFBD>)
E_MISMATCH_JOB,
E_INVALID_CALL, // <EFBFBD>ǻ<EFBFBD><EFBFBD> 8֜<EFBFBD>
};
//
enum RESULT_CODE
{
R_SUCCESS,
R_NOT_ENOUGH_CHAR_LEVEL, // <EFBFBD>έ<EFBFBD>0<EFBFBD> <EFBFBD><EFBFBD>l<EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>nj<EFBFBD>.
R_INVALID_SKILLBOOK_ITEMID, // <EFBFBD>¬Ё<EFBFBD> D<EFBFBD>t<EFBFBD>\<EFBFBD> ID <EFBFBD> ޹<EFBFBD><EFBFBD> J<EFBFBD>L<EFBFBD>.
R_DONT_HAVE_PARENT_SKILL, // <EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <EFBFBD>¬<EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD>L<EFBFBD>.
R_LOCKED_PARENTSKILL, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD>t<EFBFBD> }<EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD>ň<EFBFBD>L<EFBFBD>.
R_NOT_ENOUGH_PARENT_SKILL_LEVEL, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¬<EFBFBD>X<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD>q<EFBFBD><EFBFBD><EFBFBD><EFBFBD> J<EFBFBD>L<EFBFBD>.
R_NOT_ENOUGH_SKILLPOINT_TO_ACQUIRE, // <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>|<EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD>ݴ`<EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>L<EFBFBD>.
R_EXCLUSIVE_SKILL,
R_ONLY_SKILL_BOOK, // <EFBFBD>¬Ё<EFBFBD><<EFBFBD>\<EFBFBD>̹ 0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD>ǔ<EFBFBD> <EFBFBD>¬<EFBFBD>.
R_FAIL,
R_ERROR,
};
#if defined( PRE_ADD_PRESET_SKILLTREE )
enum
{
E_ADVICE_SKILL_LEVEL_COUNT = 3
};
#endif // #if defined( PRE_ADD_PRESET_SKILLTREE )
// ֬<EFBFBD> <EFBFBD><EFBFBD>ݴ <EFBFBD>¬<EFBFBD>, <EFBFBD>¬Ё<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.
struct S_TRY_UNLOCK
{
int iCurrentCharLevel;
int iTryUnlockSkillID; // <EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD>¬<EFBFBD> ID
int iSkillBookItemID; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD> ItemID
int iJobID; // ֬<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <EFBFBD><EFBFBD>Ɉ<EFBFBD>D<EFBFBD> L<EFBFBD> t<EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD>}<EFBFBD>`<EFBFBD>L<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>`<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
//const vector<S_POSSESSED_SKILL_INFO>& vlPossessedSkillInfo; // <EFBFBD><EFBFBD> <EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ǔ<EFBFBD> <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>. (<EFBFBD><EFBFBD>p<EFBFBD><EFBFBD>Ŕ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> )<EFBFBD><EFBFBD><EFBFBD>)
//S_CURRENT_USERSKILL_INFO( const vector<S_POSSESSED_SKILL_INFO>& _vlSkillInfo ) :
// vlPossessedSkillInfo( _vlSkillInfo ),
// iCurrentCharLevel( 0 ), iSkillBookItemID( 0 ), iTryUnlockSkillID( 0 ), iJobID( 0 )
//{
//};
S_TRY_UNLOCK( void ) : iCurrentCharLevel( 0 ), iTryUnlockSkillID( 0 ),
iSkillBookItemID( 0 ), iJobID( 0 )
{
}
};
struct S_TRY_ACQUIRE
{
int iCurrentCharLevel;
int iTryAcquireSkillID;
int iHasSkillPoint;
int iJobID;
const vector<S_POSSESSED_SKILL_INFO>& vlPossessedSkillInfo;
S_TRY_ACQUIRE( const vector<S_POSSESSED_SKILL_INFO>& _vlSkillInfo ) :
vlPossessedSkillInfo( _vlSkillInfo ), iCurrentCharLevel( 0 ),
iTryAcquireSkillID( 0 ),
iHasSkillPoint( 0 ), iJobID( 0 )
{
};
};
// <EFBFBD>ƭ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
struct S_OUTPUT
{
RESULT_CODE eResult;
ERROR_CODE eErrorCode;
S_OUTPUT() : eResult( R_FAIL ), eErrorCode( E_NONE )
{
};
};
#ifdef PRE_ADD_ONLY_SKILLBOOK
bool IsNeedSkillBook( int iSkillID, bool& bExistSkill );
#endif // PRE_ADD_ONLY_SKILLBOOK
// <EFBFBD>¬<EFBFBD> <EFBFBD><EFBFBD>}<EFBFBD> <EFBFBD><EFBFBD>ij. t<EFBFBD> h<EFBFBD><EFBFBD>|<EFBFBD> 8֜<EFBFBD>X<EFBFBD>0<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> t<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>}<EFBFBD><EFBFBD> <EFBFBD>¬<EFBFBD>@<EFBFBD> 8֜<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> J<EFBFBD>ij]<EFBFBD> U<EFBFBD>x<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><EFBFBD><EFBFBD>!
void TryUnLockSkill( /*IN*/ const S_TRY_UNLOCK& PresentInfo, /*OUT*/ S_OUTPUT* pResult );
void TryAcquireSkill( /**/ const S_TRY_ACQUIRE& TryAcquire, /*OUT*/ S_OUTPUT* pResult );
int FindSkillBySkillBook( int iSkillBookItemID );
#ifdef PRE_ADD_LEVELUP_GUIDE
void GetLevelUpSkillInfo(std::vector<int>& newSkillIdList, int newLevel, int jobId);
void GetLevelUpSkillInfo(std::vector<int>& newSkillIdList, int newLevel, const std::vector<int>& jobHistoryVec);
#endif
//#ifndef (_GAMESERVER)&(_VILLAGESERVER)
// t<EFBFBD>|<EFBFBD>tǸŸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ҭ<EFBFBD> <EFBFBD><EFBFBD>0<EFBFBD>.
int GetNodeCount( int iJobID ) const; // Ǩ<EFBFBD>\<EFBFBD> <EFBFBD>¬<EFBFBD> x<EFBFBD>ܴ /<EFBFBD><EFBFBD>.
int GetSlotCount( int iJobID ) const; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>o<EFBFBD> /<EFBFBD><EFBFBD>. (<EFBFBD><EFBFBD><EFBFBD><EFBFBD> H<EFBFBD>x<EFBFBD> <EFBFBD>`<EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>L<EFBFBD>)
void GetNodeRenderInfo( int iSlotIndex, int iJobID, /*OUT*/S_NODE_RENDER_INFO* pNodeRenderInfo ) const;
//#endif
#if defined(PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP)
void GetNeedSPValuesByJob(int nSkillID, std::vector<int>& nNeedSPValues);
#endif // PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP
int IsParentSkill( const int nParentSkillID, const int nChildSkillID );
void GetParentSkillData( const int nChildSkillID, std::vector< std::pair<int, int> > & vecParentSkillData );
#if defined( PRE_ADD_PRESET_SKILLTREE )
void GetAdviceSkillTree( const int nAdviceSkill_Index, const std::vector<int> & vecJobList, std::vector< std::pair<int, BYTE> > & vecData );
#endif // #if defined( PRE_ADD_PRESET_SKILLTREE )
};