DragonNest/Server/DNGameServer/DNMonsterAggroSystem.h
2024-12-20 16:56:44 +08:00

52 lines
3.7 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.


#pragma once
#include "DNAggroSystem.h"
#include "DNAggroRange.h"
class CDNMonsterAggroSystem : public CDNAggroSystem, public TBoostMemoryPool<CDNMonsterAggroSystem>
{
public:
CDNMonsterAggroSystem( DnActorHandle hActor );
virtual ~CDNMonsterAggroSystem();
virtual void OnProcessAggro( const LOCAL_TIME LocalTime, const float fDelta );
virtual DnActorHandle OnGetAggroTarget( bool& bIsProvocationTarget, DnActorHandle hExceptActor=CDnActor::Identity(), DNVector(DnActorHandle)* vTarget = NULL);
virtual void OnDamageAggro( DnActorHandle hActor, CDnDamageBase::SHitParam& HitParam, int iDamage );
virtual void OnStateBlowAggro( DnBlowHandle hBlow );
virtual bool bOnCheckPlayerBeginStateBlow( CDnPlayerActor* pPlayer );
virtual void OnAggroRegulation( DnActorHandle hActor, int& iAggroValue );
float GetThreatRange(){ return m_AggroRange.GetThreatRange(); }
float GetCognizanceThreatRange(){ return m_AggroRange.GetCognizanceThreatRange(); }
float GetCognizanceThreatRangeSq(){ return m_AggroRange.GetCognizanceThreatRangeSq(); }
float GetCognizanceGentleRangeSq(){ return m_AggroRange.GetCognizanceGentleRangeSq(); }
enum eCommon
{
AIProcessFrame = 5,
};
bool bIsInit(){ return m_bInit; }
private:
void _Create();
int _CalcAdditionalAggro( const int iAggro, const float fValue );
CDnMonsterActor* m_pMonsterActor;
int m_iThreatAggro;
CDNAggroRange m_AggroRange;
float m_fDecreaseAggroPer;
float m_fRangeAttackAdditionalAggroPer;
float m_fStunStateAdditionalAggroPer;
float m_fDownStateAdditionalAggroPer;
float m_fCantMoveStateAdditionalAggroPer;
float m_fSleepStateAdditionalAggroPer;
float m_fUnderHPStateAdditionalAggroPer;
UINT m_uiFrameCount;
bool m_bInit;
UINT m_uiLastTopAggro; // 이전 어그로 최대 수치
};