void UpdatePosition()
{
//pingDelayTimer.Stop();
// Shameless copy from JTE's Server
byte changed = 0;
if (oldpos[0] != pos[0] || oldpos[1] != pos[1] || oldpos[2] != pos[2]) { changed |= 1; }
if (oldrot[0] != rot[0] || oldrot[1] != rot[1]) { changed |= 2; }
if (Math.Abs(pos[0] - basepos[0]) > 32 || Math.Abs(pos[1] - basepos[1]) > 32 ||
Math.Abs(pos[2] - basepos[2]) > 32) { changed |= 4; }
if ((oldpos[0] == pos[0] && oldpos[1] == pos[1] && oldpos[2] == pos[2]) &&
(basepos[0] != pos[0] || basepos[1] != pos[1] || basepos[2] != pos[2])) { changed |= 4; }
byte[] buffer = new byte[0]; byte msg = 0;
if ((changed & 4) != 0)
{
msg = 8; buffer = new byte[9]; buffer[0] = id;
HTNO(pos[0]).CopyTo(buffer, 1);
HTNO(pos[1]).CopyTo(buffer, 3);
HTNO(pos[2]).CopyTo(buffer, 5);
buffer[7] = rot[0]; buffer[8] = rot[1];
}
else if (changed == 1)
{
msg = 10; buffer = new byte[4]; buffer[0] = id;
buffer[1] = (byte)(pos[0] - oldpos[0]);
buffer[2] = (byte)(pos[1] - oldpos[1]);
buffer[3] = (byte)(pos[2] - oldpos[2]);
}
else if (changed == 2)
{
msg = 11; buffer = new byte[3]; buffer[0] = id;
buffer[1] = rot[0]; buffer[2] = rot[1];
}
else if (changed == 3)
{
msg = 9; buffer = new byte[6]; buffer[0] = id;
buffer[1] = (byte)(pos[0] - oldpos[0]);
buffer[2] = (byte)(pos[1] - oldpos[1]);
buffer[3] = (byte)(pos[2] - oldpos[2]);
buffer[4] = rot[0]; buffer[5] = rot[1];
}
try
{
if (changed != 0) foreach (Player p in Player.players)
{
if (p.level == level)
{
p.SendRaw(msg, buffer);
}
}
} catch { }
oldpos = pos;
oldrot = rot;
}