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

109 lines
5.0 KiB
C++

#pragma once
//=============================================================================================================================
/// GameGuildManager class
/**
@author Kim Min Wook < taiyo@webzen.co.kr >
@since 2005. 12. 27
@remark
- 게임서버에서 길드를 관리하는 클래스
@note
- 길드서버에서 받아온 길드정보 클래스를 관리한다.
- 1. 게임서버에 접속한 캐릭터가 길드를 Find
- 2. 메니저에 길드 정보가 있으면 그대로 사용하고, 없으면 길드서버에 요청한다.
@history
-
*/
//=============================================================================================================================
class GameGuild;
class CGuildWarehouseSlotContainer;
typedef util::SolarHashTable<GameGuild *> GUILD_HASH;
typedef std::map<std::string, GameGuild*> GUILD_NAME_MAP;
struct PACKET_FOR_GUILD;
class GameGuildManager
{
enum { MAX_GUILD_POOL_NUM = 20, };
public:
GameGuildManager(void);
virtual ~GameGuildManager(void);
VOID Release();
RC::eGUILD_RESULT InviteMember( Player * pPlayer, Player * pReceiver );
RC::eGUILD_RESULT AnswerMember( Player * pPlayer, Player * pReceiver, BOOL bAccept );
RC::eGUILD_RESULT WithdrawMember( Player * pPlayer );
RC::eGUILD_RESULT KickMember( Player * pMaster, TCHAR *ptszCharName );
BOOL ValidPlayer( Player * pPlayer );
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
VOID SetChuntingPVPInfo( GUILDGUID GuildGuid, CHUNTING_PVP_INFO & IN PVPInfo );
#endif
VOID DisplayerGuildInfo( BOOL bLog = FALSE );
inline GameGuild* FindGuild( GUILDGUID GuildGuid ) { return m_GuildHash.GetData(GuildGuid); }
//길드 직책
VOID ChangeMemberDuty( GUILDGUID GuildGuid, CHARGUID TargetCharGuid, eGUILD_DUTY eDuty );
VOID ChangeMaster( GUILDGUID GuildGuid, CHARGUID OldMasterCharGuid, CHARGUID NewMasterCharGuid );
RC::eGUILD_RESULT CanChangeDuty( GUILDGUID GuildGuid, CHARGUID OperCharGuid, CHARGUID TargetCharGuid, eGUILD_DUTY eDuty );
//게임서버에서의 Can의 의미는 게임서버에서만 체크 할 수 있는 상태를 체크 함를 의미한다.
RC::eGUILD_RESULT ValidPlayerWithNPC( Player* pPlayer );
VOID ChangeCommander( GUILDGUID GuildGuid, CHARGUID TargetCharGuid, BYTE byCorpsNum );
VOID ChangeCorps( GUILDGUID GuildGuid, CHARGUID TargetCharGuid, BYTE byCorpsNum );
VOID CreateRearCamp( GUILDGUID GuildGuid, BYTE byCorpsNum );
VOID DestroyRearCamp( GUILDGUID GuildGuid, BYTE byCorpsNum );
RC::eGUILD_RESULT CanCreateGuild( Player* pPlayer, OUT MONEY& heim );
RC::eGUILD_RESULT CreateGuild( Player* pPlayer, const GAME_GUILD_INFO& rInfo, const BASE_GUILD_MEMBER_INFO& rMemberInfo );
RC::eGUILD_RESULT CanDestroyGuild( Player* pPlayer );
VOID DestroyGuild( GUILDGUID GuildGuid );
RC::eGUILD_RESULT CanJoinGuild( Player* pOperPlayer, Player* pTargetPlayer );
RC::eGUILD_RESULT JoinGuild( GUILDGUID GuildGuid, const BASE_GUILD_MEMBER_INFO& rMemberInfo );
VOID DestroyMember( const GUILDGUID GuildGuid, const CHARGUID CharGuid );
RC::eGUILD_RESULT CanRankUpGuild( const GUILDGUID GuildGuid, const MONEY Money, OUT MONEY& UseHeim );
VOID RankUpGuild( const GUILDGUID GuildGuid, BYTE byGrade );
BOOL LoginChar( const GAME_GUILD_INFO& rInfo, const BASE_GUILD_MEMBER_INFO& rMemberInfo );
VOID Logout( GUILDGUID GuildGuid, CHARGUID CharGuid );
VOID LeaveGuild( GUILDGUID GuildGuid, CHARGUID CharGuid );
VOID LeaveServer( GUILDGUID GuildGuid, CHARGUID CharGuid );
VOID SendPacket( const GUILDGUID GuildGuid, MSG_BASE_FORWARD* pMsg, int nSize, CHARGUID ExceptionCharGuid = 0 );
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
VOID ApplyGuildFacilityPassiveAllmember(GUILDGUID guild_guid, const bool is_add);
VOID ApplyGuildFacilityPassive(Player* player, const bool is_add);
RC::eGUILD_RESULT ApplyGuildFacilityActive(Player* player, FCODE facility_code);
VOID SendGuildFacilityTotalInfo(Player* player, GUILDGUID guild_guid);
#else
VOID EnterServer( const GAME_GUILD_INFO& rInfo, const BASE_GUILD_MEMBER_INFO& rMemberInfo );
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
GUILD_HASH* GetGuildHash() { return &m_GuildHash; }
CGuildWarehouseSlotContainer* GetGuildWarehouse(GUILDGUID GuildGuid);
GameGuild* FindGuildName(std::string strGuildName);
VOID RemoveGuildName(std::string strGuildName);
VOID AddGuildName(std::string strGuildName, GameGuild *pGuild);
GUILD_NAME_MAP m_GuildNameMap;
VOID ChangeGuildName( GUILDGUID guid, const TCHAR* pszGuildName );
RC::eGUILD_RESULT CanChangeGuildName( GUILDGUID guid, CHARGUID OperCharGuid, const TCHAR* pszGuildName );
#ifdef _NA_008334_20150608_SONNENSCHEIN
//모든 소넨샤인 등급을 초기화시킨다
VOID InitializeAllSonnenScheinPhase();
BOOL SetGuildSonnenScheinPhase(GUILDGUID guid, BYTE phase);
#endif //_NA_008334_20150608_SONNENSCHEIN
protected:
inline VOID RemoveGuild( GUILDGUID GuildGuid ) { m_GuildHash.Remove(GuildGuid); }
inline VOID AddGuild( GameGuild * pGuild, GUILDGUID GuildGuid ) { m_GuildHash.Add(pGuild, GuildGuid); }
private:
GUILD_HASH m_GuildHash;
};
extern GameGuildManager g_GameGuildManager;