Files
2022-10-26 12:25:11 +08:00

92 lines
4.1 KiB
C++

#pragma once
//=============================================================================================================================
/// WorldGuildManager class
/**
@author Kim Min Wook < taiyo@webzen.co.kr >
@since 2005. 12. 27
@remark
- 게임서버에서 길드를 관리하는 클래스
@note
- 길드서버에서 받아온 길드정보 클래스를 관리한다.
- 1. 게임서버에 접속한 캐릭터가 길드를 Find
- 2. 메니저에 길드 정보가 있으면 그대로 사용하고, 없으면 길드서버에 요청한다.
@history
- 2006. 01. 16 Modified by Sung Hyun Chang < whatthehell@webzen.co.kr > (월드 서버용으로 수정)
*/
//=============================================================================================================================
#include <struct.h>
#include <SolarHashTable.h>
#include <ResultCode.h>
#include <Singleton.h>
struct MSG_WZ_GUILD_DOMINATION_RETURNHIME_CMD; // packet, information messenger
class WorldGuild;
typedef util::SolarHashTable<WorldGuild *> GUILD_HASH;
typedef util::SolarHashTable<WorldGuild *>::iterator GUILD_HASH_ITR;
struct PACKET_FOR_GUILD;
class User;
class WorldGuildManager : public util::Singleton<WorldGuildManager, util::SingletonRelease::kAuto>
{
enum { MAX_GUILD_POOL_NUM = 1000, };
public:
WorldGuildManager(void);
virtual ~WorldGuildManager(void);
VOID Release();
RC::eGUILD_RESULT SelectGuildInfo( User * pUser, PACKET_FOR_GUILD & OUT rGuildInfo );
RC::eGUILD_RESULT DestroyGuild( User * pUser );
VOID DisplayerGuildInfo();
inline WorldGuild * FindGuild( GUILDGUID GuildGuid ) { return m_GuildHash.GetData(GuildGuid); }
VOID SendGuildMessage( BYTE* pMsg, WORD wSize );
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
VOID SetChuntingPVPInfo( GUILDGUID GuildGuid, CHUNTING_PVP_INFO & IN PVPInfo );
#endif
BOOL ChangeMemberDuty( GUILDGUID GuildGuid, CHARGUID TargetCharGuid, eGUILD_DUTY eGuildDuty);
BOOL SendGuildPacket( GUILDGUID GuildGuid, BYTE* pMsg, WORD wSize );
//VOID GetCharName( GUILDGUID GuildGuid, CHARGUID CharGuid, OUT TCHAR* pszCharName, IN BYTE byBufSize );
BOOL CreateRearCamp( GUILDGUID GuildGuid, BYTE byCorpsNum );
BOOL DestroyRearCamp( GUILDGUID GuildGuid, BYTE byCorpsNum );
VOID ChangeCommander( GUILDGUID GuildGuid, CHARGUID TargetCharGuid, BYTE byCorpsNum );
VOID ChangeCorps( GUILDGUID GuildGuid, CHARGUID TargetCharGuid, BYTE byCorpsNum );
VOID CreateGuild( const WORLD_GUILD_INFO& rGuildInfo, const BASE_GUILD_MEMBER_INFO& rMemberInfo );
VOID LoginGuild( const WORLD_GUILD_INFO& GuildInfo, const BASE_GUILD_MEMBER_INFO& memberInfo );
RC::eGUILD_RESULT LogoutGuild( GUILDGUID GuildGuid, CHARGUID CharGuid );
VOID RequestGuildRestore( GUILDGUID GuildGuid, CHARGUID CharGuid );
VOID GuildRestore( const WORLD_GUILD_INFO& GuildInfo, const BASE_GUILD_MEMBER_INFO& memberInfo );
VOID SerializeWorldGuildInfo( GUILDGUID GuildGuid, INOUT WORLD_GUILD_INFO& Info, eSERIALIZE se );
VOID SerializeBaseMemberInfo( GUILDGUID GuildGuid, INOUT BASE_GUILD_MEMBER_INFO& Info, eSERIALIZE se );
VOID GetCharName( GUILDGUID GuildGuid, CHARGUID CharGuid, OUT char* pszCharName, int nSize );
VOID KickMember( GUILDGUID GuildGuid, CHARGUID CharGuid );
VOID JoinGuild( GUILDGUID GuildGuid, const BASE_GUILD_MEMBER_INFO& rMemberInfo );
VOID WithdrawGuild( GUILDGUID GuildGuid, CHARGUID CharGuid );
VOID DestroyGuild( GUILDGUID GuildGuid );
RC::eGUILD_RESULT CanChangeNotice( GUILDGUID GuildGuid, CHARGUID OperCharGuid, const TCHAR* pszNotice, OUT int& nNoticeLen );
bool ChangeNotice(GUILDGUID guild_guid, const util::StrArrayForGuildNotice& notice);
VOID SendDominationHeimReturnMemo( const MSG_WZ_GUILD_DOMINATION_RETURNHIME_CMD* msg );
BOOL GetValueInMemo( const TCHAR* pszMemo, eSYSTEM_MEMO_TYPE& OUT type, MAPCODE& OUT mapcode );
protected:
inline VOID RemoveGuild( GUILDGUID GuildGuid ) { m_GuildHash.Remove(GuildGuid); }
inline VOID AddGuild( WorldGuild * pGuild, GUILDGUID GuildGuid ) { m_GuildHash.Add(pGuild, GuildGuid); }
// VOID RemoveOnlineMember( GUILDGUID GuildGuid );
// VOID AddOnlineMember( WorldGuildMember *pGuild, GUILDGUID GuildGuid );
private:
GUILD_HASH m_GuildHash;
};
//extern WorldGuildManager g_WorldGuildManager;