Files
mir_server/server/LogicServer/config/ActivityProvider.h

107 lines
3.3 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
enum ActivityTimeType //时间配置
{
eActivityTimeType_NULL = 0,
eActivityTimeType_KFSJ = 0, //开服时间
eActivityTimeType_GDSJ = 1, //固定时间
eActivityTimeType_HFSJ = 2, //合服时间
eActivityTimeType_XHSJ = 3, //循环时间
eActivityTimeType_MAX,
};
class CActivityProvider :
protected CCustomLogicLuaConfig
{
public:
typedef CCustomLogicLuaConfig Inherited;
typedef std::map<int,GLOBALACTIVITY>::iterator GlobalActivityIterator;
typedef std::map<int,PERSONACTIVITY>::iterator PersonActivityIterator;
public:
CActivityProvider();
~CActivityProvider();
bool LoadAll(LPCTSTR sFilePath);
bool ReadAllActivities();
public:// 功能接口
// 更新活动开启时间 nNextTime 是否开启下一个时间点的计算
bool UpdateOpenTime(lua_State * pLuaState, GLOBALACTIVITY& activity, bool nNextTime = false );
bool UpdateOpenTime(lua_State * pLuaState, PERSONACTIVITY& activity, bool nNextTime = false);
// 检测该日期后不开true为可开
bool CheckOpenTimeLT(GLOBALACTIVITY& activity);
bool CheckOpenTimeLT(PERSONACTIVITY& activity);
// 检测该日期前不开true为可开
bool CheckOpenTimeGt(GLOBALACTIVITY& activity);
bool CheckOpenTimeGt(PERSONACTIVITY& activity);
// 检测该日期前合服开true为可开
bool CheckHefuTimeLt(GLOBALACTIVITY& activity);
bool CheckHefuTimeLt(PERSONACTIVITY& activity);
// 检测该日期后合服开true为可开
bool CheckHefuTimeGt(GLOBALACTIVITY& activity);
bool CheckHefuTimeGt(PERSONACTIVITY& activity);
// 检测第几次合服生效true为可开
bool CheckHefuTimes(GLOBALACTIVITY& activity);
bool CheckHefuTimes(PERSONACTIVITY& activity);
std::map<int,GLOBALACTIVITY>& GetGlobalActivities(){ return m_GlobalActivities; }
std::map<int,PERSONACTIVITY>& GetPersonActivities(){ return m_PersonActivities; }
std::vector<int>& GetActivityIdList(int nAtvType) { return m_ActType2IdMap[nAtvType]; }
bool IsGlobalActivity(int nAtvId)
{
if (m_GlobalActivities.find(nAtvId) != m_GlobalActivities.end())
{
return true;
}
return false;
}
int getPActivityOpenDay(int nAtvId)
{
std::map<int, PERSONACTIVITY>::iterator it = m_PersonActivities.find(nAtvId);
if (it != m_PersonActivities.end())
{
return it->second.nOpenSrvDate;
}
return 0;
}
bool IsPersonActivity(int nAtvId)
{
if (m_PersonActivities.find(nAtvId) != m_PersonActivities.end())
{
return true;
}
return false;
}
bool IsGlobalAtvType(int nAtvType)
{
if (m_ActType2IdMap.find(nAtvType)!=m_ActType2IdMap.end())
{
int atvId = m_ActType2IdMap[nAtvType].front();
return IsGlobalActivity(atvId);
}
return false;
}
bool IsPersonAtvType(int nAtvType)
{
if (m_ActType2IdMap.find(nAtvType)!=m_ActType2IdMap.end())
{
int atvId = m_ActType2IdMap[nAtvType].front();
return IsPersonActivity(atvId);
}
return false;
}
private:
static CBufferAllocator* m_pAllocator;
bool ReadTime(lua_State * pLuaState, int nTimeType, LPCTSTR sKey, int nKeyLen, CMiniDateTime& out);
bool ReadFixedTimeValue(lua_State * pLuaState, LPCTSTR sKey, int nKeyLen, SYSTEMTIME& out);
std::map<int,GLOBALACTIVITY> m_GlobalActivities;// 活动id活动配置
std::map<int,PERSONACTIVITY> m_PersonActivities;// 活动id活动配置
std::map<int,std::vector<int> > m_ActType2IdMap;// 活动类型到活动id列表的映射表
};