Files
mir_server/server/LogicServer/base/BossManager.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

92 lines
2.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <map>
typedef struct BossReferInfo
{
int nBossId; // bossId
int nReferTime; // 刷新时间
int nDeath; //是否死亡
int nBossLv; //boss等级
int nReferX; //刷新的x坐标
int nReferY; //刷新的y坐标
int nReferRange; //刷新的范围
int nReferMapId;// 地图id
int nBuffAddValue;//属性加值百分比
bool bIsPush = false;//是否已推送
bool bNeedRefer = false;//是否需要刷新
uint32_t nBelongId; //归属id
BossReferInfo()
{
memset(this, 0, sizeof(*this));
}
}BOSSREFERINFO;
class CBossManager:public CComponent
{
public:
CBossManager();
~CBossManager();
//初始化所有boss信息
VOID Load();
//保存怪物数据
void Save();
//初始化
bool Initialize();
bool IsInited() { return m_IsInited; }
// 帧处理
VOID RunOne(TICKCOUNT nTickCount);
//处理boss数据返回
void OnDbReturnData(INT_PTR nCmd, char * data, SIZE_T size);
void SetReferBossBasicInfo(BOSSREFERINFO& boss);
public:
//获取当前boss信息
BOSSREFERINFO* GetBossInfo(int nBossId);
//刷boss
void CreateBossEntity(CScene* pScene);
void CreateBossEntity(BOSSREFERINFO& boss);
//bosss死亡
void BossDeath(int nBossId);
bool CheckCondition(int nOpenCircle, int nOpenDay);//判断条件
//依据bossid判断boss 是不是都已死亡
bool GetBossInfoIsDeath(int nBossId);
//依据bossid 返回已死亡的boss最近刷新时间
int GetBossMinReferTime(int nBossId);
std::map<int32_t, BOSSREFERINFO>& GetBossList()
{
return m_nBossReferList;
}
CEntity* CreateBossEntity(BOSSREFERINFO& boss, REFRESHCONFIG& referCfg, CScene* pScene, int Index);
virtual VOID Destroy(){}
//boss 触发lua 脚本
void BossCallLuaScript(int nBossId, int nType, CActor* pActor = NULL, CDataPacket* data = NULL);
private:
struct RunningBossCmpter
{
bool operator()(const BOSSREFERINFO* _x, const BOSSREFERINFO* _y) const
{ return (unsigned int)(_x->nReferTime) <= (unsigned int)(_y->nReferTime); }
};
std::map<int32_t, BOSSREFERINFO> m_nBossReferList; //当前可刷新boss
std::map<int32_t, BOSSREFERINFO> m_nWaitBossReferList; //等待条件达成可刷新的boss
std::map<int32_t, std::vector<BOSSREFERINFO*> > m_nMapBossList;//地图刷怪数据
std::set<BOSSREFERINFO*,RunningBossCmpter> m_RunningReferList; // 排序以结束时间小的为优先
typedef std::map<int32_t, BOSSREFERINFO>::iterator BossIterator;
typedef std::map<int32_t, std::vector<BOSSREFERINFO*> >::iterator MapBossIter;
typedef std::set<BOSSREFERINFO*,RunningBossCmpter>::iterator RunBossIter;
CTimer<2000> m_2sTimer;
CTimer<1000> m_1sTimer;
bool m_IsInited;
};