#include "stdafx.h" #include ".\Handler_CG_PARTY.h" #include #include #include "Field.h" #include "FieldServer.h" #include "Map.h" #include "Player.h" #include #include "SkillInfoParser.h" #include "GameZone.h" #include "GameParty/NewGamePartyManager.h" Handler_CG_PARTY::Handler_CG_PARTY() { } Handler_CG_PARTY::~Handler_CG_PARTY() { } //-------------------------------------------------------------------------------------------------- // changes, f100819.1L const nsPacket::PacketHandlerInfo Handler_CG_PARTY::GetPacketHandlerNodes() { #define HANDLER_NODE_INFO(c, p, phase) { MAKEWORD(c, p), phase, Handler_CG_PARTY::On##p } #define HANDLER_NODE_INFO_EOR() { 0, static_cast(0), NULL } static const nsPacket::PacketHandlerNode handlers_static_[] = { HANDLER_NODE_INFO(CG_PARTY, CG_PARTY_MEMBER_WARP_REQ_SYN, PHASE_SERVICE), HANDLER_NODE_INFO(CG_PARTY, CG_PARTY_MEMBER_SUMMON_REQ_SYN, PHASE_SERVICE), HANDLER_NODE_INFO(CG_PARTY, CG_PARTY_MEMBER_SUMMON_RES_SYN, PHASE_SERVICE), HANDLER_NODE_INFO_EOR() // end of records }; // BOOST_STATIC_ASSERT(_countof(handlers_static_) >= 1); nsPacket::PacketHandlerInfo return_value = { handlers_static_, _countof(handlers_static_) - 1 }; // return return_value; }; //-------------------------------------------------------------------------------------------------- VOID Handler_CG_PARTY::OnCG_PARTY_MEMBER_WARP_REQ_SYN( ServerSession * pServerSession, MSG_BASE* pMsg, WORD wSize ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_CG_PARTY_MEMBER_WARP_REQ_SYN * pRecvMsg = (MSG_CG_PARTY_MEMBER_WARP_REQ_SYN *)pMsg; Player *pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return ; if( !pPlayer->GetField() ) { SUNLOG( eCRITICAL_LOG, "[Handler_CG_PARTY::OnCG_PARTY_MEMBER_WARP_REQ_SYN] Not Exist GameField" ); return; } RC::ePARTY_RESULT rcResult = RC::RC_PARTY_SUCCESS; // ÇØ´ç ½ºÅ³ÀÌ Á¸ÀçÇÏ´ÂÁö üũ SkillScriptInfo *pBaseSkillInfo = SkillInfoParser::Instance()->GetSkillInfo( eACTION_START_SKILL_CODE + eACTION_PARTY_MEMBER_WARP ); if( !pBaseSkillInfo ) { rcResult = RC::RC_PARTY_SKILLINFO_IS_NULL; goto RESULT_ERROR; } // ÄðŸÀÓÀ» üũÇÑ´Ù. util::Timer * pTimer = pPlayer->GetSkillCoolTimer( pBaseSkillInfo->m_SkillCode ); if(!pTimer) { rcResult = RC::RC_PARTY_COOLTIME_ERROR; goto RESULT_ERROR; } if( !pTimer->IsExpired( FALSE ) ) { rcResult = RC::RC_PARTY_COOLTIME_ERROR; goto RESULT_ERROR; } GameZone *pZone = pPlayer->GetGameZonePtr(); if( !pZone ) { rcResult = RC::RC_PARTY_INVALID_ZONESTATE; goto RESULT_ERROR; } // Á¶°ÇÀÌ ¸ÂÀ¸¸é ¿öÇÁ½ÃŲ´Ù. rcResult = pZone->WarpAtPartyMaster( pPlayer ); if( rcResult == RC::RC_PARTY_SUCCESS ) { // ÄðŸÀÓ ¸®¼Â pTimer->Reset(); return; } RESULT_ERROR: MSG_CG_PARTY_MEMBER_WARP_REQ_NAK NakMsg; NakMsg.m_byErrorCode = rcResult; pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) ); } VOID Handler_CG_PARTY::OnCG_PARTY_MEMBER_SUMMON_REQ_SYN( ServerSession * pServerSession, MSG_BASE* pMsg, WORD wSize ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_CG_PARTY_MEMBER_SUMMON_REQ_SYN * pRecvMsg = (MSG_CG_PARTY_MEMBER_SUMMON_REQ_SYN *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return ; if( !pPlayer->GetField() ) { SUNLOG( eCRITICAL_LOG, "[Handler_CG_PARTY::OnCG_PARTY_MEMBER_SUMMON_REQ_SYN] Not Exist GameField" ); return; } RC::ePARTY_RESULT rcResult = RC::RC_PARTY_SUCCESS; // ÇØ´ç ½ºÅ³ÀÌ Á¸ÀçÇÏ´ÂÁö üũ SkillScriptInfo *pBaseSkillInfo = SkillInfoParser::Instance()->GetSkillInfo( eACTION_START_SKILL_CODE + eACTION_PARTY_MEMBER_SUMMON ); if( !pBaseSkillInfo ) { rcResult = RC::RC_PARTY_SKILLINFO_IS_NULL; goto RESULT_ERROR; } // ÄðŸÀÓÀ» üũÇÑ´Ù. util::Timer * pTimer = pPlayer->GetSkillCoolTimer( pBaseSkillInfo->m_SkillCode ); if(!pTimer) { rcResult = RC::RC_PARTY_COOLTIME_ERROR; goto RESULT_ERROR; } if( !pTimer->IsExpired( FALSE ) ) { rcResult = RC::RC_PARTY_COOLTIME_ERROR; goto RESULT_ERROR; } GameZone *pZone = pPlayer->GetGameZonePtr(); if( !pZone ) { rcResult = RC::RC_PARTY_INVALID_ZONESTATE; goto RESULT_ERROR; } // ÆÄƼÀå ±Ùó·Î ¼Òȯ ¿äû rcResult = pZone->SummonReqAtPartyMaster( pPlayer, pRecvMsg->m_dwObjKey ); if( rcResult == RC::RC_PARTY_SUCCESS ) { // ÄðŸÀÓ ¸®¼Â pTimer->Reset(); return; } RESULT_ERROR: MSG_CG_PARTY_MEMBER_SUMMON_REQ_NAK NakMsg; NakMsg.m_byErrorCode = rcResult; pPlayer->SendPacket( &NakMsg, sizeof(NakMsg) ); } VOID Handler_CG_PARTY::OnCG_PARTY_MEMBER_SUMMON_RES_SYN( ServerSession * pServerSession, MSG_BASE* pMsg, WORD wSize ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_CG_PARTY_MEMBER_SUMMON_RES_SYN * pRecvMsg = (MSG_CG_PARTY_MEMBER_SUMMON_RES_SYN *)pMsg; Player * pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return ; if( !pPlayer->GetField() ) { SUNLOG( eCRITICAL_LOG, "[Handler_CG_PARTY::OnCG_PARTY_MEMBER_SUMMON_RES_SYN] Not Exist GameField" ); return; } RC::ePARTY_RESULT rcResult = (RC::ePARTY_RESULT)pRecvMsg->m_byResultCode; // »ó´ë¹æÀÌ ¼ö¶ôÇÑ °æ¿ì if( rcResult == RC::RC_PARTY_SUCCESS ) { GameZone *pZone = pPlayer->GetGameZonePtr(); if( pZone ) { // ÆÄƼÀå ±Ùó·Î ¿öÇÁ½ÃŲ´Ù. rcResult = pZone->WarpAtPartyMaster( pPlayer ); } else rcResult = RC::RC_PARTY_INVALID_ZONESTATE; } if( rcResult != RC::RC_PARTY_SUCCESS ) { Player *pMasterPlayer = NewGamePartyManager::Instance()->FindMasterPlayer( pPlayer->GetPartyState().GetPartyKey() ); if( !pMasterPlayer ) return ; MSG_CG_PARTY_MEMBER_SUMMON_RES_NAK NakMsg; NakMsg.m_byErrorCode = rcResult; pMasterPlayer->SendPacket( &NakMsg, sizeof(NakMsg) ); } }