packet 45 tells you about mouse movements that should be illegal
Code:
out.putOpCode(45);
out.write1Byte(0);
int prePos = out.pos;
int mousePositionsUsed = 0;
for(int mousePointPtr = 0; mousePointPtr < mouseDetection.coordsIndex; mousePointPtr++)
{
if(prePos - out.pos >= 240)
break;
mousePositionsUsed++;
int mouseY = mouseDetection.coordsY[mousePointPtr];
if(mouseY < 0)
mouseY = 0;
else
if(mouseY > 502)
mouseY = 502;
int mouseX = mouseDetection.coordsX[mousePointPtr];
if(mouseX < 0)
mouseX = 0;
else
if(mouseX > 764)
mouseX = 764;
int mousePos = mouseY * 765 + mouseX;
if(mouseDetection.coordsY[mousePointPtr] == -1 && mouseDetection.coordsX[mousePointPtr] == -1)
{
mouseX = -1;
mouseY = -1;
mousePos = 0x7ffff;
}
if(mouseX == lastMouseX && mouseY == lastMouseY)
{
if(mouseMovements < 2047)
mouseMovements++;
} else
{
int mouseXDifference = mouseX - lastMouseX;
lastMouseX = mouseX;
int mouseYDifference = mouseY - lastMouseY;
lastMouseY = mouseY;
if(mouseMovements < 8 && mouseXDifference >= -32 && mouseXDifference <= 31 && mouseYDifference >= -32 && mouseYDifference <= 31)
{
mouseXDifference += 32;
mouseYDifference += 32;
out.writeWord((mouseMovements << 12) + (mouseXDifference << 6) + mouseYDifference);
mouseMovements = 0;
} else
if(mouseMovements < 8)
{
out.writeDWordBigEndian(0x800000 + (mouseMovements << 19) + mousePos);
mouseMovements = 0;
} else
{
out.writeDWord(0xc0000000 + (mouseMovements << 19) + mousePos);
mouseMovements = 0;
}
}
}
out.writeBytes(out.pos - prePos);