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

117 lines
No EOL
3.5 KiB
C++

#pragma once
class MACP {
public:
MACP();
virtual ~MACP();
enum CPTypeEnum {
MaxComboCount,
KillBossCount,
KillMonsterScore,
CriticalHitScore,
StunHitScore,
SuperAmmorBreakScore,
BrokenShieldScore,
GenocideScore,
AirComboScore,
PartyComboScore,
RebirthPlayerScore,
UseSkillScore,
ComboScore,
AttackedCount,
AttackedHitScore,
AttackedCriticalHitScore,
AttackedStunHitScore,
DieCount,
DeadScore,
PropBreakScore,
GetItemScore,
AssistMonsterScore,
CPType_Max
};
typedef struct tagMACP
{
int nAccumulationCP;
// 테이블에서 미리 읽어논 값들 서버와 공용이기때문에 언제나 Get 하기엔 무리가 있다. GameTask 에서 가지구있어도 되지만.. 얻어오기 애매하다.
int pScore[CPTypeEnum::CPType_Max];
// 현재 cp에서는 직접 사용하지 않지만, 미션에서 사용해야해서 추가한 것들
int nPartyMemberDieCount;
int nStartPartyCount;
// 만랩일시 경험치 획득 넣어놀데가 없어서 여기어 넣습니다.
int nMaxLevelGainExperience;
// 스테이지 클리어 경험치..
int nCompleteExperience;
}SMACP;
protected:
CDnActor *m_pActor;
SMACP m_Data;
int m_nCPTableID;
protected:
virtual void OnEventCP( CPTypeEnum Type, int nResult );
bool SetCPTableID( const int nMapIndex, const int nClassID );
public:
virtual void ResetCP();
virtual bool InitializeCPScore( const int nMapIndex, const int nClassID, const int nDungeonClearID );
bool Initialize( CDnActor *pActor );
void UpdateMaxCombo( int nValue );
void UpdateKillBoss();
virtual bool UpdateKillMonster( int *pResult = NULL );
bool UpdateCriticalHit( int *pResult = NULL );
bool UpdateStunHit( int *pResult = NULL );
bool UpdateSuperAmmorBreak( int *pResult = NULL );
bool UpdateBrokenShield( int *pResult = NULL );
virtual bool UpdateGenocide( int *pResult = NULL );
bool UpdateAirCombo( int *pResult = NULL );
virtual bool UpdatePartyCombo( int nCombo, int *pResult = NULL );
virtual bool UpdateRebirthPlayer( int *pResult = NULL );
virtual bool UpdateUseSkill( DnSkillHandle hSkill, int *pResult = NULL );
virtual bool UpdateCombo( int nCombo, int *pResult = NULL );
bool UpdateAttackedHit( int *pResult = NULL );
bool UpdateAttackedCriticalHit( int *pResult = NULL );
bool UpdateAttackedStunHit( int *pResult = NULL );
bool UpdateDead( int *pResult = NULL );
// 미션추가용
bool UpdatePartyMemberDead( int *pResult = NULL );
bool UpdateStartPartyCount( int nPartyCount );
int GetMaxComboCount() { return m_Data.pScore[CPTypeEnum::MaxComboCount]; }
int GetKillBossCount() { return m_Data.pScore[CPTypeEnum::KillBossCount]; }
int GetAccumulationCP() { return m_Data.nAccumulationCP; }
int GetDieCount() { return m_Data.pScore[CPTypeEnum::DieCount]; }
int GetAttackedCount() { return m_Data.pScore[CPTypeEnum::AttackedCount]; }
// 미션추가용
int GetPartyMemberDieCount() { return m_Data.nPartyMemberDieCount; }
int GetStartPartyCount() { return m_Data.nStartPartyCount; }
virtual bool UpdatePropBreak( int* pResult = NULL );
virtual bool UpdateGetItem( int* pResult = NULL );
// 치트땜시 만든다..이걸루 셋팅하는 일은 없어야합니다.
void SetAccumulationCP( int nValue ) { m_Data.nAccumulationCP = nValue; }
bool UpdateAssistScore( int myAggro, int wholeAggro );
bool UpdateMaxLevelGainExperience( int nExp );
int GetMaxLevelGainExperience() { return m_Data.nMaxLevelGainExperience; }
inline void AddCompleteExperience( int nValue ) { m_Data.nCompleteExperience += nValue; };
inline int GetCompleteExperience() { return m_Data.nCompleteExperience; };
const SMACP & GetCP_Data() { return m_Data; }
};