Files
Sun1602/Server/GameServer/Summoned.h
T
2022-10-26 12:25:11 +08:00

100 lines
3.9 KiB
C++

#pragma once
#include "NPC.h"
#include <Timer.h>
class Summoned : public NPC
{
public:
Summoned();
virtual ~Summoned();
protected:
virtual BOOL Init();
public:
void InitSummoned( WORD NPCCode, SLOTCODE SKillCode, Character * pHost, DWORD ExpireTime );
void InitSummonedDeadMonster( WORD NPCCode, SLOTCODE SKillCode, Character* pHost );
void ApplyPlayerStatusToSummoned(SLOTCODE skill_code, Character* host_char);
void AcquireBasicSummonerStatus(const BASE_ABILITYINFO* ability_info, Character* host_char);
#ifdef _NA_007667_20141001_WITCHBLADE_SKILL
void AcquireExtendSummonerStatus(const BASE_ABILITYINFO* ability_info, Character* host_char);
#endif //_NA_007667_20141001_WITCHBLADE_SKILL
eSUMMON_TYPE GetSummonType() const { return m_SummonType; }
virtual BOOL Update( DWORD dwDeltaTick );
virtual VOID Reuse() { Release(); }
virtual VOID OnLeaveField();
virtual VOID OnDead();
virtual VOID GetSummonedRenderInfo( SUMMONED_RENDER_INFO * OUT pRenderInfo );
VOID SetExpireTime( DWORD dwInterval );
DWORD GetRemainedTime() const;
SLOTCODE GetSummonSkillCode() const;
#if !defined(_NA_000000_20140224_SUMMONER_REFACTORING)
virtual VOID SetSummoner( Character *pSummoner );
#endif //_NA_000000_20140224_SUMMONER_REFACTORING
Character* GetSummoner();
virtual Player * GetPlayerOwner();
eSUMMON_COMMAND GetCommandState() const { return m_eCommandState; }
VOID SetCommandState( eSUMMON_COMMAND eCommand, DWORD dwTargetKey );
VOID SetSkillUseDelegate( BOOL bSkillUse ) { m_bSkillUseDelegate = bSkillUse; }
BOOL GetSkillUseDelegate() { return m_bSkillUseDelegate; }
RC::eSKILL_RESULT CanUseSkilltoTarget( SLOTCODE SkillCode, DWORD TargetKey );
RC::eSKILL_RESULT CanUseSkill( SLOTCODE SkillCode, DWORD dwTargetKey = 0, BOOL bCoolTimerReset = TRUE );
BOOL IsNonPVP(){ return m_eCommandState == eSUMMON_COMMAND_DELEGATE_ATTACK_IGNORE_PLAYER; }
virtual BOOL IsDelegate() { return IsOffensive() || IsDefensive() || IsNonPVP(); }
BOOL IsOffensive() { return m_eCommandState == eSUMMON_COMMAND_DELEGATE_ATTACK; }
BOOL IsDefensive() { return m_eCommandState == eSUMMON_COMMAND_DELEGATE_DEFENSE; }
BOOL IsFollowing() { return m_eCommandState == eSUMMON_COMMAND_FOLLOW; }
// 스킬관련
VOID AddSkill( SLOTCODE SkillCode );
BOOL DelSkill( SLOTCODE SkillCode );
virtual BOOL CheckClassDefine( SLOTCODE SkillCode, BOOL bUseActiveSkill );
virtual BOOL CanResurrection( Character *pTarget );
// _NA_0_20091118_GAMEROOM_BATTLE_RESULT
virtual VOID OnRecover( INT recoverHP, INT recoverMP, INT recoverSD = 0, eRECOVER_TYPE Type = eRECOVER_TYPE_NORMAL, Character* pAttacker = NULL );
virtual VOID OnEnterObject( const Sector & IN rSector );
#ifdef _NA_006592_VALKYRIES_SUMMONS_SKILL_COOLTIME_BUG
RC::eSKILL_RESULT CanUseSkill(SLOTCODE SkillCode, BOOL bCoolTimerReset);
bool CoolTimerReset(SLOTCODE skill_code);
#endif // _NA_006592_VALKYRIES_SUMMONS_SKILL_COOLTIME_BUG
protected:
virtual void _Damaged(DamageArgs* damage_arg);
public:
virtual VOID ForcedAttack( Character *pTarget );
virtual eUSER_RELATION_TYPE IsFriend( Character *pTarget );
protected:
virtual VOID Release();
private:
virtual VOID SetInitialState( DWORD dwStateID, BYTE byMoveType=0, DWORD dwMoveAreaID=0, LPARAM param1=0 );
virtual VOID AddDefaultSkill();
void ApplySummonerPassiveSkill(const bool is_apply = true);
VOID ApplyAdrenaline();
eSUMMON_COMMAND m_eCommandState; // 위임 상태
#if !defined(_NA_000000_20140224_SUMMONER_REFACTORING)
Character* m_pSummoner; // 소환자
#endif //_NA_000000_20140224_SUMMONER_REFACTORING
util::ITimerBase m_pExpireTimer[1]; // 소환체 소멸타이머
BOOL m_bSkillUseDelegate; // 스킬 사용 위임상태
eSUMMON_TYPE m_SummonType; // 소환타입.
SLOTCODE summon_skill_code_; // 소환에 사용된 스킬코드
};