#include "StdAfx.h" #include "Handler_AG_CHAO.h" #include #include "Player.h" #include #include "ChaoState.h" //-------------------------------------------------------------------------------------------------- // changes, f100819.1L const nsPacket::PacketHandlerInfo Handler_AG_CHAO::GetPacketHandlerNodes() { #define HANDLER_NODE_INFO(c, p, phase) { MAKEWORD(c, p), phase, Handler_AG_CHAO::On##p } #define HANDLER_NODE_INFO_EOR() { 0, static_cast(0), NULL } static const nsPacket::PacketHandlerNode handlers_static_[] = { HANDLER_NODE_INFO(AG_CHAO, AG_CHAO_REQUEST_REVENGEINFO_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(AG_CHAO, AG_CHAO_REQUEST_REVENGEINFO_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(AG_CHAO, AG_CHAO_REMOVE_REVENGE_CHAR_CMD, PHASE_SERVICE), HANDLER_NODE_INFO(AG_CHAO, AG_CHAO_REMOVE_REVENGE_CHAR_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(AG_CHAO, AG_CHAO_REMOVE_REVENGE_CHAR_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(AG_CHAO, AG_CHAO_ADD_REVENGE_CHAR_ACK, PHASE_SERVICE), HANDLER_NODE_INFO(AG_CHAO, AG_CHAO_ADD_REVENGE_CHAR_NAK, PHASE_SERVICE), HANDLER_NODE_INFO(AG_CHAO, AG_CHAO_TRACK_REVENGE_CHAR_ACK, 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; }; //-------------------------------------------------------------------------------------------------- // ¸®º¥Áö Á¤º¸ Handler_AG_CHAO_IMPL( AG_CHAO_REQUEST_REVENGEINFO_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AG_CHAO_REQUEST_REVENGEINFO_ACK *pRecvMsg = (MSG_AG_CHAO_REQUEST_REVENGEINFO_ACK*)pMsg; Player *pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return; if( pRecvMsg->m_byRevengeStatNum > MAX_REVENGE_STAT_NUM ) { SUNLOG( eCRITICAL_LOG, "[AG_CHAO_REQUEST_REVENGEINFO_ACK] Invalid m_byRevengeStatNum[%d]", pRecvMsg->m_byRevengeStatNum ); return; } // ¸®º¥Áö Á¤º¸ ÀúÀå pPlayer->GetChaoState().ClearBadFriend(); for( int i = 0; i < pRecvMsg->m_byRevengeStatNum; ++i ) { STRUCT_REVENGE_INFO & sRevengeInfo = pRecvMsg->m_sRevengeUserInfo[i]; pPlayer->GetChaoState().AddBadFriend( sRevengeInfo ); } } Handler_AG_CHAO_IMPL( AG_CHAO_REQUEST_REVENGEINFO_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AG_CHAO_REQUEST_REVENGEINFO_NAK *pRecvMsg = (MSG_AG_CHAO_REQUEST_REVENGEINFO_NAK*)pMsg; // SUNLOG( eCRITICAL_LOG, "[AG_CHAO_REQUEST_REVENGEINFO_NAK] CharGuid[%d] ErrorCode[%d]", pRecvMsg->m_dwCharGuid, pRecvMsg->m_byErrorCode ); } // ¸®º¥Áö ´ë»ó »èÁ¦(Ŭ¶óÀÌ¾ðÆ®°¡ »èÁ¦ÇßÀ» ¶§) Handler_AG_CHAO_IMPL( AG_CHAO_REMOVE_REVENGE_CHAR_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AG_CHAO_REMOVE_REVENGE_CHAR_CMD *pRecvMsg = (MSG_AG_CHAO_REMOVE_REVENGE_CHAR_CMD*)pMsg; Player *pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return; pPlayer->GetChaoState().RemoveBadFriend( pRecvMsg->m_dwRevengeCharGuid ); } // ¸®º¥Áö ´ë»ó ÇѸí Á¦°Å(PK¸¦ ÅëÇØ Á¦°ÅÇßÀ» ¶§) Handler_AG_CHAO_IMPL( AG_CHAO_REMOVE_REVENGE_CHAR_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AG_CHAO_REMOVE_REVENGE_CHAR_ACK *pRecvMsg = (MSG_AG_CHAO_REMOVE_REVENGE_CHAR_ACK*)pMsg; Player *pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return; pPlayer->GetChaoState().RemoveBadFriend( pRecvMsg->m_dwRevengeCharGuid ); } Handler_AG_CHAO_IMPL( AG_CHAO_REMOVE_REVENGE_CHAR_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AG_CHAO_REMOVE_REVENGE_CHAR_NAK *pRecvMsg = (MSG_AG_CHAO_REMOVE_REVENGE_CHAR_NAK*)pMsg; SUNLOG( eCRITICAL_LOG, "[AG_CHAO_REMOVE_REVENGE_CHAR_NAK] CharGuid[%d] ErrorCode[%d]", pRecvMsg->m_dwCharGuid, pRecvMsg->m_byErrorCode ); } // ¸®º¥Áö ´ë»ó Ãß°¡ Handler_AG_CHAO_IMPL( AG_CHAO_ADD_REVENGE_CHAR_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AG_CHAO_ADD_REVENGE_CHAR_ACK *pRecvMsg = (MSG_AG_CHAO_ADD_REVENGE_CHAR_ACK*)pMsg; Player *pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return; STRUCT_REVENGE_INFO RevengeInfo; RevengeInfo.dwRevengeCharGuid = pRecvMsg->m_dwRevengeCharGuid; _tcsncpy( RevengeInfo.sPacketInfo.ptszRevengeName, pRecvMsg->m_ptszRevengeName, MAX_CHARNAME_LENGTH ); RevengeInfo.sPacketInfo.ptszRevengeName[MAX_CHARNAME_LENGTH] = '\0'; pPlayer->GetChaoState().AddBadFriend( RevengeInfo ); } Handler_AG_CHAO_IMPL( AG_CHAO_ADD_REVENGE_CHAR_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AG_CHAO_ADD_REVENGE_CHAR_NAK *pRecvMsg = (MSG_AG_CHAO_ADD_REVENGE_CHAR_NAK*)pMsg; SUNLOG( eCRITICAL_LOG, "[AG_CHAO_ADD_REVENGE_CHAR_NAK] CharGuid[%d] ErrorCode[%d]", pRecvMsg->m_dwCharGuid, pRecvMsg->m_byErrorCode ); } // ¸®º¥Áö ´ë»ó ÃßÀû ¼º°ø Handler_AG_CHAO_IMPL( AG_CHAO_TRACK_REVENGE_CHAR_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AG_CHAO_TRACK_REVENGE_CHAR_ACK *pRecvMsg = (MSG_AG_CHAO_TRACK_REVENGE_CHAR_ACK*)pMsg; Player *pPlayer = PlayerManager::Instance()->FindPlayerByUserKey( pRecvMsg->m_dwKey ); if( !pPlayer ) return; // º¹¼öÀÇ µ¹ ¾ÆÀÌÅÛÀ» »èÁ¦ÇÑ´Ù. pPlayer->GetChaoState().DeleteRevengeStone( pRecvMsg->m_atItemPos ); }