Files
mir_server/server/LogicServer/entity/DropItemEntity.h

150 lines
4.6 KiB
C
Raw Permalink Normal View History

2025-01-09 17:45:40 +08:00

#pragma once
/***************************************************************/
/* 掉落的道具,在场景里,因为需要所有的人都看到,创建一个实体
/* 该实体有过期时间,可以设置归属和存活时间,在存活时间过期以后删除
/* 为了节省内存一些属性的定义已经重新定义了比如PROP_ENTITY_DIR
/* PROP_ENTITY_MODELID,PROP_ENTITY_ID
/***************************************************************/
class CDropItemEntity:
public CEntity
{
public:
typedef CEntity Inherited;
static int GETTYPE() {return enDropItem;}
//初始化
bool Init(void * data, size_t size);
//删除的一些内存消耗操作
void Destroy(); //销毁一个实体
//执行逻辑循环
virtual VOID LogicRun(TICKCOUNT nCurrentTime);
inline INT_PTR GetPropertySize() const {return sizeof(CDropItemProperty) -sizeof(CPropertySet);}
virtual int GetPropertySetTotalSize()const { return sizeof(m_property);}
//设置掉落物品的物品指针
void SetItem( CUserItem *pUserItem);
//获取这个道具的指针
inline CUserItem * GetItem (){return m_pItem;}
//设置金钱的数目
void SetMoneyCount( int nMoneyCount, int nMoneyType=mtCoin);
//获取金钱类型
int GetMoneyType() {return m_btMoneyType;}
//获取金钱的数目
unsigned int GetMoneyCount();
//获取属性集
virtual CPropertySet * GetPropertyPtr() {return &m_property ;}
virtual const CPropertySet* GetPropertyPtr() const {return &m_property ;}
/*
* Comments:id
* Param unsigned int nTeamId:id
* @Return void:
*/
void SetTeamId(unsigned int nTeamId); //设置属于的队伍
//获取所属的队伍的id
inline unsigned int GetTeamId() { return GetProperty<unsigned int>(PROP_ENTITY_DIR); }
//设置可以拾取的时间
void SetCanPickUpTime(int nTime);
//获取一个玩家pActor前来拾取这个道具的错误码如果是0表示可以拾取否则返回错误码比如归属不正确
int GetLootErrorCode(CActor * pActor, bool boObserVer = false);
int GetPetLootErrorCode(CActor * pActor,bool boObserVer = false);
/*
* Comments:
* Param CActor * pActor:
* @Return void:
*/
void SetMaster(CActor *pActor);
/*
* Comments:
* Param CActor * pActor:
* @Return void:
*/
void SetDropMasterId(CActor * pActor);
/*
* Comments:
* @Return void:
*/
void SetDropNoMasterId();
//获取这个道具是属于哪个玩家的
inline unsigned int GetMasterActorId() { return GetProperty<unsigned int>(PROP_ENTITY_ID);}
/*
* Comments:
* Param CScene * pScene:
* Param int nPosX:x
* Param int nPosY:y
* Param int nLogId:ID
* Param LPCTSTR sLogDesc:
* Param LPCTSTR nExitTime:
* Param flag : 0 1
* @Return CDropItemEntity *:
*/
static CDropItemEntity * CreateDropItem( CScene *pScene, int nPosX,int nPosY,int nLogId =0,LPCTSTR sLogDesc=NULL,int nExitTime = 0,bool flag = 0 );
// 生成1个掉落物品自动外圈寻找空位
static CDropItemEntity * CreateOne( CScene *pScene, int nPosX, int nPosY,int nLogId = 0,LPCTSTR sLogDesc = NULL,int nExitTime = 0 );
//获取过期时间,超过过期时间了就要删除
inline TICKCOUNT GetExpireTick (){return m_expireTime;}
//获取过期时间,超过过期时间了就要删除
inline TICKCOUNT SetExpireTick (TICKCOUNT tk){m_expireTime = tk;}
//判断是否前5分钟不能拾取后面才能拾取
TICKCOUNT GetCanPickUpTime() {return m_CanPickUpTime;}
/*
* Comments:
* Param int nMinSecond:
* @Return void:
*/
void SetMasterOwnerTime(int nMinSecond );
//处理掉落物品时间
//type==666 时, 可手动设置捡取时间
void DealDropItemTimeInfo(CActor * pActor, int type, int pick_time = 60);
public:
int m_nLogId; //掉落的logid
char m_sLogDesc[32]; //掉落的描述
bool m_showLootTips; //是否提示客户端拾取
private:
private:
CUserItem * m_pItem; //物品的指针
CDropItemProperty m_property; //属性集合
TICKCOUNT m_expireTime; //过期的时间,低于这个过期时间,这个箱子就要删除
TICKCOUNT m_ownerExpireTime; //属于他的主人的过期时间
TICKCOUNT m_CanPickUpTime; //能拾取的时间
BYTE m_btMoneyType; //掉落金钱类型
};