Maintenance: Linkage preludes, part 3: the last 5 units with extern template lines (GameMode, GameModeHandlers, FontCache, UITextButt

Batch #18106 by ragnarok-clanker: no function's compiled code changes; checked with 5 compiled unit(s), including every includer of Source/Linkage/Source/Client/Mode/GameMode.cpp.h, Source/Linkage/Source/Client/Mode/GameModeHandlers.cpp.h, Source/Linkage/Source/Render/Text/FontCache.cpp.h, Source/Linkage/Source/UI/Buttons/UITextButton.cpp.h, Source/Linkage/Source/UI/Edit/UIEditVariants.cpp.h.
This commit is contained in:
ragnarok-clanker 2026-11-12 09:28:42 +00:00
commit c86817f27c
10 changed files with 311 additions and 56 deletions

View file

@ -9112,7 +9112,6 @@ void CGameMode::UpdateHoverNameBalloon() {
#include <direct.h>
#include <format>
#include <io.h>
#include "Utility/StdStringCompare.h"
#pragma pack(push, 1)
struct TalkWhisperSettingPacket {

View file

@ -370,7 +370,6 @@ struct GroundSkillArgumentData {
static_assert(sizeof(GroundSkillExtendedData) == 0x20);
static_assert(sizeof(GroundSkillArgumentData) == 0x24);
// OFFSET: 0x00D66230
// FUNCTION: fn_22010
void CGameMode::ReceivePartyRoster(const unsigned char* packet) {
@ -489,7 +488,6 @@ void CGameMode::SpawnGroundSkill(std::uint32_t aid, std::uint32_t owner, int val
skill->SendMsg(nullptr, AM_SKILLSTANDENTRY, 0, address, address >> 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
int CountItemRandomOptions(const unsigned char* entries);
struct GameOptionEntry {
@ -1245,8 +1243,6 @@ void CGameMode::ReceiveBillingInfo(const unsigned char* packet) {
g_windowMgr.SendNotice(UIM_PUSHINTOCHATHISTORY, reinterpret_cast<std::intptr_t>(text), 0xFFFFFF, 0, 0, 0);
}
extern template std::uint32_t& std::map<std::uint32_t, std::uint32_t>::operator[](const std::uint32_t&);
struct ActorMessage32 {
/* 0000 */ std::string text;
/* 0018 */ std::string extra;
@ -1928,16 +1924,11 @@ void CGameMode::ReceiveRuneRewardSteps(const unsigned char* data) {
++entry;
}
UIWindow* window = g_windowMgr.LookupWindow(WID_RUNESYSTEMWND);
if (window) {
window->SendMsg(window, UM_REFRESH, 0, 0, 0, 0);
}
}
using RodexMailTree = std::_Tree<std::_Tmap_traits<
std::int64_t, RodexMail, std::greater<std::int64_t>, std::allocator<std::pair<const std::int64_t, RodexMail>>, false>>;
extern template std::_Tree_find_result<std::_Tree_node<std::pair<const std::int64_t, RodexMail>, void*>*>
RodexMailTree::_Find_lower_bound<std::int64_t>(const std::int64_t&) const;
// OFFSET: 0x00D66B10
// FUNCTION: fn_22021
@ -2126,7 +2117,6 @@ void CGameMode::ReceiveGameOptionResult(int command, int result, int enabled) {
}
}
// OFFSET: 0x00D678E0
// FUNCTION: fn_22035
void CGameMode::ReceiveServiceRequest(unsigned char type, int value) {
@ -2501,9 +2491,6 @@ void CGameMode::ReceiveDdukddakBoxTest(const unsigned char* packet) {
#include "UI/Text/UIBroadcastBalloon.h"
extern template decltype(auto) std::list<BroadcastBalloonLine>::emplace_back<std::string&, std::uint32_t&>(std::string&, std::uint32_t&);
extern template std::list<BroadcastBalloonLine>::~list();
#include <chrono>
// OFFSET: 0x00D3C9B0
@ -2663,7 +2650,6 @@ void CGameMode::Zc_Skill_Entry(const unsigned char* record) {
data.level = 0;
packet.visible = 1;
CSkill* skill = static_cast<CSkill*>(this->scene->GetSkillByAID(data.aid));
if (data.owner != g_session.m_aid && !data.visible) {

View file

@ -0,0 +1,106 @@
#pragma once
#include "Contents/Actors/ActorEnums.h"
#include "UI/Window/WindowId.h"
#include "Client/Mode/CGameMode.h"
#include "UI/Window/UIEnums.h"
#include "Client/Mode/ModeMessage.h"
#include "Client/Mode/GameModeEnums.h"
#include "Contents/Items/ItemId.h"
#include "Contents/Jobs/JobId.h"
#include "Contents/Skills/SkillId.h"
#include "Contents/Skills/SkillUnitId.h"
#include "UI/GameSettings/TalkType.h"
#include "Client/Mode/CLoginMode.h"
#include "Client/Mode/ModeMgr.h"
#include "Client/Replay/Replay.h"
#include "Client/Input/InputCharset.h"
#include "Client/Session/Session.h"
#include "Contents/Actors/Npc.h"
#include "Contents/Actors/Pc.h"
#include "Contents/Camera/Camera.h"
#include "Contents/Configuration/ServiceConfiguration.h"
#include "Contents/Configuration/ServiceOptions.h"
#include "Contents/Effects/Core/DummyEffectLauncher.h"
#include "Contents/Effects/Core/EffectLists.h"
#include "Contents/Effects/Skills/SkillEffects.h"
#include "Contents/Effects/Core/RagEffect.h"
#include "Contents/Ground/GroundGeometry.h"
#include "Contents/Jobs/JobInheritance.h"
#include "Contents/Guild/GuildInfo.h"
#include "Contents/Guild/GuildMgr.h"
#include "Contents/Tables/MessageTable.h"
#include "Contents/Actors/MousePointer.h"
#include "Contents/Actors/RenderObject.h"
#include "Contents/Items/ItemInfo.h"
#include "Contents/Actors/PlayerNameDictionary.h"
#include "Contents/Skills/ClientSkills.h"
#include "Contents/Skills/SkillInfo.h"
#include "Contents/Sound/SoundMgr.h"
#include "Contents/World/World.h"
#include "Network/Connection/Connection.h"
#include "Network/Packets/PacketLengths.h"
#include "Network/Packets/PacketId.h"
#include "Render/Renderer.h"
#include "Resource/World/TerrainResource.h"
#include "Script/LuaScript.h"
#include "UI/Text/UIBroadcastBalloon.h"
#include "UI/Chat/UINewChatWnd.h"
#include "UI/Window/UIWindow.h"
#include "UI/Window/UIWindowMgr.h"
#include "UI/Edit/UIEditCtrl.h"
#include "Contents/Actors/GrannyGameActor.h"
#include "Utility/Text/FormatString.h"
#include "Utility/Text/TextTokens.h"
#include "Client/Application/Launcher.h"
#include "UI/Navigation/NavigationLink.h"
#include "Contents/Quest/RenewQuestMgr.h"
#include "Contents/Party/AdventurerAgencyMgr.h"
#include "Contents/Skills/AutomaticSkills.h"
#include "UI/Shortcuts/UIShortCutWnd.h"
#include "Contents/Map/MapInfoMgr.h"
#include <timeapi.h>
#include "File/File.h"
#include "Client/Stove/StoveMgr.h"
#include "Contents/Events/ShowRankingScheduler.h"
#include "Render/Primitives/TextureQuad.h"
#include "UI/Cooldowns/CooldownOwner.h"
#include "Utility/Text/HexString.h"
#include "Client/Application/Timer.h"
#include "Contents/Map/MapSkyMgr.h"
#include "Contents/Messenger/WhisperBlockMgr.h"
#include "Contents/Tables/ForbiddenWords.h"
#include "Contents/Items/BarterMarketItemMgr.h"
#include "Client/Input/Language.h"
#include "UI/Chat/UIChatRoomMakeWnd.h"
#include "UI/Gauges/UIPcGage.h"
#include "Render/Projection/ScreenGeometry.h"
#include "UI/Shop/UIMerchantShopMakeWnd.h"
#include "UI/Items/UIRefiningWnd.h"
#include "UI/Items/UIGradeEnchantWnd.h"
#include "UI/Items/UISwapEquipmentWnd.h"
#include "UI/Monster/UIMonsterInfoWnd.h"
#include "Contents/Clan/ClanInfo.h"
#include "Contents/Actors/ActorStateFlags.h"
#include "Contents/Items/SelectPackageItemMgr.h"
#include "Contents/Jobs/JobNames.h"
#include "Contents/Navigation/NavigationManager.h"
#include "UI/Guild/UIGuildWnd.h"
#include "Contents/CashEmotion/CashEmotionMgr.h"
#include "Contents/Tables/SimpleStringMgr.h"
#include "File/ShortcutFilename.h"
#include "UI/Dialogs/UICntWnd.h"
#include "UI/Dialogs/UINormalMB.h"
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <mbstring.h>
#include <new>
#include "Client/Application/ApplicationWindow.h"
#include "UI/Login/UINewSelectCharWnd.h"
#include "Network/TextEncoding.h"
#include "Resource/MSGSTRINGID.h"
#include "Utility/Cipher/LocalEncryptedName.h"
#include "Utility/Cipher/CryptName.h"
extern template int std::_Traits_compare<std::char_traits<char>>(const char*, std::size_t, const char*, std::size_t) noexcept;

View file

@ -0,0 +1,83 @@
#pragma once
#include "Client/Mode/CGameMode.h"
#include "UI/Window/WindowId.h"
#include "UI/Window/UIEnums.h"
#include "Contents/Actors/ActorEnums.h"
#include "Network/Packets/NoticeEnums.h"
#include "Contents/Skills/SkillUnitId.h"
#include "Network/Packets/ModeResultEnums.h"
#include "Client/Mode/CLoginMode.h"
#include "Client/Mode/ModeMgr.h"
#include "Client/Application/Launcher.h"
#include "Client/Input/InputCharset.h"
#include "Client/Session/Session.h"
#include "Client/Replay/Replay.h"
#include "Contents/Achievement/AchievementMgr.h"
#include "Contents/CashEmotion/CashEmotionMgr.h"
#include "Contents/Clan/ClanInfo.h"
#include "Contents/Actors/Pc.h"
#include "Contents/Actors/Skill.h"
#include "Contents/Skills/GraffiSkill.h"
#include "Contents/Actors/RenderObject.h"
#include "Contents/Configuration/ServiceConfiguration.h"
#include "Contents/Configuration/ServiceOptions.h"
#include "Contents/Effects/Core/Effect.h"
#include "Contents/Effects/Core/EffectLists.h"
#include "Contents/Effects/Skills/MonsterSkillEffects.h"
#include "Contents/Tables/ForbiddenWords.h"
#include "Contents/Ground/TerrainHeight.h"
#include "Contents/Guild/GuildMgr.h"
#include "Contents/Items/ItemDescription.h"
#include "Contents/Items/ItemInfo.h"
#include "Contents/RuneSystem/RuneSystem.h"
#include "Contents/Tables/MessageTable.h"
#include "Contents/Rodex/RodexMailStore.h"
#include "Contents/Quest/RenewQuestMgr.h"
#include "Contents/Sound/SoundMgr.h"
#include "Contents/World/World.h"
#include "File/File.h"
#include "File/FileCreation.h"
#include "Script/LuaScript.h"
#include "Network/Connection/Connection.h"
#include "Network/Packets/PacketLengths.h"
#include "Render/Renderer.h"
#include "Resource/World/TerrainResource.h"
#include "UI/Dialogs/UITipboxWnd.h"
#include "UI/GameSettings/GameSettingsUI.h"
#include "UI/Rodex/UIRodexInboxWnd.h"
#include "UI/Text/UITransBalloonText.h"
#include "UI/Gauges/UIBarGraph.h"
#include "UI/Items/UIGradeEnchantWnd.h"
#include "UI/Status/UIHomunInfoWnd.h"
#include "UI/Party/UISeekPartyWnd.h"
#include "UI/Window/UIWindow.h"
#include "UI/Window/UIWindowMgr.h"
#include "Utility/Math/Vector3d.h"
#include "Utility/Text/FormatString.h"
#include <algorithm>
#include <cstdint>
#include <cstdio>
#include <cstring>
#include <ctime>
#include <fstream>
#include <map>
#include <new>
#include <string>
#include <utility>
#include <vector>
#include <direct.h>
#include <io.h>
#include <windows.h>
#include <timeapi.h>
#include "Resource/MSGSTRINGID.h"
#include "Network/Packets/PacketId.h"
#include "UI/Text/UIBroadcastBalloon.h"
extern template std::uint32_t& std::map<std::uint32_t, std::uint32_t>::operator[](const std::uint32_t&);
using RodexMailTree = std::_Tree<std::_Tmap_traits<
std::int64_t, RodexMail, std::greater<std::int64_t>, std::allocator<std::pair<const std::int64_t, RodexMail>>, false>>;
extern template std::_Tree_find_result<std::_Tree_node<std::pair<const std::int64_t, RodexMail>, void*>*>
RodexMailTree::_Find_lower_bound<std::int64_t>(const std::int64_t&) const;
extern template decltype(auto) std::list<BroadcastBalloonLine>::emplace_back<std::string&, std::uint32_t&>(std::string&, std::uint32_t&);
extern template std::list<BroadcastBalloonLine>::~list();

View file

@ -0,0 +1,11 @@
#pragma once
#include "Render/Text/FontCache.h"
#include <algorithm>
#include <atlconv.h>
#include <cstring>
#include <iterator>
#include <string>
#include <tuple>
extern template bool std::_Traits_equal<std::char_traits<char>>(const char*, std::size_t, const char*, std::size_t) noexcept;

View file

@ -0,0 +1,81 @@
#pragma once
#include "Client/Input/InputCharset.h"
#include "Client/Mode/ModeMessage.h"
#include "UI/Window/UIEnums.h"
#include "UI/Window/WindowId.h"
#include "UI/Window/UIEnums.h"
#include "Client/Mode/CMode.h"
#include "Client/Mode/ModeMgr.h"
#include "Render/Renderer.h"
#include "UI/Login/UINewSelectCharWnd.h"
#include "Client/Replay/Replay.h"
#include "UI/Window/WindowPolicy.h"
#include "Render/Text/FontCache.h"
#include "Render/DeviceContext/DeviceContext.h"
#include "UI/Gauges/UIBarGraph.h"
#include "UI/Buttons/UIBmpRadioBtn.h"
#include "Render/Text/TextContext.h"
#include "UI/Window/UIWindowMgr.h"
#include "UI/Buttons/UIItemTagButton.h"
#include "UI/Items/UIItemMoveInfo.h"
#include "UI/Buttons/UITextButton.h"
#include "UI/Lists/UIImgMenu.h"
#include "UI/Lists/UITabControl.h"
#include "UI/Lists/UITreeView.h"
#include "UI/Buttons/UIStaticItem.h"
#include "Client/Session/Session.h"
#include "Contents/Hotkeys/HotkeyInfo.h"
#include "Contents/Items/ItemNaming.h"
#include "Contents/Tables/MessageTable.h"
#include "Contents/Skills/ClientSkills.h"
#include "UI/Window/UIBasicCtrl.h"
#include "Utility/Text/FormatString.h"
#include "UI/Lists/UIMemberListBox.h"
#include "UI/Buttons/UIBitmapButton2.h"
#include "UI/Buttons/UISlotBmpButton.h"
#include "UI/Buttons/UIStaticBitmap.h"
#include "UI/Buttons/UITVBitmapButton.h"
#include "UI/Buttons/UITVTextButton.h"
#include "UI/Lists/UIComboBox.h"
#include "UI/Lists/UIComboBoxV2Wnd.h"
#include "UI/Items/UIItemStoreComboBox.h"
#include "UI/SelectPackageItemBox/UIPackageBoxNameList.h"
#include "UI/Lists/UIListBoxEx.h"
#include "UI/Lists/UIListBoxID.h"
#include "UI/Lists/UIScrollBarVariants.h"
#include "UI/Lists/TableBox.h"
#include "UI/Text/UITransBalloonText.h"
#include "UI/Text/UIString.h"
#include "UI/Edit/UIEditCtrl_Currency.h"
#include "Client/Input/Language.h"
#include "Utility/Text/GroupedInteger.h"
#include "Client/Input/Mouse.h"
#include "Contents/Items/ItemDescription.h"
#include "Resource/Bitmap/BitmapResource.h"
#include "Resource/ResourceMgr.h"
#include "Resource/Bitmap/TextureNames.h"
#include "UI/Edit/UIEditCtrl.h"
#include "UI/Navigation/UIListBoxNavi.h"
#include "UI/Text/ColoredText.h"
#include "UI/Window/WindowBorder.h"
#include "Resource/Bitmap/SkinPalette.h"
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include "Resource/MSGSTRINGID.h"
#include <format>
extern template std::_List_node<UIWindow*, void*>* std::list<UIWindow*>::_Emplace<UIWindow* const&>(std::_List_node<UIWindow*, void*>* const, UIWindow* const&);
using IntIntTree = std::_Tree<std::_Tmap_traits<int, int, std::less<int>, std::allocator<std::pair<const int, int>>, false>>;
extern template std::_Tree_find_result<std::_Tree_node<std::pair<const int, int>, void*>*>
IntIntTree::_Find_lower_bound<int>(const int&) const;
using IdListLineTree = std::_Tree<std::_Tmap_traits<int, IdListLine, std::less<int>, std::allocator<std::pair<const int, IdListLine>>, false>>;
extern template std::_Tree_find_result<std::_Tree_node<std::pair<const int, IdListLine>, void*>*>
IdListLineTree::_Find_lower_bound<int>(const int&) const;
using ExtendedListLineTree = std::_Tree<std::_Tmap_traits<int, ExtendedListLine, std::less<int>, std::allocator<std::pair<const int, ExtendedListLine>>, false>>;
extern template std::_Tree_find_result<std::_Tree_node<std::pair<const int, ExtendedListLine>, void*>*>
ExtendedListLineTree::_Find_lower_bound<int>(const int&) const;
extern template UITextButton** std::allocator<UITextButton*>::allocate(const std::size_t);
extern template std::string std::format<const std::string&>(const std::_Fmt_string<const std::string&>, const std::string&);
extern template std::string::basic_string(std::_String_constructor_concat_tag, const std::string&, const char*, std::size_t, const char*, std::size_t);

View file

@ -0,0 +1,30 @@
#pragma once
#include "UI/Window/UIEnums.h"
#include "Client/Input/InputCharset.h"
#include "UI/Window/UIEnums.h"
#include "Client/Input/Language.h"
#include "Contents/Skin/SkinMgr.h"
#include "Render/Text/FontCache.h"
#include "Render/Text/TextContext.h"
#include "Resource/Bitmap/BitmapResource.h"
#include "Resource/ResourceMgr.h"
#include "Resource/Bitmap/SkinPalette.h"
#include "Resource/Bitmap/TextureNames.h"
#include "UI/Buttons/UIButton.h"
#include "UI/Buttons/UIItemTagButton.h"
#include "UI/Window/InputFocus.h"
#include "UI/Window/UIWindowMgr.h"
#include "UI/Chat/UINewChatWnd.h"
#include "UI/Edit/UIEditCtrl.h"
#include "UI/Lists/UIScrollBar.h"
#include "UI/Lists/UIScrollBarVariants.h"
#include "Network/TextEncoding.h"
#include "Utility/Text/FormatString.h"
#include "Utility/Text/StringUtil.h"
#include <cstring>
#include <windows.h>
#include <timeapi.h>
extern template void std::vector<unsigned int>::_Tidy() noexcept;
extern template std::size_t std::_Traits_find<std::char_traits<char>>(const char* const, const std::size_t, const std::size_t, const char* const, const std::size_t) noexcept;

View file

@ -256,8 +256,6 @@ HFONT FontCache::Get(int family, int height, unsigned charset, unsigned char bol
return entry.font;
}
#include "Utility/StdTraitsEqual.h"
// OFFSET: 0x0054F830
// FUNCTION: fn_01959
int FallbackFontIndex(const std::string& name) {

View file

@ -63,19 +63,6 @@
#include <cstring>
#include "Resource/MSGSTRINGID.h"
#include "Utility/StdWindowListEmplace.h"
using IntIntTree = std::_Tree<std::_Tmap_traits<int, int, std::less<int>, std::allocator<std::pair<const int, int>>, false>>;
extern template std::_Tree_find_result<std::_Tree_node<std::pair<const int, int>, void*>*>
IntIntTree::_Find_lower_bound<int>(const int&) const;
using IdListLineTree = std::_Tree<std::_Tmap_traits<int, IdListLine, std::less<int>, std::allocator<std::pair<const int, IdListLine>>, false>>;
extern template std::_Tree_find_result<std::_Tree_node<std::pair<const int, IdListLine>, void*>*>
IdListLineTree::_Find_lower_bound<int>(const int&) const;
using ExtendedListLineTree = std::_Tree<std::_Tmap_traits<int, ExtendedListLine, std::less<int>, std::allocator<std::pair<const int, ExtendedListLine>>, false>>;
extern template std::_Tree_find_result<std::_Tree_node<std::pair<const int, ExtendedListLine>, void*>*>
ExtendedListLineTree::_Find_lower_bound<int>(const int&) const;
extern template UITextButton** std::allocator<UITextButton*>::allocate(const std::size_t);
// OFFSET: 0x0086EEB0
// FUNCTION: fn_11085
UITextButton::UITextButton() : UIButton() {
@ -180,8 +167,6 @@ void UITextButton::OnMouseMove(int x, int y) {
}
}
// OFFSET: 0x00892000
// FUNCTION: fn_11461
void UITextButton::OnMouseHover(int x, int y) {
@ -432,9 +417,6 @@ void UIBarGraph4::OnMouseHover(int, int) {
this->ToScreen(screenX, screenY);
char text[260];
std::memset(text, 0, sizeof(text));
const int permille = static_cast<int>(static_cast<float>(*this->m_current) / static_cast<float>(*this->m_maximum) * 1000.0f);
@ -453,9 +435,6 @@ void UIINT64BarGraph::OnMouseHover(int, int) {
this->ToScreen(screenX, screenY);
char text[260];
std::memset(text, 0, sizeof(text));
const int permille = static_cast<int>(static_cast<double>(this->m_current) / static_cast<double>(this->m_maximum) * 1000.0);
@ -539,9 +518,6 @@ void UIBasicItemCtrl::OnMouseHover(int, int) {
this->ToScreen(screenX, screenY);
if (!text.empty()) {
g_modeMgr.gameMode->ShowTooltip(text.c_str(), screenX, screenY, -1, false, true);
}
@ -558,9 +534,6 @@ void UIBasicSkillCtrl::OnMouseHover(int, int) {
this->ToScreen(screenX, screenY);
LuaScript& script = *g_session.m_hotkeyScript;
CSkillInfo skill = g_session.LookupSkill(static_cast<std::uint32_t>(this->m_skillId));
const int sp = skill.UseSpAmount(script, skill.level);
@ -654,9 +627,6 @@ void UIStaticItem::OnMouseHover(int, int) {
this->ToScreen(screenX, screenY);
g_modeMgr.gameMode->ShowTooltip(text, screenX, screenY, -1, false, true);
}
@ -2815,8 +2785,6 @@ void UIScrollBar_Custom::SetThumbBitmaps(std::string top, std::string middle, st
#include <format>
extern template std::string std::format<const std::string&>(const std::_Fmt_string<const std::string&>, const std::string&);
// OFFSET: 0x00884720
// FUNCTION: fn_11310
void UIItemTagOnChat::PlaceTagButton(UIWindow* button, const std::string& name, const int& x, int) {
@ -3556,9 +3524,6 @@ int UISlotBmpButton::SendMsg(UIWindow* sender, int message, std::intptr_t argume
#include "Client/Mode/CMode.h"
#include "Client/Mode/CLoginMode.h"
#include "Utility/StdStringConcat.h"
// OFFSET: 0x0088EBC0
// FUNCTION: fn_11385
void UISlotBmpButton::Paint() {
@ -3635,4 +3600,3 @@ UIItemTagButton::UIItemTagButton() {
this->tipId = 0;
}

View file

@ -1195,9 +1195,6 @@ UIShowAndEditTimeCtrl::UIShowAndEditTimeCtrl() : UIWindow(0) {
#include "UI/Edit/UIItemTagCtrl.h"
#include "UI/Edit/UIEditPaint.inl"
extern template void std::vector<unsigned int>::_Tidy() noexcept;
#include "Utility/StdTraitsFind.h"
// OFFSET: 0x0085C4F0
// FUNCTION: fn_10801
void UIChatEditCtrl::Paint() {