rendered paste body#ifndef _L2EX_
#include "L2Ex.h"
#endif
#pragma warning(disable: 4311)
#pragma warning(disable: 4700)
void CharSelectInfoFix(CSocket *pSocket, const char *szFormat, BYTE bOpCode, DWORD dwCharNum, DWORD dwPacketSize, DWORD *pOldPacket)
{
if (pSocket != NULL && pOldPacket != NULL)
{
DWORD dwDataLen;
DWORD dwNewPacketLen = (dwPacketSize + (dwCharNum * 16));
DWORD *pNewPacket = (DWORD *)VirtualAlloc(NULL, dwNewPacketLen, MEM_COMMIT, PAGE_READWRITE);
BYTE *pOld = (BYTE *)pOldPacket;
BYTE *pNew = (BYTE *)pNewPacket;
for (DWORD i = 0; i < dwCharNum; i++)
{
dwDataLen = (lstrlenW((LPCWSTR)(pOld)) + 1) * 2;
dwDataLen += 4;
dwDataLen += (lstrlenW((LPCWSTR)(pOld + dwDataLen)) + 1) * 2;
memcpy(pNew, pOld, dwDataLen);
pOld += dwDataLen;
pNew += dwDataLen;
dwDataLen = (4 * 10) + (8 * 2) + 4;
memcpy(pNew, pOld, dwDataLen);
pOld += dwDataLen;
pNew += dwDataLen;
dwDataLen = 4;
memcpy(pNew, pOld, dwDataLen);
pOld += dwDataLen;
pNew += dwDataLen;
*(int *)pNew = 0;
pNew += 4;
dwDataLen = (4 * 27);
memcpy(pNew, pOld, dwDataLen);
pOld += dwDataLen;
pNew += dwDataLen;
*(int *)pNew = -1;
pNew += 4;
dwDataLen = (4 * 16);
memcpy(pNew, pOld, dwDataLen);
pOld += dwDataLen;
pNew += dwDataLen;
*(int *)pNew = -1;
pNew += 4;
dwDataLen = (4 * 3) + (8 * 2) + (4 * 3) + 1;
memcpy(pNew, pOld, dwDataLen);
pOld += dwDataLen;
pNew += dwDataLen;
*(int *)pNew = 0;
pNew += 4;
}
pSocket->Send(szFormat, bOpCode, dwCharNum, dwNewPacketLen, pNewPacket);
VirtualFree(pNewPacket, dwNewPacketLen, MEM_DECOMMIT);
}
}