#include "StdAfx.h" #include "AgentPartyManager.h" #include "UserSessions/User.h" #include "AgentPartyOperator.h" #include "AgentParty.h" #include "Zone/PVPRoom.h" #include "Zone/LobbyRoom.h" #include "Zone/CHuntingRoom.h" #include "Zone/InstanceDungeon.h" VOID AgentPartyManager::CreateZone( User *pMaster, ZoneInterface *pCurZone, ZoneInterface *pCreateZone ) { if(pMaster == NULL || pCurZone == NULL || pCreateZone == NULL) return; BaseParty *pBaseParty = FindEditableParty( pMaster->GetPartyState().GetPartyKey() ); // Á¸¿¡µû¶ó ÆÄƼ 󸮸¦ ´Ù¸£°Ô ÇÑ´Ù. switch( pCreateZone->GetType() ) { case eZONETYPE_LOBBY: { if( pBaseParty ) { // ÆÄƼÀåÀÌ ¸¸µç ¹æÀ¸·Î ÆÄƼ¿øµéÀ» ÃÊ´ëÇÑ´Ù. if( pBaseParty->GetMasterKey() == pMaster->GetPlayerKey() ) { if( pCurZone->GetType() == eZONETYPE_VILLAGE ) { static MemberOperator Opr; Opr.Init( ePARTY_OPERATOR_INVITE, pMaster->GetPlayerKey(), 0 ); Opr.SetZone( pCreateZone ); pBaseParty->For_eachMembers( Opr ); } } // ·Îºñ¿¡¼­´Â ÆÄƼ¸¦ À¯ÁöÇÏÁö ¾Ê´Â´Ù. LeaveParty( pMaster, eREASON_LEAVE_PARTY_NOREASON ); } }break; case eZONETYPE_MISSION: case eZONETYPE_HUNTING: { // ÀÌÀü¿¡ ¸Î°í µé¾î¿Â ÆÄƼ´Â ÆÄ±«ÇÑ´Ù. if( pBaseParty ) { // ÇØÅ· °¡´É¼º °æ°í! SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::CreateZone] CurZone[%u] CreateZone[%u] Party[%u] Already exist!", pCurZone->GetType(), pCreateZone->GetType(), pBaseParty->GetMemberNum() ); DestroyParty( pBaseParty->GetPartyKey() ); } // »õ·Î ÆÄƼ¸¦ »ý¼ºÇÑ´Ù. pBaseParty = CreateParty( pMaster->GetPlayerKey(), ePARTY_FIELD ); pCreateZone->LinkParty( pBaseParty->GetPartyKey() ); // ÆÄƼ¸¦ »ý¼ºÇÑ ÀÌ»ó µ¿±âÈ­¸¦ À§ÇØ ¸ðµç À¯ÀúµéÀ» ÆÄƼ¿¡ °¡ÀÔ½ÃŲ´Ù. static JoinPartyOperator Opr; Opr.Init( eUSER_OPERATOR_JOINPARTY, pBaseParty->GetPartyKey() ); pCurZone->Foreach( Opr ); }break; case eZONETYPE_CHUNTING: { CHuntingRoom *pCHuntingRoom = (CHuntingRoom*)pCreateZone; // ÀÌÀü¿¡ ¸Î°í µé¾î¿Â ÆÄƼ´Â ÆÄ±«ÇÑ´Ù. if( pBaseParty ) { // ÇØÅ· °¡´É¼º °æ°í! SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::CreateZone] CurZone[%u] CreateZone[%u] Party[%u] Already exist!", pCurZone->GetType(), pCreateZone->GetType(), pBaseParty->GetMemberNum() ); DestroyParty( pBaseParty->GetPartyKey() ); } // »õ·Î ÆÄƼ¸¦ »ý¼ºÇÑ´Ù. pBaseParty = CreateParty( pMaster->GetPlayerKey(), ePARTY_FIELD ); pCHuntingRoom->LinkParty( pBaseParty->GetPartyKey() ); static JoinPartyOperator Opr; Opr.Init( eUSER_OPERATOR_JOINPARTY, pBaseParty->GetPartyKey() ); pCurZone->Foreach( Opr ); }break; case eZONETYPE_PVP: { LobbyRoom* pLobbyRoom = (LobbyRoom *)pCurZone; PVPRoom *pPVPRoom = (PVPRoom*)pCreateZone; // ÀÌÀü¿¡ ¸Î°í µé¾î¿Â ÆÄƼ´Â ÆÄ±«ÇÑ´Ù. if( pBaseParty ) { // ÇØÅ· °¡´É¼º °æ°í! SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::CreateZone] CurZone[%u] CreateZone[%u] Party[%u] Already exist!", pCurZone->GetType(), pCreateZone->GetType(), pBaseParty->GetMemberNum() ); DestroyParty( pBaseParty->GetPartyKey() ); } // ÆÀ¸ðµå¿¡¼­¸¸ ÆÄƼ¸¦ ¼³Á¤ÇÑ´Ù. if( pPVPRoom->IsPVPTeamMode() ) { // 2¹øÂ° ÆÀÀÇ ÆÄƼÀåÀ» ÀÓÀÇ·Î °áÁ¤ÇÑ´Ù. User *pMaster2 = pLobbyRoom->Get2ndTeamMaster(); if( !pMaster2 ) { SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::CreateZone] CurZone[%u] 2ndTeamMaster is NULL!", pCurZone->GetType() ); return; } // 2°³ÀÇ ÆÄƼ¸¦ »ý¼ºÇÑ´Ù. BaseParty *pBaseParty1 = CreateParty( pMaster->GetPlayerKey(), ePARTY_FIELD ); pPVPRoom->LinkParty( pBaseParty1->GetPartyKey() ); BaseParty *pBaseParty2 = CreateParty( pMaster2->GetPlayerKey(), ePARTY_FIELD ); pPVPRoom->Link2ndParty( pBaseParty2->GetPartyKey() ); // ÆÀº°·Î ÆÄƼ¸¦ ¹èÁ¤ÇÑ´Ù. pBaseParty1, pBaseParty2 static JoinPartyOperator Opr; Opr.Init( eUSER_OPERATOR_JOINPARTY_PVPROOM, pBaseParty1->GetPartyKey(), pBaseParty2->GetPartyKey() ); Opr.SetPVPRoomTeam( pMaster->GetTeam(), pMaster2->GetTeam() ); pLobbyRoom->Foreach( Opr ); } }break; case eZONETYPE_INSTANCE: { BOOST_STATIC_ASSERT( INDUN_KIND_MAX == 7 ); // Ãß°¡ ŸÀÔ Á¸Àç½Ã ÇÏ´Ü ³»¿ë Ãß°¡ÇÒ °Í InstanceDungeon* const pInstanceDungeon = static_cast(pCreateZone); switch( pInstanceDungeon->GetDungeonType() ) { case INDUN_KIND_TOP_OF_TRIAL: case INDUN_KIND_100LEVEL_QUEST: case INDUN_KIND_EXT_03: case INDUN_KIND_EXT_04: case INDUN_KIND_MAYA_SCROLL: { // ÀνºÅϽº ´øÀüÀº ¹«Á¶°Ç ÆÄƼ¸¦ ¸Î°í ½ÃÀÛÇÏ´Â °ÍÀ¸·Î ÇÑ´Ù. ÇöÀç ÆÄÆ¼°¡ ¾ø´Ù´Â °ÍÀº 1ÀÎ ÆÄƼ¸¦ ÀǹÌÇÏ°Ô µÈ´Ù. // ÆÄƼ¸¦ ¸ÎÁö ¾Ê¾Æµµ µÇÁö¸¸ °ÔÀÓ·ÎÁ÷ 󸮽à ÆÄƼÀ§ÁÖÀÇ Ã³¸®°¡ ¸¹À¸¹Ç·Î ¹«Á¶°Ç ÆÄƼ¸¦ ¸Î°ÔÇÏ´Â °ÍÀÌ ¹ö±×°¡ ¾ø´Ù. if( !pBaseParty ) { pBaseParty = CreateParty( pMaster->GetPlayerKey(), ePARTY_FIELD ); static JoinPartyOperator Opr; Opr.Init( eUSER_OPERATOR_JOINPARTY, pBaseParty->GetPartyKey() ); Opr( pMaster ); } pCreateZone->LinkParty( pBaseParty->GetPartyKey() ); // (WAVERIX) (090624) (CHANGES) ±âÁ¸ ·ÎÁ÷ÀÇ ¹®Á¦Á¡ ÇØ°á ¸ñÀû: // insert AgentPartyManager::AddRelayUser AgentPartyManager::Instance()->AddRelayUser(pInstanceDungeon); g_ZoneManager.ChangeBattlePlayersCount(pInstanceDungeon, pInstanceDungeon->GetNumberOfExpectedPlayers()); } break; case INDUN_KIND_SS_QUEST: { // Ÿ¶ôÇÑ»ç¿øÀº À¯Àú°¡ »ý¼ºÇÏ´Â °ÍÀÌ ¾Æ´Ï´Ù. ÇØÅ· or ¹ö±× °¡´É¼º °æ°í! SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::CreateZone] CurZone[%u] INDUN_KIND_SS_QUEST Can't be Created!", pCurZone->GetType() ); }break; // _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND case INDUN_KIND_CHAOS_ZONE: { SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::CreateZone] CurZone[%u] INDUN_KIND_CHAOS_ZONE Can't be Created!", pCurZone->GetType() ); }break; default: { // ¿¹»óÇÏÁö ¸øÇÑ Á¸Å¸ÀÔÀ̶ó°í °æ°í ¸Þ¼¼Áö¸¦ ³²±ä´Ù. SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::CreateZone] Invalid CurZone[%u] DungeonType[%u]!", pCurZone->GetType(), pInstanceDungeon->GetDungeonType() ); } } }break; case eZONETYPE_VILLAGE: case eZONETYPE_CHARSELECT: case eZONETYPE_QUEST: case eZONETYPE_EVENT: case eZONETYPE_GUILD: case eZONETYPE_SIEGE: case eZONETYPE_FIELD: case eZONETYPE_TUTORIAL_FIELD: case eZONETYPE_DOMINATION_FIELD: case eZONETYPE_SPA_FIELD: break; default: { // ¿¹»óÇÏÁö ¸øÇÑ Á¸Å¸ÀÔÀ̶ó°í °æ°í ¸Þ¼¼Áö¸¦ ³²±ä´Ù. SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::CreateZone] Invalid CurZone[%u] CreateZone[%u]!", pCurZone->GetType(), pCreateZone->GetType() ); } } } //{__NA1279_1281_090209_TIMELINE_QUEST_BASED_MISSION__ VOID AgentPartyManager::EnterZoneByPortal(PORTALKEY portalKey, User* pUser, ZoneInterface* pCurZone, ZoneInterface* pToCreateZone) { // (WAVERIX) (WARNING) // ¹æÀÌ »ý¼ºµÉ ¶§, ÆÄƼ¸¦ »ý¼ºÇÏÁö´Â ¾Ê´Â´Ù. À¯Àú°¡ ÃÖÃÊ ÀÔÀåÇÒ ¶§ »ý¼ºÇÑ´Ù. // ±âÁ¸ ÆÄƼ ±¸¼º (¿¹: ÆÄƼÀå)À» À¯ÁöÇÏ·Á¸é º°µµ 󸮵µ °í¹ÎÇØ¾ß ÇÑ´Ù. eZONETYPE toZoneType = pToCreateZone->GetType(); switch(toZoneType) { case eZONETYPE_MISSION: case eZONETYPE_INSTANCE: { DWORD playerKey = pUser->GetPlayerKey(); WORD partyKey = pUser->GetPartyState().GetPartyKey(); if(partyKey) LeaveParty(pUser, eREASON_LEAVE_PARTY_NOREASON); WORD linkedPartyKey = pToCreateZone->GetLinkParty(); BaseParty* pLinkedParty = 0; if(linkedPartyKey == 0) { pLinkedParty = CreateParty(playerKey, ePARTY_FIELD); linkedPartyKey = pLinkedParty->GetPartyKey(); pToCreateZone->LinkParty(linkedPartyKey); } else { pLinkedParty = FindEditableParty(linkedPartyKey); } JoinParty(linkedPartyKey, pUser); //// ¼¼¼Çº° ÆÄƼ¿ø ¸®½ºÆ®¸¦ °»½ÅÇÑ´Ù. //ServerSession* pSession = pToCreateZone->GetLinkedServer(); //if(pSession) //{ // AgentParty* pLinkedPartyInAgent = static_cast(pLinkedParty); // AddMemberToSession(pLinkedPartyInAgent, // pSession->GetSessionIndex(), // pUser); //} } break; default: ASSERT(!"Unexpected Status, Check Constraints in caller"); break; } } //}__NA1279_1281_090209_TIMELINE_QUEST_BASED_MISSION__ // VOID AgentPartyManager::DestroyZone( ZoneInterface *pZone ) // ¹æÀÌ ÆÄ±«µÉ ¶§ ¸µÅ©µÈ ÆÄƼµµ Á¤¸®¸¦ ÇØÁشٴ °³³äÀε¥ // ¾îÂ÷ÇÇ ÆÄƼ¸¦ »ý¼ºÇϸé À¯Àú¸¦ ÅëÇØ ÆÄƼ°¡ Á¦¾îµÈ´Ù. ¹æÀ» ³ª°¡¸é Å»Åð, µé¾î¿À¸é Á¶ÀÎ, ¸ðµÎ ³ª°¡¸é ÆÄƼ´Â ÀÚµ¿À¸·Î ¼Ò¸êµÉ °ÍÀÌ´Ù. VOID AgentPartyManager::MigrateCHuntingRoom( User *pMaster, ZoneInterface *pCurZone, ZoneInterface *pEnterZone ) { BaseParty *pBaseParty = FindEditableParty( pMaster->GetPartyState().GetPartyKey() ); CHuntingRoom *pCHuntingRoom = (CHuntingRoom*)pEnterZone; // ÀÌÀü¿¡ ¸Î°í µé¾î¿Â ÆÄƼ´Â ÆÄ±«ÇÑ´Ù. if( pBaseParty ) { // ÇØÅ· °¡´É¼º °æ°í! SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::MigrateCHuntingRoom] CurZone[%u] EnterZone[%u] Party[%u] Already exist!", pCurZone->GetType(), pEnterZone->GetType(), pBaseParty->GetMemberNum() ); DestroyParty( pBaseParty->GetPartyKey() ); } // »õ·Î ÆÄƼ¸¦ »ý¼ºÇÑ´Ù. pBaseParty = CreateParty( pMaster->GetPlayerKey(), ePARTY_FIELD ); pCHuntingRoom->Link2ndParty( pBaseParty->GetPartyKey() ); static JoinPartyOperator Opr; Opr.Init( eUSER_OPERATOR_JOINPARTY, pBaseParty->GetPartyKey() ); pCurZone->Foreach( Opr ); } VOID AgentPartyManager::EnterZone( User *pUser, ZoneInterface *pEnterZone ) { AgentParty *pAgentParty = (AgentParty*)FindEditableParty( pUser->GetPartyState().GetPartyKey() ); //_NA_20110630_BATTLE_ZONE_RENEWAL if (pAgentParty) { NotifyMemberMoveArea(pUser, pEnterZone->GetMapCode()); } // Á¸¿¡µû¶ó ÆÄƼ 󸮸¦ ´Ù¸£°Ô ÇÑ´Ù. switch( pEnterZone->GetType() ) { case eZONETYPE_LOBBY: { if( pAgentParty ) { // ·Îºñ¿¡¼­´Â ÆÄƼ¸¦ À¯ÁöÇÏÁö ¾Ê´Â´Ù. LeaveParty( pUser, eREASON_LEAVE_PARTY_NOREASON ); } }break; case eZONETYPE_MISSION: case eZONETYPE_HUNTING: case eZONETYPE_CHUNTING: { if( pAgentParty ) { if( pEnterZone->GetLinkedServer() ) { // ¼¼¼Çº° ÆÄƼ¿ø ¸®½ºÆ®¸¦ °»½ÅÇÑ´Ù. AddMemberToSession( pAgentParty, pEnterZone->GetLinkedServer()->GetSessionIndex(), pUser ); } } else { // ÆÄƼ°¡ ¾ø´Â °Í¿¡ ´ëÇØ ÇØÅ· or ¹ö±× °¡´É¼º °æ°í! SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::EnterZone] ZoneType[%u] Party doesn't exist!", pEnterZone->GetType() ); } }break; case eZONETYPE_INSTANCE: { BOOST_STATIC_ASSERT( INDUN_KIND_MAX == 7 ); // Ãß°¡ ŸÀÔ Á¸Àç½Ã ÇÏ´Ü ³»¿ë Ãß°¡ÇÒ °Í InstanceDungeon* const pInstanceDungeon = static_cast(pEnterZone); switch( pInstanceDungeon->GetDungeonType() ) { case INDUN_KIND_TOP_OF_TRIAL: case INDUN_KIND_100LEVEL_QUEST: case INDUN_KIND_EXT_03: case INDUN_KIND_EXT_04: case INDUN_KIND_MAYA_SCROLL: // _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND case INDUN_KIND_CHAOS_ZONE: { if( pAgentParty ) { if( pEnterZone->GetLinkedServer() ) { // ¼¼¼Çº° ÆÄƼ¿ø ¸®½ºÆ®¸¦ °»½ÅÇÑ´Ù. AddMemberToSession( pAgentParty, pEnterZone->GetLinkedServer()->GetSessionIndex(), pUser ); } } else { // ÆÄƼ°¡ ¾ø´Â °Í¿¡ ´ëÇØ ÇØÅ· or ¹ö±× °¡´É¼º °æ°í! // ÀÚÀ¯ÀüÅõ½Ç¿¡¼± ÇØ´ç ·Î±×¸¦ ¶ç¿ï Çʿ䰡 ¾ø´Ù(ÆÄƼ»óÅ·ΠÀÔÀåÀÌ Àǹ«°¡ ¾Æ´Ô.) // ÀÏÀÏ ±æµå¹Ì¼Ç¿¡¼± ÇØ´ç ·Î±×¸¦ ¶ç¿ï Çʿ䰡 ¾ø´Ù(ÆÄƼ»óÅ·ΠÀÔÀåÀÌ Àǹ«°¡ ¾Æ´Ô.) if (pEnterZone->GetMapCode() != 40051 /*ÀÚÀ¯ÀüÅõ½Ç*/) { if(pEnterZone->GetMapCode() != 76 /*ÀÏÀϱæµå¹Ì¼Ç*/) { SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::EnterZone] ZoneType[%u] MapCode[%d] Party doesn't exist!", pEnterZone->GetType(), pEnterZone->GetMapCode()); } } } }break; case INDUN_KIND_SS_QUEST: { // Ÿ¶ôÇÑ»ç¿øÀº ÆÄƼ¾øÀÌ µé¾î¿Â´Ù. if( pAgentParty ) { // ÇØÅ· °¡´É¼º °æ°í! SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::EnterZone] DungeonType[%u] Party[%u] Already exist!", pInstanceDungeon->GetDungeonType(), pAgentParty->GetMemberNum() ); DestroyParty( pAgentParty->GetPartyKey() ); } }break; default: { // ¿¹»óÇÏÁö ¸øÇÑ Á¸Å¸ÀÔÀ̶ó°í °æ°í ¸Þ¼¼Áö¸¦ ³²±ä´Ù. SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::EnterZone] Invalid DungeonType[%u]!", pInstanceDungeon->GetDungeonType() ); } } }break; case eZONETYPE_VILLAGE: case eZONETYPE_QUEST: case eZONETYPE_EVENT: case eZONETYPE_GUILD: case eZONETYPE_FIELD: case eZONETYPE_SIEGE: case eZONETYPE_PVP: case eZONETYPE_TUTORIAL_FIELD: case eZONETYPE_DOMINATION_FIELD: case eZONETYPE_SPA_FIELD: { if( pAgentParty ) { if( pEnterZone->GetLinkedServer() ) { // ¼¼¼Çº° ÆÄƼ¿ø ¸®½ºÆ®¸¦ °»½ÅÇÑ´Ù. AddMemberToSession( pAgentParty, pEnterZone->GetLinkedServer()->GetSessionIndex(), pUser ); } } }break; case eZONETYPE_CHARSELECT: if( pAgentParty ) { LeaveParty( pUser, eREASON_LEAVE_PARTY_NOREASON ); } break; default: { // ¿¹»óÇÏÁö ¸øÇÑ Á¸Å¸ÀÔÀ̶ó°í °æ°í ¸Þ¼¼Áö¸¦ ³²±ä´Ù. SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::EnterZone] Invalid ZoneType[%u]!", pEnterZone->GetType() ); } } } VOID AgentPartyManager::LeaveZone(User* user, ZoneInterface* leave_zone) { WORD party_key = user->GetPartyState().GetPartyKey(); AgentParty* party = static_cast(FindEditableParty(party_key)); if (party == NULL) { SUNLOG(eCRITICAL_LOG, __FUNCTION__" : Not found party : %d", party_key); return; } eZONETYPE from_zone_type; eZONETYPE to_zone_type; DWORD to_link_server_index; user->GetMoveZoneType(from_zone_type, to_zone_type, to_link_server_index); switch (leave_zone->GetType()) { case eZONETYPE_LOBBY://Lobby -> To Zone { switch( to_zone_type ) { case eZONETYPE_MISSION: case eZONETYPE_HUNTING: case eZONETYPE_CHUNTING: case eZONETYPE_PVP: { if (leave_zone->GetLinkedServer()) { // ¼¼¼Çº° ÆÄƼ¿ø ¸®½ºÆ®¸¦ °»½ÅÇÑ´Ù. RemoveMemberToSession(party, leave_zone->GetLinkedServerIndex(), to_link_server_index, user); } } break; case eZONETYPE_VILLAGE: case eZONETYPE_CHARSELECT: case eZONETYPE_QUEST: case eZONETYPE_EVENT: case eZONETYPE_GUILD: case eZONETYPE_FIELD: case eZONETYPE_SIEGE: case eZONETYPE_TUTORIAL_FIELD: case eZONETYPE_DOMINATION_FIELD: case eZONETYPE_SPA_FIELD: { LeaveParty(user, eREASON_LEAVE_PARTY_INTEND); } break; case eZONETYPE_INSTANCE: { SUNLOG(eCRITICAL_LOG, __FUNCTION__" : Can't move From Lobby To instance zone" ); DestroyParty(party->GetPartyKey()); } break; default: { SUNLOG(eCRITICAL_LOG, __FUNCTION__ " : Invalid Zone Type from lobby", to_zone_type ); } } }break; case eZONETYPE_MISSION: case eZONETYPE_HUNTING: case eZONETYPE_CHUNTING: case eZONETYPE_PVP: { if (party->GetType() == ePARTY_FIELD) { LeaveParty( user, eREASON_LEAVE_PARTY_INTEND ); } if (leave_zone->GetLinkedServer()) { RemoveMemberToSession(party, leave_zone->GetLinkedServerIndex(), to_link_server_index, user); } } break; case eZONETYPE_INSTANCE: { BOOST_STATIC_ASSERT( INDUN_KIND_MAX == 7 ); // Ãß°¡ ŸÀÔ Á¸Àç½Ã ÇÏ´Ü ³»¿ë Ãß°¡ÇÒ °Í InstanceDungeon* const pInstanceDungeon = static_cast(leave_zone); switch( pInstanceDungeon->GetDungeonType() ) { case INDUN_KIND_TOP_OF_TRIAL: case INDUN_KIND_100LEVEL_QUEST: case INDUN_KIND_EXT_03: case INDUN_KIND_EXT_04: case INDUN_KIND_MAYA_SCROLL: { if (party->GetType() == ePARTY_FIELD) { LeaveParty( user, eREASON_LEAVE_PARTY_INTEND ); } }break; case INDUN_KIND_SS_QUEST: { // Ÿ¶ôÇÑ»ç¿øÀº ÆÄƼ¾øÀÌ µé¾î¿Â´Ù. °æ°í ¸Þ¼¼Áö¸¦ ³²±ä´Ù. SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::LeaveZone] DungeonType[%u] Party[%u] Already exist!", pInstanceDungeon->GetDungeonType(), party->GetMemberNum() ); DestroyParty(party->GetPartyKey()); }break; // _NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND case INDUN_KIND_CHAOS_ZONE: { LeaveParty(user, eREASON_LEAVE_PARTY_INTEND); }break; default: { // ¿¹»óÇÏÁö ¸øÇÑ Á¸Å¸ÀÔÀ̶ó°í °æ°í ¸Þ¼¼Áö¸¦ ³²±ä´Ù. SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::LeaveZone] Invalid DungeonType[%u]!", pInstanceDungeon->GetDungeonType() ); } } if (leave_zone->GetLinkedServer()) { RemoveMemberToSession(party, leave_zone->GetLinkedServerIndex(), to_link_server_index, user); } }break; case eZONETYPE_VILLAGE: case eZONETYPE_CHARSELECT: case eZONETYPE_QUEST: case eZONETYPE_EVENT: case eZONETYPE_GUILD: case eZONETYPE_FIELD: case eZONETYPE_SIEGE: case eZONETYPE_TUTORIAL_FIELD: case eZONETYPE_DOMINATION_FIELD: case eZONETYPE_SPA_FIELD: { // ij¸¯ÅÍ ¼±ÅÃÈ­¸éÀ¸·Î °¥ ¶§¸¦ Á¦¿ÜÇÏ°í ±âÁ¸ ÆÄƼ À¯Áö! if( to_zone_type == eZONETYPE_CHARSELECT ) { LeaveParty( user, eREASON_LEAVE_PARTY_INTEND ); } else if(leave_zone->GetLinkedServer() ) { // ¼¼¼Çº° ÆÄƼ¿ø ¸®½ºÆ®¸¦ °»½ÅÇÑ´Ù. RemoveMemberToSession(party, leave_zone->GetLinkedServerIndex(), to_link_server_index, user); } }break; default: { // ¿¹»óÇÏÁö ¸øÇÑ Á¸Å¸ÀÔÀ̶ó°í °æ°í ¸Þ¼¼Áö¸¦ ³²±ä´Ù. SUNLOG( eCRITICAL_LOG, "[AgentPartyManager::LeaveZone] Invalid ZoneType[%u]!", leave_zone->GetType() ); } } }