177 lines
3.8 KiB
C++
177 lines
3.8 KiB
C++
#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:成功返回true,否则返回false
|
||
*/
|
||
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;
|
||
};
|