rodecomp/Source/Contents/HeadResources.cpp
ragnarok-clanker dc3d5ce1a5 Maintenance: Resubmission of 14942 (gate: three existing in-class helpers whose lines changed lacked an annotation; marked // INLINED
Batch #14943 by ragnarok-clanker: no function's compiled code changes; checked with 741 compiled unit(s), including every includer of Source/ActorPickNode.h, Source/Client/Browser/BrowserClientSite.h, Source/Client/Browser/BrowserPopupDispatch.h, Source/Client/Mode/CGameMode.h, Source/Client/Mode/CLoginMode.h, Source/Client/Mode/CMode.h, Source/Client/Mode/ModeDragState.h, Source/Client/Replay.h, Source/Client/Session.h, Source/Client/Stove/StoveMgr.h, Source/Contents/AchievementMgr.h, Source/Contents/ActorNameCard.h, Source/Contents/Actors/CharacterRender.h, Source/Contents/Actors/EffectActors.h, Source/Contents/Actors/GameActor.h, Source/Contents/Actors/GrannyGameActor.h, Source/Contents/Actors/GroundScope.h, Source/Contents/Actors/Item.h, Source/Contents/Actors/Npc.h, Source/Contents/Actors/Pc.h, Source/Contents/Actors/RenderObjectState.h, Source/Contents/Actors/Skill.h, Source/Contents/AdventureGuideMgr.h, Source/Contents/Camera/Camera.h, Source/Contents/Camera/CameraState.h, Source/Contents/CashEmotionMgr.h, Source/Contents/Configuration/GameSettingsMgr.h, Source/Contents/EffectResourceSwitcher.h, Source/Contents/Effects/AMachineEffect.h, Source/Contents/Effects/AcidifiedThrow.h, Source/Contents/Effects/AxeBoomerang.h, Source/Contents/Effects/BlastForge.h, Source/Contents/Effects/CaneOfEvilEyeEffect.h, Source/Contents/Effects/CharacterParticleBundle.h, Source/Contents/Effects/CloudKillEffect.h, Source/Contents/Effects/Effect.h, Source/Contents/Effects/EffectActor.h, Source/Contents/Effects/EffectEmitter.h, Source/Contents/Effects/EffectMaker.h, Source/Contents/Effects/EffectPrimitiveState.h, Source/Contents/Effects/FuumaShouakuEffect.h, Source/Contents/Effects/GravityControlEffect.h, Source/Contents/Effects/HealSpEffect.h, Source/Contents/Effects/Level99Effect.h, Source/Contents/Effects/MapChainEffect.h, Source/Contents/Effects/MonsterSkillEffects.h, Source/Contents/Effects/MsgEffect.h, Source/Contents/Effects/NyanggrassEffect.h, Source/Contents/Effects/Particle.h, Source/Contents/Effects/PowderingEffect.h, Source/Contents/Effects/RagEffectState.h, Source/Contents/Effects/RectUpEffect.h, Source/Contents/Effects/ShadowExceedEffect.h, Source/Contents/Effects/SkillEffects.h, Source/Contents/Effects/SpriteParticle.h, Source/Contents/Effects/StormCannonEffect.h, Source/Contents/Effects/ThrowEffects.h, Source/Contents/EntryQueueMgr.h, Source/Contents/EquipmentResourceMgr.h, Source/Contents/FlyingShipRouteInfo.h, Source/Contents/Ground/GroundGeometry.h, Source/Contents/GuildInfo.h, Source/Contents/Items/ItemDescription.h, Source/Contents/Items/ItemInfo.h, Source/Contents/MapSkyMgr.h, Source/Contents/Messenger/MessengerWindows.h, Source/Contents/Models/ModelNode.h, Source/Contents/NavigationManager.h, Source/Contents/Party/AdventurerAgencyMgr.h, Source/Contents/RDamageVar.h, Source/Contents/RenewQuestMgr.h, Source/Contents/ReputeMgr.h, Source/Contents/RodexMailStore.h, Source/Contents/RouletteMgr.h, Source/Contents/Schedule/Schedule.h, Source/Contents/SignBoard/SignBoard.h, Source/Contents/Skills/ClientSkills.h, Source/Contents/Skills/PlayerSkillBundle.h, Source/Contents/Skills/SkillInfo.h, Source/Contents/SpriteLayerDrawing.h, Source/Contents/TipBoxTitles.h, Source/Contents/UserData/AccountLinkedUserDataMgr.h, Source/Contents/UserData/NormalItemSlots.h, Source/Contents/World/World.h, Source/Contents/WorldView/WorldViewData.h, Source/Render/Primitives/LightmappedPrimitive.h, Source/Render/Primitives/RenderPrimitive.h, Source/Render/Renderer.h, Source/Render/Textures/SpritePixels.h, Source/Render/Textures/Texture.h, Source/Resource/EZeffectResource.h, Source/Resource/Models/AnimatedModelResource.h, Source/Resource/Models/GrannyModelResource.h, Source/Resource/Sprites/ActionResource.h, Source/Resource/World/GroundResource.h, Source/Resource/World/WorldResource.h, Source/Resource/XmlNode.h, Source/UI/AdventureGuide/UIAdventureGuide.h, Source/UI/Buttons/UIBmpRadioBtn.h, Source/UI/Buttons/UIDescriptRace.h, Source/UI/Buttons/UIItemTagButton.h, Source/UI/Buttons/UISlotBmpButton.h, Source/UI/Buttons/UISpriteButton.h, Source/UI/Buttons/UITVTextButton.h, Source/UI/Buttons/UITextureButton.h, Source/UI/CashEmotion/UICashEmotionListWnd.h, Source/UI/CashEmotion/UICashEmotionPack.h, Source/UI/CashShop/UICashShopWnd.h, Source/UI/Chat/UIChatRoomMakeWnd.h, Source/UI/Chat/UIChatRoomTitle.h, Source/UI/Chat/UINewChatWnd.h, Source/UI/Chat/UISubChatHisWnd.h, Source/UI/Chat/UISubChatMiniWnd.h, Source/UI/Chat/UIWhisperWnd.h, Source/UI/Clan/UIClanWnd.h, Source/UI/Dialogs/UIBookWnd.h, Source/UI/Dialogs/UIChooseWarpWnd.h, Source/UI/Dialogs/UIMenuWnd.h, Source/UI/Dialogs/UIMiniMapWnd.h, Source/UI/Dialogs/UIMinimapZoomWnd.h, Source/UI/Dialogs/UINpcEditDialogWnd.h, Source/UI/Dialogs/UIPasswordWnd.h, Source/UI/Dialogs/UISayDialogWnd.h, Source/UI/Dialogs/UISelectCartWnd.h, Source/UI/Dialogs/UITipboxWnd.h, Source/UI/Edit/UIEditBoxEx.h, Source/UI/Edit/UIEditCtrl.h, Source/UI/Edit/UIEditCtrl_Currency.h, Source/UI/Edit/UIItemTagCtrl.h, Source/UI/Enchant/EnchantUI.h, Source/UI/Exchange/UIExchangeUI.h, Source/UI/FrameSkin.h, Source/UI/GameSettings/GameSettingsUI.h, Source/UI/Gauges/UIPcGage.h, Source/UI/Guild/UIGuildHelperWnd.h, Source/UI/Guild/UIGuildWnd.h, Source/UI/Guild/UIGuild_Storage_Log.h, Source/UI/Item/UIEquipmentPropertiesWnd.h, Source/UI/Item/UIItemBaseWnd.h, Source/UI/Item/UIItemPurchaseWnd.h, Source/UI/Item/UIItemSellWnd2.h, Source/UI/Item/UIItemShopWnd.h, Source/UI/Item/UIItemShopWnd2.h, Source/UI/Item/UIItemStoreFindWnd.h, Source/UI/Item/UIItemStoreSubWnd.h, Source/UI/Item/UIItemStoreWnd.h, Source/UI/Item/UIItemWnd.h, Source/UI/Item/UIMerchantItemLogWnd.h, Source/UI/Item/UIParaItemShopWnd.h, Source/UI/Items/UICardItemIllustWnd.h, Source/UI/Items/UIEquipWnd.h, Source/UI/Items/UIExchangeWnd.h, Source/UI/Items/UIGameItem.h, Source/UI/Items/UIItemCollectionWnd.h, Source/UI/Items/UIItemIdentifyWnd.h, Source/UI/Items/UIItemParamChangeDisplayWnd.h, Source/UI/Items/UISwapEquipmentWnd.h, Source/UI/Layout/WindowGeometry.h, Source/UI/Lists/UIChatHisBox.h, Source/UI/Lists/UIComboBoxV2Wnd.h, Source/UI/Lists/UIImgMenu.h, Source/UI/Lists/UIListBoxID.h, Source/UI/Lists/UIListBoxTemplate.h, Source/UI/Lists/UIMemberListBox.h, Source/UI/Lists/UITabControl.h, Source/UI/Lists/UITagListBox.h, Source/UI/Lists/UITreeView.h, Source/UI/Menu/UIMenuIconWnd.h, Source/UI/Navigation/UINavigationV4Wnd.h, Source/UI/ProbabilityTable/UIProbabilityTable.h, Source/UI/Quest/UIQuestDisplay.h, Source/UI/Quest/UIRenewQuestUI.h, Source/UI/Quest/UIRenewQuestWnd.h, Source/UI/Rodex/UIRodexComposeWnd.h, Source/UI/Rodex/UIRodexInboxWnd.h, Source/UI/RuneSystem/UIRuneSystemWindows.h, Source/UI/RuneSystem/UIRuneSystemWnd.h, Source/UI/Shop/UIMerchantItemMyShopWnd.h, Source/UI/Shop/UIMerchantItemPurchaseMSGWnd.h, Source/UI/Shop/UIMerchantItemPurchaseWnd.h, Source/UI/Shop/UIMerchantItemShopWnd.h, Source/UI/Shop/UIMerchantMirrorItemWnd.h, Source/UI/Shop/UIMerchantShopMakeWnd.h, Source/UI/Shop/UIMerchantShopTitle.h, Source/UI/Skill/UISkillDescribeWnd.h, Source/UI/Skill/UISkillListWnd.h, Source/UI/SkillDelayInfo/SkillDelayInfo.h, Source/UI/StylingShop/UIStylingShopWnd.h, Source/UI/Text/CreateLineInfo.h, Source/UI/Text/UIAchWnd.h, Source/UI/Text/UIBalloonText.h, Source/UI/Text/UINameBalloonText.h, Source/UI/Text/UIStaticTextControl.h, Source/UI/Text/UIString.h, Source/UI/Text/UITextViewerControl.h, Source/UI/UIBarGraph.h, Source/UI/UIBartermarketWnd.h, Source/UI/UIChangeMaterialWnd.h, Source/UI/UIGradeEnchantWnd.h, Source/UI/UILapineScrollBar.h, Source/UI/UIMacroBlackListCheckWnd.h, Source/UI/UIMacroDetectorWnd.h, Source/UI/UIMacroReport.h, Source/UI/UIMacroUserInfoWnd.h, Source/UI/UIPreviewEquipWnd.h, Source/UI/UIRefiningWnd.h, Source/UI/UIScrollWnd.h, Source/UI/UISlotBitmap.h, Source/UI/Window/FuncDrawWNDChar.h, Source/UI/Window/UIBattleMsgOptionWnd.h, Source/UI/Window/UIChatRoomWnd.h, Source/UI/Window/UICollectionSystemWnd.h, Source/UI/Window/UIControl.h, Source/UI/Window/UIHomunInfoWnd.h, Source/UI/Window/UIHotKeyWnd.h, Source/UI/Window/UIJobListWnd.h, Source/UI/Window/UILoginOTPWnd.h, Source/UI/Window/UILoginWnd.h, Source/UI/Window/UIMakeCharWnd.h, Source/UI/Window/UIMonsterDisplayWnd.h, Source/UI/Window/UIMonsterInfoWnd.h, Source/UI/Window/UINavigationHelpWnd.h, Source/UI/Window/UINavigationWnd.h, Source/UI/Window/UINewMakeCharWnd.h, Source/UI/Window/UINewSelectCharWnd.h, Source/UI/Window/UINoticeWnd.h, Source/UI/Window/UIPetInfoWnd.h, Source/UI/Window/UIRegisterMgr.h, Source/UI/Window/UIRoMapWnd.h, Source/UI/Window/UIRodexContentsWnd.h, Source/UI/Window/UISecondCostumeWnd.h, Source/UI/Window/UISeekPartyMBWnd.h, Source/UI/Window/UISeekPartyWnd.h, Source/UI/Window/UISelCharForUServerWnd.h, Source/UI/Window/UISerachStoreInfoWnd.h, Source/UI/Window/UITransMenuWnd.h, Source/UI/Window/UIWindow.h, Source/UI/Window/UIWindowMgr.h, Source/UI/Window/UIWindowMgr.inl, Source/Utility/Lexicon/LexiconSerializer.h.
2026-11-08 16:44:36 +00:00

323 lines
8.1 KiB
C++

#include "Client/Session.h"
#include "Contents/Jobs/JobId.h"
#include "Contents/EquipmentResourceMgr.h"
#include "Resource/ResourceMgr.h"
#include "Utility/Text/FormatString.h"
#include <string>
// GLOBAL: gl_24703
EquipmentResourceMgr* g_equipmentResourceMgr;
// GLOBAL: gl_24539
const char* g_equipmentResourceExtensions[2] = {"act", "spr"};
// OFFSET: 0x00DDDFE0
// FUNCTION: fn_23393
int CSession::GetDisplayJob() {
const int job = this->m_job;
if (job == 7) {
if (g_session.m_jobFlags >> 5 & 1) {
return job + 6;
}
} else if (job == 14) {
if (g_session.m_jobFlags >> 5 & 1) {
return job + 7;
}
} else if (job == 4008) {
if (g_session.m_jobFlags >> 5 & 1) {
return job + 6;
}
} else if (job == 4030) {
if (g_session.m_jobFlags >> 5 & 1) {
return job + 6;
}
} else if (job == 4015) {
if (g_session.m_jobFlags >> 5 & 1) {
return job + 7;
}
} else if (job == 4037) {
if (g_session.m_jobFlags >> 5 & 1) {
return job + 7;
}
} else if (job == 4066) {
if (g_session.m_jobFlags >> 5 & 1) {
return job + 16;
}
} else if (job == 4073) {
if (g_session.m_jobFlags >> 5 & 1) {
return job + 10;
}
} else if (job == 4102) {
if (g_session.m_jobFlags >> 5 & 1) {
return job + 8;
}
} else if (job == 4054) {
if (g_session.m_jobFlags >> 19 & 1) {
return 4080;
}
if (g_session.m_jobFlags >> 23 & 1) {
return 4088;
}
if (g_session.m_jobFlags & 0x1000000) {
return 4090;
}
if (g_session.m_jobFlags >> 25 & 1) {
return 4092;
}
if (g_session.m_jobFlags >> 26 & 1) {
return 4094;
}
} else if (job == 4060) {
if (g_session.m_jobFlags >> 19 & 1) {
return 4081;
}
if (g_session.m_jobFlags >> 23 & 1) {
return 4089;
}
if (g_session.m_jobFlags & 0x1000000) {
return 4091;
}
if (g_session.m_jobFlags >> 25 & 1) {
return 4093;
}
if (g_session.m_jobFlags >> 26 & 1) {
return 4095;
}
} else if (job == 4096) {
if (g_session.m_jobFlags >> 19 & 1) {
return job + 13;
}
} else if (job == 4047) {
if (g_session.m_jobFlags >> 15 & 1) {
return job + 1;
}
} else if (job == 4056) {
if (g_session.m_jobFlags >> 21 & 1) {
return job + 28;
}
} else if (job == 4062) {
if (g_session.m_jobFlags >> 21 & 1) {
return job + 23;
}
} else if (job == 4098) {
if (g_session.m_jobFlags >> 21 & 1) {
return job + 13;
}
} else if (job == 4058) {
if (g_session.madogearType != 0) {
return job + 28;
}
} else if (job == 4064) {
if (g_session.madogearType != 0) {
return job + 23;
}
} else if (job == 4100) {
if (g_session.madogearType != 0) {
return job + 12;
}
} else if (job == 4253) {
if (g_session.madogearType != 0) {
return job + 26;
}
} else if (job == 4226) {
if (g_session.m_jobFlags >> 15 & 1) {
return job + 12;
}
} else if (job == 4239) {
if (g_session.m_jobFlags >> 15 & 1) {
return job + 4;
}
} else if (job == 4241) {
if (g_session.m_jobFlags >> 15 & 1) {
return job + 3;
}
} else if (job == 4257) {
if (g_session.m_jobFlags >> 21 & 1) {
return job + 21;
}
} else if (job == 4252) {
if (g_session.m_jobFlags >> 19 & 1) {
return job + 28;
}
} else if (job == 4258) {
if (g_session.m_jobFlags >> 5 & 1) {
return job + 23;
}
} else if (job == 4302) {
if (g_session.m_jobFlags >> 15 & 1) {
return job + 14;
}
}
return job;
}
// OFFSET: 0x00E0A430
// FUNCTION: fn_23796
std::string CSession::GetSexName(int sex) {
return this->m_sexNames[sex];
}
// OFFSET: 0x00DDD100
// FUNCTION: fn_23380
std::string CSession::GetImfName(int job) {
return this->m_imfNames[job];
}
// OFFSET: 0x00BAB110
// FUNCTION: fn_19751
std::string EquipmentResourceMgr::GetHeadName(int type, int job, int sex, int* head) {
if (job < 0 || (job > 30 && job < 1000) || (job > 1000 && job < 3999) || (job >= 20021 && job < 32000)) {
job = 0;
}
std::string result;
const int male = sex != 0 ? 1 : 0;
std::string sexName;
std::string headName;
if (g_session.IsDoramJob(job) == true) {
if (*head < 1 || *head > 10) {
*head = 10;
}
if (male == 1) {
headName = g_session.m_doramMaleHeadNames[*head];
} else if (male == 0) {
headName = g_session.m_doramFemaleHeadNames[*head];
}
} else {
if (*head < 0 || *head > 45) {
*head = 13;
}
if (male == 1) {
headName = g_session.m_humanMaleHeadNames[*head];
} else if (male == 0) {
headName = g_session.m_humanFemaleHeadNames[*head];
}
}
sexName = g_session.GetSexName(male);
result = this->GetBodyRacePrefix(job) +
FormatOwnedString("\\머리통\\%s\\%s_%s.%s", sexName.c_str(), headName.c_str(), sexName.c_str(), g_equipmentResourceExtensions[type]);
return result;
}
// OFFSET: 0x00DD9CC0
// FUNCTION: fn_23336
void CSession::NormalizeHead(int* head, int job) {
if (*head != 0) {
return;
}
if (job < 23) {
switch (job) {
case JT_SWORDMAN:
*head = 2;
return;
case JT_ACOLYTE:
*head = 5;
return;
case JT_MAGICIAN:
*head = 3;
return;
case JT_ARCHER:
*head = 4;
return;
case JT_MERCHANT:
*head = 6;
return;
case JT_THIEF:
*head = 7;
return;
}
}
*head = 1;
}
// OFFSET: 0x00BAAB10
// FUNCTION: fn_19750
std::string EquipmentResourceMgr::GetHeadPalName(int head, int job, int sex, int palette) {
std::string result;
std::string sexName;
std::string headName;
if (g_session.IsDoramJob(job) == true) {
if (head < 1 || head > 10) {
head = 10;
}
if (sex == 1) {
headName = g_session.m_doramMaleHeadNames[head];
} else if (sex == 0) {
headName = g_session.m_doramFemaleHeadNames[head];
}
if (!ResourceMgr::Instance().Exists(result.c_str())) {
sexName = static_cast<const std::string&>(g_session.GetSexName(sex));
result = static_cast<const std::string&>(FormatOwnedString("%s\\머리\\머리%s_%s_%d.pal", this->GetBodyRacePrefix(job).c_str(), headName.c_str(), sexName.c_str(), palette));
}
return result;
} else {
g_session.NormalizeHead(&head, job);
if (sex == 1) {
headName = g_session.m_humanMaleHeadNames[head];
} else if (sex == 0) {
headName = g_session.m_humanFemaleHeadNames[head];
}
sexName = static_cast<const std::string&>(g_session.GetSexName(sex));
result = static_cast<const std::string&>(FormatOwnedString("머리\\머리%s_%s_%d.pal", headName.c_str(), sexName.c_str(), palette));
return result;
}
}
// OFFSET: 0x00DDCD50
// FUNCTION: fn_23373
std::string CSession::GetHeadActName(int job, int sex, int* head) {
return g_equipmentResourceMgr->GetHeadName(0, job, sex, head);
}
// OFFSET: 0x00DDCDC0
// FUNCTION: fn_23374
std::string CSession::GetPlayerHeadActName() {
EquipmentResourceMgr* const mgr = g_equipmentResourceMgr;
return mgr->GetHeadName(0, this->GetDisplayJob(), this->SyncUnknown0E98(), &this->m_head);
}
// OFFSET: 0x00DDCEF0
// FUNCTION: fn_23375
std::string CSession::GetHeadPalName(int head, int job, int sex, int palette) {
return g_equipmentResourceMgr->GetHeadPalName(head, job, sex, palette);
}
// OFFSET: 0x00DDCF60
// FUNCTION: fn_23376
std::string CSession::GetPlayerHeadPalName() {
return g_equipmentResourceMgr->GetHeadPalName(this->m_head, this->m_job, this->cachedSex, this->m_headPalette);
}
// OFFSET: 0x00DDCFE0
// FUNCTION: fn_23377
std::string CSession::GetHeadSprName(int job, int sex, int* head) {
return g_equipmentResourceMgr->GetHeadName(1, job, sex, head);
}
// OFFSET: 0x00DDD050
// FUNCTION: fn_23378
std::string CSession::GetPlayerHeadSprName() {
EquipmentResourceMgr* resources = g_equipmentResourceMgr;
const int sex = this->SyncUnknown0E98();
const int job = this->GetDisplayJob();
return resources->GetHeadName(1, job, sex, &this->m_head);
}
// OFFSET: 0x00DDE6B0
// FUNCTION: fn_23397
std::string CSession::GetBodySprName(int job, int sex, int costumeJob, int costume) {
return g_equipmentResourceMgr->GetBodyResourceName(1, job, sex, costumeJob, costume);
}