Files
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

176 lines
6.7 KiB
C++
Raw Permalink 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
/**************************************
消息子系统,常用于用户离线后保存消息,等用户上线后再发消息通知
**************************************/
class CMsgSystem:
public CEntitySubSystem<enMsgSystemID,CMsgSystem,CActor>
{
public:
//离线消息类型
//由于保存消息的内容是使用二进制,所以每一种消息类型,是有单独的数据格式,系统需要对每一种消息进行组装和解包
enum tagMsgType
{
mtNoType = 0, //无意义的消息
mtTxtMsg = 1, //普通的文字通知,通常是比较重要的文字通知才需要用到
mtUnMarry = 2, //离婚
mtChangeMoney = 3, //改变玩家的金钱,包括银两和元宝,绑定和非绑定
mtJoinGuild = 4, //加入帮派
mtLeaveGuild = 5, //离开帮派
mtAddIndexItem = 6, //获得物品(present等)
mtGmTxtMsg = 7, // GM 系统消息只有文字内容因为显示界面和mtTxtMsg不一样所以单独一种类型
mtSeverMaster = 8, //与师傅绝关系
mtExpelPupil = 9, //逐出师门
mtDeleteGuild = 13, //帮派解散
mtReturnSuggestMsg = 14, //Gm给玩家直接发送离线消息
mtGuildDepotMsg = 15, //从仓库取出物品的离线消息
mtAuctionItem = 16, //领取竞拍物品
mtGiveStoreItem = 17, //有人赠送了商城物品
mtPaTaMasterAward = 18, //爬塔奖励消息
mtCorpsBattleAward = 19, //战队竞技给奖励
mtCombatRankAward = 20, //[废弃]
mtWholeActivityAward = 21, //全民活动奖励[废弃]
mtGiveFirstSbkGuildAward = 22, //给予首个占领sbk的行会首领奖励[废弃]
mtDefendSbkThreeTimes = 23, //给予首次守沙成功三次行会首领成功[废弃]
mtDefendSbkSecAwards = 24, //给予首次守沙成功三次行会的副首领奖励[废弃]
mtGiveFirstCombineSbkAward = 25, //给予首个合服占领沙巴克的行会首领奖励[废弃]
mtGiveFirstCombineSecSbkAward = 26, //给予首个合服占领沙巴克的服首领奖励[废弃]
mtGiveCombineDefendSbkAward = 27, //给予首个合服守沙三次的行会首领奖励[废弃]
mtGiveCombineDefendSbkSecAward = 28, //给予首个合服守沙三次的行会副首领奖励[废弃]
mtGiveCombineActivityAward = 29, //合服活动奖励
mtHundredYestodayConsumeRank = 30, //百服活动昨天消费排名奖励
mtSurpriseRet = 31, //惊喜回馈
mtSendRedPacket = 32, //赠送红包
mtSendFire = 33, //赠送鞭炮
mtLuckAward = 34, //春节幸运大抽奖
mtFireTop1 = 35, //魅力第一
mtFestivalWithDraw = 36, //提取反馈
mtOldPlayerBack = 37, //老友回归
mtSpecialConsumeYb=39, //特殊的消费记录
mtCombatLog = 40, //职业宗师被挑战战报
//如果还有其他消息,在这里添加
mtMessageCount //消息通知的数量
};
public:
virtual bool Initialize(void *data,SIZE_T size);
//角色各子系统初始化完毕,向客户端发送创建主角的数据包后,调用该接口
virtual void OnEnterGame();
//返回本玩家的消息列表
VOID OnDbRetData(INT_PTR nCmd,INT_PTR nErrorCode, CDataPacketReader &reader);
//继承父类接口,处理网络数据包
virtual void ProcessNetData(INT_PTR nCmd,CDataPacketReader &packet );
/*
* Comments:通知消息系统从数据库读入新加入的消息
* @Return void:
*/
void ReloadFromDb(INT64 msgId);
/*
* Comments:增加一条新信息到列表中要检查列表中已存在同样id的信息
* Param MsgData & msg:
* @Return void:
*/
bool AddToList(MsgData& msg);
//寻径消息
void SendMoveToMsg(LPCSTR sSceneName, INT_PTR nX, INT_PTR nY, LPCSTR sTitle, LPCSTR sTips);
private:
/*
* Comments:处理一条消息如果处理成功返回true
* Param INT64 msgId:
* @Return bool:
*/
bool ProcessMsg(INT64 msgId);
/*
* Comments:处理一条消息如果处理成功返回true
* Param MsgData & msg:
* @Return bool:
*/
bool ProcessMsg(MsgData& msg);
/*
* Comments:发送一条删除信息的命令给数据库服务器
* Param INT64 nMsgId:要删除的消息id这个id是表主键自增长
* @Return void:
*/
void SendDbDeleteMsg(INT64 nMsgId);
/*
* Comments:向服务器发送获取自己的消息列表内容
* Param INT64 nMsgId:如果nMsgid==0读入所有消息否则读入固定id的消息
* @Return void:
*/
void SendDbLoadMsg(INT64 nMsgId);
/*
* Comments:发送消息到客户端
* @Return void:
*/
void SendMsgToClient(MsgData& msg);
public:
/*
* Comments:给已经离线的用户发送一条信息,当用户下次登录的时候,会收到这条消息.
* Param INT_PTR nActorId:目标角色id
* Param INT_PTR nMsgType:消息类型
* Param char * pMsgBuf:发送的消息内容二进制大小不超过MAX_MSG_COUNT
* Param SIZE_T size: pMsgBuf的大小
* Param INT_PTR nSrcActorId:发出这条消息的角色id比如GM当添加消息不成功比如角色名称错误需要通知GM,如果是0表示系统发送
* @Return bool: 返回true仅表示数据长度没问题不代表insert到db成功
*/
static bool AddOfflineMsg(unsigned int nActorId,INT_PTR nMsgType,char* pMsgBuf,SIZE_T size,unsigned int nSrcActorId);
/*
* Comments:给已经离线的用户发送一条信息,当用户下次登录的时候,会收到这条消息.
* Param INT_PTR nActorId:目标角色名
* Param INT_PTR nMsgType:消息类型
* Param char * pMsgBuf:发送的消息内容二进制大小不超过MAX_MSG_COUNT
* Param SIZE_T size: pMsgBuf的大小
* Param INT_PTR nSrcActorId:发出这条消息的角色id比如GM当添加消息不成功比如角色名称错误需要通知GM,如果是0表示系统发送
* @Return bool: 返回true仅表示数据长度没问题不代表insert到db成功
*/
static bool AddOfflineMsgByName(LPCSTR pActorName, INT_PTR nMsgType, char *pMsgBuf, SIZE_T size,unsigned int nSrcActorId);
/*
* Comments:增加一条消息后数据库的返回结果
* Param INT_PTR nCmd:
* Param INT_PTR nErrorCode:错误代码
* Param CDataPacketReader & reader:
* @Return void:
*/
static void OnAddOfflineMsgDbReturn(INT_PTR nCmd,char * data,SIZE_T size);
/*
* Comments:增加一条消息后数据库的返回结果
* Param INT_PTR nCmd:
* Param INT_PTR nErrorCode:错误代码
* Param CDataPacketReader & reader:
* @Return void:
*/
static void OnAddOfflineMsgByNameDbReturn(INT_PTR nCmd,char * data,SIZE_T size);
/*
//处理赠送鞭炮和红包
void OnGetRedPacket(INT64 nMsgId);
//处理赠送鞭炮和红包
bool OnGetRedPacket(MsgData& msg);
//发送春节鞭炮、红包消息到客户端
bool SendFireMsgInfo(INT64 nMsgId, byte nType, WORD nCount, char * sName, char * sBuff);
*/
public:
CMsgSystem();
~CMsgSystem();
private:
CVector<MsgData> m_msgList;//所有的消息列表
};