#pragma once #ifndef DBPROXY_DOMINATION_MANAGER_H #define DBPROXY_DOMINATION_MANAGER_H //================================================================================================== // class DominationManager { public: enum {MAX_DOMINATIONINFOSET_TIME = 10*1000}; static DominationManager* Instance(); bool Update(); // µðºñ·ÎºÎÅÍ Á¡·ÉÀü Á¤º¸ ÀбⰡ ¿Ï·á µÇ¾ú´ÂÁö °Ë»çÇÑ´Ù. bool IsCompleteLoading() const; // Á¡·ÉÀü ½ºÅ©¸³Æ® ÀбⰡ ¿Ï·áµÇ¸é ½ºÅ©¸³Æ®·ÎºÎÅÍ ±âº»ÀûÀÎ Áö¿ª Á¤º¸¸¦ ¼³Á¤ÇÑ´Ù. void OnScriptsLoaded(); // Áö¿ª Á¤º¸ Àоî¿À±â¸¦ ¿Ï·á »óÅ·Π¼³Á¤ÇÑ´Ù. void SetCompleteLoadAreaInfo(); // Áö¿ª Á¤º¸¸¦ ÃʱâÈ­ÇÑ´Ù. void ClearAreaInfos(); // Áö¿ª Á¤º¸¸¦ ¼³Á¤ÇÑ´Ù. bool InsertAreaInfo(const DOMINATION_INFO& area_info); // °ÔÀÓ ¼­¹ö·Î Áö¿ª Á¤º¸¸¦ º¸³½´Ù. bool SendAreaInfo(GameServerSession* const game_server, const MAPCODE map_code) const; DOMINATION_INFO* FindDominationInfo(const MAPCODE map_code); // ÀÔÂû Á¤º¸¸¦ ÃʱâÈ­ÇÑ´Ù. bool ClearAuctions(const MAPCODE map_code); // ÀÔÂû Á¤º¸¸¦ »ðÀÔÇÑ´Ù. bool InsertAuction(const MAPCODE map_code, const DominationAuctionInfo& auction); // °ÔÀÓ ¼­¹ö·Î ÀÔÂû Á¤º¸¸¦ º¸³½´Ù. bool SendAuctions(GameServerSession* const game_server, const MAPCODE map_code) const; // ÀÔÂûÇÑ ÇÏÀÓÀ» µ¹·Á ¹Þ´Â ±æµå ¸¶½ºÅÍ ¸ñ·ÏÀ» ¸¸µç´Ù. bool SetListForReturnHeim( const MAPCODE map_code, DOMINATION_RETURNMONEY_INFO* OUT return_info, const int max_data, int& index_count) const; // ÀÔÂû Á¤º¸ Àоî¿À±â¸¦ ¿Ï·á »óÅ·Π¼³Á¤ÇÑ´Ù. bool SetCompleteLoadAuctions(const MAPCODE map_code); // ÀÔÂû Á¤º¸¸¦ »èÁ¦ÇÑ´Ù. bool DeleteAuction(const MAPCODE map_code, const GUILDGUID guild_guild); // Á¡·ÉÇÑ Áö¿ª °³¼ö¸¦ ¾ò´Â´Ù. WORD GetNumOfDominationArea(const GUILDGUID guild_guid) const; // Âü¿© Àοø Àоî¿À±â¸¦ ¿Ï·á »óÅ·Π¼³Á¤ÇÑ´Ù. bool SetCompleteLoadMembers(const MAPCODE map_code); // Âü¿© ÀοøÀ» ÃʱâÈ­ÇÑ´Ù. bool ClearMembers(const MAPCODE map_code); // Âü¿© ÀοøÀ» »ðÀÔÇÑ´Ù. bool InsertMember(const MAPCODE map_code, const DominationMemberInfo& member); // Âü¿© ÀοøÀ» »èÁ¦ÇÑ´Ù. bool DeleteMember(const MAPCODE map_code, const CHARGUID member_guid); // °ÔÀÓ ¼­¹ö·Î Âü¿© Àοø Á¤º¸¸¦ º¸³½´Ù. bool SendMembers(GameServerSession* const game_server, const MAPCODE map_code) const; #ifdef _NA_003923_20120130_GUILD_RENEWAL void DominationInGameGuildLog( DOMINATION_INFO update_info, eDOMINATION_EVENT_TYPE event_type ); #endif private: DominationManager(); ~DominationManager(); static DominationManager* CreateInstance(); enum eServiceMode { eServiceMode_None = 0x00, eServiceMode_Instanced = 0x01, // instanced, eServiceMode_ScriptLoaded = 0x02, // need the mode control if scripts receive from SolarAuth eServiceMode_AreaInfoLoaded = 0x04, eServiceMode_AuctionInfoLoaded = 0x08, eServiceMode_MemberInfoLoaded = 0x10, eServiceMode_InformationLoading = 0x80, // db transaction // eServiceMode_Loaded = eServiceMode_Instanced | eServiceMode_ScriptLoaded | eServiceMode_AreaInfoLoaded | eServiceMode_AuctionInfoLoaded //_NA_20110406_CHANGE_RULE_FOR_DOMINATION_JOIN | eServiceMode_MemberInfoLoaded }; eServiceMode service_mode_; // Á¡·ÉÀü ÅëÇÕ Á¤º¸ struct Domination { #ifdef _CH_20100420_CHANGE_DOMINATION_APPLY_WAY typedef STLX_HASH_MAP AuctionList; #else typedef STLX_MULTIMAP AuctionList; #endif typedef STLX_HASH_MAP MemberList; MAPCODE field_code; DOMINATION_INFO area_info; // Áö¿ª Á¤º¸ AuctionList auctions; // ÀÔÂû Á¤º¸ MemberList members; // Âü¿© Àοø Á¤º¸ bool is_load_area_info; // Áö¿ª Á¤º¸ ÀÐ±â ¿Ï·á ¿©ºÎ bool is_load_auctions; // ÀÔÂû Á¤º¸ ÀÐ±â ¿Ï·á ¿©ºÎ bool is_load_members; // Âü¿© Àοø Á¤º¸ ÀÐ±â ¿Ï·á ¿©ºÎ Domination() : field_code(0), is_load_area_info(false), is_load_auctions(false), is_load_members(false) { ::ZeroMemory(&area_info, sizeof(area_info)); } void ClearAreaInfo(); void ClearAuctions(); void ClearMembers(); }; typedef STLX_HASH_MAP DominationMap; DominationMap domination_map_; #ifdef _NA_007128_20140326_MONDSCHIEN_DOMINATION public: // DB¿¡ ´ë·ú ¿µÁÖ Á¤º¸ °»½Å¸¦ ¿äûÇÑ´Ù. void UpdateContinentLordInfo(const bool send_game_server = false); // °ÔÀÓ ¼­¹ö·Î ´ë·ú ¿µÁÖ Á¤º¸¸¦ º¸³½´Ù. bool SendDominationContinentLordInfo(const MAPCODE map_code); // ´ë·úÀÇ ¿µÁÖ Á¤º¸¸¦ ÀúÀåÇÑ´Ù. void SetDominationContinentLordInfo(const sDOMINATION_CONTINENT_LORD_INFO lord_info); // ´ë·úÀÇ ¿µÁÖ Á¤º¸¸¦ ¾ò¾î¿Â´Ù. const sDOMINATION_CONTINENT_LORD_INFO* GetDominationContinentLordInfo(int continent) const; private: //´ë·úÀÇ ´ë¿µÁÖÀÇ Á¤º¸¸¦ ÀúÀåÇÑ´Ù.<´ë·ú¹øÈ£, ·ÎµåÁ¤º¸> typedef STLX_MULTIMAP ContinentLordInfos; ContinentLordInfos continent_lord_infos_; #endif //_NA_007128_20140326_MONDSCHIEN_DOMINATION // last order... static DominationManager* instance_static_; // __DISABLE_COPY(DominationManager); }; //================================================================================================== inline DominationManager* DominationManager::Instance() { if (instance_static_ != NULL) { return instance_static_; } return CreateInstance(); } // control interfaces inline bool DominationManager::IsCompleteLoading() const { return (service_mode_ == eServiceMode_Loaded); } // inline void DominationManager::Domination::ClearAreaInfo() { ::ZeroMemory(&area_info, sizeof(area_info)); area_info.m_FieldCode = field_code; area_info.m_TotalPoint = DOMINATION_DEFFENSWALL_POINT; is_load_area_info = false; } inline void DominationManager::Domination::ClearAuctions() { auctions.clear(); is_load_auctions = false; } inline void DominationManager::Domination::ClearMembers() { members.clear(); is_load_members = false; } #endif //DBPROXY_DOMINATION_MANAGER_H