Type the 13 queued unit-change handlers' packet argument as the D2GSPacketSrv struct for their opcode
The unit-change opcodes (0x0C to 0x10, 0x4C, 0x4D, 0x67 to 0x6D) are queued per unit, and their real handler sits in the third dword of the opcode's 12-byte entry in the client handler table at 007114d0 (entry + 8; the xrefs check all 13). It is called with the unit in ECX and the packet bytes in EDX, which these handlers type as char * pBytes, so the source reads *(uint16_t*)(pBytes + 7). Each opcode already has a D2GSPacketSrv struct, and every offset each body reads lands on a field of that struct at the width used: for 0x0D, nUnitType, dwUnitGUID, nMessageType, wX, wY, nHitClass and nHpPercent; for 0x68, ten reads from nMode to the path fields. The same typing as 797 and the table handlers in 1099; the chosen name pBytes stays.
Changes 13, applied together
Retype variable
win 0x0045cc70 EDXtypechar *→D2GSPacketSrv0x0C *Retype variable
win 0x0045ccc0 EDXtypechar *→D2GSPacketSrv0x0D *Retype variable
win 0x0045cd10 EDXtypechar *→D2GSPacketSrv0x0E *Retype variable
win 0x0045cd40 EDXtypechar *→D2GSPacketSrv0x0F *Retype variable
win 0x0045cd90 EDXtypechar *→D2GSPacketSrv0x10 *Retype variable
win 0x0045df00 EDXtypechar *→D2GSPacketSrv0x4C *Retype variable
win 0x0045df60 EDXtypechar *→D2GSPacketSrv0x4D *Retype variable
win 0x0045cde0 EDXtypechar *→D2GSPacketSrv0x67 *Retype variable
win 0x0045ce30 EDXtypechar *→D2GSPacketSrv0x68 *Retype variable
win 0x0045cea0 EDXtypechar *→D2GSPacketSrv0x69 *Retype variable
win 0x0045cf40 EDXtypechar *→D2GSPacketSrv0x6B *Retype variable
win 0x0045cfb0 EDXtypechar *→D2GSPacketSrv0x6C *Retype variable
win 0x0045d010 EDXtypechar *→D2GSPacketSrv0x6D *