Files
2022-10-26 12:25:11 +08:00

166 lines
4.7 KiB
C++

#pragma once
//=================================================================================================
// MasterServer 구조체
// - MasterServer에서 사용하는 구조체 정의
//=================================================================================================
#include <BitsetOperation.h>
// 이것은 사용하지 않고 있다. 일단은 정의만 놔둔다. 구현부는 제거하자.
// RTT 명령 수행 제한 타입
enum eRTTARESTRICT_TYPE
{
eRTTARESTRICT_ALL = 0,
eRTTARESTRICT_NOTICE,
eRTTARESTRICT_DROPUSER, // 현재 USERDISCONN과 겹쳐서 안 쓰이는 듯?
eRTTARESTRICT_USERCOUNT,
eRTTARESTRICT_BATTLEZONEINFO,
eRTTARESTRICT_ARMORKIT,
eRTTARESTRICT_ABUSE,
eRTTARESTRICT_USERMONEY,
eRTTARESTRICT_SERVERSHUTDOWN,
eRTTARESTRICT_USERDISCONN,
eRTTARESTRICT_GMSCOMMAND,
};
//
//
//
class MasterServerEx;
//
struct MSG_GM_OPERATION_FUNCRESTRICT_CMD;
struct MSG_MX_FUNCRESTRICT_RELOAD_ANS;
//
//
//
#ifndef __WAVERIX_FUNCTION_RESTRICT_EXTENDED__
//struct sRESTRICT_MGR
//{
// //
// static const DWORD mc_FUNCRESTRICT_DATABLOCK_MAX_INDEX = 31;
// static const DWORD mc_FUNCRESTRICT_DATABLOCK_MAX_SIZE = mc_FUNCRESTRICT_DATABLOCK_MAX_INDEX+1;
// static const DWORD mc_FUNCRESTRICT_DATABLOCK_ALLOWED_MASK = eFUNCTIONALRESTRICT_ALL;
// //
//
// // 32개 관련 BitMask, 이 개수를 넘어가게 되면, 배열로 전환하거나 DWORD64로 전환하자.
// DWORD m_dwFuncRestrict;
//
// // <METHODs>
// inline VOID Clear()
// {
// m_dwFuncRestrict = 0;
// }
//
// // <FUNCTION RESTRICT>
// inline VOID FunctionAllow( eFUNCTIONALRESTRICT_TYPE functionType )
// {
// DWORD dwFunc = (DWORD)functionType;
// if( mc_FUNCRESTRICT_DATABLOCK_ALLOWED_MASK & dwFunc )
// {
// m_dwFuncRestrict |= dwFunc;
// }
// }
//
// inline VOID FunctionRestrict( eFUNCTIONALRESTRICT_TYPE functionType )
// {
// DWORD dwFunc = (DWORD)functionType;
// if( mc_FUNCRESTRICT_DATABLOCK_ALLOWED_MASK & dwFunc )
// {
// m_dwFuncRestrict &= ~dwFunc;
// }
// }
//
// inline BOOL IsFunctionAllowd( eFUNCTIONALRESTRICT_TYPE functionType )
// {
// DWORD dwFunc = (DWORD)functionType;
// if( mc_FUNCRESTRICT_DATABLOCK_ALLOWED_MASK & dwFunc )
// {
// return TRUE;
// }
// return FALSE;
// }
//
// //
// // Packet만들기 루틴 추가할 것.
// struct MakePacket
// {
// // 게임서버로 보낼 정보 만들기
// static VOID Make_GM_OPERATION_FUNCRESTRICT_CMD( sRESTRICT_MGR* pBLOCK, MSG_GM_OPERATION_FUNCRESTRICT_CMD* pMsgCMD );
//
// // AccountDB로부터 받은 기능 제한 패킷을 통해 정보 설정
// static VOID Parse_MX_FUNCRESTRICT_RELOAD_ANS( sRESTRICT_MGR* pBLOCK, MSG_MX_FUNCRESTRICT_RELOAD_ANS* pMsgANS, BOOL bFromFile, BOOL bLogging = FALSE );
//
// // 파일로부터 기능제한을 읽어들이는 경우 처리루틴 : Parse_MX -> Make_GM -> SendToGameServer 루틴이 포함된다.
// static VOID Read_FUNCRESTRICT_FROM_FILE( sRESTRICT_MGR* pBLOCK, BOOL bLogging = FALSE );
// };
// //
// //
// //
//};
#else //__WAVERIX_FUNCTION_RESTRICT_EXTENDED__
struct sRESTRICT_MGR
{
#define DECL_RESTRICT_CONST_T static const DWORD
DECL_RESTRICT_CONST_T FUNCRESTRICT_DATABLOCK_LAST_CODE_ID = 25; //eFUNCTIONALRESTRICT_TYPE의 MAX의 Shift수치와 같아야 한다.
DECL_RESTRICT_CONST_T FUNCRESTRICT_DATABLOCK_UPPERBOUND = FUNCRESTRICT_DATABLOCK_LAST_CODE_ID+1;
//////////////////////////////////////////////////////////////////////////
// <FIELDs>
util::BitSetOperation<FUNCRESTRICT_DATABLOCK_UPPERBOUND> m_FunctionRestrictTable;
//////////////////////////////////////////////////////////////////////////
// <METHODs>
inline VOID Clear()
{
m_FunctionRestrictTable.ClearAll();
}
// <FUNCTION RESTRICT>
inline VOID FunctionAllow( eFUNCTIONALRESTRICT_TYPE functionType )
{
DWORD dwFunc = (DWORD)functionType;
if( FUNCRESTRICT_DATABLOCK_UPPERBOUND > dwFunc )
m_FunctionRestrictTable.Set( dwFunc );
}
inline VOID FunctionRestrict( eFUNCTIONALRESTRICT_TYPE functionType )
{
DWORD dwFunc = (DWORD)functionType;
if( FUNCRESTRICT_DATABLOCK_UPPERBOUND > dwFunc )
m_FunctionRestrictTable.UnSet( dwFunc );
}
inline BOOL IsFunctionAllowd( eFUNCTIONALRESTRICT_TYPE functionType )
{
DWORD dwFunc = (DWORD)functionType;
return m_FunctionRestrictTable.IsSet( dwFunc );
}
//
// Packet만들기 루틴 추가할 것.
struct MakePacket
{
// 게임서버로 보낼 정보 만들기
static VOID Make_GM_OPERATION_FUNCRESTRICT_CMD( sRESTRICT_MGR* pBLOCK, MSG_GM_OPERATION_FUNCRESTRICT_CMD* pMsgCMD );
// AccountDB로부터 받은 기능 제한 패킷을 통해 정보 설정
static VOID Parse_MX_FUNCRESTRICT_RELOAD_ANS( sRESTRICT_MGR* pBLOCK, MSG_MX_FUNCRESTRICT_RELOAD_ANS* pMsgANS, BOOL bFromFile, BOOL bLogging = FALSE );
// 파일로부터 기능제한을 읽어들이는 경우 처리루틴 : Parse_MX -> Make_GM -> SendToGameServer 루틴이 포함된다.
static VOID Read_FUNCRESTRICT_FROM_FILE( sRESTRICT_MGR* pBLOCK, BOOL bLogging = FALSE );
};
//
//
//
#undef DECL_RESTRICT_CONST_T
};
#endif //__WAVERIX_FUNCTION_RESTRICT_EXTENDED__