rodecomp/Source/UI/Party/UIRequestJoinPartyMgr.cpp
ragnarok-clanker 07897c8bea Maintenance: Annotation cleanup, no code change (resubmission of 10984). Every // FUNCTION: line now has // OFFSET: <its address from
Batch #11163 by ragnarok-clanker: no function's compiled code changes; checked with 226 compiled unit(s), including every includer of Source/Client/Application/UnhandledExceptionHandler.h, Source/Contents/ReputeMgrLoad.inl, Source/Render/RenderSystemBase.h, Source/UI/Lists/UIListBoxTemplate.h, Source/Utility/Async/NRecycleObject.h.
2026-11-04 21:29:46 +00:00

109 lines
2.8 KiB
C++

#include "UI/Party/UIRequestJoinPartyMgr.h"
#include "UI/Window/UIWindow.h"
#include "UI/Window/WindowManagerWindows.h"
#include <algorithm>
#include <cstdio>
#include <new>
// STATIC: 0x01450CEC
// GLOBAL: gl_24363
UIRequestJoinPartyMgr* g_requestJoinPartyMgr;
// OFFSET: 0x007BAF90
// FUNCTION: fn_09279
UIRequestJoinPartyMgr::UIRequestJoinPartyMgr(WindowManagerWindows& windows) : m_enabled(true), m_windows(&windows) {
}
// OFFSET: 0x007BB470
// FUNCTION: fn_09281
UIRequestJoinPartyMgr::~UIRequestJoinPartyMgr() = default;
// OFFSET: 0x007BBD50
// FUNCTION: fn_09291
bool UIRequestJoinPartyMgr::Initialize(WindowManagerWindows& windows) {
if (g_requestJoinPartyMgr) {
return false;
}
g_requestJoinPartyMgr = new (std::nothrow) UIRequestJoinPartyMgr(windows);
if (!g_requestJoinPartyMgr) {
return false;
}
if (!g_requestJoinPartyMgr->m_enabled) {
delete g_requestJoinPartyMgr;
g_requestJoinPartyMgr = nullptr;
return false;
}
return true;
}
// OFFSET: 0x007BBE50
// FUNCTION: fn_09292
void UIRequestJoinPartyMgr::Shutdown() {
if (g_requestJoinPartyMgr) {
delete g_requestJoinPartyMgr;
g_requestJoinPartyMgr = nullptr;
}
}
// OFFSET: 0x007C00F0
// FUNCTION: fn_09311
void UIRequestJoinPartyMgr::Add(std::uint32_t accountId, std::uint32_t characterId, const char* name, std::int16_t job, std::int16_t level) {
if (std::find(this->m_blocked.begin(), this->m_blocked.end(), accountId) != this->m_blocked.end()) {
return;
}
PartyJoinRequest request;
request.accountId = accountId;
request.characterId = characterId;
_snprintf_s(request.name, sizeof(request.name), _TRUNCATE, "%s", name);
request.job = job;
request.level = level;
if (this->m_windows->LookupWindow(326)) {
this->m_pending.push_back(request);
} else {
UIWindow* window = this->m_windows->EnsureWindow(326);
window->SendMsg(nullptr, 56, reinterpret_cast<std::intptr_t>(&request), 0, 0, 0);
}
}
// INLINED
void UIRequestJoinPartyMgr::Block(std::uint32_t accountId) {
this->m_blocked.push_back(accountId);
}
// OFFSET: 0x007BC110
// FUNCTION: fn_09297
void UIRequestJoinPartyMgr::Advance() {
if (this->m_pending.empty()) {
this->m_windows->CloseWindow(326);
}
while (!this->m_pending.empty()) {
UIWindow* window = this->m_windows->LookupWindow(326);
if (!window) {
return;
}
const PartyJoinRequest request = this->m_pending.front();
const bool blocked = std::find(this->m_blocked.begin(), this->m_blocked.end(), request.accountId) != this->m_blocked.end();
if (!blocked) {
window->SendMsg(nullptr, 56, reinterpret_cast<std::intptr_t>(&request), 0, 0, 0);
this->m_pending.pop_front();
return;
}
this->m_pending.pop_front();
if (this->m_pending.empty()) {
this->m_windows->CloseWindow(326);
}
}
}