#include "stdafx.h" #include "Ryl_AgentServerParseData.h" #include #include #include #include #include #include #include #include #include #include #include bool CAgentServerParseData::UpdateCharacter(CModifyCharacter* lpChar, unsigned __int64 dwSerial, unsigned long dwUID, unsigned long dwCID, unsigned long dwRequestKey) { SendInfo SetData; SetData.m_dwSerial = dwSerial; SetData.m_dwUID = dwUID; SetData.m_dwCID = dwCID; SetData.m_dwRequestKey = dwRequestKey; if (lpChar->m_byChangedInfo & CModifyCharacter::ON_BASIC) { SEND_CHAR_BASIC_DATA(lpChar, SetData); lpChar->OffChangedInfo(CModifyCharacter::OFF_BASIC); } if (lpChar->m_byChangedInfo & CModifyCharacter::ON_EXTRA) { SEND_CHAR_EXTRA_DATA(lpChar, SetData); lpChar->OffChangedInfo(CModifyCharacter::OFF_EXTRA); } if (lpChar->m_byChangedInfo & CModifyCharacter::ON_FRIEND) { SEND_CHAR_FRIEND_DATA(lpChar, SetData); lpChar->OffChangedInfo(CModifyCharacter::OFF_FRIEND); } if (lpChar->m_byChangedInfo & CModifyCharacter::ON_BAN) { SEND_CHAR_BAN_DATA(lpChar, SetData); lpChar->OffChangedInfo(CModifyCharacter::OFF_BAN); } if (lpChar->m_byChangedInfo & CModifyCharacter::ON_STROE12) { SEND_STORE_12_DATA(lpChar, SetData); lpChar->OffChangedInfo(CModifyCharacter::OFF_STORE12); } if (lpChar->m_byChangedInfo & CModifyCharacter::ON_STORE34) { SEND_STORE_34_DATA(lpChar, SetData); lpChar->OffChangedInfo(CModifyCharacter::OFF_STORE34); } if (false == SEND_FINISH_UPDATE_DATA(SetData, lpChar->GetOldServerGroupID())) { ERRLOG0(g_Log, "SEND_FINISH_UPDATE_DATA ½ÇÆÐ"); return false; } return true; } bool CAgentServerParseData::SEND_FINISH_UPDATE_DATA(CAgentServerParseData::SendInfo& SetData, unsigned char cOldServerGroupID) { CBuffer* lpBuffer = CREATE_BUFFER(m_lpSession->GetPolicy().GetBufferFactory(), sizeof(PktAgentServer::PktAdminToolSetData)); PktAgentServer::PktAdminToolSetData* lpPktSetData = reinterpret_cast(lpBuffer->begin()); lpPktSetData->m_dwSerial = SetData.m_dwSerial; lpPktSetData->m_dwUID = SetData.m_dwUID; lpPktSetData->m_dwCID = SetData.m_dwCID; lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey; lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::FINISH_UPDATE_DATA; lpPktSetData->m_cOldServerGroupID = cOldServerGroupID; PacketWrap::WrapHeader(lpBuffer, sizeof(PktAgentServer::PktAdminToolSetData), PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0); if(!m_lpSession->SendPending(lpBuffer)) { ERRLOG0(g_Log, "SEND_FINISH_UPDATE_DATA ÆÐŶ Àü¼Û ½ÇÆÐ"); return false; } return true; } bool CAgentServerParseData::SEND_CHAR_BASIC_DATA(CModifyCharacter* lpChar, CAgentServerParseData::SendInfo& SetData) { unsigned short usBufferSize = sizeof(PktAgentServer::PktAdminToolSetData) + sizeof(unsigned short) * DBUpdateData::MAX_UPDATE_DB + DBUpdateData::MAX_DBUPDATE_SIZE; CCumulateBuffer cBuffer(usBufferSize + 10, m_lpSession); char* In_BasicPos = cBuffer.GetBuffer(usBufferSize); PktAgentServer::PktAdminToolSetData* lpPktSetData = reinterpret_cast(In_BasicPos); char* In_DataBuffer = reinterpret_cast(lpPktSetData + 1); unsigned short* usSizeArray = reinterpret_cast(In_DataBuffer); int nBufferSize = DBUpdateData::MAX_DBUPDATE_SIZE; char* In_BasicInfo = static_cast(In_DataBuffer + sizeof(unsigned short) * DBUpdateData::MAX_UPDATE_DB); lpPktSetData->m_dwSerial = SetData.m_dwSerial; lpPktSetData->m_dwUID = SetData.m_dwUID; lpPktSetData->m_dwCID = SetData.m_dwCID; lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey; lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::CHAR_BASIC_DATA; lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID(); lpChar->GetCharacterInfo(In_BasicInfo, &nBufferSize, usSizeArray); unsigned int nPktLength = sizeof(PktAgentServer::PktAdminToolSetData) + sizeof(unsigned short) * DBUpdateData::MAX_UPDATE_DB + nBufferSize; cBuffer.ResizeLength(nPktLength); // ´©Àû ÆÐŶÀ϶§ ÁÖÀÇ! PacketWrap::WrapHeader(In_BasicPos, nPktLength, PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0); return true; } bool CAgentServerParseData::SEND_CHAR_EXTRA_DATA(CModifyCharacter* lpChar, CAgentServerParseData::SendInfo& SetData) { unsigned short usBufferSize = sizeof(CHAR_INFOEX) + sizeof(QUEST) + sizeof(HISTORY) + sizeof(CONFIG) + sizeof(STORE_INFO) + sizeof(PktAgentServer::PktAdminToolSetData); CCumulateBuffer cBuffer(usBufferSize, m_lpSession); char* DataBuffer = cBuffer.GetBuffer(usBufferSize); PktAgentServer::PktAdminToolSetData* lpPktSetData = reinterpret_cast(DataBuffer); char* In_DataBuffer = reinterpret_cast(lpPktSetData + 1); CModifyCharacter::CHAR_EXTRA_DATA& ExtraData = lpChar->GetExtraData(); CopyMemory(In_DataBuffer, &ExtraData.m_CharInfoEX, sizeof(CHAR_INFOEX)); In_DataBuffer += sizeof(CHAR_INFOEX); CopyMemory(In_DataBuffer, &ExtraData.m_Quest, sizeof(QUEST)); In_DataBuffer += sizeof(QUEST); CopyMemory(In_DataBuffer, &ExtraData.m_History, sizeof(HISTORY)); In_DataBuffer += sizeof(HISTORY); CopyMemory(In_DataBuffer, &ExtraData.m_Config, sizeof(CONFIG)); In_DataBuffer += sizeof(CONFIG); lpPktSetData->m_dwSerial = SetData.m_dwSerial; lpPktSetData->m_dwUID = SetData.m_dwUID; lpPktSetData->m_dwCID = SetData.m_dwCID; lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey; lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::CHAR_EXTRA_DATA; lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID(); LPSTORE_INFO lpStoreInfo = reinterpret_cast(In_DataBuffer); Item::CDepositContainer& DepositContainer = lpChar->GetDeposit(); memcpy(lpStoreInfo->Password, DepositContainer.GetPassword(), 4); lpStoreInfo->Password[4] = 0; lpStoreInfo->Flag = DepositContainer.GetTabFlag(); lpStoreInfo->Gold = DepositContainer.GetGold(); PacketWrap::WrapHeader(DataBuffer, usBufferSize, PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0); return true; } bool CAgentServerParseData::SEND_CHAR_FRIEND_DATA(CModifyCharacter* lpChar, CAgentServerParseData::SendInfo& SetData) { CFriendList& FriendList = lpChar->GetFriendList(); unsigned short usBufferSize = sizeof(FriendInfo) * CFriendList::MAX_FRIENDS_NUM + sizeof(PktAgentServer::PktAdminToolSetData); CCumulateBuffer cBuffer(usBufferSize + 10, m_lpSession); char* lpDataBuffer = cBuffer.GetBuffer(usBufferSize); PktAgentServer::PktAdminToolSetData* lpPktSetData = reinterpret_cast(lpDataBuffer); char* In_DataBuffer = reinterpret_cast(lpPktSetData + 1); lpPktSetData->m_dwSerial = SetData.m_dwSerial; lpPktSetData->m_dwUID = SetData.m_dwUID; lpPktSetData->m_dwCID = SetData.m_dwCID; lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey; lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::CHAR_FRIEND_DATA; lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID(); unsigned long nBufferSize = sizeof(FriendInfo) * CFriendList::MAX_FRIENDS_NUM; FriendList.SerializeOut(In_DataBuffer, nBufferSize); cBuffer.ResizeLength(sizeof(PktAgentServer::PktAdminToolSetData) + nBufferSize); PacketWrap::WrapHeader(lpDataBuffer, (sizeof(PktAgentServer::PktAdminToolSetData) + (unsigned short)nBufferSize), PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0); return true; } bool CAgentServerParseData::SEND_CHAR_BAN_DATA(CModifyCharacter* lpChar, CAgentServerParseData::SendInfo& SetData) { CBanList& BanList = lpChar->GetBanList(); unsigned short usBufferSize = sizeof(BanInfo) * CBanList::MAX_BAN_NUM + sizeof(PktAgentServer::PktAdminToolSetData); CCumulateBuffer cBuffer(usBufferSize + 10, m_lpSession); char* lpDataBuffer = cBuffer.GetBuffer(usBufferSize); PktAgentServer::PktAdminToolSetData* lpPktSetData = reinterpret_cast(lpDataBuffer); char* In_DataBuffer = reinterpret_cast(lpPktSetData + 1); lpPktSetData->m_dwSerial = SetData.m_dwSerial; lpPktSetData->m_dwUID = SetData.m_dwUID; lpPktSetData->m_dwCID = SetData.m_dwCID; lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey; lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::CHAR_BAN_DATA; lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID(); unsigned long nBufferSize = sizeof(BanInfo) * CBanList::MAX_BAN_NUM; BanList.SerializeOut(In_DataBuffer, nBufferSize); cBuffer.ResizeLength(sizeof(PktAgentServer::PktAdminToolSetData) + nBufferSize); PacketWrap::WrapHeader(lpDataBuffer, (sizeof(PktAgentServer::PktAdminToolSetData) + (unsigned short)nBufferSize), PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0); return true; } bool CAgentServerParseData::SEND_STORE_12_DATA(CModifyCharacter* lpChar, CAgentServerParseData::SendInfo& SetData) { unsigned short usBufferSize = sizeof(STORE) + sizeof(PktAgentServer::PktAdminToolSetData); CCumulateBuffer cBuffer(usBufferSize + 10, m_lpSession); char* lpDataBuffer = cBuffer.GetBuffer(usBufferSize); PktAgentServer::PktAdminToolSetData* lpPktSetData = reinterpret_cast(lpDataBuffer); char* In_DataBuffer = reinterpret_cast(lpPktSetData + 1); Item::CDepositContainer& DepositContainer = lpChar->GetDeposit(); LPSTORE lpStore = reinterpret_cast(In_DataBuffer); const Item::CItemContainer* lpContainer0 = DepositContainer.GetTab(0); const Item::CItemContainer* lpContainer1 = DepositContainer.GetTab(1); ZeroMemory(lpDataBuffer, usBufferSize); lpPktSetData->m_dwSerial = SetData.m_dwSerial; lpPktSetData->m_dwUID = SetData.m_dwUID; lpPktSetData->m_dwCID = SetData.m_dwCID; lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey; lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::STORE_12_DATA; lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID(); if (NULL != lpContainer0 && NULL != lpContainer1) { lpStore->dwSize = STORE::MAX_STORE_SIZE; if (lpContainer0->SerializeOut(lpStore->Data, lpStore->dwSize)) { unsigned long dwContainer0Size = lpStore->dwSize; lpStore->dwSize = STORE::MAX_STORE_SIZE - dwContainer0Size; if (lpContainer1->SerializeOut(lpStore->Data + dwContainer0Size, lpStore->dwSize)) { lpStore->dwSize += dwContainer0Size; cBuffer.ResizeLength(usBufferSize); PacketWrap::WrapHeader(lpDataBuffer, usBufferSize, PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0); return true; } } } cBuffer.ResizeLength(0); return false; } bool CAgentServerParseData::SEND_STORE_34_DATA(CModifyCharacter* lpChar, CAgentServerParseData::SendInfo& SetData) { unsigned short usBufferSize = sizeof(STORE) + sizeof(PktAgentServer::PktAdminToolSetData); CCumulateBuffer cBuffer(usBufferSize + 10, m_lpSession); char* lpDataBuffer = cBuffer.GetBuffer(usBufferSize); PktAgentServer::PktAdminToolSetData* lpPktSetData = reinterpret_cast(lpDataBuffer); char* In_DataBuffer = reinterpret_cast(lpPktSetData + 1); Item::CDepositContainer& DepositContainer = lpChar->GetDeposit(); LPSTORE lpStore = reinterpret_cast(In_DataBuffer); const Item::CItemContainer* lpContainer0 = DepositContainer.GetTab(2); const Item::CItemContainer* lpContainer1 = DepositContainer.GetTab(3); ZeroMemory(lpDataBuffer, usBufferSize); lpPktSetData->m_dwSerial = SetData.m_dwSerial; lpPktSetData->m_dwUID = SetData.m_dwUID; lpPktSetData->m_dwCID = SetData.m_dwCID; lpPktSetData->m_dwRequestKey = SetData.m_dwRequestKey; lpPktSetData->m_cType = PktAgentServer::PktAdminToolSetData::STORE_34_DATA; lpPktSetData->m_cOldServerGroupID = lpChar->GetOldServerGroupID(); if (NULL != lpContainer0 && NULL != lpContainer1) { lpStore->dwSize = STORE::MAX_STORE_SIZE; if (lpContainer0->SerializeOut(lpStore->Data, lpStore->dwSize)) { unsigned long dwContainer0Size = lpStore->dwSize; lpStore->dwSize = STORE::MAX_STORE_SIZE - dwContainer0Size; if (lpContainer1->SerializeOut(lpStore->Data + dwContainer0Size, lpStore->dwSize)) { lpStore->dwSize += dwContainer0Size; cBuffer.ResizeLength(usBufferSize); PacketWrap::WrapHeader(lpDataBuffer, usBufferSize, PktAgentServer::PktCMD::CmdAdminToolSetData, 0, 0); return true; } } } cBuffer.ResizeLength(0); return false; }