#include "stdafx.h" #include "Handler_FromDBProxy.h" #include "../SolarShop/ShopDefine.h" // (WAVERIX) (090816) (NOTE) ÀûÀýÈ÷ ¼öÁ¤ÇÒ °Í. #include "PacketHandler.Shared.h" #ifdef _NA_0_20110329_GAMEOPTION_SETTING #include "Function/GameOptionManager.h" #endif //_NA_0_20110329_GAMEOPTION_SETTING #include #undef ADD_HANDLER_INFO_EOR #undef ADD_HANDLER_INFO #define ADD_HANDLER_INFO_EOR() { MAKEWORD(0, 0), PHASE_NOACTION, (PH_fnHandler)NULL } #define ADD_HANDLER_INFO( c, p, accptablePHASE ) \ { MAKEWORD(c, p), (ePHASE_SHIFT)(accptablePHASE), (PH_fnHandler)&Handler_AD::On##p } sPACKET_HANDLER_INFO* Handler_AD::GetHandlerInfo() { static sPACKET_HANDLER_INFO s_pHandlerInfo[] = { ADD_HANDLER_INFO(AD_CONNECTION, AD_CONNECTION_GROUND_CMD, PHASE_UNLIMITED), ADD_HANDLER_INFO(AD_CONNECTION, AD_CONNECTION_DBCONNECT_UPDATE_CMD, PHASE_UNLIMITED), ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARINFO_CHARLISTREQ_ACK, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARINFO_CHARLISTREQ_NAK, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARINFO_CREATE_ACK, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARINFO_CREATE_NAK, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARINFO_DESTROY_ACK, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARINFO_DESTROY_NAK, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARINFO_RECOVER_ACK, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARINFO_RECOVER_NAK, PHASE_UNLIMITED ), #ifdef __NA_001044_ADD_CUSTOM_UI ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARINFO_CHECK_CHARACTERID_ACK, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARINFO_CHECK_CHARACTERID_NAK, PHASE_UNLIMITED ), #endif #ifdef __NA000000_SHOP_USERID_50_PASSING_PROC__ ADD_HANDLER_INFO( SERVERCOMMON, SERVERCOMMON_QUERY_CHARINFO_ACK, PHASE_UNLIMITED ), #endif //_KR_0_20091021_FIRENDINVITATION_EXTEND = { ADD_HANDLER_INFO( AD_EVENT, AD_EVENT_INVITATIONR_INSERT_CMD, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_EVENT, AD_EVENT_INVITATEFRIEND_REWARD_LIST_NAK, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_EVENT, AD_EVENT_INVITATEFRIEND_REWARD_LIST_ACK, PHASE_UNLIMITED ), //} #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARNAME_CHANGE_ACK, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_CHARINFO, AD_CHARNAME_CHANGE_NAK, PHASE_UNLIMITED ), #endif #ifdef _NA_0_20110329_GAMEOPTION_SETTING ADD_HANDLER_INFO( AD_ETC, AD_ETC_GAMEOPTION_SELECT_ACK, PHASE_UNLIMITED ), ADD_HANDLER_INFO( AD_ETC, AD_ETC_GAMEOPTION_SELECT_NAK, PHASE_UNLIMITED ), ADD_HANDLER_INFO(AD_ETC, AD_ETC_GAMEOPTION_UPDATE_ACK, PHASE_UNLIMITED), #endif //_NA_0_20110329_GAMEOPTION_SETTING #ifdef _NA004034_20120102_GUILD_POINT_SYSTEM ADD_HANDLER_INFO(AD_ETC, AD_ETC_GUILD_RANKINGINFO_ACK, PHASE_UNLIMITED), ADD_HANDLER_INFO(AD_ETC, AD_ETC_GUILDINFO_ACK, PHASE_UNLIMITED), #endif //_NA004034_20120102_GUILD_POINT_SYSTEM ADD_HANDLER_INFO_EOR(), }; return s_pHandlerInfo; }; VOID Handler_AD::RegisterHandler_ALL( PACKET_HANDLER_DELEGATOR pInstance ) { pInstance->RegisterHandler_( GetHandlerInfo() ); //pInstance->RegisterHandler_( PacketHandlerShared::GetHandlerInfo() ); } // // // #include #include #include #include #include #undef FINDnALIGN_USER #define FINDnALIGN_USER(pUserInstance, UserKey) \ User* pUserInstance = UserManager::Instance()->GetUser( (UserKey) ); \ if( !pUserInstance ) \ { \ SUNLOG( eFULL_LOG, _T("[D2A] Can't Find User %u"), (UserKey) ); \ return; \ } /* SUNLOG( eFULL_LOG, "¾ø´Â À¯Àú¿¡°Ô Á¢¼ÓÇØÁ¦ ¸í·· ÆÐŶÀ» º¸³»·ÁÇÑ´Ù.[ToID:%d]\n", id ); \ */ HANDLER_AD_IMPL(AD_CONNECTION_GROUND_CMD) { __UNUSED((pServerSession, pMsg, wSize)); } HANDLER_AD_IMPL(AD_CONNECTION_DBCONNECT_UPDATE_CMD) { __TOUCHED((pServerSession, pMsg, wSize)); //_NA000000_DBQUERY_REVERSAL_STATE_PREVENTION // first received protocol ... const MSG_AD_CONNECTION_DBCONNECT_UPDATE_CMD* recv_msg = \ static_cast(pMsg); // AgentServer* agent_server = AgentServer::GetInstance(); agent_server->ChangeDBConnectorIndex(recv_msg->db_connector_index_); // MSG_AG_CONNECTION_DBCONNECT_UPDATE_CMD msg_cmd; msg_cmd.db_connector_index_ = recv_msg->db_connector_index_; agent_server->SendToGameServer(&msg_cmd, sizeof(msg_cmd)); } // ±»ÀÌ ¸ðµç Á¤º¸¸¦ AgentÀÇ User¿¡ ÀúÀåÇÒ Çʿ䰡 ¾øÁö ¾ÊÀ»±î? // ¿ì¼± ¸ðµç Á¤º¸¸¦ °¡Áö°í Àִ´Ù! Ȥ½Ã ³ªÁß¿¡ ÇÊ¿äÇÑ Á¤º¸°¡ ÀÖÀ»Áö ¸ð¸¥´Ù. HANDLER_AD_IMPL( AD_CHARINFO_CHARLISTREQ_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARINFO_CHARLISTREQ_ACK* pRecvMsg = (MSG_AD_CHARINFO_CHARLISTREQ_ACK*)pMsg; FINDnALIGN_USER( pUser, pRecvMsg->m_dwKey ); ASSERT( pUser->IsBeginTransaction() ); //------------------------------------------------------------------------------------------- // // ¼­¹ö ¿­¸®°í ù À¯Àú Á¢¼Ó½Ã... MSG_CG_CONNECTION_ENTERSERVER_ACKÀ» Á¤»óÀûÀ¸·Î ¹ÞÁö ¸øÇÏ´Â // Çö»ó ¹æÁö¿ë. ÆÐŶ Àü¼Û ¼ø¼­ ¸ÂÃß±â À§ÇÔ. ÀÓ½ÃÄÚµå { static BOOL bInit = FALSE; // if( !bInit ) { MSG_CG_CONNECTION_HEARTBEAT_SYN msgHB; pUser->SendPacket( &msgHB, sizeof(MSG_CG_CONNECTION_HEARTBEAT_SYN) ); bInit = TRUE; } }; ;{ // to support a client/server time synchronization MSG_CG_CONNECTION_TIME_SYNC_CMD msg_cmd; ZeroMemory(&msg_cmd.sync_node, sizeof(msg_cmd.sync_node)); util::TimeSync::Command_ServerSend(&msg_cmd.sync_node); pUser->SendPacket(&msg_cmd, sizeof(msg_cmd)); }; #ifdef _NA002676_WORLD_SERVER_RENEWAL ;{ MSG_AW_PREPARE_NEW_USER_SYN msg_syn; msg_syn.m_dwKey = pUser->GetUserKey(); msg_syn.dwAuthUserID = pUser->GetAuthID(); msg_syn.dwUserGuid = pUser->GetUserGUID(); ;{ util::StrArrayForUserID& dest = msg_syn.ptszAccountID; _tcsncpy(dest, pUser->GetUserID(), _countof(dest)); dest[_countof(dest) - 1] = _T('\0'); }; ;{ ::strncpy(msg_syn.szClientIP, pUser->GetClientIP(), _countof(msg_syn.szClientIP)); msg_syn.szClientIP[_countof(msg_syn.szClientIP) - 1] = '\0'; }; msg_syn.dwPCRoomID = pUser->GetReservedValue(); msg_syn.byGMGrade = pUser->GetSts(); pUser->SendToWorldServer(&msg_syn, sizeof(msg_syn)); }; #endif //------------------------------------------------------------------------------------------- static SERVER_CHARACTER_PART pCharPartOnRecv[MAX_CHARACTER_LIST_NUM]; static CLIENT_CHARACTER_PART pCharacterListForSend[MAX_CHARACTER_LIST_NUM]; pRecvMsg->ConvertForRecv( pCharPartOnRecv ); BYTE byListNum = pRecvMsg->m_byCount; pUser->SetNumberOfCreatedChars( byListNum ); MSG_CG_CONNECTION_ENTERSERVER_ACK msgACK; msgACK.m_bPVP = AgentServer::GetInstance()->IsPVPMode(); msgACK.m_byCount = byListNum; #ifdef _NA_002050_20110216_ADD_GENDER msgACK.char_slot_size = pRecvMsg->char_slot_size; #endif #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE memset(msgACK.m_ReNameStatus, 0, sizeof(msgACK.m_ReNameStatus)); #endif //BYTE Count=0; for( BYTE i = 0 ; i < byListNum ; ++i ) { SERVER_CHARACTER_PART* pSCharacterPart = &pCharPartOnRecv[i]; BYTE bySlotIndex = pSCharacterPart->m_bySlot; pUser->SerializeCharacterPart( bySlotIndex, *pSCharacterPart, SERIALIZE_STORE ); pUser->SetOccupiedSlot(bySlotIndex, true); // NOTE: f110517.2L, apply changed specifiaction pUser->LoadClientCharacterPart(bySlotIndex, &pCharacterListForSend[i]); #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE msgACK.m_ReNameStatus[i] = pRecvMsg->m_ReNameStatus[i]; #endif } //--------------------------------------------------------------------------------------------- // »óÅ ¼³Á¤ //--------------------------------------------------------------------------------------------- pUser->SetState( CHARACTER_LIST_STATE ); // client·Î Á¤º¸ Àü´Þ pUser->SendPacket( &msgACK, msgACK.ConvertForSend( pCharacterListForSend ) ); pUser->EndTransaction(); //__WAVERIX_HEARTBEAT_CONTROL__ pUser->GetSecureNode().EnableHeartbeats(true); { // __NA000630_070817_MOLA_5th_UPDATE // 1) ÀÌ ½ÃÁ¡¿£ CRYPTED USER LIST¿¡ ¼Ò¼ÓµÇ¾î ÀÖÁö¸¸, INIT»óÅÂÀÌ´Ù. // 2) Çʵå·Î ÀÔÀåÇϱâ Àü±îÁö´Â TRANSACTIONÀ» ¼³Á¤ÇÒ ÇÊ¿ä ÀÖ´Ù. SecurePackNode4User& rSECURE = pUser->GetSecureNode(); sSECURE_FLAG& rSECURE_FLAG = rSECURE.SECURE_FLAG(); rSECURE_FLAG.STATUS.SetStatus( sSECURE_FLAG::STAT_CRYPTED ); rSECURE_FLAG.STATUS.TransEnter(); } MSG_AD_CHARINFO_ADDIN_NTF msgNTF; msgNTF.m_dwKey = pUser->GetUserKey(); msgNTF.m_EncodedSSN.CopyFrom((char*)pUser->GetLastSSNKey()); AgentServer::GetInstance()->SendToDBPServer( &msgNTF, sizeof(msgNTF) ); pUser->ChangeHeIsHereNotificationTimer(true); // NOTE: f110622.2L } HANDLER_AD_IMPL( AD_CHARINFO_CHARLISTREQ_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARINFO_CHARLISTREQ_NAK* pRecvMsg = (MSG_AD_CHARINFO_CHARLISTREQ_NAK*)pMsg; FINDnALIGN_USER( pUser, pRecvMsg->m_dwKey ); MSG_CG_CONNECTION_ENTERSERVER_NAK msgNAK; msgNAK.m_dwErrorCode = pRecvMsg->m_byErrorCode; pUser->SendPacket( &msgNAK, sizeof(msgNAK) ); // ij¸¯ÅÍ ¸®½ºÆ®¸¦ ¹Þ¾Æ ¿ÀÁö ¸øÇÏ¸é ²÷¾î¹ö¸°´Ù. SUNLOG( eCRITICAL_LOG, _T("[AD_CHARINFO_CHARLISTREQ_NAK] [U:%d] Disconnect User (Can't Receive CharacterList)"), pRecvMsg->m_dwKey ); pUser->EndTransaction(); pUser->SetDisconnectCode( RC::RC_DISCONNECT_CANT_RECEIVE_CHAR_LIST_FROM_DBP ); pUser->DisconnectUser(); } HANDLER_AD_IMPL( AD_CHARINFO_CREATE_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARINFO_CREATE_ACK* pRecvMsg = (MSG_AD_CHARINFO_CREATE_ACK*)pMsg; FINDnALIGN_USER( pUser, pRecvMsg->m_dwKey ); static SERVER_CHARACTER_PART rServerCharPartForRecv; static CLIENT_CHARACTER_PART rClientCharInfoForSend; pRecvMsg->ConvertForRecv( rServerCharPartForRecv ); ASSERT( pUser->GetNumberOfCreatedChars() < MAX_CHARACTER_SLOT_NUM ); pUser->SetNumberOfCreatedChars( pUser->GetNumberOfCreatedChars() + 1 ); pUser->SerializeCharacterPart( rServerCharPartForRecv.m_bySlot, rServerCharPartForRecv, SERIALIZE_STORE ); pUser->SetOccupiedSlot(rServerCharPartForRecv.m_bySlot, true); pUser->EndTransaction(); MSG_CG_CHARINFO_CREATE_ACK msgACK; // NOTE: f110517.2L, apply changed specifiaction pUser->LoadClientCharacterPart(rServerCharPartForRecv.m_bySlot, &rClientCharInfoForSend); //ij¸¯ÅÍ »ý¼º ·Î±×ÆÄÀÏ #ifdef _NA_002050_20110216_ADD_GENDER TCHAR log_add_info[MAX_ADDINFO_SIZE]; const int num_of_written = ::_sntprintf(log_add_info, _countof(log_add_info), #ifdef _NA_007750_20141113_WZDAT_MODIFY_LOG _T("Gender:%u,Class:%u"), rServerCharPartForRecv.gender, rServerCharPartForRecv.m_byClass); #else // _NA_007750_20141113_WZDAT_MODIFY_LOG _T("Gender:%u"), rServerCharPartForRecv.gender); #endif // _NA_007750_20141113_WZDAT_MODIFY_LOG assert(num_of_written > 0 && num_of_written < _countof(log_add_info)); log_add_info[num_of_written] = _T('\0'); GAMELOG->CreateCharacter(true, pUser, rServerCharPartForRecv.m_tszCharName, log_add_info); #else GAMELOG->CreateCharacter(true, pUser, rServerCharPartForRecv.m_tszCharName, NULL); #endif pUser->SendPacket( &msgACK, msgACK.ConvertForSend( rClientCharInfoForSend ) ); } HANDLER_AD_IMPL( AD_CHARINFO_CREATE_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARINFO_CREATE_NAK * pRecvMsg = (MSG_AD_CHARINFO_CREATE_NAK *)pMsg; FINDnALIGN_USER( pUser, pRecvMsg->m_dwKey ); pUser->EndTransaction(); MSG_CG_CHARINFO_CREATE_NAK msgNAK; msgNAK.m_dwErrorCode = pRecvMsg->m_dwErrorCode; pUser->SendPacket( &msgNAK, sizeof(msgNAK) ); } HANDLER_AD_IMPL( AD_CHARINFO_DESTROY_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARINFO_DESTROY_ACK* pRecvMsg = (MSG_AD_CHARINFO_DESTROY_ACK*)pMsg; FINDnALIGN_USER( pUser, pRecvMsg->m_dwKey ); ASSERT( pUser->GetNumberOfCreatedChars() > 0 ); // agent dbuser¸®ÆÑÅ丵 ÇϱâÀü±îÁö looping BYTE i = 0; for(; i < MAX_CHARACTER_SLOT_NUM ; ++i ) { if( !pUser->IsValidSlot(i) ) continue; if( pRecvMsg->m_CharGuid == pUser->GetCharGUID(i) ) { BYTE byDeletedSlotIndex = i; //ij¸¯ÅÍ »èÁ¦ ·Î±×ÆÄÀÏ GAMELOG->CreateCharacter(false, pUser, pUser->GetCharName(i), NULL); if( pUser->GetCharLV(byDeletedSlotIndex) >= CHAR_DESTROY_LEVEL ) pUser->SetCharDelChk( byDeletedSlotIndex, 3 ); else { pUser->SetOccupiedSlot(byDeletedSlotIndex, false); pUser->SetNumberOfCreatedChars( pUser->GetNumberOfCreatedChars() - 1 ); } break; } } ASSERT( i != MAX_CHARACTER_SLOT_NUM ); pUser->EndTransaction(); MSG_CG_CHARINFO_DESTROY_ACK msgACK; pUser->SendPacket( &msgACK, sizeof(msgACK) ); } HANDLER_AD_IMPL( AD_CHARINFO_DESTROY_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARINFO_DESTROY_NAK* pRecvMsg = (MSG_AD_CHARINFO_DESTROY_NAK*)pMsg; FINDnALIGN_USER( pUser, pRecvMsg->m_dwKey ); pUser->EndTransaction(); MSG_CG_CHARINFO_DESTROY_NAK msgNAK; msgNAK.m_dwErrorCode = pRecvMsg->m_dwErrorCode; pUser->SendPacket( &msgNAK, sizeof(msgNAK) ); } HANDLER_AD_IMPL( AD_CHARINFO_RECOVER_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARINFO_RECOVER_ACK* pRecvMsg = (MSG_AD_CHARINFO_RECOVER_ACK*)pMsg; FINDnALIGN_USER( pUser, pRecvMsg->m_dwKey ); // agent dbuser¸®ÆÑÅ丵 ÇϱâÀü±îÁö looping for( BYTE i = 0 ; i < MAX_CHARACTER_SLOT_NUM ; ++i ) { if( !pUser->IsValidSlot(i) ) continue; if( pRecvMsg->m_CharGuid == pUser->GetCharGUID(i) ) { BYTE byDeletedSlotIndex = i; //ij¸¯ÅÍ »èÁ¦ ·Î±×ÆÄÀÏ GAMELOG->CreateCharacter(true, pUser, pUser->GetCharName(i), NULL); pUser->SetCharDelChk( byDeletedSlotIndex, 0 ); } } MSG_CG_CHARINFO_RECOVER_ACK msgACK; pUser->SendPacket( &msgACK, sizeof(msgACK) ); pUser->EndTransaction(); } HANDLER_AD_IMPL( AD_CHARINFO_RECOVER_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARINFO_RECOVER_NAK* pRecvMsg = (MSG_AD_CHARINFO_RECOVER_NAK*)pMsg; FINDnALIGN_USER( pUser, pRecvMsg->m_dwKey ); MSG_CG_CHARINFO_RECOVER_NAK msgNAK; msgNAK.m_dwErrorCode = pRecvMsg->m_dwErrorCode; pUser->SendPacket( &msgNAK, sizeof(msgNAK) ); pUser->EndTransaction(); } #ifdef __NA_001044_ADD_CUSTOM_UI HANDLER_AD_IMPL( AD_CHARINFO_CHECK_CHARACTERID_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARINFO_CHECK_CHARACTERID_ACK* pRecvMsg = (MSG_AD_CHARINFO_CHECK_CHARACTERID_ACK*)pMsg; FINDnALIGN_USER( pUser, pRecvMsg->m_dwKey ); MSG_CG_CHARINFO_CHARACTERID_CHECK_ACK msgNAK; pUser->SendPacket( &msgNAK, sizeof(msgNAK) ); pUser->EndTransaction(); } HANDLER_AD_IMPL( AD_CHARINFO_CHECK_CHARACTERID_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARINFO_CHECK_CHARACTERID_NAK* pRecvMsg = (MSG_AD_CHARINFO_CHECK_CHARACTERID_NAK*)pMsg; FINDnALIGN_USER( pUser, pRecvMsg->m_dwKey ); MSG_CG_CHARINFO_CHARACTERID_CHECK_NAK msgNAK; msgNAK.m_dwErrorCode = pRecvMsg->m_dwErrorCode; pUser->SendPacket( &msgNAK, sizeof(msgNAK) ); pUser->EndTransaction(); } #endif #ifdef __NA000000_SHOP_USERID_50_PASSING_PROC__ HANDLER_AD_IMPL( SERVERCOMMON_QUERY_CHARINFO_ACK ) { #if !defined _NA_0_20110613_GAME_SHOP_RENEWAL __TOUCHED((pServerSession, pMsg, wSize)); MSG_SERVERCOMMON_QUERY_CHARINFO_ACK* pRecvMsg = static_cast(pMsg); FINDnALIGN_USER(pUser, pRecvMsg->m_dwKey); BOOLEAN success = true; BYTE error_code = RC::RC_SHOP_SUCCESS; ShopUserQuerySlot& query_slot = pUser->GetShopUserQuerySlot(); BOOLEAN query_transaction = query_slot.IsTransaction(); if(success && query_transaction == 0) success = false, error_code = RC::RC_SHOP_FAILED; if(success && pRecvMsg->result_ == 0) { success = false, error_code = RC::RC_SHOP_USERISNOTFOUND; } #ifdef _RU_20110801_SEND_GIFT_FRIEND_CHECK if(success && pRecvMsg->result_ == 2) { success = false, error_code = RC::RC_SHOP_NOT_FRIEND_ME; } if(success && pRecvMsg->result_ == 3) { success = false, error_code = RC::RC_SHOP_NOT_FRINED_YOUR; } #endif if(success) { const MSG_CG_SHOP_SEND_GIFT_SYN* pReqMsg = query_slot.GetMessage(); assert(pReqMsg); if(success && _strnicmp(pReqMsg->m_tszCharName, pRecvMsg->user_info_.char_name_, _countof(pReqMsg->m_tszCharName)) != 0) { success = false, error_code = RC::RC_SHOP_FAILED; } } if(success) { MSG_AU_AUTH_COMMON_QUERY_USER_ID_SYN msgSYN; msgSYN.Clear(); msgSYN.action_type_ = eCHARNAME_ACTION_SHOP_SEND_GIFT; msgSYN.user_info_ = pRecvMsg->user_info_; AgentServer::GetInstance()->SendToAuthAgentServer((BYTE*)&msgSYN, msgSYN.GetSize()); } else { MSG_CG_SHOP_SEND_GIFT_NAK msgNAK; msgNAK.m_byErrorCode = error_code; pUser->SendPacket(&msgNAK, sizeof(msgNAK)); query_slot.QueryEnd(); } #endif //#if !defined _NA_0_20110613_GAME_SHOP_RENEWAL } #endif // implemented by _KR_0_20091021_FIRENDINVITATION_EXTEND HANDLER_AD_IMPL( AD_EVENT_INVITATIONR_INSERT_CMD ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_EVENT_INVITATIONR_INSERT_CMD* pRecvMsg = static_cast(pMsg); User* pUser; for(int i = 0 ; i < pRecvMsg->m_CharGuidCount ; i++) { pUser = UserManager::Instance()->GetUserByCharGuid( (pRecvMsg->InvitateInfo[i].dwGuid) ); if( pUser ) { MSG_AW_FRIEND_INVITATIONR_INSERT_CMD msg; memcpy(&msg.InvitateInfo, &pRecvMsg->InvitateInfo[i], sizeof(STRUCT_FRIEND_INVITATE_INFO)); SUNLOG(eCRITICAL_LOG, "AD_EVENT_INVITATIONR_INSERT_CMD Send"); pUser->SendToWorldServer((MSG_BASE*)&msg, sizeof(MSG_AW_FRIEND_INVITATIONR_INSERT_CMD)); } } } // implemented by _KR_0_20091021_FIRENDINVITATION_EXTEND HANDLER_AD_IMPL( AD_EVENT_INVITATEFRIEND_REWARD_LIST_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_EVENT_INVITATEFRIEND_REWARD_LIST_NAK* pRecvMsg = (MSG_AD_EVENT_INVITATEFRIEND_REWARD_LIST_NAK*)pMsg; MSG_CG_EVENT_INVITATEFRIEND_REWARD_LIST_NAK msg; User* pUser = UserManager::Instance()->GetUserByCharGuid( pRecvMsg->CharGUID ); if(pUser) { msg.byErrorCode = MSG_CG_EVENT_INVITATEFRIEND_REWARD_LIST_NAK::DB_FAIL; pUser->SendPacket(&msg, sizeof(msg)); } else { SUNLOG(eCRITICAL_LOG, "AD_EVENT_INVITATEFRIEND_REWARD_LIST_NAK Not Found User(%u)", pRecvMsg->CharGUID); } } // implemented by _KR_0_20091021_FIRENDINVITATION_EXTEND HANDLER_AD_IMPL( AD_EVENT_INVITATEFRIEND_REWARD_LIST_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_EVENT_INVITATEFRIEND_REWARD_LIST_ACK* pRecvMsg = (MSG_AD_EVENT_INVITATEFRIEND_REWARD_LIST_ACK*)pMsg; MSG_CG_EVENT_INVITATEFRIEND_REWARD_LIST_ACK msg; User* pUser = UserManager::Instance()->GetUserByCharGuid( pRecvMsg->CharGUID ); if(pUser) { msg.m_Count = pRecvMsg->Count; memcpy(msg.RewardInfo , pRecvMsg->RewardInfo, sizeof(InvitateFriendRewardInfo) * pRecvMsg->Count); pUser->SendPacket(&msg, msg.GetSize()); } else { SUNLOG(eCRITICAL_LOG, "AD_EVENT_INVITATEFRIEND_REWARD_LIST_ACK Not Found User(%u)", pRecvMsg->CharGUID); } } #ifdef _JP_20110222_INGAME_CHARNAME_CHANGE HANDLER_AD_IMPL( AD_CHARNAME_CHANGE_ACK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARNAME_CHANGE_ACK* const recv_msg = static_cast(pMsg); FINDnALIGN_USER( user, recv_msg->m_dwKey ); //!~ ij¸¯¸í º¯°æ ·Î±× Ãß°¡ - arycoat 2013.02.04 GAMELOG->WriteCharRename(user, recv_msg->slot_index_, recv_msg->character_name_); //~! //!~ ij¸¯¸í º¯°æ ÈÄ ÆÄƼ ÃÊ´ë ¾ÈµÇ´Â ¹ö±× ¼öÁ¤ - arycoat 2013.01.02 user->SetCharName(recv_msg->slot_index_, recv_msg->character_name_); user->SetOccupiedSlot(recv_msg->slot_index_, true); //~! MSG_CG_CHARNAME_CHANGE_ACK msg; strncpy(msg.character_name_, recv_msg->character_name_, MAX_CHARNAME_LENGTH+1); msg.character_name_[MAX_CHARNAME_LENGTH] = '\0'; msg.slot_index_ = recv_msg->slot_index_; user->SendPacket(&msg, sizeof(msg)); } HANDLER_AD_IMPL( AD_CHARNAME_CHANGE_NAK ) { __TOUCHED((pServerSession, pMsg, wSize)); MSG_AD_CHARNAME_CHANGE_NAK* const recv_msg = static_cast(pMsg); FINDnALIGN_USER( user, recv_msg->m_dwKey ); MSG_CG_CHARNAME_CHANGE_NAK msg; msg.result_ = (MSG_CG_CHARNAME_CHANGE_NAK::ERROR_CODE)recv_msg->result_; msg.slot_index_ = recv_msg->slot_index_; user->SendPacket(&msg, sizeof(msg)); } #endif //_JP_20110222_INGAME_CHARNAME_CHANGE #ifdef _NA_0_20110329_GAMEOPTION_SETTING HANDLER_AD_IMPL( AD_ETC_GAMEOPTION_SELECT_ACK ) { MSG_AD_ETC_GAMEOPTION_SELECT_ACK* const recv_message = static_cast(pMsg); FINDnALIGN_USER( user, recv_message->m_dwKey ); GameOptionManager::Instance()->Select_Ack(user, recv_message); } HANDLER_AD_IMPL( AD_ETC_GAMEOPTION_SELECT_NAK ) { MSG_AD_ETC_GAMEOPTION_SELECT_NAK* const recv_message = static_cast(pMsg); FINDnALIGN_USER( user, recv_message->m_dwKey ); GameOptionManager::Instance()->Select_Nak(user, recv_message); } HANDLER_AD_IMPL(AD_ETC_GAMEOPTION_UPDATE_ACK) { const MSG_AD_ETC_GAMEOPTION_UPDATE_ACK* const update_ack = static_cast(pMsg); GameOptionManager::Instance()->HandleUpdateAck(update_ack); } #endif //_NA_0_20110329_GAMEOPTION_SETTING #ifdef _NA004034_20120102_GUILD_POINT_SYSTEM HANDLER_AD_IMPL(AD_ETC_GUILD_RANKINGINFO_ACK) { MSG_AD_ETC_GUILD_RANKINGINFO_ACK* packet = \ static_cast(pMsg); g_GuildRankingSystem.SerializeGuildRanking( \ packet->guild_ranking_info_, \ packet->guild_ranking_info_count_, \ SERIALIZE_LOAD); } HANDLER_AD_IMPL(AD_ETC_GUILDINFO_ACK) { MSG_AD_ETC_GUILDINFO_ACK* packet = \ static_cast(pMsg); FINDnALIGN_USER( user, packet->m_dwKey ); MSG_CG_ETC_GUILDINFO_ACK msg; msg.init(); msg.guid_ = packet->guid_; memcpy(&msg.game_guild_info_, &packet->game_guild_info_, sizeof(packet->game_guild_info_)); memcpy(&msg.guild_info_extra_, &packet->guild_info_extra_, sizeof(packet->guild_info_extra_)); #ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION msg.request_state_ = packet->request_state_; #endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION user->SendPacket(&msg, sizeof(msg)); } #endif //_NA004034_20120102_GUILD_POINT_SYSTEM