#include "stdafx.h" #include #include #include //================================================================================================= // MasterServer ±¸Á¶Ã¼ // - MasterServer¿¡¼­ »ç¿ëÇÏ´Â ±¸Á¶Ã¼ Á¤ÀÇ //================================================================================================= #ifndef __WAVERIX_FUNCTION_RESTRICT_EXTENDED__ //// °ÔÀÓ¼­¹ö·Î º¸³¾ Á¤º¸ ¸¸µé±â //VOID //sRESTRICT_MGR::MakePacket::Make_GM_OPERATION_FUNCRESTRICT_CMD( sRESTRICT_MGR* pBLOCK, MSG_GM_OPERATION_FUNCRESTRICT_CMD* pMsgCMD ) //{ // STRUCT_RESTRICT* pRESTRICT = pMsgCMD->SRESTRICT; // DWORD dwCount = 0; // // DWORD dwFunctions = pBLOCK->m_dwFuncRestrict; // // for( DWORD dwRestrictFunc=1 ; dwRestrictFuncdwFunc = dwRestrictFunc; // pRESTRICT->bAllow = FALSE; // ++pRESTRICT; // ++dwCount; // } // } // pMsgCMD->byRestrictNum = (BYTE)dwCount; //} // //// AccountDB·ÎºÎÅÍ ¹ÞÀº ±â´É Á¦ÇÑ ÆÐŶÀ» ÅëÇØ Á¤º¸ ¼³Á¤ //VOID //sRESTRICT_MGR::MakePacket::Parse_MX_FUNCRESTRICT_RELOAD_ANS( sRESTRICT_MGR* pBLOCK, MSG_MX_FUNCRESTRICT_RELOAD_ANS* pMsgANS, BOOL bLogging ) //{ // STRUCT_RESTRICT_MASTER* pRESTRICT = pMsgANS->sRestrict; // DWORD dwCount = pMsgANS->byRestrictNum; // // pBLOCK->m_dwFuncRestrict = sRESTRICT_MGR::mc_FUNCRESTRICT_DATABLOCK_ALLOWED_MASK ; // // for( DWORD i=0 ; ibAllow ) // { // DWORD dwFunctions = pRESTRICT->dwFunc - 1; // dwFunctions = 1< dwFunctions ) // pBLOCK->FunctionRestrict( (eFUNCTIONALRESTRICT_TYPE) dwFunctions ); // } // // if( bLogging ) // DB°ª¿¡ ÀÇÇϸé, 1ºÎÅÍ ½ÃÀ۵ǹǷΠ// MessageOut( eFULL_LOG, _T("FUNC_RESTRICT SET[%u][%u][%s]"), i+1, pRESTRICT->bAllow, pRESTRICT->ptszDesc ); // } //} // //// ÆÄÀϷκÎÅÍ ±â´ÉÁ¦ÇÑÀ» ÀоîµéÀÌ´Â °æ¿ì 󸮷çƾ : Parse_MX -> Make_GM -> SendToGameServer ·çƾÀÌ Æ÷ÇԵȴÙ. //VOID //sRESTRICT_MGR::MakePacket::Read_FUNCRESTRICT_FROM_FILE( sRESTRICT_MGR* pBLOCK, BOOL bLogging ) //{ // MSG_MX_FUNCRESTRICT_RELOAD_ANS msgINFOs; // STRUCT_RESTRICT_MASTER* pRESTRICT = msgINFOs.sRestrict; // DWORD dwCount = 0; // //#define READ_FROM_FILE_FUNC_RESTRICT(func, attribute) \ // { pRESTRICT->dwFunc = func; \ // __READ_CONFIG_NUMBER( pRESTRICT->bAllow, "FUNCTIONALRESTRICT", attribute, 1, MASTER_SERVER_INFO_FILE_NAME ); \ // memcpy( pRESTRICT->ptszDesc, attribute, sizeof(pRESTRICT->ptszDesc) ); \ // ++dwCount; \ // ++pRESTRICT; }; // // //READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_ALLOW , // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_ENCHANT , "FUNCTIONALRESTRICT_ENCHANT"); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_RANKUP , "FUNCTIONALRESTRICT_RANKUP" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_ADDSOCKET , "FUNCTIONALRESTRICT_ADDSOCKET" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_FILLSOCKET , "FUNCTIONALRESTRICT_FILLSOCKET" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_EXTRACTSOCKET , "FUNCTIONALRESTRICT_EXTRACTSOCKET" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_COMPOSE , "FUNCTIONALRESTRICT_COMPOSE" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_CRYSTALIZE , "FUNCTIONALRESTRICT_CRYSTALIZE" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_EXTRASTONE, "FUNCTIONALRESTRICT_USE_EXTRASTONE"); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_WAREHOUSE , "FUNCTIONALRESTRICT_USE_WAREHOUSE" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_TRADE , "FUNCTIONALRESTRICT_USE_TRADE" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_VENDOR , "FUNCTIONALRESTRICT_USE_VENDOR" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_GUILD , "FUNCTIONALRESTRICT_USE_GUILD" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_MONSTERDROP, "FUNCTIONALRESTRICT_USE_MONSTERDRO"); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_COMBINE_ITEM , "FUNCTIONALRESTRICT_COMBINE_ITEM" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_DIVIDE_ITEM , "FUNCTIONALRESTRICT_DIVIDE_ITEM" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_REPAIR_ITEM , "FUNCTIONALRESTRICT_REPAIR_ITEM"); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_SELL_ITEM , "FUNCTIONALRESTRICT_SELL_ITEM" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_BUY_ITEM , "FUNCTIONALRESTRICT_BUY_ITEM" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_EXCHANGE_ITEM , "FUNCTIONALRESTRICT_EXCHANGE_ITEM" ); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_VENDOR_LIST_NPC, "FUNCTIONALRESTRICT_VENDOR_LIST_NP"); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_BUY_SHOPITEM, "FUNCTIONALRESTRICT_BUY_SHOPITEM"); // READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_SHOP_SERVICE, "FUNCTIONALRESTRICT_SHOP_SERVICE"); // //eFUNCTIONALRESTRICT_ALL // // //READ_FROM_FILE_FUNC_RESTRICT( eRTTARESTRICT_NOTICE, "RTTARESTRICT_NOTICE" ); // //READ_FROM_FILE_FUNC_RESTRICT( eRTTARESTRICT_DROPUSER, "RTTARESTRICT_DROPUSER" ); // //READ_FROM_FILE_FUNC_RESTRICT( eRTTARESTRICT_USERCOUNT, "RTTARESTRICT_USERCOUNT" ); // //READ_FROM_FILE_FUNC_RESTRICT( eRTTARESTRICT_BATTLEZONEINFO, "RTTARESTRICT_BATTLEZONEINFO" ); // //READ_FROM_FILE_FUNC_RESTRICT( eRTTARESTRICT_ARMORKIT, "RTTARESTRICT_ARMORKIT" ); // //READ_FROM_FILE_FUNC_RESTRICT( eRTTARESTRICT_ABUSE, "RTTARESTRICT_ABUSE" ); // //READ_FROM_FILE_FUNC_RESTRICT( eRTTARESTRICT_USERMONEY, "RTTARESTRICT_USERMONEY" ); // //READ_FROM_FILE_FUNC_RESTRICT( eRTTARESTRICT_SERVERSHUTDOWN, "RTTARESTRICT_SERVERSHUTDOWN" ); // //READ_FROM_FILE_FUNC_RESTRICT( eRTTARESTRICT_USERDISCONN, "RTTARESTRICT_USERDISCONN" ); // //READ_FROM_FILE_FUNC_RESTRICT( eRTTARESTRICT_GMSCOMMAND, "RTTARESTRICT_GMSCOMMAND" ); // // msgINFOs.byRestrictNum = (BYTE)dwCount; // // Parse_MX_FUNCRESTRICT_RELOAD_ANS( pBLOCK, &msgINFOs, TRUE, TRUE ); //} ////////////////////////////////////////////////////////////////////////// #else //__WAVERIX_FUNCTION_RESTRICT_EXTENDED__ ////////////////////////////////////////////////////////////////////////// // °ÔÀÓ¼­¹ö·Î º¸³¾ Á¤º¸ ¸¸µé±â VOID sRESTRICT_MGR::MakePacket::Make_GM_OPERATION_FUNCRESTRICT_CMD( sRESTRICT_MGR* pBLOCK, MSG_GM_OPERATION_FUNCRESTRICT_CMD* pMsgCMD ) { STRUCT_RESTRICT* pRESTRICT = pMsgCMD->SRESTRICT; DWORD dwCount = 0; //DWORD dwFunctions = pBLOCK->m_dwFuncRestrict; for( DWORD dwRestrictFunc=0 ; dwRestrictFuncIsFunctionAllowd( (eFUNCTIONALRESTRICT_TYPE)dwRestrictFunc ) ); // ±ÝÁöµÈ °æ¿ì¸¸ Ãß°¡ÇÑ´Ù. if( !bAllowed ) { // bit °³¼ö ¿À¹öµÉ °æ¿ì¿¡ ´ëºñÇØ ³ªÁß¿¡´Â ¹øÈ£·Î ¹Ù²Ü...±î? pRESTRICT->dwFunc = (1<bAllow = FALSE; ++pRESTRICT; ++dwCount; } } pMsgCMD->byRestrictNum = (BYTE)dwCount; } static inline DWORD __FFS( DWORD dwVal ) { DWORD dwIdx; dwIdx = 31; if (dwVal & 0x0000FFFF) { dwIdx -= 16; dwVal <<= 16; } if (dwVal & 0x00FF0000) { dwIdx -= 8; dwVal <<= 8; } if (dwVal & 0x0F000000) { dwIdx -= 4; dwVal <<= 4; } if (dwVal & 0x30000000) { dwIdx -= 2; dwVal <<= 2; } if (dwVal & 0x40000000) { dwIdx -= 1; } return dwIdx; } // AccountDB·ÎºÎÅÍ ¹ÞÀº ±â´É Á¦ÇÑ ÆÐŶÀ» ÅëÇØ Á¤º¸ ¼³Á¤ VOID sRESTRICT_MGR::MakePacket::Parse_MX_FUNCRESTRICT_RELOAD_ANS( sRESTRICT_MGR* pBLOCK, MSG_MX_FUNCRESTRICT_RELOAD_ANS* pMsgANS, BOOL bFromFile, BOOL bLogging ) { STRUCT_RESTRICT_MASTER* pRESTRICT = pMsgANS->sRestrict; DWORD dwCount = pMsgANS->byRestrictNum; pBLOCK->Clear(); for( DWORD i=0 ; idwFunc : 1<<(pRESTRICT->dwFunc-1); if( pRESTRICT->bAllow ) { //if( !(FUNCRESTRICT_DATABLOCK_LAST_CODE_ID < dwFunctions) ) if( eFUNCTIONALRESTRICT_ALL & dwFunctions ) { DWORD dwIdx = __FFS( dwFunctions ); pBLOCK->FunctionAllow( (eFUNCTIONALRESTRICT_TYPE) dwIdx ); } else { MessageOut( eCRITICAL_LOG, _T("Invalid Function Restrict Code ID %u"), dwFunctions ); } } if( bLogging ) // DB°ª¿¡ ÀÇÇϸé, 1ºÎÅÍ ½ÃÀ۵ǹǷΠMessageOut( eFULL_LOG, _T("FUNC_RESTRICT SET[%u][%u][%s]"), dwFunctions, pRESTRICT->bAllow, pRESTRICT->ptszDesc ); } } // ÆÄÀϷκÎÅÍ ±â´ÉÁ¦ÇÑÀ» ÀоîµéÀÌ´Â °æ¿ì 󸮷çƾ : Parse_MX -> Make_GM -> SendToGameServer ·çƾÀÌ Æ÷ÇԵȴÙ. VOID sRESTRICT_MGR::MakePacket::Read_FUNCRESTRICT_FROM_FILE( sRESTRICT_MGR* pBLOCK, BOOL bLogging ) { MSG_MX_FUNCRESTRICT_RELOAD_ANS msgINFOs; STRUCT_RESTRICT_MASTER* pRESTRICT = msgINFOs.sRestrict; DWORD dwCount = 0; #define READ_FROM_FILE_FUNC_RESTRICT(func, attribute) \ { pRESTRICT->dwFunc = func; \ __READ_CONFIG_NUMBER( pRESTRICT->bAllow, "FUNCTIONALRESTRICT", attribute, 1, MASTER_SERVER_INFO_FILE_NAME ); \ memcpy( pRESTRICT->ptszDesc, attribute, sizeof(pRESTRICT->ptszDesc) ); \ ++dwCount; \ ++pRESTRICT; }; //READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_ALLOW , READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_ENCHANT , "FUNCTIONALRESTRICT_ENCHANT"); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_RANKUP , "FUNCTIONALRESTRICT_RANKUP" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_ADDSOCKET , "FUNCTIONALRESTRICT_ADDSOCKET" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_FILLSOCKET , "FUNCTIONALRESTRICT_FILLSOCKET" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_EXTRACTSOCKET , "FUNCTIONALRESTRICT_EXTRACTSOCKET" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_COMPOSE , "FUNCTIONALRESTRICT_COMPOSE" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_CRYSTALIZE , "FUNCTIONALRESTRICT_CRYSTALIZE" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_EXTRASTONE, "FUNCTIONALRESTRICT_USE_EXTRASTONE"); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_WAREHOUSE , "FUNCTIONALRESTRICT_USE_WAREHOUSE" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_TRADE , "FUNCTIONALRESTRICT_USE_TRADE" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_VENDOR , "FUNCTIONALRESTRICT_USE_VENDOR" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_GUILD , "FUNCTIONALRESTRICT_USE_GUILD" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_USE_MONSTERDROP, "FUNCTIONALRESTRICT_USE_MONSTERDRO"); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_COMBINE_ITEM , "FUNCTIONALRESTRICT_COMBINE_ITEM" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_DIVIDE_ITEM , "FUNCTIONALRESTRICT_DIVIDE_ITEM" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_REPAIR_ITEM , "FUNCTIONALRESTRICT_REPAIR_ITEM"); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_SELL_ITEM , "FUNCTIONALRESTRICT_SELL_ITEM" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_BUY_ITEM , "FUNCTIONALRESTRICT_BUY_ITEM" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_EXCHANGE_ITEM , "FUNCTIONALRESTRICT_EXCHANGE_ITEM" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_VENDOR_LIST_NPC, "FUNCTIONALRESTRICT_VENDOR_LIST_NP"); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_BUY_SHOPITEM, "FUNCTIONALRESTRICT_BUY_SHOPITEM"); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_SHOP_SERVICE, "FUNCTIONALRESTRICT_SHOP_SERVICE"); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_GM_COMMAND, "FUNCTIONALRESTRICT_GM_COMMAND"); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_PARTY_RETURN_FOR_UCUSER, "FUNCTIONALRESTRICT_PARTY_RETURN_FOR_UCUSER" ); READ_FROM_FILE_FUNC_RESTRICT( eFUNCTIONALRESTRICT_WAREINVEN_LOCK_BY_PWD, "FUNCTIONALRESTRICT_WAREINVEN_LOCK_BY_PWD" ); //eFUNCTIONALRESTRICT_ALL msgINFOs.byRestrictNum = (BYTE)dwCount; Parse_MX_FUNCRESTRICT_RELOAD_ANS( pBLOCK, &msgINFOs, TRUE, TRUE ); } #endif //__WAVERIX_FUNCTION_RESTRICT_EXTENDED__