#include "stdafx.h" ////////////////////////////////////////////////////////////////////////// #include #include #include ////////////////////////////////////////////////////////////////////////// #include "DungeonSSQ.h" #include #include //================================================================================================== // // DungeonSSQ::DungeonSSQ() : InstanceDungeon(INDUN_KIND_SS_QUEST) , m_bCloseState(FALSE) { } DungeonSSQ::~DungeonSSQ() { } RC::eROOM_RESULT DungeonSSQ::SetBaseRoom(User* pUser, BASE_ROOMINFO& baseRoomInfo, MAPCODE mapCode) { const sMAPINFO* pInfo = MapInfoParser::Instance()->FindMapInfo(mapCode); if(!(pInfo && pInfo->byMKind == eZONETYPE_INSTANCE)) return RC::RC_ROOM_INVALID_MAPCODE; baseRoomInfo.m_ClassLimit = pInfo->byClass; baseRoomInfo.m_MinLV = (BYTE)pInfo->minLV; baseRoomInfo.m_MaxLV = (BYTE)pInfo->maxLV; return RC::RC_ROOM_SUCCESS; } RC::eROOM_RESULT DungeonSSQ::CanCreate(User* pUser, MAPCODE mapCode, eZONETYPE eZoneType, eZONEPUBLIC ePublic, BASE_ROOMINFO& IN baseRoomInfo, BOOL checkOpenTime) { __UNUSED((pUser, mapCode, eZoneType, ePublic, baseRoomInfo, checkOpenTime)); // (WAVERIX)(080805) - instance dungeonÀÌÁö¸¸ ÇØ´ç ¸ÊÀº ±× ½ÃÁ¡ Çϳª¸¸ Á¸ÀçÇØ¾ß ÇÑ´Ù. // SSQControl command¸¦ ÅëÇØ È®ÀÎÇÒ Çʿ䰡 ÀÖ´Ù. // - ÇÏÁö¸¸ SSQUpdateCtrl¿¡¼­ ¹Ì¸® È®ÀÎÇÏ´Â ÆíÀÌ º¹Àâµµ°¡ °¨¼ÒÇϹǷΠ±×°÷¿¡¼­ ó¸®Çϱâ·Î ÇÑ´Ù. return RC::RC_ROOM_SUCCESS; } RC::eROOM_RESULT DungeonSSQ::Create(User* pUser, // Not Used MAPCODE mapCode, KEYTYPE instanceDungeonKey, ServerSession* pServerSession, BOOL UseChargeItem) { // (WAVERIX)(080220) // - 1. User¿¡ ÀÇÇØ »ý¼ºµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ½Ã°£¿¡ ÀÇÇØ »ý¼ºµÈ´Ù. pUser = NULL // - 2. baseRoomInfo... ÃëÇÒ °Í ÀÖÀ¸¸é ÃëÇÏÀÚ. // - 3. mapCode, eZoneType : SSQ // - 4. ePublic = PUBLIC, checkOpenTime<-Check! ////////////////////////////////////////////////////////////////////////// // FlowControl flow; FLOWCONTROL_START() { BASE_ROOMINFO roomInfo; RC::eROOM_RESULT rt = SetBaseRoom(pUser, roomInfo, mapCode); IfFailThenBreak(RC::RC_ROOM_SUCCESS == rt, rt); rt = CanCreate(pUser, mapCode, eZONETYPE_INSTANCE, eZONEPUBLIC_PUBLIC, roomInfo, (!UseChargeItem)); IfFailThenBreak(RC::RC_ROOM_SUCCESS == rt, rt); // Á¤º¸ º¹»ç ----------------------------------------------------- RoomInterface::Create(pUser, instanceDungeonKey, mapCode, eZONEPUBLIC_PUBLIC, "", "", roomInfo, pServerSession); On_create(); return RC::RC_ROOM_SUCCESS; } FLOWCONTROL_END; return (RC::eROOM_RESULT)flow.GetErrorCode(); } VOID DungeonSSQ::On_create() { m_bCloseState = FALSE; RoomInterface::On_create(); WarControlManager::OnMsg(SSQCtrlCmd::Created(), this); } VOID DungeonSSQ::On_destroy() { // ¾Õ¼­¼­ Agent ´Â ÇØ´ç ¼­¹ö·Î ÇØ´ç Á¸À» Á¦°ÅÇÏ´Â ¸í·ÉÀ» º¸³½ »óȲÀÌ´Ù. // Àß »ìÆìº¸°í ¾Æ·¡ÀÇ ·çƾÀ» ¼öÁ¤Çϱâ·Î ÇÑ´Ù. // (080725)(NOTE) // - BattleServer Á¾·á½Ã, À¯ÀúµéÀÌ 0°¡ µÇ¹Ç·Î ZoneManager::Update¿¡¼­ ÇØ´ç roomÀÇ Á¦°Å°¡ °¡´ÉÇÏ´Ù. // - ÇÏÁö¸¸ DungeonSSQ´Â ±×·¸Áö ¸øÇÏ´Â ¹®Á¦°¡ ÀÖ´Ù. ¹æ¾ÈÀ» °­±¸ÇÏÀÚ. WarControlManager::OnMsg(SSQCtrlCmd::Destroy(), this); if(!IsReusedServerSession()) ServerSessionManager::Instance()->Decr_LOF_BattleServer(GetLinkedServer()->GetSessionIndex()); RoomInterface::On_destroy(); } VOID DungeonSSQ::On_enteruser(User* pUser) { InstanceDungeon::On_enteruser(pUser); WarControlManager::OnMsg(SSQCtrlCmd::UserState::Enter(pUser), this); } VOID DungeonSSQ::On_leaveuser(User* pUser) { WarControlManager::OnMsg(SSQCtrlCmd::UserState::Leave(pUser), this); InstanceDungeon::On_leaveuser(pUser); } VOID DungeonSSQ::SendJoinNAKPacket(User* pUser) { MSG_CG_ZONE_EX_SSQ_JOIN_ACK msgNAK; msgNAK.SetFailResult(0, 0); pUser->SendPacket(&msgNAK, sizeof(msgNAK)); pUser->SetDisconnectCode(RC::RC_DISCONNECT_DBP_CONNETION_ERROR); pUser->DisconnectUser(); } VOID DungeonSSQ::SendJoinACKPacket(User* pUser) { MSG_CG_ZONE_EX_SSQ_JOIN_ACK msgACK; msgACK.SetSuccessResult(GetMapCode()); pUser->SendPacket(&msgACK, msgACK.GetSize()); } BOOL DungeonSSQ::Process() { // Á¾·á Á¶°ÇÀ» ¸¸µé¾î¶ó... ±Û±¸... RoomInterface::Process °³¼± ¹æ¾ÈÀ» »ý°¢ÇØ º¸ÀÚ... // ÇÏÁö¸¸ µµÀúÈ÷ ½Ã°£ÀÌ Ã˹ÚÇÏ´Ù. ³Ñ¾î°¡ÀÚ... Èûµé´Ù. // mammoth object & garbage fields(unused..) Àß ¸ø ÆÄ¾ÇÇϸé À߸ø »ç¿ëÇÏ°Ô µÇÀݾÆ? return !m_bCloseState; }