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

216 lines
6.1 KiB
C++

#pragma once
#include <Singleton.h>
#include "DominationInfoParser.h"
#include <Guild/GuildCommon.h>
typedef DominationInfoParser::DOMINATION_SCRIPT_INFO_MAP ScriptInfoMap;
typedef DominationInfoParser::DOMINATION_SCRIPT_INFO_ITR ScriptInfoIterator;
class DominationManager : public util::Singleton<DominationManager>
{
public:
enum {MAX_DOMINATIONINFOSET_TIME = 10*1000};
enum DominationLoadingStatus
{
DOMINATION_INFO_EMPTY, //점령전 데이터가 비어있다.
DOMINATION_INFO_LOADING, //점령전 데이터 로딩중이다.
DOMINATION_INFO_SUCCESS, //점령전 데이터 로딩이 성공했다.
};
DominationManager();
~DominationManager();
//특정시간 마다 점령전 정보를 업데이트 한다.
void LoadDominationInfo();
//로드되지 못한 지역 정보 요청
void RequestDominationAuctionInfo();
//지역 점령 기본 정보를 넣는다.
void InsertDominationInfo(const DOMINATION_INFO& domination_info);
//지역 점령전 정보를 게임 서버로 보낸다.
void SendDominationInfo(GameServerSession* server_session, MAPCODE map_code);
//지역 점령전 정보의 포인터를 리턴한다.
DOMINATION_INFO* FindDominationInfo(MAPCODE map_code);
//지역 점령 경매 기본 정보를 Map에 세팅
bool InsertActionInfo(MAPCODE map_code, const DominationAuctionInfo& domination_info);
//지역 점령 경매 정보 send to GameServer
void SendActionList(GameServerSession* server_session, MAPCODE map_code);
//지역 점령전 경매 정보를 지운다.
void ClearDominationActionInfo(MAPCODE map_code);
//경매 하임을 돌려 받는 길드 마스터 리스트 만들기.
bool SetListForReturnHeim(MAPCODE map_code, DOMINATION_RETURNMONEY_INFO* OUT return_info,
DWORD max_data, INT& index_count);
//지역별 경매 정보 로드 성공시 체크
void SetCheckActionInfo(MAPCODE map_code);
//경매 정보 리스트에서 해당 CharGuid정보를 삭제
bool DeleteActionList(MAPCODE map_code, GUILDGUID guild_guild);
//점령전 정보 로드 완료 설정 메소드
void SetLoadDominationInfo(bool is_success);
bool GetLoadDominationInfo()const;
//경매 정보 로드 완료 설정 메소드
void SetLoadDominationAuctionInfo(bool is_success);
bool GetLoadDominationAuctionInfo()const;
#ifdef _NA_20100604_BETTER_DOMINATION_MANAGER
//길드의 점령 지역 수 리턴
WORD NumberOfDominationAreaByGuild(const GUILDGUID guild_guid);
#endif
#ifdef _NA_20110406_CHANGE_RULE_FOR_DOMINATION_JOIN
void SetLoadDominationMemberInfo(bool is_success);
bool GetLoadDominationMemberInfo()const;
void SetCheckMemberInfo(MAPCODE map_code);
void SetCheckDominationMemberMap();
void RequestDominationMemberInfo();
void InsertDominationMemberInfo(MAPCODE map_code, const DominationMemberInfo& member_info);
void DeleteDominationMemberInfo(MAPCODE map_code, CHARGUID char_guid);
void SendMemberList(GameServerSession* server_session, MAPCODE map_code)const;
void CheckCompleteLoadMemberData();
#endif
private:
//초기화!
void Initialize();
//점령전 정보 로드 상태에따라 해야할 일을 결정한다.
void DominationInfoStatusProc();
//지역 점령전 기본 정보를 로드 한다.
void RequestDominationAreaInfo();
//점령전 지역정보를 저장할 장소를 만든다.
bool InsertDominationMapInfo(MAPCODE map_code);
//경매 로드 정보를 초기화한다.
void SetCheckDominationActionMap();
//점령전 기본 정보(지역,맵)를 로드 했는지 체크, 로드 하지 못했으면 해당 부분 로드.
bool CheckLoadingStatus();
//점령전 스크립트기준으로 비어있는 점령전 정보를 초기화
void SetEmptyDominationInfo();
//DBP로 패킷 Send
bool SendToDBProxy(MSG_BASE* msg, WORD size)const;
//점령전 정보 로드 타이머 설정 메소드
void LoadingTimerSet();
void LoadingTimerDisable();
//초기화 플레그 설정 메소드
bool GetIsinit();
void SetIsInit(bool flag);
//점령전 로딩 상테 설정 메소드
void SetDominationLoadingStatus(DominationLoadingStatus status);
DominationLoadingStatus GetDominationInfoStatus();
//현재 점령전에 필요한 모든 데이터 로드를 완료 하였나?
bool IsCompleteLoad();
//경매 데이터 로드를 완료 하였나?
void CheckCompleteLoadAuctionData();
private:
bool is_load_domination_area_info_;
bool is_load_domination_auction_info_;
AreaInfoMap domination_area_info_map_;
AllAreaAuctionInfoMap all_area_auction_info_map_;
AuctionInfoLoadingCheckMap auction_info_loading_check_map_;
util::Timer loading_timer_;
DominationLoadingStatus loading_status_;
bool is_init_;
#ifdef _NA_20110406_CHANGE_RULE_FOR_DOMINATION_JOIN
bool is_load_domination_member_info_;
MemberMap member_info_map_;
MemberLoadCheckMap member_info_loading_check_map_;
#endif
};
inline void
DominationManager::SetLoadDominationInfo(bool is_success)
{
is_load_domination_area_info_ = is_success;
}
inline bool
DominationManager::GetLoadDominationInfo()const
{
return is_load_domination_area_info_;
}
inline void
DominationManager::SetLoadDominationAuctionInfo(bool is_success)
{
is_load_domination_auction_info_ = is_success;
}
inline bool
DominationManager::GetLoadDominationAuctionInfo()const
{
return is_load_domination_auction_info_;
}
inline void
DominationManager::LoadingTimerSet()
{
loading_timer_.SetTimer(MAX_DOMINATIONINFOSET_TIME);
}
inline void
DominationManager::LoadingTimerDisable()
{
loading_timer_.DisableCheckTime();
}
inline bool
DominationManager::GetIsinit()
{
return is_init_;
}
inline void
DominationManager::SetIsInit(bool flag)
{
is_init_ = flag;
}
inline void
DominationManager::SetDominationLoadingStatus(DominationLoadingStatus status)
{
loading_status_ = status;
}
inline DominationManager::DominationLoadingStatus
DominationManager::GetDominationInfoStatus()
{
return loading_status_;
}
#ifdef _NA_20110406_CHANGE_RULE_FOR_DOMINATION_JOIN
inline void
DominationManager::SetLoadDominationMemberInfo(bool is_success)
{
is_load_domination_member_info_ = is_success;
}
inline bool
DominationManager::GetLoadDominationMemberInfo()const
{
return is_load_domination_member_info_;
}
#endif//_NA_20110406_CHANGE_RULE_FOR_DOMINATION_JOIN