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

107 lines
3.3 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
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列表的映射表
};