#pragma once //============================================================================================================================= /// GuildManager class /** @author Kim Min Wook < taiyo@webzen.co.kr > @since 2005. 12. 26 @remark - ±æµå,±æµå¿øÀ» °ü¸®Çϴ Ŭ·¡½º @note - ±æµå´Â ½Ç½Ã°£ 󸮸¦ ÇÑ´Ù. - Agent¿Í Game¼­¹ö¿ÍÀÇ Ã³¸®¸¦ ÇÏ´Â ÀÎÅÍÆäÀ̽º ⱸÀÌ´Ù. - GuildManager´Â Guild¸¦ Guild´Â GuildMember¸¦ °ü¸®ÇÑ´Ù. - ¸ÕÀú »ý¼ºÈÄ DBProxy·Î ºÎÅÍ °á°ú°¡ ¿À¸é ±æµå Á¤º¸¸¦ ó¸®ÇÑ´Ù. ( ¼±»ý¼º ÈÄó¸® ) [±æµå¿øÁ¤º¸ÀÇ Ã³¸® ¹æ¹ý] - ±æµå¿øÀÌ ·Î±×¿ÀÇÁ½Ã ±æµå¿¡¼­ RemoveÇÏÁö ¾Ê´Â´Ù! - DB·Î ºÎÅÍ SelectMemberÇØ¼­ ¹ÞÀº ±æµå¿ø Á¤º¸¸¦ ´Ù °¡Áö°í Àִ´Ù. @history - */ //============================================================================================================================= #include "GuildCommon.h" class Guild; class GuildMember; struct BASE_GUILD_INFO; struct BASE_GUILD_MEMBER_INFO; #include #include "GuildSmallContentEntry.h" class GuildManager { public: GuildManager(void); ~GuildManager(void); // #±æµå°øÁöº¯°æ# RC::eGUILD_RESULT ChangeGuildNotice( DWORD dwKey, GUILDGUID GuildGuid, TCHAR *ptszNotice ); // #·©Å©¾÷# VOID RankUpGuild( GUILDGUID GuildGuid ); RC::eGUILD_RESULT CanRankUp( GUILDGUID GuildGuid, CHARGUID OperCharGuid, GuildRankInfo& RankInfo ); VOID SetGuildTransaction( GUILDGUID GuildGuid, eGUILD_TRANSACTION tran ); BOOL IsGuildTransaction( GUILDGUID GuildGuid, eGUILD_TRANSACTION trans = GUILD_TRANS_ING ); VOID OnChangeNoticeGuild( BOOL bSuccess, GUILDGUID GuildGuid, TCHAR * OUT ptszChangedNotice ); // #±æµå¿ø Ä«¿À»óÅ º¯°æ# RC::eGUILD_RESULT ChangeChaoState( GUILDGUID GuildGuid, CHARGUID CharGuid, BYTE byChaoState ); inline Guild* FindGuild( GUILDGUID GuildGuid ) { return m_GuildHash.GetData(GuildGuid); } Guild* FindGuildName(std::string); VOID RemoveGuildName(std::string); VOID AddGuildName(std::string, GUILDGUID); GUILDGUID GetGuildGuidByGuildName(std::string guild_name); CHARGUID GetGuildMasterByGuildName(std::string guild_name); #ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP RC::eGUILD_RESULT ChuntingPVPResult(GUILDGUID WinGuildGuid, GUILDGUID LoseGuildGuid, GUILDGUID DisGuildGuid); #endif VOID DisplayGuildInfo(); void UpdateForGuildDestroy() { m_GuildPenaltyMgr.update(); } GuildSmallContentsEntry::GuildPenalty::GuildPenaltyMgr* GetGuildPenaltyMgr() { return &m_GuildPenaltyMgr; } RC::eGUILD_RESULT CanChangeDuty( GUILDGUID GuildGuid, CHARGUID OperCharGuid, CHARGUID TargetGuid, eGUILD_DUTY ChangeDuty ); BOOL ChangeMemberDuty( GUILDGUID GuildGuid, CHARGUID TargetCharGuid, eGUILD_DUTY eDuty); GuildMember* FindGuildMemberByName( GUILDGUID GuildGuid, TCHAR* pszMemberName ); GuildMember* FindGuildMember( GUILDGUID GuildGuid, CHARGUID CharGuid ); BOOL CheckRight( GUILDGUID GuildGuid, CHARGUID OperGuid, eGUILD_RIGHTS Right ); VOID GetCharName( GUILDGUID GuildGuid, CHARGUID CharGuid, OUT TCHAR* pszCharName, IN BYTE byBufSize ); RC::eGUILD_RESULT IsDelegateChar( GUILDGUID GuildGuid, CHARGUID TargetGuid ); RC::eGUILD_RESULT IsDelegateChar( GUILDGUID GuildGuid, TCHAR* pszTargetCharName ); BOOL CheckDelegatedRight( const eGUILD_DUTY& Duty ); VOID GetDelegateRight( GUILDGUID GuildGuid, TCHAR* pszTargetCharName, OUT GUILD_RIGHT_USE_INFO* pDelegateRight ); BOOL IsDelegateRight( const GUILD_RIGHT_USE_INFO* pRightInfo ); VOID ChangeDelegateRight( GUILDGUID GuildGuid, CHARGUID TargetGuid, GUILD_RIGHT_USE_INFO* pDelegateRight ); BOOL ChangeMaster( GUILDGUID GuildGuid, CHARGUID OldMasterCharGuid , CHARGUID NewMasterCharGuid, INT64 nMasterChangeTime ); RC::eGUILD_RESULT CanChangeMaster( GUILDGUID GuildGuid, CHARGUID OldMasterCharGuid , TCHAR* pszNewMasterName ); BYTE GetMaxMemberByDuty( BYTE byCorpsNum, eGUILD_DUTY duty ); RC::eGUILD_RESULT CanRightDelegate( GUILDGUID GuildGuid, CHARGUID OperCharGuid, TCHAR* pszTargetCharName, const GUILD_RIGHT_USE_INFO* pRightInfo ); CHARGUID FindRightMember(GUILDGUID GuildGuid, eGUILD_DUTY eDuty); // Guild RC::eGUILD_RESULT CanCreateGuild( CHARGUID MasterCharGuid, LEVELTYPE MasterLV ); RC::eGUILD_RESULT CreateGuild( GUILDGUID GuildGuid, const TCHAR* tszGuildName, BYTE byCorpsNum, CHARGUID MasterCharGuid, const TCHAR* tszMasterCharName, eGUILD_DUTY MasterDuty, BYTE byMasterClass, LEVELTYPE MasterLevel, BYTE byMasterChaoState, INT64 nGuildPanaltyTime, INT64 nDestroyRequestTime, INT64 nMasterChangeTime ); VOID DestroyGuild( GUILDGUID GuildGuid ); RC::eGUILD_RESULT CanDestroyGuild( GUILDGUID GuildGuid, CHARGUID OperCharGuid ); GuildMember* FindMaster( GUILDGUID GuildGuid ); // Corps RC::eGUILD_RESULT CreateCorps( GUILDGUID GuildGuid, BYTE byCorpsNum, CHARGUID TargetCharGuid ); RC::eGUILD_RESULT CanCreateCorps( GUILDGUID GuildGuid, CHARGUID OperCharGuid, const TCHAR* pszTargetCharName, OUT BYTE& byCorpsNum ); RC::eGUILD_RESULT CanBeCommander( GUILDGUID GuildGuid, CHARGUID CommanderCharGuid ); BYTE GetEmptyCommanderInfo( GUILDGUID GuildGuid, BYTE* pEmptyCommanderInfo ); RC::eGUILD_RESULT CanDestoryCorps( GUILDGUID GuildGuid, CHARGUID OperCharGuid, BYTE byCorpsNum ); RC::eGUILD_RESULT DestoryCorps( GUILDGUID GuildGuid, BYTE byCorpsNum, CHARGUID operCharGuid ); // Commander RC::eGUILD_RESULT CanChangeCommander( GUILDGUID GuildGuid, CHARGUID OperCharGuid, const TCHAR* tszMasterCharName, BYTE byCorpsNum ); RC::eGUILD_RESULT ChangeCommander( GUILDGUID GuildGuid, BYTE byCorpsNum, CHARGUID CommanderGuid); RC::eGUILD_RESULT CanChangeCorps( GUILDGUID GuildGuid, CHARGUID OperCharGuid, const TCHAR* tszMasterCharName, BYTE byCorpsNum ); RC::eGUILD_RESULT ChangeCorps( GUILDGUID GuildGuid, CHARGUID TargetCharGuid, BYTE byCorpsNum ); // RearCamp RC::eGUILD_RESULT CanCreateRearCamp( GUILDGUID GuildGuid, CHARGUID OperCharGuid, const TCHAR* pszTargetCharName, OUT BYTE& byCorpsNum ); RC::eGUILD_RESULT CreateRearCamp( GUILDGUID GuildGuid, BYTE byCorpsNum, CHARGUID TargetCharGuid ); RC::eGUILD_RESULT CanDestroyRearCamp( GUILDGUID GuildGuid, CHARGUID OperCharGuid, BYTE byCorpsNum ); RC::eGUILD_RESULT DestroyRearCamp( GUILDGUID GuildGuid, BYTE byCorpsNum, CHARGUID operCharGuid ); // #±æµå°¡ÀÔ# RC::eGUILD_RESULT CanInviteGuild( const GUILDGUID GuildGuid, const CHARGUID OperCharGuid, const CHARGUID TargetCharGuid, const LEVELTYPE TargetLevel ); RC::eGUILD_RESULT CanJoinGuild( const GUILDGUID& GuildGuid, const CHARGUID& OperCharGuid, const CHARGUID& TargetCharGuid, const LEVELTYPE& TargetLevel, OUT eGUILD_DUTY& Duty, OUT BYTE& byCorpsNum ); RC::eGUILD_RESULT JoinGuild( GUILDGUID GuildGuid, BYTE byCorpsNum, CHARGUID CharGuid, const TCHAR* tszCharName, eGUILD_DUTY Duty, BYTE byClass, LEVELTYPE Level, BYTE byChaoState ); // #±æµåÅ»Åð# RC::eGUILD_RESULT CanLeaveGuild( GUILDGUID GuildGuid, CHARGUID CharGuid ); RC::eGUILD_RESULT LeaveGuild( GUILDGUID GuildGuid, CHARGUID CharGuid ); // #±æµå°­Åð# RC::eGUILD_RESULT CanKickMember( GUILDGUID GuildGuid, CHARGUID OperCharGuid, TCHAR* ptszCharName ); RC::eGUILD_RESULT KickMember( GUILDGUID GuildGuid, CHARGUID OperCharGuid, CHARGUID TargetCharGuid ); // Serialize BOOL SerializeBaseGuildInfo( GUILDGUID GuildGuid, INOUT BASE_GUILD_INFO& info, eSERIALIZE se ); BOOL SerializeGameGuildInfo( GUILDGUID GuildGuid, INOUT GAME_GUILD_INFO& info, eSERIALIZE se ); BOOL SerializeGuildInfo( GUILDGUID GuildGuid, INOUT GUILD_INFO& info, eSERIALIZE se ); BOOL SerializeCorpsInfo( GUILDGUID GuildGuid, INOUT GUILD_CORPS_TOTAL_INFO& info, eSERIALIZE se ); BOOL SerializeBaseMemberTotalInfo( GUILDGUID GuildGuid, INOUT BASE_GUILD_MEMBER_TOTAL_INFO& info, eSERIALIZE se ); BOOL SerializeMemberTotalInfo( GUILDGUID GuildGuid, INOUT GUILD_MEMBER_TOTAL_INFO& info, eSERIALIZE se ); BOOL SerializeServerMemberTotalInfo( GUILDGUID GuildGuid, INOUT SERVER_GUILD_MEMBER_TOTAL_INFO& info, eSERIALIZE se ); BOOL GetGuildBaseMemberInfo( GUILDGUID GuildGuid, CHARGUID CharGuid, OUT BASE_GUILD_MEMBER_INFO& info ); BOOL GetGuildMemberInfo( GUILDGUID GuildGuid, CHARGUID CharGuid, OUT GUILD_MEMBER_INFO& info ); BOOL GetWorldGuildInfo( GUILDGUID GuildGuid, OUT WORLD_GUILD_INFO& info ); // Login/out RC::eGUILD_RESULT CanLogin( GUILDGUID GuildGuid, CHARGUID CharGuid ); RC::eGUILD_RESULT Login( GUILDGUID GuildGuid, CHARGUID CharGuid ); RC::eGUILD_RESULT Logout( GUILDGUID GuildGuid, CHARGUID CharGuid ); RC::eGUILD_RESULT CanMoveServer( GUILDGUID GuildGuid, CHARGUID CharGuid ); // UP/GP º¯È¯ RC::eGUILD_RESULT CanConvertUP2GP( GUILDGUID GuildGuid, CHARGUID OperGuid, GPTYPE ConverGP ); BOOL SetPoint( GUILDGUID GuildGuid, GPTYPE gp, UPTYPE up ); RC::eGUILD_RESULT CanDonateUP( GUILDGUID GuildGuid, CHARGUID CharGuid ); RC::eGUILD_RESULT DonateUP( GUILDGUID GuildGuid, UPTYPE TotalUP, CHARGUID CharGuid, UPTYPE DonateUP ); // ·¹º§¾÷ RC::eGUILD_RESULT LevelUpMember( GUILDGUID GuildGuid, CHARGUID CharGuid, LEVELTYPE Level ); // total Á¤º¸ ¿äû RC::eGUILD_RESULT CanRequestTotalInfo( GUILDGUID GuildGuid, CHARGUID CharGuid ); VOID SetGuildNotice( GUILDGUID GuildGuid, const TCHAR* pszNotice ); VOID ChangeGuildName( GUILDGUID guid, const TCHAR* pszGuildName ); RC::eGUILD_RESULT CanChangeGuildName( GUILDGUID guid, CHARGUID OperCharGuid = 0 ); protected: BOOL IsConnectedDBProxy(); inline VOID AddGuild( Guild * pGuild, GUILDGUID GuildGuid ) { m_GuildHash.Add(pGuild, GuildGuid); } inline VOID RemoveGuild( GUILDGUID GuildGuid ) { m_GuildHash.Remove(GuildGuid); } private: enum { _MAX_GUILD_POOL_NUM = 1000, _MAX_GUILD_MEMBER_POOL_NUM = 20000, }; //GUILDMEMBER_HASH m_MemberHash; GUILD_HASH m_GuildHash; GuildSmallContentsEntry::GuildPenalty::GuildPenaltyMgr m_GuildPenaltyMgr; GUILD_NAME_HASH m_GuildNameMap; }; extern GuildManager g_GuildManager;