#pragma once #include #include #include ////////////////////////////////////////////////////////////////////////// #include #include #include #include #include "ZoneManager.h" #include "Village.h" #include "CHuntingRoom.h" #include "HuntingField.h" #include "HuntingRoom.h" #include "MissionRoom.h" #include "LobbyRoom.h" #include "PVPRoom.h" #include "CharSelect.h" #include "InstanceDungeon.h" #include "DungeonTopOfTrial.h" #include "DungeonSSQ.h" #include "DominationField.h" // _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND #include "DungeonChaosZone.h" #ifdef _NA_008069_20150210_ADD_SPA_SYSTEM #include "SpaField.h" #endif //_NA_008069_20150210_ADD_SPA_SYSTEM //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // template< eZONETYPE _ZTYPE, typename _TYPE, DWORD _InitPool, DWORD _AddinPool > struct zone_exinfo : zone_info< _ZTYPE, _TYPE > { static const DWORD size_init_pool = _InitPool; static const DWORD size_addin_pool = _AddinPool; }; template< eINSTANCE_DUNGEON_KIND _ZTYPE, typename _TYPE, DWORD _InitPool, DWORD _AddinPool > struct indun_exinfo : public zone_exinfo< eZONETYPE_MAX, _TYPE, _InitPool, _AddinPool > { static const eINSTANCE_DUNGEON_KIND value = _ZTYPE; }; ////////////////////////////////////////////////////////////////////////// // Hard-coding for intelli-sense typedef zone_exinfo LobbyRoom_Info; typedef zone_exinfo Village_Info; typedef zone_exinfo CharSelect_Info; typedef zone_exinfo MissionRoom_Info; typedef zone_exinfo HuntingRoom_Info; typedef zone_exinfo PVPRoom_Info; typedef zone_exinfo HuntingField_Info; typedef zone_exinfo DominationField_Info; typedef zone_exinfo CHuntingRoom_Info; #ifdef _NA_008069_20150210_ADD_SPA_SYSTEM typedef zone_exinfo SpaField_Info; #endif //_NA_008069_20150210_ADD_SPA_SYSTEM // temporary type register typedef zone_exinfo InstanceDungeon_Info; typedef indun_exinfo DungeonTopOfTrial_Info; typedef indun_exinfo DungeonSSQ_Info; typedef indun_exinfo Milestone100LevelQuest_Info; // _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND typedef indun_exinfo DungeonChaosZone_Info; //#define REG_ZONE_NODE(_typeinfo) //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // Instance DungeonÀº ¿©±â¿¡ Ãß°¡ÇÏÁö ¸» °Í. #ifdef _NA_008069_20150210_ADD_SPA_SYSTEM #define REG_ZONE_LIST() \ REG_ZONE_NODE(LobbyRoom_Info) \ REG_ZONE_NODE(Village_Info ) \ REG_ZONE_NODE(CharSelect_Info) \ REG_ZONE_NODE(MissionRoom_Info) \ REG_ZONE_NODE(HuntingRoom_Info) \ REG_ZONE_NODE(PVPRoom_Info ) \ REG_ZONE_NODE(HuntingField_Info) \ REG_ZONE_NODE(DominationField_Info) \ REG_ZONE_NODE(CHuntingRoom_Info) \ REG_ZONE_NODE(SpaField_Info) #else #define REG_ZONE_LIST() \ REG_ZONE_NODE(LobbyRoom_Info) \ REG_ZONE_NODE(Village_Info ) \ REG_ZONE_NODE(CharSelect_Info) \ REG_ZONE_NODE(MissionRoom_Info) \ REG_ZONE_NODE(HuntingRoom_Info) \ REG_ZONE_NODE(PVPRoom_Info ) \ REG_ZONE_NODE(HuntingField_Info) \ REG_ZONE_NODE(DominationField_Info) \ REG_ZONE_NODE(CHuntingRoom_Info) #endif //_NA_008069_20150210_ADD_SPA_SYSTEM // Instance DungeonÀº ¿©±â¿¡ Ãß°¡ÇÒ °Í // _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND #define REG_INDUN_LIST() \ REG_ZONE_NODE(DungeonTopOfTrial_Info) \ REG_ZONE_NODE(DungeonSSQ_Info) \ REG_ZONE_NODE(Milestone100LevelQuest_Info) \ REG_ZONE_NODE(DungeonChaosZone_Info) //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // - ZoneCommon.h¿¡ Á¸ÀçÇÏ´Â MOVE_ZONE_CONTROL_LIST()¿¡ µîÀçµÈ ¸ñ·ÏÀ» ±¸ÇöÇÑ´Ù. // - À̵¿ Á¶°Ç °Ë»ç ÇÊ´õµé... const RoomArgument& RoomArgument::GetEmpty() { static RoomArgument emptyArgument; return emptyArgument; } //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // CheckMoveZonePolicyArgs::CheckMoveZonePolicyArgs() : pUser(0) , FromZoneType(eZONETYPE_MAX) , ToZoneType(eZONETYPE_MAX) , FromZoneKey(0) , ToZoneKey(0) , FromZonePtr(0) , ToZonePtr(0) , FromZoneTypeByObj(eZONETYPE_MAX) , ToZoneTypeByObj(eZONETYPE_MAX) { } CheckMoveZonePolicyArgs::CheckMoveZonePolicyArgs( User* const _pUser, const eZONETYPE _FromZoneType, const eZONETYPE _ToZoneType, const KEYTYPE _FromZoneKey, const KEYTYPE _ToZoneKey, ZoneInterface* const _FromZonePtr, // FromKey¿¡ ´ëÇÑ Zone ZoneInterface* const _ToZonePtr, // ToKey¿¡ ´ëÇÑ Zone const eZONETYPE _FromZoneTypeByObj, // FromZoneÀÇ ½ÇÁ¦ ŸÀÔ const eZONETYPE _ToZoneTypeByObj) // ToZoneÀÇ ½ÇÁ¦ ŸÀÔ : pUser(_pUser) , FromZoneType(_FromZoneType) , ToZoneType(_ToZoneType) , FromZoneKey(_FromZoneKey) , ToZoneKey(_ToZoneKey) , FromZonePtr(_FromZonePtr) , ToZonePtr(_ToZonePtr) , FromZoneTypeByObj(_FromZoneTypeByObj) , ToZoneTypeByObj(_ToZoneTypeByObj) { } //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ template<> class CheckMoveZonePolicy_Impl : public CheckMoveZonePolicy { private: static const eMOVE_ZONE_TYPE_FILTER movetype = MZTF_CHECK_SKIP; public: virtual RC::eROOM_RESULT EnableCheck() { // Ưº°ÇÑ Á¦¾àÀÌ ¾ø´Â °æ¿ì Ű·Î ãÀº Æ÷ÀÎÅ͸¸ °ËÁõÇϰí 󸮸¦ ¼öÇàÇÑ´Ù. return ValidCheck() ? RC::RC_ROOM_SUCCESS : RC::RC_ROOM_NOT_EXIST_ROOM; } }; //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ template<> class CheckMoveZonePolicy_Impl : public CheckMoveZonePolicy { private: static const eMOVE_ZONE_TYPE_FILTER movetype = MZTF_STATIC_TO_STATIC; public: virtual RC::eROOM_RESULT EnableCheck() { // (NOTE) - À̵¿ÇüÅ : FIELD<->FIELD, FIELD<->VILLAGE (Æ©Å丮¾ó Æ÷ÇÔ) // MapEnterencePortal°ú °°Àº °ËÁõÀÌ ÀÖ¾î¾ßÁö¸¸ ã¾ÆÁö´Â ¹®Á¦°¡ ÀÖ±º¿ä. // »ý°¢º¸´Ù ÀϹÝÈ­ ¾î·Æ³ß... À½... // _NA_008069_20150210_ADD_SPA_SYSTEM const DWORD GO_ACCEPT_MASK = (1<FromZoneType)); bMoveAccept = bMoveAccept && (GO_ACCEPT_MASK & (1 << Args->ToZoneType)); return bMoveAccept ? RC::RC_ROOM_SUCCESS : RC::RC_ROOM_NOT_EXIST_ROOM; } }; //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ template<> class CheckMoveZonePolicy_Impl : public CheckMoveZonePolicy { private: static const eMOVE_ZONE_TYPE_FILTER movetype = MZTF_ROOM_TO_STATIC; public: virtual RC::eROOM_RESULT EnableCheck() { // (NOTE) - °¢Á¾ ROOM->VILLAGE+FIELD+TUTORIAL if(!ValidCheck()) return RC::RC_ROOM_NOT_EXIST_ROOM; // Æ®¸®°Å¿¡ ÀÇÇØ º¹±ÍÇÏ´Â °æ¿ì RoomTypeÀº Mission|Instance°¡ ÇØ´çµÈ´Ù. if(Args->ToZoneType != Args->ToZonePtr->GetType()) return RC::RC_ROOM_NOT_EXIST_ROOM; const eZONETYPE ptrZoneType = Args->FromZonePtr->GetType(); if(Args->FromZoneType != ptrZoneType && // Æ®¸®°Å¿¡ ÀÇÇÑ °æ¿ì ¿¹¿Ü ó¸® !(ptrZoneType == eZONETYPE_INSTANCE && Args->FromZoneType == eZONETYPE_MISSION)) return RC::RC_ROOM_NOT_EXIST_ROOM; switch(Args->FromZoneType) { case eZONETYPE_HUNTING: case eZONETYPE_CHUNTING: case eZONETYPE_MISSION: case eZONETYPE_INSTANCE: case eZONETYPE_PVP: break; default: return RC::RC_ROOM_NOT_EXIST_ROOM; } // (WAVERIX) (081021) (BUG-FIX) 'Ÿ¶ôÇÑ »ç¿ø'¿¡¼­ 'HUNTING_FIELD'·Î º¹±Í ¾ÈµÇ´Â ¹®Á¦ ¼öÁ¤ // - °Ë»çÁ¶°Ç º¯°æ: FromZoneType --> FromZoneTypeByObj switch(Args->ToZoneTypeByObj) { case eZONETYPE_DOMINATION_FIELD: case eZONETYPE_FIELD: if(!(eZONETYPE_INSTANCE == Args->FromZoneTypeByObj || eZONETYPE_MISSION == Args->FromZoneTypeByObj)) return RC::RC_ROOM_NOT_EXIST_ROOM; break; case eZONETYPE_TUTORIAL_FIELD: // Àúž¿¡¼­ ¿¡¼Òµå¸¶À»·Î º¹±ÍÇÒ ¼ö ¾ø´Â Çö»ó ¼öÁ¤(ÀϺ»Àº ¿¡¼Òµå¸¶À»¿¡¼­ ¹èƲÁ¸Ã¢ ¿­±â °¡´É) //if(eZONETYPE_MISSION != Args->FromZoneTypeByObj) // return RC::RC_ROOM_NOT_EXIST_ROOM; break; case eZONETYPE_VILLAGE: break; #ifdef _NA_006174_20121015_MOVE_ZONE_POLICY_AIRSHIP_FIELD_ADD case eZONETYPE_AIRSHIP_FIELD: break; #endif // _NA_006174_20121015_MOVE_ZONE_POLICY_AIRSHIP_FIELD_ADD //_NA_008069_20150210_ADD_SPA_SYSTEM case eZONETYPE_SPA_FIELD: return RC::RC_ROOM_NOT_EXIST_ROOM; default: return RC::RC_ROOM_NOT_EXIST_ROOM; } return RC::RC_ROOM_SUCCESS; } }; //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ template<> class CheckMoveZonePolicy_Impl : public CheckMoveZonePolicy { private: static const eMOVE_ZONE_TYPE_FILTER movetype = MZTF_VILLAGE_TO_LOBBY; public: virtual RC::eROOM_RESULT EnableCheck() { // (NOTE) - field¿¡¼­ lobby·Î À̵¿µµ °¡´É (TUTORIAL_FIELD) // - ÀÏ´Ü ¸ðµç STATIC(VILLAGE+FIELD)¿¡¼­ À̵¿ °¡´ÉÇÏ°Ô µÇ¾ú´Ù. if(!ValidCheck()) return RC::RC_ROOM_NOT_EXIST_ROOM; if(Args->ToZoneType == Args->ToZonePtr->GetType()) { // ToZoneTypeByObj ... À̰ÍÀº Æò°¡ ¾Ö¸Å... if(Args->FromZoneType == Args->FromZoneTypeByObj) return RC::RC_ROOM_SUCCESS; if(Args->FromZoneType == eZONETYPE_FIELD) return RC::RC_ROOM_SUCCESS; if(Args->FromZoneTypeByObj == eZONETYPE_TUTORIAL_FIELD) return RC::RC_ROOM_SUCCESS; else if(Args->FromZoneTypeByObj == eZONETYPE_DOMINATION_FIELD) return RC::RC_ROOM_SUCCESS; else if(Args->FromZoneTypeByObj == eZONETYPE_SPA_FIELD) { //_NA_008069_20150210_ADD_SPA_SYSTEM // ¿Âõ¿¡¼­´Â ·Îºñ·Î À̵¿ÇÒ ¼ö ¾ø´Ù return RC::RC_ROOM_NOT_EXIST_ROOM; } } return RC::RC_ROOM_NOT_EXIST_ROOM; } }; //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ template<> class CheckMoveZonePolicy_Impl : public CheckMoveZonePolicy { private: static const eMOVE_ZONE_TYPE_FILTER movetype = MZTF_LOBBY_TO_VILLAGE; public: virtual RC::eROOM_RESULT EnableCheck() { // (NOTE) - LOBBY¿¡¼­ FIELD·Î À̵¿µµ °¡´É (TUTORIAL_FIELD) // - (Exception) // - LOBBYÀÇ GetMapCode´Â ½ÇÁ¦ °¡·Á´Â ROOMÀÇ MapCode¸¦ º¸À¯Çϰí ÀÖ´Ù. // - ¾Æ¸¶ ¿©±â¼­ ¹®Á¦°¡ ¹ß»ýÇÏ´Â °ÍÀÏ ÅÍ... if(!ValidCheck()) return RC::RC_ROOM_NOT_EXIST_ROOM; if(Args->FromZoneType == Args->FromZonePtr->GetType()) { // FromZoneTypeByObj ... À̰ÍÀº Æò°¡ ¾Ö¸Å... if(Args->ToZoneType == Args->ToZoneTypeByObj) return RC::RC_ROOM_SUCCESS; if(Args->ToZoneType == eZONETYPE_FIELD) return RC::RC_ROOM_SUCCESS; //if(ToZoneTypeByObj == eZONETYPE_TUTORIAL_FIELD) // return RC::RC_ROOM_SUCCESS; if(Args->ToZoneType == eZONETYPE_FIELD) return RC::RC_ROOM_SUCCESS; } return RC::RC_ROOM_NOT_EXIST_ROOM; } }; //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ template<> class CheckMoveZonePolicy_Impl : public CheckMoveZonePolicy { private: static const eMOVE_ZONE_TYPE_FILTER movetype = MZTF_VILLAGE_TO_HUNTING; public: virtual RC::eROOM_RESULT EnableCheck() { // (NOTE) - ¸¶À»¿¡¼­ ¹Ù·Î HUNTING¿¡ Âü°¡ if(!ValidCheck()) return RC::RC_ROOM_NOT_EXIST_ROOM; if(eZONETYPE_VILLAGE == Args->FromZoneType && eZONETYPE_HUNTING == Args->ToZoneType) return RC::RC_ROOM_SUCCESS; return RC::RC_ROOM_NOT_EXIST_ROOM; } }; //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ template<> class CheckMoveZonePolicy_Impl : public CheckMoveZonePolicy { private: static const eMOVE_ZONE_TYPE_FILTER movetype = MZTF_ROOM_TO_LOBBY; public: virtual RC::eROOM_RESULT EnableCheck() { // (NOTE) - RELAY MISSION if(!ValidCheck()) return RC::RC_ROOM_NOT_EXIST_ROOM; if(eZONETYPE_MISSION == Args->FromZonePtr->GetType() && eZONETYPE_LOBBY == Args->ToZonePtr->GetType()) { return RC::RC_ROOM_SUCCESS; } return RC::RC_ROOM_NOT_EXIST_ROOM; } }; //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ template<> class CheckMoveZonePolicy_Impl : public CheckMoveZonePolicy { private: static const eMOVE_ZONE_TYPE_FILTER movetype = MZTF_CHUNTING_TO_VILLAGE; public: virtual RC::eROOM_RESULT EnableCheck() { // (NOTE) - CHUNTING->VILLAGE if(!ValidCheck()) return RC::RC_ROOM_NOT_EXIST_ROOM; if(eZONETYPE_CHUNTING == Args->FromZonePtr->GetType() && eZONETYPE_VILLAGE == Args->ToZonePtr->GetType()) { return RC::RC_ROOM_SUCCESS; } return RC::RC_ROOM_NOT_EXIST_ROOM; } }; //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ template<> class CheckMoveZonePolicy_Impl : public CheckMoveZonePolicy { private: static const eMOVE_ZONE_TYPE_FILTER movetype = MZTF_HUNTING_TO_HUNTING; public: virtual RC::eROOM_RESULT EnableCheck() { // (NOTE) - CHUNTING->VILLAGE if(!ValidCheck()) return RC::RC_ROOM_NOT_EXIST_ROOM; if(eZONETYPE_HUNTING == Args->FromZonePtr->GetType() && eZONETYPE_HUNTING == Args->ToZonePtr->GetType()) { return RC::RC_ROOM_SUCCESS; } return RC::RC_ROOM_NOT_EXIST_ROOM; } }; //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ template<> class CheckMoveZonePolicy_Impl : public CheckMoveZonePolicy { private: static const eMOVE_ZONE_TYPE_FILTER movetype = MZTF_STATIC_TO_ROOM; public: virtual RC::eROOM_RESULT EnableCheck() { // (090215) (NOTE) Æ÷Å» »ý¼ºÈÄ ÀÔÀåÇÏ´Â À¯Àú¿ë if(!ValidCheck()) return RC::RC_ROOM_NOT_EXIST_ROOM; switch(Args->FromZoneType) { case eZONETYPE_VILLAGE: case eZONETYPE_DOMINATION_FIELD: case eZONETYPE_FIELD: break; //_NA_008069_20150210_ADD_SPA_SYSTEM case eZONETYPE_SPA_FIELD: return RC::RC_ROOM_NOT_EXIST_ROOM; default: return RC::RC_ROOM_NOT_EXIST_ROOM; } switch(Args->ToZoneType) { case eZONETYPE_MISSION: case eZONETYPE_INSTANCE: break; default: return RC::RC_ROOM_INVALID_ROOM_TYPE; } const sMAPINFO* pMapInfo = Args->ToZonePtr->GetMapInfo(); //const sMAPINFO* pMapInfo = // MapInfoParser::Instance()->FindMapInfo(Args->ToZonePtr->GetMapCode()); assert(pMapInfo); if(Args->ToZoneType == eZONETYPE_MISSION) CheckMission(pMapInfo); if(Args->ToZoneType == eZONETYPE_INSTANCE) CheckInstanceDungeon(pMapInfo); return RC::RC_ROOM_SUCCESS; } RC::eROOM_RESULT CheckMission(const sMAPINFO* pMapInfo) { __UNUSED(pMapInfo); // CharacterÀÇ ±âº» Á¦¾à Á¶°Ç(¼±Çà ¹Ì¼Ç, ¼±Çà Äù½ºÆ® µîµî)Àº GameServer¿¡¼­ °Ë»çµÈ »óÅ RC::eROOM_RESULT result = RC::RC_ROOM_SUCCESS; result = Args->ToZonePtr->CanJoin(Args->pUser, eZONEPUBLIC_PUBLIC, ""); return result; } RC::eROOM_RESULT CheckInstanceDungeon(const sMAPINFO* pMapInfo) { __UNUSED(pMapInfo); RC::eROOM_RESULT result = RC::RC_ROOM_SUCCESS; result = Args->ToZonePtr->CanJoin(Args->pUser, eZONEPUBLIC_PUBLIC, ""); return result; } }; //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ template<> class CheckMoveZonePolicy_Impl : public CheckMoveZonePolicy { private: static const eMOVE_ZONE_TYPE_FILTER movetype = MZTF_STATIC_TO_ROOM_FOR_UCUSER; public: virtual RC::eROOM_RESULT EnableCheck() { // (NOTE) - ºñÁ¤»ó Á¾·áÈÄ º¹±Í ¿äû½Ã 󸮵Ǵ ·çƾ if(!ValidCheck()) return RC::RC_ROOM_NOT_EXIST_ROOM; switch(Args->FromZoneType) { case eZONETYPE_VILLAGE: case eZONETYPE_DOMINATION_FIELD: case eZONETYPE_FIELD: break; //_NA_008069_20150210_ADD_SPA_SYSTEM case eZONETYPE_SPA_FIELD: return RC::RC_ROOM_NOT_EXIST_ROOM; default: return RC::RC_ROOM_NOT_EXIST_ROOM; } switch(Args->ToZoneType) { case eZONETYPE_MISSION: case eZONETYPE_INSTANCE: break; default: return RC::RC_ROOM_NOT_EXIST_ROOM; } return RC::RC_ROOM_SUCCESS; } }; //¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ // #define MOVE_ZONE_CTRL_NODE_NAME(mztf) sCheckMoveZonePolicy_##mztf //#define MOVE_ZONE_CTRL_NODE(eMOVE_ZONE_TYPE_FILTER) #undef MOVE_ZONE_CTRL_NODE #define MOVE_ZONE_CTRL_NODE(mztf) \ static CheckMoveZonePolicy_Impl MOVE_ZONE_CTRL_NODE_NAME(mztf); MOVE_ZONE_CONTROL_LIST(); // declare module variables //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ VOID CheckMoveZonePolicy::_Clear() { //m_pImpl = NULL; //USER.Set(NULL); //FromZoneType.Set(eZONETYPE_MAX); //ToZoneType.Set(eZONETYPE_MAX); //FromZoneKey.Set(0); //ToZoneKey.Set(0); //FromZonePtr.Set(NULL); //ToZonePtr.Set(NULL); //FromZoneTypeByObj.Set(eZONETYPE_MAX); //ToZoneTypeByObj.Set(eZONETYPE_MAX); } CheckMoveZonePolicy* CheckMoveZonePolicy::_AlignInfo(const eMOVE_ZONE_TYPE_FILTER moveType, User* const pUser, const eZONETYPE fromZoneType, const eZONETYPE toZoneType, const KEYTYPE fromZoneKey, const KEYTYPE toZoneKey) { if(!pUser) return NULL; switch(moveType) { #undef MOVE_ZONE_CTRL_NODE #define MOVE_ZONE_CTRL_NODE(mztf) \ case (mztf): break; MOVE_ZONE_CONTROL_LIST(); // case list default: SUNLOG(eCRITICAL_LOG, _T("[%s] Unhandled Check Type"), __FUNCTION__); return NULL; }; CheckMoveZonePolicy* pInstance = NULL; ZoneInterface* const pFromZone = g_ZoneManager.FindZone(fromZoneKey); ZoneInterface* const pToZone = g_ZoneManager.FindZone(toZoneKey); // (WAVERIX) (090601) (BUG-FIX) GameServerÀÇ ÀÀ´äÀ» ¹Þ¾Æ À̵¿Ã³¸®¸¦ ÇÏ´Â °æ¿ì, (case Lobby) // pFromZone, pToZoneÀº nullÀÏ ¼ö ÀÖ´Ù. const sMAPINFO* pFromMapInfo = pFromZone ? pFromZone->GetMapInfo() : 0; eZONETYPE fromZoneTypeByObj = pFromMapInfo ? (eZONETYPE)pFromMapInfo->byMKind : eZONETYPE_MAX; const sMAPINFO* pToMapInfo = pToZone ? pToZone->GetMapInfo() : 0; eZONETYPE toZoneTypeByObj = pToMapInfo ? (eZONETYPE)pToMapInfo->byMKind : eZONETYPE_MAX; switch(moveType) { #undef MOVE_ZONE_CTRL_NODE #define MOVE_ZONE_CTRL_NODE(mztf) \ case (mztf): \ pInstance = &MOVE_ZONE_CTRL_NODE_NAME(mztf); \ new (pInstance->Args) CheckMoveZonePolicyArgs \ (pUser \ , fromZoneType, toZoneType, fromZoneKey, toZoneKey \ , pFromZone, pToZone \ , fromZoneTypeByObj, toZoneTypeByObj); \ break; MOVE_ZONE_CONTROL_LIST(); // case list }; pInstance->m_pImpl = pInstance; return pInstance; } ////////////////////////////////////////////////////////////////////////// // ZoneKeyStreamAddin::ZoneKeyStreamAddin(ZoneInterface* const pInterface) { ZoneType = pInterface->GetType(); switch(ZoneType) { case eZONETYPE_LOBBY : case eZONETYPE_VILLAGE : case eZONETYPE_CHARSELECT : case eZONETYPE_MISSION : case eZONETYPE_HUNTING : //case eZONETYPE_QUEST : case eZONETYPE_PVP : //case eZONETYPE_EVENT : //case eZONETYPE_GUILD : //case eZONETYPE_SIEGE : case eZONETYPE_FIELD : case eZONETYPE_DOMINATION_FIELD: case eZONETYPE_CHUNTING : case eZONETYPE_TUTORIAL_FIELD: case eZONETYPE_INSTANCE : //_NA_008069_20150210_ADD_SPA_SYSTEM case eZONETYPE_SPA_FIELD: break; default: SUNLOG(eCRITICAL_LOG, "Invalid Zone Type [%u]", ZoneType); ZoneType = eZONETYPE_MAX; break; } ZoneSubType = INDUN_KIND_MAX; if(eZONETYPE_INSTANCE == ZoneType) { BOOST_STATIC_ASSERT(INDUN_KIND_MAX == 7); // Ãß°¡ ŸÀÔ Á¸Àç½Ã ÇÏ´Ü ³»¿ë Ãß°¡ÇÒ °Í InstanceDungeon* const pIndun = InstanceDungeon_Info::downcast(pInterface); ZoneSubType = (WORD)pIndun->GetDungeonType(); switch(pIndun->GetDungeonType()) { case INDUN_KIND_TOP_OF_TRIAL: case INDUN_KIND_100LEVEL_QUEST: // 100·¹º§ üÀÎÁö¾÷, ÀÌÈÄ ÀϹÝÀûÀÎ Äù½ºÆ® ¸ÊÀ¸·Î Ȱ¿ë °¡´É case INDUN_KIND_SS_QUEST: // Ÿ¶ôÇÑ »ç¿ø case INDUN_KIND_EXT_03: case INDUN_KIND_EXT_04: case INDUN_KIND_MAYA_SCROLL: // _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND case INDUN_KIND_CHAOS_ZONE: break; default: SUNLOG(eCRITICAL_LOG, "Invalid Zone Sub Type [%u]", ZoneSubType); ZoneSubType = INDUN_KIND_MAX; break; } } }