161 lines
3.5 KiB
C++
161 lines
3.5 KiB
C++
#pragma once
|
||
//////////////////////////////////////////////////////////////////////////
|
||
// 宝箱掉落类,负责加载掉落配置和执行掉落
|
||
//
|
||
class CBoxDropMgr;
|
||
class CBoxDrop : public CBaseScriptExportObject, public CCustomLogicLuaConfig
|
||
{
|
||
public:
|
||
friend class CBoxDropMgr;
|
||
|
||
typedef CBaseScriptExportObject Inherit;
|
||
|
||
CBoxDrop();
|
||
|
||
/*
|
||
* Comments: 加载掉落配置脚本数据
|
||
* Param const char * pFile:脚本文件名
|
||
* @Return bool: 成功返回true;失败返回false
|
||
* @Remark: 配置文件格式如下:每一行一个掉落项。
|
||
drop = {
|
||
{ id=522 ,count=1,strong =0,quality =-1,propability=10800, group=0},
|
||
{ id=523 ,count=1,strong =0,quality =-1,propability=10800, group=0},
|
||
{ id=524 ,count=1,strong =0,quality =-1,propability=10800, group=0},
|
||
}
|
||
*/
|
||
bool load(const char *pFile);
|
||
|
||
/*
|
||
* Comments: 执行一次掉落
|
||
* @Return DropItemList: 掉落物品列表
|
||
*/
|
||
DropItemList drop(void * pEntity =0);
|
||
|
||
/*
|
||
* Comments:按概率的方式掉落物品
|
||
* @Return DropItemList: 返回掉落的列表
|
||
*/
|
||
DropItemList proabilityDrop(void * pEntity =0);
|
||
|
||
/*
|
||
* Comments: 负责对象的销毁处理。脚本对象的release会减少引用计数,当引用计数为0会调用destroy销毁对象。
|
||
* @Return void:
|
||
*/
|
||
void destroy();
|
||
|
||
inline virtual const char* getClassName() const
|
||
{
|
||
return CBoxDrop::m_sClassName;
|
||
}
|
||
|
||
|
||
|
||
protected:
|
||
~CBoxDrop(){}
|
||
|
||
/*
|
||
* Comments: 加载掉落配置数据
|
||
* @Return bool:
|
||
*/
|
||
bool loadData();
|
||
|
||
/*
|
||
* Comments: 释放掉落相关配置数据
|
||
* @Return void:
|
||
*/
|
||
void releaseData();
|
||
|
||
//设置物品的属性
|
||
void SetItemInfo(DropItemList& pInfo,ONEDROPDATA * pData );
|
||
|
||
/*
|
||
* Comments:判断一件物品的性别和职业的条件能否满足
|
||
* Param ONEDROPDATA * pData:物品的指针
|
||
* Param int sex:性别
|
||
* Param int job:职业
|
||
* @Return bool:能够掉落返回 true,否则返回false
|
||
*/
|
||
inline bool CanDrop(ONEDROPDATA *pData, int sex, int job)
|
||
{
|
||
if(pData->bSex >=0 && sex >=0 && pData->bSex != sex)
|
||
{
|
||
return false;
|
||
}
|
||
if(pData->bJob > 0 && job > 0 && pData->bJob != job)
|
||
{
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
private:
|
||
DROPGROUP m_dropGroup;
|
||
static TCHAR m_sClassName[32];
|
||
DECLARE_OBJECT_COUNTER(CBoxDrop)
|
||
};
|
||
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////////////
|
||
// 宝箱掉落管理器;负责管理宝箱管理对象
|
||
class CBoxDropMgr
|
||
{
|
||
public:
|
||
CBoxDropMgr() : m_dataAllocator("CBoxDropMgr"){}
|
||
virtual ~CBoxDropMgr();
|
||
|
||
/*
|
||
* Comments: 获取宝箱掉落管理器
|
||
* @Return CBoxDropMgr&:
|
||
*/
|
||
static CBoxDropMgr& getSingleton();
|
||
|
||
|
||
/*
|
||
* Comments: 初始化宝箱管理器
|
||
* @Return void:
|
||
*/
|
||
static void initialize();
|
||
|
||
/*
|
||
* Comments: 销毁宝箱管理器
|
||
* @Return void:
|
||
*/
|
||
static void release();
|
||
|
||
/*
|
||
* Comments:创建宝箱
|
||
* Param const char * pKey:
|
||
* Param bool bAddToGOMgr: 是否添加到全局对象管理器
|
||
* @Return CBoxDrop*: 返回创建的宝箱对象
|
||
*/
|
||
CBoxDrop* createBoxDrop(const char *pKey);
|
||
|
||
|
||
/*
|
||
* Comments: 销毁宝箱对象
|
||
* Param CBoxDrop * bd: 宝箱对象指针
|
||
* @Return void:
|
||
* @注意:不要直接调用此函数是否。应该调用CBoxDrop::release()释放对象。
|
||
*/
|
||
void destroyBoxDrop(CBoxDrop *bd);
|
||
|
||
|
||
static CBoxDropMgr *s_BoxDropMgr;
|
||
static LONG s_boxDropMgrCnt;
|
||
|
||
protected:
|
||
/*
|
||
* Comments: 从列表中移除
|
||
* Param CBoxDrop * bd:
|
||
* @Return void:
|
||
* @Remark:
|
||
*/
|
||
void removeFromList(CBoxDrop *bd);
|
||
|
||
void destroyBoxDropImpl(CBoxDrop *bd);
|
||
private:
|
||
CSingleObjectAllocator<CBoxDrop> m_dataAllocator;
|
||
CVector<CBoxDrop*> m_boxObjectList;
|
||
};
|
||
|