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

184 lines
8.2 KiB
C++

#pragma once
//=============================================================================================================================
/// Guild class
/**
@author Kim Min Wook < taiyo@webzen.co.kr >
@since 2005. 12. 26
@remark
- 길드를 나타내는 클래스
@note
- 길드는 실시간 처리를 한다.
- XXX 와 OnXXX 계열의 함수는 서로 1:1 대응된다.
- OnXXX 계열의 함수는 DBR로 결과값이 온 후 호출되는 콜벡스타일의 함수이다.
- 길드를 받아 오게 되면, 모든 서버에게 broadcast한다.
- 수정 변경 사항도 모든 서버에게 broadcast한다.
@history
-
*/
//=============================================================================================================================
#include "GuildCommon.h"
class GuildRankInfo;
#include "GuildCorps.h"
#include "GuildRelation.h"
#include "GuildSmallContentEntry.h"
#include <string>
#include <map>
typedef STLX_MAP< BYTE, GuildCorps* > GUILD_CORPS_MAP;
typedef GUILD_CORPS_MAP::iterator GUILD_CORPS_MAP_ITER;
struct MSG_BASE;
struct BASE_GUILD_INFO;
struct BASE_GUILD_MEMBER_INFO;
class GuildMember;
class Guild
{
__DECL_GUILDPOOL(Guild)
friend class GuildManager;
public:
Guild(void);
virtual ~Guild(void);
public:
VOID InitializeGuild();
VOID LogOutMember( CHARGUID CharGuid );
VOID SetGuildInfo( BASE_GUILD_INFO & IN rInfo );
VOID ReleaseGuild();
BOOL CanDestroy();
BOOL SendDBProxy( MSG_BASE * pMsg, WORD wSize );
GuildMember* LogInMember( CHARGUID CharGuid );
GuildMember* FindMember( CHARGUID CharGuid );
GuildMember* FindMemberByCharName( const TCHAR *ptszCharName );
// 조건 UP(길드용), 하임(마스터용)
VOID RankUp();
RC::eGUILD_RESULT CanRankUp( OUT GuildRankInfo& RankInfo );
BOOL IsFullMember();
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
CHUNTING_PVP_INFO* GetChuntingPVPInfo() { return &m_ChuntingPVPInfo; }
#endif
public:
BOOL SetMemberDuty( CHARGUID CharGuid, eGUILD_DUTY eDuty );
BOOL IsExistMemberDuty( eGUILD_DUTY eDuty, BYTE byCorpsNum );
public:
VOID CreateGuild( GUILDGUID GuidGuid, const TCHAR* tszGuildName, BYTE byCorpsNum, CHARGUID MasterCharGuid, const TCHAR* tszMasterCharName, eGUILD_DUTY MasterDuty,
BYTE byMasterClass, LEVELTYPE MasterLevel, BYTE byChaoState, INT64 nGuildPanaltyTime, INT64 nDestroyRequestTime, INT64 nMasterChangeTime );
VOID Destroy();
WORD GetMemberCount();
GuildCorps* CreateCorps( BYTE byCorpsNum );
VOID DestroyCorps( BYTE byCorpsNum );
GuildCorps* CreateCorpsBySequence();
BYTE GetEmptyCorpsNumBySequence();
GuildCorps* FindCorps( BYTE corps_number ) const;
BYTE GetCorpsCount() const { return static_cast<BYTE>(m_mapGuildCorps.size()); } //현재 군단개수
GuildMember* FindMaster() const;
const TCHAR* GetMasterCharName();
GuildMember* FindMemberByDuty(eGUILD_DUTY eDuty);
BYTE GetEmptyCommanderInfo( BYTE* pEmptyCommderInfo );
RC::eGUILD_RESULT JoinGuild( BYTE byCorpsNum, CHARGUID CharGuid, const TCHAR* tszCharName, eGUILD_DUTY Duty, BYTE byClass, LEVELTYPE Level, BYTE byChaoState );
RC::eGUILD_RESULT LeaveGuild( CHARGUID CharGuid );
RC::eGUILD_RESULT ChangeCorps( CHARGUID CharGuid, BYTE byNewCorpsNum );
BOOL IsFullCorpsMemberByDuty( BYTE byCorpsNum, eGUILD_DUTY Duty );
BOOL CreateRearCamp( BYTE byCorpsNum );
BOOL DestroyRearCamp( BYTE byCorpsNum );
RC::eGUILD_RESULT DestroyMember( CHARGUID CharGuid );
BOOL GetBaseMemberInfo( CHARGUID CharGuid, OUT BASE_GUILD_MEMBER_INFO& info );
BOOL GetMemberInfo( CHARGUID CharGuid, OUT GUILD_MEMBER_INFO& info );
VOID ChangeGuildName( const TCHAR* pszGuildName );
int GetRelationGuid(STLX_VECTOR<GUILDGUID>& vGuildGuid, eGUILD_RELATION RelationType = eGUILD_RELATION_NONE );
inline VOID SetGuildName( const TCHAR* pszGuildName );
inline VOID SetGuildGP( GPTYPE gp ) { m_GuildInfo.m_GuildPoint = gp; }
inline VOID SetGuildUP( UPTYPE up ) { m_GuildInfo.m_UserPoint = up; }
inline VOID SetGuildGrade( eGUILD_GRADE grade ) { m_GuildInfo.m_GuildGrade = grade; }
inline VOID SetGuildGuid( GUILDGUID Guid ) { m_GuildInfo.m_GuildGuid = Guid; }
inline GPTYPE GetGuildGP() const { return m_GuildInfo.m_GuildPoint; }
inline UPTYPE GetGuildUP() const { return m_GuildInfo.m_UserPoint; }
inline eGUILD_GRADE GetGuildGrade() const { return static_cast<eGUILD_GRADE>(m_GuildInfo.m_GuildGrade); }
inline GUILDGUID GetGuildGuid() const { return m_GuildInfo.m_GuildGuid; }
const TCHAR* GetGuildName() const { return m_GuildInfo.m_tszGuildName; }
VOID GetWorldGuildInfo( WORLD_GUILD_INFO& rInfo );
inline VOID SetMasterChangeTime( INT64 nChangeTime ){ m_nMasterChangeTime = nChangeTime; }
inline INT64 GetMasterChangeTime() const { return m_nMasterChangeTime; }
#ifdef _NA_20100604_BETTER_DOMINATION_MANAGER
inline VOID SetDominationJointCount( WORD count ){ m_GuildInfo.m_DominationJoinCount = count; }
inline VOID SetDominationDefenseCount( WORD count ){ m_GuildInfo.m_DominationDefenseCount = count; }
inline VOID SetDominationHuntingCount( WORD count ){ m_GuildInfo.m_DominationHuntingCount = count; }
inline WORD GetDominationJoinCount(){ return m_GuildInfo.m_DominationJoinCount; }
inline WORD GetDominationDefenseCount(){ return m_GuildInfo.m_DominationDefenseCount; }
inline WORD GetDominationHuntingCount(){ return m_GuildInfo.m_DominationHuntingCount; }
#endif
//Serialize
VOID SerializeBaseGuildInfo( INOUT BASE_GUILD_INFO& rInfo, eSERIALIZE se );
VOID SerializeGameGuildInfo( INOUT GAME_GUILD_INFO& rInfo, eSERIALIZE se );
VOID SerializeGuildInfo( INOUT GUILD_INFO& rInfo, eSERIALIZE se );
VOID SerializeCorpsInfo( INOUT GUILD_CORPS_TOTAL_INFO& rInfo, eSERIALIZE se );
VOID SerializeBaseMemberTotalInfo( INOUT BASE_GUILD_MEMBER_TOTAL_INFO& rInfo, eSERIALIZE se );
VOID SerializeMemberTotalInfo( INOUT GUILD_MEMBER_TOTAL_INFO& rInfo, eSERIALIZE se );
VOID SerializeServerMemberTotalInfo( INOUT SERVER_GUILD_MEMBER_TOTAL_INFO& rInfo, eSERIALIZE se );
const TCHAR* GetGuildNotice() const { return m_szGuildNotice; }
VOID SetGuildNotice( const TCHAR* pszGuildNotice );
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SetPenaltyTime(GuildSmallContentsEntry::GuildPenalty::PenaltyTime PenaltyTime) { m_GuildInfo.m_GuildPenaltyTime = PenaltyTime;}
void SetDestroyTime(GuildSmallContentsEntry::GuildPenalty::PenaltyTime DestroyTime) { m_GuildInfo.m_GuildDestroyTime = DestroyTime;}
void SetDeleteGuildState(eGUILD_DELCHK eDelChk) { m_GuildInfo.m_GuildDestroyWaitFlag = eDelChk; }
void DeleteGuildMark()
{
m_GuildInfo.m_PatternIdx= 0;
m_GuildInfo.m_BackGroundIdx = 0;
}
void RegisterGuildMark(GUILDMARKIDX i, GUILDMARKIDX p)
{
m_GuildInfo.m_PatternIdx = p;
m_GuildInfo.m_BackGroundIdx = i;
}
void AcquireGuildMark(GUILDMARKIDX& b, GUILDMARKIDX& p)
{
p = m_GuildInfo.m_PatternIdx;
b = m_GuildInfo.m_BackGroundIdx;
}
GuildSmallContentsEntry::GuildPenalty::PenaltyTime GetPenaltyTime() const { return m_GuildInfo.m_GuildPenaltyTime; }
GuildSmallContentsEntry::GuildPenalty::PenaltyTime GetDestroyTime() const { return m_GuildInfo.m_GuildDestroyTime; }
GuildSmallContentsEntry::GuildPenalty::PenaltyTime GetDeleteGuildState() const { return m_GuildInfo.m_GuildDestroyWaitFlag; }
GuildRelationSystem::GuildRelationEntry* GetRelationEntry() { return &m_GuildRelationEntry; }
eGUILD_DELCHK CheckGuildDeleteState() const
{
return m_GuildInfo.m_GuildDestroyWaitFlag;
//return eGUILD_DELCHK_NORMAL;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private:
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
CHUNTING_PVP_INFO m_ChuntingPVPInfo;
#endif
GUILD_INFO m_GuildInfo;
INT64 m_nMasterChangeTime; // 이 값 사용하지 말것... 그냥 보존용이다.
GUILD_CORPS_MAP m_mapGuildCorps;
GuildRelationSystem::GuildRelationEntry m_GuildRelationEntry;
TCHAR m_szGuildNotice[MAX_GUILDNOTICE_LENGTH+1];
};