547 lines
18 KiB
C
547 lines
18 KiB
C
|
|
#pragma once
|
|||
|
|
//class CComponentManager;
|
|||
|
|
#include "JXAbsGameMap.h"
|
|||
|
|
|
|||
|
|
//多倍活动结构
|
|||
|
|
typedef struct tagActivityRate
|
|||
|
|
{
|
|||
|
|
CommonActivityId m_nActivityId; //活动id
|
|||
|
|
float m_fActRate; //当前活动经验倍率
|
|||
|
|
UINT m_uRateTime; //多倍结束时间
|
|||
|
|
}ACTIVITYRATE;
|
|||
|
|
|
|||
|
|
class CLogicEngine :
|
|||
|
|
public wylib::thread::CBaseThread
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
typedef CBaseThread Inherited;
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
//逻辑处理统一TICKCOUNT
|
|||
|
|
static TICKCOUNT nCurrTickCount;
|
|||
|
|
//全局功能脚本文件路径
|
|||
|
|
static LPCTSTR szGlobalFuncScriptFile;
|
|||
|
|
//全局怪物脚本文件路径
|
|||
|
|
static LPCTSTR szMonsterFuncScriptFile;
|
|||
|
|
|
|||
|
|
//任务脚本文件
|
|||
|
|
static LPCTSTR szQuestNpcFile;
|
|||
|
|
//物品脚本文件
|
|||
|
|
static LPCTSTR szItemNpcFile;
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
CLogicEngine();
|
|||
|
|
~CLogicEngine();
|
|||
|
|
|
|||
|
|
//启动逻辑引擎
|
|||
|
|
BOOL StartEngine();
|
|||
|
|
//停止逻辑引擎
|
|||
|
|
VOID StopEngine();
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments:提供接口给数据服务器连接调用,当连接上的时候
|
|||
|
|
* @Return VOID:
|
|||
|
|
*/
|
|||
|
|
VOID InitComponent()
|
|||
|
|
{
|
|||
|
|
if (HasDbDataInit())
|
|||
|
|
return;
|
|||
|
|
m_GlobalVarMgr.Load();
|
|||
|
|
m_ActivityMgr.Load();
|
|||
|
|
m_BossMgr.Load();
|
|||
|
|
m_RankingMgr.LoadBaseRankData();
|
|||
|
|
m_MiscMgr.Init();
|
|||
|
|
m_ConsignmentMgr.Load();
|
|||
|
|
m_MailMgr.Load();
|
|||
|
|
OnDbInitData();
|
|||
|
|
}
|
|||
|
|
//保存
|
|||
|
|
VOID SaveComponent()
|
|||
|
|
{
|
|||
|
|
if (!HasDbDataInit())
|
|||
|
|
return;
|
|||
|
|
m_GlobalVarMgr.Save();
|
|||
|
|
m_ActivityMgr.Save();
|
|||
|
|
m_BossMgr.Save();
|
|||
|
|
m_ConsignmentMgr.SaveConsignItemToDb();
|
|||
|
|
|
|||
|
|
m_GuildMgr.SaveAllGuildEvent();
|
|||
|
|
m_GuildMgr.SaveGuildApplyReslut();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 设置主逻辑循环性能参数
|
|||
|
|
* dwTimeLimit 主循环中每次循环时间限制,单位是毫秒
|
|||
|
|
* nLoopCount 主循环中每次循环处理逻辑数据次数限制
|
|||
|
|
* dwSleep 主循环中每次循环休眠时间,单位是毫秒
|
|||
|
|
*/
|
|||
|
|
inline VOID setMainLoopPerformanceParam(TICKCOUNT dwTimeLimit, INT_PTR nLoopCount, TICKCOUNT dwSleep)
|
|||
|
|
{
|
|||
|
|
m_dwMainLoopTimeLimit = dwTimeLimit;
|
|||
|
|
m_nMainLoopLimit = nLoopCount;
|
|||
|
|
m_dwMainLoopSleep = dwSleep;
|
|||
|
|
}
|
|||
|
|
/* 获取主逻辑循环性能参数 */
|
|||
|
|
inline VOID getMainLoopPerformanceParam(TICKCOUNT& dwTimeLimit, INT_PTR& nLoopCount, TICKCOUNT& dwSleep)
|
|||
|
|
{
|
|||
|
|
dwTimeLimit = m_dwMainLoopTimeLimit;
|
|||
|
|
nLoopCount = m_nMainLoopLimit;
|
|||
|
|
dwSleep = m_dwMainLoopSleep;
|
|||
|
|
}
|
|||
|
|
/* 获取上次主逻辑循环的性能统计值
|
|||
|
|
* dwTimeConsume 输出上次主逻辑循环消耗的处理器时间,单位是毫秒
|
|||
|
|
* nLoopCount 输出上次主逻辑循环的逻辑处理次数
|
|||
|
|
*/
|
|||
|
|
inline VOID getLastLoopPerformance(TICKCOUNT& dwTimeConsume, INT_PTR& nLoopCount)
|
|||
|
|
{
|
|||
|
|
dwTimeConsume = m_dwLastLoopTime;
|
|||
|
|
nLoopCount = m_nLastLoopCount;
|
|||
|
|
}
|
|||
|
|
inline CEntityManager* GetEntityMgr(void){return &m_EntityMgr; }
|
|||
|
|
inline CGuildComponent& GetGuildMgr(void) {return m_GuildMgr;}
|
|||
|
|
inline CActivityComponent& GetActivityMgr(void) {return m_ActivityMgr;}
|
|||
|
|
inline CFuBenManager* GetFuBenMgr(void) {return &m_FuBenMgr;}
|
|||
|
|
inline CNetWorkMsgHandle* GetNetWorkHandle() { return &m_NetWorkHandle;}
|
|||
|
|
inline CNpc* GetGlobalNpc() { return m_pGlobalFuncNpc;}
|
|||
|
|
inline lua_State * GetGlobalNpcLua() { return m_pGlobalFuncNpc->GetScript().GetLuaState(); }
|
|||
|
|
inline CNpc* GetMonFuncNpc() { return m_pMonFuncNpc; }
|
|||
|
|
inline CNpc * GetItemNpc() { return m_pItemNpc;}
|
|||
|
|
inline CRankingMgr& GetRankingMgr() { return m_RankingMgr;}
|
|||
|
|
inline CGlobalVarMgr& GetGlobalVarMgr() { return m_GlobalVarMgr; }
|
|||
|
|
inline CBossManager& GetBossMgr() { return m_BossMgr; }
|
|||
|
|
|
|||
|
|
inline CTopTitleMgr& GetTopTitleMgr() { return m_TopTitleMgr;}
|
|||
|
|
inline CEncryptFunctionName & GetEncryptFuncMgr() {return m_EncryptFunctionMgr;}
|
|||
|
|
inline CTeamManager& GetTeamMgr(){return m_teamMgr;} //获取队伍管理器
|
|||
|
|
inline CScriptTimeCallManager& GetScriptTimeCallManager(){ return m_ScriptTimeCallMgr; }
|
|||
|
|
|
|||
|
|
inline CMiscMgr& GetMiscMgr() { return m_MiscMgr;}
|
|||
|
|
|
|||
|
|
inline CWorldLevelMgr& GetWorldLevelMgr() { return m_WorldLevelMgr;}
|
|||
|
|
inline CConsignmentMgr& GetConsignmentMgr(){return m_ConsignmentMgr;}
|
|||
|
|
inline CMailMgr& GetMailMgr(){return m_MailMgr;}
|
|||
|
|
inline CTransmitMgr& GetTransmitMgr() { return m_TransmitMgr; }
|
|||
|
|
inline CCrossMgr& GetCrossMgr() {return m_CrossMgr;}
|
|||
|
|
//获取时间管理的组件
|
|||
|
|
inline CTimeStatisticMgr* GetStatisticMgr(){return m_timeStatisticMgr; }
|
|||
|
|
|
|||
|
|
//获取聊天的组件
|
|||
|
|
inline CChatManager & GetChatMgr(){return m_chatMgr;}
|
|||
|
|
//获取公告的组件
|
|||
|
|
inline CNoticeManager & GetNoticeMgr(){return m_NoticeMgr;}
|
|||
|
|
|
|||
|
|
inline CSimulatorMgr* GetSimulatorMgr() { return &m_SimulatorMgr;}
|
|||
|
|
|
|||
|
|
|
|||
|
|
inline void SetUserItemSpId(int nSpId)
|
|||
|
|
{
|
|||
|
|
m_UserItemAllocator.SetSpid(nSpId);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
inline void SetUserItemServerId(int nSvrId)
|
|||
|
|
{
|
|||
|
|
m_UserItemAllocator.SetServerIndex(nSvrId);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
inline CUserItem::ItemSeries BuildMailSn()
|
|||
|
|
{
|
|||
|
|
return m_UserItemAllocator.BuildMailSn();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
inline CUserItem::ItemSeries BuildNeedBuySn()
|
|||
|
|
{
|
|||
|
|
return m_UserItemAllocator.BuildNeedBuySn();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//返回离线玩家的管理器
|
|||
|
|
inline COfflineUserMgr& GetOfflineUserMgr() {return m_offlineUserMgr;}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//返回跨服离线玩家的管理器
|
|||
|
|
inline COfflineCenterUserMgr& GetOfflineCenterUserMgr() {return m_offlineCenterUserMgr;}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments: 拷贝从物品管理器分配一个物品,用于从网络字节流里读取物品以后,拷贝到物品管理器
|
|||
|
|
* Param const bool boNewSeries: 是否需要申请序列号
|
|||
|
|
* Param CUserItem * pTempUserItem: 读取的临时存放的物品的指针
|
|||
|
|
* @Return CUserItem*: 物品管理器的新指针
|
|||
|
|
*/
|
|||
|
|
inline CUserItem* _CopyAllocUserItem(const bool boNewSeries,CUserItem *pTempUserItem, LPCSTR file, INT_PTR line)
|
|||
|
|
{
|
|||
|
|
CUserItem *pUserItem= _AllocUserItem(boNewSeries,file,line);
|
|||
|
|
if(pUserItem == NULL)
|
|||
|
|
{
|
|||
|
|
OutputMsg(rmError,"[ItemTrace],AllocUserItem alloc return nil,file=%s,line=%d",file,(int)line);
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
memcpy(pUserItem,pTempUserItem,sizeof(CUserItem));
|
|||
|
|
return pUserItem;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#define CopyAllocUserItem(boNewSeries,pTempUserItem) _CopyAllocUserItem(boNewSeries, pTempUserItem,__FILE__, __LINE__)
|
|||
|
|
|
|||
|
|
//申请用户物品对象,boGenNewSeries参数用于决定是否分配新的物品系列号
|
|||
|
|
inline CUserItem* _AllocUserItem(const bool boNewSeries, LPCSTR file, INT_PTR line )
|
|||
|
|
{
|
|||
|
|
return m_UserItemAllocator.allocItem(boNewSeries,file,line);
|
|||
|
|
}
|
|||
|
|
#define AllocUserItem(boNewSeries) _AllocUserItem(boNewSeries, __FILE__, __LINE__)
|
|||
|
|
|
|||
|
|
|
|||
|
|
inline void _DestroyUserItem(CUserItem* pUserItem, LPCSTR file, INT_PTR line )
|
|||
|
|
{
|
|||
|
|
m_UserItemAllocator.DestroyUserItem(pUserItem,file,line);
|
|||
|
|
}
|
|||
|
|
#define DestroyUserItem(pUserItem) _DestroyUserItem(pUserItem, __FILE__, __LINE__)
|
|||
|
|
|
|||
|
|
//输出物品的使用情况
|
|||
|
|
void TraceItem()
|
|||
|
|
{
|
|||
|
|
m_UserItemAllocator.TraceItem();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//申请实体消息
|
|||
|
|
CEntityMsg* AllocEntityMsg(LPCSTR file, INT_PTR line );
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//销毁实体消息
|
|||
|
|
void __DestoryEntityMsg(CEntityMsg *pMsg,CEntity * pEntity,LPCSTR file, INT_PTR line);
|
|||
|
|
#define DestoryEntityMsg(pMsg,pEntity) __DestoryEntityMsg(pMsg,pEntity,__FILE__,__LINE__)
|
|||
|
|
|
|||
|
|
//创建实体的特效
|
|||
|
|
inline CEntityEffect* AllocEntityEffect(){ return m_EntityEffectAllocator.allocObject(); }
|
|||
|
|
|
|||
|
|
//删除实体的特效
|
|||
|
|
inline void DestoryEntityEffect(CEntityEffect* pMsg){m_EntityEffectAllocator.freeObject(pMsg); }
|
|||
|
|
|
|||
|
|
//获取同步的系统逻辑日期和时间
|
|||
|
|
inline SYSTEMTIME& getSysTime(){ return m_CurSysTime; }
|
|||
|
|
//获取同步的系统TICKCOUNT
|
|||
|
|
inline TICKCOUNT getTickCount(){ return m_dwCurTick; }
|
|||
|
|
//获取同步的逻辑短日期时间值
|
|||
|
|
inline unsigned int getMiniDateTime(){ return m_CurMiniDateTime; }
|
|||
|
|
//判断是否同个星期 nRefreshDay:判断星期 0星期天为分界 1星期1分界
|
|||
|
|
bool IsSameWeek(unsigned int t1, unsigned int t2, unsigned int nRefreshDay=0);
|
|||
|
|
//判断是否同个月
|
|||
|
|
bool IsSameMonth(unsigned int t1, unsigned int t2)
|
|||
|
|
{
|
|||
|
|
SYSTEMTIME st1, st2;
|
|||
|
|
((CMiniDateTime)t1).decode(st1);
|
|||
|
|
((CMiniDateTime)t2).decode(st2);
|
|||
|
|
if (st1.wYear != st2.wYear || st1.wMonth != st2.wMonth) //判断是否同一个月
|
|||
|
|
{
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
//获取当前在线的人数
|
|||
|
|
inline int getOnlinceCount() {return (int)m_nOnliceCount;}
|
|||
|
|
/*
|
|||
|
|
* Comments: 获取一个随机数,暂时用当前的滴答数量,这个可能还会修改
|
|||
|
|
* @Return INT_PTR: 返回一个随机数
|
|||
|
|
*/
|
|||
|
|
inline unsigned int GetRandValue()
|
|||
|
|
{
|
|||
|
|
return wrandvalue();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//返回 [0, nModule)
|
|||
|
|
inline unsigned int GetRandValue(unsigned int nModule)
|
|||
|
|
{
|
|||
|
|
if (nModule ==0) return 0;
|
|||
|
|
return ( (unsigned int) wrandvalue() + (unsigned int)_getTickCount() ) % (unsigned int) nModule;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//返回ai管理器
|
|||
|
|
inline CAiMgr & GetAiMgr(){return m_aiMgr;}
|
|||
|
|
//获取给脚本存储的动态数据
|
|||
|
|
inline CCLVariant& GetDyanmicVar() { return m_DynamicVar; }
|
|||
|
|
// 获取后台资源加载模块
|
|||
|
|
inline CBackResLoadModule& GetBackResLoadModule() { return m_backLoadModule; }
|
|||
|
|
// 重新加载物品配置数据
|
|||
|
|
void reloadItemConfig();
|
|||
|
|
//获取计分器管理器
|
|||
|
|
inline CScoreRecorderManager& GetScoreRecorderManager(){ return m_ScoreRecorderManager; }
|
|||
|
|
|
|||
|
|
//获取数据包统计
|
|||
|
|
inline CActorDataPacketStat& GetDataPacketStat() {return m_sPacketRecord;}
|
|||
|
|
|
|||
|
|
//获取是否统计数据包的标志
|
|||
|
|
inline BOOL GetPacketRecordState() {return m_bTracePacketRecord;}
|
|||
|
|
|
|||
|
|
inline void SetPacketRecordState(bool bState) {m_bTracePacketRecord = bState;}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//设置服务器多少秒后自动停机维护,单位是秒
|
|||
|
|
void SetStopServerTime(UINT nTime);
|
|||
|
|
void CancelStopServer();
|
|||
|
|
//发停服公告
|
|||
|
|
void SendStopServerNotice();
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments:设置经验倍率
|
|||
|
|
* Param INT_PTR nRate:倍率
|
|||
|
|
* Param INT_PTR nTime:持续时间,如果是0,表示不限时
|
|||
|
|
* @Return INT_PTR:返回成功设置了多少倍率
|
|||
|
|
*/
|
|||
|
|
INT_PTR SetSysExpRate(INT_PTR nRate,INT_PTR nTime);
|
|||
|
|
|
|||
|
|
INT_PTR GetSysExpRate() { return (INT_PTR)m_ExpRate; }
|
|||
|
|
|
|||
|
|
/// @param nTime 持续时长
|
|||
|
|
bool SetActivityCommonRate(CommonActivityId nActivityId,float nRate, INT_PTR nTime);
|
|||
|
|
|
|||
|
|
//获取活动多倍加成比率
|
|||
|
|
float GetActivityCommonRate(CommonActivityId nActivityId);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments: 获取角色消息过滤器
|
|||
|
|
* @Return CActorMsgFilter&:
|
|||
|
|
* @Remark:
|
|||
|
|
*/
|
|||
|
|
CActorMsgFilter& GetActorMsgFilter() { return m_AcotrMsgFilter; }
|
|||
|
|
|
|||
|
|
// 输出内存池详细信息
|
|||
|
|
void DumpDataAllocator();
|
|||
|
|
|
|||
|
|
//发送消息给数据服务器停止数据服
|
|||
|
|
void SendDbServerStop();
|
|||
|
|
|
|||
|
|
//引擎是否启动了
|
|||
|
|
volatile BOOL inline IsEngineerRuning()
|
|||
|
|
{
|
|||
|
|
if( TRUE == InterlockedCompareExchange(&m_boEngineRunning, TRUE, TRUE))
|
|||
|
|
{
|
|||
|
|
return TRUE;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//获取stringbuff
|
|||
|
|
inline CStringBuff& GetStringBuff()
|
|||
|
|
{
|
|||
|
|
return m_strBuff;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments:开启性能日志记录
|
|||
|
|
* Param bool isOpen:是否开启,true表示开启,false不开启
|
|||
|
|
* @Return void:
|
|||
|
|
*/
|
|||
|
|
inline void SetOpenPerfLog(bool isOpen)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
m_bNeedPerfLog =isOpen;
|
|||
|
|
CTimeProfDummy::SetOpenFlag(isOpen);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID AddDealToLog(int nLogid,
|
|||
|
|
int nActorid,int nTarActorid,
|
|||
|
|
INT nItemId=0,WORD nItemNum=0,WORD nMoneyType=0,INT64 nMoneyNum=0, int nDues = 0, unsigned int nServerId = 0);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments:记录元宝的消费
|
|||
|
|
* Param WORD nLogid:消息类型
|
|||
|
|
* Param int nActorid: 角色id
|
|||
|
|
* Param LPCTSTR szAccount:帐号名称
|
|||
|
|
* Param LPCTSTR szCharName:角色名称
|
|||
|
|
* Param int nCount:购买数量
|
|||
|
|
* Param int nPaymentCount:消费总价钱
|
|||
|
|
* Param LPCTSTR szConsumeDescr:描述,如物品的名字
|
|||
|
|
* int nConsumeLevel:玩家的消费的等级
|
|||
|
|
* @Return VOID:
|
|||
|
|
*/
|
|||
|
|
VOID AddCosumeToLog(WORD nLogid,int nActorid,LPCTSTR szAccount,
|
|||
|
|
LPCTSTR szCharName,BYTE nMoneytype,int nCount,int nPaymentCount,LPCTSTR szConsumeDescr=NULL,int nConsumeLevel=0, int nBalance = 0,unsigned int nServerId = 0);
|
|||
|
|
|
|||
|
|
//发送累计玩家的消费
|
|||
|
|
void SendActorConsumeLog();
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments:记录玩家击杀掉落
|
|||
|
|
* Param int nActorid: 角色id
|
|||
|
|
* Param LPCTSTR szAccount:帐号名称
|
|||
|
|
* Param LPCTSTR szCharName:角色名称
|
|||
|
|
* Param LPCTSTR szMonName:怪物名称
|
|||
|
|
* Param LPCTSTR szSceneName:场景名称
|
|||
|
|
* Param LPCTSTR szItemName:道具名称
|
|||
|
|
* Param int nCount:数据
|
|||
|
|
* Param int nPosx:x坐标
|
|||
|
|
* Param int nPosy:y坐标
|
|||
|
|
* @Return VOID:
|
|||
|
|
*/
|
|||
|
|
VOID AddKillDropToLog(int nActorid,LPCTSTR szAccount,LPCTSTR szCharName,LPCTSTR szMonName,
|
|||
|
|
LPCTSTR szSceneName,LPCTSTR szItemName,int nCount,int nPosX, int nPosY,unsigned int nServerId = 0);
|
|||
|
|
|
|||
|
|
//发送击杀掉落统计
|
|||
|
|
void SendKillDrop2Log();
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments:记录玩家击杀掉落
|
|||
|
|
* Param int nActorid: 角色id
|
|||
|
|
* Param LPCTSTR szAccount:帐号名称
|
|||
|
|
* Param LPCTSTR szCharName:角色名称
|
|||
|
|
* Param int nAtvId:活动id
|
|||
|
|
* Param int nIndex:索引
|
|||
|
|
* @Return VOID:
|
|||
|
|
*/
|
|||
|
|
VOID AddJoinAtvToLog(int nActorid,LPCTSTR szAccount,LPCTSTR szCharName,int nAtvId, int nIndex,unsigned int nServerId = 0);
|
|||
|
|
void SendJoinAtv2Log();
|
|||
|
|
void BackStageSetSecondPswFlag(bool boFlag);
|
|||
|
|
bool GetSecondPswFlag() {return m_boSeoncdPswFlag;}
|
|||
|
|
bool GetLoginSecondPswFlag() {return m_boLoginSecondPswFlag;}
|
|||
|
|
void SetLoginSecondPsw()
|
|||
|
|
{
|
|||
|
|
m_boLoginSecondPswFlag = !m_boLoginSecondPswFlag;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static void PostAsyncWorkMsg(void* pCBData);
|
|||
|
|
|
|||
|
|
void SetPrintDamageInfo(bool v){ m_boPrintDamageInfo = v; }
|
|||
|
|
bool IsPrintDamageInfo() { return m_boPrintDamageInfo; }
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
VOID OnRountine();
|
|||
|
|
//virtual void OnThreadStarted();
|
|||
|
|
//virtual void OnTerminated();
|
|||
|
|
//单次逻辑处理
|
|||
|
|
VOID LogicRun();
|
|||
|
|
//逻辑引擎启动函数(由主逻辑线程启动时调用)
|
|||
|
|
VOID LogicEngineStarted();
|
|||
|
|
//逻辑引擎停止函数(由主逻辑线程即将退出前调用)
|
|||
|
|
VOID LogicEngineStoped();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
//初始化保留场景
|
|||
|
|
VOID InitReserveScene();
|
|||
|
|
//初始化保留NPC
|
|||
|
|
BOOL InitReserveNpc();
|
|||
|
|
// 设置线程的亲和度
|
|||
|
|
void SetThreadAffinite(DWORD_PTR dwMask);
|
|||
|
|
|
|||
|
|
//DB初始化子系统的数据完成
|
|||
|
|
inline void OnDbInitData()
|
|||
|
|
{
|
|||
|
|
m_hasDbInitData =true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//DB的数据是否初始化完毕
|
|||
|
|
inline bool HasDbDataInit()
|
|||
|
|
{
|
|||
|
|
return m_hasDbInitData;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//销毁消息管理器
|
|||
|
|
void TraceMsgMgr();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
static CTimeStatisticMgr* m_timeStatisticMgr; //时间统计组件
|
|||
|
|
volatile LONG m_boEngineStarted; //逻辑引擎是否已经启动
|
|||
|
|
volatile LONG m_boEngineRunning; //逻辑引擎正在运行
|
|||
|
|
|
|||
|
|
TICKCOUNT m_dwMainLoopTimeLimit; //主循环中每次循环时间限制,单位是毫秒
|
|||
|
|
INT_PTR m_nMainLoopLimit; //主循环中每次循环处理逻辑数据次数限制
|
|||
|
|
TICKCOUNT m_dwMainLoopSleep; //主循环中每次循环休眠时间,单位是毫秒
|
|||
|
|
TICKCOUNT m_dwLastLoopTime; //上次完整逻辑循环消耗的时间,单位是毫秒
|
|||
|
|
INT_PTR m_nLastLoopCount; //上次逻辑循环次数
|
|||
|
|
#ifdef WIN32
|
|||
|
|
HANDLE m_hStartEvent; //启动信号事件
|
|||
|
|
HANDLE m_hStopEvent; //停止信号事件
|
|||
|
|
#else
|
|||
|
|
sem_t m_hStartEvent; //启动信号事件
|
|||
|
|
sem_t m_hStopEvent; //停止信号事件
|
|||
|
|
#endif
|
|||
|
|
SYSTEMTIME m_CurSysTime; //当前系统日期和时间,每个循环更新一次
|
|||
|
|
TICKCOUNT m_dwCurTick; //当前系统TICKCOUNT,每个循环更新一次
|
|||
|
|
CLogicServer * m_pLogicServer;
|
|||
|
|
CEntityManager m_EntityMgr;
|
|||
|
|
CRankingMgr m_RankingMgr; //排行榜管理器
|
|||
|
|
CSimulatorMgr m_SimulatorMgr; //模拟人物管理器
|
|||
|
|
CGlobalVarMgr m_GlobalVarMgr;
|
|||
|
|
CBossManager m_BossMgr; //boss信息
|
|||
|
|
CTopTitleMgr m_TopTitleMgr;
|
|||
|
|
CMiscMgr m_MiscMgr;
|
|||
|
|
CMailMgr m_MailMgr;
|
|||
|
|
CWorldLevelMgr m_WorldLevelMgr;
|
|||
|
|
CConsignmentMgr m_ConsignmentMgr;
|
|||
|
|
CTransmitMgr m_TransmitMgr;
|
|||
|
|
CCrossMgr m_CrossMgr;//跨服管理
|
|||
|
|
CEncryptFunctionName m_EncryptFunctionMgr;
|
|||
|
|
CNetWorkMsgHandle m_NetWorkHandle;
|
|||
|
|
CFuBenManager m_FuBenMgr;
|
|||
|
|
CMiniDateTime m_CurMiniDateTime; //当前短日期时间
|
|||
|
|
COfflineUserMgr m_offlineUserMgr; //离线玩家的信息管理器
|
|||
|
|
COfflineCenterUserMgr m_offlineCenterUserMgr;//跨服离线玩家数据
|
|||
|
|
CTeamManager m_teamMgr; //队伍管理器
|
|||
|
|
CScriptTimeCallManager m_ScriptTimeCallMgr; //脚本定时调用管理器
|
|||
|
|
CChatManager m_chatMgr; //聊天管理器
|
|||
|
|
CNoticeManager m_NoticeMgr; //公共管理器
|
|||
|
|
CUserItemAllocator m_UserItemAllocator; //用户物品申请器
|
|||
|
|
CActorMsgFilter m_AcotrMsgFilter; // 角色消息过滤器
|
|||
|
|
CSingleObjectAllocator<CEntityMsg> m_EntityMsgAllocator;//实体消息内存管理器
|
|||
|
|
CSingleObjectAllocator<CEntityEffect> m_EntityEffectAllocator; //实体的特效的内存管理器
|
|||
|
|
|
|||
|
|
jxcomm::gameMap::CAbstractMap m_ReserveMapData;//保留场景的地图数据
|
|||
|
|
CScene* m_pReserveScene;//保留场景,用于存放保留NPC
|
|||
|
|
CNpc* m_pGlobalFuncNpc; //执行全局的脚本函数
|
|||
|
|
CNpc* m_pMonFuncNpc;//全局怪物脚本
|
|||
|
|
CNpc * m_pItemNpc; //物品npc
|
|||
|
|
CAiMgr m_aiMgr; //ai管理器
|
|||
|
|
unsigned int s_randSeed; //随机数种子,为了避免一个循环里取随机数相同
|
|||
|
|
CTimer<0> m_CheckLuaMemTimer; //检查脚本内存管理器内存的定时器
|
|||
|
|
|
|||
|
|
CTimer<300000> m_SendOnlineCountTimer;//发送在线人数的定时器,1分钟一次
|
|||
|
|
CTimer<120000> m_timeStatTimer;// 耗时分析,2分钟一次
|
|||
|
|
INT_PTR m_nOnliceCount;//在线人数,每分钟更新
|
|||
|
|
CCLVariant m_DynamicVar; //一个用来给脚本保存全局变量数据的变量,数据不保存db
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
CBackResLoadModule m_backLoadModule; // 后台加载模块
|
|||
|
|
CScoreRecorderManager m_ScoreRecorderManager;//计分器管理器
|
|||
|
|
|
|||
|
|
UINT m_StopServerTime; //停机维护倒计时,0表示不停机
|
|||
|
|
UINT m_StopServNoticeTimer; //停服公告每15s发一次
|
|||
|
|
|
|||
|
|
CStringBuff m_strBuff; //字符串缓冲器,用于大的字符串操作的
|
|||
|
|
float m_ExpRate; //当前的系统经验倍率
|
|||
|
|
//float m_ActExpRate; //当前活动经验倍率
|
|||
|
|
UINT m_ExpRateTime;//系统经验倍率的过期时间,即到期就恢复成0(无加成经验)
|
|||
|
|
//UINT m_ActExpRateTime;
|
|||
|
|
TICKCOUNT m_dwCheckOnlineSceneLog;//下次检查记录在线人数的场景信息
|
|||
|
|
BOOL m_boOnlineSceneLoged; //是否已经记录在线人数的场景信息
|
|||
|
|
|
|||
|
|
TICKCOUNT m_dwActorConsumeLogTime; //发送消息的消费日志的间隔
|
|||
|
|
TICKCOUNT m_dwKillDropLogTime; //发送怪物击杀日志的间隔
|
|||
|
|
TICKCOUNT m_dwJoinAtvLogTime; //
|
|||
|
|
|
|||
|
|
bool m_bNeedPerfLog; //是否需要记录性能日志
|
|||
|
|
|
|||
|
|
BOOL m_bTracePacketRecord; //是否统计数据包
|
|||
|
|
CActorDataPacketStat m_sPacketRecord; //数据包统计
|
|||
|
|
|
|||
|
|
bool m_hasDbInitData; //DB是否初始化了改子系统的数据(防止每次重启DB都初始数据)
|
|||
|
|
|
|||
|
|
CGuildComponent m_GuildMgr;
|
|||
|
|
CActivityComponent m_ActivityMgr;
|
|||
|
|
|
|||
|
|
CVector<LOGCONSUMESAVE> m_ActorTotalLog; //发送到全局的消费日志 汇总所有的消费项,如果有消费定时向服务发包 累计玩家每天的消费
|
|||
|
|
CVector<LOGKILLDROPSAVE> m_KillDropLog; //发送到全局的击杀掉落日志
|
|||
|
|
CVector<LOGACTIVITYSCHEDULE> m_JoinAtvlog; //参与活动数据
|
|||
|
|
CVector<ACTIVITYRATE> m_AvtivityRateList; //活动多倍加成数据
|
|||
|
|
|
|||
|
|
bool m_boSeoncdPswFlag; //false为开启二级密码验证,true为关闭二级密码验证
|
|||
|
|
bool m_boLoginSecondPswFlag;//是否跳过登录验证二级密码 true为跳过
|
|||
|
|
bool m_boPrintDamageInfo;
|
|||
|
|
public:
|
|||
|
|
static LPCTSTR s_szBuffAllocStatLogName;
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|