DragonNest/Server/ServerCommon/DNGuildBase.h
1901919047 acbeb77444 1
2025-03-23 15:03:27 +08:00

182 lines
No EOL
7.6 KiB
C++

#pragma once
#include "Access.h"
#include "DNGuildSystem.h"
#include "DNDBConnection.h"
#include "DNMasterConnection.h"
#include "DNUserBase.h"
#include "BitSetEx1.hpp"
class CDNGuildSystem;
class CDNGuildBase
{
public:
CDNGuildBase();
virtual ~CDNGuildBase();
DWORD Open(CDNGuildSystem* pManager);
bool IsOpen() const {return m_bOpen;}
void Close();
void Release();
virtual void Reset();
// TGuild
void Set(const TGuild* pInfo);
bool IsSet() {return m_Info.IsSet();}
const TGuildUID& GetUID() {return m_Info.GuildView.GuildUID;}
// Access
CSyncLock* GetLock() const {return m_Access.GetLock();}
#if !defined( PRE_ADD_NODELETEGUILD )
void Attach();
void Detach();
void DisableAttach();
void DisableAttachNoLock();
void DetachWork();
bool IsAttach() const;
bool IsEnable() const;
DWORD GetAccessCount() const;
#endif
void ResetAccess(); // 咀技胶 犁劝己拳
// INFO
const TGuild* GetInfo() const;
TGuild* SetInfo();
// UPDATE
void DoUpdate(DWORD CurTick);
#if defined(_DEBUG)
bool IsLock() const;
bool m_bSkipDisableOnDebugging; // 叼滚彪 吝 辨靛 磊盔 秦力 规瘤 咯何
#endif // _DEBUG
void SetGuildInfoAuth(int pGuildRoleAuth[GUILDROLE_TYPE_CNT]) const;
void SetGuildInfoAuth(eGuildRoleType pGuildRoleType, int pGuildAuth);
void SetGuildInfoAuth(eGuildRoleType pGuildRoleType, eGuildAuthType pGuildAuthType);
void ResetGuildInfoAuth(eGuildRoleType pGuildRoleType, eGuildAuthType pGuildAuthType);
bool CheckGuildInfoAuth(eGuildRoleType pGuildRoleType, eGuildAuthType pGuildAuthType) const;
short GetGuildMemberSize() const;
// SEND
virtual void SendAddGuildMember(UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszCharacterName, TP_JOB nJob, char cLevel, __time64_t pJoinDate, TCommunityLocation* pLocation) = 0;
virtual void SendDelGuildMember(UINT nAccountDBID, INT64 nCharacterDBID, bool bIsExiled) = 0;
virtual void SendChangeGuildInfo(UINT nAccountDBID, INT64 nCharacterDBID, BYTE btGuildUpdate, int iInt1, int iInt2, int iInt3, int iInt4, INT64 biInt64, LPCWSTR pText) {};
virtual void SendChangeGuildMemberInfo(UINT nReqAccountDBID, INT64 nReqCharacterDBID, UINT nChgAccountDBID, INT64 nChgCharacterDBID, BYTE btGuildMemberUpdate, int iInt1, int iInt2, INT64 biInt64, LPCWSTR pText) = 0;
virtual void SendGuildChat(UINT nAccountDBID, INT64 nCharacterDBID, LPCWSTR lpwszChatMsg, short nLen) = 0;
#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
virtual void SendDoorsGuildChat(INT64 nCharacterDBID, LPCWSTR lpwszChatMsg, short nLen) = 0;
#endif //#ifdef PRE_ADD_DOORS_GUILDCHAT_DISCONNECT
virtual void SendChangeGuildName(const wchar_t* wszGuildName) = 0;
virtual void SendChangeGuildMark(const MAGuildChangeMark *pPacket) = 0;
virtual void SendExtendGuildWare(short wTotalSize) {};
virtual void SendGuildLevelUp(int nLevel) = 0;
virtual void SendUpdateGuildExp(BYTE cPointType, int nPointValue, int nGuildExp, INT64 biCharacterDBID = 0, int nMissionID = 0) = 0;
virtual void SendGuildRewardItem( TGuildRewardItem* GuildRewardItem ) = 0;
virtual void SendAddGuildRewardItem( TGuildRewardItem GuildRewardItem ) = 0;
virtual void SendExtendGuildSize(short nGuildSize) = 0;
// DB
virtual void ReqGetGuildWareInfo(bool bForceReq = false) {}
// RECV
virtual void RecvCsCloseGuildWare(CDNUserSession * pSession) {};
virtual void RecvApiOpenGuildWare(CDNUserSession * pSession) {};
virtual void RecvCsGetGuildWareHistory(CDNUserSession * pSession, CSGetGuildWareHistory *pPacket) {};
// RECV FROM DB
void DBRecv();
// UPDATE
void UpdateMember(TAGetGuildMember *pPacket);
void UpdateGuildExp(const MAUpdateGuildExp* pPacket);
virtual void UpdateWarInfoOnAllMember(short wScheduleID, BYTE cTeamColorCode) = 0;
virtual void UpdateGuildInfo(CDNUserSession* pSession, const TAChangeGuildInfo *pPacket) {}
virtual void UpdateMemberInfo(CDNUserSession* pSession, const TAChangeGuildMemberInfo *pPacket) {}
virtual void OpenWare(const TAGetGuildWareInfo* pPacket) {}
virtual void UpdateWareSize(CDNUserBase* pUserObject, short wSize) {}
// MEMEBER
bool AddMember(const TGuildMember* pGuildMember, TCommunityLocation* pLocation=NULL);
bool AddMemberAsync(const TGuildMember* pGuildMember, TCommunityLocation* pLocation=NULL);
void DelMember(INT64 nCharacterDBID);
void UpdateMemberLevel(INT64 nCharacterDBID, char cLevel);
void UpdateMemberName(INT64 nCharacterDBID, const WCHAR* wszName);
INT64 UpdateMemberCoin(INT64 nCharacterDBID, INT64 nMoveCoin, __time64_t tUseDate);
void ResetMemberWareVersion(INT64 nCharacterDBID);
bool IsMemberExist(INT64 nCharacterDBID, TGuildMember* pGuildMember = NULL) const;
bool IsMemberAddable() const;
int GetMemberCount() const;
void GetMemberList(std::vector <std::pair<UINT, INT64>>& pList) const;
void SetMemberList(TGuildMember *GuildMember);
TGuildMember* GetMemberInfo(INT64 nCharacterDBID);
TGuildMember* GetMemberInfoAsync(INT64 nCharacterDBID);
// POINT
bool AddPoint(char cPointType, int nPointValue, INT64 biCharacterDBID = 0, int nMissionID = 0);
int GetExp() {return m_Info.iTotalGuildExp;}
CDNDBConnection* GetDBCon() {return m_pDBCon;};
BYTE GetDBThreadID() {return m_cDBThreadID;}
void ResetCheckEmpty() {m_bCheckEmpty = false;}
short GetWareSize() {return m_Info.wGuildWareSize;}
short GetLevel() {return m_Info.wGuildLevel;}
virtual void GuildWarReset();
inline short GetGuildWarScheduleID() { return m_wGuildWarScheduleID; };
inline void SetGuildWarScheduleID(short wScheduleID) { m_wGuildWarScheduleID = wScheduleID;};
bool IsEnrollGuildWar();
void SetGuildWarRewardResults(bool* pRewardResults );
void SetGuildWarRewardResultIndex(char cRewardType, bool bResult);
bool GetGuildWarRewardEnable(char cRewardType);
void SetGuildRewardItem(TGuildRewardItem* GuildRewardItem); // 辨靛焊惑酒捞袍 利侩 格废
void AddGuildRewardItem( int nItemID, __time64_t tExpireDate, TGuildRewardItem &GuildRewardItem, CDNUserSession* pSession = NULL ); // 辨靛焊惑酒捞袍 备涝 利侩
TGuildRewardItem* GetGuildRewardItem(); // 辨靛焊惑酒捞袍 利侩 格废
void SetGuildMaster(TGuildMember *GuildMaster) { m_GuildMaster = GuildMaster;};
TGuildMember* GetGuildMaster() { return m_GuildMaster; };
void SetRecvAllMember( bool bAllRecv ) {m_bRecvAllMember = bAllRecv;}; // 辨靛盔格废 促 罐疽绰瘤 眉农
bool GetRecvAllMember() {return m_bRecvAllMember;}; // 辨靛盔格废 促 罐疽绰瘤 眉农
void CheckGuildInfo();
#if defined(PRE_ADD_GUILD_CONTRIBUTION)
bool IsAddGuildExp(char cPointType, int nPointValue, OUT int& nAddPoint, OUT int& nLimitPoint);
#endif // #if defined(PRE_ADD_GUILD_CONTRIBUTION)
protected:
virtual void SendGuildMemberLoginList(SCGuildMemberLoginList* pPacket) = 0;
virtual bool CheckGuildResource(TGuildMember* aGuildMemeber);
protected:
TGuild m_Info; // 辨靛沥焊
CDNDBConnection* m_pDBCon; // DB 目池记
BYTE m_cDBThreadID; // DB 静饭靛酒捞叼
std::map<INT64, TGuildMember> m_MapTotalMember; // 傈眉 辨靛盔 沥焊 格废
CDNGuildSystem* m_pManager; // 包府磊 按眉
private:
bool UpdateMemberState(TGuildMember* aGuildMember);
private:
bool m_bOpen; // 辨靛按眉 积己咯何
CAccess m_Access; // 立辟曼炼 包府
DWORD m_TickCheckMember; // 糕滚眉农
bool m_bCheckEmpty; // 磊盔秦力 眉农
short m_wGuildWarScheduleID; // 辨靛傈 胶纳领ID
bool m_bRewardResults[GUILDWAR_REWARD_GUILD_MAX]; // 历厘等 辨靛焊惑 搬苞
TGuildMember *m_GuildMaster; // 辨靛 付胶磐
bool m_bRecvAllMember;
};