Files
mir_server/server/LogicServer/base/NoticeManager.h

120 lines
2.9 KiB
C
Raw Normal View History

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

#pragma once
#include "CFilter.h" //屏蔽字库
#include "AcAuto.h"
/***************************************************************/
/*
/* 聊天管理器
/* 管理屏蔽字符库,管理踢人屏蔽玩家发言的功能
/***************************************************************/
class CNoticeManager:
public CComponent
{
public:
/*
typedef struct NoticeData
{
char* sMsg; //公告内容
int nPos; //公告位置
int nId ; //公告id
int nMins; //时间间隔
unsigned int nStartTime;//开始时间
unsigned int nEndTime;//结束时间
//下面的数据不需保存
unsigned int nHitTime;//下次触发的时间
NoticeData()
{
memset(this,0,sizeof(*this));
}
}NOTICEDATA;
*/
CNoticeManager()
#ifndef USE_HASK_FILTER
: m_pForbitWords(nullptr)
, m_pFilterWords(nullptr)
#endif
{
m_nPos = 0;
}
virtual bool Initialize(); //初始化组件
VOID Destroy();
//定期发送全服公告
VOID RunOne(TICKCOUNT nTickCount);
/*
* Comments:
* Param int nHashFunCount:hash函数的格式
* Param int nMemory:byte
* @Return bool:truefalse
*/
bool ReloadFilterDb(int nHashFunCount=4,int nMemoryBytes=2500000); //重新装载屏蔽字符库
//void ParseNotice( LPCTSTR sPtr );
//************************************
// Method: AddNotice
//************************************
bool AddNotice(NSNNOTICE &notice/*int nId, unsigned int nStartTime, unsigned int nEndTime, int nMins, int nDisplayPos, LPCSTR sMemo*/);
//获取公告
NSNNOTICE* GetNotice(int nId);
//根据索引删除notice该函数时在m_GameNotice正序循环中调用时需注意索引问题
void RemoveNoticeByIndex(INT_PTR index);
//void SendNoticeToBackMgr();
/*
* Comments:
* Param LPCSTR sMemo:
* @Return void:
*/
bool DeleteNotice(LPCSTR sMemo);
/*
* Comments:
* @Return void:
*/
//void SaveNotice();
//后台给玩家直接发送离线消息 nActorName 玩家名称 nMsg 消息类容
void GmSendOffMsgToActor(LPCSTR nActorName,LPCSTR nMsg);
static bool AppendLine2File(const char* pFileName, const char* pLine);
//获取公告列表
inline std::vector<NSNNOTICE> & GetNoticeList() { return m_GameNotice;}
/*
* Comments:
* Param INT_PTR nCmd:
* Param INT_PTR nErrorCode:
* Param CDataPacketReader & inPacket:
* @Return VOID:
*/
VOID OnDbReturnData(INT_PTR nCmd,char * data,SIZE_T size);
/*
* Comments:
* @Return void:
*/
bool DeleteAllNotice();
/*
* Comments:id删除指定的公告
* Param id
* @Return void:
*/
bool DeleteNoticeById(int nId);
private:
std::vector<NSNNOTICE> m_GameNotice; //全服的公告列表
int m_nPos; //当前播放到第几条
CTimer<30000> m_timer; //半分钟
//static int nMax_ChatRecord;
};