DragonNest/GameCommon/DnPlayerState.h
2024-12-19 09:48:26 +08:00

154 lines
No EOL
7.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "DnActorState.h"
class CDnPlayerActor;
class CDnItem;
class CDnPlayerState : virtual public CDnActorState
{
public:
#ifdef PRE_ADD_STAGE_LIMIT_INTERFACE
struct sDamageLimitInfo
{
bool bPhysicalAttack;
bool bMagicalAttack;
};
#endif
protected:
CDnState *m_pSetItemState;
CDnState *m_pAppellationState;
CDnState* m_pPetAbilityState;
#if defined(PRE_ADD_SKILLBUF_RENEW)
CDnState m_BuffState;
#endif
MSDT_DECL(float) m_fDeadDurabilityRatio;
MSDT_DECL(char) m_cAccountLevel;
MSDT_DECL(int) m_nExperience;
char m_cPvPLevel;
int m_nNextLevelExperience;
int m_nCurrentLevelExperience;
int m_nAppellationIndex;
int m_nCoverAppellationIndex;
std::vector<int> m_nVecJobHistoryList;
vector<CDnState*> m_vecpPetAccessaryState;
#ifdef PRE_ADD_STAGE_LIMIT_INTERFACE
sDamageLimitInfo m_sDamageLimitInfo;
#endif
protected:
CDnPlayerState();
virtual ~CDnPlayerState();
virtual void CalcBaseState( StateTypeEnum Type = ST_All );
virtual void CalcState( RefreshStateExtentEnum Extent, StateTypeEnum Type );
virtual void GetStateList( int ListType, CDnState::ValueType Type, std::vector<CDnState *> &VecList );
void CalcSetItemState();
#if defined( PRE_ADD_OVERLAP_SETEFFECT )
void CalcOverLapSetItemState(int nOverLapSetItemID, std::map<int, int>& nMapSetList);
#endif
void CalcAppellationState();
void CalcPetAbilityState();
void CalcPetAccessaryAbilityState();
virtual void RefreshAdditionalState( RefreshStateExtentEnum &Extent, StateTypeEnum &Type );
char GetUseRegulation();
#ifdef PRE_ADD_STAGE_DAMAGE_LIMIT
float GetUseStageStateLimit();
#endif
#if defined (PRE_ADD_BESTFRIEND)
bool IsApplyPartsState(CDnActor *pActor, CDnParts* pParts, bool Durability = true);
bool IsApplyWeaponState(CDnActor *pActor, CDnWeapon* pWeapon, bool Durability = true);
bool IsBestFriendItem(CDnActor* pActor, eItemTypeEnum cType, int nParam1, int nParam2, INT64 nSerial);
#endif
public:
virtual void OnChangeJob( int nJobID );
virtual void OnCalcPlayerState(){}
__forceinline float GetDeadDurabilityRatio() { return m_fDeadDurabilityRatio; }
virtual void SetAppellationIndex( int nCoverIndex, int nIndex );
void ChangeAppellationState( int nCoverArrayIndex, int nArrayIndex );
bool IsSetAppellationIndex();
int GetAppellationIndex() { return m_nAppellationIndex; }
void SetAccountLevel( char cLevel ) { m_cAccountLevel = cLevel; }
char GetAccountLevel() { return m_cAccountLevel; }
bool IsDeveloperAccountLevel();
bool IsDeveloperAccountLevel(char cAccountLevel);
virtual void SetPvPLevel( char cLevel ) { m_cPvPLevel = cLevel; }
char GetPvPLevel() { return m_cPvPLevel; }
void CalcExperience();
__forceinline int GetExperience() { return m_nExperience; }
__forceinline int GetNextLevelExperience() { return m_nNextLevelExperience; }
__forceinline int GetCurrentLevelExperience() { return m_nCurrentLevelExperience; }
void SetExperience( int nValue );
void AddExperience( int nValue, int nLogCode, INT64 biFKey ); // -> nLogCode<64><65> <20><><EFBFBD><EFBFBD> biFKey<65><79><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE>ش<EFBFBD> (eCharacterExpChangeCode<64><65><EFBFBD><EFBFBD>)
int GetJobClassID();
int GetJobHistory( std::vector<int> &nVecResult );
virtual void SetJobHistory( const std::vector<int> &nVecList );
virtual void SetJobHistory( int nValue );
virtual void PopJobHistory( int nValue ); // #26902 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ѹ<EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̷<EFBFBD> <20><> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> Ŭ<>󿡼<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
bool IsPassJob( int nJobClassID );
#ifdef PRE_ADD_STAGE_LIMIT_INTERFACE
const sDamageLimitInfo* GetDamageLimitInfo(){ return &m_sDamageLimitInfo; }
#endif
#if defined(PRE_ADD_SKILLBUF_RENEW)
const CDnState* GetBuffState(){ return &m_BuffState; }
#endif
// CDnActorState
void CalcStrength( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcAgility( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcIntelligence( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcStamina( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcAttackP( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcAttackM( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcDefenseP( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcDefenseM( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcHP( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList, bool bRevisionCurrentHP = false );
void CalcSP( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList, bool bRevisionCurrentSP = false );
void CalcMoveSpeed( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcStiff( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcStiffResistance( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcCritical( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcCriticalResistance( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcStun( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcStunResistance( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcElementAttack( ElementEnum Type, RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcElementDefense( ElementEnum Type, RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcDownDelay( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcRecoverySP( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcSuperAmmor( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcFinalDamage( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcSpirit( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcSafeZoneMoveSpeed( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
void CalcAddExp( RefreshStateExtentEnum Extent, std::vector<CDnState *> *pVecAbsoluteList, std::vector<CDnState *> *pVecRatioList );
virtual void OnCalcEquipStep( StateTypeEnum Type, CDnState *pState );
virtual void OnCalcEquipStep_ElementAttack( ElementEnum eElementType , CDnState *pState );
virtual void OnCalcEquipStep_ElementDefense( ElementEnum eElementType , CDnState *pState );
// <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B6A7><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><> <20>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
static int GetJobToBaseClassID( int nJobID );
CDnState MakeEquipState();
CDnState MakeComparePotentialState(CDnItem* pCurrItemState, CDnItem* pNewItemState);
};