129 lines
3.0 KiB
C++
129 lines
3.0 KiB
C++
#ifndef __HEADER_PET_SYSTEM__
|
|
#define __HEADER_PET_SYSTEM__
|
|
#include "../../common/CommonDefines.h"
|
|
|
|
class CHARACTER;
|
|
|
|
struct SPetAbility
|
|
{
|
|
};
|
|
|
|
class CPetActor
|
|
{
|
|
public:
|
|
enum EPetOptions
|
|
{
|
|
EPetOption_Followable = 1 << 0,
|
|
EPetOption_Mountable = 1 << 1,
|
|
EPetOption_Summonable = 1 << 2,
|
|
EPetOption_Combatable = 1 << 3,
|
|
};
|
|
|
|
protected:
|
|
friend class CPetSystem;
|
|
|
|
CPetActor(LPCHARACTER owner, DWORD vnum, DWORD options = EPetOption_Followable | EPetOption_Summonable);
|
|
|
|
virtual ~CPetActor();
|
|
|
|
virtual bool Update(DWORD deltaTime);
|
|
|
|
protected:
|
|
virtual bool _UpdateFollowAI();
|
|
virtual bool _UpdatAloneActionAI(float fMinDist, float fMaxDist);
|
|
|
|
private:
|
|
bool Follow(float fMinDistance = 50.f);
|
|
|
|
public:
|
|
LPCHARACTER GetCharacter() const { return m_pkChar; }
|
|
LPCHARACTER GetOwner() const { return m_pkOwner; }
|
|
DWORD GetVID() const { return m_dwVID; }
|
|
DWORD GetVnum() const { return m_dwVnum; }
|
|
|
|
bool HasOption(EPetOptions option) const { return m_dwOptions & option; }
|
|
|
|
void SetName(const char* petName);
|
|
|
|
bool Mount();
|
|
void Unmount();
|
|
|
|
DWORD Summon(const char* petName, LPITEM pSummonItem, bool bSpawnFar = false);
|
|
void Unsummon(
|
|
#ifdef USE_ACTIVE_PET_SEAL_EFFECT
|
|
bool updateSocket = true
|
|
#endif
|
|
);
|
|
|
|
bool IsSummoned() const { return 0 != m_pkChar; }
|
|
bool SetSummonItem(LPITEM pItem
|
|
#ifdef USE_ACTIVE_PET_SEAL_EFFECT
|
|
, bool updateSocket = true
|
|
#endif
|
|
);
|
|
DWORD GetSummonItemVID () { return m_dwSummonItemVID; }
|
|
|
|
void GiveBuff();
|
|
void ClearBuff();
|
|
|
|
private:
|
|
DWORD m_dwVnum;
|
|
DWORD m_dwVID;
|
|
DWORD m_dwOptions;
|
|
DWORD m_dwLastActionTime;
|
|
DWORD m_dwSummonItemVID;
|
|
DWORD m_dwSummonItemVnum;
|
|
|
|
short m_originalMoveSpeed;
|
|
|
|
std::string m_name;
|
|
|
|
LPCHARACTER m_pkChar; // Instance of pet(CHARACTER)
|
|
LPCHARACTER m_pkOwner;
|
|
};
|
|
|
|
/**
|
|
*/
|
|
class CPetSystem
|
|
{
|
|
public:
|
|
typedef boost::unordered_map<DWORD, CPetActor*> TPetActorMap;
|
|
|
|
public:
|
|
CPetSystem(LPCHARACTER owner);
|
|
virtual ~CPetSystem();
|
|
|
|
CPetActor* GetByVID(DWORD vid) const;
|
|
CPetActor* GetByVnum(DWORD vnum) const;
|
|
|
|
bool Update(DWORD deltaTime);
|
|
void Destroy();
|
|
|
|
size_t CountSummoned() const;
|
|
|
|
public:
|
|
void SetUpdatePeriod(DWORD ms);
|
|
|
|
CPetActor* Summon(DWORD mobVnum, LPITEM pSummonItem, const char* petName, bool bSpawnFar, DWORD options = CPetActor::EPetOption_Followable | CPetActor::EPetOption_Summonable);
|
|
|
|
void Unsummon(DWORD mobVnum, bool bDeleteFromList = false);
|
|
void Unsummon(CPetActor* petActor, bool bDeleteFromList = false);
|
|
void UnsummonAll();
|
|
|
|
CPetActor* AddPet(DWORD mobVnum, const char* petName, const SPetAbility& ability, DWORD options = CPetActor::EPetOption_Followable | CPetActor::EPetOption_Summonable | CPetActor::EPetOption_Combatable);
|
|
|
|
void DeletePet(DWORD mobVnum);
|
|
void DeletePet(CPetActor* petActor);
|
|
void RefreshBuff();
|
|
|
|
private:
|
|
TPetActorMap m_petActorMap;
|
|
LPCHARACTER m_pkOwner;
|
|
DWORD m_dwUpdatePeriod;
|
|
DWORD m_dwLastUpdateTime;
|
|
LPEVENT m_pkPetSystemUpdateEvent;
|
|
};
|
|
|
|
#endif //__HEADER_PET_SYSTEM__
|
|
//martysama0134's 623a0779c74cb7565145d45548376308
|