Batch #4798 by youko: 0 byte-identical, 2 confirmed by peer review. - fn_12729 UISeekPartyListWnd::UpdateScrollBar: logic confirmed by peer review - fn_12725 UIRoMapWnd::Slot33: logic confirmed by peer review Peer-reviewed-by: eAthena, alisonrag, Bruwuno Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes).
154 lines
3.6 KiB
C++
154 lines
3.6 KiB
C++
#include "UI/Window/UISeekPartyListWnd.h"
|
|
#include "Contents/MessageTable.h"
|
|
#include "Contents/Party/PartyBookingMgr.h"
|
|
#include "Contents/Sound/SoundMgr.h"
|
|
#include "UI/Buttons/UICheckBox.h"
|
|
#include "UI/Lists/UIScrollBar.h"
|
|
#include "UI/Window/UIWindowMgr.h"
|
|
|
|
// GLOBAL: gl_24771
|
|
std::map<int, PartyBookingEntry> g_friendRows;
|
|
|
|
// OFFSET: 0x009431D0
|
|
// FUNCTION: fn_12815
|
|
void UISeekPartyListWnd::NotifyNewAd() {
|
|
if (this->m_alarmCheck->geometry.unknown_0030 != 0) {
|
|
g_soundMgr->PlayWave("party_alarm.wav", 0.0f, 0.0f, 0.0f, 250, 40, 1.0f, 0);
|
|
g_windowMgr.SendNotice(1, reinterpret_cast<std::intptr_t>(LookupMessage(0x6D9)), 0xFFFF00, 15, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x009435F0
|
|
// FUNCTION: fn_12825
|
|
bool UISeekPartyListWnd::MatchesFilter(PARTY_BOOKING_AD_INFO info) {
|
|
if (this->m_filterLevel > 0 && (this->m_filterLevel > info.detail.level || this->m_filterLevel + 15 < info.detail.level)) {
|
|
return false;
|
|
}
|
|
|
|
if (this->m_filterMap > 0 && this->m_filterMap != info.detail.mapId) {
|
|
return false;
|
|
}
|
|
|
|
if (this->m_filterJob > 0) {
|
|
for (int i = 0; i < 6; ++i) {
|
|
if (this->m_filterJob == info.detail.job[i]) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// OFFSET: 0x00933630
|
|
// FUNCTION: fn_12727
|
|
void UISeekPartyListWnd::Slot35(int delta) {
|
|
if (this->m_scrollable != 0) {
|
|
int step = this->m_visibleRows - 1;
|
|
if (step > 3) {
|
|
step = 3;
|
|
}
|
|
if (delta >= 0) {
|
|
step = -step;
|
|
}
|
|
this->SendMsg(this->m_scrollBar, 7, step, 0, 0, 0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x0091BB10
|
|
// FUNCTION: fn_12607
|
|
int UISeekPartyListWnd::HitTestRow(int x, int y) {
|
|
if (x > this->geometry.width - 0x14 || x < 0x14) {
|
|
return -1;
|
|
}
|
|
|
|
if (y < 0x78 || y > this->geometry.height - 0x1e) {
|
|
return -1;
|
|
}
|
|
|
|
const int row = (y - 0x78) / 0x1e;
|
|
int found = 0;
|
|
int index = 0;
|
|
const int firstIndex = this->m_firstRow * this->m_columnCount;
|
|
for (auto it = g_friendRows.begin(); it != g_friendRows.end(); ++it, ++index) {
|
|
if (index < firstIndex) {
|
|
continue;
|
|
}
|
|
|
|
if (found == this->m_columnCount * row) {
|
|
return index;
|
|
}
|
|
|
|
++found;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
// OFFSET: 0x00930720
|
|
// FUNCTION: fn_12687
|
|
void UISeekPartyListWnd::Slot26(int x, int y) {
|
|
if (y < 0x78) {
|
|
return;
|
|
}
|
|
|
|
const int previous = this->m_hoverIndex;
|
|
const int index = this->HitTestRow(x, y);
|
|
this->m_hoverIndex = index;
|
|
if (previous != index) {
|
|
this->Invalidate();
|
|
}
|
|
|
|
this->SendMsg(nullptr, 6, 0x17d, 0, 0, 0);
|
|
}
|
|
|
|
// OFFSET: 0x00931090
|
|
// FUNCTION: fn_12698
|
|
void UISeekPartyListWnd::Slot25(int x, int y) {
|
|
if (y < 0x78) {
|
|
UIFrameWnd::Slot25(x, y);
|
|
return;
|
|
}
|
|
|
|
const int previous = this->m_hoverIndex;
|
|
const int index = this->HitTestRow(x, y);
|
|
this->m_hoverIndex = index;
|
|
if (previous != index) {
|
|
this->Invalidate();
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00933740
|
|
// FUNCTION: fn_12729
|
|
void UISeekPartyListWnd::UpdateScrollBar() {
|
|
if (!this->m_scrollBar) {
|
|
return;
|
|
}
|
|
|
|
const int count = g_friendRows.size();
|
|
const int rows = count / this->m_columnCount + (count % this->m_columnCount != 0 ? 1 : 0);
|
|
|
|
const int visible = this->m_visibleRows;
|
|
int range = rows - visible;
|
|
if (range < 0) {
|
|
range = 0;
|
|
}
|
|
|
|
this->m_scrollable = range != 0;
|
|
if (range != 0) {
|
|
this->m_scrollBar->SetRange(range, visible, rows);
|
|
if (this->m_firstRow < 0) {
|
|
this->m_firstRow = 0;
|
|
}
|
|
if (this->m_firstRow > rows - this->m_visibleRows) {
|
|
this->m_firstRow = rows - this->m_visibleRows;
|
|
}
|
|
this->m_scrollBar->SetPosition(this->m_firstRow);
|
|
} else {
|
|
this->m_firstRow = 0;
|
|
this->m_scrollBar->SetRange(0, visible, rows);
|
|
}
|
|
|
|
this->m_scrollBar->Invalidate();
|
|
}
|