From 0f047d29c20d1910acd363e45f5b988ca750947b Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Sat, 28 Sep 2013 12:59:27 -0700 Subject: Fix bug where you can turn any direction but right --- src/map/clif.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/map/clif.cpp b/src/map/clif.cpp index e068249..a42af8d 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -3851,10 +3851,24 @@ void clif_parse_ChangeDir(int fd, dumb_ptr sd) nullpo_retv(sd); - // RFIFOW(fd, 2) is always 0 - DIR dir = static_cast(RFIFOB(fd, 4)); - if (dir >= DIR::COUNT) + // RFIFOW(fd, 2) and WBUFW(buf, 6) are always 0 + // TODO perhaps we could use that to remove this hack? + DIR dir; + uint8_t client_dir = RFIFOB(fd, 4); + // the client uses a diffenent direction enum ... ugh + switch (client_dir) + { + case 1 | 0: dir = DIR::S; break; // down + case 1 | 2: dir = DIR::SW; break; + case 0 | 2: dir = DIR::W; break; // left + case 4 | 2: dir = DIR::NW; break; + case 4 | 0: dir = DIR::N; break; // up + case 4 | 8: dir = DIR::NE; break; + case 0 | 8: dir = DIR::E; break; // right + case 1 | 8: dir = DIR::SE; break; + default: return; + } if (dir == sd->dir) return; @@ -3864,7 +3878,7 @@ void clif_parse_ChangeDir(int fd, dumb_ptr sd) WBUFW(buf, 0) = 0x9c; WBUFL(buf, 2) = sd->bl_id; WBUFW(buf, 6) = 0; - WBUFB(buf, 8) = static_cast(dir); + WBUFB(buf, 8) = client_dir; clif_send(buf, clif_parse_func_table[0x9c].len, sd, SendWho::AREA_WOS); -- cgit v1.2.3-60-g2f50