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

85 lines
3.1 KiB
C++

// implemented by __KR_001355_20090608_GROUPINGSYSTEM_DATA
#pragma once
#include <Singleton.h>
#include <vector>
#include <MemoryPoolFactory.h>
class User;
struct STRUCT_GROUP_MEMBER_INFO;
typedef STLX_MAP<DWORD, STRUCT_GROUP_MEMBER_INFO*> GROUP_MEMBER_MAP;
typedef GROUP_MEMBER_MAP::iterator GROUP_MEMBER_MAP_ITER;
typedef std::pair< DWORD, STRUCT_GROUP_MEMBER_INFO*> GROUP_MEMBER_MAP_PAIR;
class GroupManager : public util::Singleton<GroupManager, util::SingletonRelease::kAuto>
{
public:
enum eSTAT_ALAM
{
LOG_OUT = 1,
LOG_IN,
GET_MONEY,
GET_EXP,
MEMBER_LEVELUP,
};
GroupManager();
~GroupManager();
STRUCT_GROUP_MEMBER_INFO* FindGroupMember(User* pUser, DWORD dwCharGuid);
STRUCT_GROUP_MEMBER_INFO* FindGroupMember(User* pUser, TCHAR* ptszMemberName);
STRUCT_GROUP_MEMBER_INFO* InsertMemberInfo(User* pUser, STRUCT_GROUP_MEMBER_INFO* pMember,
eGROUP_STAT eMemberStat);
eGROUP_STAT GetGroupHighMember(User* pUser);
eGROUP_STAT GetGroupLowMember(User* pUser);
//- 현재 그룹 상하위 멤버 상태를 알린다.
void UpdateGroupInfo(User* pUser);
//- 상위 멤버 상태를 Update.
void SetGroupHighMember(User* pUser, eGROUP_STAT eHightMember);
//- 멤버를 삭제 한다.
void RealeseMember(User *pUser);
//- 최초 멤버 정보를 셋팅한다.
bool SetMemberInfo(User* pUser, const STRUCT_GROUP_MEMBER_INFO& Member);
//- 그룹 멤버에게 정보를 알린다.
void SendAroundMember(User* pUser, eSTAT_ALAM memberStat);
//- 그룹 멤버를 추가 한다.
void AddMemberInfo(User* pUser, const STRUCT_GROUP_MEMBER_INFO& pMember);
//- 그룹 멤버를 삭제 한다.
void RemoveMemberInfo(User* pUser, DWORD charGuid);
//- 접속할때 하위 멤버가 쌓아놓은 경험치를 반영하기 위해 쪽지를 만든다.
void SendAccumEXPMemo(User* pUser);
//- 그룹내 하위 멤버의 인원 수를 구한다.
int GetLowMemberCount(User* pUser);
//- 현제 시간과 인자 값간의 날짜 차이와 결과를 알아낸다.
bool IsOverBonusDate(DWORD64 lastDate, INT chDate);
//- 그룹 리스트를 보낸다(gameluluWorking)
void SendGroupList(User* pUser);
//- 멤버 추가시에 추가 멤버에 대한 정보를 유저에게 알려준다.
void SendGroupMemberInfo(User* pUser, const STRUCT_GROUP_MEMBER_INFO& stGroupMemberInfo,
eGROUP_STAT stat);
//- 맴버 리스트를 보낸다.
void SendMemberList(User* pUser);
//- 맴버 추가가 가능한가?
bool CanAddGroupMember(User* request_user, User* dest_user, MSG_BASE* msg);
private:
STRUCT_GROUP_MEMBER_INFO* AllocMemberInfo();
void SetGroupLowMember(User* pUser, eGROUP_STAT eLowMember);
void SendGroupInfoSet(User* pUser, eGROUP_STAT eHighMember, eGROUP_STAT eLowMember);
bool SetMemeberConnectStat(User* pUser, DWORD dwCharGuid, BOOL bConnectStat);
bool SendAccumEXP(DWORD userGuid, CHARGUID highGuid, EXPTYPE AccumEXP);
void NotifyLoginState(User* pUser);
void NotifyLogOutState(User* pUser);
void NotifyEXPState(User* pUser);
void NotifyMoneyState(User* pUser);
void NotifyLevelUpState(User* pUser);
private:
util::CMemoryPoolFactory<STRUCT_GROUP_MEMBER_INFO> *m_pGroupPool;
};