Files
mir_server/server/LogicServer/entitysystem/PetSystem.h

177 lines
3.8 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
/**************************************
,
**************************************/
#define CHG_PET_BUFF_GROUP 33
class CPet;
class CPetSystem:
public CEntitySubSystem<enPetSystemID,CPetSystem,CActor>
{
public:
typedef CEntitySubSystem<enPetSystemID,CPetSystem,CActor> Inherid;
typedef struct tagPetData
{
unsigned int nConfigId; //宠物的ID,也就是怪物的id
unsigned int nId; //宠物的ID
int nSkillId; //召唤宠物的技能id
EntityHandle handle; //宠物的句柄
tagPetData()
{
nConfigId =0;
nId =0;
nSkillId =0;
}
}PETDATA,*PPETDATA;
virtual void Destroy();
~CPetSystem();
void RemoveAllPets();
/*
* Comments:
* Param CAnimal * pEntity:
* @Return void:
*/
void OnAttacked(CAnimal *pEntity);
/*
* Comments:
* Param CAnimal * pEntity:
* @Return void:
*/
void OnAttackOther(CAnimal * pEntity);
//玩家死亡的时候
void OnDeath();
void OnActorLoginOut();
virtual void OnEnterGame();
void OnEnterScene();
/*
* Comments:
* Param INT_PTR PetId: id
* Param INT_PTR nLevel:
* Param INT_PTR nAiId:id
* Param INT_PTR nLiveSecs:
* Param INT_PTR nInheritPercent
* Param INT_PTR nSkillId Id
* @Return bool:truefalse
*/
bool AddPet(INT_PTR PetId,INT_PTR nLevel, INT_PTR nAiId, INT_PTR nLiveSecs = 0, INT_PTR nInheritPercent = 0, INT_PTR nSkillId = 0,int nTarPosX = 0,int nTarPosY = 0);
/*
* Comments:ID
* @Return INT_PTR:ID
*/
unsigned int GenPetId();
//删除一个宠物
bool RemovePet(int nPetId);
//删除某个id的全部宠物
INT_PTR RemoveAllPetByConfigId(int nPetConfigId);
//删除出战宠物
void RemoveBattlePet();
/*
* Comments:
* Param INT_PTR nPetId:ID
* @Return BYTE:-1
*/
inline INT_PTR GetPetPos(INT_PTR nPetId)
{
for(INT_PTR i=0; i< m_pets.count();i ++)
{
if(m_pets[i].nId == nPetId)
{
return i;
}
}
return -1;
}
//处理网络消息
VOID ProcessNetData(INT_PTR nCmd,CDataPacketReader &packet );
void SendPetCount();
//获取宠物的数目
INT_PTR GetPetCount()
{
return m_pets.count();
}
/*
* Comments:
* @Return int:
*/
int GetJobPetCount();
//获取比较高级的道士宠物
CPet *GetTopJobPet();
//找到宠物的指针
inline PETDATA *GetPetData(INT_PTR nPos)
{
if(nPos <0 || nPos >= m_pets.count())
{
return NULL;
}
return &m_pets[nPos];
}
/*
* Comments:id的数量
* Param int nPetId:id=id
* @Return int:
*/
int GetPetCountByConfigId(int nPetId);
/*
* Comments:
* Param int nSkillId:id
* @Return int:
*/
int GetPetCountBySkillId(int nSkillId);
/*
* Comments:
* Param TICKCOUNT curTick:tick
* @Return VOID:
*/
VOID OnTimeCheck(TICKCOUNT curTick);
/*
* Comments:
* @Return void:
*/
void RecallPet();
/*
* Comments:
* Param CPet * pPet:
* @Return bool:
*/
bool IsMyJobPet(CPet * pPet);
private:
//统一的移除宠物接口
void RemovePetByPos(INT_PTR nPos);
void SendPetSkillCountChange(int nPetConfigId, int nSkillId);
private:
CVector<PETDATA> m_pets; //玩家的宠物的数据(召唤所得)
CTimer<10000> m_10Sec;
};