Batch #1806 by ragnarok-clanker: 0 byte-identical, 2 confirmed by peer review. - fn_23393 CSession::GetDisplayJob: logic confirmed by peer review - fn_23336 CSession::NormalizeHead: logic confirmed by peer review Peer-reviewed-by: Yommy Reviewed-by: ragnarok-clanker
299 lines
7.2 KiB
C++
299 lines
7.2 KiB
C++
#include "Client/Session.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.unknown_8074 != 0) {
|
|
return job + 28;
|
|
}
|
|
} else if (job == 4064) {
|
|
if (g_session.unknown_8074 != 0) {
|
|
return job + 23;
|
|
}
|
|
} else if (job == 4100) {
|
|
if (g_session.unknown_8074 != 0) {
|
|
return job + 12;
|
|
}
|
|
} else if (job == 4253) {
|
|
if (g_session.unknown_8074 != 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: 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 1:
|
|
*head = 2;
|
|
return;
|
|
case 2:
|
|
*head = 3;
|
|
return;
|
|
case 3:
|
|
*head = 4;
|
|
return;
|
|
case 4:
|
|
*head = 5;
|
|
return;
|
|
case 5:
|
|
*head = 6;
|
|
return;
|
|
case 6:
|
|
*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 = g_session.GetSexName(sex);
|
|
result = FormatOwnedString("%s\\머리\\머리%s_%s_%d.pal", this->GetBodyRacePrefix(job).c_str(), headName.c_str(), sexName.c_str(), palette);
|
|
}
|
|
} 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 = g_session.GetSexName(sex);
|
|
result = 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() {
|
|
return g_equipmentResourceMgr->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->unknown_0E98, 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);
|
|
}
|