Files
Sun1602/Server/GameServer/PeakTimeEvent.h
T
2022-10-26 12:25:11 +08:00

89 lines
3.5 KiB
C++

#pragma once
#include "Singleton.h"
#include "SunEventInfoParser.h"
#include <list>
class Player;
#ifdef _NA_007919_20141211_ADD_GMCOMMAND_EVENT
class IEventControlPeakTime;
#endif //_NA_007919_20141211_ADD_GMCOMMAND_EVENT
class PeakTimeEvent : public util::Singleton< PeakTimeEvent >
{
public: PeakTimeEvent(VOID);
~PeakTimeEvent(VOID);
public: VOID Init();
// MasterServer로부터 서버키를 받은 후 대상 월드 지정된 이벤트 정리, _NA_002316_20110310_WORLD_SPECIFIC_PEAKTIME_EVENT
void SieveEventsByWorldId();
FLOAT GetEventExp( Player* pPlayer );
#ifdef _NA_007919_20141211_ADD_GMCOMMAND_EVENT
bool AddGmEvent(eEVENT_MODE event_mode, int start_date, WORD start_time, int end_date, WORD end_time, int reward_ratio);
bool AddGmEvent(EVENT_INFO event_info);
//해당 이벤트 정보와 기간중복되는 이벤트 제거
bool DeleteExistOverlapEvent(EVENT_INFO& event_info);
bool DeleteProgressEvent();
bool SendGMEventList(Player* gm_player);
void SetEventControlClass(IEventControlPeakTime* controller) {event_control_ = controller;}
IEventControlPeakTime* GetEventControlClass() {return event_control_;}
VOID SendProgressEventExpRateInfo(Player* player);
#endif //_NA_007919_20141211_ADD_GMCOMMAND_EVENT
private: VOID AddEvent( EVENT_INFO& Eventnfo );
EVENT_INFO* FindEvent( DWORD dwEventID );
#ifdef _NA_007919_20141211_ADD_GMCOMMAND_EVENT
static const INT GetGmEventTempIndex() { ++gmevent_eventid_counter_; return gmevent_eventid_counter_;}
VOID SendEventNotifyPacket(ePEAKTIME_EVENT_NOTIFY type, FLOAT exp_ratio,
BYTE start_day = 0, DWORD start_time = 0,
BYTE end_day = 0, DWORD end_time = 0 );
#endif //_NA_007919_20141211_ADD_GMCOMMAND_EVENT
private: EVENTINFO_MAP m_mapPeakTimeEvent;
#ifdef _NA_007919_20141211_ADD_GMCOMMAND_EVENT
static INT gmevent_eventid_counter_;
IEventControlPeakTime* event_control_;
#endif //_NA_007919_20141211_ADD_GMCOMMAND_EVENT
// 현 시점에서 상시 계산되도 동일한 결과가 나오는 수치 할당
private: struct sFIXEXP_VALUEs
{
FLOAT EXPVAL_USERTYPE;
FLOAT EXPVAL_NEWCHAR_UNDER30LEVEL;
FLOAT EXPVAL_ACCUMULATED_TIME_60x2;
FLOAT EXPVAL_ACCUMULATED_TIME_60x4;
FLOAT EXPVAL_ACCUMULATED_TIME_60x6;
};
enum eFIXEXP_USRTYPEs
{
EXPUSR_NORMAL = 0,
EXPUSR_ONLYPCROOM , // Normal + PC
EXPUSR_UPPERBOUND ,
};
typedef sFIXEXP_VALUEs FIXED_EXP_USRVALUES[EXPUSR_UPPERBOUND];
private: static const int MAX_LEVELED_ARRSIZE = 256;
struct LEVELED_EXP_ARRAY
{
sFIXEXP_VALUEs ARRAY[MAX_LEVELED_ARRSIZE];
sFIXEXP_VALUEs& operator[] ( DWORD idx ) { return ARRAY[idx]; }
const sFIXEXP_VALUEs& operator[] ( DWORD idx ) const { return ARRAY[idx]; }
};
typedef LEVELED_EXP_ARRAY LEVELED_EXP_USRVALUES[EXPUSR_UPPERBOUND];
private: struct CalcedExp
{
VOID Init()
{ ZeroMemory( &m_ExpValues, sizeof(m_ExpValues) ); }
LEVELED_EXP_ARRAY& operator[] ( DWORD idx ) { return m_ExpValues[idx]; }
const LEVELED_EXP_ARRAY& operator[] ( DWORD idx ) const { return m_ExpValues[idx]; }
LEVELED_EXP_USRVALUES m_ExpValues;
};
private: CalcedExp m_ExpInfo;
friend class IEventControlPeakTime;
};