2022-03-05 12:44:06 +02:00
# ifndef __HEADER_PET_SYSTEM__
# define __HEADER_PET_SYSTEM__
class CHARACTER ;
// TODO: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> μ<EFBFBD> <CEBC> <EFBFBD> <20> ɷ<EFBFBD> ġ? <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ģ<> е <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> Ÿ<EFBFBD> <C5B8> <EFBFBD> <EFBFBD> ... <20> <> ġ
struct SPetAbility
{
} ;
/**
*/
class CPetActor //: public CHARACTER
{
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 ) ;
// CPetActor(LPCHARACTER owner, DWORD vnum, const SPetAbility& petAbility, DWORD options = EPetOption_Followable | EPetOption_Summonable);
virtual ~ CPetActor ( ) ;
virtual bool Update ( DWORD deltaTime ) ;
protected :
virtual bool _UpdateFollowAI ( ) ; ///< <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ٴϴ<D9B4> AI ó<> <C3B3>
virtual bool _UpdatAloneActionAI ( float fMinDist , float fMaxDist ) ; ///< <20> <> <EFBFBD> <EFBFBD> <20> <> ó<EFBFBD> <C3B3> <EFBFBD> <EFBFBD> ȥ<> <C8A5> <20> <> <EFBFBD> <EFBFBD> AI ó<> <C3B3>
/// @TODO
//virtual bool _UpdateCombatAI();
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 ( ) ;
bool IsSummoned ( ) const { return 0 ! = m_pkChar ; }
void SetSummonItem ( LPITEM pItem ) ;
DWORD GetSummonItemVID ( ) { return m_dwSummonItemVID ; }
// <20> <> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> Լ<EFBFBD> <D4BC> <EFBFBD> <20> ŵδ<C5B5> <20> Լ<EFBFBD> .
// <20> ̰<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѱ<EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ,
// POINT_MOV_SPEED, POINT_ATT_SPEED, POINT_CAST_SPEED<45> <44> PointChange()<29> <> <20> Լ<EFBFBD> <D4BC> <EFBFBD> <20> Ἥ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ҿ<EFBFBD> <D2BF> <EFBFBD> <20> <> <EFBFBD> °<EFBFBD> ,
// PointChange() <20> <> <EFBFBD> Ŀ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ComputePoints()<29> <> <20> ϸ<EFBFBD> <20> ϴ<EFBFBD> <20> ʱ<EFBFBD> ȭ<EFBFBD> ǰ<EFBFBD> ,
// <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , ComputePoints()<29> <> <20> θ<EFBFBD> <CEB8> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŭ<> <C5AC> <EFBFBD> <EFBFBD> POINT<4E> <54> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ´ ٴ<C2B4> <20> Ŵ<EFBFBD> .
// <20> <EFBFBD> <D7B7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ComputePoints() <20> <> <EFBFBD> ο <EFBFBD> <CEBF> <EFBFBD> petsystem->RefreshBuff()<29> <> <20> θ<EFBFBD> <CEB8> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ͽ<EFBFBD> <CFBF> <EFBFBD> ,
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ClearBuff()<29> <> <20> θ<EFBFBD> <CEB8> <EFBFBD> , ComputePoints<74> <73> <20> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
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 ;
// SPetAbility m_petAbility; // <20> ɷ<EFBFBD> ġ
} ;
/**
*/
class CPetSystem
{
public :
2022-03-06 00:01:03 +02:00
typedef std : : unordered_map < DWORD , CPetActor * > TPetActorMap ; /// <VNUM, PetActor> map. (<28> <> ij<> <C4B3> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> vnum<75> <6D> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ..??)
2022-03-05 12:44:06 +02:00
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 ; ///< <20> <> <EFBFBD> <EFBFBD> <20> <> ȯ<EFBFBD> <C8AF> (<28> <> üȭ <20> <> ij<> <C4B3> <EFBFBD> Ͱ<EFBFBD> <20> ִ<EFBFBD> ) <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
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 ) ;
// TODO: <20> <> ¥ <20> <> <20> ý<EFBFBD> <C3BD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> . (ij<> <C4B3> <EFBFBD> Ͱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ...)
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 ; ///< <20> <> <20> ý<EFBFBD> <C3BD> <EFBFBD> <EFBFBD> <EFBFBD> Owner
DWORD m_dwUpdatePeriod ; ///< <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> ֱ<EFBFBD> (ms<6D> <73> <EFBFBD> <EFBFBD> )
DWORD m_dwLastUpdateTime ;
LPEVENT m_pkPetSystemUpdateEvent ;
} ;
/**
// Summon Pet
CPetSystem * petSystem = mainChar - > GetPetSystem ( ) ;
CPetActor * petActor = petSystem - > Summon ( ~ ~ ~ ) ;
DWORD petVID = petActor - > GetVID ( ) ;
if ( 0 = = petActor )
{
ERROR_LOG ( . . . )
} ;
// Unsummon Pet
petSystem - > Unsummon ( petVID ) ;
// Mount Pet
petActor - > Mount ( ) . .
CPetActor : : Update ( . . . )
{
// AI : Follow, actions, etc...
}
*/
# endif //__HEADER_PET_SYSTEM__