diff --git a/Source/UI/Window/UIWindowMgr.h b/Source/UI/Window/UIWindowMgr.h index 634979a2..ec15ab44 100644 --- a/Source/UI/Window/UIWindowMgr.h +++ b/Source/UI/Window/UIWindowMgr.h @@ -444,6 +444,7 @@ public: void AddMiniPartyWindow(UIWindow* window); void RearrangeMiniPartyWindows(); void RebuildMiniPartyWindows(); + void RestoreMiniPartyWindows(); static int ScaleToViewportWidth(int value); static int CenterOnViewportX(int x); static int CenterOnViewportY(int y); diff --git a/Source/UI/Window/WindowMgrState.cpp b/Source/UI/Window/WindowMgrState.cpp index 04c4f107..91faff14 100644 --- a/Source/UI/Window/WindowMgrState.cpp +++ b/Source/UI/Window/WindowMgrState.cpp @@ -1,4 +1,8 @@ #include "UI/Window/UIWindowMgr.h" +#include "Contents/Messenger/ClientMessenger.h" +#include "Contents/Messenger/MessengerMember.h" +#include "UI/Party/UIMiniPartyWnd.h" +#include "UI/Window/WindowDialogs.h" #include "Client/Registry.h" #include "Client/Session.h" #include "Contents/Configuration/ServiceConfiguration.h" @@ -116,6 +120,26 @@ bool UIWindowMgr::HasUnknown030C() { return unknown != nullptr && unknown[1] != 0; } +// OFFSET: 0x00A91F60 +// FUNCTION: fn_17175 +void UIWindowMgr::RestoreMiniPartyWindows() { + const int count = static_cast(g_session.unknown_0734.size()); + WindowDialogs& dialogs = *reinterpret_cast(this); + for (int index = 0; index < count; ++index) { + MessengerMember member = ClientMessenger{g_session.m_partyMembers, g_session.m_friends}.PartyAt(index); + if (member.valid == 0) { + continue; + } + + const SessionRecord0734 record = g_session.FindRecord0734(member.accountId); + UIMiniPartyWnd* window = new UIMiniPartyWnd(dialogs.windows, dialogs.frames); + window->SetSize(174, 52); + window->m_cell = record.unknown_0008; + this->AddMiniPartyWindow(window); + window->SendMsg(nullptr, 0x17, reinterpret_cast(&member), 0, 0, 0); + } +} + // OFFSET: 0x00A92090 // FUNCTION: fn_17176 void UIWindowMgr::LoadShortcutItems() {