DragonNest/Server/DNVillageServer/DNUserSkill.h
2024-12-19 09:48:26 +08:00

90 lines
2.9 KiB
C++

#pragma once
#include "DnSkillTreeSystem.h"
class CDNUserSession;
class CDNUserSkill
{
private:
CDNUserSession* m_pUserSession;
TSkillGroup *m_pSkillData;
typedef map<int, TSkill> TMapSkillList;
// 스킬트리에서 사용하는 현재 스킬 보유 정보
TMapSkillList m_SkillList[DualSkill::Type::MAX];
vector<CDnSkillTreeSystem::S_POSSESSED_SKILL_INFO> m_vlPossessedSkill[DualSkill::Type::MAX];
vector<int> m_vlWaitingSkillIDsToReset;
public:
CDNUserSkill(CDNUserSession *pUserObj);
virtual ~CDNUserSkill(void);
void LoadUserData();
void SaveUserData(TUserData *pUserData);
void AddSkill(int nSkillID, int iLevel = 1 );
void DelSkill(int nSkillID);
bool FindSkill(int nSkillID);
#if defined(PRE_ADD_SKILL_LEVELUP_RESERVATION)
void ReservationSkillList(CSReservationSkillListReq* pUnlockSkillByMoneyReq);
int SkillLevelUp( int nSkillID, int nUsePoint=0);
int UnLockSkillByMoney( int nSkillID );
int AcquireSkill( int nSkillID );
#else
void SkillLevelUp( int nSkillID, int nUsePoint );
void UnLockSkillByMoney( int nSkillID );
void AcquireSkill( int nSkillID );
#endif
bool UseSkillBook( int nItemID );
void UnLockSkill( int nSkillID );
void CheatAcquireSkill( int nSkillID );
void ResetSkill( int nSkillPage );
void ResetAllSkill( int nSkillPage );
void WaitForUseSkillResetCashItemFromDBServer( vector<int>& vlSkillIDsToReset );
bool IsWaitSkillResetDBRes( void ) { return (false == m_vlWaitingSkillIDsToReset.empty()); };
void OnResponseSkillResetCashItemFromDBServer( bool bSuccess );
// 해당 직업의 스킬들을 모아줌.
void GatherThisJobSkill( BYTE cJob, IN OUT vector<int>& vlResult );
int GetSkillLevel( int nSkillID );
void SetSkillLevel( int nSkillID, int nLevel, int nLogCode, bool bSendSkillLevelUp = true );
int GetLevelUpSkillPoint( int nPrevLevel, int nCurLevel );
const vector<CDnSkillTreeSystem::S_POSSESSED_SKILL_INFO>& GetPossessedSkillInfo() { return m_vlPossessedSkill[GetCurrentSkillPage()]; };
virtual void OnAttachEquip( TItem *pItem );
virtual void OnDetachEquip( TItem *pItem );
bool IsExclusiveSkill( int nSkillID, int nExclusiveID );
int GetUsedSPByJob( int nJobID );
int GetAvailSkillPointByJob( int nSkillID );
#ifdef PRE_ADD_SP_REVISION
#ifdef _FINAL_BUILD
void CheckAndRevisionSkillPoint( bool bSendRevisionSPToClient = true );
#endif // #ifdef _FINAL_BUILD
#endif // #ifdef PRE_ADD_SP_REVISION
#ifdef PRE_ADD_CHANGEJOB_CASHITEM
void OnResponseChangeJobCode( USHORT wTotalSkillPoint );
#endif // #ifdef PRE_ADD_CHANGEJOB_CASHITEM
bool HasSameGlobalIDSkill( int iGlobalSkillGroupID );
void ApplyExpendedSkillPage( int nSkillPage );
int GetCurrentSkillPage();
#if defined(PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP)
void GetJobHistory(BYTE *cJobArray, vector<int>& jobHistory);
bool IsAvailableSPByJob(vector<int>& jobHistory, vector<int>& needSPValues);
bool IsAvailableSPByJob(std::vector<int>& jobHistory, vector<int>& needSPValues, int nIndex);
#endif // PRE_ADD_SKILL_LEVELUP_LIMIT_BY_SP
};