All pastes #834111 Raw Edit

Stuff

public text v1 · immutable
#834111 ·published 2007-12-27 23:08 UTC
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);
	}
}