diff --git a/Source/UI/Window/UIWindowMgr.cpp b/Source/UI/Window/UIWindowMgr.cpp index bed76dd84..9bb2bea49 100644 --- a/Source/UI/Window/UIWindowMgr.cpp +++ b/Source/UI/Window/UIWindowMgr.cpp @@ -1318,10 +1318,10 @@ __declspec(noinline) void UIWindowMgr::ShowWindows189(unsigned char show) { } if (show == 1) { - if (g_serviceOptions.Get(250)) { - (*it)->Show(1); - } else { + if (!g_serviceOptions.Get(250)) { (*it)->Show(0); + } else { + (*it)->Show(1); } } else { (*it)->Show(0); @@ -1504,18 +1504,8 @@ std::vector UIWindowMgr::SaveReplaySettings() { // FUNCTION: fn_17243 std::vector UIWindowMgr::SaveReplayReserved() { std::vector data; - { - std::vector chunk(6); - *reinterpret_cast(&chunk[0]) = 26000; - *reinterpret_cast(&chunk[2]) = 0; - data.insert(data.end(), chunk.begin(), chunk.end()); - } - { - std::vector chunk(6); - *reinterpret_cast(&chunk[0]) = 26001; - *reinterpret_cast(&chunk[2]) = 0; - data.insert(data.end(), chunk.begin(), chunk.end()); - } + AppendReplayChunk(data, MakeReplayMarker(26000)); + AppendReplayChunk(data, MakeReplayMarker(26001)); return data; } @@ -1544,19 +1534,23 @@ int UIWindowMgr::LoadReplaySettings(const std::vector& data) { ReplaySettingHeader header; unsigned offset = 6; header.Read(data.data()); - if (header.tag != 25000) { + if (25000 != header.tag) { offset = static_cast(-1); } else { - while (offset < data.size()) { + while (data.size() > offset) { header.Read(data.data() + offset); offset += 6; - if (header.tag == 25001) { + switch (header.tag) { + case 25001: + return static_cast(offset); + case 25010: + std::memcpy(&this->dragAllItems, data.data() + offset, header.size); + offset += header.size; + break; + default: + offset += header.size; break; } - if (header.tag == 25010) { - std::memcpy(&this->dragAllItems, data.data() + offset, header.size); - } - offset += header.size; } } return static_cast(offset); @@ -1572,10 +1566,10 @@ int UIWindowMgr::LoadReplayReserved(const std::vector& data) { ReplaySettingHeader header; unsigned offset = 6; header.Read(data.data()); - if (header.tag != 26000) { + if (26000 != header.tag) { offset = static_cast(-1); } else { - while (offset < data.size()) { + while (data.size() > offset) { header.Read(data.data() + offset); offset += 6; if (header.tag == 26001) { @@ -1846,13 +1840,13 @@ int UIWindowMgr::LoadReplayWindows(const std::vector& data) { } ReplaySettingHeader header; - std::vector payload; + std::vector payload; unsigned offset = 6; header.Read(data.data()); - if (header.tag != 20000) { + if (20000 != header.tag) { offset = static_cast(-1); } else { - while (offset < data.size()) { + while (data.size() > offset) { header.Read(data.data() + offset); offset += 6; if (header.tag == 20001) { @@ -1861,7 +1855,7 @@ int UIWindowMgr::LoadReplayWindows(const std::vector& data) { if (static_cast(header.tag - 20100) <= 399) { UIWindow* window = this->EnsureWindow(header.tag - 20100); if (window && header.size > 0) { - payload.resize(header.size); + payload.resize(header.size, 0); std::memcpy(payload.data(), data.data() + offset, header.size); offset += header.size; window->SendMsg(nullptr, UM_REPLAY_FRAMED_DATA, reinterpret_cast(payload.data()), payload.size(), 0, 0);