Files
Sun1602/Server/AgentServer/Zone/PortalManager.h
T
2022-10-26 12:25:11 +08:00

89 lines
3.5 KiB
C++

#ifndef __AGENTSERVER_PORTAL_MANAGER_H__
#define __AGENTSERVER_PORTAL_MANAGER_H__
//==================================================================================================
/// PortalManager Ŭ·¡½º
/**
@author waverix < waverix@webzen.co.kr >
@since 2009-02-10
@remark
-
@note
-
@history
- 09/02/10 - Created
@usage
-
*/
//==================================================================================================
#include <Zone/ZoneCommon.h>
// declared by __NA1279_1281_090209_TIMELINE_QUEST_BASED_MISSION__
struct QuestPortalInfoInAgent;
class User;
class ZoneInterface;
class RoomInterface;
class AgentPartyManager;
struct MSG_AG_ZONE_QUEST_PORTAL_ENTER_ACK;
class PortalManager : public util::Singleton<PortalManager>
{
typedef STLX_HASH_MAP<PORTALKEY, QuestPortalInfoInAgent*> PortalTable;
public:
PortalManager();
~PortalManager();
static BOOLEAN IsValidRequesterForCreatePortal(User* pUser);
static BOOLEAN IsValidCreatingZone(eZONETYPE zoneType);
// by AG_ZONE_QUEST_PORTAL_REQUEST_SYN & ZoneManager
static PORTALKEY CreatePortal(const QuestPortalInfo& rQuestPortalInfo,
BOOLEAN isTempPortal,
const RoomArgumentForRoomSetup& rRoomArgument);
// 1) CreateRoom Event by MSG_CG_ZONE_EX_QUEST_PORTAL_ENTER_SYN
static RC::eROOM_RESULT RequestEnterZoneTempPortal(User* pUser, PORTALKEY portalKey);
// 1) CreateRoom Event by MSG_CG_ZONE_EX_QUEST_PORTAL_ENTER_SYN
static RC::eROOM_RESULT RequestEnterZoneFixedPortal(User* pUser, WORD enterancePortalIndex);
// 1) CreateRoom Event by MSG_CG_ZONE_EX_QUEST_PORTAL_ENTER_SYN (first user)
// 2) EnterUser Event in ZoneInterface (other users)
static RC::eROOM_RESULT EnterZoneTempPortal(User* pUser, PORTALKEY portalKey);
// 1) CreateRoom Event by MSG_CG_ZONE_EX_QUEST_PORTAL_ENTER_SYN (first user)
// 2) EnterUser Event in ZoneInterface (other users)
static RC::eROOM_RESULT EnterZoneFixedPortal(User* pUser, PORTALKEY portalKey);
static BOOLEAN RequestClosePortal(User* pUser);
#ifdef _NA003129_QUEST_PORTAL_CONVENIENCE_EXTENTION
static bool RequestWithdrawPortalMember(User* user, RC::eROOM_RESULT* const error_code);
#endif
static BOOLEAN OnPortalEnterResult(const MSG_AG_ZONE_QUEST_PORTAL_ENTER_ACK* pMsg, User* pUser);
static BOOLEAN JoinRoom(User* pUser, MSG_CG_ZONE_EX_ROOM_JOIN_ACK* OUT pJoinInfo);
static VOID OnEnteredRoom(User* pUser, RoomInterface* pRoom); // post event support
static VOID OnRoomEvent(ZoneInterface* pZone, BOOLEAN isCreate);
//
static BOOLEAN CanJoinParty(User* pRequester, User* pResponser);
// LeaveParty Event in PartyManager
static VOID OnLeaveParty(User* pUser);
// Process Event in RoomInterface
static VOID RoomLifetimeTimeout(RoomInterface* pRoomInterface);
// Disconnect Event in ~~
static VOID ClearUserInfo(User* pUser);
// AgentServer Update Process
static VOID Update();
private:
//static VOID OnChangePortal(User* pUser, PortalKey portalKey);
inline QuestPortalInfoInAgent* FindQuestPortalInfo(PORTALKEY portalKey);
VOID PortalClose(QuestPortalInfoInAgent* pQuestPortalInfo);
BOOLEAN IsAcceptableUserByPointedPortal(QuestPortalInfoInAgent* pQuestPortalInfo, User* pUser,
BOOLEAN isTempPortal);
PortalTable m_PortalTable;
UserManager* const m_pUserManager;
AgentPartyManager* const m_pPartyManager;
__DISABLE_COPY(PortalManager);
};
#endif //__AGENTSERVER_PORTAL_MANAGER_H__