forked from EXTERNAL/bareiron
fix storing wrong integer player position at negative coordinates
This commit is contained in:
@@ -252,6 +252,8 @@ void handlePacket (int client_fd, int length, int packet_id, int state) {
|
|||||||
|
|
||||||
// Cast the values to short to get integer position
|
// Cast the values to short to get integer position
|
||||||
short cx = x, cy = y, cz = z;
|
short cx = x, cy = y, cz = z;
|
||||||
|
if (x < 0) cx -= 1;
|
||||||
|
if (z < 0) cz -= 1;
|
||||||
// Determine the player's chunk coordinates
|
// Determine the player's chunk coordinates
|
||||||
short _x = (cx < 0 ? cx - 16 : cx) / 16, _z = (cz < 0 ? cz - 16 : cz) / 16;
|
short _x = (cx < 0 ? cx - 16 : cx) / 16, _z = (cz < 0 ? cz - 16 : cz) / 16;
|
||||||
// Calculate distance between previous and current chunk coordinates
|
// Calculate distance between previous and current chunk coordinates
|
||||||
|
@@ -243,9 +243,9 @@ void spawnPlayer (PlayerData *player) {
|
|||||||
player->flags &= ~0x02;
|
player->flags &= ~0x02;
|
||||||
} else { // Not a new player
|
} else { // Not a new player
|
||||||
// Calculate spawn position from player data
|
// Calculate spawn position from player data
|
||||||
spawn_x = player->x > 0 ? (float)player->x + 0.5 : (float)player->x - 0.5;
|
spawn_x = (float)player->x + 0.5;
|
||||||
spawn_y = player->y;
|
spawn_y = player->y;
|
||||||
spawn_z = player->z > 0 ? (float)player->z + 0.5 : (float)player->z - 0.5;
|
spawn_z = (float)player->z + 0.5;
|
||||||
spawn_yaw = player->yaw * 180 / 127;
|
spawn_yaw = player->yaw * 180 / 127;
|
||||||
spawn_pitch = player->pitch * 90 / 127;
|
spawn_pitch = player->pitch * 90 / 127;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user