diff --git a/Source/Archive/GPak.cpp b/Source/Archive/GPak.cpp index a1f706da6..5996f633f 100644 --- a/Source/Archive/GPak.cpp +++ b/Source/Archive/GPak.cpp @@ -7,6 +7,7 @@ #include "Utility/Random/RandomBytes.h" #include "Utility/Hash/XxHash3.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include #include @@ -178,7 +179,8 @@ bool CGPak::Open(CPakFile* file) { this->m_file = file; const std::uint8_t* bytes = file->Read(0, sizeof(PakHeaderFile)); EncryptedName<14, 0x050505679903579BULL>& eventHorizon = []() -> EncryptedName<14, 0x050505679903579BULL>& { - const char source[] = {'\xDE', '\x21', '\x66', '\xF7', '\x13', '\x25', '\x4D', '\x6A', '\xE9', '\x3E', '\x79', '\xF6', '\x09', '\x05'}; + constexpr auto sourceText = CRYPT_NAME("Event Horizon", 0x050505679903579BULL); + const auto& source = sourceText.data; // GLOBAL: gl_25504 thread_local EncryptedName name(source); return name; @@ -191,7 +193,8 @@ bool CGPak::Open(CPakFile* file) { this->m_tableOffset = header->tableOffset + sizeof(PakFileHeader); } else { EncryptedName<16, 0x83EFBFBB37EDBDBDULL>& masterOfMagic = []() -> EncryptedName<16, 0x83EFBFBB37EDBDBDULL>& { - const char source[] = {'\xF0', '\xDC', '\x9E', '\x43', '\xDE', '\xCD', '\xCF', '\xEC', '\xDB', '\x9D', '\xA0', '\x56', '\xDC', '\xD6', '\x8C', '\x83'}; + constexpr auto sourceText = CRYPT_NAME("Master of Magic", 0x83EFBFBB37EDBDBDULL); + const auto& source = sourceText.data; // GLOBAL: gl_25505 thread_local EncryptedName name(source); return name; diff --git a/Source/Client/Application/Launcher.cpp b/Source/Client/Application/Launcher.cpp index d4af7d217..15fc3fffc 100644 --- a/Source/Client/Application/Launcher.cpp +++ b/Source/Client/Application/Launcher.cpp @@ -99,6 +99,7 @@ #include #include #include "Resource/MSGSTRINGID.h" +#include "Utility/Cipher/CryptName.h" // GLOBAL: gl_24398 RECT Rect; @@ -467,7 +468,7 @@ const char* EncryptedName<15, 0x0F0F8B6B8F9D19D1ULL>::Text() { // OFFSET: 0x00E55EC0 // FUNCTION: fn_24331 EncryptedName<14, 0xD98F03A52D35636DULL>& AdtestexeProcessName::operator()() const { - const std::array source = {0x2C, 0x27, 0x61, 0x68, 0xF6, 0x57, 0xCA, 0x81, 0x28, 0x4D, 0x70, 0x75, 0xE0, 0x03}; + constexpr std::array source = CRYPT_NAME("ADTESTEXE.EXE", 0xD98F03A52D35636DULL); thread_local EncryptedName name(source); return name; } @@ -475,7 +476,7 @@ EncryptedName<14, 0xD98F03A52D35636DULL>& AdtestexeProcessName::operator()() con // OFFSET: 0x00E55F90 // FUNCTION: fn_24332 EncryptedName<13, 0x73D1674B61DF7B0BULL>& RagexeMProcessName::operator()() const { - const std::array source = {0x59, 0x3A, 0x98, 0x24, 0x13, 0x22, 0x8E, 0x3E, 0x25, 0x3E, 0x87, 0x24, 0x4B}; + constexpr std::array source = CRYPT_NAME("RAGEXE_M.EXE", 0x73D1674B61DF7B0BULL); thread_local EncryptedName name(source); return name; } @@ -483,7 +484,7 @@ EncryptedName<13, 0x73D1674B61DF7B0BULL>& RagexeMProcessName::operator()() const // OFFSET: 0x00E56060 // FUNCTION: fn_24333 EncryptedName<13, 0x91651D81F559F971ULL>& SakexeMProcessName::operator()() const { - const std::array source = {0x22, 0xB8, 0x12, 0xB0, 0xD9, 0x58, 0x3A, 0xDC, 0x5F, 0xBC, 0x01, 0xB0, 0x81}; + constexpr std::array source = CRYPT_NAME("SAKEXE_M.EXE", 0x91651D81F559F971ULL); thread_local EncryptedName name(source); return name; } @@ -491,7 +492,7 @@ EncryptedName<13, 0x91651D81F559F971ULL>& SakexeMProcessName::operator()() const // OFFSET: 0x00E56130 // FUNCTION: fn_24334 EncryptedName<13, 0x17359BF953C367B3ULL>& Kernel32LibraryName::operator()() const { - const std::array source = {0xD8, 0x02, 0xB1, 0x3D, 0x9C, 0xF7, 0x06, 0x25, 0x9D, 0x03, 0xAF, 0x3F, 0xF9}; + constexpr std::array source = CRYPT_NAME("kernel32.dll", 0x17359BF953C367B3ULL); thread_local EncryptedName name(source); return name; } @@ -499,7 +500,7 @@ EncryptedName<13, 0x17359BF953C367B3ULL>& Kernel32LibraryName::operator()() cons // OFFSET: 0x00E56200 // FUNCTION: fn_24335 EncryptedName<10, 0x490FFB43A12F0DB9ULL>& PsapiLibraryName::operator()() const { - const std::array source = {0xC9, 0x7E, 0x4E, 0xD1, 0x2A, 0xD5, 0x6B, 0x25, 0xD5, 0x0D}; + constexpr std::array source = CRYPT_NAME("psapi.dll", 0x490FFB43A12F0DB9ULL); thread_local EncryptedName name(source); return name; } @@ -507,8 +508,8 @@ EncryptedName<10, 0x490FFB43A12F0DB9ULL>& PsapiLibraryName::operator()() const { // OFFSET: 0x00E562D0 // FUNCTION: fn_24336 EncryptedName<25, 0x2FF3C5036D070127ULL>& CreateToolhelp32SnapshotName::operator()() const { - const char source[] = {'\x64', '\x73', '\x62', '\x0C', '\x77', '\xA0', '\xA7', '\x40', '\x48', '\x6D', '\x6F', '\x08', '\x6F', '\xB5', '\xC0', '\x1D', - '\x74', '\x6F', '\x66', '\x1D', '\x70', '\xAD', '\x9C', '\x5B', '\x27'}; + constexpr auto sourceText = CRYPT_NAME("CreateToolhelp32Snapshot", 0x2FF3C5036D070127ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -516,7 +517,7 @@ EncryptedName<25, 0x2FF3C5036D070127ULL>& CreateToolhelp32SnapshotName::operator // OFFSET: 0x00E563B0 // FUNCTION: fn_24337 EncryptedName<14, 0x3FAF85D995034FD7ULL>& EnumProcessesName::operator()() const { - const std::array source = {0x92, 0x21, 0x76, 0xF8, 0x89, 0xF7, 0xC0, 0x5C, 0xB2, 0x3C, 0x70, 0xF0, 0xAA, 0x85}; + constexpr std::array source = CRYPT_NAME("EnumProcesses", 0x3FAF85D995034FD7ULL); thread_local EncryptedName name(source); return name; } @@ -524,9 +525,8 @@ EncryptedName<14, 0x3FAF85D995034FD7ULL>& EnumProcessesName::operator()() const // OFFSET: 0x00E56480 // FUNCTION: fn_24338 EncryptedName<39, 0x6961FF056999A303ULL>& AdventurerAgencyCreateInstanceName::operator()() const { - const char source[] = {'\x40', '\xE2', '\xFD', '\x1F', '\x60', '\x91', '\x15', '\x1C', '\x71', '\xC6', '\xEB', '\x28', '\x62', '\x9A', '\x0F', '\x0A', - '\x7A', '\xEE', '\xFE', '\x1B', '\x3F', '\xC5', '\x22', '\x1B', '\x66', '\xC2', '\xED', '\x0C', '\x4C', '\x91', '\x12', '\x1D', - '\x62', '\xCD', '\xFA', '\x0C', '\x2D', '\xD6', '\x61'}; + constexpr auto sourceText = CRYPT_NAME("CAdventurerAgencyMgr::CreateInstance()", 0x6961FF056999A303ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -534,9 +534,8 @@ EncryptedName<39, 0x6961FF056999A303ULL>& AdventurerAgencyCreateInstanceName::op // OFFSET: 0x00E56560 // FUNCTION: fn_24339 EncryptedName<40, 0x9DEFC105A1EB2F71ULL>& RequestJoinPartyCreateInstanceName::operator()() const { - const char source[] = {'\x24', '\x66', '\xB9', '\xC4', '\x74', '\xB4', '\x8A', '\xEE', '\x05', '\x65', '\x84', '\xC8', '\x6B', '\x91', '\x8E', '\xEF', - '\x05', '\x56', '\xA6', '\xC6', '\x77', '\xFB', '\xD5', '\xDE', '\x03', '\x4A', '\x8A', '\xD5', '\x60', '\x88', '\x81', '\xEE', - '\x05', '\x4E', '\x85', '\xC2', '\x60', '\xE9', '\xC6', '\x9D'}; + constexpr auto sourceText = CRYPT_NAME("UIRequestJoinPartyMgr::CreateInstance()", 0x9DEFC105A1EB2F71ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -544,9 +543,8 @@ EncryptedName<40, 0x9DEFC105A1EB2F71ULL>& RequestJoinPartyCreateInstanceName::op // OFFSET: 0x00E56640 // FUNCTION: fn_24340 EncryptedName<37, 0x0DF5B33D9F21EB79ULL>& AdventureGuideCreateInstanceName::operator()() const { - const char source[] = {'\x3A', '\xAA', '\x45', '\xE9', '\x58', '\xDD', '\x81', '\x78', '\x0B', '\x8E', '\x66', '\xEA', '\x54', '\xD7', '\x90', '\x40', - '\x1E', '\x99', '\x1B', '\xA5', '\x7E', '\xC1', '\x90', '\x6C', '\x0D', '\x8E', '\x68', '\xF1', '\x4E', '\xC7', '\x94', '\x63', - '\x1A', '\x8E', '\x09', '\xB6', '\x3D'}; + constexpr auto sourceText = CRYPT_NAME("CAdventureGuideMgr::CreateInstance()", 0x0DF5B33D9F21EB79ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -554,7 +552,7 @@ EncryptedName<37, 0x0DF5B33D9F21EB79ULL>& AdventureGuideCreateInstanceName::oper // OFFSET: 0x00E56720 // FUNCTION: fn_24341 EncryptedName<5, 0x01E7898D9D235DDFULL>& GoodResultName::operator()() const { - const std::array source = {0xB8, 0x32, 0x4C, 0xF9, 0x8D}; + constexpr std::array source = CRYPT_NAME("good", 0x01E7898D9D235DDFULL); thread_local EncryptedName name(source); return name; } @@ -562,7 +560,7 @@ EncryptedName<5, 0x01E7898D9D235DDFULL>& GoodResultName::operator()() const { // OFFSET: 0x00E567E0 // FUNCTION: fn_24342 EncryptedName<15, 0x1D6D75EDE7CD311FULL>& Process32FirstName::operator()() const { - const std::array source = {0x4F, 0x43, 0xA2, 0x84, 0x88, 0x06, 0x1E, 0x2E, 0x2D, 0x77, 0xA4, 0x95, 0x9E, 0x01, 0x6D}; + constexpr std::array source = CRYPT_NAME("Process32First", 0x1D6D75EDE7CD311FULL); thread_local EncryptedName name(source); return name; } @@ -570,7 +568,8 @@ EncryptedName<15, 0x1D6D75EDE7CD311FULL>& Process32FirstName::operator()() const // OFFSET: 0x00E568C0 // FUNCTION: fn_24343 EncryptedName<19, 0x151F77EBEBBB2147ULL>& EnumProcessModulesName::operator()() const { - const char source[] = {'\x02', '\x4F', '\xCE', '\x86', '\xBB', '\x05', '\x70', '\x76', '\x22', '\x52', '\xC8', '\xA6', '\x84', '\x13', '\x6A', '\x79', '\x22', '\x52', '\xBB'}; + constexpr auto sourceText = CRYPT_NAME("EnumProcessModules", 0x151F77EBEBBB2147ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -578,7 +577,7 @@ EncryptedName<19, 0x151F77EBEBBB2147ULL>& EnumProcessModulesName::operator()() c // OFFSET: 0x00E56990 // FUNCTION: fn_24344 EncryptedName<14, 0x3375B1C7DBB5FD55ULL>& Process32NextName::operator()() const { - const std::array source = {0x05, 0x8F, 0xDA, 0xB8, 0xA2, 0xC2, 0x06, 0x00, 0x67, 0xB3, 0xD0, 0xA3, 0xB3, 0xB1}; + constexpr std::array source = CRYPT_NAME("Process32Next", 0x3375B1C7DBB5FD55ULL); thread_local EncryptedName name(source); return name; } @@ -586,7 +585,8 @@ EncryptedName<14, 0x3375B1C7DBB5FD55ULL>& Process32NextName::operator()() const // OFFSET: 0x00E56A60 // FUNCTION: fn_24345 EncryptedName<19, 0x2D394DBD0F332733ULL>& GetModuleBaseNameAName::operator()() const { - const char source[] = {'\x74', '\x42', '\x47', '\x42', '\xD2', '\x29', '\x4C', '\x41', '\x56', '\x65', '\x52', '\x7C', '\xD8', '\x03', '\x58', '\x40', '\x56', '\x66', '\x33'}; + constexpr auto sourceText = CRYPT_NAME("GetModuleBaseNameA", 0x2D394DBD0F332733ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -594,7 +594,7 @@ EncryptedName<19, 0x2D394DBD0F332733ULL>& GetModuleBaseNameAName::operator()() c // OFFSET: 0x00E56B30 // FUNCTION: fn_24346 EncryptedName<11, 0x7D993F650D2785FFULL>& RagexeModuleName::operator()() const { - const std::array source = {0xAD, 0xC4, 0x60, 0x48, 0x3D, 0x7A, 0xB7, 0x38, 0xA7, 0xC0, 0x27}; + constexpr std::array source = CRYPT_NAME("RAGEXE.EXE", 0x7D993F650D2785FFULL); thread_local EncryptedName name(source); return name; } @@ -602,7 +602,7 @@ EncryptedName<11, 0x7D993F650D2785FFULL>& RagexeModuleName::operator()() const { // OFFSET: 0x00E56C00 // FUNCTION: fn_24347 EncryptedName<11, 0x812BE72BCD5707B7ULL>& RagexeProcessName::operator()() const { - const std::array source = {0xE5, 0x46, 0x10, 0x88, 0x73, 0xA2, 0x05, 0xC4, 0xEF, 0x42, 0x57}; + constexpr std::array source = CRYPT_NAME("RAGEXE.EXE", 0x812BE72BCD5707B7ULL); thread_local EncryptedName name(source); return name; } @@ -610,7 +610,7 @@ EncryptedName<11, 0x812BE72BCD5707B7ULL>& RagexeProcessName::operator()() const // OFFSET: 0x00E56CD0 // FUNCTION: fn_24348 EncryptedName<11, 0x61FF87ED7BF39BE1ULL>& SakexeModuleName::operator()() const { - const std::array source = {0xB2, 0xDA, 0xB8, 0x3E, 0xB5, 0xC2, 0xD1, 0x24, 0xB9, 0xDE, 0xF3}; + constexpr std::array source = CRYPT_NAME("SAKEXE.EXE", 0x61FF87ED7BF39BE1ULL); thread_local EncryptedName name(source); return name; } @@ -618,7 +618,7 @@ EncryptedName<11, 0x61FF87ED7BF39BE1ULL>& SakexeModuleName::operator()() const { // OFFSET: 0x00E56DA0 // FUNCTION: fn_24349 EncryptedName<11, 0x59278F63D79F3DA1ULL>& SakexeProcessName::operator()() const { - const std::array source = {0xF2, 0x7C, 0xD4, 0x92, 0x3B, 0xCA, 0x09, 0x1C, 0xF9, 0x78, 0x9F}; + constexpr std::array source = CRYPT_NAME("SAKEXE.EXE", 0x59278F63D79F3DA1ULL); thread_local EncryptedName name(source); return name; } @@ -626,7 +626,7 @@ EncryptedName<11, 0x59278F63D79F3DA1ULL>& SakexeProcessName::operator()() const // OFFSET: 0x00E56E70 // FUNCTION: fn_24350 EncryptedName<13, 0x2D3B15774149D5DDULL>& RagexereModuleName::operator()() const { - const std::array source = {0x8F, 0x94, 0x0E, 0x04, 0x2F, 0x50, 0x69, 0x68, 0xF3, 0x90, 0x11, 0x04, 0x77}; + constexpr std::array source = CRYPT_NAME("RAGEXERE.EXE", 0x2D3B15774149D5DDULL); thread_local EncryptedName name(source); return name; } @@ -634,7 +634,7 @@ EncryptedName<13, 0x2D3B15774149D5DDULL>& RagexereModuleName::operator()() const // OFFSET: 0x00E56F40 // FUNCTION: fn_24351 EncryptedName<13, 0x31D7C1EDA345E36DULL>& RagexereProcessName::operator()() const { - const std::array source = {0x3F, 0xA2, 0x02, 0xE6, 0xB5, 0x84, 0x85, 0x74, 0x43, 0xA6, 0x1D, 0xE6, 0xED}; + constexpr std::array source = CRYPT_NAME("RAGEXERE.EXE", 0x31D7C1EDA345E36DULL); thread_local EncryptedName name(source); return name; } @@ -642,7 +642,7 @@ EncryptedName<13, 0x31D7C1EDA345E36DULL>& RagexereProcessName::operator()() cons // OFFSET: 0x00E57010 // FUNCTION: fn_24352 EncryptedName<15, 0xD3755DD95F47A909ULL>& RagtestexeProcessName::operator()() const { - const std::array source = {0x5B, 0xE8, 0x00, 0x0B, 0x9C, 0x0E, 0x21, 0x96, 0x51, 0xEC, 0x69, 0x1A, 0x81, 0x18, 0x75}; + constexpr std::array source = CRYPT_NAME("RAGTESTEXE.EXE", 0xD3755DD95F47A909ULL); thread_local EncryptedName name(source); return name; } @@ -650,7 +650,7 @@ EncryptedName<15, 0xD3755DD95F47A909ULL>& RagtestexeProcessName::operator()() co // OFFSET: 0x00E570F0 // FUNCTION: fn_24353 EncryptedName<15, 0x0F0F8B6B8F9D19D1ULL>& SaktestexeProcessName::operator()() const { - const std::array source = {0x82, 0x58, 0xD6, 0xDB, 0x2E, 0xD8, 0x5B, 0x4A, 0x89, 0x5C, 0xB3, 0xCA, 0x33, 0xCE, 0x0F}; + constexpr std::array source = CRYPT_NAME("SAKTESTEXE.EXE", 0x0F0F8B6B8F9D19D1ULL); thread_local EncryptedName name(source); return name; } @@ -733,22 +733,22 @@ bool RestartFromCommandLine() { // OFFSET: 0x00E58A60 // FUNCTION: fn_24365 void ApplyAiPatch() { - const std::array patchSource = {0xAE, 0x6A, 0x8A, 0x9F, 0x78, 0x25, 0xF2, 0x53, 0xEF}; + constexpr std::array patchSource = CRYPT_NAME("AI_patch", 0x3B915119EFD523EFULL); EncryptedName& patchName = ThreadLocalName<0x3B915119EFD523EFULL>(patchSource); if (_access(patchName.Text(), 0) != 0) { return; } - const std::array aiSource = {0x5A, 0x44, 0x39}; + constexpr std::array aiSource = CRYPT_NAME("AI", 0x5B8F49AF09390D1BULL); EncryptedName& aiName = ThreadLocalName<0x5B8F49AF09390D1BULL>(aiSource); if (_access(aiName.Text(), 0) != 0) { return; } - const std::array backupSource = {0x80, 0x9A, 0x84, 0x15, 0xFA, 0x16, 0xA8, 0x3C, 0xB1, 0xD3}; + constexpr std::array backupSource = CRYPT_NAME("AI_backup", 0x49C3759B77DBD3C1ULL); EncryptedName& backupName = ThreadLocalName<0x49C3759B77DBD3C1ULL>(backupSource); if (_access(backupName.Text(), 0) == 0) { - const std::array deleteSource = {0xDA, 0xE4, 0x2A, 0xAD, 0xB0, 0x5E, 0x86, 0x18, 0xEB, 0xAD}; + constexpr std::array deleteSource = CRYPT_NAME("AI_backup", 0x6DED3DD1CF75AD9BULL); char path[16] = {}; EncryptedName& deleteName = ThreadLocalName<0x6DED3DD1CF75AD9BULL>(deleteSource); std::strcpy(path, deleteName.Text()); @@ -757,24 +757,24 @@ void ApplyAiPatch() { SHFileOperationA(&operation); } - const std::array backupTargetSource = {0xBC, 0xB4, 0x22, 0x91, 0x80, 0x76, 0x92, 0x6E, 0x8D, 0xFD}; + constexpr std::array backupTargetSource = CRYPT_NAME("AI_backup", 0x1BF915E1F37DFDFDULL); EncryptedName& backupTarget = ThreadLocalName<0x1BF915E1F37DFDFDULL>(backupTargetSource); const char* backup = backupTarget.Text(); - const std::array currentSource = {0x9E, 0x90, 0x5D}; + constexpr std::array currentSource = CRYPT_NAME("AI", 0x01FF9313695DD9DFULL); EncryptedName& current = ThreadLocalName<0x01FF9313695DD9DFULL>(currentSource); std::rename(current.Text(), backup); - const std::array installTargetSource = {0x52, 0x8E, 0x03}; + constexpr std::array installTargetSource = CRYPT_NAME("AI", 0x4F1791FB1503C713ULL); EncryptedName& installTarget = ThreadLocalName<0x4F1791FB1503C713ULL>(installTargetSource); const char* install = installTarget.Text(); - const std::array patchedSource = {0x92, 0xA4, 0xC8, 0x65, 0x2C, 0x2F, 0xC6, 0xC9, 0xD3}; + constexpr std::array patchedSource = CRYPT_NAME("AI_patch", 0xA1A55B4D1597EDD3ULL); EncryptedName& patched = ThreadLocalName<0xA1A55B4D1597EDD3ULL>(patchedSource); std::rename(patched.Text(), install); } // INLINED void ExitForProtectionCheck(const char* commandLine) { - const std::array checkSource = {0x64, 0xB0, 0x1F, 0xE0, 0x92, 0x06, 0xA4, 0xB3, 0x23, 0xB6, 0x1A, 0xEC, 0x95, 0x0C, 0xFB}; + constexpr std::array checkSource = CRYPT_NAME("/check_themida", 0xC7FB6DF18577D34BULL); EncryptedName& check = ThreadLocalName<0xC7FB6DF18577D34BULL>(checkSource); if (std::strstr(commandLine, check.Text())) { ExitProcess(0); @@ -936,12 +936,12 @@ int InitApp(HINSTANCE instance, int showCommand) { GetSystemMetrics(SM_CXSCREEN); if (g_configuredOldWidth == g_viewportWidth && g_configuredOldHeight == g_viewportHeight) { int defaultX = (GetSystemMetrics(SM_CXSCREEN) - g_viewportWidth) / 2; - const std::array xSource = {0x78, 0xF6, 0xDD, 0xBF, 0x80, 0xBE, 0x48, 0xC3, 0x7F, 0xF0, 0xC0, 0xDB}; + constexpr std::array xSource = CRYPT_NAME("Window_XPos", 0x9B17C9EFDBB39F2FULL); EncryptedName& xName = ThreadLocalName<0x9B17C9EFDBB39F2FULL>(xSource); x = g_session.GetOptionInteger(xName.Text(), defaultX); int defaultY = (GetSystemMetrics(SM_CYSCREEN) - g_viewportHeight) / 2; - const std::array ySource = {0x3A, 0x5A, 0x61, 0xF1, 0xB4, 0x32, 0x8C, 0x30, 0x3D, 0x5C, 0x7C, 0x95}; + constexpr std::array ySource = CRYPT_NAME("Window_YPos", 0x69D345DB950F336DULL); EncryptedName& yName = ThreadLocalName<0x69D345DB950F336DULL>(ySource); y = g_session.GetOptionInteger(yName.Text(), defaultY); } else { @@ -966,7 +966,7 @@ int InitApp(HINSTANCE instance, int showCommand) { int windowWidth = static_cast(width); int windowHeight = static_cast(height); if (!g_configuredFullscreen) { - const std::array traySource = {0x22, 0x73, 0x96, 0x93, 0xEB, 0x7A, 0xC5, 0xB5, 0x10, 0x62, 0xA4, 0x91, 0xE3, 0x25}; + constexpr std::array traySource = CRYPT_NAME("Shell_TrayWnd", 0xC7912587FFF31B71ULL); EncryptedName& trayName = ThreadLocalName<0xC7912587FFF31B71ULL>(traySource); RECT trayRect; HWND tray = FindWindowA(trayName.Text(), nullptr); @@ -989,11 +989,10 @@ int InitApp(HINSTANCE instance, int showCommand) { hWnd = CreateApplicationWindow(0, windowClass.lpszClassName, g_windowName, style, x, y, windowWidth, windowHeight, nullptr, nullptr, instance, nullptr); if (!hWnd) { - const std::array titleSource = {0x8C, 0xE5, 0x77, 0xD8, 0xE9, 0x33}; + constexpr std::array titleSource = CRYPT_NAME("ERROR", 0x078333BB9725B7C9ULL); EncryptedName& title = ThreadLocalName<0x078333BB9725B7C9ULL>(titleSource); const char* caption = title.Text(); - const std::array messageSource = {0xE2, 0x1C, 0x0F, 0x3B, 0x92, 0x2C, 0x3B, 0xCC, 0xC7, 0x10, 0x00, 0x2B, - 0x94, 0x34, 0x75, 0xAF, 0xF3, 0x14, 0x08, 0x33, 0x98, 0x3F, 0x1B}; + constexpr std::array messageSource = CRYPT_NAME("Window Creation Failed", 0x8F1B5BFD5F6175B5ULL); EncryptedName& message = ThreadLocalName<0x8F1B5BFD5F6175B5ULL>(messageSource); MessageBoxA(nullptr, message.Text(), caption, MB_OK); return 0; diff --git a/Source/Client/Mode/GameMode.cpp b/Source/Client/Mode/GameMode.cpp index 9bccbd93f..afe8a6b70 100644 --- a/Source/Client/Mode/GameMode.cpp +++ b/Source/Client/Mode/GameMode.cpp @@ -99,6 +99,7 @@ #include "Network/TextEncoding.h" #include "Resource/MSGSTRINGID.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" extern "C" long long _Xtime_get_ticks(); @@ -5607,8 +5608,8 @@ int CGameMode::Run() { g_modeMgr.Quit(); std::string message = g_nProtectGameGuardMgr->ErrorMessage(); if (!message.empty()) { - const char source[] = {'\x53', '\x11', '\xF9', '\xA6', '\x8D', '\x7E', '\xA6', '\xD9', '\x1D', '\x06', - '\xEA', '\xA4', '\x9C', '\x5C', '\xB0', '\xCC', '\x4F', '\x25', '\x8B'}; + constexpr auto sourceText = CRYPT_NAME("nProtect GameGuard", 0xADC51BF9C98B413DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); MessageBoxA(hWnd, message.c_str(), name.Text(), 0); } @@ -6614,19 +6615,24 @@ void CGameMode::UpdateBalloons() { shownSkill = this->skillId; std::string text; if (shownSkill == 10000) { - const char source[] = {'\xBC', '\x82', '\x2D', '\x77', '\xD2', '\xDD', '\xC6', '\x1F', '\xB2', '\x8C', '\x33', '\x70', '\xD3', '\xCA', '\xD1', '\x3F'}; + constexpr auto sourceText = CRYPT_NAME("Capture Monster", 0x3FA3AFA7035DE3FFULL); + const auto& source = sourceText.data; text.assign(DecryptGameModeName<0x3FA3AFA7035DE3FFULL>(source)); } else if (shownSkill == 20000) { - const char source[] = {'\x09', '\xEB', '\x66', '\x1C', '\x26', '\xAE', '\x07', '\x96', '\x38', '\xF5', '\x71', '\x04', '\x75', '\x86', '\x42', '\xDB'}; + constexpr auto sourceText = CRYPT_NAME("Please Marry Me", 0xDB27CB557D038759ULL); + const auto& source = sourceText.data; text = DecryptGameModeName<0xDB27CB557D038759ULL>(source); } else if (shownSkill == 20001) { - const char source[] = {'\xCF', '\xD8', '\x9B', '\x0E', '\xCE', '\x19', '\xF9', '\x30', '\xEF', '\xC4', '\xBB'}; + constexpr auto sourceText = CRYPT_NAME("Be my Baby", 0x51BB39B763BBBD8DULL); + const auto& source = sourceText.data; text = DecryptGameModeName<0x51BB39B763BBBD8DULL>(source); } else if (shownSkill == 40000) { - const char source[] = {'\xAC', '\x4C', '\x27', '\x79', '\xB0', '\xA3', '\x86', '\xA7', '\xA2', '\x42', '\x39', '\x7E', '\xB1', '\xB4', '\x91', '\x87'}; + constexpr auto sourceText = CRYPT_NAME("Capture Monster", 0x87E3D1C50D572DEFULL); + const auto& source = sourceText.data; text = DecryptGameModeName<0x87E3D1C50D572DEFULL>(source); } else if (g_session.IsState291To303(shownSkill)) { - const char source[] = {'\x3E', '\x4A', '\xC2', '\xE6', '\x2F'}; + constexpr auto sourceText = CRYPT_NAME("????", 0xB7AFBD2FD9FD7501ULL); + const auto& source = sourceText.data; text = DecryptGameModeName<0xB7AFBD2FD9FD7501ULL>(source); } else { text = CSkillInfo::DisplayName(*g_session.m_hotkeyScript, shownSkill); diff --git a/Source/Client/Mode/GameModeMiniMap.cpp b/Source/Client/Mode/GameModeMiniMap.cpp index 69868bba8..d2f272719 100644 --- a/Source/Client/Mode/GameModeMiniMap.cpp +++ b/Source/Client/Mode/GameModeMiniMap.cpp @@ -25,6 +25,7 @@ #include "Utility/Cipher/XorBytes.h" #include "Utility/Text/FormatString.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include #include diff --git a/Source/Client/Mode/LoginMode.cpp b/Source/Client/Mode/LoginMode.cpp index cf64accae..a898ba4f9 100644 --- a/Source/Client/Mode/LoginMode.cpp +++ b/Source/Client/Mode/LoginMode.cpp @@ -81,6 +81,7 @@ #include "UI/Login/UISelectServerWnd.h" #include "Utility/Cipher/AES.h" #include "Utility/Cipher/Rijndael.h" +#include "Utility/Cipher/CryptName.h" #include "Resource/MSGSTRINGID.h" #include @@ -369,11 +370,7 @@ struct CharacterInfo2SizeErrorFormat { // OFFSET: 0x00D8CA50 // FUNCTION: fn_22261 EncryptedName<75, 0xED15938D333D2DB9ULL>& CharacterInfo2SizeErrorFormat::operator()() const { - const std::array source = {'\xFA', '\x65', '\x7C', '\x61', '\xCC', '\xD0', '\x41', '\xA8', '\xEB', '\x72', '\x74', '\x7D', '\xCB', '\xDC', '\x27', '\xCD', - '\xCA', '\x44', '\x47', '\x56', '\xAD', '\xF6', '\x67', '\x9F', '\xD6', '\x5F', '\x1C', '\x12', '\xAD', '\xF0', '\x7D', '\x8C', - '\xCB', '\x4C', '\x5E', '\x47', '\xE8', '\xE1', '\x35', '\x83', '\xCC', '\x40', '\x1D', '\x09', '\xAD', '\xB6', '\x71', '\xCD', - '\x99', '\x6E', '\x75', '\x72', '\xDF', '\xD2', '\x56', '\xB9', '\xFC', '\x7F', '\x62', '\x7A', '\xC3', '\xD5', '\x5A', '\xDF', - '\x99', '\x5E', '\x54', '\x49', '\xE8', '\xB3', '\x2F', '\xCD', '\x9C', '\x49', '\x3D'}; + constexpr std::array source = CRYPT_NAME("CHARACTER_INFO2 size error!! character num : %d CHARACTER_INFO2 size : %d", 0xED15938D333D2DB9ULL); thread_local EncryptedName name(source); return name; } @@ -385,13 +382,7 @@ struct PasswordRetryExceededMessage { // OFFSET: 0x00D8CB50 // FUNCTION: fn_22262 EncryptedName<103, 0xBF2B4B31397FF5A7ULL>& PasswordRetryExceededMessage::operator()() const { - const std::array source = {'\x1D', '\x04', '\xC6', '\xE9', '\x88', '\xB3', '\xE3', '\x1C', '\x1F', '\x53', '\x5F', '\x0A', '\xF9', '\xF3', '\x0B', '\x7F', - '\x78', '\x4D', '\x87', '\xF9', '\xE5', '\xFC', '\xE9', '\x78', '\x68', '\x4A', '\xCB', '\x84', '\xF1', '\xFF', '\xE4', '\x0B', - '\x7E', '\xDB', '\x5F', '\x83', '\xC0', '\xF2', '\xFB', '\x06', '\x5F', '\x3D', '\xDC', '\x81', '\x97', '\x6B', '\xE3', '\x11', - '\x67', '\x3B', '\xB8', '\xE1', '\xF0', '\x9D', '\x97', '\x03', '\x18', '\x11', '\x51', '\x19', '\x11', '\x6B', '\x0B', '\x9F', - '\x87', '\xD5', '\x5F', '\x19', '\x11', '\x6B', '\x0B', '\x9F', '\x87', '\x30', '\xD3', '\x8F', '\xC2', '\x8B', '\xE7', '\x01', - '\x57', '\x33', '\xD1', '\x19', '\x8C', '\x8C', '\xEC', '\x5F', '\x67', '\x4E', '\x5F', '\xF8', '\x8F', '\xFC', '\xCA', '\x78', - '\x72', '\x41', '\xB0', '\x8D', '\xE8', '\x65', '\x2B'}; + constexpr std::array source = CRYPT_NAME("비밀번호를 3회 잘못입력하였습니다. 비밀번호를 확인해주세요. 클라이언트 실행을 종료합니다.", 0xBF2B4B31397FF5A7ULL); thread_local EncryptedName name(source); return name; } @@ -599,8 +590,7 @@ std::string GetMacAddress() { if (adapter != nullptr) { char text[100]; memset(text, 0, sizeof(text)); - const std::array source = {'\x32', '\x2B', '\x1F', '\xFB', '\x90', '\xCE', '\x71', '\x3D', '\x4F', '\x36', '\x08', '\x93', '\x8F', '\xB3', '\x6C', - '\x2A', '\x27', '\x29', '\x75', '\x8E', '\x98', '\xDB', '\x73', '\x57', '\x3A', '\x3E', '\x1D', '\x91', '\xE5', '\xEB'}; + constexpr std::array source = CRYPT_NAME("%02X-%02X-%02X-%02X-%02X-%02X", 0x0F41EBBDA32D1B17ULL); _snprintf(text, sizeof(text), DecryptName<0x0F41EBBDA32D1B17ULL>(source), adapter->Address[0], adapter->Address[1], adapter->Address[2], adapter->Address[3], adapter->Address[4], adapter->Address[5]); delete[] reinterpret_cast(adapter); @@ -608,8 +598,7 @@ std::string GetMacAddress() { } } - const std::array source = {'\xF0', '\x76', '\xE8', '\x25', '\xD3', '\xB4', '\xE6', '\xC8', '\xEC', '\x73', '\xF1', '\x3A', '\xD4', '\xAC', '\xF8', '\xCD', - '\xF7', '\x47'}; + constexpr std::array source = CRYPT_NAME("11-22-33-44-55-66", 0xFBD599E117C547C1ULL); return DecryptName<0xFBD599E117C547C1ULL>(source); } @@ -762,10 +751,7 @@ void CLoginMode::ReceiveCharacterPage(const CharacterPagePacket* packet) { if ((packet->length - 4) % sizeof(CharacterInfo) != 0) { char text[256]; memset(text, 0, sizeof(text)); - const std::array source = {'\x4C', '\x07', '\x04', '\xFD', '\xDC', '\x06', '\xCD', '\x46', '\x5D', '\x10', '\x0C', '\xE1', '\xDB', '\x0A', '\xAB', '\x23', - '\x7C', '\x26', '\x3F', '\xCA', '\xBD', '\x20', '\xEB', '\x71', '\x60', '\x3D', '\x64', '\x8E', '\xBD', '\x06', '\xD1', '\x42', - '\x5D', '\x0E', '\x06', '\xFB', '\xD8', '\x17', '\xC6', '\x4A', '\x41', '\x09', '\x0A', '\x9D', '\xBD', '\x36', '\xF0', '\x79', - '\x6A', '\x6F', '\x7F', '\x8F', '\xB8', '\x21', '\x99'}; + constexpr std::array source = CRYPT_NAME("CHARACTER_INFO2 size error!! CHARACTER_INFO2 size : %d", 0x0399459DAF454F0FULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0x0399459DAF454F0FULL>(source), sizeof(CharacterInfo)); g_windowMgr.Confirm(text, 0, true, true, 0, "Message", 280, 120, 0); return; @@ -775,9 +761,7 @@ void CLoginMode::ReceiveCharacterPage(const CharacterPagePacket* packet) { if (total > 68) { char text[256]; memset(text, 0, sizeof(text)); - const std::array source = {'\xE8', '\xE7', '\xCC', '\xDF', '\xF2', '\xCE', '\xF3', '\x90', '\xF9', '\xF0', '\xC4', '\xC3', '\xF5', '\xC2', '\x95', '\xF5', - '\xE8', '\xC1', '\xF9', '\xAD', '\xFC', '\xFB', '\xC2', '\xA7', '\x8B', '\x8A', '\xE9', '\xAD', '\x9C', '\xAD', '\x82', '\xB1', - '\xAB'}; + constexpr std::array source = CRYPT_NAME("CHARACTER_INFO2 Cnt Over %d / %d", 0xD5A78DB38D8DAFABULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0xD5A78DB38D8DAFABULL>(source), total, 68); g_windowMgr.Confirm(text, 0, true, true, 0, "Message", 280, 120, 0); return; @@ -953,9 +937,7 @@ void CLoginMode::ReceiveDeleteReservation(const CharacterDeletePacket* packet) { void CLoginMode::ReceiveMapStates(const MapStatePacket* packet) { const unsigned int count = (packet->length - 4) / sizeof(MapStateInfo); if ((packet->length - 4) % sizeof(MapStateInfo) != 0) { - const std::array source = {'\xD8', '\xE6', '\x32', '\x48', '\x72', '\x89', '\x4C', '\x11', '\x95', '\xC2', '\x20', '\x55', '\x40', '\x89', '\x4E', '\x0D', - '\xD0', '\xAF', '\x32', '\x4C', '\x69', '\x98', '\x07', '\x0A', '\xDC', '\xF5', '\x24', '\x05', '\x2E', '\xDD', '\x0A', '\x1D', - '\x9C', '\x8F'}; + constexpr std::array source = CRYPT_NAME("mismatch MapState size(size = %d)", 0x792FFD1325418FB5ULL); char text[256]; sprintf(text, DecryptName<0x792FFD1325418FB5ULL>(source), sizeof(MapStateInfo)); g_windowMgr.Confirm(text, 0, true, false, 0, "Message", 280, 120, 0); @@ -1220,39 +1202,33 @@ void CLoginMode::OpenAccountRegistration() { case ServiceKorea: if (*reinterpret_cast(&g_session.mouseAndChannelOptions[0x198]) == 1) { const char* url = LookupMessage(MSI_SETTLE_WEB_URL_HANGAME); - const std::array source = {'\x30', '\x45', '\xCA', '\xFB', '\x9D'}; + constexpr std::array source = CRYPT_NAME("open", 0xCFF3899D95AF355FULL); ShellExecuteA(hWnd, DecryptName<0xCFF3899D95AF355FULL>(source), url, nullptr, nullptr, SW_SHOWNORMAL); } else { const char* url = LookupMessage(MSI_SETTLE_WEB_URL); - const std::array source = {'\x4A', '\x01', '\xCA', '\xA5', '\x0D'}; + constexpr std::array source = CRYPT_NAME("open", 0xE52DF30DCBAF7125ULL); ShellExecuteA(hWnd, DecryptName<0xE52DF30DCBAF7125ULL>(source), url, nullptr, nullptr, SW_SHOWNORMAL); } break; case 1: { - const std::array urlSource = {'\x0F', '\xDF', '\xE5', '\xD5', '\xD2', '\x05', '\xCC', '\x3C', '\x0E', '\xD9', '\xFE', '\x8B', '\xD3', '\x5E', '\x84', '\x7D', - '\x06', '\xD9', '\xFE', '\xCE', '\xCE', '\x51', '\x8F', '\x7A', '\x09', '\xCE', '\xBF', '\xC6', '\xCE', '\x52', '\xCC', '\x7E', - '\x02', '\xC6', '\xF3', '\xC0', '\xD3', '\x10', '\x8E', '\x76', '\x0A', '\xC9', '\xF4', '\xD7', '\xCB', '\x50', '\x8A', '\x7D', - '\x56', '\x85', '\xF0', '\xD6', '\xD1', '\x00', '\x8E', '\x5D', '\x12', '\xC6', '\xAC', '\x94', '\xA1'}; + constexpr std::array urlSource = CRYPT_NAME("https://iro.ragnarokonline.com/member/memberjoin1.asp?mNum=1", 0x13E33FA1A591AB67ULL); const char* file = DecryptName<0x13E33FA1A591AB67ULL>(urlSource); - const std::array source = {'\x58', '\x37', '\xC8', '\x57', '\xBF'}; + constexpr std::array source = CRYPT_NAME("open", 0x17A9E5BF39AD4737ULL); ShellExecuteA(hWnd, DecryptName<0x17A9E5BF39AD4737ULL>(source), file, nullptr, nullptr, SW_SHOWNORMAL); break; } case ServiceJapan: break; case ServiceChina: { - const std::array urlSource = {'\x2B', '\x5D', '\x27', '\x57', '\xEF', '\x90', '\x66', '\xED', '\x6D', '\x42', '\x26', '\x49', '\xB9', '\xCA', '\x27', '\xB7', - '\x20', '\x46', '\x3E', '\x08', '\xEA', '\xDE', '\x2A', '\xED', '\x7E', '\x5F', '\x3C', '\x52', '\xB6', '\xD7', '\x2C', '\xEB', - '\x6D', '\x44', '\x32', '\x4E', '\xBB', '\x99', '\x2A', '\xF0', '\x27', '\x14', '\x62', '\x17', '\xE5', '\x8F', '\x6F', '\xE9', - '\x2A', '\x4D', '\x6E', '\x11', '\xE4', '\xBF'}; + constexpr std::array urlSource = CRYPT_NAME("http://t.kunlun.com/?act=voucher.main&cid=1000&pid=61", 0x9949BFD527532943ULL); const char* file = DecryptName<0x9949BFD527532943ULL>(urlSource); - const std::array source = {'\x00', '\x0D', '\x9E', '\x4D', '\x71'}; + constexpr std::array source = CRYPT_NAME("open", 0xCD8F077123FB7D6FULL); ShellExecuteA(hWnd, DecryptName<0xCD8F077123FB7D6FULL>(source), file, nullptr, nullptr, SW_SHOWNORMAL); break; } default: { const char* url = LookupMessage(MSI_SETTLE_WEB_URL); - const std::array source = {'\x02', '\xCB', '\xF0', '\x43', '\x93'}; + constexpr std::array source = CRYPT_NAME("open", 0xC517FB932D95BB6DULL); ShellExecuteA(hWnd, DecryptName<0xC517FB932D95BB6DULL>(source), url, nullptr, nullptr, SW_SHOWNORMAL); break; } @@ -1277,50 +1253,50 @@ void CLoginMode::ReceiveRefuseLogin(const RefuseLoginPacket* packet) { memset(text, 0, sizeof(text)); { const char* message = LookupMessage(MSI_NAVIGATION_ROADLISTVIEW); - const std::array source = {'\x40', '\x6A', '\x45'}; + constexpr std::array source = CRYPT_NAME("%s", 0x891B232D09451965ULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0x891B232D09451965ULL>(source), message); } switch (packet->result) { case 1: { const char* message = LookupMessage(MSI_TAREN_LOGINREFUSE_FAIL_PERSONALNUMBER); - const std::array source = {'\x9C', '\x76', '\x77'}; + constexpr std::array source = CRYPT_NAME("%s", 0x758F1D0B4F7705B9ULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0x758F1D0B4F7705B9ULL>(source), message); break; } case 2: { const char* message = LookupMessage(MSI_TAREN_LOGINREFUSE_FAIL_ACCOUNT_BLOCK); - const std::array source = {'\x50', '\xBE', '\xED'}; + constexpr std::array source = CRYPT_NAME("%s", 0x35E5656B5DEDCD75ULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0x35E5656B5DEDCD75ULL>(source), message); break; } case 3: { const char* message = LookupMessage(MSI_TAREN_LOGINREFUSE_FAIL_SYSTEM); - const std::array source = {'\xD8', '\xCA', '\xBB'}; + constexpr std::array source = CRYPT_NAME("%s", 0x4941FD9F21BBB9FDULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0x4941FD9F21BBB9FDULL>(source), message); break; } case 4: { const char* message = LookupMessage(MSI_TAREN_LOGINREFUSE_FAIL_UNKNOWN); - const std::array source = {'\xD8', '\xA4', '\x4D'}; + constexpr std::array source = CRYPT_NAME("%s", 0xE7978FB5A94DD7FDULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0xE7978FB5A94DD7FDULL>(source), message); break; } case 5: { const char* message = LookupMessage(MSI_NAVIGATION_ICONTITEL); - const std::array source = {'\x4E', '\xCA', '\xC7'}; + constexpr std::array source = CRYPT_NAME("%s", 0xB7FD8F670FC7B96BULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0xB7FD8F670FC7B96BULL>(source), message); break; } case 6: { const char* message = LookupMessage(MSI_NAVIGATION_RUITELISTTITEL); - const std::array source = {'\xAA', '\xEA', '\xEB'}; + constexpr std::array source = CRYPT_NAME("%s", 0x39FF7FB50DEB998FULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0x39FF7FB50DEB998FULL>(source), message); break; } case 7: { const char* message = LookupMessage(MSI_NAVIGATION_V4_HELP02); - const std::array source = {'\xB2', '\x82', '\xE1'}; + constexpr std::array source = CRYPT_NAME("%s", 0x2FE993D1DDE1F197ULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0x2FE993D1DDE1F197ULL>(source), message); break; } @@ -1328,13 +1304,13 @@ void CLoginMode::ReceiveRefuseLogin(const RefuseLoginPacket* packet) { case 100: case 102: { const char* message = LookupMessage(MSI_NAVIGATION_ROADLISTVIEW); - const std::array source = {'\xE8', '\x82', '\x99'}; + constexpr std::array source = CRYPT_NAME("%s", 0xAD075B8DB599F1CDULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0xAD075B8DB599F1CDULL>(source), message); break; } case 9: { const char* message = LookupMessage(MSI_ZEROQUEST_SIMPLEUI_ON); - const std::array source = {'\x5A', '\x66', '\x8D'}; + constexpr std::array source = CRYPT_NAME("%s", 0x2F8B0F37118D157FULL); StringFormat(text, sizeof(text), static_cast(-1), DecryptName<0x2F8B0F37118D157FULL>(source), message); break; } @@ -1350,7 +1326,7 @@ void CLoginMode::ReceiveRefuseLogin(const RefuseLoginPacket* packet) { GetRagConnection().Close(); const int result = packet->result; - const std::array source = {'\xBE', '\x24', '\x2B', '\xBC', '\x03', '\x2C', '\x05'}; + constexpr std::array source = CRYPT_NAME("%s(%d)", 0x050505679903579BULL); g_windowMgr.Confirm(FormatString(DecryptName<0x050505679903579BULL>(source), text, result), 0, true, false, 0, "Message", 280, 120, 0); g_charServerAccountIdPending = 0; this->pendingCursorType = 3; @@ -1405,13 +1381,11 @@ void CLoginMode::ReceiveLoginErrorDetail(const LoginErrorDetailPacket* packet) { break; case 900: { ShowErrorDialog(LookupMessage(MSI_CHECK_ATTENDANCE_REWARD), 0); - const std::array parametersSource = {'\x7F', '\x25', '\x95', '\x31', '\x03', '\xEC', '\xAC', '\xF5', '\x78', '\x7F', '\x86', - '\x2F', '\x53', '\xAC', '\xFA', '\xA9', '\x74', '\x3E', '\x8C', '\x6E', '\x39'}; + constexpr std::array parametersSource = CRYPT_NAME("http://ro.gnjoy.com/", 0x8783C33941E15117ULL); const char* parametersText = DecryptName<0x8783C33941E15117ULL>(parametersSource); - const std::array fileSource = {'\xE3', '\xE9', '\x03', '\xFD', '\xDB', '\xF2', '\x48', '\x65', '\xE4', '\xB3', '\x10', - '\xE3', '\x8B', '\xB2', '\x1E', '\x39', '\xE8', '\xF2', '\x1A', '\xA2', '\xE1'}; + constexpr std::array fileSource = CRYPT_NAME("http://ro.gnjoy.com/", 0x1767DDE18D779D8BULL); const char* fileText = DecryptName<0x1767DDE18D779D8BULL>(fileSource); - const std::array operationSource = {'\xAE', '\xD3', '\x94', '\xA3', '\x11'}; + constexpr std::array operationSource = CRYPT_NAME("OPEN", 0xC1BB8111EDD183E1ULL); ShellExecuteA(nullptr, DecryptName<0xC1BB8111EDD183E1ULL>(operationSource), fileText, parametersText, nullptr, SW_SHOW); g_modeMgr.gameMode->SendMsg(MM_QUIT, 0, 0, 0, 0); return; @@ -1426,9 +1400,9 @@ void CLoginMode::ReceiveLoginErrorDetail(const LoginErrorDetailPacket* packet) { if (!message.empty()) { const int error = packet->error; - const std::array codeSource = {'\xB7', '\xF8', '\xE7', '\x36', '\x77'}; + constexpr std::array codeSource = CRYPT_NAME("(%d)", 0x271B45771F83DD9FULL); message += FormatOwnedString(DecryptName<0x271B45771F83DD9FULL>(codeSource), error); - const std::array detailSource = {'\xAF', '\x02', '\x44', '\x98', '\xE8', '\x19'}; + constexpr std::array detailSource = CRYPT_NAME(" [%s]", 0xC70319B5EB61598FULL); message += FormatOwnedString(DecryptName<0xC70319B5EB61598FULL>(detailSource), packet->detail); g_windowMgr.Confirm(message.c_str(), 5, true, true, 0, "Message", 280, 120, 0); if (this->otpTimedOut != true) { @@ -1495,11 +1469,11 @@ void CLoginMode::ReceiveLoginError(const LoginErrorPacket* packet) { const char* caption; bool protect; if (error == 800) { - const std::array captionSource = {'\x37', '\x63', '\x53', '\x3B', '\xBC', '\x33', '\xAD'}; + constexpr std::array captionSource = CRYPT_NAME("메세지", 0x75ADC57D87EFBD8FULL); caption = DecryptName<0x75ADC57D87EFBD8FULL>(captionSource); protect = true; } else { - const std::array codeSource = {'\x79', '\xAE', '\xA9', '\x28', '\xBB'}; + constexpr std::array codeSource = CRYPT_NAME("(%d)", 0xD1413DBB01CD8B51ULL); message += FormatOwnedString(DecryptName<0xD1413DBB01CD8B51ULL>(codeSource), error); caption = "Message"; protect = false; @@ -1556,8 +1530,7 @@ int CLoginMode::Run() { g_modeMgr.Quit(); std::string message = g_nProtectGameGuardMgr->ErrorMessage(); if (!message.empty()) { - const std::array source = {'\x83', '\x25', '\x13', '\x4C', '\xC3', '\x86', '\x32', '\x59', '\xCD', '\x32', '\x00', '\x4E', - '\xD2', '\xA4', '\x24', '\x4C', '\x9F', '\x11', '\x61'}; + constexpr std::array source = CRYPT_NAME("nProtect GameGuard", 0x2D51E3B7236175EDULL); MessageBoxA(hWnd, message.c_str(), DecryptName<0x2D51E3B7236175EDULL>(source), 0); } } @@ -1698,21 +1671,21 @@ void CLoginMode::SubD90C90(const PasswordModePacket* packet) { break; case 9: { const char* text = LookupMessage(MSI_NAVIGATION_RUITELISTTITEL); - const std::array source = {'\xF2', '\xE6', '\x37', '\xBE', '\x35', '\x6C', '\x87'}; + constexpr std::array source = CRYPT_NAME("%s(%d)", 0x0B8745519B1F95D7ULL); g_windowMgr.Confirm(FormatString(DecryptName<0x0B8745519B1F95D7ULL>(source), text, 9), 0, true, false, 0, "Message", 280, 120, 0); break; } case 10: { const char* text = LookupMessage(MSI_NAVIGATION_RUITELISTTITEL); - const std::array source = {'\xF0', '\x4A', '\x03', '\x6C', '\x83', '\x8E', '\x97'}; + constexpr std::array source = CRYPT_NAME("%s(%d)", 0xA597A7E7492B39D5ULL); g_windowMgr.Confirm(FormatString(DecryptName<0xA597A7E7492B39D5ULL>(source), text, 10), 0, true, false, 0, "Message", 280, 120, 0); break; } case 11: { const char* text = LookupMessage(MSI_NAVIGATION_RUITELISTTITEL); - const std::array source = {'\x56', '\x9C', '\x93', '\xF4', '\xB1', '\xCA', '\xAB'}; + constexpr std::array source = CRYPT_NAME("%s(%d)", 0xFFABE3D5D1BBEF73ULL); g_windowMgr.Confirm(FormatString(DecryptName<0xFFABE3D5D1BBEF73ULL>(source), text, 11), 0, true, false, 0, "Message", 280, 120, 0); break; @@ -1780,21 +1753,21 @@ void CLoginMode::SubD911C0(const PasswordModePacket* packet) { break; case 9: { const char* text = LookupMessage(MSI_NAVIGATION_RUITELISTTITEL); - const std::array source = {'\x16', '\x10', '\x7D', '\xD4', '\x4D', '\x1C', '\xD3'}; + constexpr std::array source = CRYPT_NAME("%s(%d)", 0x49D33529F1556333ULL); g_windowMgr.Confirm(FormatString(DecryptName<0x49D33529F1556333ULL>(source), text, 9), 0, true, false, 0, "Message", 280, 120, 0); break; } case 10: { const char* text = LookupMessage(MSI_NAVIGATION_RUITELISTTITEL); - const std::array source = {'\x14', '\x8A', '\xFB', '\xDC', '\x79', '\x66', '\xCB'}; + constexpr std::array source = CRYPT_NAME("%s(%d)", 0x01CB4F1DF9D3F931ULL); g_windowMgr.Confirm(FormatString(DecryptName<0x01CB4F1DF9D3F931ULL>(source), text, 10), 0, true, false, 0, "Message", 280, 120, 0); break; } case 11: { const char* text = LookupMessage(MSI_NAVIGATION_RUITELISTTITEL); - const std::array source = {'\xB2', '\xBA', '\xE1', '\xBE', '\xA9', '\x92', '\xB1'}; + constexpr std::array source = CRYPT_NAME("%s(%d)", 0xC5B1BBCD9BC9C997ULL); g_windowMgr.Confirm(FormatString(DecryptName<0xC5B1BBCD9BC9C997ULL>(source), text, 11), 0, true, false, 0, "Message", 280, 120, 0); break; @@ -1981,7 +1954,7 @@ void CLoginMode::ShowLoginError(int code, int argument) { url = "https://member.onstove.com/auth/login/by_game?redirect_url=https://ro.game.onstove.com/account/ingamepopup/&access_token="; } url += g_stoveMgr->GetAccessToken(); - const std::array source = {'\x42', '\x33', '\xC8', '\x47', '\x45'}; + constexpr std::array source = CRYPT_NAME("OPEN", 0xD98F5345098D630DULL); ShellExecuteA(nullptr, DecryptName<0xD98F5345098D630DULL>(source), url.c_str(), url.c_str(), nullptr, SW_SHOWNORMAL); message = ""; g_modeMgr.Quit(); @@ -2036,16 +2009,14 @@ void CLoginMode::ShowLoginError(int code, int argument) { message = std::string(PasswordRetryExceededMessage{}().Text()); if (g_windowMgr.Confirm(message.c_str(), 0, true, true, 0, "Message", 280, 120, 0) == 0xB8) { if (g_session.m_channelCopId == 1) { - const std::array urlSource = {'\x17', '\x67', '\xAB', '\xA1', '\xBF', '\x48', '\x56', '\x9A', '\x08', '\x64', '\xF1', '\xB9', - '\xE4', '\x09', '\x1E', '\x8C', '\x12', '\x76', '\xF1', '\xB2', '\xEA', '\x0A', '\x79'}; + constexpr std::array urlSource = CRYPT_NAME("http://www.hangame.com", 0xED796785D1DF137FULL); const char* file = DecryptName<0xED796785D1DF137FULL>(urlSource); - const std::array source = {'\xD2', '\xCD', '\x88', '\x59', '\xBB'}; + constexpr std::array source = CRYPT_NAME("open", 0x83EFBFBB37EDBDBDULL); ShellExecuteA(hWnd, DecryptName<0x83EFBFBB37EDBDBDULL>(source), file, nullptr, nullptr, SW_SHOWNORMAL); } else { - const std::array urlSource = {'\xF7', '\xB1', '\x19', '\xDB', '\xED', '\x06', '\xD2', '\xD7', '\xFE', '\xA2', '\x03', - '\xCA', '\xA5', '\x46', '\x96', '\x8B', '\xFC', '\xAA', '\x43', '\xC0', '\xA5', '\x29'}; + constexpr std::array urlSource = CRYPT_NAME("http://ragnarok.co.kr", 0xA5FD29D7AB6DC59FULL); const char* file = DecryptName<0xA5FD29D7AB6DC59FULL>(urlSource); - const std::array source = {'\x66', '\x57', '\x4A', '\xD5', '\xBD'}; + constexpr std::array source = CRYPT_NAME("open", 0xD97D5DBDBB2F2709ULL); ShellExecuteA(hWnd, DecryptName<0xD97D5DBDBB2F2709ULL>(source), file, nullptr, nullptr, SW_SHOWNORMAL); } g_modeMgr.Quit(); @@ -2118,18 +2089,12 @@ void CLoginMode::ShowLoginError(int code, int argument) { } case 16: if (g_serviceType == 0) { - const std::array textSource = {'\x4B', '\x36', '\x80', '\xD9', '\x37', '\xC0', '\xB7', '\x39', '\x52', '\xE7', '\x83', '\xA6', '\xA7', '\x9F', '\x6F', '\x39', - '\x35', '\xEB', '\x19', '\xBD', '\xCE', '\xC4', '\x8C', '\xD1', '\x30', '\x65', '\x85', '\xDA', '\x37', '\xBE', '\x97', '\x30', - '\x27', '\x7A', '\xFA', '\xB8', '\xF5', '\x59', '\xF6', '\x28', '\x47', '\x3F', '\x8D', '\xC6', '\xA3', '\xA0', '\x61', '\xF1'}; + constexpr std::array textSource = CRYPT_NAME("비밀 번호 변경 후, 다시 접속 해주시기 바랍니다.", 0xF14F79170939C7F1ULL); message = std::string(DecryptName<0xF14F79170939C7F1ULL>(textSource)); if (g_windowMgr.Confirm(message.c_str(), 0, true, true, 0, "Message", 280, 120, 0) == 0xB8) { - const std::array urlSource = {'\x43', '\x6B', '\x9D', '\xDB', '\xFB', '\xD0', '\x02', '\x08', '\x5C', '\x68', '\xC7', '\xD9', '\xA0', '\x98', '\x43', '\x1E', - '\x59', '\x70', '\x82', '\x85', '\xA2', '\x90', '\x03', '\x14', '\x59', '\x30', '\x9A', '\xCE', '\xB5', '\xB1', '\x48', '\x08', - '\x7B', '\x48', '\xC6', '\xDB', '\xA0', '\x8C', '\x5E', '\x08', '\x44', '\x6D', '\x8D', '\xF4', '\xA2', '\x97', '\x4C', '\x11', - '\x4C', '\x7A', '\xB6', '\xCA', '\xA6', '\x8D', '\x48', '\x1A', '\x46', '\x7A', '\x87', '\xDF', '\xEF', '\x9E', '\x5E', '\x0F', - '\x2B'}; + constexpr std::array urlSource = CRYPT_NAME("http://www.ragnarok.co.kr/setNewPW/password_change_agreement.asp", 0x7F2DFFC1ABE91F2BULL); const char* file = DecryptName<0x7F2DFFC1ABE91F2BULL>(urlSource); - const std::array source = {'\xE2', '\xF1', '\x74', '\x9D', '\xB3'}; + constexpr std::array source = CRYPT_NAME("open", 0xFD69A9B3F311818DULL); ShellExecuteA(hWnd, DecryptName<0xFD69A9B3F311818DULL>(source), file, nullptr, nullptr, SW_SHOWNORMAL); g_modeMgr.Quit(); } @@ -2187,7 +2152,7 @@ void CLoginMode::ShowLoginError(int code, int argument) { case 110: if (g_windowMgr.Confirm(LookupMessage(MSI_SHOUTDOWN_TIME), 0, true, true, 0, "Message", 280, 120, 0) == 0xB8) { const char* file = LookupMessage(MSI_PARTIAL_SHOUTDOWN_TIME); - const std::array source = {'\xFC', '\x05', '\xBA', '\x81', '\x4D'}; + constexpr std::array source = CRYPT_NAME("open", 0x9B0F234DEFDF7593ULL); ShellExecuteA(hWnd, DecryptName<0x9B0F234DEFDF7593ULL>(source), file, nullptr, nullptr, SW_SHOWNORMAL); g_modeMgr.Quit(); } @@ -2212,7 +2177,7 @@ void CLoginMode::ShowLoginError(int code, int argument) { break; default: { message = LookupMessage(MSI_ACCESS_DENIED); - const std::array source = {'\x6B', '\x1C', '\x3F', '\x42', '\x67'}; + constexpr std::array source = CRYPT_NAME("(%d)", 0xC9712D676B5B3943ULL); message += FormatOwnedString(DecryptName<0xC9712D676B5B3943ULL>(source), code); break; } @@ -2400,7 +2365,7 @@ void CLoginMode::ReceiveAcceptLogin(const AcceptLoginPacket* packet, int version CNProtectGameGuardMgr* gameGuard = g_nProtectGameGuardMgr; const std::uint32_t aid = packet->aid; - const std::array source = {0x4C, 0x7B, 0x77}; + constexpr std::array source = CRYPT_NAME("%d", 0x637B959D55771F69ULL); thread_local EncryptedName format(source); gameGuard->Send(FormatString(format.Text(), aid)); GetRagConnection().Close(); diff --git a/Source/Client/Mode/LoginModeNotices.cpp b/Source/Client/Mode/LoginModeNotices.cpp index e18e46e65..5b1b10b5b 100644 --- a/Source/Client/Mode/LoginModeNotices.cpp +++ b/Source/Client/Mode/LoginModeNotices.cpp @@ -9,6 +9,7 @@ #include "UI/Window/UIWindowMgr.h" #include "Utility/Cipher/XorBytes.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include "Resource/MSGSTRINGID.h" #include @@ -236,7 +237,7 @@ void CLoginMode::ReceiveNotifyBan(const unsigned char* data) { } if (strlen(text) != 0) { - const std::array source = {0x1E, 0x94, 0x29, 0x3E, 0xA5, 0x88, 0x2B}; + constexpr std::array source = CRYPT_NAME("%s(%d)", 0xBD2BA1C11B01E73BULL); // GLOBAL: gl_25060 thread_local EncryptedName<7, 0xBD2BA1C11B01E73BULL> format(source); char message[256]; diff --git a/Source/Client/Session/Session.cpp b/Source/Client/Session/Session.cpp index 48bd84c60..e80f3f0f8 100644 --- a/Source/Client/Session/Session.cpp +++ b/Source/Client/Session/Session.cpp @@ -76,6 +76,7 @@ #include #include "Utility/StdStringCompare.h" #include "Utility/Math/AffineMatrix.h" +#include "Utility/Cipher/CryptName.h" using SessionShopTree = std::_Tree, std::allocator>, false>>; @@ -5363,52 +5364,52 @@ void CSession::InitResourceNameTables() { bodyJobNames[358] = "SPIRIT_HANDLER"; bodyJobNames[365] = "SPIRIT_HANDLER_RIDING"; bodyJobNames[401] = []() -> EncryptedName<6, 0xB39FA7917BCFBB8DULL>& { - const std::array source = {'\xC9', '\xE9', '\x9A', '\x32', '\xD5', '\xA7'}; + constexpr std::array source = CRYPT_NAME("DRUID", 0xB39FA7917BCFBB8DULL); thread_local EncryptedName name(source); return name; }().Text(); bodyJobNames[402] = []() -> EncryptedName<6, 0x8D1D0FF1AF2B13F7ULL>& { - const std::array source = {'\xB3', '\x41', '\x7E', '\xE6', '\xB5', '\x0F'}; + constexpr std::array source = CRYPT_NAME("DRUID", 0x8D1D0FF1AF2B13F7ULL); thread_local EncryptedName name(source); return name; }().Text(); bodyJobNames[403] = []() -> EncryptedName<7, 0x4F637DC51307B759ULL>& { - const std::array source = {'\x12', '\xF6', '\x55', '\x5D', '\x8A', '\x2E', '\x63'}; + constexpr std::array source = CRYPT_NAME("KARNOS", 0x4F637DC51307B759ULL); thread_local EncryptedName name(source); return name; }().Text(); bodyJobNames[404] = []() -> EncryptedName<7, 0x2DCB7567394DC1ABULL>& { - const std::array source = {'\xE0', '\x80', '\x1F', '\x77', '\x28', '\x26', '\xCB'}; + constexpr std::array source = CRYPT_NAME("KARNOS", 0x2DCB7567394DC1ABULL); thread_local EncryptedName name(source); return name; }().Text(); bodyJobNames[405] = []() -> EncryptedName<7, 0x6BA1C1132F033B75ULL>& { - const std::array source = {'\x34', '\x77', '\x4A', '\x7B', '\x56', '\x80', '\xA1'}; + constexpr std::array source = CRYPT_NAME("ALITEA", 0x6BA1C1132F033B75ULL); thread_local EncryptedName name(source); return name; }().Text(); bodyJobNames[406] = []() -> EncryptedName<9, 0xA12DAB392545D72FULL>& { - const std::array source = {'\x78', '\x92', '\x17', '\x60', '\x6E', '\xE4', '\x61', '\xE7', '\x2F'}; + constexpr std::array source = CRYPT_NAME("WEREWOLF", 0xA12DAB392545D72FULL); thread_local EncryptedName name(source); return name; }().Text(); bodyJobNames[407] = []() -> EncryptedName<11, 0x33133B977BCD03CDULL>& { - const std::array source = {'\x9A', '\x46', '\x9F', '\x3E', '\xC5', '\x7A', '\x43', '\x67', '\x82', '\x51', '\xCD'}; + constexpr std::array source = CRYPT_NAME("WERERAPTOR", 0x33133B977BCD03CDULL); thread_local EncryptedName name(source); return name; }().Text(); bodyJobNames[408] = []() -> EncryptedName<13, 0x2FEB8739E5975BD1ULL>& { - const std::array source = {'\x95', '\x09', '\xC2', '\xAC', '\x7D', '\xD8', '\xB9', '\x66', '\x95', '\x12', '\xD9', '\xA2', '\x39'}; + constexpr std::array source = CRYPT_NAME("DRUID_RIDING", 0x2FEB8739E5975BD1ULL); thread_local EncryptedName name(source); return name; }().Text(); bodyJobNames[409] = []() -> EncryptedName<14, 0x39A39F87DD5F535BULL>& { - const std::array source = {'\x10', '\x12', '\x0D', '\x93', '\xC8', '\xCC', '\xFC', '\x6B', '\x12', '\x17', '\x16', '\x93', '\xC0', '\x9F'}; + constexpr std::array source = CRYPT_NAME("KARNOS_RIDING", 0x39A39F87DD5F535BULL); thread_local EncryptedName name(source); return name; }().Text(); bodyJobNames[410] = []() -> EncryptedName<14, 0x6FE153231D879777ULL>& { - const std::array source = {'\x36', '\xDB', '\xCE', '\x49', '\x66', '\x12', '\xBE', '\x3D', '\x3E', '\xD3', '\xCE', '\x53', '\x64', '\x53'}; + constexpr std::array source = CRYPT_NAME("ALITEA_RIDING", 0x6FE153231D879777ULL); thread_local EncryptedName name(source); return name; }().Text(); @@ -5881,457 +5882,457 @@ void CSession::InitResourceNameTables() { } std::vector& shieldJobNames = reinterpret_cast&>(this->m_shieldJobNames); shieldJobNames.resize(28053, []() -> EncryptedName<14, 0x234977DDB54BC71DULL>& { - const std::array source = {'\xDE', '\x0D', '\xF1', '\x0D', '\x1D', '\xAD', '\x15', '\xE0', '\xD7', '\x7D', '\xF3', '\x75', '\x07', '\x77'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0x234977DDB54BC71DULL); thread_local EncryptedName name(source); return name; }().Text()); shieldJobNames[0] = []() -> EncryptedName<14, 0xEF6D1D893F2B2DC5ULL>& { - const std::array source = {'\x06', '\xE7', '\x91', '\x87', '\x49', '\xC7', '\x31', '\x2C', '\x0F', '\x97', '\x93', '\xFF', '\x53', '\x1D'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0xEF6D1D893F2B2DC5ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[1] = []() -> EncryptedName<10, 0xE55723712993051DULL>& { - const std::array source = {'\xAD', '\xCE', '\x28', '\xCE', '\x2D', '\x93', '\x9C', '\x5E', '\xFA', '\x05'}; + constexpr std::array source = CRYPT_NAME("검사\\검사", 0xE55723712993051DULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[2] = []() -> EncryptedName<14, 0x793F370985ED674FULL>& { - const std::array source = {'\xF7', '\xD1', '\x54', '\x78', '\xB2', '\xD0', '\x63', '\xC1', '\xF9', '\xDE', '\x10', '\x3E', '\xEE', '\x37'}; + constexpr std::array source = CRYPT_NAME("마법사\\마법사", 0x793F370985ED674FULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[3] = []() -> EncryptedName<10, 0xCB1D253B7FE1F563ULL>& { - const std::array source = {'\xD2', '\x36', '\x5D', '\x89', '\x67', '\x94', '\xDE', '\x77', '\x95', '\xF5'}; + constexpr std::array source = CRYPT_NAME("궁수\\궁수", 0xCB1D253B7FE1F563ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[4] = []() -> EncryptedName<14, 0x7115D9F973F913C9ULL>& { - const std::array source = {'\x75', '\xA9', '\x38', '\x84', '\x39', '\x03', '\x49', '\xCD', '\x73', '\xD2', '\x0E', '\xB3', '\x23', '\xD9'}; + constexpr std::array source = CRYPT_NAME("성직자\\성직자", 0x7115D9F973F913C9ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[5] = []() -> EncryptedName<10, 0x7321C3814F8799E1ULL>& { - const std::array source = {'\x5A', '\x6A', '\x47', '\x81', '\xDD', '\x78', '\xD2', '\xB3', '\x2F', '\x99'}; + constexpr std::array source = CRYPT_NAME("상인\\상인", 0x7321C3814F8799E1ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[6] = []() -> EncryptedName<10, 0x7941D76335CFA14FULL>& { - const std::array source = {'\xFA', '\x14', '\x7A', '\xFA', '\x3F', '\x62', '\xF4', '\xCC', '\x80', '\xA1'}; + constexpr std::array source = CRYPT_NAME("도둑\\도둑", 0x7941D76335CFA14FULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[7] = []() -> EncryptedName<10, 0x0F15B16B5BAFD57FULL>& { - const std::array source = {'\xCE', '\x37', '\x14', '\xBC', '\x37', '\x00', '\xF7', '\xB4', '\x98', '\xD5'}; + constexpr std::array source = CRYPT_NAME("기사\\기사", 0x0F15B16B5BAFD57FULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[8] = []() -> EncryptedName<18, 0x7DE349D717D7F123ULL>& { - const std::array source = {'\xE4', '\x30', '\x6F', '\xB9', '\x6A', '\xF3', '\x25', '\xD3', '\x7F', '\x36', '\x16', '\xAF', '\x79', '\xF4', '\x59', '\xBB', '\x8D', '\xF1'}; + constexpr std::array source = CRYPT_NAME("프리스트\\프리스트", 0x7DE349D717D7F123ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[9] = []() -> EncryptedName<14, 0x9FED7DA189490D5DULL>& { - const std::array source = {'\x9D', '\xAA', '\x89', '\x73', '\x14', '\x98', '\xB1', '\x5F', '\xFA', '\xCD', '\xB3', '\x3C', '\x44', '\x7D'}; + constexpr std::array source = CRYPT_NAME("위저드\\위저드", 0x9FED7DA189490D5DULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[10] = []() -> EncryptedName<14, 0x452FEF0D7FC95565ULL>& { - const std::array source = {'\xA4', '\xF3', '\x0A', '\xC9', '\xBD', '\x17', '\x73', '\x84', '\xC3', '\x96', '\x7F', '\xCF', '\xF5', '\xEF'}; + constexpr std::array source = CRYPT_NAME("제철공\\제철공", 0x452FEF0D7FC95565ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[11] = []() -> EncryptedName<10, 0xF3CB6F7711A71B6DULL>& { - const std::array source = {'\xAA', '\xFE', '\x62', '\xDC', '\x2B', '\xA8', '\x2E', '\x36', '\xA0', '\x1B'}; + constexpr std::array source = CRYPT_NAME("헌터\\헌터", 0xF3CB6F7711A71B6DULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[12] = []() -> EncryptedName<14, 0x839B27DF8F5967B3ULL>& { - const std::array source = {'\x0D', '\x89', '\xE5', '\x33', '\x62', '\xE2', '\xC7', '\x3D', '\x5D', '\xDB', '\xE5', '\x32', '\x1A', '\x27'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0x839B27DF8F5967B3ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[13] = []() -> EncryptedName<28, 0x0F41EBBDA32D1B17ULL>& { - const std::array source = {'\xD1', '\xFF', '\xE9', '\x79', '\x7B', '\x0F', '\x85', '\xD5', '\x48', '\xAA', '\xCF', '\x18', '\x5A', '\xB7', '\x87', '\xEB', '\xD3', '\xC1', '\xEB', '\x47', '\x79', '\x31', '\x1E', '\xBE', '\xF5', '\xA0', '\xCA', '\xA3'}; + constexpr std::array source = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x0F41EBBDA32D1B17ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[14] = []() -> EncryptedName<22, 0x2D51E3B7236175EDULL>& { - const std::array source = {'\x28', '\xDC', '\xD6', '\xC4', '\x0B', '\x5F', '\x91', '\xE1', '\x59', '\x80', '\x3D', '\xE6', '\x1E', '\x54', '\xB6', '\x91', '\x51', '\xB5', '\xAD', '\x97', '\x42', '\xE3'}; + constexpr std::array source = CRYPT_NAME("크루세이더\\크루세이더", 0x2D51E3B7236175EDULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[15] = []() -> EncryptedName<10, 0x176F138D5DD7F365ULL>& { - const std::array source = {'\xDD', '\x0A', '\x12', '\xF4', '\xD1', '\xAB', '\x96', '\xD2', '\xCC', '\xF3'}; + constexpr std::array source = CRYPT_NAME("몽크\\몽크", 0x176F138D5DD7F365ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[16] = []() -> EncryptedName<14, 0xFBD599E117C547C1ULL>& { - const std::array source = {'\x7D', '\xFB', '\x05', '\xDB', '\x20', '\x6F', '\x89', '\x47', '\x7D', '\x87', '\x09', '\xD6', '\x17', '\x99'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0xFBD599E117C547C1ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[17] = []() -> EncryptedName<10, 0x192D654D29337BE5ULL>& { - const std::array source = {'\x52', '\xB5', '\x82', '\xFE', '\x11', '\xD2', '\xE3', '\xA8', '\x32', '\x7B'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0x192D654D29337BE5ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[18] = []() -> EncryptedName<18, 0xB3E307A5F753D5E3ULL>& { - const std::array source = {'\x5C', '\x79', '\xE2', '\x2A', '\x19', '\xFD', '\x58', '\x54', '\xBF', '\x6A', '\xFF', '\x46', '\x78', '\xBB', '\x19', '\x08', '\x04', '\xD5'}; + constexpr std::array source = CRYPT_NAME("연금술사\\연금술사", 0xB3E307A5F753D5E3ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[19] = []() -> EncryptedName<10, 0x79E915E9AF6F55DDULL>& { - const std::array source = {'\x64', '\x8C', '\xDA', '\x4A', '\xB5', '\xAC', '\x30', '\xCC', '\x38', '\x55'}; + constexpr std::array source = CRYPT_NAME("바드\\바드", 0x79E915E9AF6F55DDULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[20] = []() -> EncryptedName<10, 0xB7AFBD2FD9FD7501ULL>& { - const std::array source = {'\xB8', '\xDE', '\x35', '\x28', '\x73', '\x04', '\x04', '\x7F', '\xF0', '\x75'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0xB7AFBD2FD9FD7501ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[21] = []() -> EncryptedName<34, 0x6BDF334F2BFDAD51ULL>& { - const std::array source = {'\xEC', '\x68', '\x3B', '\xCF', '\x8B', '\xE9', '\x1A', '\xC2', '\xE6', '\x4A', '\x41', '\x97', '\x8F', '\xFF', '\x6B', '\x9E', '\x0D', '\x10', '\x38', '\xED', '\xAB', '\xF7', '\x05', '\xAE', '\xF8', '\x1A', '\x1A', '\x97', '\xF3', '\xF3', '\x13', '\xDF', '\xA4', '\xAD'}; + constexpr std::array source = CRYPT_NAME("신페코크루세이더\\신페코크루세이더", 0x6BDF334F2BFDAD51ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[23] = []() -> EncryptedName<14, 0x674D9F3975573D41ULL>& { - const std::array source = {'\x82', '\xF7', '\xED', '\xCD', '\xF9', '\x45', '\x11', '\xA4', '\x8B', '\x87', '\xEF', '\xB5', '\xE3', '\x9F'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0x674D9F3975573D41ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[22] = []() -> EncryptedName<10, 0x0B23D10F2F49D72BULL>& { - const std::array source = {'\x9B', '\x36', '\x81', '\x8A', '\x53', '\x61', '\xC2', '\xC3', '\x8E', '\xD7'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0x0B23D10F2F49D72BULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[26] = []() -> EncryptedName<10, 0x136F2F9915D1DBCFULL>& { - const std::array source = {'\x7F', '\x3A', '\x19', '\xB0', '\xC5', '\x9F', '\x8E', '\xDB', '\x6A', '\xDB'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0x136F2F9915D1DBCFULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[27] = []() -> EncryptedName<10, 0x114901C7E37F6D49ULL>& { - const std::array source = {'\xF9', '\x8C', '\xB7', '\x46', '\x9B', '\xB1', '\xA8', '\xD9', '\xEC', '\x6D'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0x114901C7E37F6D49ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[28] = []() -> EncryptedName<10, 0x7D5D0F110B6B8371ULL>& { - const std::array source = {'\xC1', '\x62', '\xA3', '\xAE', '\x4D', '\xBF', '\xBC', '\xB5', '\xD4', '\x83'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0x7D5D0F110B6B8371ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[29] = []() -> EncryptedName<10, 0xADC51BF9C98B413DULL>& { - const std::array source = {'\x8D', '\xA0', '\x43', '\x6C', '\xA5', '\xAB', '\x24', '\x65', '\x98', '\x41'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0xADC51BF9C98B413DULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[30] = []() -> EncryptedName<10, 0xDF8117FF49CFF551ULL>& { - const std::array source = {'\xE1', '\x14', '\x07', '\xEC', '\xA3', '\xA7', '\x60', '\x17', '\xF4', '\xF5'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0xDF8117FF49CFF551ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[24] = []() -> EncryptedName<10, 0x87E3D1C50D572DEFULL>& { - const std::array source = {'\x5F', '\xEA', '\xE4', '\xC7', '\x99', '\x61', '\x24', '\x34', '\x25', '\x2D'}; + constexpr std::array source = CRYPT_NAME("건너\\건너", 0x87E3D1C50D572DEFULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[25] = []() -> EncryptedName<10, 0x51BB39B763BBBD8DULL>& { - const std::array source = {'\x39', '\x6C', '\x7B', '\xB9', '\xEB', '\x8D', '\x6A', '\x91', '\x57', '\xBD'}; + constexpr std::array source = CRYPT_NAME("닌자\\닌자", 0x51BB39B763BBBD8DULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[164] = []() -> EncryptedName<10, 0xDB27CB557D038759ULL>& { - const std::array source = {'\xED', '\x56', '\xC3', '\xA7', '\x09', '\x7F', '\xF6', '\x1B', '\x83', '\x87'}; + constexpr std::array source = CRYPT_NAME("닌자\\닌자", 0xDB27CB557D038759ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[167] = []() -> EncryptedName<14, 0x3FA3AFA7035DE3FFULL>& { - const std::array source = {'\x3F', '\x44', '\x9D', '\xF9', '\x12', '\x4A', '\xFF', '\xFF', '\x58', '\x23', '\xA7', '\xB6', '\x42', '\xAF'}; + constexpr std::array source = CRYPT_NAME("위저드\\위저드", 0x3FA3AFA7035DE3FFULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[165] = []() -> EncryptedName<10, 0x0399459DAF454F0FULL>& { - const std::array source = {'\xBF', '\x88', '\xF6', '\x65', '\xC1', '\xF5', '\x5E', '\xB0', '\xC5', '\x4F'}; + constexpr std::array source = CRYPT_NAME("건너\\건너", 0x0399459DAF454F0FULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[166] = []() -> EncryptedName<10, 0xD5A78DB38D8DAFABULL>& { - const std::array source = {'\x1B', '\x64', '\x36', '\x6A', '\xEF', '\x3D', '\x6C', '\x6E', '\x4C', '\xAF'}; + constexpr std::array source = CRYPT_NAME("검사\\검사", 0xD5A78DB38D8DAFABULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[168] = []() -> EncryptedName<14, 0xA597A7E7492B39D5ULL>& { - const std::array source = {'\x14', '\x9F', '\xE8', '\xFF', '\x57', '\x5F', '\xCB', '\x64', '\x73', '\xFA', '\x9D', '\xF9', '\x1F', '\xA7'}; + constexpr std::array source = CRYPT_NAME("제철공\\제철공", 0xA597A7E7492B39D5ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[169] = []() -> EncryptedName<10, 0xFFABE3D5D1BBEF73ULL>& { - const std::array source = {'\xC8', '\x1C', '\x7B', '\x1F', '\x89', '\x58', '\x58', '\x3F', '\xBD', '\xEF'}; + constexpr std::array source = CRYPT_NAME("상인\\상인", 0xFFABE3D5D1BBEF73ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[170] = []() -> EncryptedName<18, 0xC70319B5EB61598FULL>& { - const std::array source = {'\x30', '\xF5', '\xD0', '\x36', '\x09', '\xE3', '\xB8', '\x20', '\xD3', '\xE6', '\xCD', '\x5A', '\x68', '\xA5', '\xF9', '\x7C', '\x68', '\x59'}; + constexpr std::array source = CRYPT_NAME("연금술사\\연금술사", 0xC70319B5EB61598FULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[171] = []() -> EncryptedName<18, 0x0B8745519B1F95D7ULL>& { - const std::array source = {'\x68', '\x39', '\xAE', '\x46', '\xED', '\xBF', '\x3C', '\xEC', '\x8B', '\x2A', '\xB3', '\x2A', '\x8C', '\xF9', '\x7D', '\xB0', '\x30', '\x95'}; + constexpr std::array source = CRYPT_NAME("연금술사\\연금술사", 0x0B8745519B1F95D7ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[172] = []() -> EncryptedName<10, 0x8783C33941E15117ULL>& { - const std::array source = {'\xA6', '\x92', '\x5D', '\xB7', '\x65', '\x72', '\x40', '\x3B', '\xE1', '\x51'}; + constexpr std::array source = CRYPT_NAME("궁수\\궁수", 0x8783C33941E15117ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[173] = []() -> EncryptedName<18, 0x271B45771F83DD9FULL>& { - const std::array source = {'\x5A', '\x1F', '\x32', '\xD8', '\xCB', '\x97', '\xA8', '\xC5', '\xC3', '\x18', '\x41', '\xAE', '\xB0', '\xF9', '\xC9', '\x94', '\x7D', '\xDD'}; + constexpr std::array source = CRYPT_NAME("태권소년\\태권소년", 0x271B45771F83DD9FULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[174] = []() -> EncryptedName<14, 0xC1BB8111EDD183E1ULL>& { - const std::array source = {'\x22', '\x49', '\x6B', '\x55', '\xD1', '\x5B', '\xE7', '\x02', '\x2B', '\x39', '\x69', '\x2D', '\xCB', '\x81'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0xC1BB8111EDD183E1ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[175] = []() -> EncryptedName<10, 0x1767DDE18D779D8BULL>& { - const std::array source = {'\x33', '\x64', '\xB2', '\x24', '\xBD', '\x65', '\x9E', '\xD2', '\x22', '\x9D'}; + constexpr std::array source = CRYPT_NAME("몽크\\몽크", 0x1767DDE18D779D8BULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[176] = []() -> EncryptedName<14, 0x01CB4F1DF9D3F931ULL>& { - const std::array source = {'\x8D', '\x43', '\x12', '\x0E', '\xDD', '\x95', '\x97', '\xBD', '\x8B', '\x38', '\x24', '\x39', '\xC7', '\x4F'}; + constexpr std::array source = CRYPT_NAME("성직자\\성직자", 0x01CB4F1DF9D3F931ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[177] = []() -> EncryptedName<10, 0xC5B1BBCD9BC9C997ULL>& { - const std::array source = {'\x2F', '\x30', '\x0C', '\x32', '\x91', '\x03', '\x48', '\x00', '\x3E', '\xC9'}; + constexpr std::array source = CRYPT_NAME("몽크\\몽크", 0xC5B1BBCD9BC9C997ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[178] = []() -> EncryptedName<14, 0x792FFD1325418FB5ULL>& { - const std::array source = {'\x76', '\x45', '\xFB', '\x9D', '\xD3', '\x27', '\x73', '\xBA', '\x7F', '\x35', '\xF9', '\xE5', '\xC9', '\xFD'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0x792FFD1325418FB5ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[179] = []() -> EncryptedName<18, 0x49D33529F1556333ULL>& { - const std::array source = {'\xF4', '\xA2', '\xED', '\x5F', '\x94', '\x8F', '\x15', '\xE7', '\x6F', '\xA4', '\x94', '\x49', '\x87', '\x88', '\x69', '\x8F', '\x9D', '\x63'}; + constexpr std::array source = CRYPT_NAME("프리스트\\프리스트", 0x49D33529F1556333ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[180] = []() -> EncryptedName<14, 0xE33F2FF779878559ULL>& { - const std::array source = {'\xE1', '\x33', '\x3E', '\x84', '\x4C', '\xC8', '\x63', '\x5B', '\xEF', '\x3C', '\x7A', '\xC2', '\x10', '\x2F'}; + constexpr std::array source = CRYPT_NAME("마법사\\마법사", 0xE33F2FF779878559ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[181] = []() -> EncryptedName<14, 0xF15F8785CDE369BFULL>& { - const std::array source = {'\x03', '\xD5', '\x23', '\x01', '\x44', '\x71', '\x03', '\x4D', '\x03', '\xA9', '\x2F', '\x0C', '\x73', '\x87'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0xF15F8785CDE369BFULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[182] = []() -> EncryptedName<14, 0x81F58DED5D470D01ULL>& { - const std::array source = {'\xBD', '\xB1', '\x87', '\x91', '\x2C', '\x7B', '\xA9', '\x3D', '\xBD', '\xCD', '\x8B', '\x9C', '\x1B', '\x8D'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0x81F58DED5D470D01ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[183] = []() -> EncryptedName<14, 0x454D31872BB3EDCBULL>& { - const std::array source = {'\x0B', '\x4A', '\x73', '\xD1', '\x32', '\xD4', '\x11', '\x85', '\x6C', '\x2D', '\x49', '\x9E', '\x62', '\x31'}; + constexpr std::array source = CRYPT_NAME("위저드\\위저드", 0x454D31872BB3EDCBULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[184] = []() -> EncryptedName<14, 0x41CFCB831F6B6B91ULL>& { - const std::array source = {'\x51', '\xCC', '\xAB', '\xE5', '\x36', '\x2E', '\x93', '\x81', '\x36', '\xAB', '\x91', '\xAA', '\x66', '\xCB'}; + constexpr std::array source = CRYPT_NAME("위저드\\위저드", 0x41CFCB831F6B6B91ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[185] = []() -> EncryptedName<14, 0x5DE7712FAB613F75ULL>& { - const std::array source = {'\xC9', '\x83', '\xA1', '\x67', '\xEE', '\x87', '\xBB', '\xE1', '\xC9', '\xFF', '\xAD', '\x6A', '\xD9', '\x71'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0x5DE7712FAB613F75ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[186] = []() -> EncryptedName<14, 0x0F97E779A933D917ULL>& { - const std::array source = {'\xD7', '\x7E', '\xF3', '\x53', '\xCC', '\x02', '\xCB', '\xCF', '\xB0', '\x19', '\xC9', '\x1C', '\x9C', '\xE7'}; + constexpr std::array source = CRYPT_NAME("위저드\\위저드", 0x0F97E779A933D917ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[187] = []() -> EncryptedName<18, 0x3789496BE3E1D141ULL>& { - const std::array source = {'\xFE', '\x7D', '\x50', '\x3E', '\xD7', '\xB3', '\x32', '\xD0', '\x1D', '\x6E', '\x4D', '\x52', '\xB6', '\xF5', '\x73', '\x8C', '\xA6', '\xD1'}; + constexpr std::array source = CRYPT_NAME("연금술사\\연금술사", 0x3789496BE3E1D141ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[188] = []() -> EncryptedName<14, 0x4331A17F33095FEBULL>& { - const std::array source = {'\x2A', '\xF9', '\xCA', '\x85', '\xCF', '\x59', '\x6D', '\x82', '\x4D', '\x9C', '\xBF', '\x83', '\x87', '\xA1'}; + constexpr std::array source = CRYPT_NAME("제철공\\제철공", 0x4331A17F33095FEBULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[189] = []() -> EncryptedName<10, 0xD1056FF94D4D2773ULL>& { - const std::array source = {'\xCB', '\xDE', '\x88', '\xE4', '\xA5', '\xD7', '\xFC', '\x14', '\xDA', '\x27'}; + constexpr std::array source = CRYPT_NAME("몽크\\몽크", 0xD1056FF94D4D2773ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[190] = []() -> EncryptedName<14, 0xB127A19D775BF751ULL>& { - const std::array source = {'\xEF', '\x19', '\xE7', '\xCB', '\x20', '\x64', '\x7B', '\x0F', '\xBF', '\x4B', '\xE7', '\xCA', '\x58', '\xA1'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0xB127A19D775BF751ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[191] = []() -> EncryptedName<10, 0x0F61499B4973EB5DULL>& { - const std::array source = {'\xE8', '\x5E', '\xC6', '\x86', '\xC7', '\xFC', '\xD4', '\xBA', '\x92', '\xEB'}; + constexpr std::array source = CRYPT_NAME("도둑\\도둑", 0x0F61499B4973EB5DULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[192] = []() -> EncryptedName<10, 0xB7A96F8701BB4B6BULL>& { - const std::array source = {'\xDC', '\x85', '\x0A', '\xD6', '\xDB', '\xD8', '\x67', '\x06', '\xBC', '\x4B'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0xB7A96F8701BB4B6BULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[193] = []() -> EncryptedName<10, 0xA31F69E7EFED01C9ULL>& { - const std::array source = {'\x7E', '\xCF', '\x5C', '\x38', '\xBB', '\xDE', '\xD1', '\x12', '\x1E', '\x01'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0xA31F69E7EFED01C9ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[194] = []() -> EncryptedName<10, 0xBFF5C517A1A77F59ULL>& { - const std::array source = {'\xEE', '\xB1', '\x16', '\x76', '\x4B', '\x72', '\x3B', '\x0E', '\x8E', '\x7F'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0xBFF5C517A1A77F59ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[195] = []() -> EncryptedName<14, 0x659975C121557D3DULL>& { - const std::array source = {'\x83', '\x93', '\xE9', '\x9D', '\x7C', '\xB0', '\xC5', '\xDB', '\xD3', '\xC1', '\xE9', '\x9C', '\x04', '\x75'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0x659975C121557D3DULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[196] = []() -> EncryptedName<14, 0x85E1F5A7A5755B7FULL>& { - const std::array source = {'\xC1', '\xB5', '\xC9', '\x19', '\x1A', '\x30', '\xBD', '\x3B', '\x91', '\xE7', '\xC9', '\x18', '\x62', '\xF5'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0x85E1F5A7A5755B7FULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[197] = []() -> EncryptedName<10, 0xAD6153019F93A527ULL>& { - const std::array source = {'\x9E', '\x0E', '\x5B', '\x6E', '\x5D', '\xEA', '\xCA', '\x65', '\xD6', '\xA5'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0xAD6153019F93A527ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[198] = []() -> EncryptedName<10, 0xADADEB4DF7813B55ULL>& { - const std::array source = {'\xEC', '\xE2', '\x34', '\x12', '\x11', '\x52', '\x74', '\x18', '\xB0', '\x3B'}; + constexpr std::array source = CRYPT_NAME("바드\\바드", 0xADADEB4DF7813B55ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[199] = []() -> EncryptedName<10, 0xD9452D81E5CD99C1ULL>& { - const std::array source = {'\x78', '\x40', '\x78', '\x00', '\xDD', '\x94', '\x9C', '\x6C', '\x24', '\x99'}; + constexpr std::array source = CRYPT_NAME("바드\\바드", 0xD9452D81E5CD99C1ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[200] = []() -> EncryptedName<10, 0xD7A749EB27D5BF6DULL>& { - const std::array source = {'\xAA', '\x5A', '\x10', '\xEA', '\xB7', '\x8E', '\x42', '\x12', '\xA0', '\xBF'}; + constexpr std::array source = CRYPT_NAME("헌터\\헌터", 0xD7A749EB27D5BF6DULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[201] = []() -> EncryptedName<10, 0xB195637DAFCB0D59ULL>& { - const std::array source = {'\xE0', '\xA6', '\x03', '\x5E', '\x21', '\xDA', '\x3E', '\x79', '\xA8', '\x0D'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0xB195637DAFCB0D59ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[202] = []() -> EncryptedName<10, 0xB19D1FA9116F39D3ULL>& { - const std::array source = {'\x6A', '\x92', '\xA7', '\xE0', '\xF5', '\xA6', '\x36', '\x79', '\x22', '\x39'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0xB19D1FA9116F39D3ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[203] = []() -> EncryptedName<10, 0x9569C9C7E70909AFULL>& { - const std::array source = {'\x16', '\xD0', '\xBC', '\x02', '\x9B', '\x70', '\xB0', '\x20', '\x4A', '\x09'}; + constexpr std::array source = CRYPT_NAME("바드\\바드", 0x9569C9C7E70909AFULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[204] = []() -> EncryptedName<10, 0xF715514F5961B75BULL>& { - const std::array source = {'\x9C', '\x52', '\xA4', '\x94', '\x13', '\x96', '\xF0', '\x32', '\x96', '\xB7'}; + constexpr std::array source = CRYPT_NAME("헌터\\헌터", 0xF715514F5961B75BULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[205] = []() -> EncryptedName<18, 0x4191BB5531FD3999ULL>& { - const std::array source = {'\x5C', '\xFB', '\x4C', '\xF6', '\xE9', '\x69', '\x22', '\xA3', '\xC5', '\xFC', '\x3F', '\x80', '\x92', '\x07', '\x43', '\xF2', '\x7B', '\x39'}; + constexpr std::array source = CRYPT_NAME("태권소년\\태권소년", 0x4191BB5531FD3999ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[206] = []() -> EncryptedName<18, 0xBD2BA1C11B01E73BULL>& { - const std::array source = {'\xFC', '\x26', '\xB9', '\xB5', '\x7C', '\x1B', '\xED', '\x13', '\x67', '\x20', '\xC0', '\xA3', '\x6F', '\x1C', '\x91', '\x7B', '\x95', '\xE7'}; + constexpr std::array source = CRYPT_NAME("프리스트\\프리스트", 0xBD2BA1C11B01E73BULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[207] = []() -> EncryptedName<18, 0x4B755DB19953E311ULL>& { - const std::array source = {'\xD6', '\x22', '\xEB', '\x37', '\x0C', '\xE7', '\xB3', '\xE5', '\x4D', '\x24', '\x92', '\x21', '\x1F', '\xE0', '\xCF', '\x8D', '\xBF', '\xE3'}; + constexpr std::array source = CRYPT_NAME("프리스트\\프리스트", 0x4B755DB19953E311ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[208] = []() -> EncryptedName<14, 0xC9712D676B5B3943ULL>& { - const std::array source = {'\x80', '\xF3', '\xE1', '\xD3', '\xA7', '\xF7', '\x2D', '\x0A', '\x89', '\x83', '\xE3', '\xAB', '\xBD', '\x2D'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0xC9712D676B5B3943ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[209] = []() -> EncryptedName<10, 0xED15938D333D2DB9ULL>& { - const std::array source = {'\x09', '\xE6', '\x86', '\xD4', '\xD1', '\x23', '\xDE', '\x56', '\x5E', '\x2D'}; + constexpr std::array source = CRYPT_NAME("검사\\검사", 0xED15938D333D2DB9ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[210] = []() -> EncryptedName<14, 0xD98F5345098D630DULL>& { - const std::array source = {'\xB5', '\xD5', '\x34', '\xF4', '\xFE', '\xB4', '\xD3', '\x61', '\xBB', '\xDA', '\x70', '\xB2', '\xA2', '\x53'}; + constexpr std::array source = CRYPT_NAME("마법사\\마법사", 0xD98F5345098D630DULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[211] = []() -> EncryptedName<10, 0x9B0F234DEFDF7593ULL>& { - const std::array source = {'\x22', '\xB6', '\x63', '\x19', '\x11', '\x92', '\xCC', '\x27', '\x65', '\x75'}; + constexpr std::array source = CRYPT_NAME("궁수\\궁수", 0x9B0F234DEFDF7593ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[212] = []() -> EncryptedName<14, 0xFD69A9B3F311818DULL>& { - const std::array source = {'\x31', '\x3B', '\xD0', '\x04', '\x73', '\x73', '\x35', '\x41', '\x37', '\x40', '\xE6', '\x33', '\x69', '\xA9'}; + constexpr std::array source = CRYPT_NAME("성직자\\성직자", 0xFD69A9B3F311818DULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[213] = []() -> EncryptedName<10, 0x7F2DFFC1ABE91F2BULL>& { - const std::array source = {'\x90', '\xEC', '\x29', '\x65', '\x9D', '\x44', '\xDE', '\xBF', '\xE5', '\x1F'}; + constexpr std::array source = CRYPT_NAME("상인\\상인", 0x7F2DFFC1ABE91F2BULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[214] = []() -> EncryptedName<10, 0x1F1D51274373C1FDULL>& { - const std::array source = {'\x3A', '\x24', '\xB6', '\x8E', '\x7B', '\x96', '\xF8', '\xDA', '\x30', '\xC1'}; + constexpr std::array source = CRYPT_NAME("헌터\\헌터", 0x1F1D51274373C1FDULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[215] = []() -> EncryptedName<14, 0x5DAD2D25D9259B93ULL>& { - const std::array source = {'\x2D', '\x75', '\x99', '\x65', '\x98', '\xE8', '\xF1', '\xE3', '\x7D', '\x27', '\x99', '\x64', '\xE0', '\x2D'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0x5DAD2D25D9259B93ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[216] = []() -> EncryptedName<10, 0x6BF729E30729CF29ULL>& { - const std::array source = {'\x91', '\x36', '\xEC', '\xAE', '\xBF', '\x91', '\x0E', '\xAE', '\x80', '\xCF'}; + constexpr std::array source = CRYPT_NAME("몽크\\몽크", 0x6BF729E30729CF29ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[217] = []() -> EncryptedName<14, 0x3D371F5B0F7F9327ULL>& { - const std::array source = {'\x9B', '\x2F', '\xBF', '\xC3', '\x9A', '\xE9', '\x6B', '\x81', '\x9B', '\x53', '\xB3', '\xCE', '\xAD', '\x1F'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0x3D371F5B0F7F9327ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[218] = []() -> EncryptedName<10, 0x610F7DD1EFC1C91BULL>& { - const std::array source = {'\xAC', '\x07', '\x70', '\x38', '\x8D', '\xCA', '\xC1', '\xD0', '\xCC', '\xC9'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0x610F7DD1EFC1C91BULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[219] = []() -> EncryptedName<18, 0xC5995F4B9FE96B89ULL>& { - const std::array source = {'\x36', '\xC7', '\x58', '\x42', '\xF7', '\xA5', '\x22', '\x22', '\xD5', '\xD4', '\x45', '\x2E', '\x96', '\xE3', '\x63', '\x7E', '\x6E', '\x6B'}; + constexpr std::array source = CRYPT_NAME("연금술사\\연금술사", 0xC5995F4B9FE96B89ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[220] = []() -> EncryptedName<10, 0x097389157345A787ULL>& { - const std::array source = {'\x3E', '\x7E', '\xF0', '\x96', '\x49', '\x30', '\xAA', '\xBC', '\x62', '\xA7'}; + constexpr std::array source = CRYPT_NAME("바드\\바드", 0x097389157345A787ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[221] = []() -> EncryptedName<10, 0x5F93A1C3A7AD7537ULL>& { - const std::array source = {'\x8E', '\xDE', '\x65', '\x56', '\x9F', '\x18', '\x38', '\x97', '\xC6', '\x75'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0x5F93A1C3A7AD7537ULL); thread_local EncryptedName name(source); return name; }().Text(); shieldJobNames[222] = []() -> EncryptedName<14, 0x875FCDF1E7A1795FULL>& { - const std::array source = {'\x9C', '\xB3', '\x1B', '\x5F', '\x31', '\x17', '\x03', '\x44', '\x95', '\xC3', '\x19', '\x27', '\x2B', '\xCD'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0x875FCDF1E7A1795FULL); thread_local EncryptedName name(source); return name; }().Text(); @@ -6379,7 +6380,7 @@ void CSession::InitResourceNameTables() { shieldJobNames[75] = MagicianBodyPath3().Text(); shieldJobNames[76] = ArcherBodyPath3().Text(); shieldJobNames[77] = []() -> EncryptedName<14, 0x5FFD7FABB5D1EF57ULL>& { - const std::array source = {'\xEB', '\x55', '\x10', '\x42', '\x6B', '\xA5', '\xA1', '\xE3', '\xED', '\x2E', '\x26', '\x75', '\x71', '\x7F'}; + constexpr std::array source = CRYPT_NAME("성직자\\성직자", 0x5FFD7FABB5D1EF57ULL); thread_local EncryptedName name(source); return name; }().Text(); @@ -7118,7 +7119,7 @@ void CSession::LoadSessionTables() { Sub7739F0(); g_simpleStringMgr->Init(); - const std::array source = {'\xA5', '\xA8', '\x04', '\x07', '\x1C', '\xEB', '\x1E', '\xFA', '\xD7', '\x9A', '\x06', '\x1D', '\x08', '\xE9', '\x71'}; + constexpr std::array source = CRYPT_NAME("Ragnarok Setup", 0x9171997D6963C9F7ULL); thread_local EncryptedName setupName(source); if (HWND window = FindWindowA(nullptr, setupName.Text())) { ShowErrorDialog(LookupMessage(MSI_TAREN_LOGINREFUSE_FAIL_PASSWORD), 0); @@ -7406,1107 +7407,1107 @@ EncryptedName<14, 0x85FB93CF2F494179ULL>& AliteaBodyPath2(); void CSession::InitJobSpriteNames() { std::vector& jobSpriteNames = reinterpret_cast&>(this->m_jobSpriteNames); jobSpriteNames.resize(28053, []() -> EncryptedName<14, 0x114901C7E37F6D49ULL>& { - const std::array source = {'\x8A', '\xA7', '\xC5', '\x5B', '\x07', '\xDB', '\x15', '\xD2', '\x83', '\xD7', '\xC7', '\x23', '\x1D', '\x01'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0x114901C7E37F6D49ULL); thread_local EncryptedName name(source); return name; }().Text()); jobSpriteNames[0] = []() -> EncryptedName<14, 0xDF8117FF49CFF551ULL>& { - const std::array source = {'\x92', '\x3F', '\x75', '\xF1', '\x3F', '\xCD', '\xDD', '\x1C', '\x9B', '\x4F', '\x77', '\x89', '\x25', '\x17'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0xDF8117FF49CFF551ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[1] = []() -> EncryptedName<10, 0xADC51BF9C98B413DULL>& { - const std::array source = {'\x8D', '\x8A', '\x30', '\x2E', '\xA5', '\xAB', '\x0E', '\x16', '\xDA', '\x41'}; + constexpr std::array source = CRYPT_NAME("검사\\검사", 0xADC51BF9C98B413DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[2] = []() -> EncryptedName<14, 0x51BB39B763BBBD8DULL>& { - const std::array source = {'\x35', '\x0B', '\x02', '\x9E', '\x0C', '\xDE', '\xE7', '\xE9', '\x3B', '\x04', '\x46', '\xD8', '\x50', '\x39'}; + constexpr std::array source = CRYPT_NAME("마법사\\마법사", 0x51BB39B763BBBD8DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[3] = []() -> EncryptedName<10, 0x87E3D1C50D572DEFULL>& { - const std::array source = {'\x5E', '\xEE', '\xEB', '\xFB', '\x99', '\x60', '\x20', '\x3B', '\x19', '\x2D'}; + constexpr std::array source = CRYPT_NAME("궁수\\궁수", 0x87E3D1C50D572DEFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[4] = []() -> EncryptedName<14, 0x3FA3AFA7035DE3FFULL>& { - const std::array source = {'\x43', '\x59', '\x9C', '\xF4', '\x67', '\x75', '\xFF', '\x83', '\x45', '\x22', '\xAA', '\xC3', '\x7D', '\xAF'}; + constexpr std::array source = CRYPT_NAME("성직자\\성직자", 0x3FA3AFA7035DE3FFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[5] = []() -> EncryptedName<10, 0xDB27CB557D038759ULL>& { - const std::array source = {'\xE2', '\x74', '\xC3', '\xB3', '\x09', '\x70', '\xD4', '\x1B', '\x97', '\x87'}; + constexpr std::array source = CRYPT_NAME("상인\\상인", 0xDB27CB557D038759ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[6] = []() -> EncryptedName<10, 0xB3E307A5F753D5E3ULL>& { - const std::array source = {'\x56', '\x60', '\xE6', '\x38', '\xF9', '\xB2', '\x56', '\x06', '\x2C', '\xD5'}; + constexpr std::array source = CRYPT_NAME("도둑\\도둑", 0xB3E307A5F753D5E3ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[7] = []() -> EncryptedName<10, 0x192D654D29337BE5ULL>& { - const std::array source = {'\x54', '\x99', '\x88', '\xCE', '\x11', '\xD4', '\xCF', '\xA2', '\x02', '\x7B'}; + constexpr std::array source = CRYPT_NAME("기사\\기사", 0x192D654D29337BE5ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[8] = []() -> EncryptedName<18, 0xB7AFBD2FD9FD7501ULL>& { - const std::array source = {'\xC6', '\xB4', '\x45', '\x77', '\x92', '\x07', '\x69', '\x19', '\x5D', '\xB2', '\x3C', '\x61', '\x81', '\x00', '\x15', '\x71', '\xAF', '\x75'}; + constexpr std::array source = CRYPT_NAME("프리스트\\프리스트", 0xB7AFBD2FD9FD7501ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[9] = []() -> EncryptedName<14, 0x79E915E9AF6F55DDULL>& { - const std::array source = {'\x1D', '\xF2', '\xAF', '\x55', '\x5C', '\xF0', '\xB5', '\xB9', '\x7A', '\x95', '\x95', '\x1A', '\x0C', '\x15'}; + constexpr std::array source = CRYPT_NAME("위저드\\위저드", 0x79E915E9AF6F55DDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[10] = []() -> EncryptedName<14, 0x674D9F3975573D41ULL>& { - const std::array source = {'\x80', '\x9B', '\x94', '\xC3', '\x89', '\x67', '\x11', '\xA6', '\xE7', '\xFE', '\xE1', '\xC5', '\xC1', '\x9F'}; + constexpr std::array source = CRYPT_NAME("제철공\\제철공", 0x674D9F3975573D41ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[11] = []() -> EncryptedName<10, 0x6BDF334F2BFDAD51ULL>& { - const std::array source = {'\x96', '\x48', '\x38', '\xE6', '\x13', '\xF4', '\x3A', '\xAE', '\x9C', '\xAD'}; + constexpr std::array source = CRYPT_NAME("헌터\\헌터", 0x6BDF334F2BFDAD51ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[12] = []() -> EncryptedName<14, 0x136F2F9915D1DBCFULL>& { - const std::array source = {'\x71', '\x35', '\x6D', '\xA9', '\x24', '\xEA', '\x33', '\xAD', '\x21', '\x67', '\x6D', '\xA8', '\x5C', '\x2F'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0x136F2F9915D1DBCFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[13] = []() -> EncryptedName<28, 0x0B23D10F2F49D72BULL>& { - const std::array source = {'\xED', '\x33', '\x8D', '\xF5', '\xC9', '\x35', '\xE7', '\xD1', '\x74', '\x66', '\xAB', '\x94', '\xE8', '\x8D', '\xE5', '\xEF', '\xEF', '\x0D', '\x8F', '\xCB', '\xCB', '\x0B', '\x7C', '\xBA', '\xC9', '\x6C', '\xAE', '\x2F'}; + constexpr std::array source = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x0B23D10F2F49D72BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[14] = []() -> EncryptedName<22, 0x1767DDE18D779D8BULL>& { - const std::array source = {'\x4E', '\x34', '\xC0', '\x6A', '\x5D', '\x61', '\xA7', '\xDB', '\x3F', '\x68', '\x2B', '\x48', '\x48', '\x6A', '\x80', '\xAB', '\x37', '\x5D', '\xBB', '\x39', '\x14', '\xDD'}; + constexpr std::array source = CRYPT_NAME("크루세이더\\크루세이더", 0x1767DDE18D779D8BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[15] = []() -> EncryptedName<10, 0xC1BB8111EDD183E1ULL>& { - const std::array source = {'\x59', '\x7A', '\x14', '\x44', '\x4D', '\x39', '\x42', '\x04', '\x48', '\x83'}; + constexpr std::array source = CRYPT_NAME("몽크\\몽크", 0xC1BB8111EDD183E1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[16] = []() -> EncryptedName<14, 0xC5B1BBCD9BC9C997ULL>& { - const std::array source = {'\x2B', '\x75', '\x09', '\x57', '\x0C', '\x4D', '\xED', '\x79', '\x2B', '\x09', '\x05', '\x5A', '\x3B', '\xBB'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0xC5B1BBCD9BC9C997ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[17] = []() -> EncryptedName<10, 0x01CB4F1DF9D3F931ULL>& { - const std::array source = {'\x86', '\x37', '\x62', '\x2E', '\x41', '\xF8', '\x05', '\xB0', '\xE6', '\xF9'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0x01CB4F1DF9D3F931ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[18] = []() -> EncryptedName<18, 0x49D33529F1556333ULL>& { - const std::array source = {'\x8C', '\xCF', '\xE4', '\x2C', '\x95', '\xCF', '\x68', '\xAE', '\x6F', '\xDC', '\xF9', '\x40', '\xF4', '\x89', '\x29', '\xF2', '\xD4', '\x63'}; + constexpr std::array source = CRYPT_NAME("연금술사\\연금술사", 0x49D33529F1556333ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[19] = []() -> EncryptedName<10, 0x792FFD1325418FB5ULL>& { - const std::array source = {'\x0C', '\x56', '\xF4', '\xC0', '\x4F', '\x44', '\xF6', '\xCC', '\x50', '\x8F'}; + constexpr std::array source = CRYPT_NAME("바드\\바드", 0x792FFD1325418FB5ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[20] = []() -> EncryptedName<10, 0xF15F8785CDE369BFULL>& { - const std::array source = {'\x06', '\xC2', '\x2B', '\x3C', '\xD9', '\x3E', '\xF4', '\x39', '\x4E', '\x69'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0xF15F8785CDE369BFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[21] = []() -> EncryptedName<34, 0xE33F2FF779878559ULL>& { - const std::array source = {'\xE4', '\x40', '\x41', '\x9D', '\x33', '\xF5', '\xFA', '\x4A', '\xEE', '\x62', '\x3B', '\xC5', '\x37', '\xE3', '\x8B', '\x16', '\x05', '\x38', '\x42', '\xBF', '\x13', '\xEB', '\xE5', '\x26', '\xF0', '\x32', '\x60', '\xC5', '\x4B', '\xEF', '\xF3', '\x57', '\xAC', '\x85'}; + constexpr std::array source = CRYPT_NAME("신페코크루세이더\\신페코크루세이더", 0xE33F2FF779878559ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[23] = []() -> EncryptedName<14, 0xD5A78DB38D8DAFABULL>& { - const std::array source = {'\x68', '\x65', '\x37', '\x35', '\x73', '\x57', '\xFB', '\x16', '\x61', '\x15', '\x35', '\x4D', '\x69', '\x8D'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0xD5A78DB38D8DAFABULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[22] = []() -> EncryptedName<10, 0x0399459DAF454F0FULL>& { - const std::array source = {'\xBF', '\xAE', '\x8D', '\x0A', '\xC1', '\xF5', '\x78', '\xCB', '\xAA', '\x4F'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0x0399459DAF454F0FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[26] = []() -> EncryptedName<10, 0xFFABE3D5D1BBEF73ULL>& { - const std::array source = {'\xC3', '\x0E', '\x73', '\x74', '\x89', '\x53', '\x4A', '\x37', '\xD6', '\xEF'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0xFFABE3D5D1BBEF73ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[27] = []() -> EncryptedName<10, 0xA597A7E7492B39D5ULL>& { - const std::array source = {'\x65', '\xD8', '\xE3', '\xEC', '\xBB', '\x17', '\x76', '\x6D', '\x70', '\x39'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0xA597A7E7492B39D5ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[28] = []() -> EncryptedName<10, 0x0B8745519B1F95D7ULL>& { - const std::array source = {'\x67', '\x74', '\xD7', '\x3E', '\x0D', '\xF5', '\x66', '\xC3', '\x72', '\x95'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0x0B8745519B1F95D7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[29] = []() -> EncryptedName<10, 0xC70319B5EB61598FULL>& { - const std::array source = {'\x3F', '\xB8', '\xA9', '\x4E', '\xE9', '\xA9', '\xE2', '\x0F', '\x2A', '\x59'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0xC70319B5EB61598FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[30] = []() -> EncryptedName<10, 0x271B45771F83DD9FULL>& { - const std::array source = {'\x2F', '\x3C', '\x4B', '\xBA', '\x2B', '\xF5', '\xFA', '\xEF', '\x3A', '\xDD'}; + constexpr std::array source = CRYPT_NAME("결혼\\결혼", 0x271B45771F83DD9FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[24] = []() -> EncryptedName<10, 0x8783C33941E15117ULL>& { - const std::array source = {'\xA7', '\x96', '\x52', '\x8B', '\x65', '\x73', '\x44', '\x34', '\xDD', '\x51'}; + constexpr std::array source = CRYPT_NAME("건너\\건너", 0x8783C33941E15117ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[25] = []() -> EncryptedName<10, 0x0F61499B4973EB5DULL>& { - const std::array source = {'\xE9', '\x3A', '\xB3', '\x93', '\xC7', '\xFD', '\xB0', '\xCF', '\x87', '\xEB'}; + constexpr std::array source = CRYPT_NAME("닌자\\닌자", 0x0F61499B4973EB5DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[164] = []() -> EncryptedName<10, 0xB127A19D775BF751ULL>& { - const std::array source = {'\xE5', '\x26', '\x9B', '\xAD', '\xC1', '\x15', '\xF6', '\x71', '\x8B', '\xF7'}; + constexpr std::array source = CRYPT_NAME("닌자\\닌자", 0xB127A19D775BF751ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[167] = []() -> EncryptedName<18, 0xA31F69E7EFED01C9ULL>& { - const std::array source = {'\x75', '\xD3', '\x52', '\x00', '\x5F', '\xDC', '\xDB', '\x1C', '\x95', '\xBD', '\x3F', '\x50', '\x08', '\xD1', '\xAA', '\x67', '\x76', '\x01'}; + constexpr std::array source = CRYPT_NAME("소울링커\\소울링커", 0xA31F69E7EFED01C9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[165] = []() -> EncryptedName<10, 0xB7A96F8701BB4B6BULL>& { - const std::array source = {'\xDB', '\x8C', '\x08', '\xCB', '\xDB', '\xDF', '\x6E', '\x04', '\xA1', '\x4B'}; + constexpr std::array source = CRYPT_NAME("건너\\건너", 0xB7A96F8701BB4B6BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[166] = []() -> EncryptedName<10, 0x659975C121557D3DULL>& { - const std::array source = {'\x8D', '\xB6', '\xEE', '\xC6', '\x9D', '\xC5', '\x52', '\xDE', '\xDA', '\x7D'}; + constexpr std::array source = CRYPT_NAME("검사\\검사", 0x659975C121557D3DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[168] = []() -> EncryptedName<14, 0xBFF5C517A1A77F59ULL>& { - const std::array source = {'\x98', '\xD9', '\x64', '\x17', '\xA7', '\x3D', '\xA9', '\x7E', '\xFF', '\xBC', '\x11', '\x11', '\xEF', '\xC5'}; + constexpr std::array source = CRYPT_NAME("제철공\\제철공", 0xBFF5C517A1A77F59ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[169] = []() -> EncryptedName<10, 0xAD6153019F93A527ULL>& { - const std::array source = {'\x9C', '\x56', '\x53', '\x51', '\x5D', '\xE8', '\x92', '\x6D', '\xE9', '\xA5'}; + constexpr std::array source = CRYPT_NAME("상인\\상인", 0xAD6153019F93A527ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[170] = []() -> EncryptedName<14, 0x85E1F5A7A5755B7FULL>& { - const std::array source = {'\xBE', '\xFD', '\xC6', '\x72', '\x1F', '\x5A', '\xBD', '\x44', '\xD9', '\xE8', '\xA2', '\x1D', '\x08', '\xF5'}; + constexpr std::array source = CRYPT_NAME("제네릭\\제네릭", 0x85E1F5A7A5755B7FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[171] = []() -> EncryptedName<18, 0x454D31872BB3EDCBULL>& { - const std::array source = {'\x74', '\x41', '\x02', '\xF6', '\x3B', '\xCB', '\xF6', '\xA2', '\x97', '\x52', '\x1F', '\x9A', '\x5A', '\x8D', '\xB7', '\xFE', '\x2C', '\xED'}; + constexpr std::array source = CRYPT_NAME("연금술사\\연금술사", 0x454D31872BB3EDCBULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[172] = []() -> EncryptedName<10, 0x81F58DED5D470D01ULL>& { - const std::array source = {'\xB0', '\xCE', '\xFB', '\xAB', '\xB1', '\x3C', '\x36', '\x3D', '\xF7', '\x0D'}; + constexpr std::array source = CRYPT_NAME("궁수\\궁수", 0x81F58DED5D470D01ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[173] = []() -> EncryptedName<10, 0x5DE7712FAB613F75ULL>& { - const std::array source = {'\xC4', '\xF8', '\xDD', '\x11', '\x73', '\xC0', '\x20', '\xE1', '\xCF', '\x3F'}; + constexpr std::array source = CRYPT_NAME("권성\\권성", 0x5DE7712FAB613F75ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[174] = []() -> EncryptedName<14, 0x41CFCB831F6B6B91ULL>& { - const std::array source = {'\x52', '\xA1', '\xD1', '\xA7', '\x43', '\x11', '\x93', '\x82', '\x5B', '\xD1', '\xD3', '\xDF', '\x59', '\xCB'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0x41CFCB831F6B6B91ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[175] = []() -> EncryptedName<10, 0x3789496BE3E1D141ULL>& { - const std::array source = {'\xF9', '\x28', '\x24', '\x4A', '\x37', '\xF1', '\x70', '\xF2', '\xE8', '\xD1'}; + constexpr std::array source = CRYPT_NAME("몽크\\몽크", 0x3789496BE3E1D141ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[176] = []() -> EncryptedName<14, 0x0F97E779A933D917ULL>& { - const std::array source = {'\xAB', '\x63', '\xF2', '\x5E', '\xB9', '\x3D', '\xCB', '\xB3', '\xAD', '\x18', '\xC4', '\x69', '\xA3', '\xE7'}; + constexpr std::array source = CRYPT_NAME("성직자\\성직자", 0x0F97E779A933D917ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[177] = []() -> EncryptedName<10, 0xD1056FF94D4D2773ULL>& { - const std::array source = {'\xCE', '\x93', '\xFB', '\xBE', '\xA5', '\xD2', '\xB1', '\x67', '\x80', '\x27'}; + constexpr std::array source = CRYPT_NAME("슈라\\슈라", 0xD1056FF94D4D2773ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[178] = []() -> EncryptedName<14, 0x4331A17F33095FEBULL>& { - const std::array source = {'\x28', '\x95', '\xB3', '\x8B', '\xBF', '\x7B', '\x6D', '\x80', '\x21', '\xE5', '\xB1', '\xF3', '\xA5', '\xA1'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0x4331A17F33095FEBULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[179] = []() -> EncryptedName<18, 0x4B755DB19953E311ULL>& { - const std::array source = {'\xAF', '\x25', '\x96', '\x30', '\x0B', '\xAC', '\xC9', '\xB8', '\x4D', '\x5D', '\x95', '\x5C', '\x18', '\xE7', '\x84', '\xF7', '\xE2', '\xE3'}; + constexpr std::array source = CRYPT_NAME("아크비숍\\아크비숍", 0x4B755DB19953E311ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[180] = []() -> EncryptedName<14, 0xBD2BA1C11B01E73BULL>& { - const std::array source = {'\x83', '\x51', '\xB8', '\xE6', '\x7A', '\x46', '\x77', '\x05', '\x8D', '\x5E', '\xFC', '\xA0', '\x26', '\xA1'}; + constexpr std::array source = CRYPT_NAME("마법사\\마법사", 0xBD2BA1C11B01E73BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[181] = []() -> EncryptedName<14, 0xED15938D333D2DB9ULL>& { - const std::array source = {'\x05', '\x91', '\xFD', '\xFF', '\x4C', '\x65', '\x49', '\x51', '\x05', '\xED', '\xF1', '\xF2', '\x7B', '\x93'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0xED15938D333D2DB9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[182] = []() -> EncryptedName<14, 0xC9712D676B5B3943ULL>& { - const std::array source = {'\xFF', '\xEB', '\xE7', '\xC6', '\xD0', '\x82', '\x2D', '\x75', '\x91', '\x85', '\xF6', '\xDC', '\xC8', '\x2D'}; + constexpr std::array source = CRYPT_NAME("소서러\\소서러", 0xC9712D676B5B3943ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[183] = []() -> EncryptedName<10, 0x9B0F234DEFDF7593ULL>& { - const std::array source = {'\x2C', '\x83', '\x68', '\x20', '\x11', '\x9C', '\xF9', '\x2C', '\x5C', '\x75'}; + constexpr std::array source = CRYPT_NAME("워록\\워록", 0x9B0F234DEFDF7593ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[184] = []() -> EncryptedName<14, 0xD98F5345098D630DULL>& { - const std::array source = {'\xCD', '\xC4', '\x4D', '\xF3', '\xF0', '\xB6', '\xD3', '\x19', '\xAA', '\xA3', '\x77', '\xBC', '\xA0', '\x53'}; + constexpr std::array source = CRYPT_NAME("위저드\\위저드", 0xD98F5345098D630DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[185] = []() -> EncryptedName<14, 0x7F2DFFC1ABE91F2BULL>& { - const std::array source = {'\x97', '\xA3', '\x29', '\x67', '\x00', '\x09', '\x71', '\xC3', '\x97', '\xDF', '\x25', '\x6A', '\x37', '\xFF'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0x7F2DFFC1ABE91F2BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[186] = []() -> EncryptedName<14, 0xFD69A9B3F311818DULL>& { - const std::array source = {'\x4D', '\x26', '\xD1', '\x09', '\x06', '\x4C', '\x35', '\x3D', '\x2A', '\x41', '\xEB', '\x46', '\x56', '\xA9'}; + constexpr std::array source = CRYPT_NAME("위저드\\위저드", 0xFD69A9B3F311818DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[187] = []() -> EncryptedName<18, 0xD9452D81E5CD99C1ULL>& { - const std::array source = {'\x7E', '\x35', '\x7C', '\x38', '\x3D', '\xD7', '\xFE', '\x3E', '\x9D', '\x26', '\x61', '\x54', '\x5C', '\x91', '\xBF', '\x62', '\x26', '\x99'}; + constexpr std::array source = CRYPT_NAME("연금술사\\연금술사", 0xD9452D81E5CD99C1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[188] = []() -> EncryptedName<14, 0xADADEB4DF7813B55ULL>& { - const std::array source = {'\x94', '\x9D', '\x42', '\x41', '\xFD', '\x13', '\xF1', '\x6C', '\xF3', '\xF8', '\x37', '\x47', '\xB5', '\xEB'}; + constexpr std::array source = CRYPT_NAME("제철공\\제철공", 0xADADEB4DF7813B55ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[189] = []() -> EncryptedName<10, 0xB195637DAFCB0D59ULL>& { - const std::array source = {'\xE1', '\xF4', '\x0E', '\x06', '\x21', '\xDB', '\x6C', '\x74', '\xF0', '\x0D'}; + constexpr std::array source = CRYPT_NAME("몽크\\몽크", 0xB195637DAFCB0D59ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[190] = []() -> EncryptedName<14, 0xD7A749EB27D5BF6DULL>& { - const std::array source = {'\xD3', '\x51', '\x69', '\x9B', '\x56', '\x8C', '\xFB', '\x69', '\x83', '\x03', '\x69', '\x9A', '\x2E', '\x49'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0xD7A749EB27D5BF6DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[191] = []() -> EncryptedName<10, 0x9569C9C7E70909AFULL>& { - const std::array source = {'\x1A', '\xBC', '\xBC', '\x28', '\x9B', '\x7C', '\xDC', '\x20', '\x60', '\x09'}; + constexpr std::array source = CRYPT_NAME("도둑\\도둑", 0x9569C9C7E70909AFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[192] = []() -> EncryptedName<10, 0xB19D1FA9116F39D3ULL>& { - const std::array source = {'\x64', '\xF7', '\xDE', '\xC6', '\xF5', '\xA8', '\x53', '\x00', '\x04', '\x39'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0xB19D1FA9116F39D3ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[193] = []() -> EncryptedName<10, 0x4191BB5531FD3999ULL>& { - const std::array source = {'\x2E', '\xF7', '\x4C', '\xE6', '\x09', '\x0C', '\x5F', '\xF0', '\x4E', '\x39'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0x4191BB5531FD3999ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[194] = []() -> EncryptedName<10, 0xF715514F5961B75BULL>& { - const std::array source = {'\xEC', '\x79', '\xD0', '\x8E', '\x13', '\xE6', '\xDB', '\x46', '\x8C', '\xB7'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0xF715514F5961B75BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[195] = []() -> EncryptedName<14, 0x2F8B0F37118D157FULL>& { - const std::array source = {'\xC1', '\xFB', '\x31', '\xAD', '\x8A', '\xCA', '\xD7', '\x91', '\x91', '\xA9', '\x31', '\xAC', '\xF2', '\x0F'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0x2F8B0F37118D157FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[196] = []() -> EncryptedName<14, 0xAD075B8DB599F1CDULL>& { - const std::array source = {'\x73', '\x1F', '\x25', '\x09', '\x30', '\x9E', '\x5B', '\x13', '\x23', '\x4D', '\x25', '\x08', '\x48', '\x5B'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0xAD075B8DB599F1CDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[197] = []() -> EncryptedName<10, 0x2FE993D1DDE1F197ULL>& { - const std::array source = {'\x2E', '\x5A', '\x29', '\x2C', '\x8D', '\x2A', '\x42', '\xE7', '\x66', '\xF1'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0x2FE993D1DDE1F197ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[198] = []() -> EncryptedName<18, 0x39FF7FB50DEB998FULL>& { - const std::array source = {'\x36', '\x57', '\x56', '\xB7', '\x73', '\xD1', '\x48', '\x8B', '\xD3', '\x20', '\x25', '\xB0', '\x0F', '\xB9', '\x51', '\x8E', '\x3D', '\x99'}; + constexpr std::array source = CRYPT_NAME("민스트럴\\민스트럴", 0x39FF7FB50DEB998FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[199] = []() -> EncryptedName<10, 0xB7FD8F670FC7B96BULL>& { - const std::array source = {'\xD2', '\x60', '\x72', '\xEA', '\x3B', '\x36', '\x24', '\x02', '\x8E', '\xB9'}; + constexpr std::array source = CRYPT_NAME("바드\\바드", 0xB7FD8F670FC7B96BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[200] = []() -> EncryptedName<10, 0xE7978FB5A94DD7FDULL>& { - const std::array source = {'\x3A', '\x32', '\x88', '\x64', '\xE9', '\x48', '\x72', '\x22', '\x30', '\xD7'}; + constexpr std::array source = CRYPT_NAME("헌터\\헌터", 0xE7978FB5A94DD7FDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[201] = []() -> EncryptedName<10, 0x4941FD9F21BBB9FDULL>& { - const std::array source = {'\x44', '\x12', '\x73', '\xD0', '\xC3', '\x44', '\xEA', '\x81', '\x0C', '\xB9'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0x4941FD9F21BBB9FDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[202] = []() -> EncryptedName<10, 0x35E5656B5DEDCD75ULL>& { - const std::array source = {'\xCC', '\x66', '\x25', '\xAC', '\x37', '\xDC', '\x4E', '\xFD', '\x84', '\xCD'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0x35E5656B5DEDCD75ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[203] = []() -> EncryptedName<10, 0xF14F79170939C7F1ULL>& { - const std::array source = {'\x48', '\x1E', '\x8C', '\xEC', '\x4B', '\xC0', '\x96', '\x44', '\x14', '\xC7'}; + constexpr std::array source = CRYPT_NAME("바드\\바드", 0xF14F79170939C7F1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[204] = []() -> EncryptedName<10, 0xA5FD29D7AB6DC59FULL>& { - const std::array source = {'\x58', '\x20', '\xA8', '\x66', '\x8B', '\xEE', '\x18', '\x60', '\x52', '\xC5'}; + constexpr std::array source = CRYPT_NAME("헌터\\헌터", 0xA5FD29D7AB6DC59FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[205] = []() -> EncryptedName<18, 0xD97D5DBDBB2F2709ULL>& { - const std::array source = {'\xCC', '\xE5', '\x9E', '\x7C', '\x01', '\x8F', '\xCE', '\x3B', '\x55', '\xE2', '\xED', '\x0A', '\x7A', '\xE1', '\xAF', '\x6A', '\xEB', '\x27'}; + constexpr std::array source = CRYPT_NAME("태권소년\\태권소년", 0xD97D5DBDBB2F2709ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[206] = []() -> EncryptedName<18, 0xED796785D1DF137FULL>& { - const std::array source = {'\xB8', '\xD2', '\x67', '\x7F', '\x38', '\xDD', '\xBF', '\x43', '\x23', '\xD4', '\x1E', '\x69', '\x2B', '\xDA', '\xC3', '\x2B', '\xD1', '\x13'}; + constexpr std::array source = CRYPT_NAME("프리스트\\프리스트", 0xED796785D1DF137FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[207] = []() -> EncryptedName<18, 0x83EFBFBB37EDBDBDULL>& { - const std::array source = {'\x7A', '\x7C', '\x55', '\x99', '\x06', '\x05', '\x29', '\x2D', '\xE1', '\x7A', '\x2C', '\x8F', '\x15', '\x02', '\x55', '\x45', '\x13', '\xBD'}; + constexpr std::array source = CRYPT_NAME("프리스트\\프리스트", 0x83EFBFBB37EDBDBDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[208] = []() -> EncryptedName<14, 0xBF2B4B31397FF5A7ULL>& { - const std::array source = {'\x64', '\x3F', '\xC5', '\x81', '\xF1', '\x91', '\x77', '\x7C', '\x6D', '\x4F', '\xC7', '\xF9', '\xEB', '\x4B'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0xBF2B4B31397FF5A7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[209] = []() -> EncryptedName<10, 0xDD3913D5D7F97BE1ULL>& { - const std::array source = {'\x51', '\xB0', '\x42', '\x30', '\x89', '\xA3', '\xF2', '\x66', '\x06', '\x7B'}; + constexpr std::array source = CRYPT_NAME("검사\\검사", 0xDD3913D5D7F97BE1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[210] = []() -> EncryptedName<14, 0x050505679903579BULL>& { - const std::array source = {'\x23', '\xE1', '\xBA', '\x64', '\xDC', '\xE2', '\x59', '\xBD', '\x2D', '\xEE', '\xFE', '\x22', '\x80', '\x05'}; + constexpr std::array source = CRYPT_NAME("마법사\\마법사", 0x050505679903579BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[211] = []() -> EncryptedName<10, 0x03772763F96D9DA5ULL>& { - const std::array source = {'\x14', '\x5E', '\xD1', '\x0F', '\x3F', '\x96', '\xB4', '\xBF', '\x53', '\x9D'}; + constexpr std::array source = CRYPT_NAME("궁수\\궁수", 0x03772763F96D9DA5ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[212] = []() -> EncryptedName<14, 0x0B7109397F6B1387ULL>& { - const std::array source = {'\x3B', '\xA9', '\xAA', '\x88', '\xF9', '\xD3', '\x2D', '\xB7', '\x3D', '\xD2', '\x9C', '\xBF', '\xE3', '\x09'}; + constexpr std::array source = CRYPT_NAME("성직자\\성직자", 0x0B7109397F6B1387ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[213] = []() -> EncryptedName<10, 0x23BBD58F8B5FF5C9ULL>& { - const std::array source = {'\x72', '\x06', '\x9F', '\x45', '\xD3', '\x6E', '\x48', '\xE3', '\x07', '\xF5'}; + constexpr std::array source = CRYPT_NAME("상인\\상인", 0x23BBD58F8B5FF5C9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[214] = []() -> EncryptedName<10, 0xC517FB932D95BB6DULL>& { - const std::array source = {'\xAA', '\x5E', '\x50', '\xE0', '\xCF', '\x3C', '\xF2', '\x00', '\xA0', '\xBB'}; + constexpr std::array source = CRYPT_NAME("헌터\\헌터", 0xC517FB932D95BB6DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[215] = []() -> EncryptedName<14, 0x9949BFD527532943ULL>& { - const std::array source = {'\xFD', '\xC7', '\xEF', '\x9B', '\x68', '\x7A', '\x15', '\x27', '\xAD', '\x95', '\xEF', '\x9A', '\x10', '\xBF'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0x9949BFD527532943ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[216] = []() -> EncryptedName<10, 0xCD8F077123FB7D6FULL>& { - const std::array source = {'\xD7', '\x84', '\x3E', '\x8A', '\x2D', '\xBF', '\x76', '\x08', '\xC6', '\x7D'}; + constexpr std::array source = CRYPT_NAME("몽크\\몽크", 0xCD8F077123FB7D6FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[217] = []() -> EncryptedName<14, 0x13E33FA1A591AB67ULL>& { - const std::array source = {'\xDB', '\x17', '\x51', '\x69', '\x60', '\xC9', '\xBF', '\xAF', '\xDB', '\x6B', '\x5D', '\x64', '\x57', '\x3F'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0x13E33FA1A591AB67ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[218] = []() -> EncryptedName<10, 0x17A9E5BF39AD4737ULL>& { - const std::array source = {'\x80', '\x89', '\x1C', '\xEE', '\xE3', '\x52', '\x67', '\xA6', '\xE0', '\x47'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0x17A9E5BF39AD4737ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[219] = []() -> EncryptedName<18, 0x758F1D0B4F7705B9ULL>& { - const std::array source = {'\x06', '\xA9', '\xC6', '\x92', '\xB7', '\xE7', '\x34', '\x92', '\xE5', '\xBA', '\xDB', '\xFE', '\xD6', '\xA1', '\x75', '\xCE', '\x5E', '\x05'}; + constexpr std::array source = CRYPT_NAME("연금술사\\연금술사", 0x758F1D0B4F7705B9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[220] = []() -> EncryptedName<10, 0x891B232D09451965ULL>& { - const std::array source = {'\xDC', '\xC0', '\xF0', '\xEC', '\x71', '\x9A', '\xC2', '\x3C', '\x80', '\x19'}; + constexpr std::array source = CRYPT_NAME("바드\\바드", 0x891B232D09451965ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[221] = []() -> EncryptedName<10, 0x637B959D55771F69ULL>& { - const std::array source = {'\xD0', '\xB4', '\xBF', '\xA4', '\xC1', '\x2C', '\xD0', '\xAB', '\x98', '\x1F'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0x637B959D55771F69ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[222] = []() -> EncryptedName<14, 0xD1413DBB01CD8B51ULL>& { - const std::array source = {'\x92', '\x41', '\x77', '\xB9', '\x7B', '\xE7', '\x1D', '\x12', '\x9B', '\x31', '\x75', '\xC1', '\x61', '\x3D'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0xD1413DBB01CD8B51ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[223] = []() -> EncryptedName<10, 0x75ADC57D87EFBD8FULL>& { - const std::array source = {'\x30', '\x4B', '\x58', '\x48', '\x21', '\x7A', '\x5B', '\xC2', '\x40', '\xBD'}; + constexpr std::array source = CRYPT_NAME("워록\\워록", 0x75ADC57D87EFBD8FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[224] = []() -> EncryptedName<18, 0x2BAD156DE3E1F9D9ULL>& { - const std::array source = {'\x67', '\x3F', '\x24', '\x4A', '\xD7', '\xE4', '\x11', '\xD8', '\x85', '\x47', '\x27', '\x26', '\xC4', '\xAF', '\x5C', '\x97', '\x2A', '\xF9'}; + constexpr std::array source = CRYPT_NAME("아크비숍\\아크비숍", 0x2BAD156DE3E1F9D9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[225] = []() -> EncryptedName<14, 0xF161095D0DE18F95ULL>& { - const std::array source = {'\x2B', '\x61', '\x5D', '\xB1', '\xE0', '\xCC', '\x3D', '\x4F', '\x7B', '\x33', '\x5D', '\xB0', '\x98', '\x09'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0xF161095D0DE18F95ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[226] = []() -> EncryptedName<14, 0xEDC74F6D13DF71EFULL>& { - const std::array source = {'\x53', '\xA3', '\x63', '\xBE', '\xDA', '\xE0', '\x9B', '\x51', '\x3D', '\xCD', '\x72', '\xA4', '\xC2', '\x4F'}; + constexpr std::array source = CRYPT_NAME("소서러\\소서러", 0xEDC74F6D13DF71EFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[227] = []() -> EncryptedName<18, 0xA12DAB392545D72FULL>& { - const std::array source = {'\x96', '\x19', '\xF8', '\x9F', '\xFF', '\x05', '\x9A', '\x13', '\x73', '\x6E', '\x8B', '\x98', '\x83', '\x6D', '\x83', '\x16', '\x9D', '\xD7'}; + constexpr std::array source = CRYPT_NAME("민스트럴\\민스트럴", 0xA12DAB392545D72FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[228] = []() -> EncryptedName<10, 0x6BA1C1132F033B75ULL>& { - const std::array source = {'\xCC', '\x90', '\xCB', '\xDE', '\x4F', '\x78', '\x0A', '\xA3', '\x84', '\x3B'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0x6BA1C1132F033B75ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[229] = []() -> EncryptedName<10, 0x2FEB8739E5975BD1ULL>& { - const std::array source = {'\x6C', '\xEF', '\x21', '\x16', '\x65', '\x3A', '\x5F', '\x99', '\x22', '\x5B'}; + constexpr std::array source = CRYPT_NAME("슈라\\슈라", 0x2FEB8739E5975BD1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[230] = []() -> EncryptedName<14, 0x33133B977BCD03CDULL>& { - const std::array source = {'\x0C', '\xA5', '\x7E', '\xAC', '\x2F', '\x94', '\x4F', '\xF2', '\x6B', '\xB0', '\x1A', '\xC3', '\x38', '\x3B'}; + constexpr std::array source = CRYPT_NAME("제네릭\\제네릭", 0x33133B977BCD03CDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[232] = []() -> EncryptedName<10, 0x6FE153231D879777ULL>& { - const std::array source = {'\xC0', '\x59', '\x36', '\xCA', '\x7F', '\xE4', '\x2F', '\xDE', '\xA0', '\x97'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0x6FE153231D879777ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[233] = []() -> EncryptedName<14, 0x39A39F87DD5F535BULL>& { - const std::array source = {'\x98', '\x99', '\xE5', '\x65', '\x47', '\x45', '\xFF', '\xFA', '\x91', '\xE9', '\xE7', '\x1D', '\x5D', '\x9F'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0x39A39F87DD5F535BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[234] = []() -> EncryptedName<10, 0xEF6D1D893F2B2DC5ULL>& { - const std::array source = {'\x75', '\xE6', '\x90', '\xD8', '\xD5', '\xAD', '\xA6', '\x54', '\x22', '\x2D'}; + constexpr std::array source = CRYPT_NAME("검사\\검사", 0xEF6D1D893F2B2DC5ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[235] = []() -> EncryptedName<14, 0x234977DDB54BC71DULL>& { - const std::array source = {'\xA5', '\x71', '\xF2', '\x48', '\x66', '\x90', '\x15', '\x9B', '\xAB', '\x7E', '\xB6', '\x0E', '\x3A', '\x77'}; + constexpr std::array source = CRYPT_NAME("마법사\\마법사", 0x234977DDB54BC71DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[236] = []() -> EncryptedName<10, 0xE52DF30DCBAF7125ULL>& { - const std::array source = {'\x94', '\xB2', '\x13', '\x3D', '\x51', '\x42', '\xEE', '\x59', '\xD3', '\x71'}; + constexpr std::array source = CRYPT_NAME("궁수\\궁수", 0xE52DF30DCBAF7125ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[237] = []() -> EncryptedName<14, 0xCFF3899D95AF355FULL>& { - const std::array source = {'\xE3', '\x8F', '\x6E', '\x62', '\x5D', '\x53', '\xAF', '\x73', '\xE5', '\xF4', '\x58', '\x55', '\x47', '\x89'}; + constexpr std::array source = CRYPT_NAME("성직자\\성직자", 0xCFF3899D95AF355FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[238] = []() -> EncryptedName<10, 0x9171997D6963C9F7ULL>& { - const std::array source = {'\x4C', '\x3A', '\xA3', '\xA7', '\x21', '\x22', '\x82', '\x51', '\x39', '\xC9'}; + constexpr std::array source = CRYPT_NAME("상인\\상인", 0x9171997D6963C9F7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[239] = []() -> EncryptedName<10, 0x4F99DF03C3EF31B7ULL>& { - const std::array source = {'\x02', '\x84', '\x5A', '\x0C', '\x5F', '\x6A', '\x2C', '\xFA', '\x78', '\x31'}; + constexpr std::array source = CRYPT_NAME("도둑\\도둑", 0x4F99DF03C3EF31B7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[231] = []() -> EncryptedName<10, 0x8D1D0FF1AF2B13F7ULL>& { - const std::array source = {'\x42', '\xA6', '\x9E', '\x60', '\xAD', '\xBA', '\xA8', '\x38', '\x38', '\x13'}; + constexpr std::array source = CRYPT_NAME("도둑\\도둑", 0x8D1D0FF1AF2B13F7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[51] = []() -> EncryptedName<14, 0xB39FA7917BCFBB8DULL>& { - const std::array source = {'\x4E', '\x71', '\x75', '\xC3', '\x51', '\x7D', '\xC3', '\x70', '\x47', '\x01', '\x77', '\xBB', '\x4B', '\xA7'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0xB39FA7917BCFBB8DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[52] = []() -> EncryptedName<10, 0x2DCB7567394DC1ABULL>& { - const std::array source = {'\x1B', '\x0A', '\xF6', '\xDE', '\x3B', '\xC5', '\x00', '\x96', '\x4C', '\xC1'}; + constexpr std::array source = CRYPT_NAME("검사\\검사", 0x2DCB7567394DC1ABULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[53] = []() -> EncryptedName<14, 0x4F637DC51307B759ULL>& { - const std::array source = {'\xE1', '\x01', '\xBE', '\xEE', '\x7E', '\x9A', '\x3F', '\xF7', '\xEF', '\x0E', '\xFA', '\xA8', '\x22', '\x7D'}; + constexpr std::array source = CRYPT_NAME("마법사\\마법사", 0x4F637DC51307B759ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[54] = []() -> EncryptedName<10, 0x452FEF0D7FC95565ULL>& { - const std::array source = {'\xD4', '\x96', '\x75', '\x89', '\x51', '\x5E', '\xEC', '\xF9', '\x93', '\x55'}; + constexpr std::array source = CRYPT_NAME("궁수\\궁수", 0x452FEF0D7FC95565ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[55] = []() -> EncryptedName<14, 0x9FED7DA189490D5DULL>& { - const std::array source = {'\xE1', '\xB7', '\x88', '\x7E', '\x61', '\xA7', '\xB1', '\x23', '\xE7', '\xCC', '\xBE', '\x49', '\x7B', '\x7D'}; + constexpr std::array source = CRYPT_NAME("성직자\\성직자", 0x9FED7DA189490D5DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[56] = []() -> EncryptedName<10, 0x839B27DF8F5967B3ULL>& { - const std::array source = {'\x08', '\x94', '\x99', '\x41', '\x83', '\x9C', '\x68', '\x43', '\x7D', '\x67'}; + constexpr std::array source = CRYPT_NAME("상인\\상인", 0x839B27DF8F5967B3ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[57] = []() -> EncryptedName<10, 0xF3CB6F7711A71B6DULL>& { - const std::array source = {'\xD8', '\xAE', '\x12', '\xDE', '\x2B', '\xDA', '\x7E', '\x46', '\xA2', '\x1B'}; + constexpr std::array source = CRYPT_NAME("도둑\\도둑", 0xF3CB6F7711A71B6DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[58] = []() -> EncryptedName<10, 0x2D51E3B7236175EDULL>& { - const std::array source = {'\x5C', '\x97', '\xDA', '\xC4', '\xEB', '\x52', '\xB3', '\x96', '\x0A', '\x75'}; + constexpr std::array source = CRYPT_NAME("기사\\기사", 0x2D51E3B7236175EDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[59] = []() -> EncryptedName<18, 0x0F41EBBDA32D1B17ULL>& { - const std::array source = {'\xD0', '\xDA', '\x95', '\x0D', '\x00', '\x51', '\x87', '\xA1', '\x4B', '\xDC', '\xEC', '\x1B', '\x13', '\x56', '\xFB', '\xC9', '\xB9', '\x1B'}; + constexpr std::array source = CRYPT_NAME("프리스트\\프리스트", 0x0F41EBBDA32D1B17ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[60] = []() -> EncryptedName<14, 0xFBD599E117C547C1ULL>& { - const std::array source = {'\x01', '\xE0', '\x05', '\xED', '\x54', '\x7C', '\x89', '\x3B', '\x66', '\x87', '\x3F', '\xA2', '\x04', '\x99'}; + constexpr std::array source = CRYPT_NAME("위저드\\위저드", 0xFBD599E117C547C1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[61] = []() -> EncryptedName<14, 0x176F138D5DD7F365ULL>& { - const std::array source = {'\xA4', '\x55', '\x14', '\xEB', '\x3D', '\xEB', '\x33', '\xD6', '\xC3', '\x30', '\x61', '\xED', '\x75', '\x13'}; + constexpr std::array source = CRYPT_NAME("제철공\\제철공", 0x176F138D5DD7F365ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[62] = []() -> EncryptedName<10, 0x793F370985ED674FULL>& { - const std::array source = {'\x88', '\x82', '\x28', '\x48', '\x55', '\xF0', '\xDA', '\xBC', '\x82', '\x67'}; + constexpr std::array source = CRYPT_NAME("헌터\\헌터", 0x793F370985ED674FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[63] = []() -> EncryptedName<14, 0xE55723712993051DULL>& { - const std::array source = {'\xA3', '\xEB', '\x2F', '\x95', '\xCC', '\xE6', '\x0B', '\x5B', '\xF3', '\xB9', '\x2F', '\x94', '\xB4', '\x23'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0xE55723712993051DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[64] = []() -> EncryptedName<28, 0x7115D9F973F913C9ULL>& { - const std::array source = {'\x0F', '\xF7', '\x3D', '\xA9', '\x3F', '\x3D', '\xD1', '\xAB', '\x96', '\xA2', '\x1B', '\xC8', '\x1E', '\x85', '\xD3', '\x95', '\x0D', '\xC9', '\x3F', '\x97', '\x3D', '\x03', '\x4A', '\xC0', '\x2B', '\xA8', '\x1E', '\x73'}; + constexpr std::array source = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x7115D9F973F913C9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[65] = []() -> EncryptedName<22, 0xCB1D253B7FE1F563ULL>& { - const std::array source = {'\xA6', '\x5C', '\x56', '\x98', '\x87', '\x99', '\xDD', '\x07', '\xD7', '\x00', '\xBD', '\xBA', '\x92', '\x92', '\xFA', '\x77', '\xDF', '\x35', '\x2D', '\xCB', '\xCE', '\x25'}; + constexpr std::array source = CRYPT_NAME("크루세이더\\크루세이더", 0xCB1D253B7FE1F563ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[66] = []() -> EncryptedName<10, 0x7941D76335CFA14FULL>& { - const std::array source = {'\xF7', '\x58', '\x0A', '\x9C', '\x3F', '\x6F', '\xB8', '\xBC', '\xE6', '\xA1'}; + constexpr std::array source = CRYPT_NAME("몽크\\몽크", 0x7941D76335CFA14FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[67] = []() -> EncryptedName<14, 0x7321C3814F8799E1ULL>& { - const std::array source = {'\x5D', '\x25', '\x47', '\x83', '\x40', '\x35', '\x7D', '\xCF', '\x5D', '\x59', '\x4B', '\x8E', '\x77', '\xC3'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0x7321C3814F8799E1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[68] = []() -> EncryptedName<10, 0x7DE349D717D7F123ULL>& { - const std::array source = {'\x94', '\x3F', '\x66', '\xC0', '\x8B', '\xFE', '\x2D', '\xCC', '\xF4', '\xF1'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0x7DE349D717D7F123ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[69] = []() -> EncryptedName<18, 0x0F15B16B5BAFD57FULL>& { - const std::array source = {'\xC0', '\x79', '\x1E', '\x86', '\xD7', '\x4B', '\xAE', '\xE8', '\x23', '\x6A', '\x03', '\xEA', '\xB6', '\x0D', '\xEF', '\xB4', '\x98', '\xD5'}; + constexpr std::array source = CRYPT_NAME("연금술사\\연금술사", 0x0F15B16B5BAFD57FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[70] = []() -> EncryptedName<10, 0x9B5B959B954D9333ULL>& { - const std::array source = {'\x8A', '\x4A', '\xF8', '\x70', '\xC7', '\x2C', '\x82', '\x2E', '\xD6', '\x93'}; + constexpr std::array source = CRYPT_NAME("바드\\바드", 0x9B5B959B954D9333ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[71] = []() -> EncryptedName<10, 0x17FFC98B398FAF61ULL>& { - const std::array source = {'\xD8', '\x04', '\x47', '\xC8', '\xD7', '\x70', '\x54', '\xDF', '\x90', '\xAF'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0x17FFC98B398FAF61ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[72] = []() -> EncryptedName<34, 0x078143534999254DULL>& { - const std::array source = {'\xF0', '\xE0', '\x5F', '\xAD', '\x97', '\x99', '\x44', '\xAE', '\xFA', '\xC2', '\x25', '\xF5', '\x93', '\x8F', '\x35', '\xF2', '\x11', '\x98', '\x5C', '\x8F', '\xB7', '\x87', '\x5B', '\xC2', '\xE4', '\x92', '\x7E', '\xF5', '\xEF', '\x83', '\x4D', '\xB3', '\xB8', '\x25'}; + constexpr std::array source = CRYPT_NAME("신페코크루세이더\\신페코크루세이더", 0x078143534999254DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[73] = []() -> EncryptedName<14, 0xAFA5617F178B6185ULL>& { - const std::array source = {'\x46', '\xAB', '\x31', '\xAF', '\xBF', '\xBB', '\xF9', '\x6C', '\x4F', '\xDB', '\x33', '\xD7', '\xA5', '\x61'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0xAFA5617F178B6185ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[74] = []() -> EncryptedName<10, 0xE50B2935073DD3E9ULL>& { - const std::array source = {'\x59', '\x18', '\x86', '\xE0', '\x69', '\x99', '\xC0', '\x5E', '\x0E', '\xD3'}; + constexpr std::array source = CRYPT_NAME("검사\\검사", 0xE50B2935073DD3E9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[75] = []() -> EncryptedName<14, 0x3F5315DFE32B4FAFULL>& { - const std::array source = {'\x17', '\xF9', '\x92', '\x1E', '\x64', '\xF2', '\x0F', '\x87', '\x19', '\xF6', '\xD6', '\x58', '\x38', '\x15'}; + constexpr std::array source = CRYPT_NAME("마법사\\마법사", 0x3F5315DFE32B4FAFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[76] = []() -> EncryptedName<10, 0x33832D4D3FDFBDBFULL>& { - const std::array source = {'\x0E', '\x7E', '\x63', '\xC9', '\x11', '\x9C', '\x40', '\x8F', '\x49', '\xBD'}; + constexpr std::array source = CRYPT_NAME("궁수\\궁수", 0x33832D4D3FDFBDBFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[77] = []() -> EncryptedName<14, 0x7D750DADBDE9C3F1ULL>& { - const std::array source = {'\x4D', '\x79', '\x28', '\x4A', '\x6D', '\xD7', '\x29', '\xC1', '\x4B', '\x02', '\x1E', '\x7D', '\x77', '\x0D'}; + constexpr std::array source = CRYPT_NAME("성직자\\성직자", 0x7D750DADBDE9C3F1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[78] = []() -> EncryptedName<10, 0xED5143E7C1B39315ULL>& { - const std::array source = {'\xAE', '\x60', '\x73', '\x0F', '\xBB', '\xF8', '\xA2', '\x2D', '\xDB', '\x93'}; + constexpr std::array source = CRYPT_NAME("상인\\상인", 0xED5143E7C1B39315ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[79] = []() -> EncryptedName<10, 0xFF7D83CB791339D9ULL>& { - const std::array source = {'\x6C', '\x8C', '\xA6', '\xB6', '\x97', '\x36', '\xC8', '\x4A', '\x16', '\x39'}; + constexpr std::array source = CRYPT_NAME("도둑\\도둑", 0xFF7D83CB791339D9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[80] = []() -> EncryptedName<10, 0x31956551B311FD95ULL>& { - const std::array source = {'\x24', '\x1F', '\xAA', '\x54', '\x0D', '\xD4', '\x77', '\x8A', '\x72', '\xFD'}; + constexpr std::array source = CRYPT_NAME("기사\\기사", 0x31956551B311FD95ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[81] = []() -> EncryptedName<18, 0x393D916561BDC391ULL>& { - const std::array source = {'\x56', '\x02', '\x05', '\xCF', '\xD8', '\x2B', '\xFB', '\x97', '\xCD', '\x04', '\x7C', '\xD9', '\xCB', '\x2C', '\x87', '\xFF', '\x3F', '\xC3'}; + constexpr std::array source = CRYPT_NAME("프리스트\\프리스트", 0x393D916561BDC391ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[82] = []() -> EncryptedName<14, 0x955D4DF94DE9BB07ULL>& { - const std::array source = {'\xC7', '\x1C', '\x29', '\xB7', '\x4C', '\xA8', '\x01', '\x55', '\xA0', '\x7B', '\x13', '\xF8', '\x1C', '\x4D'}; + constexpr std::array source = CRYPT_NAME("위저드\\위저드", 0x955D4DF94DE9BB07ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[83] = []() -> EncryptedName<14, 0x8741152D8FB34B4FULL>& { - const std::array source = {'\x8E', '\xED', '\x70', '\x39', '\x9D', '\xED', '\x1D', '\x46', '\xE9', '\x88', '\x05', '\x3F', '\xD5', '\x15'}; + constexpr std::array source = CRYPT_NAME("제철공\\제철공", 0x8741152D8FB34B4FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[84] = []() -> EncryptedName<10, 0xB739073FE921AD6FULL>& { - const std::array source = {'\xA8', '\x48', '\xE4', '\x24', '\x63', '\xC0', '\xDC', '\x72', '\xA2', '\xAD'}; + constexpr std::array source = CRYPT_NAME("헌터\\헌터", 0xB739073FE921AD6FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[85] = []() -> EncryptedName<14, 0xC399B7091589B50BULL>& { - const std::array source = {'\xB5', '\x5B', '\x35', '\xA9', '\xB4', '\x72', '\xC5', '\x7D', '\xE5', '\x09', '\x35', '\xA8', '\xCC', '\xB7'}; + constexpr std::array source = CRYPT_NAME("어세신\\어세신", 0xC399B7091589B50BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[86] = []() -> EncryptedName<28, 0x7FC1015DFFCF6D19ULL>& { - const std::array source = {'\xDF', '\x89', '\x0B', '\x25', '\x9B', '\xE5', '\x05', '\xA5', '\x46', '\xDC', '\x2D', '\x44', '\xBA', '\x5D', '\x07', '\x9B', '\xDD', '\xB7', '\x09', '\x1B', '\x99', '\xDB', '\x9E', '\xCE', '\xFB', '\xD6', '\x28', '\xFF'}; + constexpr std::array source = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x7FC1015DFFCF6D19ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[87] = []() -> EncryptedName<22, 0x0753A7E1EFA9E139ULL>& { - const std::array source = {'\xFC', '\x48', '\x1E', '\x08', '\x5D', '\x1B', '\x93', '\xCB', '\x8D', '\x14', '\xF5', '\x2A', '\x48', '\x10', '\xB4', '\xBB', '\x85', '\x21', '\x65', '\x5B', '\x14', '\xA7'}; + constexpr std::array source = CRYPT_NAME("크루세이더\\크루세이더", 0x0753A7E1EFA9E139ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[88] = []() -> EncryptedName<10, 0x7FCD77F9C7CBD14DULL>& { - const std::array source = {'\xF5', '\x28', '\x0E', '\x6E', '\xA5', '\xCF', '\x34', '\xBA', '\xE4', '\xD1'}; + constexpr std::array source = CRYPT_NAME("몽크\\몽크", 0x7FCD77F9C7CBD14DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[89] = []() -> EncryptedName<14, 0xCB3FBD4183DB8323ULL>& { - const std::array source = {'\x9F', '\x3F', '\x1B', '\x4F', '\x80', '\x4B', '\x63', '\x77', '\x9F', '\x43', '\x17', '\x42', '\xB7', '\xBD'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0xCB3FBD4183DB8323ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[90] = []() -> EncryptedName<10, 0x3B915119EFD523EFULL>& { - const std::array source = {'\x58', '\xED', '\x64', '\x38', '\x45', '\xE6', '\x5F', '\x8A', '\x38', '\x23'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0x3B915119EFD523EFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[91] = []() -> EncryptedName<18, 0x5B8F49AF09390D1BULL>& { - const std::array source = {'\xA4', '\xA1', '\x88', '\xD4', '\x13', '\xB3', '\x34', '\xBC', '\x47', '\xB2', '\x95', '\xB8', '\x72', '\xF5', '\x75', '\xE0', '\xFC', '\x0D'}; + constexpr std::array source = CRYPT_NAME("연금술사\\연금술사", 0x5B8F49AF09390D1BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[92] = []() -> EncryptedName<10, 0x3F557BE333F95F6DULL>& { - const std::array source = {'\xD4', '\x86', '\x4C', '\xD6', '\xBF', '\xC2', '\x8C', '\x8A', '\x88', '\x5F'}; + constexpr std::array source = CRYPT_NAME("바드\\바드", 0x3F557BE333F95F6DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[93] = []() -> EncryptedName<10, 0x474DC581D5E98357ULL>& { - const std::array source = {'\xEE', '\x28', '\x21', '\x24', '\xDD', '\x7C', '\xE6', '\x8F', '\xA6', '\x83'}; + constexpr std::array source = CRYPT_NAME("무희\\무희", 0x474DC581D5E98357ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[94] = []() -> EncryptedName<34, 0x01FF9313695DD9DFULL>& { - const std::array source = {'\x6E', '\x61', '\x9B', '\x8D', '\xD7', '\x49', '\x3A', '\xA8', '\x68', '\x3E', '\xE1', '\xD5', '\xD3', '\x5F', '\x4B', '\xF4', '\x83', '\x68', '\xE5', '\xAF', '\xF7', '\x57', '\x25', '\xC4', '\x76', '\x6E', '\xBA', '\xD5', '\xAF', '\x53', '\x33', '\xB5', '\x2A', '\xD9'}; + constexpr std::array source = CRYPT_NAME("구페코크루세이더\\구페코크루세이더", 0x01FF9313695DD9DFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[95] = []() -> EncryptedName<14, 0x1BF915E1F37DFDFDULL>& { - const std::array source = {'\x3E', '\x37', '\xC7', '\x4B', '\x21', '\xCF', '\xA5', '\xD8', '\x37', '\x47', '\xC5', '\x33', '\x3B', '\x15'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0x1BF915E1F37DFDFDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[96] = []() -> EncryptedName<18, 0x49C3759B77DBD3C1ULL>& { - const std::array source = {'\x04', '\x11', '\x6A', '\xB0', '\x27', '\xA7', '\x70', '\xAB', '\x9D', '\x16', '\x19', '\xC6', '\x5C', '\xC9', '\x11', '\xFA', '\x23', '\xD3'}; + constexpr std::array source = CRYPT_NAME("태권소년\\태권소년", 0x49C3759B77DBD3C1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[97] = []() -> EncryptedName<10, 0x6DED3DD1CF75AD9BULL>& { - const std::array source = {'\x2A', '\x6A', '\xC9', '\x75', '\x8D', '\x8C', '\x2A', '\xD1', '\x21', '\xAD'}; + constexpr std::array source = CRYPT_NAME("권성\\권성", 0x6DED3DD1CF75AD9BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[98] = []() -> EncryptedName<10, 0x91E147EBBD47C39FULL>& { - const std::array source = {'\x2E', '\x04', '\xFB', '\x07', '\xB7', '\xF6', '\x26', '\x2D', '\x25', '\xC3'}; + constexpr std::array source = CRYPT_NAME("권성\\권성", 0x91E147EBBD47C39FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[99] = []() -> EncryptedName<18, 0xD1538513DF975701ULL>& { - const std::array source = {'\xBD', '\x85', '\x28', '\x30', '\xAB', '\x30', '\x97', '\x6E', '\x5D', '\xEB', '\x45', '\x60', '\xFC', '\x3D', '\xE6', '\x15', '\xBE', '\x57'}; + constexpr std::array source = CRYPT_NAME("소울링커\\소울링커", 0xD1538513DF975701ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[100] = []() -> EncryptedName<14, 0xA1A55B4D1597EDD3ULL>& { - const std::array source = {'\x6F', '\x57', '\x56', '\xE2', '\x8D', '\x81', '\xF9', '\x1D', '\x69', '\x2C', '\x60', '\xD5', '\x97', '\x5B'}; + constexpr std::array source = CRYPT_NAME("성직자\\성직자", 0xA1A55B4D1597EDD3ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[101] = []() -> EncryptedName<10, 0x4F1791FB1503C713ULL>& { - const std::array source = {'\xA2', '\x25', '\xB8', '\xF2', '\xA7', '\x20', '\xF5', '\xF4', '\xF4', '\xC7'}; + constexpr std::array source = CRYPT_NAME("기사\\기사", 0x4F1791FB1503C713ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[102] = []() -> EncryptedName<14, 0x7D993F650D2785FFULL>& { - const std::array source = {'\x43', '\x39', '\xE7', '\xC1', '\xA4', '\xC9', '\xC5', '\xC1', '\x43', '\x45', '\xEB', '\xCC', '\x93', '\x3F'}; + constexpr std::array source = CRYPT_NAME("세이지\\세이지", 0x7D993F650D2785FFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[104] = []() -> EncryptedName<18, 0x61FF87ED7BF39BE1ULL>& { - const std::array source = {'\x56', '\x72', '\x40', '\xD1', '\x2D', '\x4B', '\x39', '\xCF', '\xBD', '\x2C', '\x1A', '\xC8', '\x47', '\x47', '\x33', '\xA7', '\x4F', '\x9B'}; + constexpr std::array source = CRYPT_NAME("룬나이트\\룬나이트", 0x61FF87ED7BF39BE1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[110] = []() -> EncryptedName<18, 0x151F77EBEBBB2147ULL>& { - const std::array source = {'\xF0', '\xC8', '\x08', '\x41', '\x2B', '\xBB', '\xD9', '\xBB', '\x1B', '\x96', '\x52', '\x58', '\x41', '\xB7', '\xD3', '\xD3', '\xE9', '\x21'}; + constexpr std::array source = CRYPT_NAME("룬나이트\\룬나이트", 0x151F77EBEBBB2147ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[130] = []() -> EncryptedName<36, 0x2D394DBD0F332733ULL>& { - const std::array source = {'\xF5', '\xC3', '\xF7', '\xD5', '\x7B', '\xA9', '\xFD', '\xF7', '\x6C', '\x90', '\xDA', '\xBC', '\x17', '\x8D', '\xF5', '\xEB', '\x9D', '\x7B', '\xF5', '\xEB', '\x79', '\x97', '\xFF', '\xC9', '\xF7', '\xFD', '\x6C', '\xB8', '\x54', '\xFE', '\x93', '\xED', '\xFF', '\xE1', '\x9D', '\x0F'}; + constexpr std::array source = CRYPT_NAME("페코페코_룬나이트\\페코페코_룬나이트", 0x2D394DBD0F332733ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[131] = []() -> EncryptedName<36, 0x69D345DB950F336DULL>& { - const std::array source = {'\xAB', '\xD7', '\xCB', '\x4F', '\x1D', '\xA1', '\x17', '\xB3', '\x32', '\x84', '\xE6', '\x26', '\x71', '\x85', '\x1F', '\xAF', '\xC3', '\x6F', '\xC9', '\x71', '\x1F', '\x9F', '\x15', '\x8D', '\xA9', '\xE9', '\x50', '\x22', '\x32', '\xF6', '\x79', '\xA9', '\xA1', '\xF5', '\xA1', '\x95'}; + constexpr std::array source = CRYPT_NAME("페코페코_룬나이트\\페코페코_룬나이트", 0x69D345DB950F336DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[159] = []() -> EncryptedName<36, 0xC7912587FFF31B71ULL>& { - const std::array source = {'\xB7', '\xFF', '\x37', '\x25', '\x41', '\xC1', '\x55', '\x1D', '\x2E', '\xAC', '\x1A', '\x4C', '\x2D', '\xE5', '\x5D', '\x01', '\xDF', '\x47', '\x35', '\x1B', '\x43', '\xFF', '\x57', '\x23', '\xB5', '\xC1', '\xAC', '\x48', '\x6E', '\x96', '\x3B', '\x07', '\xBD', '\xDD', '\x5D', '\xFF'}; + constexpr std::array source = CRYPT_NAME("페코페코_룬나이트\\페코페코_룬나이트", 0xC7912587FFF31B71ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[138] = []() -> EncryptedName<36, 0x2D3B15774149D5DDULL>& { - const std::array source = {'\x1B', '\x31', '\x8D', '\x9B', '\xB1', '\xF1', '\xFF', '\xF7', '\x82', '\x62', '\xA0', '\xF2', '\xDD', '\xD5', '\xF7', '\xEB', '\x73', '\x89', '\x8F', '\xA5', '\xB3', '\xCF', '\xFD', '\xC9', '\x19', '\x0F', '\x16', '\xF6', '\x9E', '\xA6', '\x91', '\xED', '\x11', '\x13', '\xE7', '\x41'}; + constexpr std::array source = CRYPT_NAME("페코페코_룬나이트\\페코페코_룬나이트", 0x2D3B15774149D5DDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[139] = []() -> EncryptedName<36, 0x9B17C9EFDBB39F2FULL>& { - const std::array source = {'\xE9', '\x7B', '\x77', '\x01', '\x29', '\x2D', '\xD3', '\x41', '\x70', '\x28', '\x5A', '\x68', '\x45', '\x09', '\xDB', '\x5D', '\x81', '\xC3', '\x75', '\x3F', '\x2B', '\x13', '\xD1', '\x7F', '\xEB', '\x45', '\xEC', '\x6C', '\x06', '\x7A', '\xBD', '\x5B', '\xE3', '\x59', '\x1D', '\xDB'}; + constexpr std::array source = CRYPT_NAME("페코페코_룬나이트\\페코페코_룬나이트", 0x9B17C9EFDBB39F2FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[140] = []() -> EncryptedName<36, 0x0BEB63A5C905B3A7ULL>& { - const std::array source = {'\x61', '\x57', '\xC1', '\x13', '\x63', '\x87', '\x2F', '\xD1', '\xF8', '\x04', '\xEC', '\x7A', '\x0F', '\xA3', '\x27', '\xCD', '\x09', '\xEF', '\xC3', '\x2D', '\x61', '\xB9', '\x2D', '\xEF', '\x63', '\x69', '\x5A', '\x7E', '\x4C', '\xD0', '\x41', '\xCB', '\x6B', '\x75', '\xAB', '\xC9'}; + constexpr std::array source = CRYPT_NAME("페코페코_룬나이트\\페코페코_룬나이트", 0x0BEB63A5C905B3A7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[141] = []() -> EncryptedName<36, 0x8B3FEB5B8BD5C3C3ULL>& { - const std::array source = {'\x05', '\x27', '\x11', '\x51', '\x9D', '\x0F', '\xFB', '\x51', '\x9C', '\x74', '\x3C', '\x38', '\xF1', '\x2B', '\xF3', '\x4D', '\x6D', '\x9F', '\x13', '\x6F', '\x9F', '\x31', '\xF9', '\x6F', '\x07', '\x19', '\x8A', '\x3C', '\xB2', '\x58', '\x95', '\x4B', '\x0F', '\x05', '\x7B', '\x8B'}; + constexpr std::array source = CRYPT_NAME("페코페코_룬나이트\\페코페코_룬나이트", 0x8B3FEB5B8BD5C3C3ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[142] = []() -> EncryptedName<36, 0x8F1B5BFD5F6175B5ULL>& { - const std::array source = {'\x73', '\x91', '\xA5', '\x85', '\x3B', '\xBF', '\xDF', '\x55', '\xEA', '\xC2', '\x88', '\xEC', '\x57', '\x9B', '\xD7', '\x49', '\x1B', '\x29', '\xA7', '\xBB', '\x39', '\x81', '\xDD', '\x6B', '\x71', '\xAF', '\x3E', '\xE8', '\x14', '\xE8', '\xB1', '\x4F', '\x79', '\xB3', '\xCF', '\x5F'}; + constexpr std::array source = CRYPT_NAME("페코페코_룬나이트\\페코페코_룬나이트", 0x8F1B5BFD5F6175B5ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[143] = []() -> EncryptedName<36, 0x078333BB9725B7C9ULL>& { - const std::array source = {'\x0F', '\x53', '\xE1', '\x4D', '\x7D', '\xD7', '\x47', '\xDD', '\x96', '\x00', '\xCC', '\x24', '\x11', '\xF3', '\x4F', '\xC1', '\x67', '\xEB', '\xE3', '\x73', '\x7F', '\xE9', '\x45', '\xE3', '\x0D', '\x6D', '\x7A', '\x20', '\x52', '\x80', '\x29', '\xC7', '\x05', '\x71', '\x8B', '\x97'}; + constexpr std::array source = CRYPT_NAME("페코페코_룬나이트\\페코페코_룬나이트", 0x078333BB9725B7C9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[144] = []() -> EncryptedName<36, 0xF5657D1F3DE5CDC7ULL>& { - const std::array source = {'\x01', '\x29', '\x21', '\xE7', '\xD9', '\x99', '\xA1', '\x2F', '\x98', '\x7A', '\x0C', '\x8E', '\xB5', '\xBD', '\xA9', '\x33', '\x69', '\x91', '\x23', '\xD9', '\xDB', '\xA7', '\xA3', '\x11', '\x03', '\x17', '\xBA', '\x8A', '\xF6', '\xCE', '\xCF', '\x35', '\x0B', '\x0B', '\x4B', '\x3D'}; + constexpr std::array source = CRYPT_NAME("페코페코_룬나이트\\페코페코_룬나이트", 0xF5657D1F3DE5CDC7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[145] = []() -> EncryptedName<36, 0x69FD1D9733D3CFC1ULL>& { - const std::array source = {'\x07', '\x2B', '\x17', '\xE9', '\x51', '\xF9', '\x39', '\xB3', '\x9E', '\x78', '\x3A', '\x80', '\x3D', '\xDD', '\x31', '\xAF', '\x6F', '\x93', '\x15', '\xD7', '\x53', '\xC7', '\x3B', '\x8D', '\x05', '\x15', '\x8C', '\x84', '\x7E', '\xAE', '\x57', '\xA9', '\x0D', '\x09', '\x7D', '\x33'}; + constexpr std::array source = CRYPT_NAME("페코페코_룬나이트\\페코페코_룬나이트", 0x69FD1D9733D3CFC1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[107] = []() -> EncryptedName<18, 0xF7530137154D8FE5ULL>& { - const std::array source = {'\x5B', '\x49', '\x88', '\xBC', '\x8D', '\xF0', '\xEF', '\x04', '\xB9', '\x31', '\x8B', '\xD0', '\x9E', '\xBB', '\xA2', '\x4B', '\x16', '\x8F'}; + constexpr std::array source = CRYPT_NAME("아크비숍\\아크비숍", 0xF7530137154D8FE5ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[113] = []() -> EncryptedName<18, 0x8B65CD61012B5931ULL>& { - const std::array source = {'\x8F', '\x9F', '\xEE', '\xA8', '\xDB', '\x3C', '\xD9', '\x78', '\x6D', '\xE7', '\xED', '\xC4', '\xC8', '\x77', '\x94', '\x37', '\xC2', '\x59'}; + constexpr std::array source = CRYPT_NAME("아크비숍\\아크비숍", 0x8B65CD61012B5931ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[105] = []() -> EncryptedName<10, 0x17359BF953C367B3ULL>& { - const std::array source = {'\x0C', '\x91', '\x74', '\x9C', '\xA5', '\x24', '\xC3', '\xA0', '\x7C', '\x67'}; + constexpr std::array source = CRYPT_NAME("워록\\워록", 0x17359BF953C367B3ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[111] = []() -> EncryptedName<10, 0x2FF3C5036D070127ULL>& { - const std::array source = {'\x98', '\xF7', '\xB0', '\xA2', '\x5F', '\x7A', '\x05', '\x98', '\xE8', '\x01'}; + constexpr std::array source = CRYPT_NAME("워록\\워록", 0x2FF3C5036D070127ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[108] = []() -> EncryptedName<14, 0x93E7A3A1F587CDC5ULL>& { - const std::array source = {'\x7C', '\x01', '\x43', '\x3C', '\x15', '\x73', '\xBB', '\x2A', '\x09', '\x09', '\x4E', '\x41', '\x71', '\xA3'}; + constexpr std::array source = CRYPT_NAME("미케닉\\미케닉", 0x93E7A3A1F587CDC5ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[114] = []() -> EncryptedName<14, 0xC52FB5FBB94FF917ULL>& { - const std::array source = {'\xAE', '\x35', '\x8B', '\x70', '\x4F', '\x65', '\x73', '\x7C', '\xDB', '\x3D', '\x86', '\x0D', '\x2B', '\xB5'}; + constexpr std::array source = CRYPT_NAME("미케닉\\미케닉", 0xC52FB5FBB94FF917ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[136] = []() -> EncryptedName<18, 0x812BE72BCD5707B7ULL>& { - const std::array source = {'\x0F', '\xB1', '\xE2', '\x78', '\x9A', '\x05', '\x95', '\x6F', '\xEB', '\xBF', '\xE1', '\x78', '\x9E', '\x56', '\xC9', '\x3F', '\x59', '\x07'}; + constexpr std::array source = CRYPT_NAME("마도기어\\마도기어", 0x812BE72BCD5707B7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[137] = []() -> EncryptedName<18, 0x59278F63D79F3DA1ULL>& { - const std::array source = {'\x19', '\x8B', '\x2A', '\x62', '\xD2', '\x6D', '\x99', '\xB7', '\xFD', '\x85', '\x29', '\x62', '\xD6', '\x3E', '\xC5', '\xE7', '\x4F', '\x3D'}; + constexpr std::array source = CRYPT_NAME("마도기어\\마도기어", 0x59278F63D79F3DA1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[162] = []() -> EncryptedName<18, 0x1D6D75EDE7CD311FULL>& { - const std::array source = {'\xA7', '\x87', '\x78', '\x52', '\x5C', '\x97', '\xD3', '\xF3', '\x43', '\x89', '\x7B', '\x52', '\x58', '\xC4', '\x8F', '\xA3', '\xF1', '\x31'}; + constexpr std::array source = CRYPT_NAME("마도기어\\마도기어", 0x1D6D75EDE7CD311FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[106] = []() -> EncryptedName<14, 0x3375B1C7DBB5FD55ULL>& { - const std::array source = {'\xE2', '\x44', '\x75', '\x15', '\x06', '\x1F', '\x29', '\x84', '\xEC', '\x3D', '\x7B', '\x1A', '\x69', '\xB1'}; + constexpr std::array source = CRYPT_NAME("레인져\\레인져", 0x3375B1C7DBB5FD55ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[112] = []() -> EncryptedName<14, 0x0F0F8B6B8F9D19D1ULL>& { - const std::array source = {'\x66', '\xA0', '\x5D', '\x41', '\xAA', '\x25', '\x53', '\xB8', '\x68', '\xD9', '\x53', '\x4E', '\xC5', '\x8B'}; + constexpr std::array source = CRYPT_NAME("레인져\\레인져", 0x0F0F8B6B8F9D19D1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[134] = []() -> EncryptedName<22, 0xD98F03A52D35636DULL>& { - const std::array source = {'\xDA', '\xDA', '\xF5', '\xE3', '\x64', '\xAD', '\x3B', '\x18', '\xD9', '\x88', '\x69', '\x9A', '\x1C', '\xC3', '\x41', '\x18', '\xC3', '\xD7', '\xF4', '\x99', '\x4E', '\x03'}; + constexpr std::array source = CRYPT_NAME("레인져늑대\\레인져늑대", 0xD98F03A52D35636DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[135] = []() -> EncryptedName<22, 0x31D7C1EDA345E36DULL>& { - const std::array source = {'\xDA', '\x5A', '\x85', '\x6D', '\x2C', '\x6F', '\x63', '\xF0', '\xD9', '\x08', '\x19', '\x14', '\x54', '\x01', '\x19', '\xF0', '\xC3', '\x57', '\x84', '\x17', '\x06', '\xC1'}; + constexpr std::array source = CRYPT_NAME("레인져늑대\\레인져늑대", 0x31D7C1EDA345E36DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[161] = []() -> EncryptedName<22, 0xD3755DD95F47A909ULL>& { - const std::array source = {'\xBE', '\x10', '\x87', '\x91', '\x18', '\xF3', '\xC1', '\x12', '\xBD', '\x42', '\x1B', '\xE8', '\x60', '\x9D', '\xBB', '\x12', '\xA7', '\x1D', '\x86', '\xEB', '\x32', '\x5D'}; + constexpr std::array source = CRYPT_NAME("레인져늑대\\레인져늑대", 0xD3755DD95F47A909ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[109] = []() -> EncryptedName<26, 0x490FFB43A12F0DB9ULL>& { - const std::array source = {'\x08', '\xEB', '\x98', '\x6F', '\x85', '\x45', '\xCA', '\xE0', '\x0E', '\xC3', '\x92', '\x1B', '\x1F', '\x4A', '\xE9', '\xFE', '\x77', '\xCB', '\x91', '\x64', '\xEA', '\x4C', '\xC1', '\xF4', '\x03', '\x0D'}; + constexpr std::array source = CRYPT_NAME("길로틴크로스\\길로틴크로스", 0x490FFB43A12F0DB9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[115] = []() -> EncryptedName<26, 0x3FAF85D995034FD7ULL>& { - const std::array source = {'\x66', '\xA9', '\xB4', '\x5B', '\x1F', '\x3B', '\x6A', '\x96', '\x60', '\x81', '\xBE', '\x2F', '\x85', '\x34', '\x49', '\x88', '\x19', '\x89', '\xBD', '\x50', '\x70', '\x32', '\x61', '\x82', '\x6D', '\x4F'}; + constexpr std::array source = CRYPT_NAME("길로틴크로스\\길로틴크로스", 0x3FAF85D995034FD7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[116] = []() -> EncryptedName<18, 0x73D1674B61DF7B0BULL>& { - const std::array source = {'\xBC', '\xB5', '\x61', '\x83', '\xFB', '\xC6', '\x64', '\x96', '\x57', '\xCC', '\x11', '\xDF', '\xA9', '\xD7', '\x70', '\xC6', '\xEE', '\x7B'}; + constexpr std::array source = CRYPT_NAME("로얄가드\\로얄가드", 0x73D1674B61DF7B0BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[123] = []() -> EncryptedName<18, 0x91651D81F559F971ULL>& { - const std::array source = {'\xC6', '\x37', '\xE7', '\x17', '\x31', '\xBC', '\xD0', '\x74', '\x2D', '\x4E', '\x97', '\x4B', '\x63', '\xAD', '\xC4', '\x24', '\x94', '\xF9'}; + constexpr std::array source = CRYPT_NAME("로얄가드\\로얄가드", 0x91651D81F559F971ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[132] = []() -> EncryptedName<30, 0x072D2D872D259D5BULL>& { - const std::array source = {'\xE6', '\x58', '\xE3', '\xC9', '\x43', '\xF7', '\x9A', '\xC9', '\xE5', '\x7F', '\x95', '\x8C', '\x32', '\xC8', '\x71', '\xBA', '\x9E', '\x5B', '\xC1', '\xE9', '\x5D', '\x9A', '\xE3', '\xB9', '\xB9', '\x2D', '\x84', '\x98', '\x62', '\x2D'}; + constexpr std::array source = CRYPT_NAME("신페코로얄가드\\신페코로얄가드", 0x072D2D872D259D5BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[133] = []() -> EncryptedName<30, 0x875FCDF1E7A1795FULL>& { - const std::array source = {'\xE2', '\xBC', '\x67', '\x03', '\x35', '\x17', '\xE8', '\x49', '\xE1', '\x9B', '\x11', '\x46', '\x44', '\x28', '\x03', '\x3A', '\x9A', '\xBF', '\x45', '\x23', '\x2B', '\x7A', '\x91', '\x39', '\xBD', '\xC9', '\x00', '\x52', '\x14', '\xCD'}; + constexpr std::array source = CRYPT_NAME("신페코로얄가드\\신페코로얄가드", 0x875FCDF1E7A1795FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[160] = []() -> EncryptedName<30, 0xB96B77B7255F8569ULL>& { - const std::array source = {'\xD4', '\x40', '\x99', '\xC1', '\x73', '\xAD', '\xDC', '\x77', '\xD7', '\x67', '\xEF', '\x84', '\x02', '\x92', '\x37', '\x04', '\xAC', '\x43', '\xBB', '\xE1', '\x6D', '\xC0', '\xA5', '\x07', '\x8B', '\x35', '\xFE', '\x90', '\x52', '\x77'}; + constexpr std::array source = CRYPT_NAME("신페코로얄가드\\신페코로얄가드", 0xB96B77B7255F8569ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[120] = []() -> EncryptedName<10, 0x9BE3EF737387AD79ULL>& { - const std::array source = {'\xC4', '\x19', '\x31', '\x80', '\x2F', '\x52', '\x57', '\x2D', '\x8A', '\xAD'}; + constexpr std::array source = CRYPT_NAME("슈라\\슈라", 0x9BE3EF737387AD79ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[127] = []() -> EncryptedName<10, 0x4755C1355575FD37ULL>& { - const std::array source = {'\x8A', '\x49', '\xC3', '\xA6', '\x69', '\x7C', '\xE1', '\xF1', '\xC4', '\xFD'}; + constexpr std::array source = CRYPT_NAME("슈라\\슈라", 0x4755C1355575FD37ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[117] = []() -> EncryptedName<14, 0x11CB35636377DD07ULL>& { - const std::array source = {'\xBB', '\x0F', '\xCB', '\xCE', '\xD4', '\x9A', '\x97', '\xAD', '\xD5', '\x61', '\xDA', '\xD4', '\xCC', '\x35'}; + constexpr std::array source = CRYPT_NAME("소서러\\소서러", 0x11CB35636377DD07ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[124] = []() -> EncryptedName<14, 0x79DF094DD9616575ULL>& { - const std::array source = {'\xC9', '\xB7', '\xDD', '\x74', '\xFA', '\xA6', '\x83', '\xC5', '\xA7', '\xD9', '\xCC', '\x6E', '\xE2', '\x09'}; + constexpr std::array source = CRYPT_NAME("소서러\\소서러", 0x79DF094DD9616575ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[122] = []() -> EncryptedName<10, 0x9D8F2D37BFFD61B7ULL>& { - const std::array source = {'\x00', '\xAF', '\x4C', '\x68', '\x6B', '\x9A', '\x41', '\x2C', '\x60', '\x61'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0x9D8F2D37BFFD61B7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[129] = []() -> EncryptedName<10, 0x5DAD2D25D9259B93ULL>& { - const std::array source = {'\x24', '\x55', '\x94', '\x0E', '\x79', '\x9A', '\x63', '\xEC', '\x44', '\x9B'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0x5DAD2D25D9259B93ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[121] = []() -> EncryptedName<14, 0x1F1D51274373C1FDULL>& { - const std::array source = {'\x3C', '\x67', '\xC0', '\x94', '\x9F', '\xFE', '\x41', '\xDE', '\x5B', '\x72', '\xA4', '\xFB', '\x88', '\x51'}; + constexpr std::array source = CRYPT_NAME("제네릭\\제네릭", 0x1F1D51274373C1FDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[128] = []() -> EncryptedName<14, 0x3D371F5B0F7F9327ULL>& { - const std::array source = {'\xE6', '\x35', '\xCC', '\xD8', '\xE3', '\xB0', '\x6B', '\xFC', '\x81', '\x20', '\xA8', '\xB7', '\xF4', '\x1F'}; + constexpr std::array source = CRYPT_NAME("제네릭\\제네릭", 0x3D371F5B0F7F9327ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[119] = []() -> EncryptedName<14, 0x6BF729E30729CF29ULL>& { - const std::array source = {'\x96', '\x37', '\x9D', '\xF2', '\x54', '\x86', '\xAB', '\xD4', '\xD1', '\x7B', '\xDC', '\xB0', '\x4C', '\x29'}; + constexpr std::array source = CRYPT_NAME("원더러\\원더러", 0x6BF729E30729CF29ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[126] = []() -> EncryptedName<14, 0xC5995F4B9FE96B89ULL>& { - const std::array source = {'\x36', '\x93', '\x5D', '\x6A', '\xFC', '\xF0', '\xC5', '\x7A', '\x71', '\xDF', '\x1C', '\x28', '\xE4', '\x5F'}; + constexpr std::array source = CRYPT_NAME("원더러\\원더러", 0xC5995F4B9FE96B89ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[118] = []() -> EncryptedName<18, 0x610F7DD1EFC1C91BULL>& { - const std::array source = {'\xA2', '\x07', '\x7C', '\x55', '\x17', '\xD3', '\xB8', '\xD3', '\x47', '\x70', '\x0F', '\x52', '\x6B', '\xBB', '\xA1', '\xD6', '\xA9', '\xC9'}; + constexpr std::array source = CRYPT_NAME("민스트럴\\민스트럴", 0x610F7DD1EFC1C91BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[125] = []() -> EncryptedName<18, 0x5F93A1C3A7AD7537ULL>& { - const std::array source = {'\x8E', '\xBB', '\x10', '\x1D', '\x05', '\x0F', '\x24', '\xED', '\x6B', '\xCC', '\x63', '\x1A', '\x79', '\x67', '\x3D', '\xE8', '\x85', '\x75'}; + constexpr std::array source = CRYPT_NAME("민스트럴\\민스트럴", 0x5F93A1C3A7AD7537ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[146] = []() -> EncryptedName<18, 0x097389157345A787ULL>& { - const std::array source = {'\x30', '\x4E', '\xF6', '\xD9', '\xD5', '\x45', '\xB5', '\xA7', '\xDB', '\x10', '\xAC', '\xC0', '\xBF', '\x49', '\xBF', '\xCF', '\x29', '\xA7'}; + constexpr std::array source = CRYPT_NAME("룬나이트\\룬나이트", 0x097389157345A787ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[147] = []() -> EncryptedName<10, 0x732B390D63FD47D7ULL>& { - const std::array source = {'\x68', '\xB1', '\x4A', '\xAC', '\x51', '\x86', '\xDD', '\xC4', '\x18', '\x47'}; + constexpr std::array source = CRYPT_NAME("워록\\워록", 0x732B390D63FD47D7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[148] = []() -> EncryptedName<14, 0xB7A76BF9CD41F99FULL>& { - const std::array source = {'\x28', '\x40', '\x81', '\x03', '\x38', '\xC5', '\xFB', '\x00', '\x26', '\x39', '\x8F', '\x0C', '\x57', '\x6B'}; + constexpr std::array source = CRYPT_NAME("레인져\\레인져", 0xB7A76BF9CD41F99FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[149] = []() -> EncryptedName<18, 0xE3FB23537D2785BFULL>& { - const std::array source = {'\x01', '\x43', '\xE2', '\xD4', '\xE9', '\xD2', '\x47', '\x10', '\xE3', '\x3B', '\xE1', '\xB8', '\xFA', '\x99', '\x0A', '\x5F', '\x4C', '\x85'}; + constexpr std::array source = CRYPT_NAME("아크비숍\\아크비숍", 0xE3FB23537D2785BFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[150] = []() -> EncryptedName<14, 0x1FDB81175D1557E3ULL>& { - const std::array source = {'\x5A', '\x9B', '\xD1', '\x94', '\xA3', '\x51', '\x87', '\xA6', '\x2F', '\x93', '\xDC', '\xE9', '\xC7', '\x81'}; + constexpr std::array source = CRYPT_NAME("미케닉\\미케닉", 0x1FDB81175D1557E3ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[151] = []() -> EncryptedName<26, 0xB3CF9BEB7963DB89ULL>& { - const std::array source = {'\x38', '\x3D', '\xD4', '\xB7', '\x2D', '\x25', '\x0A', '\x1A', '\x3E', '\x15', '\xDE', '\xC3', '\xB7', '\x2A', '\x29', '\x04', '\x47', '\x1D', '\xDD', '\xBC', '\x42', '\x2C', '\x01', '\x0E', '\x33', '\xDB'}; + constexpr std::array source = CRYPT_NAME("길로틴크로스\\길로틴크로스", 0xB3CF9BEB7963DB89ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[152] = []() -> EncryptedName<18, 0x8BBF792B47E72173ULL>& { - const std::array source = {'\xC4', '\xEF', '\x59', '\xA5', '\x9B', '\xD8', '\x0A', '\x6E', '\x2F', '\x96', '\x29', '\xF9', '\xC9', '\xC9', '\x1E', '\x3E', '\x96', '\x21'}; + constexpr std::array source = CRYPT_NAME("로얄가드\\로얄가드", 0x8BBF792B47E72173ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[153] = []() -> EncryptedName<14, 0xDD69EDFFA18F537DULL>& { - const std::array source = {'\xC1', '\x81', '\x33', '\x0C', '\x48', '\x42', '\x35', '\x61', '\xAF', '\xEF', '\x22', '\x16', '\x50', '\xED'}; + constexpr std::array source = CRYPT_NAME("소서러\\소서러", 0xDD69EDFFA18F537DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[154] = []() -> EncryptedName<18, 0x71A509DB43792991ULL>& { - const std::array source = {'\x28', '\xE7', '\xC4', '\xF9', '\x1D', '\xA7', '\x12', '\xC3', '\xCD', '\x90', '\xB7', '\xFE', '\x61', '\xCF', '\x0B', '\xC6', '\x23', '\x29'}; + constexpr std::array source = CRYPT_NAME("민스트럴\\민스트럴", 0x71A509DB43792991ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[155] = []() -> EncryptedName<14, 0xFB2BC75769E777D3ULL>& { - const std::array source = {'\x6C', '\x8F', '\x53', '\x9C', '\xE0', '\x68', '\x77', '\x44', '\x2B', '\xC3', '\x12', '\xDE', '\xF8', '\xC7'}; + constexpr std::array source = CRYPT_NAME("원더러\\원더러", 0xFB2BC75769E777D3ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[156] = []() -> EncryptedName<10, 0x038535BB092533B7ULL>& { - const std::array source = {'\x0A', '\x87', '\x93', '\xFA', '\xE7', '\x88', '\x31', '\xB5', '\x44', '\x33'}; + constexpr std::array source = CRYPT_NAME("슈라\\슈라", 0x038535BB092533B7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[157] = []() -> EncryptedName<14, 0x9B9D51AD3515F779ULL>& { - const std::array source = {'\xB8', '\x51', '\xA6', '\xE2', '\x15', '\xFE', '\xC1', '\x5A', '\xDF', '\x44', '\xC2', '\x8D', '\x02', '\x51'}; + constexpr std::array source = CRYPT_NAME("제네릭\\제네릭", 0x9B9D51AD3515F779ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[158] = []() -> EncryptedName<10, 0xB5D7B5AF4FEDFF57ULL>& { - const std::array source = {'\xE0', '\x31', '\x5C', '\x98', '\xF3', '\x02', '\x19', '\x04', '\x80', '\xFF'}; + constexpr std::array source = CRYPT_NAME("로그\\로그", 0xB5D7B5AF4FEDFF57ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[240] = []() -> EncryptedName<14, 0x67DD5BAB1919D9D1ULL>& { - const std::array source = {'\x12', '\x13', '\xA3', '\xA1', '\x6B', '\x81', '\x81', '\xA4', '\x1B', '\x63', '\xA1', '\xD9', '\x71', '\x5B'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0x67DD5BAB1919D9D1ULL); thread_local EncryptedName name(source); return name; }().Text(); { - const std::array source = {'\x30', '\xDF', '\xC9', '\x9B', '\xB9', '\x2D', '\xAF', '\x76', '\x39', '\xAF', '\xCB', '\xE3', '\xA3', '\xF7'}; + constexpr std::array source = CRYPT_NAME("초보자\\초보자", 0xB5F3F779237315F3ULL); thread_local EncryptedName name(source); jobSpriteNames[241] = name.Text(); } @@ -8552,267 +8553,267 @@ void CSession::InitJobSpriteNames() { jobSpriteNames[277] = SoulLinkerBabySpriteName().Text(); jobSpriteNames[285] = FrogSoulLinkerBabySpriteName().Text(); jobSpriteNames[278] = []() -> EncryptedName<10, 0x0789EBC9F5C1C59FULL>& { - const std::array source = {'\x2F', '\x02', '\x72', '\x3F', '\x95', '\x5B', '\x4E', '\xB4', '\x55', '\xC5'}; + constexpr std::array source = CRYPT_NAME("건너\\건너", 0x0789EBC9F5C1C59FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[286] = []() -> EncryptedName<10, 0x451FD72783630709ULL>& { - const std::array source = {'\xB9', '\xC0', '\xD0', '\x49', '\x7B', '\x67', '\xD8', '\xF6', '\xC3', '\x07'}; + constexpr std::array source = CRYPT_NAME("건너\\건너", 0x451FD72783630709ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[279] = []() -> EncryptedName<20, 0x3B6D9BFD27A7C7F7ULL>& { - const std::array source = {'\x85', '\xA2', '\xC5', '\x42', '\x91', '\xF7', '\x04', '\x54', '\x99', '\x9B', '\xD5', '\x42', '\x9F', '\xFE', '\x01', '\x57', '\x9E', '\xA8', '\xC9', '\x27'}; + constexpr std::array source = CRYPT_NAME("rebellion\\rebellion", 0x3B6D9BFD27A7C7F7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[287] = []() -> EncryptedName<20, 0xA15B555BE9CD2B81ULL>& { - const std::array source = {'\xF3', '\x4E', '\xAF', '\x8C', '\x37', '\x39', '\x32', '\xCE', '\xEF', '\x77', '\xBF', '\x8C', '\x39', '\x30', '\x37', '\xCD', '\xE8', '\x44', '\xA3', '\xE9'}; + constexpr std::array source = CRYPT_NAME("rebellion\\rebellion", 0xA15B555BE9CD2B81ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[289] = []() -> EncryptedName<10, 0x73C32959FDFFA51BULL>& { - const std::array source = {'\xA7', '\x1F', '\x3E', '\x5B', '\x05', '\x95', '\x79', '\xB2', '\xBD', '\xA5'}; + constexpr std::array source = CRYPT_NAME("성제\\성제", 0x73C32959FDFFA51BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[290] = []() -> EncryptedName<18, 0xB3F1A10745C1F105ULL>& { - const std::array source = {'\xB9', '\x23', '\x7E', '\xAA', '\xBF', '\x0F', '\x37', '\x68', '\x59', '\x4D', '\x13', '\xFA', '\xE8', '\x19', '\x5F', '\x75', '\xDE', '\xF1'}; + constexpr std::array source = CRYPT_NAME("소울리퍼\\소울리퍼", 0xB3F1A10745C1F105ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[291] = []() -> EncryptedName<10, 0xD9115915B1919533ULL>& { - const std::array source = {'\x8F', '\x2F', '\x50', '\x17', '\x49', '\xE5', '\xAB', '\x18', '\x95', '\x95'}; + constexpr std::array source = CRYPT_NAME("성제\\성제", 0xD9115915B1919533ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[292] = []() -> EncryptedName<18, 0x7959FFBF652D07BFULL>& { - const std::array source = {'\x03', '\xD5', '\x92', '\x8A', '\x07', '\x51', '\x9F', '\xA2', '\xE3', '\xBB', '\xFF', '\xDA', '\x50', '\x47', '\xF7', '\xBF', '\x64', '\x07'}; + constexpr std::array source = CRYPT_NAME("소울리퍼\\소울리퍼", 0x7959FFBF652D07BFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[293] = []() -> EncryptedName<10, 0x99157F159BB99BD9ULL>& { - const std::array source = {'\x65', '\x21', '\x78', '\x3D', '\x49', '\xC3', '\xAF', '\x58', '\x7F', '\x9B'}; + constexpr std::array source = CRYPT_NAME("성제\\성제", 0x99157F159BB99BD9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[294] = []() -> EncryptedName<10, 0x31E3CF9D358D8705ULL>& { - const std::array source = {'\xB9', '\x3D', '\x4C', '\x93', '\xC1', '\x73', '\x59', '\xF0', '\xA3', '\x87'}; + constexpr std::array source = CRYPT_NAME("성제\\성제", 0x31E3CF9D358D8705ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[295] = []() -> EncryptedName<10, 0xA55B7BEF3D7377E3ULL>& { - const std::array source = {'\x5F', '\xCD', '\xB2', '\x9B', '\xB3', '\xC7', '\xE1', '\x64', '\x45', '\x77'}; + constexpr std::array source = CRYPT_NAME("성제\\성제", 0xA55B7BEF3D7377E3ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[296] = []() -> EncryptedName<18, 0xF5496753BDE7C5BDULL>& { - const std::array source = {'\x01', '\x17', '\x58', '\x52', '\xEB', '\xC9', '\x8F', '\x2E', '\xE1', '\x79', '\x35', '\x02', '\xBC', '\xDF', '\xE7', '\x33', '\x66', '\xC5'}; + constexpr std::array source = CRYPT_NAME("소울리퍼\\소울리퍼", 0xF5496753BDE7C5BDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[297] = []() -> EncryptedName<10, 0x79A58B0F2173CF49ULL>& { - const std::array source = {'\xF5', '\x75', '\xB2', '\x87', '\x53', '\x37', '\x1F', '\xB8', '\xEF', '\xCF'}; + constexpr std::array source = CRYPT_NAME("성제\\성제", 0x79A58B0F2173CF49ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[298] = []() -> EncryptedName<18, 0x6B3917C939150B9BULL>& { - const std::array source = {'\x27', '\xD9', '\xAA', '\xD6', '\x71', '\xB9', '\xFF', '\xB0', '\xC7', '\xB7', '\xC7', '\x86', '\x26', '\xAF', '\x97', '\xAD', '\x40', '\x0B'}; + constexpr std::array source = CRYPT_NAME("소울리퍼\\소울리퍼", 0x6B3917C939150B9BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[307] = []() -> EncryptedName<18, 0x795787B7779D19DBULL>& { - const std::array source = {'\x8C', '\x50', '\xD3', '\x33', '\xFF', '\xC6', '\x00', '\x32', '\x87', '\x4E', '\xD4', '\x39', '\xF3', '\xCF', '\x16', '\x2E', '\x90', '\x19'}; + constexpr std::array source = CRYPT_NAME("WINDHAWK\\WINDHAWK", 0x795787B7779D19DBULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[328] = []() -> EncryptedName<23, 0xF9B1EF9F7961EFF5ULL>& { - const std::array source = {'\xA2', '\xA6', '\x2F', '\x3D', '\xD7', '\xAE', '\xE6', '\xB2', '\xA9', '\xB8', '\x2E', '\x35', '\xD9', '\xB0', '\xE6', '\xB0', '\xBB', '\xAB', '\x29', '\x38', '\xC8', '\xA4', '\xB1'}; + constexpr std::array source = CRYPT_NAME("WINDHAWK\\WOLF_WINDHAWK", 0xF9B1EF9F7961EFF5ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[320] = []() -> EncryptedName<25, 0x29AB0B59651BDFD5ULL>& { - const std::array source = {'\x82', '\x96', '\x55', '\x21', '\x11', '\x4A', '\xFC', '\x62', '\x89', '\x88', '\x52', '\x2B', '\x1D', '\x43', '\xEA', '\x7E', '\x9E', '\x80', '\x49', '\x2C', '\x1D', '\x42', '\xE5', '\x6E', '\xD5'}; + constexpr std::array source = CRYPT_NAME("WINDHAWK\\WINDHAWK_RIDING", 0x29AB0B59651BDFD5ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[313] = []() -> EncryptedName<22, 0xD97DC927AFE911F1ULL>& { - const std::array source = {'\xA5', '\x43', '\xA6', '\xFA', '\x65', '\x88', '\x39', '\x96', '\xA4', '\x43', '\xB5', '\xFB', '\x75', '\x86', '\x28', '\x9B', '\xB0', '\x55', '\xA6', '\xFA', '\x75', '\xC9'}; + constexpr std::array source = CRYPT_NAME("TROUBADOUR\\TROUBADOUR", 0xD97DC927AFE911F1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[326] = []() -> EncryptedName<29, 0x07A7D947CF7323BFULL>& { - const std::array source = {'\xEB', '\x71', '\x3C', '\x9A', '\x05', '\x98', '\xE3', '\x48', '\xEA', '\x71', '\x2F', '\x9B', '\x15', '\x96', '\xF2', '\x45', '\xFE', '\x67', '\x3C', '\x9A', '\x15', '\x86', '\xF5', '\x4E', '\xFB', '\x6A', '\x3D', '\x88', '\x47'}; + constexpr std::array source = CRYPT_NAME("TROUBADOUR\\TROUBADOUR_RIDING", 0x07A7D947CF7323BFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[314] = []() -> EncryptedName<18, 0x47B7BF55EB471557ULL>& { - const std::array source = {'\x03', '\x47', '\x08', '\xBE', '\x03', '\xFA', '\xE5', '\x02', '\x0B', '\x41', '\x15', '\xA4', '\x00', '\xE9', '\xF2', '\x15', '\x12', '\x15'}; + constexpr std::array source = CRYPT_NAME("TROUVERE\\TROUVERE", 0x47B7BF55EB471557ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[327] = []() -> EncryptedName<25, 0x8BA52B970DD531ADULL>& { - const std::array source = {'\xF9', '\x63', '\x9A', '\x58', '\xC1', '\x6E', '\xF7', '\xCE', '\xF1', '\x65', '\x87', '\x42', '\xC2', '\x7D', '\xE0', '\xD9', '\xE8', '\x6E', '\x87', '\x44', '\xD3', '\x62', '\xEB', '\xCC', '\xAD'}; + constexpr std::array source = CRYPT_NAME("TROUVERE\\TROUVERE_RIDING", 0x8BA52B970DD531ADULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[305] = []() -> EncryptedName<20, 0x2F2103792383718BULL>& { - const std::array source = {'\xCA', '\x23', '\xC0', '\x6B', '\x26', '\x4E', '\x60', '\x68', '\xCE', '\x2D', '\xC2', '\x71', '\x3A', '\x4B', '\x7E', '\x62', '\xCA', '\x36', '\xC6', '\x23'}; + constexpr std::array source = CRYPT_NAME("ARCH_MAGE\\ARCH_MAGE", 0x2F2103792383718BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[318] = []() -> EncryptedName<27, 0xCFB9671DEF4BD9E7ULL>& { - const std::array source = {'\xA6', '\x8B', '\x08', '\xA7', '\x42', '\x2A', '\xF8', '\x88', '\xA2', '\x85', '\x0A', '\xBD', '\x5E', '\x2F', '\xE6', '\x82', '\xA6', '\x9E', '\x0E', '\xB0', '\x4F', '\x2E', '\xFD', '\x86', '\xA9', '\x9E', '\x4B'}; + constexpr std::array source = CRYPT_NAME("ARCH_MAGE\\ARCH_MAGE_RIDING", 0xCFB9671DEF4BD9E7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[311] = []() -> EncryptedName<32, 0x4349ADE96FEB27E5ULL>& { - const std::array source = {'\xA0', '\x6B', '\xAE', '\x22', '\xAC', '\xF9', '\x08', '\x0F', '\xBA', '\x6A', '\xAA', '\x3C', '\xBD', '\xE8', '\x1B', '\x1F', '\xA0', '\x6B', '\xAE', '\x22', '\xAC', '\xF9', '\x08', '\x0F', '\xBA', '\x6A', '\xAA', '\x3C', '\xBD', '\xE8', '\x1B', '\x43'}; + constexpr std::array source = CRYPT_NAME("ELEMETAL_MASTER\\ELEMETAL_MASTER", 0x4349ADE96FEB27E5ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[324] = []() -> EncryptedName<39, 0x999F5191852D2F6BULL>& { - const std::array source = {'\x2E', '\x63', '\x68', '\xC8', '\xD4', '\x05', '\xDE', '\xD5', '\x34', '\x62', '\x6C', '\xD6', '\xC5', '\x14', '\xCD', '\xC5', '\x2E', '\x63', '\x68', '\xC8', '\xD4', '\x05', '\xDE', '\xD5', '\x34', '\x62', '\x6C', '\xD6', '\xC5', '\x14', '\xCD', '\xC6', '\x39', '\x66', '\x69', '\xCC', '\xDF', '\x16', '\x9F'}; + constexpr std::array source = CRYPT_NAME("ELEMETAL_MASTER\\ELEMETAL_MASTER_RIDING", 0x999F5191852D2F6BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[306] = []() -> EncryptedName<18, 0x35F59F6F3DD1C965ULL>& { - const std::array source = {'\x26', '\x88', '\x83', '\x79', '\x26', '\xD1', '\xB4', '\x79', '\x39', '\x8A', '\x90', '\x6F', '\x2B', '\xD6', '\xBB', '\x74', '\x29', '\xC9'}; + constexpr std::array source = CRYPT_NAME("CARDINAL\\CARDINAL", 0x35F59F6F3DD1C965ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[319] = []() -> EncryptedName<25, 0xC1FD95811D1F4FA1ULL>& { - const std::array source = {'\xE2', '\x0E', '\x4D', '\x59', '\xC8', '\xDB', '\xBC', '\x8D', '\xFD', '\x0C', '\x5E', '\x4F', '\xC5', '\xDC', '\xB3', '\x80', '\xED', '\x10', '\x4D', '\x54', '\xC5', '\xDC', '\xB3', '\x86', '\xA1'}; + constexpr std::array source = CRYPT_NAME("CARDINAL\\CARDINAL_RIDING", 0xC1FD95811D1F4FA1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[312] = []() -> EncryptedName<22, 0xBF0F412941076FADULL>& { - const std::array source = {'\xE4', '\x21', '\x56', '\x14', '\x60', '\x12', '\x46', '\xEB', '\xE2', '\x3D', '\x5B', '\x08', '\x67', '\x10', '\x5A', '\xF6', '\xFE', '\x26', '\x53', '\x0E', '\x7B', '\x41'}; + constexpr std::array source = CRYPT_NAME("INQUISITOR\\INQUISITOR", 0xBF0F412941076FADULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[325] = []() -> EncryptedName<29, 0xD7BBEB2DDB295D11ULL>& { - const std::array source = {'\x58', '\x13', '\x78', '\x8E', '\x64', '\xB8', '\xF2', '\x83', '\x5E', '\x0F', '\x75', '\x92', '\x63', '\xBA', '\xEE', '\x9E', '\x42', '\x14', '\x7D', '\x94', '\x7F', '\xB4', '\xE9', '\x9E', '\x55', '\x14', '\x67', '\x9C', '\x2D'}; + constexpr std::array source = CRYPT_NAME("INQUISITOR\\INQUISITOR_RIDING", 0xD7BBEB2DDB295D11ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[309] = []() -> EncryptedName<12, 0xB59BADC5B365617DULL>& { - const std::array source = {'\x3F', '\x28', '\x2A', '\xFF', '\x8A', '\xF1', '\xD9', '\xFC', '\x32', '\x2D', '\x2A', '\xB3'}; + constexpr std::array source = CRYPT_NAME("BIOLO\\BIOLO", 0xB59BADC5B365617DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[322] = []() -> EncryptedName<26, 0x8DFF0B4B67D9FDE1ULL>& { - const std::array source = {'\xA3', '\xB4', '\x96', '\x2B', '\x04', '\x54', '\xAD', '\xC4', '\xA5', '\xB4', '\x97', '\x20', '\x17', '\x49', '\xB6', '\xC2', '\xAD', '\xB2', '\x86', '\x35', '\x02', '\x4F', '\xB6', '\xC3', '\xA6', '\xFD'}; + constexpr std::array source = CRYPT_NAME("BIOLO_RIDING\\BIOLO_RIDING", 0x8DFF0B4B67D9FDE1ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[303] = []() -> EncryptedName<16, 0x91E7A7DFA58F9B6BULL>& { - const std::array source = {'\x26', '\xDE', '\xC6', '\xF6', '\x8B', '\xE2', '\xB5', '\xCD', '\x26', '\xDE', '\xC6', '\xF6', '\x8B', '\xE2', '\xB5', '\x91'}; + constexpr std::array source = CRYPT_NAME("MEISTER\\MEISTER", 0x91E7A7DFA58F9B6BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[316] = []() -> EncryptedName<30, 0x77D925073D6F19B9ULL>& { - const std::array source = {'\xF4', '\x5C', '\x26', '\x6E', '\x53', '\x60', '\x8B', '\x28', '\xEB', '\x50', '\x2B', '\x74', '\x49', '\x62', '\x85', '\x3A', '\xFC', '\x50', '\x3C', '\x69', '\x42', '\x77', '\x86', '\x25', '\xF0', '\x5D', '\x26', '\x73', '\x40', '\x25'}; + constexpr std::array source = CRYPT_NAME("MEISTER_RIDING\\MEISTER_RIDING", 0x77D925073D6F19B9ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[329] = []() -> EncryptedName<35, 0xAFF9332FD397533FULL>& { - const std::array source = {'\x72', '\x16', '\xDE', '\x80', '\x7B', '\x76', '\xAB', '\xF0', '\x72', '\x12', '\xD3', '\x9C', '\x68', '\x76', '\xB8', '\xFD', '\x63', '\x1E', '\xD2', '\x9A', '\x7C', '\x67', '\xBC', '\xFD', '\x60', '\x1E', '\xD6', '\x97', '\x60', '\x74', '\xBC', '\xEE', '\x6D', '\x62', '\x97'}; + constexpr std::array source = CRYPT_NAME("MEISTER_MADOGEAR\\MEISTER_MADOGEAR1", 0xAFF9332FD397533FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[304] = []() -> EncryptedName<26, 0xA1DFCDAD555BB16DULL>& { - const std::array source = {'\x3E', '\xF9', '\x1A', '\x11', '\xE2', '\x9A', '\x80', '\xE2', '\x3F', '\xFE', '\x08', '\x06', '\xF1', '\x9E', '\x97', '\xE0', '\x29', '\xFE', '\x0C', '\x0A', '\xEE', '\x9F', '\x90', '\xF2', '\x3E', '\xB1'}; + constexpr std::array source = CRYPT_NAME("SHADOW_CROSS\\SHADOW_CROSS", 0xA1DFCDAD555BB16DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[317] = []() -> EncryptedName<33, 0x7DC10333F96DE3E7ULL>& { - const std::array source = {'\xB4', '\xAB', '\x2C', '\xBD', '\x7C', '\x54', '\x9E', '\x3E', '\xB5', '\xAC', '\x3E', '\xAA', '\x6F', '\x50', '\x89', '\x3C', '\xA3', '\xAC', '\x3A', '\xA6', '\x70', '\x51', '\x8E', '\x2E', '\xB4', '\xBC', '\x3F', '\xB0', '\x77', '\x4A', '\x8F', '\x3A', '\xE7'}; + constexpr std::array source = CRYPT_NAME("SHADOW_CROSS\\SHADOW_CROSS_RIDING", 0x7DC10333F96DE3E7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[310] = []() -> EncryptedName<26, 0x194F8339AF753FADULL>& { - const std::array source = {'\xEC', '\x7D', '\x2C', '\xFC', '\x6A', '\xDC', '\x0C', '\x51', '\xEC', '\x6C', '\x30', '\xFD', '\x65', '\xC2', '\x0D', '\x40', '\xFE', '\x6C', '\x2A', '\xEC', '\x71', '\xC2', '\x1C', '\x5C', '\xFF', '\x3F'}; + constexpr std::array source = CRYPT_NAME("ABYSS_CHASER\\ABYSS_CHASER", 0x194F8339AF753FADULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[323] = []() -> EncryptedName<33, 0x51372B6F4BA14B23ULL>& { - const std::array source = {'\x62', '\x09', '\xF8', '\x18', '\x3C', '\x74', '\x74', '\x19', '\x62', '\x18', '\xE4', '\x19', '\x33', '\x6A', '\x75', '\x08', '\x70', '\x18', '\xFE', '\x08', '\x27', '\x6A', '\x64', '\x14', '\x71', '\x14', '\xF3', '\x02', '\x2B', '\x62', '\x79', '\x16', '\x23'}; + constexpr std::array source = CRYPT_NAME("ABYSS_CHASER\\ABYSS_CHASER_RIDING", 0x51372B6F4BA14B23ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[302] = []() -> EncryptedName<28, 0xE9FBAB53D5A1BB17ULL>& { - const std::array source = {'\x53', '\xE9', '\xE0', '\x92', '\x1C', '\xE5', '\xA4', '\xA2', '\x59', '\xF2', '\xE6', '\x9D', '\x07', '\xF7', '\xBF', '\xBB', '\x56', '\xFC', '\xEE', '\x9B', '\x0C', '\xE0', '\xB5', '\xA0', '\x50', '\xF3', '\xF5', '\xD5'}; + constexpr std::array source = CRYPT_NAME("DRAGON_KNIGHT\\DRAGON_KNIGHT", 0xE9FBAB53D5A1BB17ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[315] = []() -> EncryptedName<42, 0x1F79132B518FD389ULL>& { - const std::array source = {'\xCD', '\x81', '\xCE', '\x16', '\x64', '\x5D', '\x26', '\x54', '\xC7', '\x9A', '\xC8', '\x19', '\x7F', '\x4C', '\x2B', '\x56', '\xCD', '\x9A', '\xC1', '\x16', '\x77', '\x57', '\x2B', '\x5E', '\xCE', '\x9C', '\xC1', '\x0E', '\x60', '\x5D', '\x30', '\x58', '\xC1', '\x87', '\xD0', '\x03', '\x62', '\x57', '\x30', '\x51', '\xCE', '\xD3'}; + constexpr std::array source = CRYPT_NAME("DRAGON_KNIGHT_RIDING\\DRAGON_KNIGHT_RIDING", 0x1F79132B518FD389ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[330] = []() -> EncryptedName<44, 0xB70319D3A78D39CDULL>& { - const std::array source = {'\x89', '\x6B', '\xCC', '\xE0', '\x9C', '\x57', '\x5C', '\xFC', '\x83', '\x70', '\xCA', '\xEF', '\x87', '\x46', '\x40', '\xFF', '\x84', '\x7A', '\xC6', '\xE2', '\x9D', '\x45', '\x47', '\xE5', '\x8C', '\x7E', '\xC2', '\xE9', '\x8C', '\x52', '\x4D', '\xFE', '\x8A', '\x71', '\xD9', '\xF8', '\x90', '\x51', '\x4A', '\xF4', '\x86', '\x7C', '\xC3', '\xA7'}; + constexpr std::array source = CRYPT_NAME("DRAGON_KNIGHT_CHICKEN\\DRAGON_KNIGHT_CHICKEN", 0xB70319D3A78D39CDULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[308] = []() -> EncryptedName<30, 0xA5C5D1A3B9457B53ULL>& { - const std::array source = {'\x1A', '\x36', '\x15', '\xFC', '\xF1', '\x98', '\x84', '\xE9', '\x0C', '\x3C', '\x10', '\xF8', '\xF1', '\x95', '\x99', '\xEC', '\x1E', '\x2B', '\x00', '\xEB', '\xEA', '\x90', '\x89', '\xFA', '\x14', '\x2E', '\x04', '\xEB', '\xE7', '\xD1'}; + constexpr std::array source = CRYPT_NAME("IMPERIAL_GUARD\\IMPERIAL_GUARD", 0xA5C5D1A3B9457B53ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[321] = []() -> EncryptedName<44, 0x8F61434F0F79DDD7ULL>& { - const std::array source = {'\x9E', '\x90', '\x29', '\x4A', '\x1D', '\x0A', '\x20', '\xC3', '\x88', '\x9A', '\x2C', '\x4E', '\x1D', '\x07', '\x3E', '\xDD', '\x9E', '\x99', '\x30', '\x41', '\x08', '\x1F', '\x28', '\xC2', '\x87', '\x98', '\x2B', '\x46', '\x0E', '\x0F', '\x3E', '\xC8', '\x82', '\x9C', '\x2B', '\x4B', '\x10', '\x11', '\x28', '\xCB', '\x9E', '\x93', '\x3E', '\x0F'}; + constexpr std::array source = CRYPT_NAME("IMPERIAL_GUARD_RIDING\\IMPERIAL_GUARD_RIDING", 0x8F61434F0F79DDD7ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[331] = []() -> EncryptedName<46, 0x4B670715D543C1C3ULL>& { - const std::array source = {'\x8A', '\x8C', '\x13', '\x90', '\x47', '\x4E', '\x26', '\x07', '\x9C', '\x86', '\x16', '\x94', '\x47', '\x43', '\x38', '\x08', '\x8B', '\x88', '\x00', '\x9E', '\x50', '\x49', '\x3B', '\x02', '\x8E', '\x91', '\x06', '\x87', '\x5C', '\x46', '\x2B', '\x14', '\x84', '\x94', '\x02', '\x87', '\x51', '\x58', '\x24', '\x03', '\x8A', '\x82', '\x08', '\x90', '\x5B', '\x07'}; + constexpr std::array source = CRYPT_NAME("IMPERIAL_GUARD_CHICKEN\\IMPERIAL_GUARD_CHICKEN", 0x4B670715D543C1C3ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[352] = []() -> EncryptedName<24, 0x61F59D5D41E76519ULL>& { - const std::array source = {'\x4A', '\x2E', '\xBE', '\x1E', '\x18', '\xD0', '\xA5', '\x24', '\x4B', '\x2A', '\xB5', '\x1D', '\x0E', '\xD6', '\xAC', '\x3E', '\x5C', '\x28', '\xB7', '\x04', '\x0F', '\xD2', '\xA7', '\x61'}; + constexpr std::array source = CRYPT_NAME("SKY_EMPEROR\\SKY_EMPEROR", 0x61F59D5D41E76519ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[366] = []() -> EncryptedName<24, 0x4B1D078937DB892BULL>& { - const std::array source = {'\x78', '\xC2', '\x82', '\x68', '\xCC', '\x4A', '\x4D', '\x0E', '\x79', '\xC6', '\x89', '\x6B', '\xDA', '\x4C', '\x44', '\x14', '\x6E', '\xC4', '\x8B', '\x72', '\xDB', '\x48', '\x4F', '\x4B'}; + constexpr std::array source = CRYPT_NAME("SKY_EMPEROR\\SKY_EMPEROR", 0x4B1D078937DB892BULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[359] = []() -> EncryptedName<31, 0x7155E5EF0DFB0D03ULL>& { - const std::array source = {'\x50', '\x46', '\xA2', '\x52', '\xAA', '\xA8', '\x05', '\x34', '\x51', '\x42', '\xA9', '\x51', '\xBC', '\xAE', '\x0C', '\x2E', '\x46', '\x40', '\xAB', '\x48', '\xBD', '\xAA', '\x07', '\x2E', '\x51', '\x44', '\xBF', '\x44', '\xA1', '\xA2', '\x55'}; + constexpr std::array source = CRYPT_NAME("SKY_EMPEROR\\SKY_EMPEROR_RIDING", 0x7155E5EF0DFB0D03ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[353] = []() -> EncryptedName<26, 0xD51953E763B94747ULL>& { - const std::array source = {'\x14', '\x08', '\xEC', '\x2F', '\xB8', '\x12', '\x4A', '\x96', '\x02', '\x13', '\xF0', '\x20', '\xBB', '\x00', '\x56', '\x80', '\x0B', '\x18', '\xF8', '\x30', '\xA4', '\x16', '\x4D', '\x9C', '\x04', '\x47'}; + constexpr std::array source = CRYPT_NAME("SOUL_ASCETIC\\SOUL_ASCETIC", 0xD51953E763B94747ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[360] = []() -> EncryptedName<33, 0x17FB0F6BFF3BE93FULL>& { - const std::array source = {'\x6C', '\xA6', '\x6E', '\xB3', '\x34', '\x4E', '\xA8', '\x54', '\x7A', '\xBD', '\x72', '\xBC', '\x37', '\x5C', '\xB4', '\x42', '\x73', '\xB6', '\x7A', '\xAC', '\x28', '\x4A', '\xAF', '\x5E', '\x7C', '\xB6', '\x69', '\xB6', '\x2F', '\x46', '\xB5', '\x50', '\x3F'}; + constexpr std::array source = CRYPT_NAME("SOUL_ASCETIC\\SOUL_ASCETIC_RIDING", 0x17FB0F6BFF3BE93FULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[354] = []() -> EncryptedName<18, 0x91DF1F5D3B014D45ULL>& { - const std::array source = {'\x16', '\x05', '\x48', '\x75', '\x16', '\x56', '\x8D', '\xDE', '\x19', '\x1E', '\x49', '\x72', '\x13', '\x54', '\x96', '\xC3', '\x0A', '\x4D'}; + constexpr std::array source = CRYPT_NAME("SHINKIRO\\SHINKIRO", 0x91DF1F5D3B014D45ULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[361] = []() -> EncryptedName<25, 0x2529F16B0375530DULL>& { - const std::array source = {'\x5E', '\x1B', '\x3C', '\x4D', '\x20', '\xB8', '\x7B', '\x6A', '\x51', '\x00', '\x3D', '\x4A', '\x25', '\xBA', '\x60', '\x77', '\x42', '\x0C', '\x27', '\x4A', '\x2F', '\xB8', '\x67', '\x62', '\x0D'}; + constexpr std::array source = CRYPT_NAME("SHINKIRO\\SHINKIRO_RIDING", 0x2529F16B0375530DULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[355] = []() -> EncryptedName<18, 0x2F371DDDADDD53CFULL>& { - const std::array source = {'\x9C', '\x1B', '\x94', '\xFF', '\x9C', '\x53', '\x62', '\x66', '\x93', '\x00', '\x95', '\xE4', '\x8F', '\x5C', '\x79', '\x7A', '\x86', '\x53'}; + constexpr std::array source = CRYPT_NAME("SHIRANUI\\SHIRANUI", 0x2F371DDDADDD53CFULL); thread_local EncryptedName name(source); return name; }().Text(); jobSpriteNames[362] = []() -> EncryptedName<25, 0x0D7FA94DD32361A9ULL>& { - const std::array source = {'\xFA', '\x29', '\x6A', '\x81', '\x0C', '\xE7', '\x2A', '\x44', '\xF5', '\x32', '\x6B', '\x9A', '\x1F', '\xE8', '\x31', '\x58', '\xE0', '\x3E', '\x71', '\x9A', '\x09', '\xE0', '\x31', '\x4A', '\xA9'}; + constexpr std::array source = CRYPT_NAME("SHIRANUI\\SHIRANUI_RIDING", 0x0D7FA94DD32361A9ULL); thread_local EncryptedName name(source); return name; }().Text(); diff --git a/Source/Client/Stove/StoveMgr.cpp b/Source/Client/Stove/StoveMgr.cpp index 498f176f2..3c70abbd6 100644 --- a/Source/Client/Stove/StoveMgr.cpp +++ b/Source/Client/Stove/StoveMgr.cpp @@ -16,6 +16,7 @@ #include "UI/Window/UIWindowMgr.h" #include "Utility/Cipher/XorBytes.h" #include "Utility/Text/FormatString.h" +#include "Utility/Cipher/CryptName.h" #include #include @@ -235,7 +236,8 @@ void ShutdownCallback::operator()(Stove::PCSDK::CallbackResult callbackResult, S std::string message = EncodeText(CP_ACP, std::wstring(reinterpret_cast(shutdown).GetCategory1())); if (reinterpret_cast(shutdown).GetAccessToken() == nullptr) { - const char captionSource[] = {'\x27', '\x1D', '\xFA', '\x7E', '\x2A', '\xB1', '\xE1'}; + constexpr auto captionSourceText = CRYPT_NAME("메시지", 0x91E147EBBD47C39FULL); + const auto& captionSource = captionSourceText.data; const char* caption = DecryptName<0x91E147EBBD47C39FULL>(captionSource); MessageBoxA(hWnd, message.c_str(), caption, MB_OK); g_modeMgr.gameMode->SendMsg(MM_QUIT, 0, 0, 0, 0); @@ -253,7 +255,8 @@ void ShutdownCallback::operator()(Stove::PCSDK::CallbackResult callbackResult, S g_windowMgr.SendNotice(UIM_PUSHINTOCHATHISTORY2, reinterpret_cast(message.c_str()), 0x62B0FF, 0, 0, 0); } } else { - const char captionSource[] = {'\x6B', '\x33', '\x2A', '\xD6', '\x8C', '\xAD', '\xA5'}; + constexpr auto captionSourceText = CRYPT_NAME("메시지", 0xA1A55B4D1597EDD3ULL); + const auto& captionSource = captionSourceText.data; const char* caption = DecryptName<0xA1A55B4D1597EDD3ULL>(captionSource); MessageBoxA(hWnd, FormatOwnedString(TokenCallbackFailureMessage()().Text()).c_str(), caption, MB_OK); PostQuitMessage(0); @@ -296,9 +299,10 @@ void FetchProductsCallback::operator()(Stove::PCSDK::CallbackResult callbackResu } } } else { - const char captionSource[] = {'\x7B', '\x1D', '\x68', '\x48', '\x9A', '\x1D', '\x3F'}; + constexpr auto captionSourceText = CRYPT_NAME("메시지", 0x8B3FEB5B8BD5C3C3ULL); + const auto& captionSource = captionSourceText.data; const char* caption = DecryptName<0x8B3FEB5B8BD5C3C3ULL>(captionSource); - const std::array messageSource = {'\x25', '\x6A', '\xF3', '\xC3', '\x87', '\xA0', '\x73', '\x4E', '\x3A', '\x34', '\xB0', '\x35', '\xF0', '\xCE', '\xEC', '\x43', '\x58', '\x4F', '\xF9', '\xDA', '\x83', '\xD8', '\x7D', '\xD7', '\xB6', '\xDB', '\x02', '\x43', '\x72', '\x21', '\xE3', '\x1A', '\x55', '\x3B', '\xF1', '\xAB', '\xF2', '\xCC', '\xE4', '\x39', '\xC5', '\x36', '\xE3', '\xD5', '\xF0', '\x21', '\xEA', '\x2E', '\x53', '\x77', '\xF9', '\xDA', '\x83', '\xD8', '\x7D', '\xF7'}; + constexpr std::array messageSource = CRYPT_NAME("장애가 발생 하였습니다. STOVE 고객센터로 문의 바랍니다.", 0xF7530137154D8FE5ULL); const char* message = DecryptName<0xF7530137154D8FE5ULL>(messageSource); MessageBoxA(hWnd, FormatOwnedString(message).c_str(), caption, MB_OK); } @@ -317,9 +321,10 @@ void PurchaseResultCallback::operator()(Stove::PCSDK::CallbackResult callbackRes EncodeText(CP_ACP, std::wstring(reinterpret_cast(purchaseResult).GetCategoryId()))); } } else { - const char captionSource[] = {'\x71', '\x69', '\x98', '\x54', '\x7A', '\xC5', '\x83'}; + constexpr auto captionSourceText = CRYPT_NAME("메시지", 0x078333BB9725B7C9ULL); + const auto& captionSource = captionSourceText.data; const char* caption = DecryptName<0x078333BB9725B7C9ULL>(captionSource); - const std::array messageSource = {'\x67', '\x56', '\xBB', '\x1F', '\x15', '\xC2', '\xCB', '\xB2', '\x78', '\x08', '\xF8', '\xE9', '\x62', '\xAC', '\x54', '\xBF', '\x1A', '\x73', '\xB1', '\x06', '\x11', '\xBA', '\xC5', '\x2B', '\xF4', '\xE7', '\x4A', '\x9F', '\xE0', '\x43', '\x5B', '\xE6', '\x17', '\x07', '\xB9', '\x77', '\x60', '\xAE', '\x5C', '\xC5', '\x87', '\x0A', '\xAB', '\x09', '\x62', '\x43', '\x52', '\xD2', '\x11', '\x4B', '\xB1', '\x06', '\x11', '\xBA', '\xC5', '\x0B'}; + constexpr std::array messageSource = CRYPT_NAME("장애가 발생 하였습니다. STOVE 고객센터로 문의 바랍니다.", 0x0BEB63A5C905B3A7ULL); const char* message = DecryptName<0x0BEB63A5C905B3A7ULL>(messageSource); MessageBoxA(hWnd, FormatOwnedString(message).c_str(), caption, MB_OK); } @@ -436,7 +441,8 @@ void CategoryProductsCallback::operator()(Stove::PCSDK::CallbackResult callbackR // OFFSET: 0x0063CF60 // FUNCTION: fn_04786 EncryptedName<100, 0x3375B1C7DBB5FD55ULL>& AccessTokenFailureMessage::operator()() const { - const char source[] = {'\x95', '\x18', '\x0B', '\x0D', '\x77', '\x10', '\x55', '\x8A', '\x8A', '\x46', '\x48', '\xFB', '\x00', '\x7E', '\xCA', '\x87', '\xE8', '\x3D', '\x01', '\x14', '\x73', '\x68', '\x5B', '\x13', '\xE5', '\x29', '\x75', '\x08', '\x07', '\x0A', '\x55', '\xF3', '\xB2', '\x40', '\x72', '\x1C', '\x27', '\x91', '\xB2', '\xEB', '\x94', '\x2B', '\x09', '\x67', '\x78', '\x55', '\x5B', '\x13', '\xEC', '\x53', '\x74', '\x7D', '\x77', '\x10', '\x55', '\xF2', '\xA3', '\x41', '\x66', '\x6E', '\x0E', '\x91', '\xC5', '\xD5', '\xEA', '\x11', '\x99', '\xFB', '\x94', '\xE5', '\x3A', '\x65', '\x10', '\xDD', '\x05', '\x36', '\x77', '\x05', '\xC9', '\x8D', '\x90', '\x30', '\x02', '\x15', '\xE7', '\x08', '\xDB', '\xF3', '\x92', '\xDD', '\x0C', '\x02', '\x71', '\x49', '\xC1', '\xFC', '\xE1', '\x24', '\x9B', '\xDB'}; + constexpr auto sourceText = CRYPT_NAME("장애가 발생 하였습니다. 게임을 재실행 해주세요. 문제가 지속될 경우, STOVE 고객센터로 문의 바랍니다.", 0x3375B1C7DBB5FD55ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -444,7 +450,8 @@ EncryptedName<100, 0x3375B1C7DBB5FD55ULL>& AccessTokenFailureMessage::operator() // OFFSET: 0x0063D060 // FUNCTION: fn_04787 EncryptedName<100, 0x151F77EBEBBB2147ULL>& UserFailureMessage::operator()() const { - const char source[] = {'\x87', '\xC4', '\x05', '\x3D', '\x5B', '\xD6', '\x3F', '\xAC', '\x98', '\x9A', '\x46', '\xCB', '\x2C', '\xB8', '\xA0', '\xA1', '\xFA', '\xE1', '\x0F', '\x24', '\x5F', '\xAE', '\x31', '\x35', '\xF7', '\xF5', '\x7B', '\x38', '\x2B', '\xCC', '\x3F', '\xD5', '\xA0', '\x9C', '\x7C', '\x2C', '\x0B', '\x57', '\xD8', '\xCD', '\x86', '\xF7', '\x07', '\x57', '\x54', '\x93', '\x31', '\x35', '\xFE', '\x8F', '\x7A', '\x4D', '\x5B', '\xD6', '\x3F', '\xD4', '\xB1', '\x9D', '\x68', '\x5E', '\x22', '\x57', '\xAF', '\xF3', '\xF8', '\xCD', '\x97', '\xCB', '\xB8', '\x23', '\x50', '\x43', '\x02', '\x01', '\x0B', '\x06', '\x5B', '\xC3', '\xA3', '\xAB', '\x82', '\xEC', '\x0C', '\x25', '\xCB', '\xCE', '\xB1', '\xD5', '\x80', '\x01', '\x02', '\x32', '\x5D', '\x8F', '\xAB', '\xDA', '\xF3', '\xF8', '\x95', '\xEB'}; + constexpr auto sourceText = CRYPT_NAME("장애가 발생 하였습니다. 게임을 재실행 해주세요. 문제가 지속될 경우, STOVE 고객센터로 문의 바랍니다.", 0x151F77EBEBBB2147ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -452,7 +459,8 @@ EncryptedName<100, 0x151F77EBEBBB2147ULL>& UserFailureMessage::operator()() cons // OFFSET: 0x0063D160 // FUNCTION: fn_04788 EncryptedName<100, 0x4F1791FB1503C713ULL>& TokenCallbackFailureMessage::operator()() const { - const char source[] = {'\xD3', '\x22', '\xBD', '\xC3', '\x4B', '\x30', '\x37', '\xF6', '\xCC', '\x7C', '\xFE', '\x35', '\x3C', '\x5E', '\xA8', '\xFB', '\xAE', '\x07', '\xB7', '\xDA', '\x4F', '\x48', '\x39', '\x6F', '\xA3', '\x13', '\xC3', '\xC6', '\x3B', '\x2A', '\x37', '\x8F', '\xF4', '\x7A', '\xC4', '\xD2', '\x1B', '\xB1', '\xD0', '\x97', '\xD2', '\x11', '\xBF', '\xA9', '\x44', '\x75', '\x39', '\x6F', '\xAA', '\x69', '\xC2', '\xB3', '\x4B', '\x30', '\x37', '\x8E', '\xE5', '\x7B', '\xD0', '\xA0', '\x32', '\xB1', '\xA7', '\xA9', '\xAC', '\x2B', '\x2F', '\x35', '\xA8', '\xC5', '\x58', '\x19', '\x56', '\xE7', '\xB3', '\xF8', '\x4B', '\x25', '\xAB', '\xF1', '\xD6', '\x0A', '\xB4', '\xDB', '\xDB', '\x28', '\xB9', '\x8F', '\xD4', '\xE7', '\xBA', '\xCC', '\x4D', '\x69', '\xA3', '\x80', '\xA7', '\x1E', '\x2D', '\x15'}; + constexpr auto sourceText = CRYPT_NAME("장애가 발생 하였습니다. 게임을 재실행 해주세요. 문제가 지속될 경우, STOVE 고객센터로 문의 바랍니다.", 0x4F1791FB1503C713ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -474,7 +482,8 @@ void InitializeCallback::operator()(Stove::PCSDK::CallbackResult callbackResult) // OFFSET: 0x0063D490 // FUNCTION: fn_04790 EncryptedName<129, 0x2D3B15774149D5DDULL>& PurchaseCheckingMessage::operator()() const { - const char source[] = {'\x63', '\x13', '\x89', '\x8D', '\xB2', '\xCE', '\x1B', '\x9C', '\x65', '\x6D', '\x8C', '\x61', '\xBF', '\xBB', '\xFB', '\xE3', '\xFD', '\x14', '\x96', '\x81', '\xA3', '\xA1', '\xF4', '\x99', '\x04', '\xFB', '\x67', '\x6F', '\x59', '\x1F', '\x31', '\x27', '\x83', '\xB3', '\x2F', '\x71', '\x47', '\x25', '\x0B', '\xEC', '\x0B', '\x15', '\x8E', '\x60', '\x57', '\x46', '\x4F', '\x42', '\xAB', '\xB0', '\x69', '\x87', '\x93', '\xD5', '\xF7', '\xEC', '\x2B', '\x6A', '\xE8', '\xFD', '\xDA', '\x35', '\x8A', '\x95', '\x65', '\x10', '\x69', '\xFE', '\xB8', '\xA2', '\xDA', '\x0D', '\x15', '\x11', '\x69', '\x1A', '\xBF', '\xBB', '\xFB', '\xE3', '\x80', '\xF5', '\xF0', '\xB7', '\xB1', '\xA5', '\xFB', '\x96', '\xFD', '\x61', '\xE4', '\xF6', '\xD8', '\xAB', '\xE4', '\x0D', '\x63', '\x13', '\x89', '\x8D', '\xB2', '\xCE', '\xFB', '\xE1', '\xFD', '\x14', '\xED', '\xFA', '\x84', '\x35', '\xFA', '\xDB', '\x6C', '\x0B', '\xFC', '\x8A', '\xC3', '\xDA', '\x8F', '\xF4', '\xF3', '\x8B', '\x79', '\x71', '\x47', '\x25', '\x0B', '\x1D', '\xDD'}; + constexpr auto sourceText = CRYPT_NAME("\xBE\xC6\xC0\xCC\xC5\xDB \xB1\xB8\xB8\xC5 \xC8\xAE\xC0\xCE \xC1\xDF\xC0\xD4\xB4\xCF\xB4\xD9....\x0A\x0A\x0A^ff0000\xC1\xD6\xC0\xC7! Stove \xC6\xE4\xC0\xCC\xC1\xF6\xBF\xA1\xBC\xAD \xB1\xB8\xB8\xC5 \xBF\xCF\xB7\xE1 \xC8\xC4 [\xC8\xAE\xC0\xCE] \xB9\xF6\xC6\xB0\xC0\xBB \xB4\xAD\xB7\xAF\xBE\xDF \xBE\xC6\xC0\xCC\xC5\xDB\xC0\xCC \xC1\xA4\xBB\xF3 \xC1\xF6\xB1\xDE\xB5\xCB\xB4\xCF\xB4\xD9.^000000", 0x2D3B15774149D5DDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -495,14 +504,17 @@ void ConfirmPurchaseCallback::operator()(Stove::PCSDK::CallbackResult callbackRe } } else { g_windowMgr.SendNotice(UIM_OPENCHATWND, 0, 0, 0, 0, 0); - const char noticeSource[] = {'\x50', '\x23', '\x4B', '\xBE', '\x58', '\x4F', '\xDF', '\xDF', '\x27', '\x5B', '\x3F', '\xBE', '\x36', '\x47', '\x33', '\x41', '\x5F', '\x63', '\x4E', '\xBB', '\x59', '\x48', '\x4B', '\xB8', '\xCF', '\x9B'}; + constexpr auto noticeSourceText = CRYPT_NAME("구매된 아이템이 없습니다.", 0x61FF87ED7BF39BE1ULL); + const auto& noticeSource = noticeSourceText.data; const char* notice = DecryptName<0x61FF87ED7BF39BE1ULL>(noticeSource); g_windowMgr.SendNotice(UIM_PUSHINTOCHATHISTORY, reinterpret_cast(notice), 0xFFE6E6, 0, 0, 0); } } else { - const char captionSource[] = {'\x8B', '\xF9', '\x8E', '\xCC', '\x7C', '\xBB', '\x39'}; + constexpr auto captionSourceText = CRYPT_NAME("메시지", 0x2D394DBD0F332733ULL); + const auto& captionSource = captionSourceText.data; const char* caption = DecryptName<0x2D394DBD0F332733ULL>(captionSource); - const char messageSource[] = {'\x3F', '\x60', '\x99', '\xDB', '\xD5', '\x9E', '\xB9', '\xC4', '\x20', '\x3E', '\xDA', '\x2D', '\xA2', '\xF0', '\x26', '\xC9', '\x42', '\x45', '\x93', '\xC2', '\xD1', '\xE6', '\xB7', '\x5D', '\xAC', '\xD1', '\x68', '\x5B', '\x20', '\x1F', '\x29', '\x90', '\x4F', '\x31', '\x9B', '\xB3', '\xA0', '\xF2', '\x2E', '\xB3', '\xDF', '\x3C', '\x89', '\xCD', '\xA2', '\x1F', '\x20', '\xA4', '\x49', '\x7D', '\x93', '\xC2', '\xD1', '\xE6', '\xB7', '\x7D'}; + constexpr auto messageSourceText = CRYPT_NAME("장애가 발생 하였습니다. STOVE 고객센터로 문의 바랍니다.", 0x7D993F650D2785FFULL); + const auto& messageSource = messageSourceText.data; const char* message = DecryptName<0x7D993F650D2785FFULL>(messageSource); MessageBoxA(hWnd, FormatOwnedString(message).c_str(), caption, MB_OK); } @@ -524,7 +536,8 @@ bool CStoveMgr::Initialize() { } Stove::PCSDK::Base::StovePCInitializeParam param; - const char sandboxSource[] = {'\x96', '\x7E', '\x5B', '\xCE', '\x35', '\x9E', '\x50', '\x3A', '\xD8', '\x63', '\x4B', '\xC3', '\x2C', '\x83', '\x0F'}; + constexpr auto sandboxSourceText = CRYPT_NAME("/stove_sandbox", 0x490FFB43A12F0DB9ULL); + const auto& sandboxSource = sandboxSourceText.data; const char* sandbox = DecryptName<0x490FFB43A12F0DB9ULL>(sandboxSource); if (std::strstr(g_commandLine, sandbox) != nullptr) { this->m_environment = 1; @@ -533,7 +546,8 @@ bool CStoveMgr::Initialize() { param.SetApplicationKey(L"6b57af29764992a85cf793b01d4af15be6047715fd5f4687b23d0a1ba02337f5"); this->m_applicationId = L"SB__SH_IPJVFX"; } else { - const char liveSource[] = {'\x5E', '\x8A', '\x2D', '\x9A', '\xF7', '\x78', '\x3A', '\xFD', '\x18', '\x8F', '\x3C', '\xF5'}; + constexpr auto liveSourceText = CRYPT_NAME("/stove_live", 0x91651D81F559F971ULL); + const auto& liveSource = liveSourceText.data; const char* live = DecryptName<0x91651D81F559F971ULL>(liveSource); if (std::strstr(g_commandLine, live) != nullptr) { this->m_environment = 2; @@ -544,12 +558,14 @@ bool CStoveMgr::Initialize() { } } - const char skipRestartSource[] = {'\x24', '\x08', '\xAB', '\x0E', '\x3D', '\x02', '\x8E', '\x10', '\x6A', '\x1C', '\x80', '\x15', '\x24', '\x08', '\xBD', '\x73'}; + constexpr auto skipRestartSourceText = CRYPT_NAME("/stove_cag_tool", 0x73D1674B61DF7B0BULL); + const auto& skipRestartSource = skipRestartSourceText.data; const char* skipRestart = DecryptName<0x73D1674B61DF7B0BULL>(skipRestartSource); if (std::strstr(g_commandLine, skipRestart) == nullptr && Base_RestartAppIfNecessary(¶m) == true) { - const char captionSource[] = {'\x69', '\xC7', '\x20', '\x4C', '\xAA', '\x7D', '\x0F'}; + constexpr auto captionSourceText = CRYPT_NAME("메시지", 0x0F0F8B6B8F9D19D1ULL); + const auto& captionSource = captionSourceText.data; const char* caption = DecryptName<0x0F0F8B6B8F9D19D1ULL>(captionSource); - const std::array messageSource = {'\x3E', '\x17', '\x5A', '\x5B', '\xC0', '\x23', '\x4A', '\x75', '\xDB', '\x90', '\xF5', '\xE1', '\x1B', '\xF3', '\x49', '\x77', '\xD5', '\xC5', '\x15', '\xE8', '\x4E', '\xC4', '\x57', '\xF9', '\xD0', '\xA4', '\xF2', '\xCD', '\x62', '\xDB', '\xAF', '\x18', '\xBB', '\xDF', '\x89', '\x92', '\x41', '\x03'}; + constexpr std::array messageSource = CRYPT_NAME("Stove 클라이언트를 통해 실행해 주세요", 0xD98F03A52D35636DULL); const char* message = DecryptName<0xD98F03A52D35636DULL>(messageSource); MessageBoxA(hWnd, FormatOwnedString(message).c_str(), caption, MB_OK); return false; @@ -565,9 +581,10 @@ bool CStoveMgr::Initialize() { return true; } - const char captionSource[] = {'\x0F', '\xD9', '\xEA', '\x0E', '\xEA', '\x11', '\x2B'}; + constexpr auto captionSourceText = CRYPT_NAME("메시지", 0x812BE72BCD5707B7ULL); + const auto& captionSource = captionSourceText.data; const char* caption = DecryptName<0x812BE72BCD5707B7ULL>(captionSource); - const std::array messageSource = {'\x66', '\xF7', '\x23', '\x21', '\x43', '\x34', '\xC0', '\x99', '\x5D', '\x1D', '\x5F', '\x0C', '\xDD', '\x78', '\xE7', '\x95', '\x81', '\x80', '\x58', '\x11', '\xB3', '\x48', '\xE8', '\xE6', '\x08', '\x1D', '\x2F', '\x03', '\xA3', '\x5C', '\xE7', '\xE2', '\x81', '\xFC', '\x21', '\x60', '\x82', '\x48', '\xF2', '\xED', '\x6E', '\x89', '\x46', '\xF9', '\x63'}; + constexpr std::array messageSource = CRYPT_NAME("필수 사전 작업이 실패하여 게임을 종료합니다.", 0x59278F63D79F3DA1ULL); const char* message = DecryptName<0x59278F63D79F3DA1ULL>(messageSource); MessageBoxA(hWnd, FormatOwnedString(message).c_str(), caption, MB_OK); return false; @@ -585,7 +602,7 @@ const char* CStoveMgr::GetAccessToken() { return this->m_accessToken; } - const std::array source = {'\xA7', '\xEF', '\x70', '\x24', '\x2C', '\x83', '\x6D'}; + constexpr std::array source = CRYPT_NAME("메시지", 0x1D6D75EDE7CD311FULL); thread_local EncryptedName caption(source); MessageBoxA(hWnd, FormatOwnedString(AccessTokenFailureMessage()().Text()).c_str(), caption.Text(), MB_OK); PostQuitMessage(0); @@ -601,7 +618,8 @@ void CStoveMgr::FetchUser() { StringFormat(this->m_memberNumber, sizeof(this->m_memberNumber), _TRUNCATE, "%llu", user.GetMemberNumber()); StringFormat(this->m_gameUserId, sizeof(this->m_gameUserId), _TRUNCATE, "%llu", user.GetGameUserId()); } else { - const char source[] = {'\xB9', '\x89', '\x2A', '\x1C', '\xD2', '\x73', '\x53'}; + constexpr auto sourceText = CRYPT_NAME("메시지", 0xD1538513DF975701ULL); + const auto& source = sourceText.data; thread_local EncryptedName caption(source); MessageBoxA(hWnd, FormatOwnedString(UserFailureMessage()().Text()).c_str(), caption.Text(), MB_OK); PostQuitMessage(0); @@ -634,16 +652,20 @@ void CStoveMgr::StartPurchase(const std::vector& items) { } while (g_stoveWaitingCallback); if (this->m_purchaseUrl.size() == 0) { - const char parametersSource[] = {'\x05', '\x47', '\x7B', '\xE5', '\xA8', '\x7F', '\xFC', '\x46', '\x0E', '\x40', '\x21', '\xFA', '\xB5', '\x36', '\xA7', '\x06', '\x1B', '\x56', '\x21', '\xF6', '\xB4', '\x28', '\xFC', '\x1A', '\x08', '\x41', '\x79', '\xFC', '\xB8', '\x20', '\xFC', '\x3B', '\x2C', '\x74', '\x41', '\xD4', '\x89', '\x0A', '\x98', '\x36', '\x24', '\x7D', '\x4B', '\x95'}; + constexpr auto parametersSourceText = CRYPT_NAME("https://cs.onstove.com/service/RAGNAROK_IND", 0x69D345DB950F336DULL); + const auto& parametersSource = parametersSourceText.data; const char* parameters = DecryptName<0x69D345DB950F336DULL>(parametersSource); - const char fileSource[] = {'\x19', '\x6F', '\x87', '\x8F', '\xF4', '\x1F', '\xBE', '\xE8', '\x12', '\x68', '\xDD', '\x90', '\xE9', '\x56', '\xE5', '\xA8', '\x07', '\x7E', '\xDD', '\x9C', '\xE8', '\x48', '\xBE', '\xB4', '\x14', '\x69', '\x85', '\x96', '\xE4', '\x40', '\xBE', '\x95', '\x30', '\x5C', '\xBD', '\xBE', '\xD5', '\x6A', '\xDA', '\x98', '\x38', '\x55', '\xB7', '\xFF'}; + constexpr auto fileSourceText = CRYPT_NAME("https://cs.onstove.com/service/RAGNAROK_IND", 0xC7912587FFF31B71ULL); + const auto& fileSource = fileSourceText.data; const char* file = DecryptName<0xC7912587FFF31B71ULL>(fileSource); - const char verbSource[] = {'\xFA', '\x25', '\x24', '\x11', '\xFD'}; + constexpr auto verbSourceText = CRYPT_NAME("OPEN", 0x8F1B5BFD5F6175B5ULL); + const auto& verbSource = verbSourceText.data; const char* verb = DecryptName<0x8F1B5BFD5F6175B5ULL>(verbSource); ShellExecuteA(nullptr, verb, file, parameters, nullptr, SW_SHOWNORMAL); } else { const char* url = this->m_purchaseUrl.c_str(); - const char verbSource[] = {'\x60', '\xCF', '\xF6', '\x95', '\xEF'}; + constexpr auto verbSourceText = CRYPT_NAME("OPEN", 0x9B17C9EFDBB39F2FULL); + const auto& verbSource = verbSourceText.data; const char* verb = DecryptName<0x9B17C9EFDBB39F2FULL>(verbSource); ShellExecuteA(nullptr, verb, url, url, nullptr, SW_SHOWNORMAL); if (g_windowMgr.Confirm(PurchaseCheckingMessage()().Text(), 2, true, false, 0, "Message", 250, 170, 0) == 187) { @@ -675,7 +697,8 @@ void TermsAgreementCallback::operator()(Stove::PCSDK::CallbackResult callbackRes g_modeMgr.GetGameMode()->SendMsg(MM_REQUEST_CASH_SHOP, 0, 0, 0, 0); } else { std::string path = EncodeText(CP_ACP, std::wstring(url)); - const char source[] = {'\x68', '\x51', '\x42', '\x23', '\x03'}; + constexpr auto sourceText = CRYPT_NAME("OPEN", 0x2FF3C5036D070127ULL); + const auto& source = sourceText.data; thread_local EncryptedName verb(source); ShellExecuteA(nullptr, verb.Text(), path.c_str(), path.c_str(), nullptr, SW_SHOWNORMAL); } diff --git a/Source/Contents/Achievement/AchievementMgr.cpp b/Source/Contents/Achievement/AchievementMgr.cpp index 33f091008..71524cc10 100644 --- a/Source/Contents/Achievement/AchievementMgr.cpp +++ b/Source/Contents/Achievement/AchievementMgr.cpp @@ -4,6 +4,7 @@ #include "Utility/Cipher/XorBytes.h" #include "Utility/Text/FormatString.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" extern "C" { #include @@ -219,8 +220,8 @@ bool CAchievementMgr::LoadAchievementInfo() { lua_register(lua.GetState(), "InsertAchieveRewardBuff", CAchievementMgr::L_InsertAchieveRewardBuff); lua_register(lua.GetState(), "InsertAchieveUIType", CAchievementMgr::L_InsertAchieveUIType); lua_register(lua.GetState(), "SetAchieveIDByTab", CAchievementMgr::L_SetAchieveIDByTab); - const char source[] = {'\xCA', '\x74', '\x5C', '\xD5', '\x26', '\x96', '\x53', '\x08', '\xDA', '\x65', '\x46', '\xC4', '\x35', '\x9E', - '\x62', '\x2C', '\xD7', '\x79', '\x70', '\xCD', '\x2A', '\x88', '\x7B', '\x67', '\xD5', '\x78', '\x4D', '\xA1'}; + constexpr auto sourceText = CRYPT_NAME("system\\Achievement_list.lub", 0x490FFB43A12F0DB9ULL); + const auto& source = sourceText.data; thread_local EncryptedName path(source); if (luaL_loadfile(lua.GetState(), path.Text()) != 0 || lua_pcall(lua.GetState(), 0, 0, 0) != 0) { MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "CAchievementMgr", 0); diff --git a/Source/Contents/Actors/Resources/BodyResources.cpp b/Source/Contents/Actors/Resources/BodyResources.cpp index 75e06ec36..8f2b24529 100644 --- a/Source/Contents/Actors/Resources/BodyResources.cpp +++ b/Source/Contents/Actors/Resources/BodyResources.cpp @@ -4,6 +4,7 @@ #include "Contents/Jobs/JobId.h" #include "Utility/Cipher/XorBytes.h" #include "Utility/Text/FormatString.h" +#include "Utility/Cipher/CryptName.h" #include #include @@ -4113,7 +4114,8 @@ std::string EquipmentResourceMgr::GetBodyRacePrefix(int job) { // OFFSET: 0x00DCA170 // FUNCTION: fn_23035 EncryptedName<14, 0x072D2D872D259D5BULL>& WizardBodyPath1() { - const char source[] = {'\x9B', '\x3A', '\xE5', '\xD7', '\x32', '\xC8', '\x71', '\xC7', '\xFC', '\x5D', '\xDF', '\x98', '\x62', '\x2D'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x072D2D872D259D5BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4121,7 +4123,8 @@ EncryptedName<14, 0x072D2D872D259D5BULL>& WizardBodyPath1() { // OFFSET: 0x00DCA240 // FUNCTION: fn_23036 EncryptedName<18, 0x9BE3EF737387AD79ULL>& PriestBodyPath1() { - const char source[] = {'\xBE', '\x6C', '\x3F', '\xDD', '\xCE', '\x55', '\x25', '\x35', '\x25', '\x6A', '\x46', '\xCB', '\xDD', '\x52', '\x59', '\x5D', '\xD7', '\xAD'}; + constexpr auto sourceText = CRYPT_NAME("프리스트\\프리스트", 0x9BE3EF737387AD79ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4129,7 +4132,8 @@ EncryptedName<18, 0x9BE3EF737387AD79ULL>& PriestBodyPath1() { // OFFSET: 0x00DCA310 // FUNCTION: fn_23037 EncryptedName<14, 0xB96B77B7255F8569ULL>& AssassinBodyPath1() { - const char source[] = {'\xD7', '\x6B', '\xE3', '\x99', '\x0A', '\xB2', '\x37', '\x07', '\x87', '\x39', '\xE3', '\x98', '\x72', '\x77'}; + constexpr auto sourceText = CRYPT_NAME("어세신\\어세신", 0xB96B77B7255F8569ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4137,7 +4141,8 @@ EncryptedName<14, 0xB96B77B7255F8569ULL>& AssassinBodyPath1() { // OFFSET: 0x00DCA3E0 // FUNCTION: fn_23038 EncryptedName<14, 0x11CB35636377DD07ULL>& SageBodyPath1() { - const char source[] = {'\xBB', '\x61', '\xB7', '\xAF', '\xA2', '\xC3', '\x97', '\xAD', '\xBB', '\x1D', '\xBB', '\xA2', '\x95', '\x35'}; + constexpr auto sourceText = CRYPT_NAME("세이지\\세이지", 0x11CB35636377DD07ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4145,7 +4150,8 @@ EncryptedName<14, 0x11CB35636377DD07ULL>& SageBodyPath1() { // OFFSET: 0x00DCA4B0 // FUNCTION: fn_23039 EncryptedName<10, 0x4755C1355575FD37ULL>& BardBodyPath1() { - const char source[] = {'\x8E', '\x24', '\xC0', '\xB0', '\x69', '\x78', '\x8C', '\xF2', '\xD2', '\xFD'}; + constexpr auto sourceText = CRYPT_NAME("바드\\바드", 0x4755C1355575FD37ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4153,7 +4159,8 @@ EncryptedName<10, 0x4755C1355575FD37ULL>& BardBodyPath1() { // OFFSET: 0x00DCA580 // FUNCTION: fn_23040 EncryptedName<10, 0x9D8F2D37BFFD61B7ULL>& DancerBodyPath1() { - const char source[] = {'\x0E', '\xCA', '\x35', '\x4E', '\x6B', '\x94', '\x24', '\x55', '\x46', '\x61'}; + constexpr auto sourceText = CRYPT_NAME("무희\\무희", 0x9D8F2D37BFFD61B7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4161,7 +4168,8 @@ EncryptedName<10, 0x9D8F2D37BFFD61B7ULL>& DancerBodyPath1() { // OFFSET: 0x00DCA650 // FUNCTION: fn_23041 EncryptedName<10, 0x79DF094DD9616575ULL>& MonkBodyPath1() { - const char source[] = {'\xCD', '\x9C', '\xA4', '\x70', '\x11', '\xB1', '\x26', '\xBC', '\xDC', '\x65'}; + constexpr auto sourceText = CRYPT_NAME("몽크\\몽크", 0x79DF094DD9616575ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4169,7 +4177,8 @@ EncryptedName<10, 0x79DF094DD9616575ULL>& MonkBodyPath1() { // OFFSET: 0x00DCA720 // FUNCTION: fn_23042 EncryptedName<18, 0x038535BB092533B7ULL>& AlchemistBodyPath1() { - const char source[] = {'\x08', '\x9F', '\x94', '\xD4', '\x07', '\xCF', '\x3E', '\xE4', '\xEB', '\x8C', '\x89', '\xB8', '\x66', '\x89', '\x7F', '\xB8', '\x50', '\x33'}; + constexpr auto sourceText = CRYPT_NAME("연금술사\\연금술사", 0x038535BB092533B7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4177,7 +4186,8 @@ EncryptedName<18, 0x038535BB092533B7ULL>& AlchemistBodyPath1() { // OFFSET: 0x00DCA7F0 // FUNCTION: fn_23043 EncryptedName<10, 0xFB2BC75769E777D3ULL>& RogueBodyPath1() { - const char source[] = {'\x64', '\xB9', '\x56', '\xBE', '\x0B', '\x70', '\xE5', '\x4A', '\x04', '\x77'}; + constexpr auto sourceText = CRYPT_NAME("로그\\로그", 0xFB2BC75769E777D3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4185,7 +4195,8 @@ EncryptedName<10, 0xFB2BC75769E777D3ULL>& RogueBodyPath1() { // OFFSET: 0x00DCA8C0 // FUNCTION: fn_23044 EncryptedName<14, 0xB5D7B5AF4FEDFF57ULL>& NoviceBodyPath1() { - const char source[] = {'\x94', '\x35', '\x57', '\xF7', '\x6F', '\x6F', '\x8B', '\x76', '\x9D', '\x45', '\x55', '\x8F', '\x75', '\xB5'}; + constexpr auto sourceText = CRYPT_NAME("초보자\\초보자", 0xB5D7B5AF4FEDFF57ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4193,7 +4204,8 @@ EncryptedName<14, 0xB5D7B5AF4FEDFF57ULL>& NoviceBodyPath1() { // OFFSET: 0x00DCA990 // FUNCTION: fn_23045 EncryptedName<10, 0x9B9D51AD3515F779ULL>& SwordmanBodyPath1() { - const char source[] = {'\xC9', '\x3C', '\xAE', '\xD2', '\xF1', '\xE1', '\x56', '\x20', '\x9E', '\xF7'}; + constexpr auto sourceText = CRYPT_NAME("검사\\검사", 0x9B9D51AD3515F779ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4201,7 +4213,8 @@ EncryptedName<10, 0x9B9D51AD3515F779ULL>& SwordmanBodyPath1() { // OFFSET: 0x00DCAA60 // FUNCTION: fn_23046 EncryptedName<14, 0xB5F3F779237315F3ULL>& MagicianBodyPath1() { - const char source[] = {'\x4B', '\xA3', '\xCA', '\xDE', '\xC2', '\x10', '\xAF', '\x0D', '\x45', '\xAC', '\x8E', '\x98', '\x9E', '\xF7'}; + constexpr auto sourceText = CRYPT_NAME("마법사\\마법사", 0xB5F3F779237315F3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4209,7 +4222,8 @@ EncryptedName<14, 0xB5F3F779237315F3ULL>& MagicianBodyPath1() { // OFFSET: 0x00DCAB30 // FUNCTION: fn_23047 EncryptedName<10, 0x67DD5BAB1919D9D1ULL>& ArcherBodyPath1() { - const char source[] = {'\x60', '\x1A', '\xA5', '\xEF', '\xF7', '\xEA', '\x1E', '\xDB', '\x27', '\xD9'}; + constexpr auto sourceText = CRYPT_NAME("궁수\\궁수", 0x67DD5BAB1919D9D1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4217,7 +4231,8 @@ EncryptedName<10, 0x67DD5BAB1919D9D1ULL>& ArcherBodyPath1() { // OFFSET: 0x00DCAC00 // FUNCTION: fn_23048 EncryptedName<14, 0x91493751EF33B5FDULL>& AcolyteBodyPath1() { - const char source[] = {'\x41', '\x0F', '\xF2', '\x18', '\x91', '\xED', '\x15', '\x2D', '\x47', '\x74', '\xC4', '\x2F', '\x8B', '\x37'}; + constexpr auto sourceText = CRYPT_NAME("성직자\\성직자", 0x91493751EF33B5FDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4225,7 +4240,8 @@ EncryptedName<14, 0x91493751EF33B5FDULL>& AcolyteBodyPath1() { // OFFSET: 0x00DCACD0 // FUNCTION: fn_23049 EncryptedName<10, 0x6BC977B3B5993503ULL>& MerchantBodyPath1() { - const char source[] = {'\xB8', '\xC6', '\x59', '\x7B', '\xEF', '\xCC', '\x3A', '\xAB', '\xCD', '\x35'}; + constexpr auto sourceText = CRYPT_NAME("상인\\상인", 0x6BC977B3B5993503ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4233,7 +4249,8 @@ EncryptedName<10, 0x6BC977B3B5993503ULL>& MerchantBodyPath1() { // OFFSET: 0x00DCADA0 // FUNCTION: fn_23050 EncryptedName<10, 0xB7A76BF9CD41F99FULL>& ThiefBodyPath1() { - const char source[] = {'\x2A', '\x4C', '\xF4', '\x02', '\xA5', '\xDE', '\x12', '\x02', '\x50', '\xF9'}; + constexpr auto sourceText = CRYPT_NAME("도둑\\도둑", 0xB7A76BF9CD41F99FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4241,7 +4258,8 @@ EncryptedName<10, 0xB7A76BF9CD41F99FULL>& ThiefBodyPath1() { // OFFSET: 0x00DCAE70 // FUNCTION: fn_23051 EncryptedName<10, 0x732B390D63FD47D7ULL>& ThiefBodyPath2() { - const char source[] = {'\x62', '\xF2', '\x48', '\xAC', '\x51', '\x8C', '\x9E', '\xC6', '\x18', '\x47'}; + constexpr auto sourceText = CRYPT_NAME("도둑\\도둑", 0x732B390D63FD47D7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4249,7 +4267,8 @@ EncryptedName<10, 0x732B390D63FD47D7ULL>& ThiefBodyPath2() { // OFFSET: 0x00DCAF40 // FUNCTION: fn_23052 EncryptedName<14, 0x1FDB81175D1557E3ULL>& NoviceBodyPath2() { - const char source[] = {'\x20', '\x9D', '\xAF', '\xE5', '\xD7', '\x5B', '\x87', '\xDC', '\x29', '\xED', '\xAD', '\x9D', '\xCD', '\x81'}; + constexpr auto sourceText = CRYPT_NAME("초보자\\초보자", 0x1FDB81175D1557E3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4257,7 +4276,8 @@ EncryptedName<14, 0x1FDB81175D1557E3ULL>& NoviceBodyPath2() { // OFFSET: 0x00DCB010 // FUNCTION: fn_23053 EncryptedName<10, 0xE3FB23537D2785BFULL>& SwordmanBodyPath2() { - const char source[] = {'\x0F', '\x4E', '\x9C', '\x9A', '\x0F', '\x93', '\x30', '\x58', '\x58', '\x85'}; + constexpr auto sourceText = CRYPT_NAME("검사\\검사", 0xE3FB23537D2785BFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4265,7 +4285,8 @@ EncryptedName<10, 0xE3FB23537D2785BFULL>& SwordmanBodyPath2() { // OFFSET: 0x00DCB0E0 // FUNCTION: fn_23054 EncryptedName<14, 0x8BBF792B47E72173ULL>& MagicianBodyPath2() { - const char source[] = {'\xCB', '\x97', '\x5E', '\xBA', '\x90', '\x9E', '\xE3', '\x33', '\xC5', '\x98', '\x1A', '\xFC', '\xCC', '\x79'}; + constexpr auto sourceText = CRYPT_NAME("마법사\\마법사", 0x8BBF792B47E72173ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4273,7 +4294,8 @@ EncryptedName<14, 0x8BBF792B47E72173ULL>& MagicianBodyPath2() { // OFFSET: 0x00DCB1B0 // FUNCTION: fn_23055 EncryptedName<10, 0xB3CF9BEB7963DB89ULL>& ArcherBodyPath2() { - const char source[] = {'\x38', '\x18', '\xDF', '\x8F', '\xB7', '\x2A', '\x0C', '\x0F', '\x7F', '\xDB'}; + constexpr auto sourceText = CRYPT_NAME("궁수\\궁수", 0xB3CF9BEB7963DB89ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4281,7 +4303,8 @@ EncryptedName<10, 0xB3CF9BEB7963DB89ULL>& ArcherBodyPath2() { // OFFSET: 0x00DCB280 // FUNCTION: fn_23056 EncryptedName<14, 0x71A509DB43792991ULL>& AcolyteBodyPath2() { - const char source[] = {'\x2D', '\x93', '\xB8', '\xB4', '\x1B', '\xD3', '\xF9', '\xCD', '\x2B', '\xE8', '\x8E', '\x83', '\x01', '\x09'}; + constexpr auto sourceText = CRYPT_NAME("성직자\\성직자", 0x71A509DB43792991ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4289,7 +4312,8 @@ EncryptedName<14, 0x71A509DB43792991ULL>& AcolyteBodyPath2() { // OFFSET: 0x00DCB350 // FUNCTION: fn_23057 EncryptedName<10, 0xDD69EDFFA18F537DULL>& MerchantBodyPath2() { - const char source[] = {'\xC6', '\xA0', '\x4F', '\x6F', '\xA3', '\x56', '\x9A', '\x1D', '\xB3', '\x53'}; + constexpr auto sourceText = CRYPT_NAME("상인\\상인", 0xDD69EDFFA18F537DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4297,7 +4321,8 @@ EncryptedName<10, 0xDD69EDFFA18F537DULL>& MerchantBodyPath2() { // OFFSET: 0x00DCB420 // FUNCTION: fn_23058 EncryptedName<10, 0xFFBF43D1FFD5FF49ULL>& ThiefBodyPath3() { - const char source[] = {'\xFC', '\x4A', '\x60', '\x30', '\x8D', '\xF6', '\x0A', '\x4A', '\x86', '\xFF'}; + constexpr auto sourceText = CRYPT_NAME("도둑\\도둑", 0xFFBF43D1FFD5FF49ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4305,7 +4330,8 @@ EncryptedName<10, 0xFFBF43D1FFD5FF49ULL>& ThiefBodyPath3() { // OFFSET: 0x00DCB4F0 // FUNCTION: fn_23059 EncryptedName<10, 0xEB3D4FAB0FC183DBULL>& KnightBodyPath1() { - const char source[] = {'\x6A', '\x61', '\x7A', '\xE8', '\xF7', '\xFE', '\xDF', '\x50', '\x3C', '\x83'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0xEB3D4FAB0FC183DBULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4313,7 +4339,8 @@ EncryptedName<10, 0xEB3D4FAB0FC183DBULL>& KnightBodyPath1() { // OFFSET: 0x00DCB5C0 // FUNCTION: fn_23060 EncryptedName<18, 0x8F3F2FA959977F9FULL>& PriestBodyPath2() { - const char source[] = {'\x58', '\xBE', '\x2F', '\xF7', '\x14', '\x95', '\xF9', '\x21', '\xC3', '\xB8', '\x56', '\xE1', '\x07', '\x92', '\x85', '\x49', '\x31', '\x7F'}; + constexpr auto sourceText = CRYPT_NAME("프리스트\\프리스트", 0x8F3F2FA959977F9FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4321,7 +4348,8 @@ EncryptedName<18, 0x8F3F2FA959977F9FULL>& PriestBodyPath2() { // OFFSET: 0x00DCB690 // FUNCTION: fn_23061 EncryptedName<14, 0xE51B29334D353B81ULL>& WizardBodyPath2() { - const char source[] = {'\x41', '\x9C', '\xF5', '\xB7', '\x86', '\xCC', '\x47', '\x25', '\x26', '\xFB', '\xCF', '\xF8', '\xD6', '\x29'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0xE51B29334D353B81ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4329,7 +4357,8 @@ EncryptedName<14, 0xE51B29334D353B81ULL>& WizardBodyPath2() { // OFFSET: 0x00DCB760 // FUNCTION: fn_23062 EncryptedName<14, 0x8B3FA35B5BDDDF89ULL>& BlacksmithBodyPath1() { - const char source[] = {'\x48', '\x79', '\x1E', '\xED', '\xEB', '\x5B', '\x63', '\x4A', '\x2F', '\x1C', '\x6B', '\xEB', '\xA3', '\xA3'}; + constexpr auto sourceText = CRYPT_NAME("제철공\\제철공", 0x8B3FA35B5BDDDF89ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4337,7 +4366,8 @@ EncryptedName<14, 0x8B3FA35B5BDDDF89ULL>& BlacksmithBodyPath1() { // OFFSET: 0x00DCB830 // FUNCTION: fn_23063 EncryptedName<10, 0x7FE563BD3FB7F925ULL>& HunterBodyPath1() { - const char source[] = {'\xE2', '\x1C', '\x72', '\xF2', '\xE1', '\xA4', '\x00', '\xBA', '\xE8', '\xF9'}; + constexpr auto sourceText = CRYPT_NAME("헌터\\헌터", 0x7FE563BD3FB7F925ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4345,7 +4375,8 @@ EncryptedName<10, 0x7FE563BD3FB7F925ULL>& HunterBodyPath1() { // OFFSET: 0x00DCB900 // FUNCTION: fn_23064 EncryptedName<14, 0x5D6B3B1DEB2397B1ULL>& AssassinBodyPath2() { - const char source[] = {'\x0F', '\x79', '\x9F', '\x57', '\xA0', '\xFE', '\x37', '\xE3', '\x5F', '\x2B', '\x9F', '\x56', '\xD8', '\x3B'}; + constexpr auto sourceText = CRYPT_NAME("어세신\\어세신", 0x5D6B3B1DEB2397B1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4353,7 +4384,8 @@ EncryptedName<14, 0x5D6B3B1DEB2397B1ULL>& AssassinBodyPath2() { // OFFSET: 0x00DCB9D0 // FUNCTION: fn_23065 EncryptedName<28, 0x7DB1050779034DE7ULL>& PecoKnightBodyPath1() { - const char source[] = {'\x21', '\xA9', '\xC7', '\xA3', '\xC1', '\xE1', '\x75', '\xA7', '\xB8', '\xFC', '\xE1', '\xC2', '\xE0', '\x59', '\x77', '\x99', '\x23', '\x97', '\xC5', '\x9D', '\xC3', '\xDF', '\xEE', '\xCC', '\x05', '\xF6', '\xE4', '\x79'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x7DB1050779034DE7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4361,7 +4393,8 @@ EncryptedName<28, 0x7DB1050779034DE7ULL>& PecoKnightBodyPath1() { // OFFSET: 0x00DCBAB0 // FUNCTION: fn_23066 EncryptedName<22, 0x01E7898D9D235DDFULL>& CrusaderBodyPath1() { - const char source[] = {'\x1A', '\xF4', '\x94', '\x7A', '\x31', '\x35', '\x27', '\xCD', '\x6B', '\xA8', '\x7F', '\x58', '\x24', '\x3E', '\x00', '\xBD', '\x63', '\x9D', '\xEF', '\x29', '\x78', '\x89'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0x01E7898D9D235DDFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4369,7 +4402,8 @@ EncryptedName<22, 0x01E7898D9D235DDFULL>& CrusaderBodyPath1() { // OFFSET: 0x00DCBB80 // FUNCTION: fn_23067 EncryptedName<10, 0x0DF5B33D9F21EB79ULL>& MonkBodyPath2() { - const char source[] = {'\xC1', '\x12', '\xE4', '\x36', '\x61', '\x0B', '\x0C', '\xC8', '\xD0', '\xEB'}; + constexpr auto sourceText = CRYPT_NAME("몽크\\몽크", 0x0DF5B33D9F21EB79ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4377,7 +4411,8 @@ EncryptedName<10, 0x0DF5B33D9F21EB79ULL>& MonkBodyPath2() { // OFFSET: 0x00DCBC50 // FUNCTION: fn_23068 EncryptedName<14, 0x9DEFC105A1EB2F71ULL>& SageBodyPath2() { - const char source[] = {'\xCD', '\x93', '\x2B', '\x6D', '\xC4', '\x37', '\xB3', '\x21', '\xCD', '\xEF', '\x27', '\x60', '\xF3', '\xC1'}; + constexpr auto sourceText = CRYPT_NAME("세이지\\세이지", 0x9DEFC105A1EB2F71ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4385,7 +4420,8 @@ EncryptedName<14, 0x9DEFC105A1EB2F71ULL>& SageBodyPath2() { // OFFSET: 0x00DCBD20 // FUNCTION: fn_23069 EncryptedName<10, 0x6961FF056999A303ULL>& RogueBodyPath2() { - const char source[] = {'\xB4', '\x6D', '\x28', '\xBE', '\x59', '\x48', '\xAF', '\xD8', '\xD4', '\xA3'}; + constexpr auto sourceText = CRYPT_NAME("로그\\로그", 0x6961FF056999A303ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4393,7 +4429,8 @@ EncryptedName<10, 0x6961FF056999A303ULL>& RogueBodyPath2() { // OFFSET: 0x00DCBDF0 // FUNCTION: fn_23070 EncryptedName<18, 0xBD3F430159B551FDULL>& AlchemistBodyPath2() { - const char source[] = {'\x42', '\xFD', '\x04', '\x84', '\xBD', '\xB9', '\x84', '\x5A', '\xA1', '\xEE', '\x19', '\xE8', '\xDC', '\xFF', '\xC5', '\x06', '\x1A', '\x51'}; + constexpr auto sourceText = CRYPT_NAME("연금술사\\연금술사", 0xBD3F430159B551FDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4401,7 +4438,8 @@ EncryptedName<18, 0xBD3F430159B551FDULL>& AlchemistBodyPath2() { // OFFSET: 0x00DCBEC0 // FUNCTION: fn_23071 EncryptedName<10, 0xC7FB6DF18577D34BULL>& BardBodyPath2() { - const char source[] = {'\xF2', '\x0A', '\xC2', '\x60', '\xAD', '\xD4', '\x22', '\x72', '\xAE', '\xD3'}; + constexpr auto sourceText = CRYPT_NAME("바드\\바드", 0xC7FB6DF18577D34BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4409,7 +4447,8 @@ EncryptedName<10, 0xC7FB6DF18577D34BULL>& BardBodyPath2() { // OFFSET: 0x00DCBF90 // FUNCTION: fn_23072 EncryptedName<10, 0x5B832361BDA77197ULL>& DancerBodyPath2() { - const char source[] = {'\x2E', '\xDA', '\x6F', '\x4C', '\x3D', '\x9A', '\x28', '\x93', '\x66', '\x71'}; + constexpr auto sourceText = CRYPT_NAME("무희\\무희", 0x5B832361BDA77197ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4417,7 +4456,8 @@ EncryptedName<10, 0x5B832361BDA77197ULL>& DancerBodyPath2() { // OFFSET: 0x00DCC060 // FUNCTION: fn_23073 EncryptedName<34, 0x2B477F9B5B39B301ULL>& NewPecoCrusaderBodyPath1() { - const char source[] = {'\xBC', '\x76', '\xFF', '\xBF', '\x5F', '\xA5', '\x82', '\x82', '\xB6', '\x54', '\x85', '\xE7', '\x5B', '\xB3', '\xF3', '\xDE', '\x5D', '\x0E', '\xFC', '\x9D', '\x7F', '\xBB', '\x9D', '\xEE', '\xA8', '\x04', '\xDE', '\xE7', '\x27', '\xBF', '\x8B', '\x9F', '\xF4', '\xB3'}; + constexpr auto sourceText = CRYPT_NAME("신페코크루세이더\\신페코크루세이더", 0x2B477F9B5B39B301ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4425,7 +4465,8 @@ EncryptedName<34, 0x2B477F9B5B39B301ULL>& NewPecoCrusaderBodyPath1() { // OFFSET: 0x00DCC140 // FUNCTION: fn_23074 EncryptedName<14, 0x2B8725D7E95325F5ULL>& NoviceBodyPath3() { - const char source[] = {'\x36', '\xEF', '\xE9', '\x51', '\x17', '\xFF', '\xDB', '\xE8', '\x3F', '\x9F', '\xEB', '\x29', '\x0D', '\x25'}; + constexpr auto sourceText = CRYPT_NAME("초보자\\초보자", 0x2B8725D7E95325F5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4433,7 +4474,8 @@ EncryptedName<14, 0x2B8725D7E95325F5ULL>& NoviceBodyPath3() { // OFFSET: 0x00DCC210 // FUNCTION: fn_23075 EncryptedName<10, 0x899D11BB83695B0DULL>& SwordmanBodyPath3() { - const char source[] = {'\xBD', '\x90', '\xD2', '\x64', '\xE7', '\xA1', '\x56', '\x32', '\xEA', '\x5B'}; + constexpr auto sourceText = CRYPT_NAME("검사\\검사", 0x899D11BB83695B0DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4441,7 +4483,8 @@ EncryptedName<10, 0x899D11BB83695B0DULL>& SwordmanBodyPath3() { // OFFSET: 0x00DCC2E0 // FUNCTION: fn_23076 EncryptedName<14, 0xBDADDD87C5A50B6BULL>& MagicianBodyPath3() { - const char source[] = {'\xD3', '\xBD', '\x1C', '\x38', '\x3C', '\x3A', '\xF1', '\x05', '\xDD', '\xB2', '\x58', '\x7E', '\x60', '\xDD'}; + constexpr auto sourceText = CRYPT_NAME("마법사\\마법사", 0xBDADDD87C5A50B6BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4449,7 +4492,8 @@ EncryptedName<14, 0xBDADDD87C5A50B6BULL>& MagicianBodyPath3() { // OFFSET: 0x00DCC3B0 // FUNCTION: fn_23077 EncryptedName<10, 0x7989830DE73B9DBDULL>& ArcherBodyPath3() { - const char source[] = {'\x0C', '\x5E', '\x87', '\x11', '\x51', '\x32', '\x4A', '\xC5', '\x4B', '\x9D'}; + constexpr auto sourceText = CRYPT_NAME("궁수\\궁수", 0x7989830DE73B9DBDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4457,7 +4501,8 @@ EncryptedName<10, 0x7989830DE73B9DBDULL>& ArcherBodyPath3() { // OFFSET: 0x00DCC550 // FUNCTION: fn_23078 EncryptedName<10, 0xA7471985F93F9BDFULL>& MerchantBodyPath3() { - const char source[] = {'\x64', '\x68', '\xFF', '\x37', '\xD9', '\xA2', '\xB4', '\x67', '\x11', '\x9B'}; + constexpr auto sourceText = CRYPT_NAME("상인\\상인", 0xA7471985F93F9BDFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4465,7 +4510,8 @@ EncryptedName<10, 0xA7471985F93F9BDFULL>& MerchantBodyPath3() { // OFFSET: 0x00DCC620 // FUNCTION: fn_23079 EncryptedName<10, 0xF535E561137F138DULL>& ThiefBodyPath4() { - const char source[] = {'\x38', '\xA6', '\xCA', '\xDC', '\x3D', '\x50', '\x80', '\x40', '\x42', '\x13'}; + constexpr auto sourceText = CRYPT_NAME("도둑\\도둑", 0xF535E561137F138DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4473,7 +4519,8 @@ EncryptedName<10, 0xF535E561137F138DULL>& ThiefBodyPath4() { // OFFSET: 0x00DCC6F0 // FUNCTION: fn_23080 EncryptedName<10, 0xD3E5516F89F161D1ULL>& KnightBodyPath2() { - const char source[] = {'\x60', '\x83', '\x4A', '\x6E', '\x33', '\xE0', '\x07', '\x68', '\x36', '\x61'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0xD3E5516F89F161D1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4481,7 +4528,8 @@ EncryptedName<10, 0xD3E5516F89F161D1ULL>& KnightBodyPath2() { // OFFSET: 0x00DCC7C0 // FUNCTION: fn_23081 EncryptedName<18, 0x45E3F103CBB5F157ULL>& PriestBodyPath3() { - const char source[] = {'\x90', '\x30', '\x0D', '\x65', '\xBE', '\x4B', '\x25', '\xEB', '\x0B', '\x36', '\x74', '\x73', '\xAD', '\x4C', '\x59', '\x83', '\xF9', '\xF1'}; + constexpr auto sourceText = CRYPT_NAME("프리스트\\프리스트", 0x45E3F103CBB5F157ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4489,7 +4537,8 @@ EncryptedName<18, 0x45E3F103CBB5F157ULL>& PriestBodyPath3() { // OFFSET: 0x00DCC890 // FUNCTION: fn_23082 EncryptedName<14, 0x07112F85A39F4FABULL>& WizardBodyPath3() { - const char source[] = {'\x6B', '\xE8', '\x5F', '\x59', '\x30', '\xCA', '\x4D', '\xC7', '\x0C', '\x8F', '\x65', '\x16', '\x60', '\x2F'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x07112F85A39F4FABULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4497,7 +4546,8 @@ EncryptedName<14, 0x07112F85A39F4FABULL>& WizardBodyPath3() { // OFFSET: 0x00DCC960 // FUNCTION: fn_23083 EncryptedName<14, 0x2D33791F67AD47DFULL>& BlacksmithBodyPath2() { - const char source[] = {'\x1E', '\xE1', '\x6E', '\xD1', '\xAF', '\x81', '\x6F', '\xEC', '\x79', '\x84', '\x1B', '\xD7', '\xE7', '\x79'}; + constexpr auto sourceText = CRYPT_NAME("제철공\\제철공", 0x2D33791F67AD47DFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4505,7 +4555,8 @@ EncryptedName<14, 0x2D33791F67AD47DFULL>& BlacksmithBodyPath2() { // OFFSET: 0x00DCCA30 // FUNCTION: fn_23084 EncryptedName<10, 0x936F3D2FFDFD87F5ULL>& HunterBodyPath2() { - const char source[] = {'\x32', '\x62', '\x38', '\x30', '\x73', '\xFA', '\x8A', '\x56', '\x38', '\x87'}; + constexpr auto sourceText = CRYPT_NAME("헌터\\헌터", 0x936F3D2FFDFD87F5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4513,7 +4564,8 @@ EncryptedName<10, 0x936F3D2FFDFD87F5ULL>& HunterBodyPath2() { // OFFSET: 0x00DCCB00 // FUNCTION: fn_23085 EncryptedName<14, 0x2F2701A7E56D3D89ULL>& AssassinBodyPath3() { - const char source[] = {'\x37', '\xD3', '\xD1', '\x59', '\x1A', '\xC4', '\x7B', '\x91', '\x67', '\x81', '\xD1', '\x58', '\x62', '\x01'}; + constexpr auto sourceText = CRYPT_NAME("어세신\\어세신", 0x2F2701A7E56D3D89ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4521,7 +4573,8 @@ EncryptedName<14, 0x2F2701A7E56D3D89ULL>& AssassinBodyPath3() { // OFFSET: 0x00DCCBD0 // FUNCTION: fn_23086 EncryptedName<28, 0x6B3301E1A3079125ULL>& PecoKnightBodyPath2() { - const char source[] = {'\xE3', '\x75', '\xC3', '\x79', '\x27', '\xE5', '\xF7', '\xB1', '\x7A', '\x20', '\xE5', '\x18', '\x06', '\x5D', '\xF5', '\x8F', '\xE1', '\x4B', '\xC1', '\x47', '\x25', '\xDB', '\x6C', '\xDA', '\xC7', '\x2A', '\xE0', '\xA3'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x6B3301E1A3079125ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4529,7 +4582,8 @@ EncryptedName<28, 0x6B3301E1A3079125ULL>& PecoKnightBodyPath2() { // OFFSET: 0x00DCCCB0 // FUNCTION: fn_23087 EncryptedName<22, 0x71B7691737C5A1AFULL>& CrusaderBodyPath2() { - const char source[] = {'\x6A', '\x08', '\x72', '\xD0', '\xAB', '\xD5', '\x77', '\xBD', '\x1B', '\x54', '\x99', '\xF2', '\xBE', '\xDE', '\x50', '\xCD', '\x13', '\x61', '\x09', '\x83', '\xE2', '\x69'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0x71B7691737C5A1AFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4537,7 +4591,8 @@ EncryptedName<22, 0x71B7691737C5A1AFULL>& CrusaderBodyPath2() { // OFFSET: 0x00DCCD80 // FUNCTION: fn_23088 EncryptedName<10, 0xC39FB559A17D3963ULL>& MonkBodyPath3() { - const char source[] = {'\xDB', '\xC0', '\xB8', '\x08', '\x05', '\x0D', '\x66', '\x06', '\xCA', '\x39'}; + constexpr auto sourceText = CRYPT_NAME("몽크\\몽크", 0xC39FB559A17D3963ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4545,7 +4600,8 @@ EncryptedName<10, 0xC39FB559A17D3963ULL>& MonkBodyPath3() { // OFFSET: 0x00DCCE50 // FUNCTION: fn_23089 EncryptedName<14, 0xFF7D83CB791339D9ULL>& SageBodyPath3() { - const char source[] = {'\x65', '\x85', '\xD3', '\xB5', '\x0A', '\x75', '\x21', '\x43', '\x65', '\xF9', '\xDF', '\xB8', '\x3D', '\x83'}; + constexpr auto sourceText = CRYPT_NAME("세이지\\세이지", 0xFF7D83CB791339D9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4553,7 +4609,8 @@ EncryptedName<14, 0xFF7D83CB791339D9ULL>& SageBodyPath3() { // OFFSET: 0x00DCCF20 // FUNCTION: fn_23090 EncryptedName<10, 0xED5143E7C1B39315ULL>& RogueBodyPath3() { - const char source[] = {'\xA2', '\x5D', '\x02', '\x16', '\xBB', '\xF4', '\x9F', '\x5C', '\xC2', '\x93'}; + constexpr auto sourceText = CRYPT_NAME("로그\\로그", 0xED5143E7C1B39315ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4561,7 +4618,8 @@ EncryptedName<10, 0xED5143E7C1B39315ULL>& RogueBodyPath3() { // OFFSET: 0x00DCCFF0 // FUNCTION: fn_23091 EncryptedName<18, 0x393D916561BDC391ULL>& AlchemistBodyPath3() { - const char source[] = {'\x2E', '\x6F', '\x0C', '\xBC', '\xD9', '\x6B', '\x86', '\xDE', '\xCD', '\x7C', '\x11', '\xD0', '\xB8', '\x2D', '\xC7', '\x82', '\x76', '\xC3'}; + constexpr auto sourceText = CRYPT_NAME("연금술사\\연금술사", 0x393D916561BDC391ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4569,7 +4627,8 @@ EncryptedName<18, 0x393D916561BDC391ULL>& AlchemistBodyPath3() { // OFFSET: 0x00DCD0C0 // FUNCTION: fn_23092 EncryptedName<10, 0x31956551B311FD95ULL>& BardBodyPath3() { - const char source[] = {'\x2C', '\x24', '\xA4', '\x56', '\x0D', '\xDC', '\x4C', '\x84', '\x70', '\xFD'}; + constexpr auto sourceText = CRYPT_NAME("바드\\바드", 0x31956551B311FD95ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4577,7 +4636,8 @@ EncryptedName<10, 0x31956551B311FD95ULL>& BardBodyPath3() { // OFFSET: 0x00DCD190 // FUNCTION: fn_23093 EncryptedName<10, 0x8741152D8FB34B4FULL>& DancerBodyPath3() { - const char source[] = {'\xF6', '\xE0', '\x7B', '\x7E', '\x71', '\xAC', '\xEA', '\x4F', '\xBE', '\x4B'}; + constexpr auto sourceText = CRYPT_NAME("무희\\무희", 0x8741152D8FB34B4FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4585,7 +4645,8 @@ EncryptedName<10, 0x8741152D8FB34B4FULL>& DancerBodyPath3() { // OFFSET: 0x00DCD260 // FUNCTION: fn_23094 EncryptedName<34, 0x955D4DF94DE9BB07ULL>& OldPecoCrusaderBodyPath1() { - const char source[] = {'\xB6', '\x03', '\x2F', '\xA9', '\x3D', '\x97', '\x98', '\x3C', '\xB0', '\x5C', '\x55', '\xF1', '\x39', '\x81', '\xE9', '\x60', '\x5B', '\x0A', '\x51', '\x8B', '\x1D', '\x89', '\x87', '\x50', '\xAE', '\x0C', '\x0E', '\xF1', '\x45', '\x8D', '\x91', '\x21', '\xF2', '\xBB'}; + constexpr auto sourceText = CRYPT_NAME("구페코크루세이더\\구페코크루세이더", 0x955D4DF94DE9BB07ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4593,7 +4654,8 @@ EncryptedName<34, 0x955D4DF94DE9BB07ULL>& OldPecoCrusaderBodyPath1() { // OFFSET: 0x00DCD340 // FUNCTION: fn_23095 EncryptedName<14, 0xC399B7091589B50BULL>& NoviceBodyPath4() { - const char source[] = {'\xC8', '\x7F', '\x33', '\xAD', '\xC9', '\x6D', '\xC5', '\x00', '\xC1', '\x0F', '\x31', '\xD5', '\xD3', '\xB7'}; + constexpr auto sourceText = CRYPT_NAME("초보자\\초보자", 0xC399B7091589B50BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4601,7 +4663,8 @@ EncryptedName<14, 0xC399B7091589B50BULL>& NoviceBodyPath4() { // OFFSET: 0x00DCD410 // FUNCTION: fn_23096 EncryptedName<18, 0xB739073FE921AD6FULL>& TaekwonBodyPath1() { - const char source[] = {'\xAA', '\x6F', '\x90', '\x2E', '\x83', '\xD5', '\x8A', '\x55', '\x33', '\x68', '\xE3', '\x58', '\xF8', '\xBB', '\xEB', '\x04', '\x8D', '\xAD'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0xB739073FE921AD6FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4609,7 +4672,8 @@ EncryptedName<18, 0xB739073FE921AD6FULL>& TaekwonBodyPath1() { // OFFSET: 0x00DCD4E0 // FUNCTION: fn_23097 EncryptedName<18, 0x17FFC98B398FAF61ULL>& TaekwonBodyPath2() { - const char source[] = {'\xA4', '\x6D', '\x3E', '\xFE', '\x37', '\x1B', '\x4C', '\xF5', '\x3D', '\x6A', '\x4D', '\x88', '\x4C', '\x75', '\x2D', '\xA4', '\x83', '\xAF'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0x17FFC98B398FAF61ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4617,7 +4681,8 @@ EncryptedName<18, 0x17FFC98B398FAF61ULL>& TaekwonBodyPath2() { // OFFSET: 0x00DCD5B0 // FUNCTION: fn_23098 EncryptedName<18, 0x9B5B959B954D9333ULL>& TaekwonBodyPath3() { - const char source[] = {'\xF6', '\x51', '\xFC', '\x52', '\x27', '\x47', '\xE8', '\x79', '\x6F', '\x56', '\x8F', '\x24', '\x5C', '\x29', '\x89', '\x28', '\xD1', '\x93'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0x9B5B959B954D9333ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4625,7 +4690,8 @@ EncryptedName<18, 0x9B5B959B954D9333ULL>& TaekwonBodyPath3() { // OFFSET: 0x00DCD680 // FUNCTION: fn_23099 EncryptedName<14, 0xAFA5617F178B6185ULL>& WizardBodyPath4() { - const char source[] = {'\x45', '\xC6', '\x4B', '\xED', '\xCA', '\x84', '\xF9', '\x6F', '\x22', '\xA1', '\x71', '\xA2', '\x9A', '\x61'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0xAFA5617F178B6185ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4633,7 +4699,8 @@ EncryptedName<14, 0xAFA5617F178B6185ULL>& WizardBodyPath4() { // OFFSET: 0x00DCD750 // FUNCTION: fn_23100 EncryptedName<14, 0x078143534999254DULL>& AcolyteBodyPath3() { - const char source[] = {'\xF1', '\x9F', '\x58', '\xBE', '\x93', '\x99', '\xDD', '\xBB', '\xF7', '\xE4', '\x6E', '\x89', '\x89', '\x43'}; + constexpr auto sourceText = CRYPT_NAME("성직자\\성직자", 0x078143534999254DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4641,7 +4708,8 @@ EncryptedName<14, 0x078143534999254DULL>& AcolyteBodyPath3() { // OFFSET: 0x00DCD820 // FUNCTION: fn_23101 EncryptedName<10, 0x3F5315DFE32B4FAFULL>& KnightBodyPath3() { - const char source[] = {'\x1E', '\xAD', '\x90', '\x04', '\x83', '\xA4', '\xB1', '\x84', '\x48', '\x4F'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0x3F5315DFE32B4FAFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4649,7 +4717,8 @@ EncryptedName<10, 0x3F5315DFE32B4FAFULL>& KnightBodyPath3() { // OFFSET: 0x00DCD8F0 // FUNCTION: fn_23102 EncryptedName<14, 0xE50B2935073DD3E9ULL>& SageBodyPath4() { - const char source[] = {'\x55', '\x6F', '\xFD', '\xCB', '\xF4', '\xDF', '\x57', '\x59', '\x55', '\x13', '\xF1', '\xC6', '\xC3', '\x29'}; + constexpr auto sourceText = CRYPT_NAME("세이지\\세이지", 0xE50B2935073DD3E9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4657,7 +4726,8 @@ EncryptedName<14, 0xE50B2935073DD3E9ULL>& SageBodyPath4() { // OFFSET: 0x00DCD9C0 // FUNCTION: fn_23103 EncryptedName<10, 0x7D750DADBDE9C3F1ULL>& KnightBodyPath4() { - const char source[] = {'\x40', '\x21', '\x52', '\x5A', '\xF1', '\xBC', '\x97', '\xC6', '\x16', '\xC3'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0x7D750DADBDE9C3F1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4665,7 +4735,8 @@ EncryptedName<10, 0x7D750DADBDE9C3F1ULL>& KnightBodyPath4() { // OFFSET: 0x00DCDA90 // FUNCTION: fn_23104 EncryptedName<10, 0x33832D4D3FDFBDBFULL>& KnightBodyPath5() { - const char source[] = {'\x0E', '\x5F', '\x64', '\xD8', '\x11', '\x9C', '\x61', '\x88', '\x58', '\xBD'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0x33832D4D3FDFBDBFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4673,7 +4744,8 @@ EncryptedName<10, 0x33832D4D3FDFBDBFULL>& KnightBodyPath5() { // OFFSET: 0x00DCDB60 // FUNCTION: fn_23105 EncryptedName<28, 0x1BF915E1F37DFDFDULL>& PecoKnightBodyPath3() { - const char source[] = {'\x3B', '\x19', '\xB9', '\x29', '\x27', '\xF1', '\x3D', '\xC1', '\xA2', '\x4C', '\x9F', '\x48', '\x06', '\x49', '\x3F', '\xFF', '\x39', '\x27', '\xBB', '\x17', '\x25', '\xCF', '\xA6', '\xAA', '\x1F', '\x46', '\x9A', '\xF3'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x1BF915E1F37DFDFDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4681,7 +4753,8 @@ EncryptedName<28, 0x1BF915E1F37DFDFDULL>& PecoKnightBodyPath3() { // OFFSET: 0x00DCDC40 // FUNCTION: fn_23106 EncryptedName<28, 0x01FF9313695DD9DFULL>& PecoKnightBodyPath4() { - const char source[] = {'\x19', '\x3D', '\x99', '\xB3', '\xD5', '\x77', '\x3B', '\xDB', '\x80', '\x68', '\xBF', '\xD2', '\xF4', '\xCF', '\x39', '\xE5', '\x1B', '\x03', '\x9B', '\x8D', '\xD7', '\x49', '\xA0', '\xB0', '\x3D', '\x62', '\xBA', '\x69'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x01FF9313695DD9DFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4689,7 +4762,8 @@ EncryptedName<28, 0x01FF9313695DD9DFULL>& PecoKnightBodyPath4() { // OFFSET: 0x00DCDD20 // FUNCTION: fn_23107 EncryptedName<28, 0x6DED3DD1CF75AD9BULL>& PecoKnightBodyPath5() { - const char source[] = {'\x5D', '\x49', '\xB1', '\x15', '\x17', '\xD9', '\x29', '\xB7', '\xC4', '\x1C', '\x97', '\x74', '\x36', '\x61', '\x2B', '\x89', '\x5F', '\x77', '\xB3', '\x2B', '\x15', '\xE7', '\xB2', '\xDC', '\x79', '\x16', '\x92', '\xCF'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x6DED3DD1CF75AD9BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4697,7 +4771,8 @@ EncryptedName<28, 0x6DED3DD1CF75AD9BULL>& PecoKnightBodyPath5() { // OFFSET: 0x00DCDE00 // FUNCTION: fn_23108 EncryptedName<28, 0x49C3759B77DBD3C1ULL>& PecoKnightBodyPath6() { - const char source[] = {'\x07', '\x37', '\x1F', '\xAD', '\x5D', '\x91', '\x07', '\x93', '\x9E', '\x62', '\x39', '\xCC', '\x7C', '\x29', '\x05', '\xAD', '\x05', '\x09', '\x1D', '\x93', '\x5F', '\xAF', '\x9C', '\xF8', '\x23', '\x68', '\x3C', '\x77'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x49C3759B77DBD3C1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4705,7 +4780,8 @@ EncryptedName<28, 0x49C3759B77DBD3C1ULL>& PecoKnightBodyPath6() { // OFFSET: 0x00DCDEE0 // FUNCTION: fn_23109 EncryptedName<28, 0xD1538513DF975701ULL>& PecoKnightBodyPath7() { - const char source[] = {'\xC7', '\xB3', '\x53', '\x05', '\xD5', '\x61', '\x97', '\x0B', '\x5E', '\xE6', '\x75', '\x64', '\xF4', '\xD9', '\x95', '\x35', '\xC5', '\x8D', '\x51', '\x3B', '\xD7', '\x5F', '\x0C', '\x60', '\xE3', '\xEC', '\x70', '\xDF'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0xD1538513DF975701ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4713,7 +4789,8 @@ EncryptedName<28, 0xD1538513DF975701ULL>& PecoKnightBodyPath7() { // OFFSET: 0x00DCDFC0 // FUNCTION: fn_23110 EncryptedName<28, 0x91E147EBBD47C39FULL>& PecoKnightBodyPath8() { - const char source[] = {'\x59', '\x27', '\x83', '\x67', '\x2D', '\xA3', '\x25', '\x4B', '\xC0', '\x72', '\xA5', '\x06', '\x0C', '\x1B', '\x27', '\x75', '\x5B', '\x19', '\x81', '\x59', '\x2F', '\x9D', '\xBE', '\x20', '\x7D', '\x78', '\xA0', '\xBD'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x91E147EBBD47C39FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4721,7 +4798,8 @@ EncryptedName<28, 0x91E147EBBD47C39FULL>& PecoKnightBodyPath8() { // OFFSET: 0x00DCE0A0 // FUNCTION: fn_23111 EncryptedName<28, 0x4F1791FB1503C713ULL>& PecoKnightBodyPath9() { - const char source[] = {'\xD5', '\x23', '\xC7', '\xCF', '\x3D', '\x75', '\xD3', '\x95', '\x4C', '\x76', '\xE1', '\xAE', '\x1C', '\xCD', '\xD1', '\xAB', '\xD7', '\x1D', '\xC5', '\xF1', '\x3F', '\x4B', '\x48', '\xFE', '\xF1', '\x7C', '\xE4', '\x15'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x4F1791FB1503C713ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4729,7 +4807,8 @@ EncryptedName<28, 0x4F1791FB1503C713ULL>& PecoKnightBodyPath9() { // OFFSET: 0x00DCE180 // FUNCTION: fn_23112 EncryptedName<28, 0xA1A55B4D1597EDD3ULL>& PecoKnightBodyPath10() { - const char source[] = {'\x15', '\x09', '\x53', '\xCF', '\x8B', '\xBF', '\x61', '\x7B', '\x8C', '\x5C', '\x75', '\xAE', '\xAA', '\x07', '\x63', '\x45', '\x17', '\x37', '\x51', '\xF1', '\x89', '\x81', '\xFA', '\x10', '\x31', '\x56', '\x70', '\x15'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0xA1A55B4D1597EDD3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4737,7 +4816,8 @@ EncryptedName<28, 0xA1A55B4D1597EDD3ULL>& PecoKnightBodyPath10() { // OFFSET: 0x00DCE260 // FUNCTION: fn_23113 EncryptedName<28, 0x0753A7E1EFA9E139ULL>& PecoKnightBodyPath11() { - const char source[] = {'\xFF', '\x05', '\x6D', '\x35', '\x27', '\x43', '\x97', '\xDD', '\x66', '\x50', '\x4B', '\x54', '\x06', '\xFB', '\x95', '\xE3', '\xFD', '\x3B', '\x6F', '\x0B', '\x25', '\x7D', '\x0C', '\xB6', '\xDB', '\x5A', '\x4E', '\xEF'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x0753A7E1EFA9E139ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4745,7 +4825,8 @@ EncryptedName<28, 0x0753A7E1EFA9E139ULL>& PecoKnightBodyPath11() { // OFFSET: 0x00DCE340 // FUNCTION: fn_23114 EncryptedName<28, 0x7FC1015DFFCF6D19ULL>& PecoKnightBodyPath12() { - const char source[] = {'\xDF', '\x89', '\x0B', '\x25', '\x9B', '\xE5', '\x05', '\xA5', '\x46', '\xDC', '\x2D', '\x44', '\xBA', '\x5D', '\x07', '\x9B', '\xDD', '\xB7', '\x09', '\x1B', '\x99', '\xDB', '\x9E', '\xCE', '\xFB', '\xD6', '\x28', '\xFF'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0x7FC1015DFFCF6D19ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4753,7 +4834,8 @@ EncryptedName<28, 0x7FC1015DFFCF6D19ULL>& PecoKnightBodyPath12() { // OFFSET: 0x00DCE420 // FUNCTION: fn_23115 EncryptedName<28, 0xCB3FBD4183DB8323ULL>& PecoKnightBodyPath13() { - const char source[] = {'\xE5', '\x67', '\x1F', '\x59', '\x87', '\x59', '\xFB', '\x11', '\x7C', '\x32', '\x39', '\x38', '\xA6', '\xE1', '\xF9', '\x2F', '\xE7', '\x59', '\x1D', '\x67', '\x85', '\x67', '\x60', '\x7A', '\xC1', '\x38', '\x3C', '\x83'}; + constexpr auto sourceText = CRYPT_NAME("페코페코_기사\\페코페코_기사", 0xCB3FBD4183DB8323ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4761,7 +4843,8 @@ EncryptedName<28, 0xCB3FBD4183DB8323ULL>& PecoKnightBodyPath13() { // OFFSET: 0x00DCE500 // FUNCTION: fn_23116 EncryptedName<18, 0x7FCD77F9C7CBD14DULL>& PriestBodyPath4() { - const char source[] = {'\x8A', '\x10', '\x73', '\x69', '\x44', '\xCD', '\x0B', '\xD1', '\x11', '\x16', '\x0A', '\x7F', '\x57', '\xCA', '\x77', '\xB9', '\xE3', '\xD1'}; + constexpr auto sourceText = CRYPT_NAME("프리스트\\프리스트", 0x7FCD77F9C7CBD14DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4769,7 +4852,8 @@ EncryptedName<18, 0x7FCD77F9C7CBD14DULL>& PriestBodyPath4() { // OFFSET: 0x00DCE5D0 // FUNCTION: fn_23117 EncryptedName<18, 0x5B8F49AF09390D1BULL>& PriestBodyPath5() { - const char source[] = {'\xDC', '\xCC', '\x81', '\xA7', '\x12', '\xF3', '\x49', '\xF5', '\x47', '\xCA', '\xF8', '\xB1', '\x01', '\xF4', '\x35', '\x9D', '\xB5', '\x0D'}; + constexpr auto sourceText = CRYPT_NAME("프리스트\\프리스트", 0x5B8F49AF09390D1BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4777,7 +4861,8 @@ EncryptedName<18, 0x5B8F49AF09390D1BULL>& PriestBodyPath5() { // OFFSET: 0x00DCE6A0 // FUNCTION: fn_23118 EncryptedName<14, 0x3B915119EFD523EFULL>& WizardBodyPath5() { - const char source[] = {'\x2F', '\x84', '\x15', '\x15', '\xAC', '\xB4', '\xCD', '\xFB', '\x48', '\xE3', '\x2F', '\x5A', '\xFC', '\x51'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x3B915119EFD523EFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4785,7 +4870,8 @@ EncryptedName<14, 0x3B915119EFD523EFULL>& WizardBodyPath5() { // OFFSET: 0x00DCE770 // FUNCTION: fn_23119 EncryptedName<14, 0x474DC581D5E98357ULL>& WizardBodyPath6() { - const char source[] = {'\x97', '\x24', '\x29', '\x2F', '\x34', '\x20', '\x11', '\x87', '\xF0', '\x43', '\x13', '\x60', '\x64', '\xC5'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x474DC581D5E98357ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4793,7 +4879,8 @@ EncryptedName<14, 0x474DC581D5E98357ULL>& WizardBodyPath6() { // OFFSET: 0x00DCE840 // FUNCTION: fn_23120 EncryptedName<14, 0x3F557BE333F95F6DULL>& BlacksmithBodyPath3() { - const char source[] = {'\xAC', '\xF9', '\x3A', '\x85', '\x53', '\x83', '\x09', '\xFE', '\xCB', '\x9C', '\x4F', '\x83', '\x1B', '\x7B'}; + constexpr auto sourceText = CRYPT_NAME("제철공\\제철공", 0x3F557BE333F95F6DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4801,7 +4888,8 @@ EncryptedName<14, 0x3F557BE333F95F6DULL>& BlacksmithBodyPath3() { // OFFSET: 0x00DCE910 // FUNCTION: fn_23121 EncryptedName<14, 0x8B3FEB5B8BD5C3C3ULL>& BlacksmithBodyPath4() { - const char source[] = {'\x02', '\x65', '\x16', '\x3D', '\xEB', '\x13', '\x63', '\x4A', '\x65', '\x00', '\x63', '\x3B', '\xA3', '\xEB'}; + constexpr auto sourceText = CRYPT_NAME("제철공\\제철공", 0x8B3FEB5B8BD5C3C3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4809,7 +4897,8 @@ EncryptedName<14, 0x8B3FEB5B8BD5C3C3ULL>& BlacksmithBodyPath4() { // OFFSET: 0x00DCE9E0 // FUNCTION: fn_23122 EncryptedName<18, 0x0BEB63A5C905B3A7ULL>& MadogearBodyPath1() { - const char source[] = {'\x1F', '\x05', '\xB0', '\x7C', '\x14', '\x81', '\x55', '\xE5', '\xFB', '\x0B', '\xB3', '\x7C', '\x10', '\xD2', '\x09', '\xB5', '\x49', '\xB3'}; + constexpr auto sourceText = CRYPT_NAME("마도기어\\마도기어", 0x0BEB63A5C905B3A7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4817,7 +4906,8 @@ EncryptedName<18, 0x0BEB63A5C905B3A7ULL>& MadogearBodyPath1() { // OFFSET: 0x00DCEAB0 // FUNCTION: fn_23123 EncryptedName<18, 0x078333BB9725B7C9ULL>& MadogearBodyPath2() { - const char source[] = {'\x71', '\x01', '\x90', '\x22', '\x0A', '\xD1', '\x3D', '\xE9', '\x95', '\x0F', '\x93', '\x22', '\x0E', '\x82', '\x61', '\xB9', '\x27', '\xB7'}; + constexpr auto sourceText = CRYPT_NAME("마도기어\\마도기어", 0x078333BB9725B7C9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4825,7 +4915,8 @@ EncryptedName<18, 0x078333BB9725B7C9ULL>& MadogearBodyPath2() { // OFFSET: 0x00DCEB80 // FUNCTION: fn_23124 EncryptedName<18, 0x8F1B5BFD5F6175B5ULL>& MadogearBodyPath3() { - const char source[] = {'\x0D', '\xC3', '\xD4', '\xEA', '\x4C', '\xB9', '\xA5', '\x61', '\xE9', '\xCD', '\xD7', '\xEA', '\x48', '\xEA', '\xF9', '\x31', '\x5B', '\x75'}; + constexpr auto sourceText = CRYPT_NAME("마도기어\\마도기어", 0x8F1B5BFD5F6175B5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4833,7 +4924,8 @@ EncryptedName<18, 0x8F1B5BFD5F6175B5ULL>& MadogearBodyPath3() { // OFFSET: 0x00DCEC50 // FUNCTION: fn_23125 EncryptedName<10, 0x69FD1D9733D3CFC1ULL>& HunterBodyPath3() { - const char source[] = {'\x06', '\x2A', '\x16', '\xFE', '\xCB', '\xDA', '\x18', '\xAC', '\x0C', '\xCF'}; + constexpr auto sourceText = CRYPT_NAME("헌터\\헌터", 0x69FD1D9733D3CFC1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4841,7 +4933,8 @@ EncryptedName<10, 0x69FD1D9733D3CFC1ULL>& HunterBodyPath3() { // OFFSET: 0x00DCED20 // FUNCTION: fn_23126 EncryptedName<10, 0xF5657D1F3DE5CDC7ULL>& HunterBodyPath4() { - const char source[] = {'\x00', '\x28', '\x20', '\xF0', '\x43', '\xBA', '\x80', '\x30', '\x0A', '\xCD'}; + constexpr auto sourceText = CRYPT_NAME("헌터\\헌터", 0xF5657D1F3DE5CDC7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4849,7 +4942,8 @@ EncryptedName<10, 0xF5657D1F3DE5CDC7ULL>& HunterBodyPath4() { // OFFSET: 0x00DCEDF0 // FUNCTION: fn_23127 EncryptedName<22, 0x8B65CD61012B5931ULL>& RangerWolfBodyPath1() { - const char source[] = {'\x86', '\xE0', '\xEB', '\xCF', '\xA0', '\x63', '\xD1', '\x4A', '\x85', '\xB2', '\x77', '\xB6', '\xD8', '\x0D', '\xAB', '\x4A', '\x9F', '\xED', '\xEA', '\xB5', '\x8A', '\xCD'}; + constexpr auto sourceText = CRYPT_NAME("레인져늑대\\레인져늑대", 0x8B65CD61012B5931ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4857,7 +4951,8 @@ EncryptedName<22, 0x8B65CD61012B5931ULL>& RangerWolfBodyPath1() { // OFFSET: 0x00DCEEC0 // FUNCTION: fn_23128 EncryptedName<22, 0xF7530137154D8FE5ULL>& RangerWolfBodyPath2() { - const char source[] = {'\x52', '\x36', '\x8D', '\xDB', '\xF6', '\xAF', '\xE7', '\x36', '\x51', '\x64', '\x11', '\xA2', '\x8E', '\xC1', '\x9D', '\x36', '\x4B', '\x3B', '\x8C', '\xA1', '\xDC', '\x01'}; + constexpr auto sourceText = CRYPT_NAME("레인져늑대\\레인져늑대", 0xF7530137154D8FE5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4865,7 +4960,8 @@ EncryptedName<22, 0xF7530137154D8FE5ULL>& RangerWolfBodyPath2() { // OFFSET: 0x00DCEF90 // FUNCTION: fn_23129 EncryptedName<22, 0x61FF87ED7BF39BE1ULL>& RangerWolfBodyPath3() { - const char source[] = {'\x56', '\x22', '\x33', '\xB5', '\x2C', '\x29', '\x4B', '\xA0', '\x55', '\x70', '\xAF', '\xCC', '\x54', '\x47', '\x31', '\xA0', '\x4F', '\x2F', '\x32', '\xCF', '\x06', '\x87'}; + constexpr auto sourceText = CRYPT_NAME("레인져늑대\\레인져늑대", 0x61FF87ED7BF39BE1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4873,7 +4969,8 @@ EncryptedName<22, 0x61FF87ED7BF39BE1ULL>& RangerWolfBodyPath3() { // OFFSET: 0x00DCF060 // FUNCTION: fn_23130 EncryptedName<14, 0x7D993F650D2785FFULL>& AssassinBodyPath4() { - const char source[] = {'\x41', '\x6B', '\x9B', '\xB1', '\xD8', '\xFA', '\xC5', '\xC3', '\x11', '\x39', '\x9B', '\xB0', '\xA0', '\x3F'}; + constexpr auto sourceText = CRYPT_NAME("어세신\\어세신", 0x7D993F650D2785FFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4881,7 +4978,8 @@ EncryptedName<14, 0x7D993F650D2785FFULL>& AssassinBodyPath4() { // OFFSET: 0x00DCF130 // FUNCTION: fn_23131 EncryptedName<14, 0x2D394DBD0F332733ULL>& AssassinBodyPath5() { - const char source[] = {'\x8D', '\xC9', '\x8F', '\xB3', '\x00', '\x88', '\x65', '\x93', '\xDD', '\x9B', '\x8F', '\xB2', '\x78', '\x4D'}; + constexpr auto sourceText = CRYPT_NAME("어세신\\어세신", 0x2D394DBD0F332733ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4889,7 +4987,8 @@ EncryptedName<14, 0x2D394DBD0F332733ULL>& AssassinBodyPath5() { // OFFSET: 0x00DCF200 // FUNCTION: fn_23132 EncryptedName<22, 0x151F77EBEBBB2147ULL>& CrusaderBodyPath3() { - const char source[] = {'\x82', '\x88', '\x0C', '\x0C', '\x57', '\xCB', '\xDF', '\xD9', '\xF3', '\xD4', '\xE7', '\x2E', '\x42', '\xC0', '\xF8', '\xA9', '\xFB', '\xE1', '\x77', '\x5F', '\x1E', '\x77'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0x151F77EBEBBB2147ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4897,7 +4996,8 @@ EncryptedName<22, 0x151F77EBEBBB2147ULL>& CrusaderBodyPath3() { // OFFSET: 0x00DCF2D0 // FUNCTION: fn_23133 EncryptedName<22, 0xC7912587FFF31B71ULL>& CrusaderBodyPath4() { - const char source[] = {'\xB4', '\xB2', '\x44', '\x18', '\x3B', '\x99', '\x51', '\x0B', '\xC5', '\xEE', '\xAF', '\x3A', '\x2E', '\x92', '\x76', '\x7B', '\xCD', '\xDB', '\x3F', '\x4B', '\x72', '\x25'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0xC7912587FFF31B71ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4905,7 +5005,8 @@ EncryptedName<22, 0xC7912587FFF31B71ULL>& CrusaderBodyPath4() { // OFFSET: 0x00DCF3A0 // FUNCTION: fn_23134 EncryptedName<34, 0x69D345DB950F336DULL>& NewPecoCrusaderBodyPath2() { - const char source[] = {'\xD0', '\xF6', '\xC9', '\x71', '\x1F', '\x9F', '\x16', '\xC0', '\xDA', '\xD4', '\xB3', '\x29', '\x1B', '\x89', '\x67', '\x9C', '\x31', '\x8E', '\xCA', '\x53', '\x3F', '\x81', '\x09', '\xAC', '\xC4', '\x84', '\xE8', '\x29', '\x67', '\x85', '\x1F', '\xDD', '\x98', '\x33'}; + constexpr auto sourceText = CRYPT_NAME("신페코크루세이더\\신페코크루세이더", 0x69D345DB950F336DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4913,7 +5014,8 @@ EncryptedName<34, 0x69D345DB950F336DULL>& NewPecoCrusaderBodyPath2() { // OFFSET: 0x00DCF480 // FUNCTION: fn_23135 EncryptedName<34, 0x9B17C9EFDBB39F2FULL>& NewPecoCrusaderBodyPath3() { - const char source[] = {'\x92', '\x5A', '\x75', '\x3F', '\x2B', '\x13', '\xD2', '\x32', '\x98', '\x78', '\x0F', '\x67', '\x2F', '\x05', '\xA3', '\x6E', '\x73', '\x22', '\x76', '\x1D', '\x0B', '\x0D', '\xCD', '\x5E', '\x86', '\x28', '\x54', '\x67', '\x53', '\x09', '\xDB', '\x2F', '\xDA', '\x9F'}; + constexpr auto sourceText = CRYPT_NAME("신페코크루세이더\\신페코크루세이더", 0x9B17C9EFDBB39F2FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4921,7 +5023,8 @@ EncryptedName<34, 0x9B17C9EFDBB39F2FULL>& NewPecoCrusaderBodyPath3() { // OFFSET: 0x00DCF560 // FUNCTION: fn_23136 EncryptedName<34, 0x2D3B15774149D5DDULL>& NewPecoCrusaderBodyPath4() { - const char source[] = {'\x60', '\x10', '\x8F', '\xA5', '\xB3', '\xCF', '\xFE', '\x84', '\x6A', '\x32', '\xF5', '\xFD', '\xB7', '\xD9', '\x8F', '\xD8', '\x81', '\x68', '\x8C', '\x87', '\x93', '\xD1', '\xE1', '\xE8', '\x74', '\x62', '\xAE', '\xFD', '\xCB', '\xD5', '\xF7', '\x99', '\x28', '\xD5'}; + constexpr auto sourceText = CRYPT_NAME("신페코크루세이더\\신페코크루세이더", 0x2D3B15774149D5DDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4929,7 +5032,8 @@ EncryptedName<34, 0x2D3B15774149D5DDULL>& NewPecoCrusaderBodyPath4() { // OFFSET: 0x00DCF640 // FUNCTION: fn_23137 EncryptedName<10, 0xD98F03A52D35636DULL>& MonkBodyPath4() { - const char source[] = {'\xD5', '\x9A', '\xF0', '\x84', '\xF9', '\xBB', '\x76', '\x1C', '\xC4', '\x63'}; + constexpr auto sourceText = CRYPT_NAME("몽크\\몽크", 0xD98F03A52D35636DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4937,7 +5041,8 @@ EncryptedName<10, 0xD98F03A52D35636DULL>& MonkBodyPath4() { // OFFSET: 0x00DCF710 // FUNCTION: fn_23138 EncryptedName<10, 0x0F0F8B6B8F9D19D1ULL>& MonkBodyPath5() { - const char source[] = {'\x69', '\xE0', '\x58', '\x26', '\x37', '\x33', '\xF6', '\xCA', '\x78', '\x19'}; + constexpr auto sourceText = CRYPT_NAME("몽크\\몽크", 0x0F0F8B6B8F9D19D1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4945,7 +5050,8 @@ EncryptedName<10, 0x0F0F8B6B8F9D19D1ULL>& MonkBodyPath5() { // OFFSET: 0x00DCF7E0 // FUNCTION: fn_23139 EncryptedName<14, 0xD3755DD95F47A909ULL>& SageBodyPath5() { - const char source[] = {'\xB5', '\x15', '\x87', '\x93', '\x18', '\xAB', '\x29', '\x6F', '\xB5', '\x69', '\x8B', '\x9E', '\x2F', '\x5D'}; + constexpr auto sourceText = CRYPT_NAME("세이지\\세이지", 0xD3755DD95F47A909ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4953,7 +5059,8 @@ EncryptedName<14, 0xD3755DD95F47A909ULL>& SageBodyPath5() { // OFFSET: 0x00DCF8B0 // FUNCTION: fn_23140 EncryptedName<14, 0x31D7C1EDA345E36DULL>& SageBodyPath6() { - const char source[] = {'\xD1', '\x5F', '\x85', '\x6F', '\x2C', '\x37', '\x8B', '\x8D', '\xD1', '\x23', '\x89', '\x62', '\x1B', '\xC1'}; + constexpr auto sourceText = CRYPT_NAME("세이지\\세이지", 0x31D7C1EDA345E36DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4961,7 +5068,8 @@ EncryptedName<14, 0x31D7C1EDA345E36DULL>& SageBodyPath6() { // OFFSET: 0x00DCF980 // FUNCTION: fn_23141 EncryptedName<10, 0x3FAF85D995034FD7ULL>& RogueBodyPath4() { - const char source[] = {'\x60', '\x81', '\xB2', '\x42', '\x85', '\x32', '\x61', '\x8E', '\x00', '\x4F'}; + constexpr auto sourceText = CRYPT_NAME("로그\\로그", 0x3FAF85D995034FD7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4969,7 +5077,8 @@ EncryptedName<10, 0x3FAF85D995034FD7ULL>& RogueBodyPath4() { // OFFSET: 0x00DCFA50 // FUNCTION: fn_23142 EncryptedName<10, 0x490FFB43A12F0DB9ULL>& RogueBodyPath5() { - const char source[] = {'\x0E', '\xC3', '\x9E', '\x76', '\x1F', '\x4C', '\xC1', '\xF8', '\x6E', '\x0D'}; + constexpr auto sourceText = CRYPT_NAME("로그\\로그", 0x490FFB43A12F0DB9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4977,7 +5086,8 @@ EncryptedName<10, 0x490FFB43A12F0DB9ULL>& RogueBodyPath5() { // OFFSET: 0x00DCFB20 // FUNCTION: fn_23143 EncryptedName<18, 0x91651D81F559F971ULL>& AlchemistBodyPath4() { - const char source[] = {'\xCE', '\x55', '\xE8', '\x28', '\x3D', '\xE7', '\xDE', '\x76', '\x2D', '\x46', '\xF5', '\x44', '\x5C', '\xA1', '\x9F', '\x2A', '\x96', '\xF9'}; + constexpr auto sourceText = CRYPT_NAME("연금술사\\연금술사", 0x91651D81F559F971ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4985,7 +5095,8 @@ EncryptedName<18, 0x91651D81F559F971ULL>& AlchemistBodyPath4() { // OFFSET: 0x00DCFBF0 // FUNCTION: fn_23144 EncryptedName<18, 0x73D1674B61DF7B0BULL>& AlchemistBodyPath5() { - const char source[] = {'\xB4', '\xD7', '\x6E', '\xBC', '\xF7', '\x9D', '\x6A', '\x94', '\x57', '\xC4', '\x73', '\xD0', '\x96', '\xDB', '\x2B', '\xC8', '\xEC', '\x7B'}; + constexpr auto sourceText = CRYPT_NAME("연금술사\\연금술사", 0x73D1674B61DF7B0BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -4993,7 +5104,8 @@ EncryptedName<18, 0x73D1674B61DF7B0BULL>& AlchemistBodyPath5() { // OFFSET: 0x00DCFCC0 // FUNCTION: fn_23145 EncryptedName<10, 0x2FF3C5036D070127ULL>& DancerBodyPath4() { - const char source[] = {'\x9E', '\xAA', '\xCF', '\x9C', '\x5F', '\x7C', '\x58', '\xE7', '\xD6', '\x01'}; + constexpr auto sourceText = CRYPT_NAME("무희\\무희", 0x2FF3C5036D070127ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5001,7 +5113,8 @@ EncryptedName<10, 0x2FF3C5036D070127ULL>& DancerBodyPath4() { // OFFSET: 0x00DCFD90 // FUNCTION: fn_23146 EncryptedName<10, 0x17359BF953C367B3ULL>& DancerBodyPath5() { - const char source[] = {'\x0A', '\xCC', '\x0B', '\xA2', '\xA5', '\x22', '\x9E', '\xDF', '\x42', '\x67'}; + constexpr auto sourceText = CRYPT_NAME("무희\\무희", 0x17359BF953C367B3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5009,7 +5122,8 @@ EncryptedName<10, 0x17359BF953C367B3ULL>& DancerBodyPath5() { // OFFSET: 0x00DCFE60 // FUNCTION: fn_23147 EncryptedName<10, 0xC52FB5FBB94FF917ULL>& BardBodyPath4() { - const char source[] = {'\xAE', '\x20', '\xFA', '\x5C', '\xA7', '\x0C', '\xF6', '\x70', '\xF2', '\xF9'}; + constexpr auto sourceText = CRYPT_NAME("바드\\바드", 0xC52FB5FBB94FF917ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5017,7 +5131,8 @@ EncryptedName<10, 0xC52FB5FBB94FF917ULL>& BardBodyPath4() { // OFFSET: 0x00DCFF30 // FUNCTION: fn_23148 EncryptedName<10, 0x93E7A3A1F587CDC5ULL>& BardBodyPath5() { - const char source[] = {'\x7C', '\x14', '\x32', '\x10', '\xFD', '\x1A', '\x3E', '\x26', '\x20', '\xCD'}; + constexpr auto sourceText = CRYPT_NAME("바드\\바드", 0x93E7A3A1F587CDC5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5025,7 +5140,8 @@ EncryptedName<10, 0x93E7A3A1F587CDC5ULL>& BardBodyPath5() { // OFFSET: 0x00DD0000 // FUNCTION: fn_23149 EncryptedName<10, 0x59278F63D79F3DA1ULL>& KnightBodyPath6() { - const char source[] = {'\x10', '\xDF', '\x24', '\x30', '\x3F', '\x3E', '\xC5', '\xE2', '\x46', '\x3D'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0x59278F63D79F3DA1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5033,7 +5149,8 @@ EncryptedName<10, 0x59278F63D79F3DA1ULL>& KnightBodyPath6() { // OFFSET: 0x00DD00D0 // FUNCTION: fn_23150 EncryptedName<14, 0x812BE72BCD5707B7ULL>& WizardBodyPath7() { - const char source[] = {'\x77', '\xA0', '\x97', '\x37', '\x9E', '\x02', '\x77', '\x41', '\x10', '\xC7', '\xAD', '\x78', '\xCE', '\xE7'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x812BE72BCD5707B7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5041,7 +5158,8 @@ EncryptedName<14, 0x812BE72BCD5707B7ULL>& WizardBodyPath7() { // OFFSET: 0x00DD01A0 // FUNCTION: fn_23151 EncryptedName<10, 0x3375B1C7DBB5FD55ULL>& HunterBodyPath5() { - const char source[] = {'\x92', '\x18', '\x70', '\x16', '\x9B', '\x76', '\x90', '\xF6', '\x98', '\xFD'}; + constexpr auto sourceText = CRYPT_NAME("헌터\\헌터", 0x3375B1C7DBB5FD55ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5049,7 +5167,8 @@ EncryptedName<10, 0x3375B1C7DBB5FD55ULL>& HunterBodyPath5() { // OFFSET: 0x00DD0270 // FUNCTION: fn_23152 EncryptedName<18, 0x1D6D75EDE7CD311FULL>& PriestBodyPath6() { - const char source[] = {'\xD8', '\xF0', '\x75', '\x49', '\x50', '\xCF', '\xAB', '\xB3', '\x43', '\xF6', '\x0C', '\x5F', '\x43', '\xC8', '\xD7', '\xDB', '\xB1', '\x31'}; + constexpr auto sourceText = CRYPT_NAME("프리스트\\프리스트", 0x1D6D75EDE7CD311FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5057,7 +5176,8 @@ EncryptedName<18, 0x1D6D75EDE7CD311FULL>& PriestBodyPath6() { // OFFSET: 0x00DD0340 // FUNCTION: fn_23153 EncryptedName<14, 0xCBD1F3239BBBEDF7ULL>& BlacksmithBodyPath5() { - const char source[] = {'\x36', '\x4B', '\x78', '\x2D', '\x93', '\x0B', '\x8D', '\x0A', '\x51', '\x2E', '\x0D', '\x2B', '\xDB', '\xF3'}; + constexpr auto sourceText = CRYPT_NAME("제철공\\제철공", 0xCBD1F3239BBBEDF7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5065,7 +5185,8 @@ EncryptedName<14, 0xCBD1F3239BBBEDF7ULL>& BlacksmithBodyPath5() { // OFFSET: 0x00DD0410 // FUNCTION: fn_23154 EncryptedName<14, 0x7DBBD74FA36F3BCBULL>& AssassinBodyPath6() { - const char source[] = {'\x75', '\xD5', '\xD3', '\x1F', '\xF2', '\x12', '\xE7', '\xC3', '\x25', '\x87', '\xD3', '\x1E', '\x8A', '\xD7'}; + constexpr auto sourceText = CRYPT_NAME("어세신\\어세신", 0x7DBBD74FA36F3BCBULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5073,7 +5194,8 @@ EncryptedName<14, 0x7DBBD74FA36F3BCBULL>& AssassinBodyPath6() { // OFFSET: 0x00DD04E0 // FUNCTION: fn_23155 EncryptedName<22, 0x4917EB6D71B701ABULL>& CrusaderBodyPath5() { - const char source[] = {'\x6E', '\xA8', '\x00', '\x96', '\xD1', '\x57', '\xD7', '\x85', '\x1F', '\xF4', '\xEB', '\xB4', '\xC4', '\x5C', '\xF0', '\xF5', '\x17', '\xC1', '\x7B', '\xC5', '\x98', '\xEB'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0x4917EB6D71B701ABULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5081,7 +5203,8 @@ EncryptedName<22, 0x4917EB6D71B701ABULL>& CrusaderBodyPath5() { // OFFSET: 0x00DD05B0 // FUNCTION: fn_23156 EncryptedName<14, 0xFD4F85BBA7E37D4FULL>& SageBodyPath7() { - const char source[] = {'\xF3', '\xC1', '\x23', '\x6B', '\x7A', '\x73', '\x13', '\x41', '\xF3', '\xBD', '\x2F', '\x66', '\x4D', '\x85'}; + constexpr auto sourceText = CRYPT_NAME("세이지\\세이지", 0xFD4F85BBA7E37D4FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5089,7 +5212,8 @@ EncryptedName<14, 0xFD4F85BBA7E37D4FULL>& SageBodyPath7() { // OFFSET: 0x00DD0680 // FUNCTION: fn_23157 EncryptedName<10, 0x51C57BB9F1DD9B0FULL>& BardBodyPath6() { - const char source[] = {'\xB6', '\x42', '\x68', '\x14', '\xE5', '\xC2', '\x1C', '\xE4', '\xEA', '\x9B'}; + constexpr auto sourceText = CRYPT_NAME("바드\\바드", 0x51C57BB9F1DD9B0FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5097,7 +5221,8 @@ EncryptedName<10, 0x51C57BB9F1DD9B0FULL>& BardBodyPath6() { // OFFSET: 0x00DD0750 // FUNCTION: fn_23158 EncryptedName<10, 0xC733B7A333F9F571ULL>& DancerBodyPath6() { - const char source[] = {'\xC8', '\x5E', '\x31', '\xC2', '\xFF', '\x0E', '\x98', '\x0F', '\x80', '\xF5'}; + constexpr auto sourceText = CRYPT_NAME("무희\\무희", 0xC733B7A333F9F571ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5105,7 +5230,8 @@ EncryptedName<10, 0xC733B7A333F9F571ULL>& DancerBodyPath6() { // OFFSET: 0x00DD0820 // FUNCTION: fn_23159 EncryptedName<10, 0x7D61612937C1592DULL>& MonkBodyPath6() { - const char source[] = {'\x95', '\xA0', '\x04', '\x9E', '\x75', '\xD9', '\x98', '\xB8', '\x84', '\x59'}; + constexpr auto sourceText = CRYPT_NAME("몽크\\몽크", 0x7D61612937C1592DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5113,7 +5239,8 @@ EncryptedName<10, 0x7D61612937C1592DULL>& MonkBodyPath6() { // OFFSET: 0x00DD08F0 // FUNCTION: fn_23160 EncryptedName<18, 0x8F4B518D839D1581ULL>& AlchemistBodyPath6() { - const char source[] = {'\x3E', '\xB9', '\x2C', '\x5E', '\x31', '\xAB', '\xF0', '\x68', '\xDD', '\xAA', '\x31', '\x32', '\x50', '\xED', '\xB1', '\x34', '\x66', '\x15'}; + constexpr auto sourceText = CRYPT_NAME("연금술사\\연금술사", 0x8F4B518D839D1581ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5121,7 +5248,8 @@ EncryptedName<18, 0x8F4B518D839D1581ULL>& AlchemistBodyPath6() { // OFFSET: 0x00DD09C0 // FUNCTION: fn_23161 EncryptedName<10, 0xCBD7DDAFDF87F549ULL>& RogueBodyPath6() { - const char source[] = {'\xFE', '\x3B', '\x36', '\x08', '\xF3', '\x6A', '\x19', '\x7A', '\x9E', '\xF5'}; + constexpr auto sourceText = CRYPT_NAME("로그\\로그", 0xCBD7DDAFDF87F549ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5129,7 +5257,8 @@ EncryptedName<10, 0xCBD7DDAFDF87F549ULL>& RogueBodyPath6() { // OFFSET: 0x00DD0A90 // FUNCTION: fn_23162 EncryptedName<14, 0x39E7F13755252F8FULL>& NoviceBodyPath5() { - const char source[] = {'\x4C', '\xE5', '\x9F', '\xED', '\xF7', '\x2B', '\xBB', '\xFA', '\x45', '\x95', '\x9D', '\x95', '\xED', '\xF1'}; + constexpr auto sourceText = CRYPT_NAME("초보자\\초보자", 0x39E7F13755252F8FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5137,7 +5266,8 @@ EncryptedName<14, 0x39E7F13755252F8FULL>& NoviceBodyPath5() { // OFFSET: 0x00DD0B60 // FUNCTION: fn_23163 EncryptedName<14, 0x3D075BD5256F9B6FULL>& NoviceBodyPath6() { - const char source[] = {'\xAC', '\x51', '\xD5', '\x9D', '\x15', '\x81', '\x5B', '\xFE', '\xA5', '\x21', '\xD7', '\xE5', '\x0F', '\x5B'}; + constexpr auto sourceText = CRYPT_NAME("초보자\\초보자", 0x3D075BD5256F9B6FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5145,7 +5275,8 @@ EncryptedName<14, 0x3D075BD5256F9B6FULL>& NoviceBodyPath6() { // OFFSET: 0x00DD0C30 // FUNCTION: fn_23164 EncryptedName<14, 0xEB074B7FBDA3BFD5ULL>& NoviceBodyPath7() { - const char source[] = {'\x16', '\x75', '\x19', '\x05', '\xBF', '\x91', '\x5B', '\x28', '\x1F', '\x05', '\x1B', '\x7D', '\xA5', '\x4B'}; + constexpr auto sourceText = CRYPT_NAME("초보자\\초보자", 0xEB074B7FBDA3BFD5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5153,7 +5284,8 @@ EncryptedName<14, 0xEB074B7FBDA3BFD5ULL>& NoviceBodyPath7() { // OFFSET: 0x00DD0D00 // FUNCTION: fn_23165 EncryptedName<14, 0x03014749B127914FULL>& NoviceBodyPath8() { - const char source[] = {'\x8C', '\x5B', '\x9D', '\x09', '\x89', '\x9D', '\x5D', '\xC0', '\x85', '\x2B', '\x9F', '\x71', '\x93', '\x47'}; + constexpr auto sourceText = CRYPT_NAME("초보자\\초보자", 0x03014749B127914FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5161,7 +5293,8 @@ EncryptedName<14, 0x03014749B127914FULL>& NoviceBodyPath8() { // OFFSET: 0x00DD0DD0 // FUNCTION: fn_23166 EncryptedName<18, 0x251761D7370BA5C3ULL>& PriestBodyPath7() { - const char source[] = {'\x04', '\x64', '\xB3', '\x99', '\x6A', '\xDB', '\xD1', '\x8B', '\x9F', '\x62', '\xCA', '\x8F', '\x79', '\xDC', '\xAD', '\xE3', '\x6D', '\xA5'}; + constexpr auto sourceText = CRYPT_NAME("프리스트\\프리스트", 0x251761D7370BA5C3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5169,7 +5302,8 @@ EncryptedName<18, 0x251761D7370BA5C3ULL>& PriestBodyPath7() { // OFFSET: 0x00DD0EA0 // FUNCTION: fn_23167 EncryptedName<14, 0x2B034DCBB1812785ULL>& WizardBodyPath8() { - const char source[] = {'\x45', '\x80', '\x41', '\x4B', '\x7E', '\xA8', '\x5F', '\xEB', '\x22', '\xE7', '\x7B', '\x04', '\x2E', '\x4D'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x2B034DCBB1812785ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5177,7 +5311,8 @@ EncryptedName<14, 0x2B034DCBB1812785ULL>& WizardBodyPath8() { // OFFSET: 0x00DD0F70 // FUNCTION: fn_23168 EncryptedName<14, 0x85FB93CF2F494179ULL>& BlacksmithBodyPath6() { - const char source[] = {'\xB8', '\xE7', '\x8A', '\x99', '\x7F', '\x6B', '\xA7', '\x44', '\xDF', '\x82', '\xFF', '\x9F', '\x37', '\x93'}; + constexpr auto sourceText = CRYPT_NAME("제철공\\제철공", 0x85FB93CF2F494179ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5185,7 +5320,8 @@ EncryptedName<14, 0x85FB93CF2F494179ULL>& BlacksmithBodyPath6() { // OFFSET: 0x00DD1040 // FUNCTION: fn_23169 EncryptedName<14, 0x894FEDABAFCF45E3ULL>& BlacksmithBodyPath7() { - const char source[] = {'\x22', '\xE3', '\x0C', '\x19', '\x1B', '\x15', '\x13', '\x48', '\x45', '\x86', '\x79', '\x1F', '\x53', '\xED'}; + constexpr auto sourceText = CRYPT_NAME("제철공\\제철공", 0x894FEDABAFCF45E3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5193,7 +5329,8 @@ EncryptedName<14, 0x894FEDABAFCF45E3ULL>& BlacksmithBodyPath7() { // OFFSET: 0x00DD1110 // FUNCTION: fn_23170 EncryptedName<14, 0x8B03E17DA967E943ULL>& BlacksmithBodyPath8() { - const char source[] = {'\x82', '\x4F', '\xA4', '\x1F', '\xCD', '\x19', '\x5F', '\x4A', '\xE5', '\x2A', '\xD1', '\x19', '\x85', '\xE1'}; + constexpr auto sourceText = CRYPT_NAME("제철공\\제철공", 0x8B03E17DA967E943ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5201,7 +5338,8 @@ EncryptedName<14, 0x8B03E17DA967E943ULL>& BlacksmithBodyPath8() { // OFFSET: 0x00DD11E0 // FUNCTION: fn_23171 EncryptedName<10, 0x190B8705C141D1CFULL>& HunterBodyPath6() { - const char source[] = {'\x08', '\x34', '\x84', '\x0C', '\x59', '\x40', '\xEE', '\xDC', '\x02', '\xD1'}; + constexpr auto sourceText = CRYPT_NAME("헌터\\헌터", 0x190B8705C141D1CFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5209,7 +5347,8 @@ EncryptedName<10, 0x190B8705C141D1CFULL>& HunterBodyPath6() { // OFFSET: 0x00DD12B0 // FUNCTION: fn_23172 EncryptedName<10, 0xC98BB32777F94371ULL>& HunterBodyPath7() { - const char source[] = {'\xB6', '\xA6', '\x3C', '\xBA', '\x7B', '\x74', '\x6E', '\x0C', '\xBC', '\x43'}; + constexpr auto sourceText = CRYPT_NAME("헌터\\헌터", 0xC98BB32777F94371ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5217,7 +5356,8 @@ EncryptedName<10, 0xC98BB32777F94371ULL>& HunterBodyPath7() { // OFFSET: 0x00DD1380 // FUNCTION: fn_23173 EncryptedName<10, 0xA5F51F3989DBB99FULL>& KnightBodyPath7() { - const char source[] = {'\x2E', '\x5B', '\x60', '\x6E', '\x65', '\xAE', '\x17', '\x1E', '\x78', '\xB9'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0xA5F51F3989DBB99FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5225,7 +5365,8 @@ EncryptedName<10, 0xA5F51F3989DBB99FULL>& KnightBodyPath7() { // OFFSET: 0x00DD1450 // FUNCTION: fn_23174 EncryptedName<10, 0xB3D5C99B2B05FFEFULL>& KnightBodyPath8() { - const char source[] = {'\x5E', '\x1D', '\xBE', '\xCC', '\xC7', '\x78', '\x37', '\x08', '\x08', '\xFF'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0xB3D5C99B2B05FFEFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5233,7 +5374,8 @@ EncryptedName<10, 0xB3D5C99B2B05FFEFULL>& KnightBodyPath8() { // OFFSET: 0x00DD1520 // FUNCTION: fn_23175 EncryptedName<10, 0xC71BB3CDEB499DD1ULL>& KnightBodyPath9() { - const char source[] = {'\x60', '\x7F', '\xF2', '\x0C', '\x91', '\x02', '\xF9', '\x7C', '\x36', '\x9D'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0xC71BB3CDEB499DD1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5241,7 +5383,8 @@ EncryptedName<10, 0xC71BB3CDEB499DD1ULL>& KnightBodyPath9() { // OFFSET: 0x00DD15F0 // FUNCTION: fn_23176 EncryptedName<22, 0x3939079FF3395587ULL>& CrusaderBodyPath6() { - const char source[] = {'\x42', '\xFC', '\x8E', '\x14', '\x23', '\xBB', '\xF9', '\xF5', '\x33', '\xA0', '\x65', '\x36', '\x36', '\xB0', '\xDE', '\x85', '\x3B', '\x95', '\xF5', '\x47', '\x6A', '\x07'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0x3939079FF3395587ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5249,7 +5392,8 @@ EncryptedName<22, 0x3939079FF3395587ULL>& CrusaderBodyPath6() { // OFFSET: 0x00DD16C0 // FUNCTION: fn_23177 EncryptedName<22, 0xCF391B0F8B9D95DBULL>& CrusaderBodyPath7() { - const char source[] = {'\x1E', '\x3C', '\x2A', '\x6C', '\xB3', '\xA7', '\xF9', '\x03', '\x6F', '\x60', '\xC1', '\x4E', '\xA6', '\xAC', '\xDE', '\x73', '\x67', '\x55', '\x51', '\x3F', '\xFA', '\x1B'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0xCF391B0F8B9D95DBULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5257,7 +5401,8 @@ EncryptedName<22, 0xCF391B0F8B9D95DBULL>& CrusaderBodyPath7() { // OFFSET: 0x00DD1790 // FUNCTION: fn_23178 EncryptedName<10, 0x6967633B9D89092BULL>& KnightBodyPath10() { - const char source[] = {'\x9A', '\xEB', '\x32', '\x7A', '\x67', '\xD2', '\x85', '\xD2', '\xCC', '\x09'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0x6967633B9D89092BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5265,7 +5410,8 @@ EncryptedName<10, 0x6967633B9D89092BULL>& KnightBodyPath10() { // OFFSET: 0x00DD1860 // FUNCTION: fn_23179 EncryptedName<10, 0xAFCD4F69FBDFE157ULL>& KnightBodyPath11() { - const char source[] = {'\xE6', '\x03', '\x64', '\x1C', '\x35', '\xFE', '\x2F', '\x14', '\xB0', '\xE1'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0xAFCD4F69FBDFE157ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5273,7 +5419,8 @@ EncryptedName<10, 0xAFCD4F69FBDFE157ULL>& KnightBodyPath11() { // OFFSET: 0x00DD1930 // FUNCTION: fn_23180 EncryptedName<22, 0x85D9CFCF0FBB71ABULL>& CrusaderBodyPath8() { - const char source[] = {'\x6E', '\xD8', '\x0C', '\xE8', '\x73', '\x73', '\x19', '\x49', '\x1F', '\x84', '\xE7', '\xCA', '\x66', '\x78', '\x3E', '\x39', '\x17', '\xB1', '\x77', '\xBB', '\x3A', '\xCF'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0x85D9CFCF0FBB71ABULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5281,7 +5428,8 @@ EncryptedName<22, 0x85D9CFCF0FBB71ABULL>& CrusaderBodyPath8() { // OFFSET: 0x00DD1A00 // FUNCTION: fn_23181 EncryptedName<22, 0x795383DD11AF7DA7ULL>& CrusaderBodyPath9() { - const char source[] = {'\x62', '\xD4', '\x18', '\xF6', '\x61', '\x3F', '\x93', '\xB5', '\x13', '\x88', '\xF3', '\xD4', '\x74', '\x34', '\xB4', '\xC5', '\x1B', '\xBD', '\x63', '\xA5', '\x28', '\x83'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0x795383DD11AF7DA7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5289,7 +5437,8 @@ EncryptedName<22, 0x795383DD11AF7DA7ULL>& CrusaderBodyPath9() { // OFFSET: 0x00DD1AD0 // FUNCTION: fn_23182 EncryptedName<22, 0xD9FF511B2BB921E7ULL>& CrusaderBodyPath10() { - const char source[] = {'\x22', '\x88', '\x0E', '\xCC', '\xA7', '\xED', '\x3F', '\x15', '\x53', '\xD4', '\xE5', '\xEE', '\xB2', '\xE6', '\x18', '\x65', '\x5B', '\xE1', '\x75', '\x9F', '\xEE', '\x51'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0xD9FF511B2BB921E7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5297,7 +5446,8 @@ EncryptedName<22, 0xD9FF511B2BB921E7ULL>& CrusaderBodyPath10() { // OFFSET: 0x00DD1BA0 // FUNCTION: fn_23183 EncryptedName<16, 0x978B51F50DC5FD25ULL>& KagerouBodyPath1() { - const char source[] = {'\x4E', '\x9C', '\xA2', '\x68', '\x87', '\x3E', '\xFE', '\xCB', '\x4E', '\x9C', '\xA2', '\x68', '\x87', '\x3E', '\xFE', '\x97'}; + constexpr auto sourceText = CRYPT_NAME("kagerou\\kagerou", 0x978B51F50DC5FD25ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5305,7 +5455,8 @@ EncryptedName<16, 0x978B51F50DC5FD25ULL>& KagerouBodyPath1() { // OFFSET: 0x00DD1C60 // FUNCTION: fn_23184 EncryptedName<12, 0xC757D96143298511ULL>& OboroBodyPath1() { - const char source[] = {'\x7E', '\xE7', '\x46', '\x31', '\x0E', '\x85', '\x38', '\xA5', '\x7E', '\xF7', '\x46', '\x43'}; + constexpr auto sourceText = CRYPT_NAME("oboro\\oboro", 0xC757D96143298511ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5313,7 +5464,8 @@ EncryptedName<12, 0xC757D96143298511ULL>& OboroBodyPath1() { // OFFSET: 0x00DD1D30 // FUNCTION: fn_23185 EncryptedName<16, 0xE1F181F923B759E7ULL>& KagerouBodyPath2() { - const char source[] = {'\x8C', '\x38', '\xD0', '\x46', '\x8B', '\xEE', '\x84', '\xBD', '\x8C', '\x38', '\xD0', '\x46', '\x8B', '\xEE', '\x84', '\xE1'}; + constexpr auto sourceText = CRYPT_NAME("kagerou\\kagerou", 0xE1F181F923B759E7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5321,7 +5473,8 @@ EncryptedName<16, 0xE1F181F923B759E7ULL>& KagerouBodyPath2() { // OFFSET: 0x00DD1DF0 // FUNCTION: fn_23186 EncryptedName<12, 0x37D76D8F495113C3ULL>& OboroBodyPath2() { - const char source[] = {'\xAC', '\x71', '\x3E', '\x3B', '\xE0', '\x31', '\xB8', '\x55', '\xAC', '\x61', '\x3E', '\x49'}; + constexpr auto sourceText = CRYPT_NAME("oboro\\oboro", 0x37D76D8F495113C3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5329,7 +5482,8 @@ EncryptedName<12, 0x37D76D8F495113C3ULL>& OboroBodyPath2() { // OFFSET: 0x00DD1EC0 // FUNCTION: fn_23187 EncryptedName<20, 0x7BAD7791F50F5D8DULL>& RebellionBodyPath1() { - const char source[] = {'\xFF', '\x38', '\x6D', '\x90', '\xFD', '\x1B', '\xC4', '\x14', '\xE3', '\x01', '\x7D', '\x90', '\xF3', '\x12', '\xC1', '\x17', '\xE4', '\x32', '\x61', '\xF5'}; + constexpr auto sourceText = CRYPT_NAME("rebellion\\rebellion", 0x7BAD7791F50F5D8DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5337,7 +5491,8 @@ EncryptedName<20, 0x7BAD7791F50F5D8DULL>& RebellionBodyPath1() { // OFFSET: 0x00DD1F90 // FUNCTION: fn_23188 EncryptedName<18, 0x2F1337956DC3CFD5ULL>& SummonerBodyPath1() { - const char source[] = {'\xA6', '\xBA', '\xAE', '\x00', '\xFA', '\x59', '\x76', '\x5D', '\x89', '\xBC', '\xB6', '\x00', '\xF8', '\x58', '\x7D', '\x4A', '\xA7', '\xCF'}; + constexpr auto sourceText = CRYPT_NAME("summoner\\summoner", 0x2F1337956DC3CFD5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5345,7 +5500,8 @@ EncryptedName<18, 0x2F1337956DC3CFD5ULL>& SummonerBodyPath1() { // OFFSET: 0x00DD2060 // FUNCTION: fn_23189 EncryptedName<23, 0xC91F9D493F75FDA3ULL>& SummonerCartBodyPath1() { - const char source[] = {'\xD0', '\x88', '\x18', '\x52', '\x26', '\xF3', '\x7A', '\xBB', '\xFF', '\x9E', '\x14', '\x4D', '\x3D', '\xC2', '\x6C', '\xBC', '\xCE', '\x90', '\x1A', '\x51', '\x2C', '\xEF', '\x1F'}; + constexpr auto sourceText = CRYPT_NAME("summoner\\cart_summoner", 0xC91F9D493F75FDA3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5353,7 +5509,8 @@ EncryptedName<23, 0xC91F9D493F75FDA3ULL>& SummonerCartBodyPath1() { // OFFSET: 0x00DD2140 // FUNCTION: fn_23190 EncryptedName<18, 0x1F01A13D8D915327ULL>& SummonerBodyPath2() { - const char source[] = {'\x54', '\x26', '\xFC', '\xE0', '\x52', '\xCF', '\x64', '\x6D', '\x7B', '\x20', '\xE4', '\xE0', '\x50', '\xCE', '\x6F', '\x7A', '\x55', '\x53'}; + constexpr auto sourceText = CRYPT_NAME("summoner\\summoner", 0x1F01A13D8D915327ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5361,7 +5518,8 @@ EncryptedName<18, 0x1F01A13D8D915327ULL>& SummonerBodyPath2() { // OFFSET: 0x00DD2210 // FUNCTION: fn_23191 EncryptedName<23, 0xF33D3D3B0BD9C53DULL>& SummonerCartBodyPath2() { - const char source[] = {'\x4E', '\xB0', '\xB4', '\x66', '\x54', '\x53', '\x58', '\x81', '\x61', '\xA6', '\xB8', '\x79', '\x4F', '\x62', '\x4E', '\x86', '\x50', '\xA8', '\xB6', '\x65', '\x5E', '\x4F', '\x3D'}; + constexpr auto sourceText = CRYPT_NAME("summoner\\cart_summoner", 0xF33D3D3B0BD9C53DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5369,7 +5527,8 @@ EncryptedName<23, 0xF33D3D3B0BD9C53DULL>& SummonerCartBodyPath2() { // OFFSET: 0x00DD22F0 // FUNCTION: fn_23192 EncryptedName<10, 0xC74BB3BB110FB10FULL>& NinjaBodyPath1() { - const char source[] = {'\xBB', '\x60', '\xCF', '\xCB', '\xE7', '\x07', '\x9A', '\x07', '\xD5', '\xB1'}; + constexpr auto sourceText = CRYPT_NAME("닌자\\닌자", 0xC74BB3BB110FB10FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5377,7 +5536,8 @@ EncryptedName<10, 0xC74BB3BB110FB10FULL>& NinjaBodyPath1() { // OFFSET: 0x00DD23C0 // FUNCTION: fn_23193 EncryptedName<10, 0x0B5F6D6B23D5AFA7ULL>& NinjaBodyPath2() { - const char source[] = {'\x13', '\x7E', '\x15', '\xF9', '\x37', '\xD9', '\x8E', '\xCB', '\x7D', '\xAF'}; + constexpr auto sourceText = CRYPT_NAME("닌자\\닌자", 0x0B5F6D6B23D5AFA7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5385,7 +5545,8 @@ EncryptedName<10, 0x0B5F6D6B23D5AFA7ULL>& NinjaBodyPath2() { // OFFSET: 0x00DD2490 // FUNCTION: fn_23194 EncryptedName<16, 0x2B7BAB0B6971E3E9ULL>& KagerouBodyPath3() { - const char source[] = {'\x82', '\x82', '\x16', '\x0C', '\x79', '\xC4', '\x0E', '\x77', '\x82', '\x82', '\x16', '\x0C', '\x79', '\xC4', '\x0E', '\x2B'}; + constexpr auto sourceText = CRYPT_NAME("kagerou\\kagerou", 0x2B7BAB0B6971E3E9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5393,7 +5554,8 @@ EncryptedName<16, 0x2B7BAB0B6971E3E9ULL>& KagerouBodyPath3() { // OFFSET: 0x00DD2550 // FUNCTION: fn_23195 EncryptedName<12, 0x8773593DB181D573ULL>& OboroBodyPath3() { - const char source[] = {'\x1C', '\xB7', '\xEE', '\xC3', '\x52', '\x05', '\x1C', '\xE5', '\x1C', '\xA7', '\xEE', '\xB1'}; + constexpr auto sourceText = CRYPT_NAME("oboro\\oboro", 0x8773593DB181D573ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5401,7 +5563,8 @@ EncryptedName<12, 0x8773593DB181D573ULL>& OboroBodyPath3() { // OFFSET: 0x00DD2620 // FUNCTION: fn_23196 EncryptedName<16, 0xFBDBDB13A77191BFULL>& KagerouBodyPath4() { - const char source[] = {'\xD4', '\xF0', '\x16', '\xC2', '\x61', '\xB4', '\xAE', '\xA7', '\xD4', '\xF0', '\x16', '\xC2', '\x61', '\xB4', '\xAE', '\xFB'}; + constexpr auto sourceText = CRYPT_NAME("kagerou\\kagerou", 0xFBDBDB13A77191BFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5409,7 +5572,8 @@ EncryptedName<16, 0xFBDBDB13A77191BFULL>& KagerouBodyPath4() { // OFFSET: 0x00DD26E0 // FUNCTION: fn_23197 EncryptedName<12, 0x19BBC5910555FB97ULL>& OboroBodyPath4() { - const char source[] = {'\xF8', '\x99', '\x3A', '\x77', '\xFE', '\x99', '\xD4', '\x7B', '\xF8', '\x89', '\x3A', '\x05'}; + constexpr auto sourceText = CRYPT_NAME("oboro\\oboro", 0x19BBC5910555FB97ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5417,7 +5581,8 @@ EncryptedName<12, 0x19BBC5910555FB97ULL>& OboroBodyPath4() { // OFFSET: 0x00DD27B0 // FUNCTION: fn_23198 EncryptedName<18, 0xBBD983C7FD611FE3ULL>& TaekwonBodyPath4() { - const char source[] = {'\x26', '\xDD', '\xD0', '\x3A', '\x7B', '\x51', '\x6A', '\x59', '\xBF', '\xDA', '\xA3', '\x4C', '\x00', '\x3F', '\x0B', '\x08', '\x01', '\x1F'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0xBBD983C7FD611FE3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5425,7 +5590,8 @@ EncryptedName<18, 0xBBD983C7FD611FE3ULL>& TaekwonBodyPath4() { // OFFSET: 0x00DD2880 // FUNCTION: fn_23199 EncryptedName<18, 0xA1ED494BF319772DULL>& TaekwonBodyPath5() { - const char source[] = {'\xE8', '\xB5', '\xA8', '\x34', '\xF7', '\x9B', '\x5E', '\x43', '\x71', '\xB2', '\xDB', '\x42', '\x8C', '\xF5', '\x3F', '\x12', '\xCF', '\x77'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0xA1ED494BF319772DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5433,7 +5599,8 @@ EncryptedName<18, 0xA1ED494BF319772DULL>& TaekwonBodyPath5() { // OFFSET: 0x00DD2950 // FUNCTION: fn_23200 EncryptedName<18, 0x798B394FF5FF434DULL>& TaekwonBodyPath6() { - const char source[] = {'\x88', '\x81', '\x4E', '\x32', '\xF3', '\xEB', '\x38', '\x9B', '\x11', '\x86', '\x3D', '\x44', '\x88', '\x85', '\x59', '\xCA', '\xAF', '\x43'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0x798B394FF5FF434DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5441,7 +5608,8 @@ EncryptedName<18, 0x798B394FF5FF434DULL>& TaekwonBodyPath6() { // OFFSET: 0x00DD2A20 // FUNCTION: fn_23201 EncryptedName<18, 0x410DD52D6731BFFDULL>& TaekwonBodyPath7() { - const char source[] = {'\x38', '\x7D', '\x80', '\xA0', '\x91', '\x07', '\xBE', '\xA3', '\xA1', '\x7A', '\xF3', '\xD6', '\xEA', '\x69', '\xDF', '\xF2', '\x1F', '\xBF'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0x410DD52D6731BFFDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5449,7 +5617,8 @@ EncryptedName<18, 0x410DD52D6731BFFDULL>& TaekwonBodyPath7() { // OFFSET: 0x00DD2AF0 // FUNCTION: fn_23202 EncryptedName<18, 0x07B733370F612D0FULL>& TaekwonBodyPath8() { - const char source[] = {'\xCA', '\xEF', '\xD0', '\xC8', '\x8B', '\xE1', '\x04', '\xE5', '\x53', '\xE8', '\xA3', '\xBE', '\xF0', '\x8F', '\x65', '\xB4', '\xED', '\x2D'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0x07B733370F612D0FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5457,7 +5626,8 @@ EncryptedName<18, 0x07B733370F612D0FULL>& TaekwonBodyPath8() { // OFFSET: 0x00DD2BC0 // FUNCTION: fn_23203 EncryptedName<14, 0x113DC179F1C795C9ULL>& WizardBodyPath9() { - const char source[] = {'\x09', '\x32', '\x07', '\x0B', '\xCC', '\x24', '\x61', '\xD1', '\x6E', '\x55', '\x3D', '\x44', '\x9C', '\xC1'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x113DC179F1C795C9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5465,7 +5635,8 @@ EncryptedName<14, 0x113DC179F1C795C9ULL>& WizardBodyPath9() { // OFFSET: 0x00DD2C90 // FUNCTION: fn_23204 EncryptedName<14, 0x31F5C32DD5C53779ULL>& WizardBodyPath10() { - const char source[] = {'\xB9', '\x90', '\x05', '\x2F', '\x98', '\x26', '\xA9', '\xF1', '\xDE', '\xF7', '\x3F', '\x60', '\xC8', '\xC3'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x31F5C32DD5C53779ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5473,7 +5644,8 @@ EncryptedName<14, 0x31F5C32DD5C53779ULL>& WizardBodyPath10() { // OFFSET: 0x00DD2D60 // FUNCTION: fn_23205 EncryptedName<10, 0x2F9B717365C1250FULL>& GunslingerBodyPath1() { - const char source[] = {'\xBF', '\xE2', '\x72', '\xAF', '\x2F', '\xC1', '\x5C', '\x9C', '\xC5', '\x25'}; + constexpr auto sourceText = CRYPT_NAME("건너\\건너", 0x2F9B717365C1250FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5481,7 +5653,8 @@ EncryptedName<10, 0x2F9B717365C1250FULL>& GunslingerBodyPath1() { // OFFSET: 0x00DD2E30 // FUNCTION: fn_23206 EncryptedName<10, 0x4FE54379493FB5D5ULL>& GunslingerBodyPath2() { - const char source[] = {'\x65', '\x72', '\x8C', '\x83', '\x25', '\xF3', '\x22', '\xFC', '\x1F', '\xB5'}; + constexpr auto sourceText = CRYPT_NAME("건너\\건너", 0x4FE54379493FB5D5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5489,7 +5662,8 @@ EncryptedName<10, 0x4FE54379493FB5D5ULL>& GunslingerBodyPath2() { // OFFSET: 0x00DD2F00 // FUNCTION: fn_23207 EncryptedName<20, 0x656FAB972B3D21BBULL>& RebellionBodyPath2() { - const char source[] = {'\xC9', '\x44', '\x5F', '\x4E', '\xFB', '\xC7', '\x06', '\x0A', '\xD5', '\x7D', '\x4F', '\x4E', '\xF5', '\xCE', '\x03', '\x09', '\xD2', '\x4E', '\x53', '\x2B'}; + constexpr auto sourceText = CRYPT_NAME("rebellion\\rebellion", 0x656FAB972B3D21BBULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5497,7 +5671,8 @@ EncryptedName<20, 0x656FAB972B3D21BBULL>& RebellionBodyPath2() { // OFFSET: 0x00DD2FD0 // FUNCTION: fn_23208 EncryptedName<20, 0x33CD2BDD5B3927EDULL>& RebellionBodyPath3() { - const char source[] = {'\x9F', '\x42', '\x5B', '\x3E', '\xB1', '\x47', '\xA4', '\x5C', '\x83', '\x7B', '\x4B', '\x3E', '\xBF', '\x4E', '\xA1', '\x5F', '\x84', '\x48', '\x57', '\x5B'}; + constexpr auto sourceText = CRYPT_NAME("rebellion\\rebellion", 0x33CD2BDD5B3927EDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5505,7 +5680,8 @@ EncryptedName<20, 0x33CD2BDD5B3927EDULL>& RebellionBodyPath3() { // OFFSET: 0x00DD30A0 // FUNCTION: fn_23209 EncryptedName<18, 0xD97BB73901ED99BFULL>& TaekwonBodyPath9() { - const char source[] = {'\x7A', '\x5B', '\x5C', '\xC6', '\x85', '\x65', '\xC8', '\x3B', '\xE3', '\x5C', '\x2F', '\xB0', '\xFE', '\x0B', '\xA9', '\x6A', '\x5D', '\x99'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0xD97BB73901ED99BFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5513,7 +5689,8 @@ EncryptedName<18, 0xD97BB73901ED99BFULL>& TaekwonBodyPath9() { // OFFSET: 0x00DD3170 // FUNCTION: fn_23210 EncryptedName<14, 0x5D6B8FCBE3FB97A1ULL>& WizardBodyPath11() { - const char source[] = {'\x61', '\x30', '\x3B', '\x19', '\x7E', '\x6A', '\x37', '\x9D', '\x06', '\x57', '\x01', '\x56', '\x2E', '\x8F'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x5D6B8FCBE3FB97A1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5521,7 +5698,8 @@ EncryptedName<14, 0x5D6B8FCBE3FB97A1ULL>& WizardBodyPath11() { // OFFSET: 0x00DD3240 // FUNCTION: fn_23211 EncryptedName<18, 0xE5FDE3151BED831FULL>& TaekwonBodyPath10() { - const char source[] = {'\xDA', '\x41', '\x5C', '\xDC', '\xA9', '\x31', '\x4E', '\x07', '\x43', '\x46', '\x2F', '\xAA', '\xD2', '\x5F', '\x2F', '\x56', '\xFD', '\x83'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0xE5FDE3151BED831FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5529,7 +5707,8 @@ EncryptedName<18, 0xE5FDE3151BED831FULL>& TaekwonBodyPath10() { // OFFSET: 0x00DD3310 // FUNCTION: fn_23212 EncryptedName<14, 0x8971CB79C18D8B27ULL>& WizardBodyPath12() { - const char source[] = {'\xE7', '\x2C', '\x4D', '\x3B', '\xCC', '\x2E', '\x2D', '\x49', '\x80', '\x4B', '\x77', '\x74', '\x9C', '\xCB'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x8971CB79C18D8B27ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5537,7 +5716,8 @@ EncryptedName<14, 0x8971CB79C18D8B27ULL>& WizardBodyPath12() { // OFFSET: 0x00DD33E0 // FUNCTION: fn_23213 EncryptedName<18, 0x8DC5D10DAB1585BDULL>& TaekwonBodyPath11() { - const char source[] = {'\x78', '\x47', '\xA4', '\x6C', '\xB1', '\x03', '\x76', '\x6F', '\xE1', '\x40', '\xD7', '\x1A', '\xCA', '\x6D', '\x17', '\x3E', '\x5F', '\x85'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0x8DC5D10DAB1585BDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5545,7 +5725,8 @@ EncryptedName<18, 0x8DC5D10DAB1585BDULL>& TaekwonBodyPath11() { // OFFSET: 0x00DD34B0 // FUNCTION: fn_23214 EncryptedName<18, 0x21156F4141E35DD9ULL>& TaekwonBodyPath12() { - const char source[] = {'\x1C', '\x9F', '\x52', '\x86', '\xFD', '\xBD', '\xA6', '\xC3', '\x85', '\x98', '\x21', '\xF0', '\x86', '\xD3', '\xC7', '\x92', '\x3B', '\x5D'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0x21156F4141E35DD9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5553,7 +5734,8 @@ EncryptedName<18, 0x21156F4141E35DD9ULL>& TaekwonBodyPath12() { // OFFSET: 0x00DD3580 // FUNCTION: fn_23215 EncryptedName<18, 0x51EB99CBCB075F35ULL>& TaekwonBodyPath13() { - const char source[] = {'\xF0', '\x9D', '\xB6', '\x0C', '\x77', '\x4B', '\x58', '\xB3', '\x69', '\x9A', '\xC5', '\x7A', '\x0C', '\x25', '\x39', '\xE2', '\xD7', '\x5F'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0x51EB99CBCB075F35ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5561,7 +5743,8 @@ EncryptedName<18, 0x51EB99CBCB075F35ULL>& TaekwonBodyPath13() { // OFFSET: 0x00DD3650 // FUNCTION: fn_23216 EncryptedName<14, 0x1B3B756FE399E1D9ULL>& WizardBodyPath13() { - const char source[] = {'\x19', '\x46', '\x59', '\x19', '\xDA', '\x90', '\x67', '\xDB', '\x7E', '\x21', '\x63', '\x56', '\x8A', '\x75'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x1B3B756FE399E1D9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5569,7 +5752,8 @@ EncryptedName<14, 0x1B3B756FE399E1D9ULL>& WizardBodyPath13() { // OFFSET: 0x00DD3720 // FUNCTION: fn_23217 EncryptedName<18, 0x3B6D9BFD27A7C7F7ULL>& TaekwonBodyPath14() { - const char source[] = {'\x32', '\x05', '\x16', '\xE0', '\x41', '\x49', '\xDE', '\xD9', '\xAB', '\x02', '\x65', '\x96', '\x3A', '\x27', '\xBF', '\x88', '\x15', '\xC7'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0x3B6D9BFD27A7C7F7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5577,7 +5761,8 @@ EncryptedName<18, 0x3B6D9BFD27A7C7F7ULL>& TaekwonBodyPath14() { // OFFSET: 0x00DD37F0 // FUNCTION: fn_23218 EncryptedName<14, 0x451FD72783630709ULL>& WizardBodyPath14() { - const char source[] = {'\xC9', '\xA0', '\xA3', '\x79', '\x92', '\x32', '\x43', '\x85', '\xAE', '\xC7', '\x99', '\x36', '\xC2', '\xD7'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x451FD72783630709ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5585,7 +5770,8 @@ EncryptedName<14, 0x451FD72783630709ULL>& WizardBodyPath14() { // OFFSET: 0x00DD38C0 // FUNCTION: fn_23219 EncryptedName<14, 0x73C32959FDFFA51BULL>& WizardBodyPath15() { - const char source[] = {'\xDB', '\x02', '\x3F', '\x07', '\xEC', '\xCC', '\x9F', '\xB3', '\xBC', '\x65', '\x05', '\x48', '\xBC', '\x29'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x73C32959FDFFA51BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5593,7 +5779,8 @@ EncryptedName<14, 0x73C32959FDFFA51BULL>& WizardBodyPath15() { // OFFSET: 0x00DD3990 // FUNCTION: fn_23220 EncryptedName<14, 0xA15B555BE9CD2B81ULL>& WizardBodyPath16() { - const char source[] = {'\x41', '\x8C', '\x0D', '\x13', '\xEE', '\xB0', '\x07', '\x61', '\x26', '\xEB', '\x37', '\x5C', '\xBE', '\x55'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0xA15B555BE9CD2B81ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5601,7 +5788,8 @@ EncryptedName<14, 0xA15B555BE9CD2B81ULL>& WizardBodyPath16() { // OFFSET: 0x00DD3A60 // FUNCTION: fn_23221 EncryptedName<14, 0xD9115915B1919533ULL>& SageBodyPath8() { - const char source[] = {'\x8F', '\x29', '\x51', '\x7D', '\xD4', '\xAF', '\x4D', '\x65', '\x8F', '\x55', '\x5D', '\x70', '\xE3', '\x59'}; + constexpr auto sourceText = CRYPT_NAME("세이지\\세이지", 0xD9115915B1919533ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5609,7 +5797,8 @@ EncryptedName<14, 0xD9115915B1919533ULL>& SageBodyPath8() { // OFFSET: 0x00DD3B30 // FUNCTION: fn_23222 EncryptedName<14, 0xB3F1A10745C1F105ULL>& SageBodyPath9() { - const char source[] = {'\xB9', '\x4D', '\x01', '\x89', '\xC6', '\x57', '\xAD', '\x0F', '\xB9', '\x31', '\x0D', '\x84', '\xF1', '\xA1'}; + constexpr auto sourceText = CRYPT_NAME("세이지\\세이지", 0xB3F1A10745C1F105ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5617,7 +5806,8 @@ EncryptedName<14, 0xB3F1A10745C1F105ULL>& SageBodyPath9() { // OFFSET: 0x00DD3C00 // FUNCTION: fn_23223 EncryptedName<18, 0x99157F159BB99BD9ULL>& WindhawkBodyPath1() { - const char source[] = {'\x8E', '\xD2', '\xF7', '\xDF', '\x5D', '\x3E', '\x42', '\xD2', '\x85', '\xCC', '\xF0', '\xD5', '\x51', '\x37', '\x54', '\xCE', '\x92', '\x9B'}; + constexpr auto sourceText = CRYPT_NAME("WINDHAWK\\WINDHAWK", 0x99157F159BB99BD9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5625,7 +5815,8 @@ EncryptedName<18, 0x99157F159BB99BD9ULL>& WindhawkBodyPath1() { // OFFSET: 0x00DD3CD0 // FUNCTION: fn_23224 EncryptedName<23, 0x7959FFBF652D07BFULL>& WolfWindhawkBodyPath1() { - const char source[] = {'\xE8', '\x4E', '\x63', '\x21', '\xF7', '\xBE', '\x0E', '\x32', '\xE3', '\x50', '\x62', '\x29', '\xF9', '\xA0', '\x0E', '\x30', '\xF1', '\x43', '\x65', '\x24', '\xE8', '\xB4', '\x59'}; + constexpr auto sourceText = CRYPT_NAME("WINDHAWK\\WOLF_WINDHAWK", 0x7959FFBF652D07BFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5633,7 +5824,8 @@ EncryptedName<23, 0x7959FFBF652D07BFULL>& WolfWindhawkBodyPath1() { // OFFSET: 0x00DD3DB0 // FUNCTION: fn_23225 EncryptedName<25, 0x01C9FBA7819FFBD7ULL>& WindhawkRidingBodyPath1() { - const char source[] = {'\x80', '\xB2', '\xD1', '\xC5', '\xEF', '\xBA', '\x9E', '\x4A', '\x8B', '\xAC', '\xD6', '\xCF', '\xE3', '\xB3', '\x88', '\x56', '\x9C', '\xA4', '\xCD', '\xC8', '\xE3', '\xB2', '\x87', '\x46', '\xD7'}; + constexpr auto sourceText = CRYPT_NAME("WINDHAWK\\WINDHAWK_RIDING", 0x01C9FBA7819FFBD7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5641,7 +5833,8 @@ EncryptedName<25, 0x01C9FBA7819FFBD7ULL>& WindhawkRidingBodyPath1() { // OFFSET: 0x00DD3E90 // FUNCTION: fn_23226 EncryptedName<22, 0xABED6971354375C3ULL>& TroubadourBodyPath1() { - const char source[] = {'\x97', '\x27', '\x0C', '\x60', '\x33', '\x28', '\xA9', '\xE4', '\x96', '\x27', '\x1F', '\x61', '\x23', '\x26', '\xB8', '\xE9', '\x82', '\x31', '\x0C', '\x60', '\x23', '\x69'}; + constexpr auto sourceText = CRYPT_NAME("TROUBADOUR\\TROUBADOUR", 0xABED6971354375C3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5649,7 +5842,8 @@ EncryptedName<22, 0xABED6971354375C3ULL>& TroubadourBodyPath1() { // OFFSET: 0x00DD3F60 // FUNCTION: fn_23227 EncryptedName<29, 0x6BA557130BDFE997ULL>& TroubadourRidingBodyPath1() { - const char source[] = {'\xC3', '\xBB', '\x90', '\x5E', '\x51', '\x16', '\xE1', '\x24', '\xC2', '\xBB', '\x83', '\x5F', '\x41', '\x18', '\xF0', '\x29', '\xD6', '\xAD', '\x90', '\x5E', '\x41', '\x08', '\xF7', '\x22', '\xD3', '\xA0', '\x91', '\x4C', '\x13'}; + constexpr auto sourceText = CRYPT_NAME("TROUBADOUR\\TROUBADOUR_RIDING", 0x6BA557130BDFE997ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5657,7 +5851,8 @@ EncryptedName<29, 0x6BA557130BDFE997ULL>& TroubadourRidingBodyPath1() { // OFFSET: 0x00DD4040 // FUNCTION: fn_23228 EncryptedName<18, 0xFBAD074BDB2B77A1ULL>& TrouvereBodyPath1() { - const char source[] = {'\xF5', '\x25', '\x64', '\x8E', '\x1D', '\x42', '\xFF', '\xBE', '\xFD', '\x23', '\x79', '\x94', '\x1E', '\x51', '\xE8', '\xA9', '\xE4', '\x77'}; + constexpr auto sourceText = CRYPT_NAME("TROUVERE\\TROUVERE", 0xFBAD074BDB2B77A1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5665,7 +5860,8 @@ EncryptedName<18, 0xFBAD074BDB2B77A1ULL>& TrouvereBodyPath1() { // OFFSET: 0x00DD4110 // FUNCTION: fn_23229 EncryptedName<25, 0x6D05D5271B5D65C3ULL>& TrouvereRidingBodyPath1() { - const char source[] = {'\x97', '\x37', '\x12', '\x4E', '\x71', '\x90', '\x57', '\x28', '\x9F', '\x31', '\x0F', '\x54', '\x72', '\x83', '\x40', '\x3F', '\x86', '\x3A', '\x0F', '\x52', '\x63', '\x9C', '\x4B', '\x2A', '\xC3'}; + constexpr auto sourceText = CRYPT_NAME("TROUVERE\\TROUVERE_RIDING", 0x6D05D5271B5D65C3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5673,7 +5869,8 @@ EncryptedName<25, 0x6D05D5271B5D65C3ULL>& TrouvereRidingBodyPath1() { // OFFSET: 0x00DD41F0 // FUNCTION: fn_23230 EncryptedName<18, 0x050DF16FC75B25B9ULL>& CardinalBodyPath1() { - const char source[] = {'\xFA', '\x64', '\x09', '\x83', '\x26', '\xBF', '\x4C', '\x49', '\xE5', '\x66', '\x1A', '\x95', '\x2B', '\xB8', '\x43', '\x44', '\xF5', '\x25'}; + constexpr auto sourceText = CRYPT_NAME("CARDINAL\\CARDINAL", 0x050DF16FC75B25B9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5681,7 +5878,8 @@ EncryptedName<18, 0x050DF16FC75B25B9ULL>& CardinalBodyPath1() { // OFFSET: 0x00DD42C0 // FUNCTION: fn_23231 EncryptedName<25, 0x0789EBC9F5C1C59FULL>& CardinalRidingBodyPath1() { - const char source[] = {'\xDC', '\x84', '\x93', '\xB1', '\x80', '\xA5', '\xC8', '\x4B', '\xC3', '\x86', '\x80', '\xA7', '\x8D', '\xA2', '\xC7', '\x46', '\xD3', '\x9A', '\x93', '\xBC', '\x8D', '\xA2', '\xC7', '\x40', '\x9F'}; + constexpr auto sourceText = CRYPT_NAME("CARDINAL\\CARDINAL_RIDING", 0x0789EBC9F5C1C59FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5689,7 +5887,8 @@ EncryptedName<25, 0x0789EBC9F5C1C59FULL>& CardinalRidingBodyPath1() { // OFFSET: 0x00DD4530 // FUNCTION: fn_23233 EncryptedName<22, 0x3D8387EF97A37DCFULL>& InquisitorBodyPath1() { - const char source[] = {'\x86', '\x33', '\xF2', '\xC2', '\xA6', '\xD4', '\xCA', '\x69', '\x80', '\x2F', '\xFF', '\xDE', '\xA1', '\xD6', '\xD6', '\x74', '\x9C', '\x34', '\xF7', '\xD8', '\xBD', '\x87'}; + constexpr auto sourceText = CRYPT_NAME("INQUISITOR\\INQUISITOR", 0x3D8387EF97A37DCFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5697,7 +5896,8 @@ EncryptedName<22, 0x3D8387EF97A37DCFULL>& InquisitorBodyPath1() { // OFFSET: 0x00DD4600 // FUNCTION: fn_23234 EncryptedName<29, 0x07A7D947CF7323BFULL>& InquisitorRidingBodyPath1() { - const char source[] = {'\xF6', '\x6D', '\x22', '\x9A', '\x0E', '\x8A', '\xEE', '\x53', '\xF0', '\x71', '\x2F', '\x86', '\x09', '\x88', '\xF2', '\x4E', '\xEC', '\x6A', '\x27', '\x80', '\x15', '\x86', '\xF5', '\x4E', '\xFB', '\x6A', '\x3D', '\x88', '\x47'}; + constexpr auto sourceText = CRYPT_NAME("INQUISITOR\\INQUISITOR_RIDING", 0x07A7D947CF7323BFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5705,7 +5905,8 @@ EncryptedName<29, 0x07A7D947CF7323BFULL>& InquisitorRidingBodyPath1() { // OFFSET: 0x00DD46E0 // FUNCTION: fn_23235 EncryptedName<12, 0xD97DC927AFE911F1ULL>& BioloBodyPath1() { - const char source[] = {'\xB3', '\x58', '\xA6', '\xE3', '\x68', '\x95', '\x3F', '\x90', '\xBE', '\x5D', '\xA6', '\xAF'}; + constexpr auto sourceText = CRYPT_NAME("BIOLO\\BIOLO", 0xD97DC927AFE911F1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5713,7 +5914,8 @@ EncryptedName<12, 0xD97DC927AFE911F1ULL>& BioloBodyPath1() { // OFFSET: 0x00DD47B0 // FUNCTION: fn_23236 EncryptedName<26, 0x8BA52B970DD531ADULL>& BioloRidingBodyPath1() { - const char source[] = {'\xEF', '\x78', '\x9A', '\x41', '\xD8', '\x74', '\xF7', '\xC2', '\xE9', '\x78', '\x9B', '\x4A', '\xCB', '\x69', '\xEC', '\xC4', '\xE1', '\x7E', '\x8A', '\x5F', '\xDE', '\x6F', '\xEC', '\xC5', '\xEA', '\x31'}; + constexpr auto sourceText = CRYPT_NAME("BIOLO_RIDING\\BIOLO_RIDING", 0x8BA52B970DD531ADULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5721,7 +5923,8 @@ EncryptedName<26, 0x8BA52B970DD531ADULL>& BioloRidingBodyPath1() { // OFFSET: 0x00DD4890 // FUNCTION: fn_23237 EncryptedName<16, 0x47B7BF55EB471557ULL>& MeisterBodyPath1() { - const char source[] = {'\x1A', '\x50', '\x0E', '\xB8', '\x01', '\xFA', '\xE5', '\x1B', '\x1A', '\x50', '\x0E', '\xB8', '\x01', '\xFA', '\xE5', '\x47'}; + constexpr auto sourceText = CRYPT_NAME("MEISTER\\MEISTER", 0x47B7BF55EB471557ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5729,7 +5932,8 @@ EncryptedName<16, 0x47B7BF55EB471557ULL>& MeisterBodyPath1() { // OFFSET: 0x00DD4950 // FUNCTION: fn_23238 EncryptedName<30, 0xCFB9671DEF4BD9E7ULL>& MeisterRidingBodyPath1() { - const char source[] = {'\xAA', '\x9C', '\x02', '\xBC', '\x49', '\x22', '\xEB', '\x90', '\xB5', '\x90', '\x0F', '\xA6', '\x53', '\x20', '\xE5', '\x82', '\xA2', '\x90', '\x18', '\xBB', '\x58', '\x35', '\xE6', '\x9D', '\xAE', '\x9D', '\x02', '\xA1', '\x5A', '\x67'}; + constexpr auto sourceText = CRYPT_NAME("MEISTER_RIDING\\MEISTER_RIDING", 0xCFB9671DEF4BD9E7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5737,7 +5941,8 @@ EncryptedName<30, 0xCFB9671DEF4BD9E7ULL>& MeisterRidingBodyPath1() { // OFFSET: 0x00DD4A30 // FUNCTION: fn_23239 EncryptedName<35, 0x2F2103792383718BULL>& MeisterMadogear1BodyPath1() { - const char source[] = {'\xC6', '\x34', '\xCA', '\x70', '\x2D', '\x46', '\x73', '\x70', '\xC6', '\x30', '\xC7', '\x6C', '\x3E', '\x46', '\x60', '\x7D', '\xD7', '\x3C', '\xC6', '\x6A', '\x2A', '\x57', '\x64', '\x7D', '\xD4', '\x3C', '\xC2', '\x67', '\x36', '\x44', '\x64', '\x6E', '\xD9', '\x40', '\x83'}; + constexpr auto sourceText = CRYPT_NAME("MEISTER_MADOGEAR\\MEISTER_MADOGEAR1", 0x2F2103792383718BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5745,7 +5950,8 @@ EncryptedName<35, 0x2F2103792383718BULL>& MeisterMadogear1BodyPath1() { // OFFSET: 0x00DD4B10 // FUNCTION: fn_23240 EncryptedName<28, 0x999F5191852D2F6BULL>& DragonKnightBodyPath1() { - const char source[] = {'\x2F', '\x7D', '\x6C', '\xC2', '\xDE', '\x1F', '\xC0', '\xD2', '\x25', '\x66', '\x6A', '\xCD', '\xC5', '\x0D', '\xDB', '\xCB', '\x2A', '\x68', '\x62', '\xCB', '\xCE', '\x1A', '\xD1', '\xD0', '\x2C', '\x67', '\x79', '\x85'}; + constexpr auto sourceText = CRYPT_NAME("DRAGON_KNIGHT\\DRAGON_KNIGHT", 0x999F5191852D2F6BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5753,7 +5959,8 @@ EncryptedName<28, 0x999F5191852D2F6BULL>& DragonKnightBodyPath1() { // OFFSET: 0x00DD4BF0 // FUNCTION: fn_23241 EncryptedName<42, 0x4349ADE96FEB27E5ULL>& DragonKnightRidingBodyPath1() { - const char source[] = {'\xA1', '\x75', '\xAA', '\x28', '\xA6', '\xE3', '\x16', '\x08', '\xAB', '\x6E', '\xAC', '\x27', '\xBD', '\xF2', '\x1B', '\x0A', '\xA1', '\x6E', '\xA5', '\x28', '\xB5', '\xE9', '\x1B', '\x02', '\xA2', '\x68', '\xA5', '\x30', '\xA2', '\xE3', '\x00', '\x04', '\xAD', '\x73', '\xB4', '\x3D', '\xA0', '\xE9', '\x00', '\x0D', '\xA2', '\x27'}; + constexpr auto sourceText = CRYPT_NAME("DRAGON_KNIGHT_RIDING\\DRAGON_KNIGHT_RIDING", 0x4349ADE96FEB27E5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5761,7 +5968,8 @@ EncryptedName<42, 0x4349ADE96FEB27E5ULL>& DragonKnightRidingBodyPath1() { // OFFSET: 0x00DD4CD0 // FUNCTION: fn_23242 EncryptedName<44, 0xA55B7BEF3D7377E3ULL>& DragonKnightChickenBodyPath1() { - const char source[] = {'\xA7', '\x25', '\x32', '\x7A', '\xA0', '\x35', '\x04', '\xEE', '\xAD', '\x3E', '\x34', '\x75', '\xBB', '\x24', '\x18', '\xED', '\xAA', '\x34', '\x38', '\x78', '\xA1', '\x27', '\x1F', '\xF7', '\xA2', '\x30', '\x3C', '\x73', '\xB0', '\x30', '\x15', '\xEC', '\xA4', '\x3F', '\x27', '\x62', '\xAC', '\x33', '\x12', '\xE6', '\xA8', '\x32', '\x3D', '\x3D'}; + constexpr auto sourceText = CRYPT_NAME("DRAGON_KNIGHT_CHICKEN\\DRAGON_KNIGHT_CHICKEN", 0xA55B7BEF3D7377E3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5769,7 +5977,8 @@ EncryptedName<44, 0xA55B7BEF3D7377E3ULL>& DragonKnightChickenBodyPath1() { // OFFSET: 0x00DD4DB0 // FUNCTION: fn_23243 EncryptedName<30, 0x31E3CF9D358D8705ULL>& ImperialGuardBodyPath1() { - const char source[] = {'\x4C', '\xCA', '\xDD', '\x70', '\xCF', '\x86', '\xA2', '\x7D', '\x5A', '\xC0', '\xD8', '\x74', '\xCF', '\x8B', '\xBF', '\x78', '\x48', '\xD7', '\xC8', '\x67', '\xD4', '\x8E', '\xAF', '\x6E', '\x42', '\xD2', '\xCC', '\x67', '\xD9', '\xCF'}; + constexpr auto sourceText = CRYPT_NAME("IMPERIAL_GUARD\\IMPERIAL_GUARD", 0x31E3CF9D358D8705ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5777,7 +5986,8 @@ EncryptedName<30, 0x31E3CF9D358D8705ULL>& ImperialGuardBodyPath1() { // OFFSET: 0x00DD4E90 // FUNCTION: fn_23244 EncryptedName<44, 0x79A58B0F2173CF49ULL>& ImperialGuardRidingBodyPath1() { - const char source[] = {'\x00', '\x82', '\x23', '\x64', '\x5D', '\xC2', '\xE4', '\x35', '\x16', '\x88', '\x26', '\x60', '\x5D', '\xCF', '\xFA', '\x2B', '\x00', '\x8B', '\x3A', '\x6F', '\x48', '\xD7', '\xEC', '\x34', '\x19', '\x8A', '\x21', '\x68', '\x4E', '\xC7', '\xFA', '\x3E', '\x1C', '\x8E', '\x21', '\x65', '\x50', '\xD9', '\xEC', '\x3D', '\x00', '\x81', '\x34', '\x21'}; + constexpr auto sourceText = CRYPT_NAME("IMPERIAL_GUARD_RIDING\\IMPERIAL_GUARD_RIDING", 0x79A58B0F2173CF49ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5785,7 +5995,8 @@ EncryptedName<44, 0x79A58B0F2173CF49ULL>& ImperialGuardRidingBodyPath1() { // OFFSET: 0x00DD4F70 // FUNCTION: fn_23245 EncryptedName<46, 0xF5496753BDE7C5BDULL>& ImperialGuardChickenBodyPath1() { - const char source[] = {'\xF4', '\x88', '\xB7', '\xF8', '\x01', '\x2E', '\x08', '\xB9', '\xE2', '\x82', '\xB2', '\xFC', '\x01', '\x23', '\x16', '\xB6', '\xF5', '\x8C', '\xA4', '\xF6', '\x16', '\x29', '\x15', '\xBC', '\xF0', '\x95', '\xA2', '\xEF', '\x1A', '\x26', '\x05', '\xAA', '\xFA', '\x90', '\xA6', '\xEF', '\x17', '\x38', '\x0A', '\xBD', '\xF4', '\x86', '\xAC', '\xF8', '\x1D', '\x67'}; + constexpr auto sourceText = CRYPT_NAME("IMPERIAL_GUARD_CHICKEN\\IMPERIAL_GUARD_CHICKEN", 0xF5496753BDE7C5BDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5793,7 +6004,8 @@ EncryptedName<46, 0xF5496753BDE7C5BDULL>& ImperialGuardChickenBodyPath1() { // OFFSET: 0x00DD5060 // FUNCTION: fn_23246 EncryptedName<26, 0x795787B7779D19DBULL>& ShadowCrossBodyPath1() { - const char source[] = {'\x88', '\x51', '\xDC', '\x33', '\xF8', '\xD0', '\x08', '\x3A', '\x89', '\x56', '\xCE', '\x24', '\xEB', '\xD4', '\x1F', '\x38', '\x9F', '\x56', '\xCA', '\x28', '\xF4', '\xD5', '\x18', '\x2A', '\x88', '\x19'}; + constexpr auto sourceText = CRYPT_NAME("SHADOW_CROSS\\SHADOW_CROSS", 0x795787B7779D19DBULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5801,7 +6013,8 @@ EncryptedName<26, 0x795787B7779D19DBULL>& ShadowCrossBodyPath1() { // OFFSET: 0x00DD5140 // FUNCTION: fn_23247 EncryptedName<33, 0x6B3917C939150B9BULL>& ShadowCrossRidingBodyPath1() { - const char source[] = {'\xC8', '\x43', '\x54', '\x7D', '\x86', '\x40', '\x66', '\x28', '\xC9', '\x44', '\x46', '\x6A', '\x95', '\x44', '\x71', '\x2A', '\xDF', '\x44', '\x42', '\x66', '\x8A', '\x45', '\x76', '\x38', '\xC8', '\x54', '\x47', '\x70', '\x8D', '\x5E', '\x77', '\x2C', '\x9B'}; + constexpr auto sourceText = CRYPT_NAME("SHADOW_CROSS\\SHADOW_CROSS_RIDING", 0x6B3917C939150B9BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5809,7 +6022,8 @@ EncryptedName<33, 0x6B3917C939150B9BULL>& ShadowCrossRidingBodyPath1() { // OFFSET: 0x00DD5210 // FUNCTION: fn_23248 EncryptedName<26, 0x29AB0B59651BDFD5ULL>& AbyssChaserBodyPath1() { - const char source[] = {'\x94', '\x9D', '\x42', '\x36', '\x0A', '\x54', '\xE8', '\x61', '\x94', '\x8C', '\x5E', '\x37', '\x05', '\x4A', '\xE9', '\x70', '\x86', '\x8C', '\x44', '\x26', '\x11', '\x4A', '\xF8', '\x6C', '\x87', '\xDF'}; + constexpr auto sourceText = CRYPT_NAME("ABYSS_CHASER\\ABYSS_CHASER", 0x29AB0B59651BDFD5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5817,7 +6031,8 @@ EncryptedName<26, 0x29AB0B59651BDFD5ULL>& AbyssChaserBodyPath1() { // OFFSET: 0x00DD52F0 // FUNCTION: fn_23249 EncryptedName<33, 0xF9B1EF9F7961EFF5ULL>& AbyssChaserRidingBodyPath1() { - const char source[] = {'\xB4', '\xAD', '\x38', '\x2A', '\xCC', '\xB0', '\xF2', '\xB1', '\xB4', '\xBC', '\x24', '\x2B', '\xC3', '\xAE', '\xF3', '\xA0', '\xA6', '\xBC', '\x3E', '\x3A', '\xD7', '\xAE', '\xE2', '\xBC', '\xA7', '\xB0', '\x33', '\x30', '\xDB', '\xA6', '\xFF', '\xBE', '\xF5'}; + constexpr auto sourceText = CRYPT_NAME("ABYSS_CHASER\\ABYSS_CHASER_RIDING", 0xF9B1EF9F7961EFF5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5825,7 +6040,8 @@ EncryptedName<33, 0xF9B1EF9F7961EFF5ULL>& AbyssChaserRidingBodyPath1() { // OFFSET: 0x00DD53C0 // FUNCTION: fn_23250 EncryptedName<24, 0xA1DFCDAD555BB16DULL>& SkyEmperorBodyPath1() { - const char source[] = {'\x3E', '\xFA', '\x02', '\x0A', '\xE8', '\x80', '\x8F', '\xE4', '\x3F', '\xFE', '\x09', '\x09', '\xFE', '\x86', '\x86', '\xFE', '\x28', '\xFC', '\x0B', '\x10', '\xFF', '\x82', '\x8D', '\xA1'}; + constexpr auto sourceText = CRYPT_NAME("SKY_EMPEROR\\SKY_EMPEROR", 0xA1DFCDAD555BB16DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5833,7 +6049,8 @@ EncryptedName<24, 0xA1DFCDAD555BB16DULL>& SkyEmperorBodyPath1() { // OFFSET: 0x00DD5490 // FUNCTION: fn_23251 EncryptedName<25, 0xAFF9332FD397533FULL>& SkyEmperor2BodyPath1() { - const char source[] = {'\x6C', '\x18', '\xCE', '\x8C', '\x6A', '\x7E', '\xA9', '\xEA', '\x6D', '\x1C', '\xC5', '\x8F', '\x7C', '\x78', '\xA0', '\xF0', '\x7A', '\x1E', '\xC7', '\x96', '\x7D', '\x7C', '\xAB', '\x9D', '\x3F'}; + constexpr auto sourceText = CRYPT_NAME("SKY_EMPEROR\\SKY_EMPEROR2", 0xAFF9332FD397533FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5841,7 +6058,8 @@ EncryptedName<25, 0xAFF9332FD397533FULL>& SkyEmperor2BodyPath1() { // OFFSET: 0x00DD5570 // FUNCTION: fn_23252 EncryptedName<31, 0x194F8339AF753FADULL>& SkyEmperorRidingBodyPath1() { - const char source[] = {'\xFE', '\x74', '\x2C', '\xF0', '\x7C', '\xCE', '\x1F', '\x5C', '\xFF', '\x70', '\x27', '\xF3', '\x6A', '\xC8', '\x16', '\x46', '\xE8', '\x72', '\x25', '\xEA', '\x6B', '\xCC', '\x1D', '\x46', '\xFF', '\x76', '\x31', '\xE6', '\x77', '\xC4', '\x4F'}; + constexpr auto sourceText = CRYPT_NAME("SKY_EMPEROR\\SKY_EMPEROR_RIDING", 0x194F8339AF753FADULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5849,7 +6067,8 @@ EncryptedName<31, 0x194F8339AF753FADULL>& SkyEmperorRidingBodyPath1() { // OFFSET: 0x00DD5650 // FUNCTION: fn_23253 EncryptedName<26, 0x7DC10333F96DE3E7ULL>& SoulAsceticBodyPath1() { - const char source[] = {'\xB4', '\xAC', '\x38', '\xB5', '\x6C', '\x42', '\x92', '\x3E', '\xA2', '\xB7', '\x24', '\xBA', '\x6F', '\x50', '\x8E', '\x28', '\xAB', '\xBC', '\x2C', '\xAA', '\x70', '\x46', '\x95', '\x34', '\xA4', '\xE3'}; + constexpr auto sourceText = CRYPT_NAME("SOUL_ASCETIC\\SOUL_ASCETIC", 0x7DC10333F96DE3E7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5857,7 +6076,8 @@ EncryptedName<26, 0x7DC10333F96DE3E7ULL>& SoulAsceticBodyPath1() { // OFFSET: 0x00DD5730 // FUNCTION: fn_23254 EncryptedName<33, 0xE9FBAB53D5A1BB17ULL>& SoulAsceticRidingBodyPath1() { - const char source[] = {'\x44', '\xF4', '\xF4', '\x99', '\x0C', '\xEA', '\xA8', '\xAA', '\x52', '\xEF', '\xE8', '\x96', '\x0F', '\xF8', '\xB4', '\xBC', '\x5B', '\xE4', '\xE0', '\x86', '\x10', '\xEE', '\xAF', '\xA0', '\x54', '\xE4', '\xF3', '\x9C', '\x17', '\xE2', '\xB5', '\xAE', '\x17'}; + constexpr auto sourceText = CRYPT_NAME("SOUL_ASCETIC\\SOUL_ASCETIC_RIDING", 0xE9FBAB53D5A1BB17ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5865,7 +6085,8 @@ EncryptedName<33, 0xE9FBAB53D5A1BB17ULL>& SoulAsceticRidingBodyPath1() { // OFFSET: 0x00DD5800 // FUNCTION: fn_23255 EncryptedName<18, 0x51372B6F4BA14B23ULL>& ShinkiroBodyPath1() { - const char source[] = {'\x70', '\x03', '\xE8', '\x05', '\x24', '\x62', '\x65', '\x1E', '\x7F', '\x18', '\xE9', '\x02', '\x21', '\x60', '\x7E', '\x03', '\x6C', '\x4B'}; + constexpr auto sourceText = CRYPT_NAME("SHINKIRO\\SHINKIRO", 0x51372B6F4BA14B23ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5873,7 +6094,8 @@ EncryptedName<18, 0x51372B6F4BA14B23ULL>& ShinkiroBodyPath1() { // OFFSET: 0x00DD58D0 // FUNCTION: fn_23256 EncryptedName<25, 0xB70319D3A78D39CDULL>& ShinkiroRidingBodyPath1() { - const char source[] = {'\x9E', '\x71', '\xC4', '\xE9', '\x98', '\x50', '\x51', '\xF8', '\x91', '\x6A', '\xC5', '\xEE', '\x9D', '\x52', '\x4A', '\xE5', '\x82', '\x66', '\xDF', '\xEE', '\x97', '\x50', '\x4D', '\xF0', '\xCD'}; + constexpr auto sourceText = CRYPT_NAME("SHINKIRO\\SHINKIRO_RIDING", 0xB70319D3A78D39CDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5881,7 +6103,8 @@ EncryptedName<25, 0xB70319D3A78D39CDULL>& ShinkiroRidingBodyPath1() { // OFFSET: 0x00DD59B0 // FUNCTION: fn_23257 EncryptedName<18, 0x1F79132B518FD389ULL>& ShiranuiBodyPath1() { - const char source[] = {'\xDA', '\x9B', '\xC6', '\x03', '\x6A', '\x5D', '\x2C', '\x56', '\xD5', '\x80', '\xC7', '\x18', '\x79', '\x52', '\x37', '\x4A', '\xC0', '\xD3'}; + constexpr auto sourceText = CRYPT_NAME("SHIRANUI\\SHIRANUI", 0x1F79132B518FD389ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5889,7 +6112,8 @@ EncryptedName<18, 0x1F79132B518FD389ULL>& ShiranuiBodyPath1() { // OFFSET: 0x00DD5A80 // FUNCTION: fn_23258 EncryptedName<25, 0xC1FD95811D1F4FA1ULL>& ShiranuiRidingBodyPath1() { - const char source[] = {'\xF2', '\x07', '\x56', '\x4F', '\xC0', '\xDB', '\xA8', '\x88', '\xFD', '\x1C', '\x57', '\x54', '\xD3', '\xD4', '\xB3', '\x94', '\xE8', '\x10', '\x4D', '\x54', '\xC5', '\xDC', '\xB3', '\x86', '\xA1'}; + constexpr auto sourceText = CRYPT_NAME("SHIRANUI\\SHIRANUI_RIDING", 0xC1FD95811D1F4FA1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5897,7 +6121,8 @@ EncryptedName<25, 0xC1FD95811D1F4FA1ULL>& ShiranuiRidingBodyPath1() { // OFFSET: 0x00DD5B60 // FUNCTION: fn_23259 EncryptedName<24, 0x35F59F6F3DD1C965ULL>& NightWatchBodyPath1() { - const char source[] = {'\x2B', '\x80', '\x96', '\x75', '\x3B', '\xC0', '\xA2', '\x74', '\x31', '\x8A', '\x99', '\x61', '\x21', '\xD6', '\xB2', '\x7D', '\x31', '\x96', '\x86', '\x7C', '\x3B', '\xDC', '\xBD', '\x35'}; + constexpr auto sourceText = CRYPT_NAME("NIGHT_WATCH\\NIGHT_WATCH", 0x35F59F6F3DD1C965ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5905,7 +6130,8 @@ EncryptedName<24, 0x35F59F6F3DD1C965ULL>& NightWatchBodyPath1() { // OFFSET: 0x00DD5C30 // FUNCTION: fn_23260 EncryptedName<31, 0xD7BBEB2DDB295D11ULL>& NightWatchRidingBodyPath1() { - const char source[] = {'\x5F', '\x14', '\x6E', '\x93', '\x79', '\xB4', '\xEC', '\x96', '\x45', '\x1E', '\x61', '\x87', '\x63', '\xA2', '\xFC', '\x9F', '\x45', '\x02', '\x7E', '\x9A', '\x79', '\xA8', '\xF3', '\x88', '\x43', '\x14', '\x6D', '\x92', '\x63', '\xAC', '\xBB'}; + constexpr auto sourceText = CRYPT_NAME("NIGHT_WATCH\\NIGHT_WATCH_RIDING", 0xD7BBEB2DDB295D11ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5913,7 +6139,8 @@ EncryptedName<31, 0xD7BBEB2DDB295D11ULL>& NightWatchRidingBodyPath1() { // OFFSET: 0x00DD5D10 // FUNCTION: fn_23261 EncryptedName<26, 0xBF0F412941076FADULL>& HyperNoviceBodyPath1() { - const char source[] = {'\xE5', '\x36', '\x57', '\x04', '\x7B', '\x1E', '\x41', '\xF0', '\xFB', '\x26', '\x44', '\x04', '\x75', '\x09', '\x56', '\xEF', '\xE8', '\x3D', '\x58', '\x0F', '\x66', '\x17', '\x46', '\xFC', '\xE8', '\x6F'}; + constexpr auto sourceText = CRYPT_NAME("HYPER_NOVICE\\HYPER_NOVICE", 0xBF0F412941076FADULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5921,7 +6148,8 @@ EncryptedName<26, 0xBF0F412941076FADULL>& HyperNoviceBodyPath1() { // OFFSET: 0x00DD5DF0 // FUNCTION: fn_23262 EncryptedName<33, 0x8DFF0B4B67D9FDE1ULL>& HyperNoviceRidingBodyPath1() { - const char source[] = {'\xA9', '\xA4', '\x89', '\x22', '\x19', '\x54', '\xB1', '\xC2', '\xB7', '\xB4', '\x9A', '\x22', '\x17', '\x43', '\xA6', '\xDD', '\xA4', '\xAF', '\x86', '\x29', '\x04', '\x5D', '\xB6', '\xCE', '\xA4', '\xA2', '\x8B', '\x2E', '\x0F', '\x42', '\xB1', '\xCA', '\xE1'}; + constexpr auto sourceText = CRYPT_NAME("HYPER_NOVICE\\HYPER_NOVICE_RIDING", 0x8DFF0B4B67D9FDE1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5929,7 +6157,8 @@ EncryptedName<33, 0x8DFF0B4B67D9FDE1ULL>& HyperNoviceRidingBodyPath1() { // OFFSET: 0x00DD5EC0 // FUNCTION: fn_23263 EncryptedName<30, 0xB59BADC5B365617DULL>& SpiritHandlerBodyPath1() { - const char source[] = {'\x2E', '\x31', '\x2C', '\xE1', '\x8C', '\xF9', '\xC4', '\xFD', '\x3C', '\x2F', '\x21', '\xFF', '\x80', '\xFF', '\xC7', '\xE6', '\x2D', '\x28', '\x37', '\xFA', '\x91', '\xF2', '\xD3', '\xF4', '\x33', '\x25', '\x29', '\xF6', '\x97', '\xAD'}; + constexpr auto sourceText = CRYPT_NAME("SPIRIT_HANDLER\\SPIRIT_HANDLER", 0xB59BADC5B365617DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5937,7 +6166,8 @@ EncryptedName<30, 0xB59BADC5B365617DULL>& SpiritHandlerBodyPath1() { // OFFSET: 0x00DD5FA0 // FUNCTION: fn_23264 EncryptedName<37, 0x77D925073D6F19B9ULL>& SpiritHandlerRidingBodyPath1() { - const char source[] = {'\xEA', '\x49', '\x26', '\x6F', '\x4E', '\x71', '\x86', '\x3F', '\xF8', '\x57', '\x2B', '\x71', '\x42', '\x77', '\x85', '\x24', '\xE9', '\x50', '\x3D', '\x74', '\x53', '\x7A', '\x91', '\x36', '\xF7', '\x5D', '\x23', '\x78', '\x55', '\x7A', '\x8B', '\x3E', '\xFD', '\x50', '\x21', '\x7A', '\x07'}; + constexpr auto sourceText = CRYPT_NAME("SPIRIT_HANDLER\\SPIRIT_HANDLER_RIDING", 0x77D925073D6F19B9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5945,7 +6175,8 @@ EncryptedName<37, 0x77D925073D6F19B9ULL>& SpiritHandlerRidingBodyPath1() { // OFFSET: 0x00DD6080 // FUNCTION: fn_23265 EncryptedName<12, 0x91E7A7DFA58F9B6BULL>& DruidBodyPath1() { - const char source[] = {'\x2F', '\xC9', '\xDA', '\xEC', '\x9B', '\xFB', '\xA3', '\xC3', '\x3E', '\xD2', '\xCB', '\xA5'}; + constexpr auto sourceText = CRYPT_NAME("DRUID\\DRUID", 0x91E7A7DFA58F9B6BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5953,7 +6184,8 @@ EncryptedName<12, 0x91E7A7DFA58F9B6BULL>& DruidBodyPath1() { // OFFSET: 0x00DD6150 // FUNCTION: fn_23266 EncryptedName<12, 0x2529F16B0375530DULL>& DruidBodyPath2() { - const char source[] = {'\x49', '\x01', '\x20', '\x4A', '\x2F', '\xAD', '\x6D', '\x77', '\x58', '\x1A', '\x31', '\x03'}; + constexpr auto sourceText = CRYPT_NAME("DRUID\\DRUID", 0x2529F16B0375530DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5961,7 +6193,8 @@ EncryptedName<12, 0x2529F16B0375530DULL>& DruidBodyPath2() { // OFFSET: 0x00DD6220 // FUNCTION: fn_23267 EncryptedName<14, 0x91DF1F5D3B014D45ULL>& KarnosBodyPath1() { - const char source[] = {'\x0E', '\x0C', '\x53', '\x75', '\x12', '\x4C', '\x83', '\xDA', '\x04', '\x1F', '\x4F', '\x74', '\x0E', '\x1F'}; + constexpr auto sourceText = CRYPT_NAME("KARNOS\\KARNOS", 0x91DF1F5D3B014D45ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5969,7 +6202,8 @@ EncryptedName<14, 0x91DF1F5D3B014D45ULL>& KarnosBodyPath1() { // OFFSET: 0x00DD62F0 // FUNCTION: fn_23268 EncryptedName<14, 0x0D7FA94DD32361A9ULL>& KarnosBodyPath2() { - const char source[] = {'\xE2', '\x20', '\x71', '\x9D', '\x02', '\xFA', '\x23', '\x46', '\xE8', '\x33', '\x6D', '\x9C', '\x1E', '\xA9'}; + constexpr auto sourceText = CRYPT_NAME("KARNOS\\KARNOS", 0x0D7FA94DD32361A9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5977,7 +6211,8 @@ EncryptedName<14, 0x0D7FA94DD32361A9ULL>& KarnosBodyPath2() { // OFFSET: 0x00DD63C0 // FUNCTION: fn_23269 EncryptedName<14, 0x2F371DDDADDD53CFULL>& AliteaBodyPath1() { - const char source[] = {'\x8E', '\x1F', '\x94', '\xF9', '\x98', '\x5C', '\x6B', '\x6E', '\x83', '\x1A', '\x89', '\xE8', '\x9C', '\x1D'}; + constexpr auto sourceText = CRYPT_NAME("ALITEA\\ALITEA", 0x2F371DDDADDD53CFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5985,7 +6220,8 @@ EncryptedName<14, 0x2F371DDDADDD53CFULL>& AliteaBodyPath1() { // OFFSET: 0x00DD6490 // FUNCTION: fn_23270 EncryptedName<6, 0x2F3D75DFCF678FF3ULL>& DruidJobName1() { - const char source[] = {'\xB7', '\xDD', '\x32', '\x86', '\x9B', '\x75'}; + constexpr auto sourceText = CRYPT_NAME("DRUID", 0x2F3D75DFCF678FF3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -5993,7 +6229,8 @@ EncryptedName<6, 0x2F3D75DFCF678FF3ULL>& DruidJobName1() { // OFFSET: 0x00DD6560 // FUNCTION: fn_23271 EncryptedName<6, 0x3BBB5F0F8F216F31ULL>& DruidJobName2() { - const char source[] = {'\x75', '\x3D', '\x74', '\xC6', '\x4B', '\x5F'}; + constexpr auto sourceText = CRYPT_NAME("DRUID", 0x3BBB5F0F8F216F31ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6001,7 +6238,8 @@ EncryptedName<6, 0x3BBB5F0F8F216F31ULL>& DruidJobName2() { // OFFSET: 0x00DD6630 // FUNCTION: fn_23272 EncryptedName<7, 0x6F9D21B96D71C1FFULL>& KarnosJobName1() { - const char source[] = {'\xB4', '\x80', '\x23', '\x23', '\xF6', '\x72', '\x9D'}; + constexpr auto sourceText = CRYPT_NAME("KARNOS", 0x6F9D21B96D71C1FFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6009,7 +6247,8 @@ EncryptedName<7, 0x6F9D21B96D71C1FFULL>& KarnosJobName1() { // OFFSET: 0x00DD6700 // FUNCTION: fn_23273 EncryptedName<7, 0xED730315539785C7ULL>& KarnosJobName2() { - const char source[] = {'\x8C', '\xC4', '\xC5', '\x1D', '\x5A', '\x50', '\x73'}; + constexpr auto sourceText = CRYPT_NAME("KARNOS", 0xED730315539785C7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6017,7 +6256,8 @@ EncryptedName<7, 0xED730315539785C7ULL>& KarnosJobName2() { // OFFSET: 0x00DD67D0 // FUNCTION: fn_23274 EncryptedName<7, 0x8F61434F0F79DDD7ULL>& AliteaJobName1() { - const char source[] = {'\x96', '\x91', '\x30', '\x5B', '\x0A', '\x02', '\x61'}; + constexpr auto sourceText = CRYPT_NAME("ALITEA", 0x8F61434F0F79DDD7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6025,7 +6265,8 @@ EncryptedName<7, 0x8F61434F0F79DDD7ULL>& AliteaJobName1() { // OFFSET: 0x00DD68A0 // FUNCTION: fn_23275 EncryptedName<9, 0xA5C5D1A3B9457B53ULL>& WerewolfJobName1() { - const char source[] = {'\x04', '\x3E', '\x17', '\xFC', '\xF4', '\x9E', '\x89', '\xE3', '\x53'}; + constexpr auto sourceText = CRYPT_NAME("WEREWOLF", 0xA5C5D1A3B9457B53ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6033,7 +6274,8 @@ EncryptedName<9, 0xA5C5D1A3B9457B53ULL>& WerewolfJobName1() { // OFFSET: 0x00DD6A40 // FUNCTION: fn_23277 EncryptedName<13, 0x4B670715D543C1C3ULL>& DruidRidingName() { - const char source[] = {'\x87', '\x93', '\x16', '\x9C', '\x51', '\x58', '\x35', '\x02', '\x87', '\x88', '\x0D', '\x92', '\x15'}; + constexpr auto sourceText = CRYPT_NAME("DRUID_RIDING", 0x4B670715D543C1C3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6041,7 +6283,8 @@ EncryptedName<13, 0x4B670715D543C1C3ULL>& DruidRidingName() { // OFFSET: 0x00DD6B10 // FUNCTION: fn_23278 EncryptedName<14, 0x7155E5EF0DFB0D03ULL>& KarnosRidingName() { - const char source[] = {'\x48', '\x4C', '\xA9', '\x43', '\xA0', '\xB6', '\x0A', '\x23', '\x4A', '\x49', '\xB2', '\x43', '\xA8', '\xE5'}; + constexpr auto sourceText = CRYPT_NAME("KARNOS_RIDING", 0x7155E5EF0DFB0D03ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6049,7 +6292,8 @@ EncryptedName<14, 0x7155E5EF0DFB0D03ULL>& KarnosRidingName() { // OFFSET: 0x00DD6BE0 // FUNCTION: fn_23279 EncryptedName<14, 0x4B1D078937DB892BULL>& AliteaRidingName() { - const char source[] = {'\x6A', '\xC5', '\x92', '\x63', '\xCC', '\x46', '\x42', '\x19', '\x62', '\xCD', '\x92', '\x79', '\xCE', '\x07'}; + constexpr auto sourceText = CRYPT_NAME("ALITEA_RIDING", 0x4B1D078937DB892BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6057,7 +6301,8 @@ EncryptedName<14, 0x4B1D078937DB892BULL>& AliteaRidingName() { // OFFSET: 0x00E29530 // FUNCTION: fn_24044 EncryptedName<14, 0x6BC977B3B5993503ULL>& PoringSuperNovice2SpriteName() { - const char source[] = {'\xC0', '\xFF', '\x23', '\x0D', '\x73', '\xAD', '\x95', '\xA8', '\xC9', '\x8F', '\x21', '\x75', '\x69', '\x77'}; + constexpr auto sourceText = CRYPT_NAME("초보자\\초보자", 0x6BC977B3B5993503ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6065,7 +6310,8 @@ EncryptedName<14, 0x6BC977B3B5993503ULL>& PoringSuperNovice2SpriteName() { // OFFSET: 0x00E29600 // FUNCTION: fn_24045 EncryptedName<14, 0x91493751EF33B5FDULL>& PoringSuperNovice2BabySpriteName() { - const char source[] = {'\x3E', '\x7F', '\x89', '\x57', '\x91', '\xED', '\x15', '\x52', '\x37', '\x0F', '\x8B', '\x2F', '\x8B', '\x37'}; + constexpr auto sourceText = CRYPT_NAME("초보자\\초보자", 0x91493751EF33B5FDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6073,7 +6319,8 @@ EncryptedName<14, 0x91493751EF33B5FDULL>& PoringSuperNovice2BabySpriteName() { // OFFSET: 0x00E296D0 // FUNCTION: fn_24046 EncryptedName<18, 0x0DF5B33D9F21EB79ULL>& SheepPriestBabySpriteName() { - const char source[] = {'\xBE', '\x2A', '\x99', '\x31', '\x80', '\x09', '\x33', '\xA3', '\x25', '\x2C', '\xE0', '\x27', '\x93', '\x0E', '\x4F', '\xCB', '\xD7', '\xEB'}; + constexpr auto sourceText = CRYPT_NAME("프리스트\\프리스트", 0x0DF5B33D9F21EB79ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6081,7 +6328,8 @@ EncryptedName<18, 0x0DF5B33D9F21EB79ULL>& SheepPriestBabySpriteName() { // OFFSET: 0x00E297A0 // FUNCTION: fn_24047 EncryptedName<14, 0x01E7898D9D235DDFULL>& FoxWizardBabySpriteName() { - const char source[] = {'\x1F', '\xFA', '\xE3', '\x67', '\x38', '\x6C', '\xBB', '\xC1', '\x78', '\x9D', '\xD9', '\x28', '\x68', '\x89'}; + constexpr auto sourceText = CRYPT_NAME("위저드\\위저드", 0x01E7898D9D235DDFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6089,7 +6337,8 @@ EncryptedName<14, 0x01E7898D9D235DDFULL>& FoxWizardBabySpriteName() { // OFFSET: 0x00E29870 // FUNCTION: fn_24048 EncryptedName<14, 0x6961FF056999A303ULL>& PigBlacksmithBabySpriteName() { - const char source[] = {'\xC2', '\x05', '\x5A', '\xDF', '\xB5', '\x07', '\x3D', '\xA8', '\xA5', '\x60', '\x2F', '\xD9', '\xFD', '\xFF'}; + constexpr auto sourceText = CRYPT_NAME("제철공\\제철공", 0x6961FF056999A303ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6097,7 +6346,8 @@ EncryptedName<14, 0x6961FF056999A303ULL>& PigBlacksmithBabySpriteName() { // OFFSET: 0x00E29940 // FUNCTION: fn_24049 EncryptedName<14, 0x9DEFC105A1EB2F71ULL>& PigMechanicSpriteName() { - const char source[] = {'\xC8', '\xE3', '\x2F', '\x68', '\xB1', '\x11', '\xB3', '\x24', '\xBD', '\xEB', '\x22', '\x15', '\xD5', '\xC1'}; + constexpr auto sourceText = CRYPT_NAME("미케닉\\미케닉", 0x9DEFC105A1EB2F71ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6105,7 +6355,8 @@ EncryptedName<14, 0x9DEFC105A1EB2F71ULL>& PigMechanicSpriteName() { // OFFSET: 0x00E29A10 // FUNCTION: fn_24050 EncryptedName<14, 0xC7FB6DF18577D34BULL>& PigMechanicBabySpriteName() { - const char source[] = {'\xF2', '\x1F', '\xB3', '\x4C', '\x45', '\xBD', '\xA7', '\x7E', '\x87', '\x17', '\xBE', '\x31', '\x21', '\x6D'}; + constexpr auto sourceText = CRYPT_NAME("미케닉\\미케닉", 0xC7FB6DF18577D34BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6113,7 +6364,8 @@ EncryptedName<14, 0xC7FB6DF18577D34BULL>& PigMechanicBabySpriteName() { // OFFSET: 0x00E29AE0 // FUNCTION: fn_24051 EncryptedName<14, 0xBD3F430159B551FDULL>& OstrichRangerSpriteName() { - const char source[] = {'\x4A', '\xE8', '\x75', '\x97', '\xC0', '\xED', '\x63', '\x0A', '\x44', '\x91', '\x7B', '\x98', '\xAF', '\x43'}; + constexpr auto sourceText = CRYPT_NAME("레인져\\레인져", 0xBD3F430159B551FDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6121,7 +6373,8 @@ EncryptedName<14, 0xBD3F430159B551FDULL>& OstrichRangerSpriteName() { // OFFSET: 0x00E29BB0 // FUNCTION: fn_24052 EncryptedName<14, 0x2B477F9B5B39B301ULL>& OstrichRangerBabySpriteName() { - const char source[] = {'\xB6', '\x0A', '\xF9', '\x95', '\x5A', '\xD1', '\x1B', '\x9C', '\xB8', '\x73', '\xF7', '\x9A', '\x35', '\x7F'}; + constexpr auto sourceText = CRYPT_NAME("레인져\\레인져", 0x2B477F9B5B39B301ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6129,7 +6382,8 @@ EncryptedName<14, 0x2B477F9B5B39B301ULL>& OstrichRangerBabySpriteName() { // OFFSET: 0x00E29C80 // FUNCTION: fn_24053 EncryptedName<10, 0x5B832361BDA77197ULL>& LionKnightSpriteName() { - const char source[] = {'\x26', '\x93', '\x1C', '\x5A', '\x3D', '\x92', '\x61', '\xE0', '\x70', '\x71'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0x5B832361BDA77197ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6137,7 +6391,8 @@ EncryptedName<10, 0x5B832361BDA77197ULL>& LionKnightSpriteName() { // OFFSET: 0x00E29D50 // FUNCTION: fn_24054 EncryptedName<10, 0xEB3D4FAB0FC183DBULL>& LionKnightBabySpriteName() { - const char source[] = {'\x6A', '\x61', '\x7A', '\xE8', '\xF7', '\xFE', '\xDF', '\x50', '\x3C', '\x83'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0xEB3D4FAB0FC183DBULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6145,7 +6400,8 @@ EncryptedName<10, 0xEB3D4FAB0FC183DBULL>& LionKnightBabySpriteName() { // OFFSET: 0x00E29E20 // FUNCTION: fn_24055 EncryptedName<10, 0xFFBF43D1FFD5FF49ULL>& LionKnightHighSpriteName() { - const char source[] = {'\xF8', '\x1D', '\x6E', '\x18', '\x8D', '\xF2', '\x5D', '\x44', '\xAE', '\xFF'}; + constexpr auto sourceText = CRYPT_NAME("기사\\기사", 0xFFBF43D1FFD5FF49ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6153,7 +6409,8 @@ EncryptedName<10, 0xFFBF43D1FFD5FF49ULL>& LionKnightHighSpriteName() { // OFFSET: 0x00E29EF0 // FUNCTION: fn_24056 EncryptedName<18, 0xE51B29334D353B81ULL>& LionRoyalGuardSpriteName() { - const char source[] = {'\x36', '\xF5', '\x8B', '\xAF', '\x83', '\x88', '\xAE', '\x00', '\xDD', '\x8C', '\xFB', '\xF3', '\xD1', '\x99', '\xBA', '\x50', '\x64', '\x3B'}; + constexpr auto sourceText = CRYPT_NAME("로얄가드\\로얄가드", 0xE51B29334D353B81ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6161,7 +6418,8 @@ EncryptedName<18, 0xE51B29334D353B81ULL>& LionRoyalGuardSpriteName() { // OFFSET: 0x00E29FC0 // FUNCTION: fn_24057 EncryptedName<18, 0x8F3F2FA959977F9FULL>& LionRoyalGuardBabySpriteName() { - const char source[] = {'\x28', '\xB1', '\x29', '\xBB', '\x19', '\x8E', '\x8A', '\x6A', '\xC3', '\xC8', '\x59', '\xE7', '\x4B', '\x9F', '\x9E', '\x3A', '\x7A', '\x7F'}; + constexpr auto sourceText = CRYPT_NAME("로얄가드\\로얄가드", 0x8F3F2FA959977F9FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6169,7 +6427,8 @@ EncryptedName<18, 0x8F3F2FA959977F9FULL>& LionRoyalGuardBabySpriteName() { // OFFSET: 0x00E2A090 // FUNCTION: fn_24058 EncryptedName<18, 0x7FE563BD3FB7F925ULL>& LionRuneKnightSpriteName() { - const char source[] = {'\x92', '\x10', '\x04', '\x95', '\x7D', '\xAF', '\x23', '\xD1', '\x79', '\x4E', '\x5E', '\x8C', '\x17', '\xA3', '\x29', '\xB9', '\x8B', '\xF9'}; + constexpr auto sourceText = CRYPT_NAME("룬나이트\\룬나이트", 0x7FE563BD3FB7F925ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6177,7 +6436,8 @@ EncryptedName<18, 0x7FE563BD3FB7F925ULL>& LionRuneKnightSpriteName() { // OFFSET: 0x00E2A160 // FUNCTION: fn_24059 EncryptedName<18, 0x8B3FA35B5BDDDF89ULL>& LionRuneKnightBabySpriteName() { - const char source[] = {'\x3E', '\x36', '\x6E', '\xF1', '\x9B', '\x6F', '\xF9', '\x25', '\xD5', '\x68', '\x34', '\xE8', '\xF1', '\x63', '\xF3', '\x4D', '\x27', '\xDF'}; + constexpr auto sourceText = CRYPT_NAME("룬나이트\\룬나이트", 0x8B3FA35B5BDDDF89ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6185,7 +6445,8 @@ EncryptedName<18, 0x8B3FA35B5BDDDF89ULL>& LionRuneKnightBabySpriteName() { // OFFSET: 0x00E2A230 // FUNCTION: fn_24060 EncryptedName<22, 0x7DB1050779034DE7ULL>& LionCrusaderSpriteName() { - const char source[] = {'\x22', '\xE4', '\xB4', '\x9E', '\xBB', '\xB9', '\x71', '\xB1', '\x53', '\xB8', '\x5F', '\xBC', '\xAE', '\xB2', '\x56', '\xC1', '\x5B', '\x8D', '\xCF', '\xCD', '\xF2', '\x05'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0x7DB1050779034DE7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6193,7 +6454,8 @@ EncryptedName<22, 0x7DB1050779034DE7ULL>& LionCrusaderSpriteName() { // OFFSET: 0x00E2A300 // FUNCTION: fn_24061 EncryptedName<22, 0x5D6B3B1DEB2397B1ULL>& LionCrusaderBabySpriteName() { - const char source[] = {'\x74', '\x3E', '\x94', '\x0C', '\xA1', '\x87', '\xAB', '\x91', '\x05', '\x62', '\x7F', '\x2E', '\xB4', '\x8C', '\x8C', '\xE1', '\x0D', '\x57', '\xEF', '\x5F', '\xE8', '\x3B'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0x5D6B3B1DEB2397B1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6201,7 +6463,8 @@ EncryptedName<22, 0x5D6B3B1DEB2397B1ULL>& LionCrusaderBabySpriteName() { // OFFSET: 0x00E2A3D0 // FUNCTION: fn_24062 EncryptedName<22, 0x07112F85A39F4FABULL>& LionCrusaderHighSpriteName() { - const char source[] = {'\x6E', '\xE6', '\x28', '\x44', '\x39', '\x93', '\xD1', '\xCB', '\x1F', '\xBA', '\xC3', '\x66', '\x2C', '\x98', '\xF6', '\xBB', '\x17', '\x8F', '\x53', '\x17', '\x70', '\x2F'}; + constexpr auto sourceText = CRYPT_NAME("크루세이더\\크루세이더", 0x07112F85A39F4FABULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6209,7 +6472,8 @@ EncryptedName<22, 0x07112F85A39F4FABULL>& LionCrusaderHighSpriteName() { // OFFSET: 0x00E2A4A0 // FUNCTION: fn_24063 EncryptedName<16, 0x45E3F103CBB5F157ULL>& KagerouSpriteName() { - const char source[] = {'\x3C', '\x90', '\xD2', '\xAE', '\x71', '\x9E', '\x96', '\x19', '\x3C', '\x90', '\xD2', '\xAE', '\x71', '\x9E', '\x96', '\x45'}; + constexpr auto sourceText = CRYPT_NAME("kagerou\\kagerou", 0x45E3F103CBB5F157ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6217,7 +6481,8 @@ EncryptedName<16, 0x45E3F103CBB5F157ULL>& KagerouSpriteName() { // OFFSET: 0x00E2A560 // FUNCTION: fn_24064 EncryptedName<12, 0x936F3D2FFDFD87F5ULL>& OboroSpriteName() { - const char source[] = {'\x9A', '\xE5', '\x92', '\x8F', '\x40', '\x61', '\x00', '\xF1', '\x9A', '\xF5', '\x92', '\xFD'}; + constexpr auto sourceText = CRYPT_NAME("oboro\\oboro", 0x936F3D2FFDFD87F5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6225,7 +6490,8 @@ EncryptedName<12, 0x936F3D2FFDFD87F5ULL>& OboroSpriteName() { // OFFSET: 0x00E2A630 // FUNCTION: fn_24065 EncryptedName<16, 0x2D33791F67AD47DFULL>& FrogKagerouSpriteName() { - const char source[] = {'\xB4', '\x26', '\xCA', '\x02', '\x6D', '\x16', '\x46', '\x71', '\xB4', '\x26', '\xCA', '\x02', '\x6D', '\x16', '\x46', '\x2D'}; + constexpr auto sourceText = CRYPT_NAME("kagerou\\kagerou", 0x2D33791F67AD47DFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6233,7 +6499,8 @@ EncryptedName<16, 0x2D33791F67AD47DFULL>& FrogKagerouSpriteName() { // OFFSET: 0x00E2A6F0 // FUNCTION: fn_24066 EncryptedName<12, 0x6B3301E1A3079125ULL>& FrogOboroSpriteName() { - const char source[] = {'\x4A', '\xF3', '\x68', '\xD1', '\x8E', '\x5D', '\x5C', '\x09', '\x4A', '\xE3', '\x68', '\xA3'}; + constexpr auto sourceText = CRYPT_NAME("oboro\\oboro", 0x6B3301E1A3079125ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6241,7 +6508,8 @@ EncryptedName<12, 0x6B3301E1A3079125ULL>& FrogOboroSpriteName() { // OFFSET: 0x00E2A7C0 // FUNCTION: fn_24067 EncryptedName<20, 0x2F2701A7E56D3D89ULL>& RebellionSpriteName() { - const char source[] = {'\xFB', '\x58', '\x0F', '\x80', '\xCB', '\x6D', '\x4E', '\x40', '\xE7', '\x61', '\x1F', '\x80', '\xC5', '\x64', '\x4B', '\x43', '\xE0', '\x52', '\x03', '\xE5'}; + constexpr auto sourceText = CRYPT_NAME("rebellion\\rebellion", 0x2F2701A7E56D3D89ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6249,7 +6517,8 @@ EncryptedName<20, 0x2F2701A7E56D3D89ULL>& RebellionSpriteName() { // OFFSET: 0x00E2A890 // FUNCTION: fn_24068 EncryptedName<18, 0xC39FB559A17D3963ULL>& DoramSummonerSpriteName() { - const char source[] = {'\x10', '\x4C', '\x10', '\xCC', '\x36', '\xDB', '\xFA', '\xB1', '\x3F', '\x4A', '\x08', '\xCC', '\x34', '\xDA', '\xF1', '\xA6', '\x11', '\x39'}; + constexpr auto sourceText = CRYPT_NAME("summoner\\summoner", 0xC39FB559A17D3963ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6257,7 +6526,8 @@ EncryptedName<18, 0xC39FB559A17D3963ULL>& DoramSummonerSpriteName() { // OFFSET: 0x00E2A960 // FUNCTION: fn_24069 EncryptedName<23, 0x71B7691737C5A1AFULL>& DoramCartSummonerSpriteName() { - const char source[] = {'\xDC', '\xD4', '\xA8', '\x5A', '\x78', '\x07', '\xD2', '\x03', '\xF3', '\xC2', '\xA4', '\x45', '\x63', '\x36', '\xC4', '\x04', '\xC2', '\xCC', '\xAA', '\x59', '\x72', '\x1B', '\xB7'}; + constexpr auto sourceText = CRYPT_NAME("summoner\\cart_summoner", 0x71B7691737C5A1AFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6265,7 +6535,8 @@ EncryptedName<23, 0x71B7691737C5A1AFULL>& DoramCartSummonerSpriteName() { // OFFSET: 0x00E2AA40 // FUNCTION: fn_24070 EncryptedName<18, 0x899D11BB83695B0DULL>& DoramSummonerBabySpriteName() { - const char source[] = {'\x7E', '\x2E', '\x04', '\xEE', '\xD4', '\x7F', '\xF8', '\xFB', '\x51', '\x28', '\x1C', '\xEE', '\xD6', '\x7E', '\xF3', '\xEC', '\x7F', '\x5B'}; + constexpr auto sourceText = CRYPT_NAME("summoner\\summoner", 0x899D11BB83695B0DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6273,7 +6544,8 @@ EncryptedName<18, 0x899D11BB83695B0DULL>& DoramSummonerBabySpriteName() { // OFFSET: 0x00E2AB10 // FUNCTION: fn_24071 EncryptedName<23, 0x2B8725D7E95325F5ULL>& DoramCartSummonerBabySpriteName() { - const char source[] = {'\x86', '\x50', '\x3E', '\x84', '\xB8', '\x4B', '\xE2', '\x59', '\xA9', '\x46', '\x32', '\x9B', '\xA3', '\x7A', '\xF4', '\x5E', '\x98', '\x48', '\x3C', '\x87', '\xB2', '\x57', '\x87'}; + constexpr auto sourceText = CRYPT_NAME("summoner\\cart_summoner", 0x2B8725D7E95325F5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6281,7 +6553,8 @@ EncryptedName<23, 0x2B8725D7E95325F5ULL>& DoramCartSummonerBabySpriteName() { // OFFSET: 0x00E2ABF0 // FUNCTION: fn_24072 EncryptedName<10, 0x7989830DE73B9DBDULL>& NinjaBabySpriteName() { - const char source[] = {'\x09', '\x4C', '\xFB', '\x3D', '\x51', '\x37', '\x58', '\xB9', '\x67', '\x9D'}; + constexpr auto sourceText = CRYPT_NAME("닌자\\닌자", 0x7989830DE73B9DBDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6289,7 +6562,8 @@ EncryptedName<10, 0x7989830DE73B9DBDULL>& NinjaBabySpriteName() { // OFFSET: 0x00E2ACC0 // FUNCTION: fn_24073 EncryptedName<10, 0xBDADDD87C5A50B6BULL>& FrogNinjaBabySpriteName() { - const char source[] = {'\xDF', '\xDA', '\x65', '\x1F', '\xDB', '\x69', '\x7C', '\x7D', '\xB1', '\x0B'}; + constexpr auto sourceText = CRYPT_NAME("닌자\\닌자", 0xBDADDD87C5A50B6BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6297,7 +6571,8 @@ EncryptedName<10, 0xBDADDD87C5A50B6BULL>& FrogNinjaBabySpriteName() { // OFFSET: 0x00E2AD90 // FUNCTION: fn_24074 EncryptedName<16, 0xA7471985F93F9BDFULL>& KagerouBabySpriteName() { - const char source[] = {'\xB4', '\xFA', '\x58', '\x9C', '\xF7', '\x76', '\x32', '\xFB', '\xB4', '\xFA', '\x58', '\x9C', '\xF7', '\x76', '\x32', '\xA7'}; + constexpr auto sourceText = CRYPT_NAME("kagerou\\kagerou", 0xA7471985F93F9BDFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6305,7 +6580,8 @@ EncryptedName<16, 0xA7471985F93F9BDFULL>& KagerouBabySpriteName() { // OFFSET: 0x00E2AE50 // FUNCTION: fn_24075 EncryptedName<12, 0x5FFD7FABB5D1EF57ULL>& OboroBabySpriteName() { - const char source[] = {'\x38', '\x8D', '\xBE', '\xC7', '\xC4', '\x23', '\x92', '\x3D', '\x38', '\x9D', '\xBE', '\xB5'}; + constexpr auto sourceText = CRYPT_NAME("oboro\\oboro", 0x5FFD7FABB5D1EF57ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6313,7 +6589,8 @@ EncryptedName<12, 0x5FFD7FABB5D1EF57ULL>& OboroBabySpriteName() { // OFFSET: 0x00E2AF20 // FUNCTION: fn_24076 EncryptedName<16, 0xD3E5516F89F161D1ULL>& FrogKagerouBabySpriteName() { - const char source[] = {'\xBA', '\x00', '\x96', '\xEC', '\x1D', '\x3E', '\x90', '\x8F', '\xBA', '\x00', '\x96', '\xEC', '\x1D', '\x3E', '\x90', '\xD3'}; + constexpr auto sourceText = CRYPT_NAME("kagerou\\kagerou", 0xD3E5516F89F161D1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6321,7 +6598,8 @@ EncryptedName<16, 0xD3E5516F89F161D1ULL>& FrogKagerouBabySpriteName() { // OFFSET: 0x00E2AFE0 // FUNCTION: fn_24077 EncryptedName<12, 0xF535E561137F138DULL>& FrogOboroBabySpriteName() { - const char source[] = {'\xE2', '\x71', '\x10', '\x61', '\x0E', '\xB9', '\x5A', '\x97', '\xE2', '\x61', '\x10', '\x13'}; + constexpr auto sourceText = CRYPT_NAME("oboro\\oboro", 0xF535E561137F138DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6329,7 +6607,8 @@ EncryptedName<12, 0xF535E561137F138DULL>& FrogOboroBabySpriteName() { // OFFSET: 0x00E2B0B0 // FUNCTION: fn_24078 EncryptedName<18, 0xABED6971354375C3ULL>& TaekwonBabySpriteName() { - const char source[] = {'\x06', '\xB7', '\xF2', '\xF2', '\xCD', '\xBB', '\x5E', '\x49', '\x9F', '\xB0', '\x81', '\x84', '\xB6', '\xD5', '\x3F', '\x18', '\x21', '\x75'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0xABED6971354375C3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6337,7 +6616,8 @@ EncryptedName<18, 0xABED6971354375C3ULL>& TaekwonBabySpriteName() { // OFFSET: 0x00E2B180 // FUNCTION: fn_24079 EncryptedName<18, 0x01C9FBA7819FFBD7ULL>& PoringTaekwonBabySpriteName() { - const char source[] = {'\x12', '\x39', '\x2E', '\x46', '\x1B', '\x29', '\x7A', '\xE3', '\x8B', '\x3E', '\x5D', '\x30', '\x60', '\x47', '\x1B', '\xB2', '\x35', '\xFB'}; + constexpr auto sourceText = CRYPT_NAME("태권소년\\태권소년", 0x01C9FBA7819FFBD7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6345,7 +6625,8 @@ EncryptedName<18, 0x01C9FBA7819FFBD7ULL>& PoringTaekwonBabySpriteName() { // OFFSET: 0x00E2B250 // FUNCTION: fn_24080 EncryptedName<10, 0xFBAD074BDB2B77A1ULL>& StarGladiatorBabySpriteName() { - const char source[] = {'\x10', '\xB0', '\x97', '\x61', '\x17', '\xB6', '\x6A', '\x47', '\x1B', '\x77'}; + constexpr auto sourceText = CRYPT_NAME("권성\\권성", 0xFBAD074BDB2B77A1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6353,7 +6634,8 @@ EncryptedName<10, 0xFBAD074BDB2B77A1ULL>& StarGladiatorBabySpriteName() { // OFFSET: 0x00E2B320 // FUNCTION: fn_24081 EncryptedName<10, 0x6BA557130BDFE997ULL>& StarGladiator2BabySpriteName() { - const char source[] = {'\x26', '\x2E', '\x63', '\xB1', '\x4F', '\xE6', '\x62', '\xD7', '\x2D', '\xE9'}; + constexpr auto sourceText = CRYPT_NAME("권성\\권성", 0x6BA557130BDFE997ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6361,7 +6643,8 @@ EncryptedName<10, 0x6BA557130BDFE997ULL>& StarGladiator2BabySpriteName() { // OFFSET: 0x00E2B3F0 // FUNCTION: fn_24082 EncryptedName<10, 0x050DF16FC75B25B9ULL>& PoringStarGladiatorBabySpriteName() { - const char source[] = {'\x08', '\xE2', '\xE7', '\x7D', '\x33', '\x40', '\xCA', '\xB9', '\x03', '\x25'}; + constexpr auto sourceText = CRYPT_NAME("권성\\권성", 0x050DF16FC75B25B9ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6369,7 +6652,8 @@ EncryptedName<10, 0x050DF16FC75B25B9ULL>& PoringStarGladiatorBabySpriteName() { // OFFSET: 0x00E2B4C0 // FUNCTION: fn_24083 EncryptedName<18, 0x6D05D5271B5D65C3ULL>& SoulLinkerBabySpriteName() { - const char source[] = {'\x7F', '\xB7', '\xE2', '\xF4', '\x9F', '\x60', '\xC1', '\xD2', '\x9F', '\xD9', '\x8F', '\xA4', '\xC8', '\x6D', '\xB0', '\xA9', '\x7C', '\x65'}; + constexpr auto sourceText = CRYPT_NAME("소울링커\\소울링커", 0x6D05D5271B5D65C3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6377,7 +6661,8 @@ EncryptedName<18, 0x6D05D5271B5D65C3ULL>& SoulLinkerBabySpriteName() { // OFFSET: 0x00E2B590 // FUNCTION: fn_24084 EncryptedName<18, 0x3D8387EF97A37DCFULL>& FrogSoulLinkerBabySpriteName() { - const char source[] = {'\x73', '\xAF', '\x1C', '\x78', '\x57', '\x32', '\x47', '\x82', '\x93', '\xC1', '\x71', '\x28', '\x00', '\x3F', '\x36', '\xF9', '\x70', '\x7D'}; + constexpr auto sourceText = CRYPT_NAME("소울링커\\소울링커", 0x3D8387EF97A37DCFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6385,7 +6670,8 @@ EncryptedName<18, 0x3D8387EF97A37DCFULL>& FrogSoulLinkerBabySpriteName() { // OFFSET: 0x00E2E2E0 // FUNCTION: fn_24138 EncryptedName<24, 0x3BBB5F0F8F216F31ULL>& NightWatchBodyPath2() { - const char source[] = {'\x7F', '\x26', '\x66', '\xC7', '\x5B', '\x00', '\xEC', '\x7A', '\x65', '\x2C', '\x69', '\xD3', '\x41', '\x16', '\xFC', '\x73', '\x65', '\x30', '\x76', '\xCE', '\x5B', '\x1C', '\xF3', '\x3B'}; + constexpr auto sourceText = CRYPT_NAME("NIGHT_WATCH\\NIGHT_WATCH", 0x3BBB5F0F8F216F31ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6393,7 +6679,8 @@ EncryptedName<24, 0x3BBB5F0F8F216F31ULL>& NightWatchBodyPath2() { // OFFSET: 0x00E2E3B0 // FUNCTION: fn_24139 EncryptedName<31, 0x2F3D75DFCF678FF3ULL>& NightWatchRidingBodyPath2() { - const char source[] = {'\xBD', '\xC6', '\x20', '\x87', '\x8B', '\x2A', '\x6A', '\x6E', '\xA7', '\xCC', '\x2F', '\x93', '\x91', '\x3C', '\x7A', '\x67', '\xA7', '\xD0', '\x30', '\x8E', '\x8B', '\x36', '\x75', '\x70', '\xA1', '\xC6', '\x23', '\x86', '\x91', '\x32', '\x3D'}; + constexpr auto sourceText = CRYPT_NAME("NIGHT_WATCH\\NIGHT_WATCH_RIDING", 0x2F3D75DFCF678FF3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6401,7 +6688,8 @@ EncryptedName<31, 0x2F3D75DFCF678FF3ULL>& NightWatchRidingBodyPath2() { // OFFSET: 0x00E2E490 // FUNCTION: fn_24140 EncryptedName<26, 0xED730315539785C7ULL>& HyperNoviceBodyPath2() { - const char source[] = {'\x8F', '\xDC', '\xC7', '\x16', '\x47', '\x5C', '\x3D', '\xA2', '\x91', '\xCC', '\xD4', '\x16', '\x49', '\x4B', '\x2A', '\xBD', '\x82', '\xD7', '\xC8', '\x1D', '\x5A', '\x55', '\x3A', '\xAE', '\x82', '\x85'}; + constexpr auto sourceText = CRYPT_NAME("HYPER_NOVICE\\HYPER_NOVICE", 0xED730315539785C7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6409,7 +6697,8 @@ EncryptedName<26, 0xED730315539785C7ULL>& HyperNoviceBodyPath2() { // OFFSET: 0x00E2E570 // FUNCTION: fn_24141 EncryptedName<33, 0x6F9D21B96D71C1FFULL>& HyperNoviceRidingBodyPath2() { - const char source[] = {'\xB7', '\x98', '\x21', '\x28', '\xEB', '\x7E', '\xD3', '\x20', '\xA9', '\x88', '\x32', '\x28', '\xE5', '\x69', '\xC4', '\x3F', '\xBA', '\x93', '\x2E', '\x23', '\xF6', '\x77', '\xD4', '\x2C', '\xBA', '\x9E', '\x23', '\x24', '\xFD', '\x68', '\xD3', '\x28', '\xFF'}; + constexpr auto sourceText = CRYPT_NAME("HYPER_NOVICE\\HYPER_NOVICE_RIDING", 0x6F9D21B96D71C1FFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6417,7 +6706,8 @@ EncryptedName<33, 0x6F9D21B96D71C1FFULL>& HyperNoviceRidingBodyPath2() { // OFFSET: 0x00E2E640 // FUNCTION: fn_24142 EncryptedName<30, 0x39E7F13755252F8FULL>& SpiritHandlerBodyPath2() { - const char source[] = {'\xDC', '\x7F', '\x6C', '\x07', '\x7E', '\xA5', '\xB8', '\x71', '\xCE', '\x61', '\x61', '\x19', '\x72', '\xA3', '\xBB', '\x6A', '\xDF', '\x66', '\x77', '\x1C', '\x63', '\xAE', '\xAF', '\x78', '\xC1', '\x6B', '\x69', '\x10', '\x65', '\xF1'}; + constexpr auto sourceText = CRYPT_NAME("SPIRIT_HANDLER\\SPIRIT_HANDLER", 0x39E7F13755252F8FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6425,7 +6715,8 @@ EncryptedName<30, 0x39E7F13755252F8FULL>& SpiritHandlerBodyPath2() { // OFFSET: 0x00E2E720 // FUNCTION: fn_24143 EncryptedName<37, 0xCBD7DDAFDF87F549ULL>& SpiritHandlerRidingBodyPath2() { - const char source[] = {'\x1A', '\xA5', '\xCE', '\x8D', '\xE6', '\x89', '\x88', '\x83', '\x08', '\xBB', '\xC3', '\x93', '\xEA', '\x8F', '\x8B', '\x98', '\x19', '\xBC', '\xD5', '\x96', '\xFB', '\x82', '\x9F', '\x8A', '\x07', '\xB1', '\xCB', '\x9A', '\xFD', '\x82', '\x85', '\x82', '\x0D', '\xBC', '\xC9', '\x98', '\xAF'}; + constexpr auto sourceText = CRYPT_NAME("SPIRIT_HANDLER\\SPIRIT_HANDLER_RIDING", 0xCBD7DDAFDF87F549ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6433,7 +6724,8 @@ EncryptedName<37, 0xCBD7DDAFDF87F549ULL>& SpiritHandlerRidingBodyPath2() { // OFFSET: 0x00E2E800 // FUNCTION: fn_24144 EncryptedName<12, 0xEB074B7FBDA3BFD5ULL>& DruidBodyPath3() { - const char source[] = {'\x91', '\xED', '\xF6', '\xF4', '\x3B', '\x17', '\x43', '\xB9', '\x80', '\xF6', '\xE7', '\xBD'}; + constexpr auto sourceText = CRYPT_NAME("DRUID\\DRUID", 0xEB074B7FBDA3BFD5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6441,7 +6733,8 @@ EncryptedName<12, 0xEB074B7FBDA3BFD5ULL>& DruidBodyPath3() { // OFFSET: 0x00E2E8D0 // FUNCTION: fn_24145 EncryptedName<12, 0x3D075BD5256F9B6FULL>& DruidBodyPath4() { - const char source[] = {'\x2B', '\xC9', '\x3A', '\x6C', '\x91', '\x07', '\x43', '\x6F', '\x3A', '\xD2', '\x2B', '\x25'}; + constexpr auto sourceText = CRYPT_NAME("DRUID\\DRUID", 0x3D075BD5256F9B6FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6449,7 +6742,8 @@ EncryptedName<12, 0x3D075BD5256F9B6FULL>& DruidBodyPath4() { // OFFSET: 0x00E2E9A0 // FUNCTION: fn_24146 EncryptedName<14, 0x251761D7370BA5C3ULL>& KarnosBodyPath3() { - const char source[] = {'\x88', '\xE4', '\x59', '\x79', '\x98', '\x32', '\x4B', '\x6E', '\x82', '\xF7', '\x45', '\x78', '\x84', '\x61'}; + constexpr auto sourceText = CRYPT_NAME("KARNOS\\KARNOS", 0x251761D7370BA5C3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6457,7 +6751,8 @@ EncryptedName<14, 0x251761D7370BA5C3ULL>& KarnosBodyPath3() { // OFFSET: 0x00E2EA70 // FUNCTION: fn_24147 EncryptedName<14, 0x03014749B127914FULL>& KarnosBodyPath4() { - const char source[] = {'\x04', '\xD0', '\x75', '\xFF', '\x06', '\x14', '\x5D', '\x48', '\x0E', '\xC3', '\x69', '\xFE', '\x1A', '\x47'}; + constexpr auto sourceText = CRYPT_NAME("KARNOS\\KARNOS", 0x03014749B127914FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6465,7 +6760,8 @@ EncryptedName<14, 0x03014749B127914FULL>& KarnosBodyPath4() { // OFFSET: 0x00E2EB40 // FUNCTION: fn_24148 EncryptedName<14, 0x85FB93CF2F494179ULL>& AliteaBodyPath2() { - const char source[] = {'\x38', '\x0D', '\x00', '\x7B', '\x8A', '\xD2', '\xA7', '\xC4', '\x35', '\x08', '\x1D', '\x6A', '\x8E', '\x93'}; + constexpr auto sourceText = CRYPT_NAME("ALITEA\\ALITEA", 0x85FB93CF2F494179ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -6473,7 +6769,8 @@ EncryptedName<14, 0x85FB93CF2F494179ULL>& AliteaBodyPath2() { // OFFSET: 0x00DD6970 // FUNCTION: fn_23276 EncryptedName<11, 0x61F59D5D41E76519ULL>& WereRaptorJobName1() { - const char source[] = {'\x4E', '\x20', '\xB5', '\x04', '\x0F', '\xDC', '\xA5', '\x35', '\x56', '\x37', '\xE7'}; + constexpr auto sourceText = CRYPT_NAME("WERERAPTOR", 0x61F59D5D41E76519ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } diff --git a/Source/Contents/Configuration/ServiceConfiguration.cpp b/Source/Contents/Configuration/ServiceConfiguration.cpp index a57c11468..7b3b5c1a9 100644 --- a/Source/Contents/Configuration/ServiceConfiguration.cpp +++ b/Source/Contents/Configuration/ServiceConfiguration.cpp @@ -424,8 +424,8 @@ void InitializeLanguage() { g_textCodePage = 1256; break; default: { - const char source[] = {'\xF9', '\x1E', '\x87', '\xD1', '\x00', '\x4D', '\xE4', '\x2E', '\xF6', '\x16', '\xC2', '\x9D', - '\x12', '\x46', '\xF7', '\x2F', '\xFE', '\x1F', '\xC0', '\x9D', '\x40', '\x02', '\xA2', '\x5B'}; + constexpr auto sourceText = CRYPT_NAME("no language setting !!!", 0x5B832361BDA77197ULL); + const auto& source = sourceText.data; ShowErrorDialog(DecryptString<0x5B832361BDA77197ULL>(source), 0); } case 1: @@ -473,10 +473,8 @@ void InitializeServiceConfiguration() { const std::uint8_t portSource[] = {0xED, 0xBA, 0xF1, 0x3F, 0xAB}; g_servicePort = DecryptText<0xEB3D4FAB0FC183DBULL>(portSource); - const char webPageSource[] = { - '\x21', '\x8B', '\xA1', '\x8F', '\xEB', '\x6C', '\x90', '\x88', '\x3E', '\x88', '\xFB', '\x8D', '\xB0', '\x24', '\xD1', '\x9E', - '\x3B', '\x90', '\xBE', '\xD1', '\xB2', '\x2C', '\x91', '\x94', '\x3B', '\xFF' - }; + constexpr auto webPageSourceText = CRYPT_NAME("http://www.ragnarok.co.kr", 0xFFBF43D1FFD5FF49ULL); + const auto& webPageSource = webPageSourceText.data; g_webPageUrl = DecryptString<0xFFBF43D1FFD5FF49ULL>(webPageSource); g_extendedSlot = true; @@ -491,30 +489,21 @@ void InitializeServiceConfiguration() { // (jump into the empty stub 0x027AB0FE). The code from here on starts at 0x00AD237E. g_serviceFlag07 = 29; if (std::strstr(g_launchServerName, "QmSakray")) { - const char keySource[] = { - '\x3C', '\x83', '\xDA', '\xE6', '\x72', '\x9C', '\xCE', '\x77', '\x36', '\xDF', '\xC7', '\xAA', '\x64', '\x9F', '\x82', '\x37', - '\x38', '\x9A', '\x9B', '\xA8', '\x6C', '\xDF', '\x88', '\x37', '\x6D', '\xC7', '\x8C', '\xFB', '\x33', '\xF1' - }; + constexpr auto keySourceText = CRYPT_NAME("kro-qm-2a.ragnarok.co.kr:6900", 0x45E3F103CBB5F157ULL); + const auto& keySource = keySourceText.data; g_serviceOverrideKey = DecryptString<0x45E3F103CBB5F157ULL>(keySource); - const char addressSource[] = { - '\xB4', '\x35', '\xC2', '\x4A', '\x6E', '\x14', '\x1E', '\x1C', '\xBE', '\x69', '\xDF', '\x06', '\x78', '\x17', '\x52', '\x5F', - '\xB0', '\x2C', '\x83', '\x04', '\x70', '\x57', '\x58', '\x5F', '\xE5', '\x71', '\x94', '\x52', '\x2E', '\x79' - }; + constexpr auto addressSourceText = CRYPT_NAME("kro-qm-1a.ragnarok.co.kr:6951", 0x2D33791F67AD47DFULL); + const auto& addressSource = addressSourceText.data; const std::uint8_t formatSource[] = {0xAC, 0x4E, 0x6D}; StringFormat(g_serviceAddress, sizeof(g_serviceAddress), static_cast(-1), DecryptText<0x2F2701A7E56D3D89ULL>(formatSource), DecryptString<0x2D33791F67AD47DFULL>(addressSource)); } else { - const char keySource[] = { - '\x4E', '\xE3', '\x68', '\x8E', '\x80', '\x62', '\x50', '\x58', '\x0B', '\xE3', '\x66', '\xC4', '\x8F', '\x60', '\x41', '\x04', - '\x4E', '\xBF', '\x64', '\xCC', '\xCF', '\x6A', '\x41', '\x51', '\x13', '\xA8', '\x37', '\x93', '\xE1' - }; + constexpr auto keySourceText = CRYPT_NAME("kro-acc3.ragnarok.co.kr:6900", 0x6B3301E1A3079125ULL); + const auto& keySource = keySourceText.data; g_serviceOverrideKey = DecryptString<0x6B3301E1A3079125ULL>(keySource); - const char addressSource[] = { - '\x08', '\x4B', '\x12', '\x8C', '\x38', '\xD2', '\xFA', '\xAD', '\x00', '\x40', '\x50', '\xD2', '\x77', '\xC7', '\xFE', '\xA4', - '\x0D', '\x58', '\x0F', '\xCE', '\x32', '\x9B', '\xFC', '\xAC', '\x4D', '\x52', '\x0F', '\x9B', '\x6F', '\x8C', '\xAA', '\xF7', - '\x63' - }; + constexpr auto addressSourceText = CRYPT_NAME("kro-agency-s.ragnarok.co.kr:6954", 0xC39FB559A17D3963ULL); + const auto& addressSource = addressSourceText.data; const std::uint8_t formatSource[] = {0xAC, 0x4E, 0x6D}; StringFormat(g_serviceAddress, sizeof(g_serviceAddress), static_cast(-1), DecryptText<0x2F2701A7E56D3D89ULL>(formatSource), DecryptString<0xC39FB559A17D3963ULL>(addressSource)); } @@ -529,9 +518,8 @@ void InitializeServiceConfiguration() { break; } case 3: { - const char hostSource[] = { - '\x3F', '\x6A', '\x58', '\xAD', '\x8A', '\x26', '\xAF', '\xA7', '\x3F', '\x6F', '\x5E', '\xAD', '\x8A', '\x20', '\xA8', '\x89' - }; + constexpr auto hostSourceText = CRYPT_NAME("211.172.247.115", 0x899D11BB83695B0DULL); + const auto& hostSource = hostSourceText.data; g_serviceHost = DecryptString<0x899D11BB83695B0DULL>(hostSource); g_serviceFlag07 = 29; const std::uint8_t portSource[] = {0xC3, 0x1C, 0x63, 0xD9, 0xD7}; diff --git a/Source/Contents/Effects/Core/EffectLists.cpp b/Source/Contents/Effects/Core/EffectLists.cpp index d87621322..7cf19c37f 100644 --- a/Source/Contents/Effects/Core/EffectLists.cpp +++ b/Source/Contents/Effects/Core/EffectLists.cpp @@ -67,6 +67,7 @@ #include "Contents/Effects/Skills/ViolentQuakeEffect.h" #include "Contents/Effects/Skills/WindEffect.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include "Client/Mode/CGameMode.h" #include "Client/Session/Session.h" @@ -448,12 +449,8 @@ struct CEffectAllocator : CAllocator { // OFFSET: 0x00B1D9E0 // FUNCTION: fn_18561 __declspec(noinline) EncryptedName<0x44, 0x2F8B0F37118D157FULL>& ThunderingOrbName() { - const char source[] = { - '\x3B', '\x47', '\xD8', '\x58', '\x73', '\x53', '\xC0', '\x7D', '\x20', '\x41', '\xC5', '\x44', '\x79', '\x4B', '\xCE', '\x7D', - '\x36', '\x5B', '\xCA', '\x4E', '\x78', '\x5D', '\xC9', '\x73', '\x0B', '\x7D', '\xF8', '\x7F', '\x53', '\x6A', '\xF9', '\x46', - '\x11', '\x72', '\xD2', '\x7E', '\x45', '\x6D', '\xD4', '\x40', '\x0D', '\x77', '\xD1', '\x65', '\x5F', '\x7A', '\xE5', '\x4B', - '\x1A', '\x67', '\xE4', '\x7F', '\x50', '\x50', '\xE4', '\x5D', '\x1D', '\x4A', '\xFE', '\x7C', '\x56', '\x63', '\xE7', '\x01', - '\x0C', '\x61', '\xFF', '\x11'}; + constexpr auto sourceText = CRYPT_NAME("DRUID\\KR_THUNDERING_ORB\\thundering_orb_orb\\thundering_orb_small.str", 0x2F8B0F37118D157FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } diff --git a/Source/Contents/Effects/Particles/CharacterParticleBundle.cpp b/Source/Contents/Effects/Particles/CharacterParticleBundle.cpp index 52b58031a..d399ab3af 100644 --- a/Source/Contents/Effects/Particles/CharacterParticleBundle.cpp +++ b/Source/Contents/Effects/Particles/CharacterParticleBundle.cpp @@ -1,5 +1,6 @@ #include "Contents/Effects/Particles/CharacterParticleBundle.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include "Client/Mode/CGameMode.h" #include "Client/Mode/ModeMgr.h" @@ -79,11 +80,8 @@ void CChopChopClawMarks::SpawnParticle() { const float x = point.x * 5.0f; const float y = point.y * 5.0f; - const char bytes[] = { - '\x5B', '\x63', '\x98', '\xAE', '\xA9', '\x29', '\x26', '\x4F', '\x40', '\x72', '\x85', '\xA8', '\xBD', '\x2A', '\x2E', '\x55', - '\x50', '\x61', '\x91', '\x84', '\x85', '\x1A', '\x1D', '\x42', '\x7C', '\x59', '\xA2', '\x97', '\xB1', '\x16', '\x05', '\x72', - '\x6F', '\x6E', '\xAE', '\x8F', '\x82', '\x05', '\x43', '\x6E', '\x6B', '\x43', '\xCD' - }; + constexpr auto bytesText = CRYPT_NAME("DRUID\\KR_CHOP_CHOP\\chop_chop\\chop_chop.str", 0x1D6D75EDE7CD311FULL); + const auto& bytes = bytesText.data; // GLOBAL: gl_24875 thread_local EncryptedName name(bytes); particle->Load(name.Text()); diff --git a/Source/Contents/Effects/Particles/SpriteEffect.cpp b/Source/Contents/Effects/Particles/SpriteEffect.cpp index 2e0543322..c261587db 100644 --- a/Source/Contents/Effects/Particles/SpriteEffect.cpp +++ b/Source/Contents/Effects/Particles/SpriteEffect.cpp @@ -1,6 +1,7 @@ #include "Contents/Effects/Core/EffectTypes.h" #include "Contents/Effects/Particles/SpriteEffect.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include "Client/Mode/CGameMode.h" #include "Client/Mode/ModeMgr.h" @@ -335,12 +336,12 @@ void CSpriteEffect::SetupParticle(CSpriteParticle* particle) { particle->frameDelay = 8.0f; break; case EF_UNK_2443: { - const char spriteSource[] = {'\x99', '\x4B', '\xC5', '\xAC', '\x93', '\x65', '\x7B', '\x98', '\x06', '\xB5', '\x33', '\x4F', '\x60', - '\x99', '\x48', '\xA8', '\x1F', '\xE2', '\x70', '\x09', '\x34', '\xE5', '\x54', '\xAB', '\x2B', '\x87'}; + constexpr auto spriteSourceText = CRYPT_NAME("이팩트\\C_2025RosFesta.spr", 0xDB27CB557D038759ULL); + const auto& spriteSource = spriteSourceText.data; particle->SetSprite(DecryptName<0xDB27CB557D038759ULL>(spriteSource)); - const char actionSource[] = {'\x4D', '\x71', '\x7D', '\xB2', '\x71', '\x97', '\xE7', '\x12', '\xD2', '\x8F', '\x8B', '\x51', '\x82', - '\x6B', '\xD4', '\x22', '\xCB', '\xD8', '\xC8', '\x17', '\xD6', '\x17', '\xDA', '\x32', '\xF9', '\xBD'}; + constexpr auto actionSourceText = CRYPT_NAME("이팩트\\C_2025RosFesta.act", 0x51BB39B763BBBD8DULL); + const auto& actionSource = actionSourceText.data; particle->SetAction(DecryptName<0x51BB39B763BBBD8DULL>(actionSource)); particle->flags = 1; particle->depthOffset = 0.0015f; diff --git a/Source/Contents/Map/MapNameTable.cpp b/Source/Contents/Map/MapNameTable.cpp index 23c0fcc6e..70670c074 100644 --- a/Source/Contents/Map/MapNameTable.cpp +++ b/Source/Contents/Map/MapNameTable.cpp @@ -6,6 +6,7 @@ #include "Resource/Bitmap/BitmapResource.h" #include "Utility/Cipher/XorBytes.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include #include @@ -18,7 +19,8 @@ bool CSession::LoadMapNameTable() { std::vector tokens; CCommonObject& storage = reinterpret_cast(this->minimapTokenStorage[0x30]); - const char source[] = {'\x52', '\x88', '\x4B', '\xB1', '\x0A', '\x62', '\x9E', '\x43', '\x5E', '\x8B', '\x57', '\x9A', '\x45', '\x7B', '\x83', '\x63', '\x3F'}; + constexpr auto sourceText = CRYPT_NAME("mapNameTable.txt", 0x17FB0F6BFF3BE93FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); const bool loaded = storage.LoadTokens(tokens, name.Text(), 0); diff --git a/Source/Contents/Skills/SkillActionAlitea.cpp b/Source/Contents/Skills/SkillActionAlitea.cpp index 03ae66203..8fe122976 100644 --- a/Source/Contents/Skills/SkillActionAlitea.cpp +++ b/Source/Contents/Skills/SkillActionAlitea.cpp @@ -16,6 +16,7 @@ #include "Utility/Cipher/XorBytes.h" #include "Utility/Math/Vector3d.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include #include @@ -385,8 +386,7 @@ void CSkillAction_DamageWereRaptorForm::PlayFormAttackEffect(CGameActor* actor) if (actor) { EffectLists* effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x7B', '\x43', '\x92', '\x8F', '\x84', '\x01', '\x32', '\x6A', '\x7A', '\x43', '\xA8', '\x95', '\x8C', '\x05', '\x19', '\x72', - '\x6D', '\x31'}; + constexpr std::array bytes = CRYPT_NAME("dr_hit_wereraptor", 0x1D6D75EDE7CD311FULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -399,7 +399,7 @@ void CSkillAction_DamageWereWolfForm::PlayFormAttackEffect(CGameActor* actor) { if (actor) { EffectLists* effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x31', '\x8F', '\xEA', '\xB3', '\xAE', '\xC5', '\x2A', '\x44', '\x30', '\x8F', '\xD0', '\xAC', '\xA8', '\xDD', '\x13', '\x33'}; + constexpr std::array bytes = CRYPT_NAME("dr_hit_werewolf", 0x3375B1C7DBB5FD55ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -412,7 +412,8 @@ void CSkillAction_Icing::SpawnIcing(CGameActor* target) { if (target) { EffectLists* effects = g_effectMgr; if (CEffect* effect = effects->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x18', '\x9A', '\x3C', '\xAA', '\xE9', '\x74', '\x11', '\x91'}; + constexpr auto bytesText = CRYPT_NAME("ice_hit", 0x91651D81F559F971ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -427,8 +428,7 @@ void CSkillAction_ThunderingBasic::PlayThunderEffect(CGameActor* source) { if (source) { EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\xA3', '\x27', '\x76', '\xFB', '\xBD', '\xE0', '\xDD', '\x56', '\xB9', '\x28', '\x5C', '\xF4', '\xAD', '\xF1', '\xCE', '\x5C', - '\xBC', '\x10', '\x64', '\x95'}; + constexpr std::array bytes = CRYPT_NAME("thundering_attack_g", 0x3FAF85D995034FD7ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -617,7 +617,7 @@ void CSkillAction_Thundering::OnSkillCast(int level, CGameActor* source) { if (source) { EffectLists* effects = g_effectMgr; if (CEffect* effect = effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\xB1', '\xA5', '\xF2', '\x9B', '\xC5', '\xC6', '\x95', '\xFA', '\xAB', '\xAA', '\xD8', '\x96', '\xC0', '\xD0', '\x93', '\x93'}; + constexpr std::array bytes = CRYPT_NAME("thundering_cast", 0x93E7A3A1F587CDC5ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -672,7 +672,8 @@ void CEfstAction_AnimalForm::ResetAnimalForm(CRenderObject* actor) { gameActor->SetSprJob(gameActor->GetShapeShiftJob()); EffectLists* effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xC5', '\x62', '\x23', '\xB8', '\x59', '\x89', '\x2B'}; + constexpr auto bytesText = CRYPT_NAME("return", 0x812BE72BCD5707B7ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -707,7 +708,8 @@ void CSkillAction_AT_ALPHA_CLAW::OnSkillEffect(int level, CGameActor* source, CG } g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x7E', '\x5D', '\xBD', '\x8F', '\x8C', '\x2A', '\x0E', '\x71', '\x7E', '\x46', '\xCD'}; + constexpr auto bytesText = CRYPT_NAME("alpha_claw", 0x1D6D75EDE7CD311FULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -777,7 +779,8 @@ void CSkillAction_AT_FRENZY_FANG::OnSkillEffect(int level, CGameActor* source, C } if (CEffect* effect = g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xD5', '\x15', '\xA6', '\x3D', '\x83', '\xE2', '\x6A', '\x71', '\xD2', '\x09', '\xA4', '\x53'}; + constexpr auto bytesText = CRYPT_NAME("frenzy_fang", 0x17359BF953C367B3ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -820,7 +823,8 @@ void CSkillAction_AT_PINION_SHOT::OnSkillEffect(int level, CGameActor* source, C } if (CEffect* effect = g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x67', '\x90', '\x21', '\xD0', '\x94', '\xDB', '\x70', '\xB6', '\x7F', '\x96', '\x3B', '\xB9'}; + constexpr auto bytesText = CRYPT_NAME("pinion_shot", 0xC52FB5FBB94FF917ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -929,7 +933,8 @@ void CSkillAction_AT_NATURE_HARMONY::OnSkillEffect(int level, CGameActor* source if (source) { EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xD7', '\x6C', '\x5B', '\xD4', '\x31', '\x9E', '\x50', '\x21', '\xD8', '\x7F', '\x42', '\xCE', '\x2D', '\x82', '\x0F'}; + constexpr auto bytesText = CRYPT_NAME("nature_harmony", 0x490FFB43A12F0DB9ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -984,13 +989,13 @@ void CSkillAction_AT_GRAVITY_HOLE::OnSkillEffect(int level, CGameActor* source, if (source) { EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x16', '\x8B', '\x38', '\x83', '\xE8', '\x69', '\x1C', '\xCE', '\x19', '\x96', '\x35', '\x90', '\x81'}; + constexpr std::array bytes = CRYPT_NAME("gravity_hole", 0x91651D81F559F971ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x6C', '\x09', '\xBE', '\x17', '\x22', '\x13', '\xA8', '\x2C', '\x63', '\x14', '\xB3', '\x04', '\x14', '\x05', '\xBE', '\x07', '\x7F', '\x14', '\xB2', '\x61'}; + constexpr std::array bytes = CRYPT_NAME("gravity_hole_bottom", 0x73D1674B61DF7B0BULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1009,14 +1014,15 @@ void CSkillAction_AT_CHILLING_BLAST::OnSkillEffect(int level, CGameActor* source if (source) { EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x0E', '\x0B', '\x5C', '\x41', '\xC9', '\x6A', '\xE1', '\xBE', '\x32', '\x01', '\x59', '\x4C', '\xD6', '\x77', '\x8F'}; + constexpr auto bytesText = CRYPT_NAME("chilling_blast", 0xD98F03A52D35636DULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xB2', '\x71', '\xF4', '\xE3', '\x07', '\xE2', '\x61', '\x68', '\x8E', '\x7B', '\xF1', '\xEE', '\x18', '\xFF', '\x50', '\x6D', - '\xBE', '\x6D', '\xE9', '\xE0', '\x06', '\x8B'}; + constexpr auto bytesText = CRYPT_NAME("chilling_blast_bottom", 0x0F0F8B6B8F9D19D1ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1044,23 +1050,20 @@ void CSkillObjectAction_AT_GLACIER_MONOLITH::OnSkillObjectCreate(int argument, C EffectLists* effects = g_effectMgr; effects->Spawn(object->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x6E', '\xC5', '\x26', '\x3C', '\xB0', '\x38', '\x07', '\x8C', '\x64', '\xC6', '\x29', '\x30', '\xB5', '\x34', '\x01', '\xBB', - '\x56', '\xDA', '\x33', '\x3E', '\xAB', '\x29', '\x75'}; + constexpr std::array bytes = CRYPT_NAME("glacier_monolith_start", 0xD3755DD95F47A909ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(object->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x0A', '\x8F', '\x24', '\xC0', '\x84', '\xA4', '\xA5', '\x6E', '\x00', '\x8C', '\x2B', '\xCC', '\x81', '\xA8', '\xA3', '\x59', - '\x32', '\x90', '\x31', '\xC2', '\x9F', '\xB5', '\x88', '\x53', '\x02', '\x97', '\x31', '\xCC', '\x80', '\xC1'}; + constexpr std::array bytes = CRYPT_NAME("glacier_monolith_start_bottom", 0x31D7C1EDA345E36DULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; if (CEffect* effect = effects->Spawn(object->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x16', '\x77', '\x92', '\x9C', '\xEE', '\x40', '\xE3', '\x98', '\x1C', '\x74', '\x9D', '\x90', '\xEB', '\x4C', '\xE5', '\xAF', - '\x2E', '\x77', '\x9C', '\x90', '\xF7', '\x25'}; + constexpr std::array bytes = CRYPT_NAME("glacier_monolith_loop", 0xC7912587FFF31B71ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -1068,8 +1071,7 @@ void CSkillObjectAction_AT_GLACIER_MONOLITH::OnSkillObjectCreate(int argument, C } effects = g_effectMgr; if (CEffect* effect = effects->Spawn(object->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x0A', '\x5F', '\x6E', '\xF6', '\xB2', '\x20', '\xA1', '\x36', '\x00', '\x5C', '\x61', '\xFA', '\xB7', '\x2C', '\xA7', '\x01', - '\x32', '\x5F', '\x60', '\xFA', '\xAB', '\x1A', '\xB1', '\x06', '\x19', '\x47', '\x60', '\xF8', '\xDB'}; + constexpr std::array bytes = CRYPT_NAME("glacier_monolith_loop_bottom", 0x69D345DB950F336DULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -1125,7 +1127,8 @@ int CSkillAction_AT_GLACIER_NOVA::GetSkillAttackMotion() { void CSkillAction_AT_GLACIER_NOVA::OnGroundSkillEffect(vector3d position, int argument2, int argument3) { EffectLists* effects = g_effectMgr; effects->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x54', '\x4B', '\x52', '\x6C', '\xD4', '\x28', '\x4B', '\x72', '\x5D', '\x48', '\x45', '\x6E', '\xBD'}; + constexpr auto bytesText = CRYPT_NAME("glacier_nova", 0x2D394DBD0F332733ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), position.x, position.y, position.z, 0, -1, 0, 0); @@ -1137,8 +1140,7 @@ void CSkillAction_AT_GLACIER_SHARD::OnGroundSkillCast(int level, CGameActor* sou if (source) { EffectLists* effects = g_effectMgr; if (CEffect* effect = effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x20', '\x4D', '\xDA', '\x88', '\x82', '\x12', '\x6D', '\x4A', '\x34', '\x49', '\xDA', '\x99', '\x8F', '\x28', '\x6B', '\x74', - '\x35', '\x46', '\xDE', '\x9F', '\xEB'}; + constexpr std::array bytes = CRYPT_NAME("glacier_shard_target", 0x151F77EBEBBB2147ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -1153,7 +1155,8 @@ void CSkillAction_AT_GLACIER_SHARD::OnSkillEffect(int level, CGameActor* source, if (target) { EffectLists* effects = g_effectMgr; effects->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xA6', '\xA3', '\xB2', '\x50', '\xFE', '\x78', '\x8F', '\x36', '\xB2', '\xA7', '\xB2', '\x41', '\xF3', '\x1D'}; + constexpr auto bytesText = CRYPT_NAME("glacier_shard", 0x69FD1D9733D3CFC1ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1172,7 +1175,8 @@ void CSkillAction_AT_GLACIER_STOMP::OnSkillEffect(int level, CGameActor* source, if (target) { EffectLists* effects = g_effectMgr; effects->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xA0', '\xA1', '\x84', '\x5E', '\x76', '\x18', '\x17', '\xAA', '\xB4', '\xB9', '\x8A', '\x50', '\x6F', '\x7D'}; + constexpr auto bytesText = CRYPT_NAME("glacier_stomp", 0xF5657D1F3DE5CDC7ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1191,14 +1195,15 @@ void CSkillAction_AT_ROARING_CHARGE::OnSkillEffect(int level, CGameActor* source if (source) { EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x43', '\x36', '\x4A', '\x73', '\x08', '\xA3', '\x02', '\xD4', '\x52', '\x31', '\x4A', '\x73', '\x06', '\xA8', '\x65'}; + constexpr auto bytesText = CRYPT_NAME("roaring_charge", 0x8B65CD61012B5931ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x97', '\xE0', '\x2C', '\x67', '\x5E', '\x6F', '\x34', '\xA8', '\x86', '\xE7', '\x2C', '\x67', '\x50', '\x64', '\x0C', '\x95', - '\x8A', '\xFB', '\x39', '\x7A', '\x5A', '\x01'}; + constexpr auto bytesText = CRYPT_NAME("roaring_charge_bottom", 0xF7530137154D8FE5ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1217,14 +1222,13 @@ void CSkillAction_AT_ROARING_CHARGE_S::OnSkillEffect(int level, CGameActor* sour if (source) { EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\xB1', '\xAC', '\xB4', '\xF9', '\x32', '\x85', '\x58', '\xD4', '\xA0', '\xAB', '\xB4', '\xF9', '\x3C', '\x8E', '\x60', '\xF8', '\xC3'}; + constexpr std::array bytes = CRYPT_NAME("roaring_charge_s", 0x8B3FEB5B8BD5C3C3ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\xD5', '\xDC', '\x64', '\xBB', '\xCC', '\x0D', '\x8C', '\x54', '\xC4', '\xDB', '\x64', '\xBB', '\xC2', '\x06', '\xB4', '\x78', - '\xF8', '\xD1', '\x6A', '\xBD', '\xD1', '\x0C', '\x86', '\x0B'}; + constexpr std::array bytes = CRYPT_NAME("roaring_charge_s_bottom", 0x0BEB63A5C905B3A7ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1295,8 +1299,8 @@ void CSkillAction_AT_FURIOS_STORM::OnSkillEffect(int level, CGameActor* source, } if (CEffect* effect = g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x6F', '\x65', '\x4C', '\x67', '\xCB', '\x2C', '\xFD', '\x32', '\x75', '\x6A', '\x66', '\x6A', '\xCE', '\x3A', '\xFB', '\x04', - '\x76', '\x78', '\x4D', '\x6C', '\xAF'}; + constexpr auto bytesText = CRYPT_NAME("thundering_cast_mute", 0x5B8F49AF09390D1BULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -1304,24 +1308,26 @@ void CSkillAction_AT_FURIOS_STORM::OnSkillEffect(int level, CGameActor* source, } const int stormA = CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x89', '\x56', '\xA7', '\x86', '\x76', '\x22', '\xCE', '\x48', '\x9B', '\x4C', '\xA7', '\x82', '\x46', '\x30', '\x91'}; + constexpr auto bytesText = CRYPT_NAME("furios_storm_a", 0x3B915119EFD523EFULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()); const int stormABottom = CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x31', '\xF6', '\x9B', '\xBC', '\xEE', '\xB6', '\x12', '\x34', '\x23', '\xEC', '\x9B', '\xB8', '\xDE', '\xA4', '\x12', '\x25', - '\x38', '\xF7', '\x9D', '\xBA', '\xEC', '\xC5'}; + constexpr auto bytesText = CRYPT_NAME("furios_storm_a_bottom", 0x474DC581D5E98357ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()); const int stormB = CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x0B', '\x2A', '\x8B', '\x5A', '\x8C', '\x08', '\x0A', '\x4C', '\x19', '\x30', '\x8B', '\x5E', '\xBC', '\x19', '\x55'}; + constexpr auto bytesText = CRYPT_NAME("furios_storm_b", 0x3F557BE333F95F6DULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()); const int stormBBottom = CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x5F', '\x94', '\xDB', '\x86', '\x8E', '\xD4', '\x0C', '\x74', '\x4D', '\x8E', '\xDB', '\x82', '\xBE', '\xC5', '\x0C', '\x65', - '\x56', '\x95', '\xDD', '\x80', '\x8C', '\xA7'}; + constexpr auto bytesText = CRYPT_NAME("furios_storm_b_bottom", 0x0753A7E1EFA9E139ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()); @@ -1347,30 +1353,28 @@ void CSkillAction_AT_FURIOS_STORM::PlayThunderEffect(CGameActor* source) { void CEfstAction_FURIOS_STORM::OnEfstEnd(int efstId, int argument2, int argument3, int argument4, CRenderObject* actor) { if (actor) { g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {0x6D, 0x05, 0xBA, 0x91, 0x39, 0x64, 0xB3, 0x16, 0x77, 0x0A, 0x90, 0x9C, 0x3C, 0x72, 0xB5, 0x7F}; + constexpr std::array bytes = CRYPT_NAME("thundering_cast", 0x7FC1015DFFCF6D19ULL); thread_local EncryptedName name(bytes); return name.Text(); }())); for (int index = 0; index < 4; ++index) { g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {0x45, 0xF6, 0xA9, 0xEA, 0x2E, 0xCE, 0x60, 0xB8, 0x57, 0xEC, 0xA9, 0xEE, 0x1E, 0xDC, 0x3F}; + constexpr std::array bytes = CRYPT_NAME("furios_storm_a", 0xCB3FBD4183DB8323ULL); thread_local EncryptedName name(bytes); return name.Text(); }())); g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {0x2B, 0xA4, 0xB9, 0xAE, 0x96, 0x04, 0x92, 0x0C, 0x39, 0xBE, 0xB9, 0xAA, 0xA6, 0x16, 0x92, 0x1D, - 0x22, 0xA5, 0xBF, 0xA8, 0x94, 0x77}; + constexpr std::array bytes = CRYPT_NAME("furios_storm_a_bottom", 0x7FCD77F9C7CBD14DULL); thread_local EncryptedName name(bytes); return name.Text(); }())); g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {0x67, 0x22, 0xE5, 0xB6, 0x7C, 0xF6, 0x0C, 0xA2, 0x75, 0x38, 0xE5, 0xB2, 0x4C, 0xE7, 0x53}; + constexpr std::array bytes = CRYPT_NAME("furios_storm_b", 0xD1538513DF975701ULL); thread_local EncryptedName name(bytes); return name.Text(); }())); g_effectMgr->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {0xF9, 0xB6, 0x35, 0xD4, 0x84, 0x34, 0xBE, 0xE2, 0xEB, 0xAC, 0x35, 0xD0, 0xB4, 0x25, 0xBE, 0xF3, - 0xF0, 0xB7, 0x33, 0xD2, 0x86, 0x47}; + constexpr std::array bytes = CRYPT_NAME("furios_storm_b_bottom", 0x91E147EBBD47C39FULL); thread_local EncryptedName name(bytes); return name.Text(); }())); @@ -1404,7 +1408,8 @@ void CSkillAction_AT_ALPHA_PHASE::OnSkillEffect(int level, CGameActor* source, C if (source) { EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x72', '\xAB', '\x73', '\x7D', '\x9A', '\xCE', '\x67', '\x27', '\x72', '\xB4', '\x66', '\x15'}; + constexpr auto bytesText = CRYPT_NAME("alpha_phase", 0x4F1791FB1503C713ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1435,7 +1440,8 @@ void CSkillAction_AT_APEX_PHASE::OnSkillEffect(int level, CGameActor* source, CG if (source) { EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xB2', '\x9D', '\xF2', '\x6D', '\x12', '\x2B', '\xCD', '\xC0', '\xA0', '\x88', '\x97'}; + constexpr auto bytesText = CRYPT_NAME("apex_phase", 0xA1A55B4D1597EDD3ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1466,7 +1472,8 @@ void CSkillAction_AT_FLIP_FLAP::OnSkillEffect(int level, CGameActor* source, CGa if (source) { EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x9B', '\x91', '\x14', '\x83', '\xBE', '\x73', '\x95', '\x7A', '\x8D', '\xFD'}; + constexpr auto bytesText = CRYPT_NAME("flip_flap", 0x1BF915E1F37DFDFDULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1541,7 +1548,8 @@ void CEfstAction_FLIP_FLAP_TARGET::OnEfstBegin(int efstId, int value, int argume if (actor) { EffectLists* effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xCE', '\x2A', '\x59', '\x8C', '\x80', '\x66', '\x2A', '\x51', '\xCC', '\x10', '\x58', '\x9A', '\xB1', '\x76', '\x53'}; + constexpr auto bytesText = CRYPT_NAME("aero_sync_sync", 0x3F5315DFE32B4FAFULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1572,14 +1580,13 @@ void CSkillAction_AT_TEMPEST_FLAP::OnSkillEffect(int level, CGameActor* source, if (target) { EffectLists* effects = g_effectMgr; effects->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x15', '\xCA', '\xE2', '\x49', '\xEE', '\xBA', '\x8B', '\x48', '\x07', '\xC3', '\xEE', '\x49', '\x8B'}; + constexpr std::array bytes = CRYPT_NAME("tempest_flap", 0x17FFC98B398FAF61ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x47', '\xF6', '\x20', '\xE5', '\xFE', '\xE6', '\x2F', '\xC4', '\x55', '\xFF', '\x2C', '\xE5', '\xC4', '\xF7', '\x34', '\xEF', - '\x47', '\xFC', '\x20', '\x95'}; + constexpr std::array bytes = CRYPT_NAME("tempest_flap_bottom", 0x9B5B959B954D9333ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1601,24 +1608,24 @@ void CSkillAction_AT_TERRA_HARVEST::OnSkillEffect(int level, CGameActor* source, const int variant = std::max(std::rand() % 2, 0); const int effectId = CEZ2STREffectMgr::GetInstance()->EffectId(variant ? std::string([] { - const char bytes[] = {'\xF1', '\x04', '\xF9', '\x65', '\x1E', '\x3E', '\xCD', '\xCE', '\xF7', '\x17', '\xEE', '\x64', '\x0B', '\x3E', '\xD7', '\xCA', - '\xE1', '\x61'}; + constexpr auto bytesText = CRYPT_NAME("terra_harvest_red", 0xAFA5617F178B6185ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()) : std::string([] { - const char bytes[] = {'\x39', '\x40', '\xEB', '\x3B', '\x32', '\x1C', '\xE9', '\x66', '\x3F', '\x53', '\xFC', '\x3A', '\x27', '\x1C', '\xF8', '\x62', - '\x21', '\x49', '\xF6', '\x3E', '\x53'}; + constexpr auto bytesText = CRYPT_NAME("terra_harvest_yellow", 0x078143534999254DULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }())); const int bottomId = CEZ2STREffectMgr::GetInstance()->EffectId(variant ? std::string([] { - const char bytes[] = {'\x3B', '\x2E', '\xC1', '\xFD', '\x4C', '\x4A', '\x29', '\xE6', '\x3D', '\x3D', '\xD6', '\xFC', '\x59', '\x4A', '\x33', '\xE2', - '\x2B', '\x14', '\xD1', '\xE0', '\x59', '\x61', '\x2E', '\xEA', '\x4F'}; + constexpr auto bytesText = CRYPT_NAME("terra_harvest_red_bottom", 0x8741152D8FB34B4FULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()) : std::string([] { - const char bytes[] = {'\x73', '\xDE', '\x9B', '\x3F', '\x98', '\x12', '\x35', '\xF4', '\x75', '\xCD', '\x8C', '\x3E', '\x8D', '\x12', '\x24', '\xF0', - '\x6B', '\xD7', '\x86', '\x3A', '\xA6', '\x2F', '\x32', '\xE1', '\x73', '\xD4', '\x84', '\x4D'}; + constexpr auto bytesText = CRYPT_NAME("terra_harvest_yellow_bottom", 0x955D4DF94DE9BB07ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }())); @@ -1631,14 +1638,13 @@ void CSkillAction_AT_TERRA_HARVEST::OnSkillEffect(int level, CGameActor* source, void CSkillAction_AT_TERRA_WAVE::OnGroundSkillEffect(vector3d position, int argument2, int argument3) { EffectLists* effects = g_effectMgr; effects->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x7F', '\xD0', '\xFB', '\x67', '\x68', '\xE8', '\xEE', '\xA2', '\x7D', '\xD0', '\x89'}; + constexpr std::array bytes = CRYPT_NAME("terra_wave", 0xC399B7091589B50BULL); thread_local EncryptedName name(bytes); return name.Text(); }()), position.x, position.y, position.z, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(0, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x1B', '\xC8', '\x53', '\x9B', '\x5E', '\x58', '\x4E', '\xD6', '\x19', '\xC8', '\x7E', '\x8B', '\x50', '\x73', '\x4D', '\xD8', - '\x02', '\xAD'}; + constexpr std::array bytes = CRYPT_NAME("terra_wave_bottom", 0xB739073FE921AD6FULL); thread_local EncryptedName name(bytes); return name.Text(); }()), position.x, position.y, position.z, 0, -1, 0, 0); @@ -1655,13 +1661,12 @@ int CSkillAction_AT_SOLID_STOMP::GetSkillAttackMotion() { void CSkillAction_AT_SOLID_STOMP::OnSkillEffect(int level, CGameActor* source, CGameActor* target) { if (target) { g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\xAA', '\x56', '\x7F', '\x10', '\xAF', '\xDC', '\x0E', '\x8B', '\xB6', '\x54', '\x63', '\x79'}; + constexpr std::array bytes = CRYPT_NAME("solid_stomp", 0xFF7D83CB791339D9ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x66', '\xFC', '\xDF', '\xA8', '\x83', '\x1C', '\x22', '\x99', '\x7A', '\xFE', '\xC3', '\x9E', '\x85', '\x2C', '\x25', '\x99', - '\x7A', '\xFE', '\xB3'}; + constexpr std::array bytes = CRYPT_NAME("solid_stomp_bottom", 0xED5143E7C1B39315ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1693,14 +1698,13 @@ void CEfstAction_ZEPHYR_LINK::OnEfstBegin(int efstId, int value, int argument3, this->OnEfstEnd(efstId, value, argument3, argument4, actor); EffectLists* effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\xEB', '\xA6', '\xCD', '\x09', '\x1C', '\xE3', '\x62', '\x55', '\xF8', '\xAD', '\xD6', '\x61'}; + constexpr std::array bytes = CRYPT_NAME("zephyr_link", 0x393D916561BDC391ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\xEF', '\x98', '\x61', '\xDB', '\x28', '\x17', '\xCA', '\x5D', '\xFC', '\x93', '\x7A', '\xEC', '\x33', '\x0A', '\xE1', '\x45', - '\xFA', '\x90', '\x11'}; + constexpr std::array bytes = CRYPT_NAME("zephyr_link_bottom", 0x31956551B311FD95ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1713,14 +1717,13 @@ void CEfstAction_ZEPHYR_LINK::OnEfstEnd(int efstId, int argument2, int argument3 if (actor) { EffectLists* effects = g_effectMgr; effects->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\xF3', '\x58', '\x1D', '\x8D', '\xDE', '\x73', '\x78', '\x43', '\xE0', '\x53', '\x06', '\xE5'}; + constexpr std::array bytes = CRYPT_NAME("zephyr_link", 0x2F2701A7E56D3D89ULL); thread_local EncryptedName name(bytes); return name.Text(); }())); effects = g_effectMgr; effects->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x5F', '\xF4', '\x77', '\xCB', '\x98', '\x73', '\x6C', '\x07', '\x4C', '\xFF', '\x6C', '\xFC', '\x83', '\x6E', '\x47', '\x1F', - '\x4A', '\xFC', '\x07'}; + constexpr std::array bytes = CRYPT_NAME("zephyr_link_bottom", 0x6B3301E1A3079125ULL); thread_local EncryptedName name(bytes); return name.Text(); }())); @@ -1742,14 +1745,15 @@ void CEfstAction_INSANE::OnEfstBegin(int efstId, int value, int argument3, int a this->OnEfstEnd(efstId, value, argument3, argument4, actor); EffectLists* effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xCA', '\xC7', '\xB6', '\x43', '\x48', '\x00', '\xD9', '\x02', '\xCE', '\xCF', '\xA0', '\x68', '\x27', '\x58', '\xB7'}; + constexpr auto bytesText = CRYPT_NAME("efst_insane_01", 0x71B7691737C5A1AFULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x06', '\x5F', '\x0E', '\xD5', '\x06', '\xDC', '\xF1', '\xB0', '\x02', '\x57', '\x18', '\xFE', '\x3B', '\xDA', '\xEB', '\xB7', - '\x0C', '\x54', '\x22', '\x91', '\x68', '\xB5'}; + constexpr auto bytesText = CRYPT_NAME("efst_insane_bottom_01", 0xC39FB559A17D3963ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1780,14 +1784,15 @@ void CEfstAction_INSANE2::OnEfstBegin(int efstId, int value, int argument3, int this->OnEfstEnd(efstId, value, argument3, argument4, actor); EffectLists* effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x32', '\x97', '\xC6', '\xBF', '\x5C', '\x98', '\x8D', '\x36', '\x36', '\x9F', '\xD0', '\x94', '\x33', '\xC3', '\xE3'}; + constexpr auto bytesText = CRYPT_NAME("efst_insane_02", 0x45E3F103CBB5F157ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xCE', '\x29', '\xEC', '\xD7', '\xDA', '\x46', '\x7F', '\x74', '\xCA', '\x21', '\xFA', '\xFC', '\xE7', '\x40', '\x65', '\x73', - '\xC4', '\x22', '\xC0', '\x93', '\xB7', '\x2F'}; + constexpr auto bytesText = CRYPT_NAME("efst_insane_bottom_02", 0x07112F85A39F4FABULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1802,14 +1807,15 @@ void CEfstAction_INSANE3::OnEfstBegin(int efstId, int value, int argument3, int this->OnEfstEnd(efstId, value, argument3, argument4, actor); EffectLists* effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xBA', '\x21', '\xDE', '\x13', '\x40', '\x10', '\x5D', '\x5E', '\xBE', '\x29', '\xC8', '\x38', '\x2F', '\x4A', '\x33'}; + constexpr auto bytesText = CRYPT_NAME("efst_insane_03", 0x2D33791F67AD47DFULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x90', '\xE1', '\x8E', '\x89', '\x70', '\x54', '\x01', '\xE0', '\x94', '\xE9', '\x98', '\xA2', '\x4D', '\x52', '\x1B', '\xE7', - '\x9A', '\xEA', '\xA2', '\xCD', '\x1C', '\x3D'}; + constexpr auto bytesText = CRYPT_NAME("efst_insane_bottom_03", 0x936F3D2FFDFD87F5ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1859,8 +1865,7 @@ void CSkillAction_AT_SAVAGE_LUNGE::OnSkillEffect(int level, CGameActor* source, void CSkillAction_AT_TEMPEST_FLAP::OnSkillCast(int level, CGameActor* source) { if (this->CanUse(source)) { if (CEffect* effect = g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\xCB', '\xD8', '\xB2', '\x4F', '\x28', '\x5E', '\xF7', '\x6C', '\xD9', '\xD1', '\xBE', '\x4F', '\x12', '\x4E', '\xE2', '\x40', - '\xCB', '\xBD'}; + constexpr std::array bytes = CRYPT_NAME("tempest_flap_cast", 0x33832D4D3FDFBDBFULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -2011,7 +2016,8 @@ void CSkillAction_AT_PRIMAL_CLAW::OnSkillEffect(int level, CGameActor* source, C } g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xC7', '\x75', '\x3E', '\xA0', '\x4A', '\x8B', '\x74', '\xE2', '\xDB', '\x66', '\x20', '\xCD'}; + constexpr auto bytesText = CRYPT_NAME("primal_claw", 0x812BE72BCD5707B7ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -2031,7 +2037,8 @@ void CSkillAction_AT_FERAL_CLAW::OnSkillEffect(int level, CGameActor* source, CG } g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x33', '\x98', '\xC7', '\xBA', '\xAB', '\xEE', '\x16', '\x5F', '\x34', '\x8A', '\xB5'}; + constexpr auto bytesText = CRYPT_NAME("feral_claw", 0x3375B1C7DBB5FD55ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -2045,7 +2052,8 @@ const float g_featherOffsets[3] = {0.0f, 0.1f, -0.1f}; void CSkillAction_DamageWereRaptorForm::SpawnAttack00Effect(int sourceActor, CGameActor* target) { CGameActor* source = reinterpret_cast(sourceActor); if (source && target) { - const char bytes[] = {'\x46', '\x75', '\x73', '\x0C', '\x60', '\xAE', '\xAC', '\x1F', '\x17', '\x01'}; + constexpr auto bytesText = CRYPT_NAME("attack_00", 0x2FF3C5036D070127ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); const std::string effectName = name.Text(); this->SpawnDirectionalEffect(source, target, effectName); @@ -2057,7 +2065,8 @@ void CSkillAction_DamageWereRaptorForm::SpawnAttack00Effect(int sourceActor, CGa void CSkillAction_DamageWereRaptorForm::SpawnAttack01Effect(int sourceActor, CGameActor* target) { CGameActor* source = reinterpret_cast(sourceActor); if (source && target) { - const char bytes[] = {'\xD2', '\x13', '\xB7', '\x32', '\x9A', '\xF0', '\x6A', '\x27', '\x82', '\x67'}; + constexpr auto bytesText = CRYPT_NAME("attack_01", 0x17359BF953C367B3ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); const std::string effectName = name.Text(); this->SpawnDirectionalEffect(source, target, effectName); @@ -2081,7 +2090,8 @@ void CSkillAction_DamageWereRaptorForm::SpawnAttack02Effect(int sourceActor, CGa } const int effectId = CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x76', '\x8D', '\x3B', '\xD8', '\x98', '\xDE', '\x70', '\xF5', '\x25', '\xF9'}; + constexpr auto bytesText = CRYPT_NAME("attack_02", 0xC52FB5FBB94FF917ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()); diff --git a/Source/Contents/Skills/SkillActionDruid.cpp b/Source/Contents/Skills/SkillActionDruid.cpp index 0a791de6e..b49030679 100644 --- a/Source/Contents/Skills/SkillActionDruid.cpp +++ b/Source/Contents/Skills/SkillActionDruid.cpp @@ -16,6 +16,7 @@ #include "Utility/Cipher/XorBytes.h" #include "Utility/Math/Vector3d.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include #include @@ -341,7 +342,8 @@ void CSkillAction_DR_WERERAPTOR::OnSkillEffect(int level, CGameActor* source, CG return; } - const char effectSource[] = {'\x7E', '\xCC', '\x35', '\x3A', '\xAB', '\x3C', '\x05', '\xA7', '\x66', '\xDB', '\x47'}; + constexpr auto effectSourceText = CRYPT_NAME("wereraptor", 0xD3755DD95F47A909ULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); } @@ -443,7 +445,8 @@ void CSkillAction_DR_HUNGER::OnSkillEffect(int level, CGameActor* source, CGameA EffectLists* effects = g_effectMgr; effects->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x3D', '\x88', '\xDB', '\xBC', '\xA2', '\xC3', '\x2A', '\x47', '\x34', '\x8F', '\xD2', '\xBE', '\xB3', '\xB1'}; + constexpr auto bytesText = CRYPT_NAME("hunger_target", 0x3375B1C7DBB5FD55ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -457,7 +460,8 @@ void CSkillAction_DR_HUNGER::OnSkillHit(int caster, CGameActor* target, CGameAct return; } - const char effectSource[] = {'\x77', '\x44', '\xA3', '\x80', '\x88', '\x07', '\x6D'}; + constexpr auto effectSourceText = CRYPT_NAME("hunger", 0x1D6D75EDE7CD311FULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); } @@ -587,11 +591,13 @@ void CSkillAction_DR_LOW_FLIGHT::OnSkillEffect(int level, CGameActor* source, CG const std::string effectName( (direction & 1) != 0 ? std::string([] { - const char horizonSource[] = {'\x5D', '\x36', '\x5C', '\x5E', '\x07', '\xA1', '\x0C', '\xEC', '\x59', '\x2D', '\x74', '\x69', '\x0E', '\xBF', '\x0C', '\xF1', '\x5E', '\x37', '\x2B'}; + constexpr auto horizonSourceText = CRYPT_NAME("low_flight_horizon", 0x8B65CD61012B5931ULL); + const auto& horizonSource = horizonSourceText.data; thread_local EncryptedName horizonName(horizonSource); return horizonName.Text(); }()) : std::string([] { - const char verticalSource[] = {'\x89', '\xE0', '\x3A', '\x4A', '\x51', '\x6D', '\x3A', '\x90', '\x8D', '\xFB', '\x12', '\x63', '\x52', '\x73', '\x27', '\x9E', '\x86', '\xEE', '\x21', '\x15'}; + constexpr auto verticalSourceText = CRYPT_NAME("low_flight_vertical", 0xF7530137154D8FE5ULL); + const auto& verticalSource = verticalSourceText.data; thread_local EncryptedName verticalName(verticalSource); return verticalName.Text(); }()) @@ -619,7 +625,8 @@ void CSkillAction_DR_LOW_FLIGHT::OnSkillEffect(int level, CGameActor* source, CG effects = g_effectMgr; if (CEffect* effect = effects->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bottomSource[] = {'\xAD', '\xA0', '\xA4', '\x6C', '\xF1', '\x71', '\x94', '\x0E', '\xA9', '\xBB', '\x8C', '\x51', '\xF8', '\x69', '\x89', '\x06', '\xAC', '\xCF'}; + constexpr auto bottomSourceText = CRYPT_NAME("low_flight_bottom", 0x69FD1D9733D3CFC1ULL); + const auto& bottomSource = bottomSourceText.data; thread_local EncryptedName bottomName(bottomSource); return bottomName.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -651,7 +658,8 @@ void CSkillAction_DR_NATURE_SHIELD::OnSkillCast(int level, CGameActor* source) { // FUNCTION: fn_04504 void CSkillAction_DR_NATURE_SHIELD::OnSkillEffect(int level, CGameActor* source, CGameActor* target) { g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xA9', '\xAC', '\x91', '\x48', '\x6D', '\x18', '\x3A', '\x86', '\xAF', '\xA4', '\x80', '\x51', '\x7B', '\x7D'}; + constexpr auto bytesText = CRYPT_NAME("nature_shield", 0xF5657D1F3DE5CDC7ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -714,7 +722,7 @@ EfstActionMessage CEfstAction_NATURE_PROTECTION::GetEfstEndMessage() { // FUNCTION: fn_04511 int CEfstAction_NATURE_PROTECTION::GetEffectId(int efstId, int argument4) { return CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\xAD', '\xA2', '\xA1', '\xFE', '\x29', '\x8E', '\x60', '\xFB', '\xB1', '\xAC', '\xA1', '\xEE', '\x38', '\x9F', '\x56', '\xE4', '\xAD', '\xC3'}; + constexpr std::array bytes = CRYPT_NAME("nature_protection", 0x8B3FEB5B8BD5C3C3ULL); thread_local EncryptedName name(bytes); return name.Text(); }()); @@ -756,7 +764,8 @@ int CEfstAction_THUNDERING_ROD::GetEffectId(int efstId, int argument4) { } std::string suffix = std::format("{:02}", step); - const char prefixSource[] = {'\xD3', '\xDB', '\x70', '\xA7', '\xC1', '\x06', '\x99', '\x62', '\xC9', '\xD4', '\x5A', '\xBB', '\xCA', '\x07', '\xB4', '\x0B'}; + constexpr auto prefixSourceText = CRYPT_NAME("thundering_rod_", 0x0BEB63A5C905B3A7ULL); + const auto& prefixSource = prefixSourceText.data; thread_local EncryptedName prefixName(prefixSource); return CEZ2STREffectMgr::GetInstance()->EffectId(std::string(prefixName.Text()) + suffix); } @@ -777,7 +786,7 @@ EfstActionMessage CEfstAction_THUNDERING_ROD_MAX::GetEfstEndMessage() { // FUNCTION: fn_04518 int CEfstAction_THUNDERING_ROD_MAX::GetEffectId(int efstId, int argument4) { return CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x5B', '\xF7', '\xC6', '\xB5', '\x8B', '\xAC', '\x65', '\xF2', '\x41', '\xF8', '\xEC', '\xA9', '\x80', '\xAD', '\x48', '\xFD', '\x5A', '\xF3', '\xDF', '\xDB'}; + constexpr std::array bytes = CRYPT_NAME("thundering_rod_full", 0x9B17C9EFDBB39F2FULL); thread_local EncryptedName name(bytes); return name.Text(); }()); @@ -811,13 +820,15 @@ void CSkillAction_DR_TRUTH_OF_EARTH::OnSkillEffect(int level, CGameActor* source } g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x05', '\x69', '\x86', '\x8B', '\xEF', '\x7A', '\xFE', '\xA1', '\x2E', '\x7E', '\x92', '\x8D', '\xF3', '\x4D', '\x91'}; + constexpr auto bytesText = CRYPT_NAME("truth_of_earth", 0xC7912587FFF31B71ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x19', '\x41', '\x7A', '\xE1', '\xB3', '\x1A', '\xBC', '\x0F', '\x32', '\x56', '\x6E', '\xE7', '\xAF', '\x2D', '\x8C', '\x0B', '\x02', '\x47', '\x7B', '\xFA', '\xB6', '\x45'}; + constexpr auto bytesText = CRYPT_NAME("truth_of_earth_bottom", 0x69D345DB950F336DULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -864,14 +875,14 @@ void CSkillAction_DR_TRUTH_OF_ICE::OnSkillEffect(int level, CGameActor* source, EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x47', '\x55', '\x46', '\x7B', '\xD5', '\x12', '\x56', '\x4B', '\x6C', '\x4E', '\x50', '\x6A', '\xBD'}; + constexpr std::array bytes = CRYPT_NAME("truth_of_ice", 0x2D394DBD0F332733ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x33', '\x53', '\xCE', '\x9F', '\x83', '\x28', '\x70', '\x73', '\x18', '\x48', '\xD8', '\x8E', '\xB4', '\x15', '\x70', '\x61', '\x33', '\x4E', '\xD6', '\xEB'}; + constexpr std::array bytes = CRYPT_NAME("truth_of_ice_bottom", 0x151F77EBEBBB2147ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -918,14 +929,14 @@ void CSkillAction_DR_TRUTH_OF_WIND::OnSkillEffect(int level, CGameActor* source, EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x95', '\xE9', '\x86', '\x0F', '\x85', '\xD8', '\x90', '\x07', '\xBE', '\xEC', '\x9A', '\x15', '\x89', '\x87'}; + constexpr std::array bytes = CRYPT_NAME("truth_of_wind", 0x61FF87ED7BF39BE1ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x8B', '\xF7', '\x52', '\x79', '\x0D', '\x60', '\xF6', '\x1B', '\xA0', '\xF2', '\x4E', '\x63', '\x01', '\x60', '\xFB', '\x12', '\x8B', '\xF1', '\x48', '\x60', '\x65'}; + constexpr std::array bytes = CRYPT_NAME("truth_of_wind_bottom", 0x7D993F650D2785FFULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -971,7 +982,8 @@ void CSkillAction_DR_CUTTING_WIND::OnSkillEffect(int level, CGameActor* source, } if (CEffect* effect = g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x70', '\xB2', '\x77', '\x61', '\x92', '\xFF', '\x70', '\x10', '\x64', '\xAE', '\x6D', '\x71', '\xFB'}; + constexpr auto bytesText = CRYPT_NAME("cutting_wind", 0x4F1791FB1503C713ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -1023,7 +1035,8 @@ void CSkillAction_DR_WIND_BOMB::OnSkillEffect(int level, CGameActor* source, CGa static_cast(effect)->SetTarget(target->render.position); } - const char effectSource[] = {'\x76', '\x3E', '\xF9', '\xBB', '\x4C', '\xE7', '\x3C', '\xBC', '\x63', '\x08', '\xFA', '\xBE', '\x7A', '\xEB', '\x53'}; + constexpr auto effectSourceText = CRYPT_NAME("wind_bomb_main", 0xD1538513DF975701ULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); if (CEffect* effect = g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { effect->SetDelay(300); @@ -1039,7 +1052,8 @@ void CSkillAction_DR_WIND_BOMB::OnSkillDamage(int level, CGameActor* source, CGa EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xE8', '\xAA', '\x29', '\xD9', '\xB4', '\x25', '\x8E', '\xFC', '\xFD', '\x9C', '\x2F', '\xD4', '\x9F', '\x47'}; + constexpr auto bytesText = CRYPT_NAME("wind_bomb_hit", 0x91E147EBBD47C39FULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1072,14 +1086,14 @@ void CSkillAction_DR_EARTH_FLOWER::OnSkillEffect(int level, CGameActor* source, EffectLists* effects = g_effectMgr; effects->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x98', '\x9C', '\x0F', '\x87', '\x89', '\x4A', '\x9F', '\x77', '\x92', '\x8A', '\x18', '\x81', '\xE1'}; + constexpr std::array bytes = CRYPT_NAME("earth_flower", 0x1BF915E1F37DFDFDULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\xBA', '\xB8', '\x2F', '\x1D', '\x7B', '\xCC', '\x99', '\x6D', '\xB0', '\xAE', '\x38', '\x1B', '\x4C', '\xF1', '\x90', '\x75', '\xAB', '\xB6', '\x30', '\x69'}; + constexpr std::array bytes = CRYPT_NAME("earth_flower_bottom", 0x01FF9313695DD9DFULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1092,7 +1106,8 @@ void CSkillAction_DR_ICE_CLOUD::OnSkillEffect(int level, CGameActor* source, CGa return; } - const char effectSource[] = {'\x3E', '\xE0', '\x8C', '\x8A', '\xE2', '\xA9', '\x22', '\x32', '\x33', '\x83'}; + constexpr auto effectSourceText = CRYPT_NAME("ice_cloud", 0x474DC581D5E98357ULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); } @@ -1104,7 +1119,8 @@ void CSkillAction_DR_ICE_TOTEM::OnSkillEffect(int level, CGameActor* source, CGa return; } - const char effectSource[] = {'\x04', '\x3C', '\x9C', '\x6C', '\x97', '\x14', '\x21', '\x5A', '\x00', '\x5F'}; + constexpr auto effectSourceText = CRYPT_NAME("ice_totem", 0x3F557BE333F95F6DULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); } @@ -1125,7 +1141,8 @@ void CSkillAction_DR_WEREWOLF::OnSkillEffect(int level, CGameActor* source, CGam return; } - const char effectSource[] = {'\xCE', '\x68', '\x5D', '\xC4', '\x34', '\x94', '\x63', '\x2F', '\xB9'}; + constexpr auto effectSourceText = CRYPT_NAME("werewolf", 0x490FFB43A12F0DB9ULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); } @@ -1151,7 +1168,8 @@ void CSkillAction_DR_ENRAGE_WOLF::OnSkillEffect(int level, CGameActor* source, C EffectLists* effects = g_effectMgr; effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\x08', '\x8D', '\x37', '\xC2', '\x8A', '\xA4', '\x88', '\x46', '\x02', '\x8F', '\x23', '\xA3'}; + constexpr auto bytesText = CRYPT_NAME("enrage_wolf", 0x31D7C1EDA345E36DULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -1164,7 +1182,8 @@ void CSkillAction_DR_BLOOD_HOWLING::OnSkillEffect(int level, CGameActor* source, return; } - const char effectSource[] = {'\x0F', '\x0F', '\x5A', '\x42', '\xC1', '\x5C', '\xE7', '\xB6', '\x1A', '\x0F', '\x5C', '\x43', '\xC2', '\x03'}; + constexpr auto effectSourceText = CRYPT_NAME("blood_howling", 0xD98F03A52D35636DULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); } @@ -1176,7 +1195,8 @@ void CSkillAction_DR_NOMERCY_CLAW::OnSkillEffect(int level, CGameActor* source, return; } - const char effectSource[] = {'\xBF', '\x76', '\xF0', '\xEA', '\x19', '\xE8', '\x76', '\x50', '\xB2', '\x75', '\xFC', '\xF8', '\x6B'}; + constexpr auto effectSourceText = CRYPT_NAME("nomercy_claw", 0x0F0F8B6B8F9D19D1ULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); } @@ -1188,7 +1208,8 @@ void CSkillAction_DR_ENRAGE_RAPTOR::OnSkillEffect(int level, CGameActor* source, return; } - const char effectSource[] = {'\xD2', '\x69', '\x25', '\xAC', '\x4C', '\x82', '\x74', '\xF3', '\xD6', '\x77', '\x23', '\xA2', '\x59', '\xE7'}; + constexpr auto effectSourceText = CRYPT_NAME("enrage_raptor", 0x812BE72BCD5707B7ULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); } @@ -1200,7 +1221,8 @@ void CSkillAction_DR_PREENING::OnSkillEffect(int level, CGameActor* source, CGam return; } - const char effectSource[] = {'\x67', '\x8B', '\x2A', '\xDC', '\x95', '\xDC', '\x41', '\xA2', '\x17'}; + constexpr auto effectSourceText = CRYPT_NAME("preening", 0xC52FB5FBB94FF917ULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); g_effectMgr->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); } @@ -1218,7 +1240,8 @@ void CSkillAction_DR_CRUEL_BITE::OnSkillEffect(int level, CGameActor* source, CG EffectLists* effects = g_effectMgr; effects->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const char bytes[] = {'\xC2', '\x4F', '\xEA', '\xB2', '\x0F', '\xD0', '\x45', '\x30', '\xD5', '\x58', '\x9F'}; + constexpr auto bytesText = CRYPT_NAME("cruel_bite", 0x59278F63D79F3DA1ULL); + const auto& bytes = bytesText.data; thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); diff --git a/Source/Contents/Skills/SkillActionKarnos.cpp b/Source/Contents/Skills/SkillActionKarnos.cpp index 70bf9176f..224f146ba 100644 --- a/Source/Contents/Skills/SkillActionKarnos.cpp +++ b/Source/Contents/Skills/SkillActionKarnos.cpp @@ -16,6 +16,7 @@ #include "Utility/Cipher/XorBytes.h" #include "Utility/Math/Vector3d.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include #include @@ -433,7 +434,8 @@ void CSkillAction_KR_THUNDERING_FOCUS::OnSkillEffect(int level, CGameActor* sour return; } - const char effectSource[] = {'\x95', '\xF3', '\x86', '\x15', '\x89', '\xE2', '\x8D', '\x08', '\x8F', '\xFC', '\xAC', '\x1D', '\x82', '\xE4', '\x8A', '\x12', '\xBE', '\xFC', '\xF3'}; + constexpr auto effectSourceText = CRYPT_NAME("thundering_focus_g", 0x61FF87ED7BF39BE1ULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); } @@ -451,7 +453,8 @@ void CSkillAction_KR_THUNDERING_FOCUS_S::OnSkillEffect(int level, CGameActor* so return; } - const char effectSource[] = {'\x8B', '\xED', '\x52', '\x63', '\x01', '\x5A', '\xEB', '\x14', '\x91', '\xE2', '\x78', '\x6B', '\x0A', '\x5C', '\xEC', '\x0E', '\xA0', '\xFC', '\x27'}; + constexpr auto effectSourceText = CRYPT_NAME("thundering_focus_y", 0x7D993F650D2785FFULL); + const auto& effectSource = effectSourceText.data; thread_local EncryptedName effectName(effectSource); g_effectMgr->Spawn(target->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId(effectName.Text()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); } @@ -658,7 +661,7 @@ void CSkillAction_KR_SHARPEN_HAIL::OnSkillCast(int level, CGameActor* source) { EffectLists* effects = g_effectMgr; if (CEffect* effect = effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x6A', '\x05', '\xAE', '\x8D', '\x2D', '\x64', '\xAF', '\x20', '\x71', '\x0C', '\xA6', '\x93', '\x5D'}; + constexpr std::array bytes = CRYPT_NAME("sharpen_hail", 0x7FC1015DFFCF6D19ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -666,8 +669,7 @@ void CSkillAction_KR_SHARPEN_HAIL::OnSkillCast(int level, CGameActor* source) { } effects = g_effectMgr; if (CEffect* effect = effects->Spawn(source->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array bytes = {'\x50', '\xEB', '\xBA', '\xF1', '\x31', '\xD8', '\x51', '\x94', '\x4B', '\xE2', '\xB2', '\xEF', '\x1E', '\xDF', '\x50', '\xBF', - '\x57', '\xEC', '\xB6', '\x83'}; + constexpr std::array bytes = CRYPT_NAME("sharpen_hail_bottom", 0xCB3FBD4183DB8323ULL); thread_local EncryptedName name(bytes); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)) { @@ -804,26 +806,28 @@ void CSkillAction_KR_TYPHOON_WING::OnSkillCast(int level, CGameActor* source) { void CSkillAction_KR_TYPHOON_WING::OnGroundSkillEffect(vector3d position, int level, int argument5) { const int effectId = CEZ2STREffectMgr::GetInstance()->EffectId( level < 6 ? std::string([] { - const char source[] = {'\x67', '\xBE', '\x73', '\x7D', '\x94', '\xFE', '\x79', '\x10', '\x64', '\xAE', '\x6D', '\x72', '\xA4', '\xA4', '\x6F', '\x7A', '\x13'}; + constexpr auto sourceText = CRYPT_NAME("typhoon_wing_5x5", 0x4F1791FB1503C713ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name.Text(); }()) : std::string([] { - const char source[] = {'\xA7', '\x94', '\xE7', '\x7D', '\x22', '\x34', '\xCB', '\xFE', '\xA4', '\x84', '\xF9', '\x72', '\x12', '\x6C', '\xDD', '\x96', '\xD3'}; + constexpr auto sourceText = CRYPT_NAME("typhoon_wing_7x7", 0xA1A55B4D1597EDD3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name.Text(); }()) ); const int bottomId = CEZ2STREffectMgr::GetInstance()->EffectId( level < 6 ? std::string([] { - const char source[] = {'\x89', '\x84', '\x0D', '\x9B', '\x8E', '\x7A', '\x97', '\x44', '\x8A', '\x94', '\x13', '\x94', - '\xBE', '\x20', '\x81', '\x2E', '\xA2', '\x9F', '\x12', '\x87', '\x95', '\x7A', '\x94', '\x1B'}; + constexpr auto sourceText = CRYPT_NAME("typhoon_wing_5x5_bottom", 0x1BF915E1F37DFDFDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name.Text(); }()) : std::string([] { - const char source[] = {'\xAB', '\xA0', '\x2D', '\x01', '\x7C', '\xFC', '\x91', '\x5E', '\xA8', '\xB0', '\x33', '\x0E', - '\x4C', '\xA4', '\x87', '\x36', '\x80', '\xBB', '\x32', '\x1D', '\x67', '\xFC', '\x92', '\x01'}; + constexpr auto sourceText = CRYPT_NAME("typhoon_wing_7x7_bottom", 0x01FF9313695DD9DFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name.Text(); }()) @@ -874,13 +878,13 @@ void CEfstAction_WIND_VEIL::OnEfstBegin(int efstId, int value, int argument3, in EffectLists* effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array source = {'\xEC', '\xC4', '\x19', '\xAB', '\x8E', '\x4B', '\x88', '\x04', '\xF7', '\xAD'}; + constexpr std::array source = CRYPT_NAME("wild_veil", 0x6DED3DD1CF75AD9BULL); thread_local EncryptedName name(source); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); effects = g_effectMgr; effects->Spawn(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array source = {'\xB6', '\xBA', '\xB7', '\x13', '\xC4', '\x03', '\xA6', '\x20', '\xAD', '\x8C', '\xB9', '\x18', '\xEF', '\x01', '\xAC', '\x24', '\xC1'}; + constexpr std::array source = CRYPT_NAME("wild_veil_bottom", 0x49C3759B77DBD3C1ULL); thread_local EncryptedName name(source); return name.Text(); }()), 0.0f, 0.0f, 0.0f, 0, -1, 0, 0); @@ -895,13 +899,13 @@ void CEfstAction_WIND_VEIL::OnEfstEnd(int efstId, int argument2, int argument3, EffectLists* effects = g_effectMgr; effects->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array source = {'\xD8', '\x26', '\x47', '\x87', '\x80', '\x63', '\x36', '\x56', '\xC3', '\x4F'}; + constexpr std::array source = CRYPT_NAME("wild_veil", 0x3F5315DFE32B4FAFULL); thread_local EncryptedName name(source); return name.Text(); }())); effects = g_effectMgr; effects->Retire(actor->render.accountId, CEZ2STREffectMgr::GetInstance()->EffectId([] { - const std::array source = {'\x9E', '\xBA', '\x51', '\x63', '\x6A', '\x5F', '\x6E', '\x8C', '\x85', '\x8C', '\x5F', '\x68', '\x41', '\x5D', '\x64', '\x88', '\xE9'}; + constexpr std::array source = CRYPT_NAME("wild_veil_bottom", 0xE50B2935073DD3E9ULL); thread_local EncryptedName name(source); return name.Text(); }())); diff --git a/Source/Contents/Sound/SoundConfiguration.cpp b/Source/Contents/Sound/SoundConfiguration.cpp index 67e432e81..3e473ee43 100644 --- a/Source/Contents/Sound/SoundConfiguration.cpp +++ b/Source/Contents/Sound/SoundConfiguration.cpp @@ -5,6 +5,7 @@ #include "UI/GameSettings/GameSettingsUI.h" #include "Utility/Cipher/XorBytes.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include #include @@ -50,11 +51,13 @@ int ReadSetup() { type = REG_DWORD; size = sizeof(int); - const char showTipsSource[] = {'\xF4', '\xFB', '\x4A', '\x9E', '\xF1', '\x2A', '\xBB', '\x58', '\xE6', '\xE7', '\x56', '\x9D', '\xE4', '\x31', '\xBF', '\x5E', '\xF7', '\xB3'}; + constexpr auto showTipsSourceText = CRYPT_NAME("SHOWTIPSATSTARTUP", 0x0BEB63A5C905B3A7ULL); + const auto& showTipsSource = showTipsSourceText.data; RegQueryValueExA(settingsKey, DecryptText<0x0BEB63A5C905B3A7ULL>(showTipsSource), nullptr, &type, reinterpret_cast(&g_window315Enabled), &size); - const char trilinearFilterSource[] = {'\x97', '\x91', '\x9C', '\xC7', '\x12', '\xA5', '\x7A', '\xCA', '\x91', '\x85', '\x9C', '\xC7', '\x0F', '\xAE', '\x6D', '\x8B'}; + constexpr auto trilinearFilterSourceText = CRYPT_NAME("TRILINEARFILTER", 0x8B3FEB5B8BD5C3C3ULL); + const auto& trilinearFilterSource = trilinearFilterSourceText.data; if (RegQueryValueExA(settingsKey, DecryptText<0x8B3FEB5B8BD5C3C3ULL>(trilinearFilterSource), nullptr, &type, reinterpret_cast(&g_textureFiltering), &size) != ERROR_SUCCESS) { g_textureFiltering = 0; @@ -66,17 +69,20 @@ int ReadSetup() { type = REG_SZ; size = sizeof(g_deviceName); - const char deviceNameSource[] = {'\xA1', '\xCA', '\x1B', '\x5C', '\x74', '\x44', '\x1D', '\xB6', '\xA8', '\xCA', '\x4D'}; + constexpr auto deviceNameSourceText = CRYPT_NAME("DEVICENAME", 0xF7530137154D8FE5ULL); + const auto& deviceNameSource = deviceNameSourceText.data; RegQueryValueExA(settingsKey, DecryptText<0xF7530137154D8FE5ULL>(deviceNameSource), nullptr, &type, reinterpret_cast(g_deviceName), &size); type = REG_BINARY; size = sizeof(g_guidDevice); - const char guidDeviceSource[] = {'\x76', '\x0C', '\x62', '\x45', '\x25', '\x88', '\x33', '\xC2', '\x72', '\x1C', '\x2B'}; + constexpr auto guidDeviceSourceText = CRYPT_NAME("GUIDDEVICE", 0x8B65CD61012B5931ULL); + const auto& guidDeviceSource = guidDeviceSourceText.data; RegQueryValueExA(settingsKey, DecryptText<0x8B65CD61012B5931ULL>(guidDeviceSource), nullptr, &type, g_guidDevice, &size); type = REG_BINARY; size = sizeof(g_guidDriver); - const char guidDriverSource[] = {'\x80', '\x98', '\xAC', '\x79', '\x5B', '\x2F', '\x2C', '\xA3', '\x82', '\x9F', '\xE5'}; + constexpr auto guidDriverSourceText = CRYPT_NAME("GUIDDRIVER", 0xF5657D1F3DE5CDC7ULL); + const auto& guidDriverSource = guidDriverSourceText.data; RegQueryValueExA(settingsKey, DecryptText<0xF5657D1F3DE5CDC7ULL>(guidDriverSource), nullptr, &type, g_guidDriver, &size); RegCloseKey(settingsKey); @@ -86,23 +92,28 @@ int ReadSetup() { type = REG_DWORD; size = sizeof(int); - const char soundModeSource[] = {'\x92', '\x80', '\x86', '\x7D', '\xD3', '\x50', '\xB2', '\x2D', '\x84', '\xCF'}; + constexpr auto soundModeSourceText = CRYPT_NAME("SOUNDMODE", 0x69FD1D9733D3CFC1ULL); + const auto& soundModeSource = soundModeSourceText.data; RegQueryValueExA(settingsKey, DecryptText<0x69FD1D9733D3CFC1ULL>(soundModeSource), nullptr, &type, reinterpret_cast(&g_soundConfiguration.mode), &size); - const char speakerTypeSource[] = {'\x1E', '\x81', '\x8E', '\x86', '\xB2', '\x32', '\x9F', '\x2B', '\x14', '\x81', '\x8E', '\xC7'}; + constexpr auto speakerTypeSourceText = CRYPT_NAME("SPEAKERTYPE", 0x7FCD77F9C7CBD14DULL); + const auto& speakerTypeSource = speakerTypeSourceText.data; RegQueryValueExA(settingsKey, DecryptText<0x7FCD77F9C7CBD14DULL>(speakerTypeSource), nullptr, &type, reinterpret_cast(&g_soundConfiguration.speakerType), &size); - const char digitalRateTypeSource[] = {'\x67', '\xCA', '\x9C', '\xCA', '\x15', '\xFC', '\x73', '\x99', '\x62', '\xD7', '\x9E', '\xD7', '\x18', '\xED', '\x7A', '\xCB'}; + constexpr auto digitalRateTypeSourceText = CRYPT_NAME("DIGITALRATETYPE", 0xCB3FBD4183DB8323ULL); + const auto& digitalRateTypeSource = digitalRateTypeSourceText.data; RegQueryValueExA(settingsKey, DecryptText<0xCB3FBD4183DB8323ULL>(digitalRateTypeSource), nullptr, &type, reinterpret_cast(&g_soundConfiguration.digitalRateType), &size); - const char digitalBitsTypeSource[] = {'\x5D', '\x24', '\x88', '\xB6', '\x09', '\x40', '\x8D', '\x3D', '\x50', '\x39', '\x9C', '\xAB', '\x04', '\x51', '\x84', '\x7F'}; + constexpr auto digitalBitsTypeSourceText = CRYPT_NAME("DIGITALBITSTYPE", 0x7FC1015DFFCF6D19ULL); + const auto& digitalBitsTypeSource = digitalBitsTypeSourceText.data; RegQueryValueExA(settingsKey, DecryptText<0x7FC1015DFFCF6D19ULL>(digitalBitsTypeSource), nullptr, &type, reinterpret_cast(&g_soundConfiguration.digitalBitsType), &size); - const char numSampleTypeSource[] = {'\x77', '\xB4', '\xE4', '\xBC', '\xA0', '\xEA', '\x03', '\x4B', '\x7C', '\xB5', '\xF0', '\xBF', '\xA4', '\xA7'}; + constexpr auto numSampleTypeSourceText = CRYPT_NAME("NUMSAMPLETYPE", 0x0753A7E1EFA9E139ULL); + const auto& numSampleTypeSource = numSampleTypeSourceText.data; if (RegQueryValueExA(settingsKey, DecryptText<0x0753A7E1EFA9E139ULL>(numSampleTypeSource), nullptr, &type, reinterpret_cast(&g_soundConfiguration.numSampleType), &size) != ERROR_SUCCESS) { g_soundConfiguration.numSampleType = 2; @@ -110,7 +121,8 @@ int ReadSetup() { type = REG_SZ; size = sizeof(g_soundConfiguration.providerName); - const char providerNameSource[] = {'\x3D', '\x0D', '\xB6', '\x65', '\xAA', '\x3F', '\x10', '\x6D', '\x23', '\x1E', '\xB4', '\x76', '\xE3'}; + constexpr auto providerNameSourceText = CRYPT_NAME("PROVIDERNAME", 0x3F557BE333F95F6DULL); + const auto& providerNameSource = providerNameSourceText.data; RegQueryValueExA(settingsKey, DecryptText<0x3F557BE333F95F6DULL>(providerNameSource), nullptr, &type, reinterpret_cast(g_soundConfiguration.providerName), &size); diff --git a/Source/Contents/Store/MCStoreInfoBackupAsyncWork.cpp b/Source/Contents/Store/MCStoreInfoBackupAsyncWork.cpp index 3e9df997b..862799584 100644 --- a/Source/Contents/Store/MCStoreInfoBackupAsyncWork.cpp +++ b/Source/Contents/Store/MCStoreInfoBackupAsyncWork.cpp @@ -7,6 +7,7 @@ #include "Utility/Cipher/XorBytes.h" #include "Utility/Text/FormatString.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include #include @@ -86,20 +87,20 @@ bool CMCStoreInfoBackupLoadAsyncWork::Execute() { StringFormat(type, sizeof(type), _TRUNCATE, "%d", this->m_type); CCURLPostHander handler(this->m_url); - const std::array aid = {0xB4, 0x6C, 0x17, 0xE9}; + constexpr std::array aid = CRYPT_NAME("AID", 0x2B8725D7E95325F5ULL); handler.AddField(DecryptName<0x2B8725D7E95325F5ULL>(aid), account, 4); - const std::array gid = {0x4A, 0x12, 0x2D, 0x83}; + constexpr std::array gid = CRYPT_NAME("GID", 0x899D11BB83695B0DULL); handler.AddField(DecryptName<0x899D11BB83695B0DULL>(gid), character, 4); - const std::array authToken = {0x2A, 0x7E, 0xD1, 0xAD, 0xD3, 0xB2, 0xC6, 0xD8, 0x05, 0x0B}; + constexpr std::array authToken = CRYPT_NAME("AuthToken", 0xBDADDD87C5A50B6BULL); handler.AddField(DecryptName<0xBDADDD87C5A50B6BULL>(authToken), this->m_token, 4); - const std::array typeName = {0xE9, 0xE4, 0x4B, 0x82, 0x0D}; + constexpr std::array typeName = CRYPT_NAME("Type", 0x7989830DE73B9DBDULL); handler.AddField(DecryptName<0x7989830DE73B9DBDULL>(typeName), type, 4); - const std::array worldName = {0xDE, 0x52, 0x1F, 0x89, 0xC3, 0x4F, 0x46, 0x42, 0xEC, 0x3D}; + constexpr std::array worldName = CRYPT_NAME("WorldName", 0x2F2701A7E56D3D89ULL); handler.AddField(DecryptName<0x2F2701A7E56D3D89ULL>(worldName), name, 4); if (handler.Perform() == 0) { this->m_response = handler.Response(); - const std::array good = {0x42, 0xFE, 0x68, 0xC7, 0xE1}; + constexpr std::array good = CRYPT_NAME("good", 0x6B3301E1A3079125ULL); AsyncDiagnostic diagnostic = Diagnostic(true, DecryptName<0x6B3301E1A3079125ULL>(good), loadSource, 115); this->m_diagnostic.MoveFrom(diagnostic); } @@ -159,26 +160,26 @@ bool CMCStoreInfoBackupSaveAsyncWork::Execute() { std::string name = CCURLMgr::GetInstance()->ToUtf8(this->m_accountName); CCURLPostHander handler(this->m_url); - const std::array aid = {0x48, 0xE0, 0x03, 0x5F}; + constexpr std::array aid = CRYPT_NAME("AID", 0xD3755DD95F47A909ULL); handler.AddField(DecryptName<0xD3755DD95F47A909ULL>(aid), account, 4); - const std::array gid = {0x2A, 0xAA, 0x01, 0xA3}; + constexpr std::array gid = CRYPT_NAME("GID", 0x31D7C1EDA345E36DULL); handler.AddField(DecryptName<0x31D7C1EDA345E36DULL>(gid), character, 4); - const std::array authToken = {0x2C, 0x16, 0x41, 0x45, 0xF1, 0x6C, 0xE4, 0xBC, 0x03, 0x63}; + constexpr std::array authToken = CRYPT_NAME("AuthToken", 0xD98F03A52D35636DULL); handler.AddField(DecryptName<0xD98F03A52D35636DULL>(authToken), this->m_token, 4); - const std::array worldName = {0x86, 0x76, 0xEF, 0xE3, 0x0F, 0xC5, 0x6E, 0x62, 0xB4, 0x19}; + constexpr std::array worldName = CRYPT_NAME("WorldName", 0x0F0F8B6B8F9D19D1ULL); handler.AddField(DecryptName<0x0F0F8B6B8F9D19D1ULL>(worldName), name, 4); - const std::array typeName = {0x01, 0x84, 0xC5, 0xBE, 0xC7}; + constexpr std::array typeName = CRYPT_NAME("Type", 0x3375B1C7DBB5FD55ULL); handler.AddField(DecryptName<0x3375B1C7DBB5FD55ULL>(typeName), type, 4); - const std::array dataName = {0x7B, 0x50, 0xB9, 0x86, 0xED}; + constexpr std::array dataName = CRYPT_NAME("data", 0x1D6D75EDE7CD311FULL); handler.AddField(DecryptName<0x1D6D75EDE7CD311FULL>(dataName), this->m_data, 4); if (handler.Perform() != 0) { - const std::array fail = {0xC7, 0x5C, 0xF6, 0xBB, 0x63}; + constexpr std::array fail = CRYPT_NAME("fail", 0x59278F63D79F3DA1ULL); AsyncDiagnostic diagnostic = Diagnostic(false, DecryptName<0x59278F63D79F3DA1ULL>(fail), saveSource, 112); this->m_diagnostic.MoveFrom(diagnostic); this->m_response = handler.Response(); } else { - const std::array good = {0xD0, 0x68, 0x38, 0xA9, 0x2B}; + constexpr std::array good = CRYPT_NAME("good", 0x812BE72BCD5707B7ULL); AsyncDiagnostic diagnostic = Diagnostic(true, DecryptName<0x812BE72BCD5707B7ULL>(good), saveSource, 122); this->m_diagnostic.MoveFrom(diagnostic); this->m_response = handler.Response(); diff --git a/Source/Contents/Tables/TipBoxTitles.cpp b/Source/Contents/Tables/TipBoxTitles.cpp index db6e65b60..89c690247 100644 --- a/Source/Contents/Tables/TipBoxTitles.cpp +++ b/Source/Contents/Tables/TipBoxTitles.cpp @@ -7,6 +7,7 @@ #include "Script/NLuaState.h" #include "Utility/Cipher/XorBytes.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" extern "C" { #include @@ -303,10 +304,12 @@ bool CTipBoxMgr::RegisterLuaFunctions() { lua_register(state.GetState(), "AddPage", AddPage); lua_register(state.GetState(), "AddIsTag", AddIsTag); - const char source[] = {'\xF4', '\xCA', '\x76', '\xBD', '\xC0', '\x0E', '\xB7', '\x7F', '\xCE', '\xC3', '\x67', '\xA6', '\xDD', '\x4D', '\x87', '\x7E', '\xC6', '\xB3'}; + constexpr auto sourceText = CRYPT_NAME("System\\tipbox.lua", 0x0BEB63A5C905B3A7ULL); + const auto& source = sourceText.data; if (luaL_loadfile(state.GetState(), DecryptName<0x0BEB63A5C905B3A7ULL>(source)) != 0) { - const char secondSource[] = {'\x9A', '\xCE', '\x56', '\xE3', '\xDE', '\x5E', '\xDF', '\x73', '\xA0', '\xC7', '\x47', '\xF8', '\xC3', '\x1D', '\xEF', '\x72', '\xAB', '\xB7'}; + constexpr auto secondSourceText = CRYPT_NAME("System\\tipbox.lub", 0x078333BB9725B7C9ULL); + const auto& secondSource = secondSourceText.data; if (luaL_loadfile(state.GetState(), DecryptName<0x078333BB9725B7C9ULL>(secondSource)) != 0) { MessageBoxA(nullptr, lua_tostring(state.GetState(), -1), "TipBox", MB_OK); diff --git a/Source/Contents/UserData/AccountLinkedUserDataLoadAsyncWork.cpp b/Source/Contents/UserData/AccountLinkedUserDataLoadAsyncWork.cpp index 720de2ffa..805277091 100644 --- a/Source/Contents/UserData/AccountLinkedUserDataLoadAsyncWork.cpp +++ b/Source/Contents/UserData/AccountLinkedUserDataLoadAsyncWork.cpp @@ -6,6 +6,7 @@ #include "Utility/Cipher/XorBytes.h" #include "Utility/Text/FormatString.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include #include @@ -76,14 +77,14 @@ bool CAccountLinkedUserDataLoadAsyncWork::Execute() { std::string name = CCURLMgr::GetInstance()->ToUtf8(this->m_accountName); CCURLPostHander handler(this->m_url); - const std::array aid = {0x56, 0xB0, 0x0B, 0xB9}; + constexpr std::array aid = CRYPT_NAME("AID", 0xC52FB5FBB94FF917ULL); handler.AddField(DecryptName<0xC52FB5FBB94FF917ULL>(aid), accountId, 4); - const std::array worldName = {0x92, 0xA2, 0xF5, 0x99, 0xC5, 0xED, 0x86, 0xFE, 0xA0, 0xCD}; + constexpr std::array worldName = CRYPT_NAME("WorldName", 0x93E7A3A1F587CDC5ULL); handler.AddField(DecryptName<0x93E7A3A1F587CDC5ULL>(worldName), name, 4); if (handler.Perform() == 0) { this->m_response = handler.Response(); - const std::array good = {0x40, 0x6E, 0x68, 0x09, 0x03}; + constexpr std::array good = CRYPT_NAME("good", 0x2FF3C5036D070127ULL); AsyncDiagnostic diagnostic = Diagnostic(true, DecryptName<0x2FF3C5036D070127ULL>(good), 92); this->m_diagnostic.MoveFrom(diagnostic); } diff --git a/Source/Security/NProtectGameGuardMgr.cpp b/Source/Security/NProtectGameGuardMgr.cpp index 0020534a7..441c255b5 100644 --- a/Source/Security/NProtectGameGuardMgr.cpp +++ b/Source/Security/NProtectGameGuardMgr.cpp @@ -8,6 +8,7 @@ #include "Utility/Text/FormatString.h" #include "Utility/Threading/NSyncObject.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include "Resource/MSGSTRINGID.h" #include @@ -124,35 +125,43 @@ std::string CNProtectGameGuardMgr::ErrorMessage() { const char* CNProtectGameGuardMgr::GameName() { switch (g_serviceType) { case 3: { - const char source[] = {'\xB3', '\xD6', '\xC4', '\x01', '\x81'}; + constexpr auto sourceText = CRYPT_NAME("ROCN", 0x7321C3814F8799E1ULL); + const auto& source = sourceText.data; return DecryptName<0x7321C3814F8799E1ULL>(source); } case 0: if (std::strstr(g_session.clientVersion, g_devClientTag) != nullptr) { - const char source[] = {'\x1D', '\xC0', '\xA8', '\x5B', '\x02', '\xA5', '\x2E', '\x12', '\x04', '\xF3', '\xCF'}; + constexpr auto sourceText = CRYPT_NAME("RagnarokKR", 0x7941D76335CFA14FULL); + const auto& source = sourceText.data; return DecryptName<0x7941D76335CFA14FULL>(source); } else { - const char source[] = {'\x2D', '\xB4', '\xC8', '\x35', '\x0A', '\xC3', '\x7A', '\x64', '\x34', '\x87', '\xAF'}; + constexpr auto sourceText = CRYPT_NAME("RagnarokKR", 0x0F15B16B5BAFD57FULL); + const auto& source = sourceText.data; return DecryptName<0x0F15B16B5BAFD57FULL>(source); } case 2: { - const char source[] = {'\x71', '\x90', '\xB0', '\x79', '\xB6', '\x3B', '\x8C', '\x16', '\x69', '\xA1', '\xD7'}; + constexpr auto sourceText = CRYPT_NAME("RagnarokJP", 0x7DE349D717D7F123ULL); + const auto& source = sourceText.data; return DecryptName<0x7DE349D717D7F123ULL>(source); } case 12: { - const char source[] = {'\x0F', '\x6C', '\x2E', '\xE7', '\xC0', '\x0F', '\x82', '\xF4', '\x1F', '\x5F', '\x49'}; + constexpr auto sourceText = CRYPT_NAME("RagnarokBR", 0x9FED7DA189490D5DULL); + const auto& source = sourceText.data; return DecryptName<0x9FED7DA189490D5DULL>(source); } case 7: { - const char source[] = {'\x37', '\x34', '\xAE', '\x11', '\x6C', '\x9D', '\x40', '\x2E', '\x35', '\x1D', '\xC9'}; + constexpr auto sourceText = CRYPT_NAME("RagnarokPH", 0x452FEF0D7FC95565ULL); + const auto& source = sourceText.data; return DecryptName<0x452FEF0D7FC95565ULL>(source); } case 4: { - const char source[] = {'\x3F', '\x54', '\xF3', '\x46', '\x77'}; + constexpr auto sourceText = CRYPT_NAME("ROTW", 0xF3CB6F7711A71B6DULL); + const auto& source = sourceText.data; return DecryptName<0xF3CB6F7711A71B6DULL>(source); } default: { - const char source[] = {'\xE1', '\x06', '\x3E', '\xE1', '\xBE', '\x55', '\xF4', '\xE8', '\xB3'}; + constexpr auto sourceText = CRYPT_NAME("Ragnarok", 0x839B27DF8F5967B3ULL); + const auto& source = sourceText.data; return DecryptName<0x839B27DF8F5967B3ULL>(source); } } @@ -189,20 +198,23 @@ int __stdcall GameGuardCallback(int code, const int* packet) { switch (code) { case 0x3F3: { CNProtectGameGuardMgr* manager = g_nProtectGameGuardMgr; - const char source[] = {'\x32', '\x68', '\x05', '\x86', '\xD9', '\xC2', '\x41'}; + constexpr auto sourceText = CRYPT_NAME("%s(%d)", 0x0F41EBBDA32D1B17ULL); + const auto& source = sourceText.data; manager->SetError(g_nprotectSource, 0x136, std::string(FormatString(DecryptName<0x0F41EBBDA32D1B17ULL>(source), LookupMessage(MSI_SPEEDHACK_DETECT), code))); return 0; } case 0x3E9: case 0x3EA: { CNProtectGameGuardMgr* manager = g_nProtectGameGuardMgr; - const char source[] = {'\x98', '\x1B', '\x0A', '\x4D', '\xD8', '\x94', '\x3F', '\x05', '\xC8', '\x11', '\x48', '\x23'}; + constexpr auto sourceText = CRYPT_NAME("unknown(%d)", 0x2D51E3B7236175EDULL); + const auto& source = sourceText.data; manager->SetError(g_nprotectSource, 0x13B, std::string(FormatString(DecryptName<0x2D51E3B7236175EDULL>(source), code))); return 0; } case 0x3F6: { CNProtectGameGuardMgr* manager = g_nProtectGameGuardMgr; - const char source[] = {'\x40', '\x80', '\xFF', '\x78', '\xE9', '\x3A', '\x6F'}; + constexpr auto sourceText = CRYPT_NAME("%s(%d)", 0x176F138D5DD7F365ULL); + const auto& source = sourceText.data; manager->SetError(g_nprotectSource, 0x13F, std::string(FormatString(DecryptName<0x176F138D5DD7F365ULL>(source), LookupMessage(MSI_INIT_ERROR), code))); return 0; } @@ -214,7 +226,8 @@ int __stdcall GameGuardCallback(int code, const int* packet) { } case 0x3F7: { CNProtectGameGuardMgr* manager = g_nProtectGameGuardMgr; - const char source[] = {'\xE4', '\x34', '\xED', '\x32', '\x85', '\xB0', '\xD5'}; + constexpr auto sourceText = CRYPT_NAME("%s(%d)", 0xFBD599E117C547C1ULL); + const auto& source = sourceText.data; manager->SetError(g_nprotectSource, 0x151, std::string(FormatString(DecryptName<0xFBD599E117C547C1ULL>(source), LookupMessage(MSI_GAMEHACK_DOUBT), code))); return 0; } @@ -244,14 +257,14 @@ bool CNProtectGameGuardMgr::Initialize() { const int status = gameLib->Init(); if (status != 0x755) { char message[0x400] = {}; - const std::array bodySource = {'\x18', '\x54', '\xC2', '\xF0', '\xDA', '\xFC', '\x92', '\xBD', '\x3B', '\x15', '\xEA', '\xE7', '\xEF', '\xE6', '\x81', '\xF5', '\x7F', '\x10', '\xC3', '\xE0', '\x9D'}; + constexpr std::array bodySource = CRYPT_NAME("GameGuard Error: %lu", 0xCFF3899D95AF355FULL); StringFormat(message, sizeof(message), static_cast(-1), DecryptName<0xCFF3899D95AF355FULL>(bodySource), status); char title[0x100] = {}; - const std::array titleSource = {'\x62', '\x10', '\xC2', '\xAE', '\x4A', '\x86', '\x4C', '\x97', '\x41', '\x51', '\xEA', '\xB9', '\x7F', '\x9C', '\x5F', '\xC5', '\x1F', '\x51', '\x8A', '\xA7', '\x78', '\xF3'}; + constexpr std::array titleSource = CRYPT_NAME("GameGuard Error : %lu", 0xE52DF30DCBAF7125ULL); StringFormat(title, sizeof(title), static_cast(-1), DecryptName<0xE52DF30DCBAF7125ULL>(titleSource), status); - const std::array tagSource = {'\xF6', '\x41', '\x9F', '\xAF', '\x7A', '\x91', '\xC9', '\x08', '\xF2', '\x31'}; + constexpr std::array tagSource = CRYPT_NAME("ApplyNPGE", 0x4F99DF03C3EF31B7ULL); if (std::strstr(g_commandLine, DecryptName<0x4F99DF03C3EF31B7ULL>(tagSource)) == nullptr) { MessageBoxA(hWnd, message, title, 0); return false; diff --git a/Source/UI/CashShop/UICashShopWnd.cpp b/Source/UI/CashShop/UICashShopWnd.cpp index e2a84e744..bf39418dc 100644 --- a/Source/UI/CashShop/UICashShopWnd.cpp +++ b/Source/UI/CashShop/UICashShopWnd.cpp @@ -3,6 +3,7 @@ #include "UI/CashShop/UICashShopWnd.h" #include "UI/Window/UIEnums.h" #include "Utility/Cipher/EncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include "Client/Mode/CGameMode.h" #include "Client/Mode/CMode.h" @@ -108,11 +109,8 @@ UICashShopWnd::~UICashShopWnd() { // OFFSET: 0x007CE110 // FUNCTION: fn_09523 EncryptedName<85, 0x3B915119EFD523EFULL>& CashShopReplaceCartItemText::operator()() const { - const char source[] = {'\x5E', '\x9B', '\x15', '\x3B', '\x39', '\xE9', '\x3F', '\x86', '\x55', '\xE5', '\x7B', '\x50', '\xB8', '\xE5', '\x53', '\x1B', '\x28', '\xF2', '\xF5', '\x2E', - '\xA7', '\xE6', '\x68', '\xFB', '\x28', '\x03', '\x6B', '\x29', '\xD9', '\x9D', '\x54', '\xE0', '\x57', '\x9B', '\xF5', '\x5B', '\xFA', '\x91', '\x2A', '\x1B', - '\x53', '\xD5', '\xF5', '\x2F', '\xCF', '\xEC', '\x51', '\x8F', '\x20', '\x97', '\x0C', '\xC1', '\x39', '\x0A', '\xB4', '\x48', '\xB2', '\x03', '\x6E', '\x1C', - '\xDE', '\xE1', '\x51', '\x83', '\x58', '\xED', '\xF5', '\x5E', '\xAA', '\x92', '\x2D', '\xFC', '\x20', '\x9E', '\x16', '\x5F', '\xC3', '\xEC', '\x51', '\x8F', - '\x20', '\x92', '\x3B', '\xD0', '\x19'}; + constexpr auto sourceText = CRYPT_NAME("구입 리스트에는 한 종류의 아이템만 담을 수 있습니다. [%s] 상품으로 교체하시겠습니까?", 0x3B915119EFD523EFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } diff --git a/Source/UI/Dialogs/UIMessageBox.cpp b/Source/UI/Dialogs/UIMessageBox.cpp index 18f154c5a..748033649 100644 --- a/Source/UI/Dialogs/UIMessageBox.cpp +++ b/Source/UI/Dialogs/UIMessageBox.cpp @@ -99,6 +99,7 @@ #include "Resource/Bitmap/PaletteResource.h" #include "Contents/Jobs/JobInheritance.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include "Resource/MSGSTRINGID.h" @@ -1098,9 +1099,8 @@ void UILoginOTPWnd::OnCreate(int, int) { // FUNCTION: fn_11764 void UILoginOTPWnd::Paint() { auto& resources = ResourceMgr::Instance(); - const char source[] = {'\x11', '\xF4', '\x57', '\x1F', '\xF9', '\x49', '\x2E', '\xE2', '\x17', '\xBF', '\x57', '\x29', '\x84', '\x3D', '\xB7', '\x43', - '\xBE', '\x3C', '\xFE', '\x8B', '\x66', '\xEE', '\x85', '\x5B', '\xB4', '\x29', '\xF1', '\x84', '\x5A', '\xE2', '\xB7', '\x4D', - '\xB6', '\x04', '\xF9', '\x80', '\x4E', '\xE8', '\x9F', '\x5F', '\xE0', '\x75', '\xF5', '\x88', '\x49', '\x87'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\login_interface\\bg_newotp1.bmp", 0x2FEB8739E5975BD1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); auto* background = static_cast(resources.Load(Resolve(name.Text()))); this->DrawBitmap(0, 0, background, false); @@ -2037,7 +2037,8 @@ void UILoginOTPWnd::OnProcess() { const unsigned remaining = static_cast(60.0 - (timeGetTime() - login->otpStarted) * 0.001); UIStaticText* timer = this->timerText; - const char source[] = {'\x6A', '\x91', '\xFD', '\x51', '\x43', '\xED', '\x61', '\x5C', '\x7F', '\x93', '\xAB', '\x35'}; + constexpr auto sourceText = CRYPT_NAME("%02d : %02d", 0x7941D76335CFA14FULL); + const auto& source = sourceText.data; thread_local EncryptedName format(source); timer->SetText(FormatOwnedString(format.Text(), remaining / 60, remaining % 60).c_str(), 0); this->Invalidate(); @@ -3289,11 +3290,8 @@ UIPetInfoWnd::~UIPetInfoWnd() { // OFFSET: 0x008A5CC0 // FUNCTION: fn_11686 EncryptedName<80, 0xF3CB6F7711A71B6DULL>& HangameJoinUrl::operator()() const { - const char source[] = {'\x05', '\x6F', '\xD3', '\x61', '\x4D', '\x40', '\xE4', '\x81', '\x02', '\x35', '\xCF', '\x70', '\x19', '\x08', '\xAA', '\x9E', - '\x08', '\x35', '\xC4', '\x7E', '\x1A', '\x40', '\xA7', '\x9C', '\x0A', '\x72', '\xC9', '\x3E', '\x1B', '\x00', '\xAC', '\x9A', - '\x03', '\x68', '\xD3', '\x74', '\x07', '\x41', '\xAA', '\x80', '\x1D', '\x24', '\xD7', '\x63', '\x12', '\x19', '\x9E', '\xA1', - '\x21', '\x26', '\x88', '\x5F', '\x3F', '\x21', '\x88', '\x9C', '\x00', '\x76', '\xC8', '\x7F', '\x58', '\x21', '\x83', '\xBD', - '\x42', '\x56', '\xC2', '\x7C', '\x15', '\x0A', '\xB9', '\x99', '\x02', '\x72', '\xC9', '\x3F', '\x16', '\x1C', '\xBB', '\xF3'}; + constexpr auto sourceText = CRYPT_NAME("http://ro.hangame.com/login/loginstep.asp?prevURL=/NHNCommon/NHN/Memberjoin.asp", 0xF3CB6F7711A71B6DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -3429,7 +3427,8 @@ int UILoginOTPWnd::SendMsg(UIWindow* sender, int message, std::intptr_t a, std:: g_windowMgr.Schedule(this); } } else if (a == 382) { - const char soundSource[] = {'\x58', '\x6F', '\x41', '\xFF', '\x3D', '\x11', '\x99', '\xDD', '\xCF', '\xEE', '\xE6', '\x39', '\x81'}; + constexpr auto soundSourceText = CRYPT_NAME("버튼소리.wav", 0x7321C3814F8799E1ULL); + const auto& soundSource = soundSourceText.data; thread_local EncryptedName soundName(soundSource); g_soundMgr->PlayWave(soundName.Text(), 0.0f, 0.0f, 0.0f, 250, 40, 1.0f, 0); if (this->authCodeEdit->Length() == 8) { diff --git a/Source/UI/Items/UIEquipmentPropertiesWnd.cpp b/Source/UI/Items/UIEquipmentPropertiesWnd.cpp index 798e2049e..2149aa4ea 100644 --- a/Source/UI/Items/UIEquipmentPropertiesWnd.cpp +++ b/Source/UI/Items/UIEquipmentPropertiesWnd.cpp @@ -2,6 +2,7 @@ #include "UI/Window/WindowId.h" #include "UI/Items/UIEquipmentPropertiesWnd.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include "Contents/Tables/MessageTable.h" #include "Contents/Messenger/ClientMessenger.h" @@ -279,33 +280,19 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { { CUITitleBar* titleBar = this->titleBar; const std::string right([] { - const std::array source = { - '\x47', '\xBC', '\xAB', '\x85', '\xF9', '\xC7', '\xB4', '\xC6', '\x41', '\xF7', '\xAB', '\xB3', '\x84', '\xB3', '\x2D', '\x69', - '\xE6', '\x60', '\x02', '\x1C', '\x66', '\x60', '\x1F', '\x7F', '\xE2', '\x61', '\x0D', '\x1E', '\x5A', '\x6C', '\x2D', '\x7F', - '\xEE', '\x67', '\x07', '\x1A', '\x5B', '\x68', '\x03', '\x54', '\xF5', '\x7A', '\x0C', '\x17', '\x4D', '\x27', '\x13', '\x66', - '\xF7', '\x13' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\basic_interface\\titlebar_right.bmp", 0x0B7109397F6B1387ULL); // GLOBAL: gl_25321 thread_local EncryptedName name(source); return name.Text(); }()); const std::string middle([] { - const std::array source = { - '\x65', '\x32', '\xAD', '\x03', '\xA3', '\xE9', '\xB2', '\xCE', '\x63', '\x79', '\xAD', '\x35', '\xDE', '\x9D', '\x2B', '\x61', - '\xC4', '\xEE', '\x04', '\x9A', '\x3C', '\x4E', '\x19', '\x77', '\xC0', '\xEF', '\x0B', '\x98', '\x00', '\x42', '\x2B', '\x77', - '\xCC', '\xE9', '\x01', '\x9C', '\x01', '\x46', '\x05', '\x5C', '\xC8', '\xF4', '\x09', '\xD7', '\x01', '\x4A', '\x07', '\x03' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\basic_interface\\titlebar_mid.bmp", 0x03772763F96D9DA5ULL); // GLOBAL: gl_25322 thread_local EncryptedName name(source); return name.Text(); }()); const std::string left([] { - const std::array source = { - '\xAD', '\x14', '\x55', '\xD7', '\x53', '\x35', '\xD2', '\x08', '\xAB', '\x5F', '\x55', '\xE1', '\x2E', '\x41', '\x4B', '\xA7', - '\x0C', '\xC8', '\xFC', '\x4E', '\xCC', '\x92', '\x79', '\xB1', '\x08', '\xC9', '\xF3', '\x4C', '\xF0', '\x9E', '\x4B', '\xB1', - '\x04', '\xCF', '\xF9', '\x48', '\xF1', '\x9A', '\x65', '\x9A', '\x01', '\xDE', '\xF3', '\x59', '\xBD', '\x99', '\x7A', '\xB5', - '\x6D' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\basic_interface\\titlebar_left.bmp", 0xC517FB932D95BB6DULL); // GLOBAL: gl_25323 thread_local EncryptedName name(source); return name.Text(); @@ -322,7 +309,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { title->SetAlign(0, 6); { title->SetFont(std::string([] { - const std::array source = {'\x20', '\xDE', '\xFD', '\xCC', '\xCC', '\x3F'}; + constexpr std::array source = CRYPT_NAME("Gulim", 0x13E33FA1A591AB67ULL); // GLOBAL: gl_25324 thread_local EncryptedName name(source); return name.Text(); @@ -345,41 +332,25 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { baseButton->Invalidate(); { const std::string inactive([] { - const std::array source = { - '\xC9', '\x88', '\xEF', '\x41', '\x7D', '\x93', '\xB8', '\x14', '\xCF', '\xC3', '\xEF', '\x77', '\x00', '\xE7', '\x21', '\xBB', - '\x68', '\x54', '\x46', '\xD8', '\xE2', '\x34', '\x13', '\xAD', '\x6C', '\x55', '\x49', '\xDA', '\xDE', '\x38', '\x21', '\xAA', - '\x70', '\x54', '\x70', '\xD9', '\xDC', '\x2E', '\x18', '\x86', '\x66', '\x41', '\x49', '\x95', '\xDF', '\x30', '\x0D', '\xD9' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\basic_interface\\sys_base_off.bmp", 0xD97D5DBDBB2F2709ULL); // GLOBAL: gl_25325 thread_local EncryptedName name(source); return name.Text(); }()); const std::string pressed([] { - const std::array source = { - '\xAF', '\xD2', '\x3B', '\xD9', '\xB1', '\xC9', '\x4A', '\x00', '\xA9', '\x99', '\x3B', '\xEF', '\xCC', '\xBD', '\xD3', '\xAF', - '\x0E', '\x0E', '\x92', '\x40', '\x2E', '\x6E', '\xE1', '\xB9', '\x0A', '\x0F', '\x9D', '\x42', '\x12', '\x62', '\xD3', '\xBE', - '\x16', '\x0E', '\xA4', '\x41', '\x10', '\x74', '\xEA', '\x92', '\x00', '\x13', '\xD5', '\x41', '\x1C', '\x77', '\x8F' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\basic_interface\\sys_base_on.bmp", 0xCD8F077123FB7D6FULL); // GLOBAL: gl_25326 thread_local EncryptedName name(source); return name.Text(); }()); const std::string hover([] { - const std::array source = { - '\x83', '\x86', '\x93', '\xDD', '\x15', '\x71', '\x8C', '\x54', '\x85', '\xCD', '\x93', '\xEB', '\x68', '\x05', '\x15', '\xFB', - '\x22', '\x5A', '\x3A', '\x44', '\x8A', '\xD6', '\x27', '\xED', '\x26', '\x5B', '\x35', '\x46', '\xB6', '\xDA', '\x15', '\xEA', - '\x3A', '\x5A', '\x0C', '\x45', '\xB4', '\xCC', '\x2C', '\xC6', '\x2C', '\x47', '\x7D', '\x45', '\xB8', '\xCF', '\x49' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\basic_interface\\sys_base_on.bmp", 0x9949BFD527532943ULL); // GLOBAL: gl_25327 thread_local EncryptedName name(source); return name.Text(); }()); const std::string normal([] { - const std::array source = { - '\xF7', '\xE8', '\x6D', '\xC3', '\x7F', '\x2B', '\x6C', '\xDA', '\xF1', '\xA3', '\x6D', '\xF5', '\x02', '\x5F', '\xF5', '\x75', - '\x56', '\x34', '\xC4', '\x5A', '\xE0', '\x8C', '\xC7', '\x63', '\x52', '\x35', '\xCB', '\x58', '\xDC', '\x80', '\xF5', '\x64', - '\x4E', '\x34', '\xF2', '\x5B', '\xDE', '\x96', '\xCC', '\x48', '\x58', '\x21', '\xCB', '\x17', '\xDD', '\x88', '\xD9', '\x17' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\basic_interface\\sys_base_off.bmp", 0x17A9E5BF39AD4737ULL); // GLOBAL: gl_25328 thread_local EncryptedName name(source); return name.Text(); @@ -396,43 +367,25 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { closeButton->Invalidate(); { const std::string inactive([] { - const std::array source = { - '\x21', '\xD4', '\x39', '\x2D', '\x15', '\xDD', '\xFC', '\x10', '\x27', '\x9F', '\x39', '\x1B', '\x68', '\xA9', '\x65', '\xBF', - '\x80', '\x08', '\x90', '\xB4', '\x8A', '\x7A', '\x57', '\xA9', '\x84', '\x09', '\x9F', '\xB6', '\xB6', '\x76', '\x65', '\xAE', - '\x98', '\x08', '\xA6', '\xB4', '\xB9', '\x7C', '\x4A', '\xB8', '\xBE', '\x14', '\x9F', '\xB1', '\xFB', '\x71', '\x54', '\xAD', - '\xE1' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\basic_interface\\sys_close_off.bmp", 0xDD3913D5D7F97BE1ULL); // GLOBAL: gl_25329 thread_local EncryptedName name(source); return name.Text(); }()); const std::string pressed([] { - const std::array source = { - '\x5F', '\x6A', '\xAD', '\x51', '\x17', '\xE7', '\x38', '\x68', '\x59', '\x21', '\xAD', '\x67', '\x6A', '\x93', '\xA1', '\xC7', - '\xFE', '\xB6', '\x04', '\xC8', '\x88', '\x40', '\x93', '\xD1', '\xFA', '\xB7', '\x0B', '\xCA', '\xB4', '\x4C', '\xA1', '\xD6', - '\xE6', '\xB6', '\x32', '\xC8', '\xBB', '\x46', '\x8E', '\xC0', '\xC0', '\xAA', '\x03', '\x85', '\xB5', '\x44', '\x8D', '\xA5' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\basic_interface\\sys_close_on.bmp", 0xA5FD29D7AB6DC59FULL); // GLOBAL: gl_25331 thread_local EncryptedName name(source); return name.Text(); }()); const std::string hover([] { - const std::array source = { - '\x31', '\x68', '\xF9', '\xF3', '\xD7', '\xB7', '\x8A', '\x3C', '\x37', '\x23', '\xF9', '\xC5', '\xAA', '\xC3', '\x13', '\x93', - '\x90', '\xB4', '\x50', '\x6A', '\x48', '\x10', '\x21', '\x85', '\x94', '\xB5', '\x5F', '\x68', '\x74', '\x1C', '\x13', '\x82', - '\x88', '\xB4', '\x66', '\x6A', '\x7B', '\x16', '\x3C', '\x94', '\xAE', '\xA8', '\x57', '\x27', '\x75', '\x14', '\x3F', '\xF1' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\basic_interface\\sys_close_on.bmp", 0xF14F79170939C7F1ULL); // GLOBAL: gl_25333 thread_local EncryptedName name(source); return name.Text(); }()); const std::string normal([] { - const std::array source = { - '\xBF', '\xBC', '\x1F', '\x2B', '\x45', '\xA9', '\xBC', '\x20', '\xB9', '\xF7', '\x1F', '\x1D', '\x38', '\xDD', '\x25', '\x8F', - '\x1E', '\x60', '\xB6', '\xB2', '\xDA', '\x0E', '\x17', '\x99', '\x1A', '\x61', '\xB9', '\xB0', '\xE6', '\x02', '\x25', '\x9E', - '\x06', '\x60', '\x80', '\xB2', '\xE9', '\x08', '\x0A', '\x88', '\x20', '\x7C', '\xB9', '\xB7', '\xAB', '\x05', '\x14', '\x9D', - '\x7F' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\basic_interface\\sys_close_off.bmp", 0xED796785D1DF137FULL); // GLOBAL: gl_25335 thread_local EncryptedName name(source); return name.Text(); @@ -458,19 +411,13 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { { auto* list = this->list; const std::string down([] { - const std::array source = { - '\x7D', '\x12', '\x2D', '\xCD', '\x7B', '\x71', '\x2A', '\x4E', '\x7B', '\x59', '\x2D', '\xFB', '\x06', '\x05', '\xB3', '\xF0', - '\xDE', '\xCF', '\x82', '\x5B', '\xD7', '\x8F', '\x8B', '\xEC', '\xCA', '\xD3', '\xC3', '\x55', '\xD6', '\xCF', '\xEF' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\scroll0down.bmp", 0x83EFBFBB37EDBDBDULL); // GLOBAL: gl_25336 thread_local EncryptedName name(source); return name.Text(); }()); const std::string up([] { - const std::array source = { - '\x5B', '\xF8', '\xC3', '\x63', '\xA7', '\xCB', '\xC0', '\xC8', '\x5D', '\xB3', '\xC3', '\x55', '\xDA', '\xBF', '\x59', '\x76', - '\xF8', '\x25', '\x6C', '\xF5', '\x0B', '\x35', '\x70', '\x75', '\xB5', '\x35', '\x6E', '\xE9', '\x67' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\scroll0up.bmp", 0x050505679903579BULL); // GLOBAL: gl_25337 thread_local EncryptedName name(source); return name.Text(); @@ -480,10 +427,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { { auto* list = this->list; const std::string background([] { - const std::array source = { - '\x67', '\x5A', '\xBF', '\xC3', '\xF1', '\x85', '\xEE', '\x72', '\x61', '\x11', '\xBF', '\xF5', '\x8C', '\xF1', '\x77', '\xCC', - '\xC4', '\x87', '\x10', '\x55', '\x5D', '\x7B', '\x46', '\xD6', '\xC3', '\xDB', '\x1D', '\x54', '\x41', '\x4B' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\scroll0mid.bmp", 0xBF2B4B31397FF5A7ULL); // GLOBAL: gl_25338 thread_local EncryptedName name(source); return name.Text(); @@ -493,31 +437,19 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { { auto* list = this->list; const std::string bottom([] { - const std::array source = { - '\xBF', '\xBA', '\x4D', '\xEB', '\xF7', '\xC1', '\x4E', '\xE2', '\xB9', '\xF1', '\x4D', '\xDD', '\x8A', '\xB5', '\xD7', '\x5C', - '\x1C', '\x67', '\xE2', '\x7D', '\x5B', '\x3F', '\xE9', '\x4E', '\x0D', '\x4A', '\xE9', '\x7E', '\x40', '\x61', '\xA5', '\x4D', - '\x12', '\x65', '\x8D' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\scroll0bar_down.bmp", 0x2F8B0F37118D157FULL); // GLOBAL: gl_25339 thread_local EncryptedName name(source); return name.Text(); }()); const std::string middle([] { - const std::array source = { - '\x4F', '\x36', '\x2B', '\xF7', '\x75', '\xB1', '\x3A', '\xF4', '\x49', '\x7D', '\x2B', '\xC1', '\x08', '\xC5', '\xA3', '\x4A', - '\xEC', '\xEB', '\x84', '\x61', '\xD9', '\x4F', '\x9D', '\x58', '\xFD', '\xC6', '\x86', '\x64', '\xD1', '\x51', '\x9D', '\x54', - '\xFF', '\x99' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\scroll0bar_mid.bmp", 0x39FF7FB50DEB998FULL); // GLOBAL: gl_25340 thread_local EncryptedName name(source); return name.Text(); }()); const std::string top([] { - const std::array source = { - '\x57', '\x5E', '\x21', '\x27', '\x11', '\x5D', '\x2C', '\xE2', '\x51', '\x15', '\x21', '\x11', '\x6C', '\x29', '\xB5', '\x5C', - '\xF4', '\x83', '\x8E', '\xB1', '\xBD', '\xA3', '\x8B', '\x4E', '\xE5', '\xAE', '\x94', '\xAD', '\xFF', '\xF1', '\x84', '\x5F', - '\x97' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\scroll0bar_up.bmp", 0x2FE993D1DDE1F197ULL); // GLOBAL: gl_25341 thread_local EncryptedName name(source); return name.Text(); @@ -546,7 +478,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { allButton->SetId(0); { const std::string label([] { - const std::array source = {'\x0D', '\x0D', '\x5A', '\x09', '\x8D'}; + constexpr std::array source = CRYPT_NAME("전체", 0xAD075B8DB599F1CDULL); // GLOBAL: gl_25342 thread_local EncryptedName name(source); return name.Text(); @@ -557,7 +489,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { allButton->SetAlign(6, 6); { const std::string font([] { - const std::array source = {'\xBA', '\xCC', '\xD7', '\x48', '\xF2', '\xFD'}; + constexpr std::array source = CRYPT_NAME("Gulim", 0x4941FD9F21BBB9FDULL); // GLOBAL: gl_25343 thread_local EncryptedName name(source); return name.Text(); @@ -582,7 +514,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { statButton->SetId(1); { const std::string label([] { - const std::array source = {'\xC8', '\x77', '\x28', '\x95', '\x6B'}; + constexpr std::array source = CRYPT_NAME("스탯", 0x35E5656B5DEDCD75ULL); // GLOBAL: gl_25344 thread_local EncryptedName name(source); return name.Text(); @@ -593,7 +525,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { statButton->SetAlign(6, 6); { const std::string font([] { - const std::array source = {'\x2C', '\xCC', '\xAB', '\x66', '\x0A', '\x8F'}; + constexpr std::array source = CRYPT_NAME("Gulim", 0xB7FD8F670FC7B96BULL); // GLOBAL: gl_25345 thread_local EncryptedName name(source); return name.Text(); @@ -618,7 +550,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { abilityButton->SetId(2); { const std::string label([] { - const std::array source = {'\x43', '\x39', '\xF7', '\x5D', '\xB5'}; + constexpr std::array source = CRYPT_NAME("어빌", 0xE7978FB5A94DD7FDULL); // GLOBAL: gl_25346 thread_local EncryptedName name(source); return name.Text(); @@ -629,7 +561,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { abilityButton->SetAlign(6, 6); { const std::string font([] { - const std::array source = {'\x8E', '\x66', '\x95', '\x1A', '\x94', '\xD9'}; + constexpr std::array source = CRYPT_NAME("Gulim", 0x7115D9F973F913C9ULL); // GLOBAL: gl_25347 thread_local EncryptedName name(source); return name.Text(); @@ -654,7 +586,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { battleButton->SetId(3); { const std::string label([] { - const std::array source = {'\xA3', '\x09', '\x24', '\x8A', '\x3B'}; + constexpr std::array source = CRYPT_NAME("전투", 0xCB1D253B7FE1F563ULL); // GLOBAL: gl_25348 thread_local EncryptedName name(source); return name.Text(); @@ -665,7 +597,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { battleButton->SetAlign(6, 6); { const std::string font([] { - const std::array source = {'\x08', '\x12', '\x81', '\xEC', '\x64', '\x37'}; + constexpr std::array source = CRYPT_NAME("Gulim", 0x793F370985ED674FULL); // GLOBAL: gl_25349 thread_local EncryptedName name(source); return name.Text(); @@ -690,7 +622,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { elementButton->SetId(4); { const std::string label([] { - const std::array source = {'\xA1', '\xD6', '\x2F', '\x93', '\x71'}; + constexpr std::array source = CRYPT_NAME("속성", 0xE55723712993051DULL); // GLOBAL: gl_25350 thread_local EncryptedName name(source); return name.Text(); @@ -701,7 +633,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { elementButton->SetAlign(6, 6); { const std::string font([] { - const std::array source = {'\x64', '\x84', '\xBB', '\x7E', '\xBA', '\x49'}; + constexpr std::array source = CRYPT_NAME("Gulim", 0x7DE349D717D7F123ULL); // GLOBAL: gl_25351 thread_local EncryptedName name(source); return name.Text(); @@ -726,7 +658,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { raceButton->SetId(5); { const std::string label([] { - const std::array source = {'\xBE', '\x6B', '\x6E', '\xEC', '\x6B'}; + constexpr std::array source = CRYPT_NAME("종족", 0x0F15B16B5BAFD57FULL); // GLOBAL: gl_25352 thread_local EncryptedName name(source); return name.Text(); @@ -737,7 +669,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { raceButton->SetAlign(6, 6); { const std::string font([] { - const std::array source = {'\x08', '\xD4', '\xA3', '\x5C', '\x0E', '\xD7'}; + constexpr std::array source = CRYPT_NAME("Gulim", 0x7941D76335CFA14FULL); // GLOBAL: gl_25353 thread_local EncryptedName name(source); return name.Text(); @@ -762,7 +694,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { skillButton->SetId(6); { const std::string label([] { - const std::array source = {'\x5C', '\x23', '\x42', '\xFC', '\x81'}; + constexpr std::array source = CRYPT_NAME("스킬", 0x7321C3814F8799E1ULL); // GLOBAL: gl_25354 thread_local EncryptedName name(source); return name.Text(); @@ -773,7 +705,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { skillButton->SetAlign(6, 6); { const std::string font([] { - const std::array source = {'\xF4', '\x12', '\x35', '\xE6', '\xB2', '\x27'}; + constexpr std::array source = CRYPT_NAME("Gulim", 0x839B27DF8F5967B3ULL); // GLOBAL: gl_25355 thread_local EncryptedName name(source); return name.Text(); @@ -798,7 +730,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { specialButton->SetId(7); { const std::string label([] { - const std::array source = {'\xAB', '\xB4', '\x1B', '\xE7', '\x77'}; + constexpr std::array source = CRYPT_NAME("특수", 0xF3CB6F7711A71B6DULL); // GLOBAL: gl_25356 thread_local EncryptedName name(source); return name.Text(); @@ -809,7 +741,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { specialButton->SetAlign(6, 6); { const std::string font([] { - const std::array source = {'\x22', '\x20', '\xA5', '\x16', '\x60', '\xEF'}; + constexpr std::array source = CRYPT_NAME("Gulim", 0x452FEF0D7FC95565ULL); // GLOBAL: gl_25357 thread_local EncryptedName name(source); return name.Text(); @@ -831,10 +763,7 @@ void CUIEquipmentPropertiesWnd::OnCreate(int width, int height) { { CUIResizer* resizer = this->resizer; const std::string image([] { - const std::array source = { - '\x9D', '\xA2', '\x89', '\x73', '\x61', '\xB3', '\x28', '\x52', '\x9B', '\xE9', '\x89', '\x45', '\x1C', '\xC7', '\xB1', '\xFD', - '\x29', '\x63', '\x16', '\xFB', '\xC4', '\x0E', '\x84', '\xE5', '\x38', '\x23', '\x2B', '\xE4', '\xD1', '\x7D' - }; + constexpr std::array source = CRYPT_NAME("유저인터페이스\\btn_resize.bmp", 0x9FED7DA189490D5DULL); // GLOBAL: gl_25358 thread_local EncryptedName name(source); return name.Text(); @@ -862,7 +791,8 @@ void EquipmentPropertiesWnd::CUIItemEquipmentPropertiesLine::OnCreate(int width, this->labelText->SetFitText(0); this->labelText->SetAlign(6, 0); this->labelText->SetFont(std::string([] { - const char source[] = {'\x9E', '\x8C', '\x8D', '\x8A', '\x00', '\x15'}; + constexpr auto sourceText = CRYPT_NAME("Gulim", 0x2BAD156DE3E1F9D9ULL); + const auto& source = sourceText.data; // GLOBAL: gl_25121 thread_local EncryptedName name(source); return name.Text(); @@ -881,7 +811,8 @@ void EquipmentPropertiesWnd::CUIItemEquipmentPropertiesLine::OnCreate(int width, this->valueText->SetFitText(1); this->valueText->SetAlign(0, 0); this->valueText->SetFont(std::string([] { - const char source[] = {'\x8E', '\x80', '\x33', '\xE2', '\xE2', '\xD5'}; + constexpr auto sourceText = CRYPT_NAME("Gulim", 0x23BBD58F8B5FF5C9ULL); + const auto& source = sourceText.data; // GLOBAL: gl_25122 thread_local EncryptedName name(source); return name.Text(); diff --git a/Source/UI/Login/UIWaitDBSaveWnd.cpp b/Source/UI/Login/UIWaitDBSaveWnd.cpp index 7aa1176e3..04653c1d7 100644 --- a/Source/UI/Login/UIWaitDBSaveWnd.cpp +++ b/Source/UI/Login/UIWaitDBSaveWnd.cpp @@ -1,6 +1,7 @@ #include "UI/Login/UIWaitDBSaveWnd.h" #include "UI/Window/WindowId.h" #include "Utility/Cipher/LocalEncryptedName.h" +#include "Utility/Cipher/CryptName.h" #include "Render/Textures/SpritePixels.h" #include "Resource/Bitmap/BitmapResource.h" @@ -22,16 +23,16 @@ namespace { // INLINED __forceinline const char* WaitSpriteName() { - const char spriteSource[] = {'\x1A', '\x44', '\xF0', '\x3D', '\x17', '\x01', '\xD2', '\x66', '\x3B', '\x40', '\xC5', '\x07', '\x3C', - '\x34', '\xCD', '\x68', '\x2C', '\x41', '\xF0', '\x27', '\x34', '\x6D', '\xF2', '\x77', '\x3F', '\x25'}; + constexpr auto spriteSourceText = CRYPT_NAME("WaitDBSave\\NowLoading.spr", 0x078143534999254DULL); + const auto& spriteSource = spriteSourceText.data; thread_local EncryptedName spriteName(spriteSource); return spriteName.Text(); } // INLINED __forceinline const char* WaitActionName() { - const char actionSource[] = {'\x36', '\xCE', '\xE6', '\x4D', '\xCF', '\x8B', '\xAC', '\x76', '\x17', '\xCA', '\xD3', '\x77', '\xE4', - '\xBE', '\xB3', '\x78', '\x00', '\xCB', '\xE6', '\x57', '\xEC', '\xE7', '\x9E', '\x74', '\x15', '\xAF'}; + constexpr auto actionSourceText = CRYPT_NAME("WaitDBSave\\NowLoading.act", 0x17FFC98B398FAF61ULL); + const auto& actionSource = actionSourceText.data; thread_local EncryptedName actionName(actionSource); return actionName.Text(); } @@ -78,10 +79,8 @@ void UIWaitDBSaveWnd::Paint() { this->ClearSurface(0xFFFF00FF); ResourceMgr& resources = ResourceMgr::Instance(); - const char backgroundSource[] = { - '\xF3', '\x3C', '\x8D', '\x6F', '\x5B', '\x5B', '\x9E', '\x56', '\xF5', '\x77', '\x8D', '\x59', '\x26', '\x2F', '\x07', '\xCC', - '\x52', '\xFA', '\x39', '\xD1', '\xD9', '\xC6', '\x3A', '\xED', '\x56', '\xCF', '\x21', '\xFA', '\xFA', '\xF1', '\x32', '\xF5', - '\x54', '\xBD', '\x2F', '\xF8', '\xEB', '\x95'}; + constexpr auto backgroundSourceText = CRYPT_NAME("유저인터페이스\\WaitDBSave\\loading.bmp", 0x9B5B959B954D9333ULL); + const auto& backgroundSource = backgroundSourceText.data; thread_local EncryptedName backgroundName(backgroundSource); CBitmapRes* background = static_cast(resources.Load(Resolve(backgroundName.Text()))); if (background) { diff --git a/Source/UI/Quest/UIRenewQuestUI.cpp b/Source/UI/Quest/UIRenewQuestUI.cpp index 8e418b01d..39e595d7f 100644 --- a/Source/UI/Quest/UIRenewQuestUI.cpp +++ b/Source/UI/Quest/UIRenewQuestUI.cpp @@ -20,6 +20,7 @@ #include "UI/Window/UIWindowMgr.h" #include "Utility/Cipher/XorBytes.h" #include "UI/Window/UIRegisterMgr.h" +#include "Utility/Cipher/CryptName.h" #include "Resource/MSGSTRINGID.h" #include "Network/Packets/PacketId.h" @@ -411,7 +412,8 @@ __declspec(noinline) EncryptedName<6, 0x114901C7E37F6D49ULL>& GulimFontName1() { // OFFSET: 0x00A5A620 // FUNCTION: fn_16401 __declspec(noinline) EncryptedName<48, 0x136F2F9915D1DBCFULL>& NormalOffButtonName1() { - const char source[] = {'\x0F', '\x74', '\x11', '\xEF', '\x59', '\xE1', '\xAA', '\xDE', '\x09', '\x3F', '\x11', '\xD9', '\x24', '\x95', '\x33', '\x41', '\xAA', '\xB5', '\xB4', '\x62', '\xC6', '\x7E', '\x1A', '\x76', '\xBC', '\xAF', '\x84', '\x5C', '\xC5', '\x4D', '\x1B', '\x7D', '\x90', '\xB5', '\xBE', '\x67', '\xF4', '\x4E', '\x03', '\x4C', '\xA0', '\xBD', '\xB7', '\x3B', '\xFB', '\x42', '\x1F', '\x13'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_normal_off.bmp", 0x136F2F9915D1DBCFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -419,7 +421,8 @@ __declspec(noinline) EncryptedName<48, 0x136F2F9915D1DBCFULL>& NormalOffButtonNa // OFFSET: 0x00A5A700 // FUNCTION: fn_16402 __declspec(noinline) EncryptedName<47, 0x0B23D10F2F49D72BULL>& NormalOnButtonName() { - const char source[] = {'\xEB', '\x78', '\x89', '\xD5', '\xCF', '\x1F', '\xE6', '\xC6', '\xED', '\x33', '\x89', '\xE3', '\xB2', '\x6B', '\x7F', '\x59', '\x4E', '\xB9', '\x2C', '\x58', '\x50', '\x80', '\x56', '\x6E', '\x58', '\xA3', '\x1C', '\x66', '\x53', '\xB3', '\x57', '\x65', '\x74', '\xB9', '\x26', '\x5D', '\x62', '\xB0', '\x4F', '\x54', '\x44', '\xB9', '\x67', '\x4D', '\x62', '\xA1', '\x23'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_normal_on.bmp", 0x0B23D10F2F49D72BULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -427,7 +430,8 @@ __declspec(noinline) EncryptedName<47, 0x0B23D10F2F49D72BULL>& NormalOnButtonNam // OFFSET: 0x00A5A7F0 // FUNCTION: fn_16403 __declspec(noinline) EncryptedName<48, 0x674D9F3975573D41ULL>& NormalOffButtonName2() { - const char source[] = {'\x81', '\x92', '\x97', '\x8F', '\xF9', '\x51', '\x88', '\xAA', '\x87', '\xD9', '\x97', '\xB9', '\x84', '\x25', '\x11', '\x35', '\x24', '\x53', '\x32', '\x02', '\x66', '\xCE', '\x38', '\x02', '\x32', '\x49', '\x02', '\x3C', '\x65', '\xFD', '\x39', '\x09', '\x1E', '\x53', '\x38', '\x07', '\x54', '\xFE', '\x21', '\x38', '\x2E', '\x5B', '\x31', '\x5B', '\x5B', '\xF2', '\x3D', '\x67'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_normal_off.bmp", 0x674D9F3975573D41ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -435,7 +439,8 @@ __declspec(noinline) EncryptedName<48, 0x674D9F3975573D41ULL>& NormalOffButtonNa // OFFSET: 0x00A5A8D0 // FUNCTION: fn_16404 __declspec(noinline) EncryptedName<48, 0x6BDF334F2BFDAD51ULL>& NormalOffButtonName3() { - const char source[] = {'\x91', '\x02', '\x3D', '\xD1', '\x8F', '\xFD', '\x1A', '\xA6', '\x97', '\x49', '\x3D', '\xE7', '\xF2', '\x89', '\x83', '\x39', '\x34', '\xC3', '\x98', '\x5C', '\x10', '\x62', '\xAA', '\x0E', '\x22', '\xD9', '\xA8', '\x62', '\x13', '\x51', '\xAB', '\x05', '\x0E', '\xC3', '\x92', '\x59', '\x22', '\x52', '\xB3', '\x34', '\x3E', '\xCB', '\x9B', '\x05', '\x2D', '\x5E', '\xAF', '\x6B'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_normal_off.bmp", 0x6BDF334F2BFDAD51ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -451,7 +456,8 @@ __declspec(noinline) EncryptedName<6, 0xB7AFBD2FD9FD7501ULL>& GulimFontName2() { // OFFSET: 0x00A5AA80 // FUNCTION: fn_16406 __declspec(noinline) EncryptedName<45, 0x79E915E9AF6F55DDULL>& SubOffButtonName1() { - const char source[] = {'\x1D', '\xFA', '\xAF', '\x55', '\x29', '\xDB', '\x2C', '\xB4', '\x1B', '\xB1', '\xAF', '\x63', '\x54', '\xAF', '\xB5', '\x2B', '\xB8', '\x3B', '\x0A', '\xD8', '\xB6', '\x44', '\x9C', '\x1C', '\xAE', '\x21', '\x3A', '\xE6', '\xB5', '\x77', '\x9D', '\x17', '\x82', '\x26', '\x1A', '\xCD', '\xB6', '\x7A', '\x8F', '\x1F', '\xF3', '\x37', '\x02', '\xDF', '\xE9'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_sub_off.bmp", 0x79E915E9AF6F55DDULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -459,7 +465,8 @@ __declspec(noinline) EncryptedName<45, 0x79E915E9AF6F55DDULL>& SubOffButtonName1 // OFFSET: 0x00A5AB70 // FUNCTION: fn_16407 __declspec(noinline) EncryptedName<44, 0xB3E307A5F753D5E3ULL>& SubOnButtonName() { - const char source[] = {'\x23', '\x7A', '\x93', '\x0D', '\x65', '\xC9', '\x26', '\x7E', '\x25', '\x31', '\x93', '\x3B', '\x18', '\xBD', '\xBF', '\xE1', '\x86', '\xBB', '\x36', '\x80', '\xFA', '\x56', '\x96', '\xD6', '\x90', '\xA1', '\x06', '\xBE', '\xF9', '\x65', '\x97', '\xDD', '\xBC', '\xA6', '\x26', '\x95', '\xFA', '\x68', '\x8D', '\x9D', '\x81', '\xB8', '\x23', '\xF7'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_sub_on.bmp", 0xB3E307A5F753D5E3ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -467,7 +474,8 @@ __declspec(noinline) EncryptedName<44, 0xB3E307A5F753D5E3ULL>& SubOnButtonName() // OFFSET: 0x00A5AC50 // FUNCTION: fn_16408 __declspec(noinline) EncryptedName<45, 0x192D654D29337BE5ULL>& SubOffButtonName2() { - const char source[] = {'\x25', '\xD4', '\xF3', '\xD3', '\x8D', '\xAB', '\xE8', '\xD4', '\x23', '\x9F', '\xF3', '\xE5', '\xF0', '\xDF', '\x71', '\x4B', '\x80', '\x15', '\x56', '\x5E', '\x12', '\x34', '\x58', '\x7C', '\x96', '\x0F', '\x66', '\x60', '\x11', '\x07', '\x59', '\x77', '\xBA', '\x08', '\x46', '\x4B', '\x12', '\x0A', '\x4B', '\x7F', '\xCB', '\x19', '\x5E', '\x59', '\x4D'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_sub_off.bmp", 0x192D654D29337BE5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -475,7 +483,8 @@ __declspec(noinline) EncryptedName<45, 0x192D654D29337BE5ULL>& SubOffButtonName2 // OFFSET: 0x00A5AD40 // FUNCTION: fn_16409 __declspec(noinline) EncryptedName<45, 0xF15F8785CDE369BFULL>& SubOffButtonName3() { - const char source[] = {'\x7F', '\xC6', '\x23', '\x37', '\x45', '\x49', '\x9A', '\x3C', '\x79', '\x8D', '\x23', '\x01', '\x38', '\x3D', '\x03', '\xA3', '\xDA', '\x07', '\x86', '\xBA', '\xDA', '\xD6', '\x2A', '\x94', '\xCC', '\x1D', '\xB6', '\x84', '\xD9', '\xE5', '\x2B', '\x9F', '\xE0', '\x1A', '\x96', '\xAF', '\xDA', '\xE8', '\x39', '\x97', '\x91', '\x0B', '\x8E', '\xBD', '\x85'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_sub_off.bmp", 0xF15F8785CDE369BFULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -491,7 +500,8 @@ __declspec(noinline) EncryptedName<6, 0xE33F2FF779878559ULL>& GulimFontName3() { // OFFSET: 0x00A5AF00 // FUNCTION: fn_16411 __declspec(noinline) EncryptedName<47, 0x49D33529F1556333ULL>& DailyOffButtonName1() { - const char source[] = {'\xF3', '\xCC', '\x95', '\x0B', '\xE9', '\xFB', '\x16', '\x84', '\xF5', '\x87', '\x95', '\x3D', '\x94', '\x8F', '\x8F', '\x1B', '\x56', '\x0D', '\x30', '\x86', '\x76', '\x64', '\xA6', '\x2C', '\x40', '\x17', '\x00', '\xB8', '\x75', '\x57', '\xA7', '\x27', '\x6C', '\x07', '\x34', '\x98', '\x45', '\x4C', '\x8C', '\x26', '\x55', '\x05', '\x7B', '\x93', '\x44', '\x45', '\xD3'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_daily_off.bmp", 0x49D33529F1556333ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -499,7 +509,8 @@ __declspec(noinline) EncryptedName<47, 0x49D33529F1556333ULL>& DailyOffButtonNam // OFFSET: 0x00A5AFF0 // FUNCTION: fn_16412 __declspec(noinline) EncryptedName<46, 0x792FFD1325418FB5ULL>& DailyOnButtonName() { - const char source[] = {'\x75', '\x20', '\x81', '\xDF', '\xD3', '\x33', '\xEA', '\xB4', '\x73', '\x6B', '\x81', '\xE9', '\xAE', '\x47', '\x73', '\x2B', '\xD0', '\xE1', '\x24', '\x52', '\x4C', '\xAC', '\x5A', '\x1C', '\xC6', '\xFB', '\x14', '\x6C', '\x4F', '\x9F', '\x5B', '\x17', '\xEA', '\xEB', '\x20', '\x4C', '\x7F', '\x84', '\x70', '\x16', '\xDB', '\xA1', '\x23', '\x48', '\x63', '\xFD'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_daily_on.bmp", 0x792FFD1325418FB5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -507,7 +518,8 @@ __declspec(noinline) EncryptedName<46, 0x792FFD1325418FB5ULL>& DailyOnButtonName // OFFSET: 0x00A5B0E0 // FUNCTION: fn_16413 __declspec(noinline) EncryptedName<47, 0xC5B1BBCD9BC9C997ULL>& DailyOffButtonName2() { - const char source[] = {'\x57', '\x66', '\x09', '\x61', '\x0D', '\x75', '\x74', '\x08', '\x51', '\x2D', '\x09', '\x57', '\x70', '\x01', '\xED', '\x97', '\xF2', '\xA7', '\xAC', '\xEC', '\x92', '\xEA', '\xC4', '\xA0', '\xE4', '\xBD', '\x9C', '\xD2', '\x91', '\xD9', '\xC5', '\xAB', '\xC8', '\xAD', '\xA8', '\xF2', '\xA1', '\xC2', '\xEE', '\xAA', '\xF1', '\xAF', '\xE7', '\xF9', '\xA0', '\xCB', '\xB1'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_daily_off.bmp", 0xC5B1BBCD9BC9C997ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -515,7 +527,8 @@ __declspec(noinline) EncryptedName<47, 0xC5B1BBCD9BC9C997ULL>& DailyOffButtonNam // OFFSET: 0x00A5B1D0 // FUNCTION: fn_16414 __declspec(noinline) EncryptedName<47, 0x01CB4F1DF9D3F931ULL>& DailyOffButtonName3() { - const char source[] = {'\xF1', '\x56', '\x13', '\x03', '\xDD', '\x81', '\x0E', '\xCC', '\xF7', '\x1D', '\x13', '\x35', '\xA0', '\xF5', '\x97', '\x53', '\x54', '\x97', '\xB6', '\x8E', '\x42', '\x1E', '\xBE', '\x64', '\x42', '\x8D', '\x86', '\xB0', '\x41', '\x2D', '\xBF', '\x6F', '\x6E', '\x9D', '\xB2', '\x90', '\x71', '\x36', '\x94', '\x6E', '\x57', '\x9F', '\xFD', '\x9B', '\x70', '\x3F', '\xCB'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_daily_off.bmp", 0x01CB4F1DF9D3F931ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -531,7 +544,8 @@ __declspec(noinline) EncryptedName<6, 0x1767DDE18D779D8BULL>& GulimFontName4() { // OFFSET: 0x00A5B390 // FUNCTION: fn_16416 __declspec(noinline) EncryptedName<47, 0xC1BB8111EDD183E1ULL>& EventOffButtonName1() { - const char source[] = {'\x21', '\x2C', '\x11', '\x17', '\xD1', '\x4F', '\x7E', '\x0C', '\x27', '\x67', '\x11', '\x21', '\xAC', '\x3B', '\xE7', '\x93', '\x84', '\xED', '\xB4', '\x9A', '\x4E', '\xD0', '\xCE', '\xA4', '\x92', '\xF7', '\x84', '\xA4', '\x4D', '\xE3', '\xCF', '\xAF', '\xBE', '\xE6', '\xA7', '\x88', '\x7F', '\xF5', '\xE4', '\xAE', '\x87', '\xE5', '\xFF', '\x8F', '\x7C', '\xF1', '\xBB'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_event_off.bmp", 0xC1BB8111EDD183E1ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -539,7 +553,8 @@ __declspec(noinline) EncryptedName<47, 0xC1BB8111EDD183E1ULL>& EventOffButtonNam // OFFSET: 0x00A5B480 // FUNCTION: fn_16417 __declspec(noinline) EncryptedName<46, 0x271B45771F83DD9FULL>& EventOnButtonName() { - const char source[] = {'\x5F', '\x72', '\x43', '\xE5', '\xB7', '\x8B', '\xDE', '\xEA', '\x59', '\x39', '\x43', '\xD3', '\xCA', '\xFF', '\x47', '\x75', '\xFA', '\xB3', '\xE6', '\x68', '\x28', '\x14', '\x6E', '\x42', '\xEC', '\xA9', '\xD6', '\x56', '\x2B', '\x27', '\x6F', '\x49', '\xC0', '\xB8', '\xF5', '\x7A', '\x19', '\x31', '\x44', '\x48', '\xF1', '\xF3', '\xE1', '\x72', '\x07', '\x45'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_event_on.bmp", 0x271B45771F83DD9FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -547,7 +562,8 @@ __declspec(noinline) EncryptedName<46, 0x271B45771F83DD9FULL>& EventOnButtonName // OFFSET: 0x00A5B570 // FUNCTION: fn_16418 __declspec(noinline) EncryptedName<47, 0x8783C33941E15117ULL>& EventOffButtonName2() { - const char source[] = {'\xD7', '\xFE', '\x21', '\xBB', '\xF9', '\x0D', '\x46', '\x4A', '\xD1', '\xB5', '\x21', '\x8D', '\x84', '\x79', '\xDF', '\xD5', '\x72', '\x3F', '\x84', '\x36', '\x66', '\x92', '\xF6', '\xE2', '\x64', '\x25', '\xB4', '\x08', '\x65', '\xA1', '\xF7', '\xE9', '\x48', '\x34', '\x97', '\x24', '\x57', '\xB7', '\xDC', '\xE8', '\x71', '\x37', '\xCF', '\x23', '\x54', '\xB3', '\x83'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_event_off.bmp", 0x8783C33941E15117ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -555,7 +571,8 @@ __declspec(noinline) EncryptedName<47, 0x8783C33941E15117ULL>& EventOffButtonNam // OFFSET: 0x00A5B660 // FUNCTION: fn_16419 __declspec(noinline) EncryptedName<47, 0x0B8745519B1F95D7ULL>& EventOffButtonName3() { - const char source[] = {'\x17', '\x3A', '\xDF', '\x61', '\x91', '\x8B', '\x42', '\xC6', '\x11', '\x71', '\xDF', '\x57', '\xEC', '\xFF', '\xDB', '\x59', '\xB2', '\xFB', '\x7A', '\xEC', '\x0E', '\x14', '\xF2', '\x6E', '\xA4', '\xE1', '\x4A', '\xD2', '\x0D', '\x27', '\xF3', '\x65', '\x88', '\xF0', '\x69', '\xFE', '\x3F', '\x31', '\xD8', '\x64', '\xB1', '\xF3', '\x31', '\xF9', '\x3C', '\x35', '\x87'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_event_off.bmp", 0x0B8745519B1F95D7ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -571,7 +588,8 @@ __declspec(noinline) EncryptedName<6, 0xC70319B5EB61598FULL>& GulimFontName5() { // OFFSET: 0x00A5B820 // FUNCTION: fn_16421 __declspec(noinline) EncryptedName<45, 0xFFABE3D5D1BBEF73ULL>& EtcOffButtonName1() { - const char source[] = {'\xB3', '\x40', '\x7B', '\x2B', '\x15', '\x2D', '\x6E', '\x32', '\xB5', '\x0B', '\x7B', '\x1D', '\x68', '\x59', '\xF7', '\xAD', '\x16', '\x81', '\xDE', '\xA6', '\x8A', '\xB2', '\xDE', '\x9A', '\x00', '\x9B', '\xEE', '\x98', '\x89', '\x81', '\xDF', '\x91', '\x2C', '\x8A', '\xCF', '\xB2', '\x8A', '\x8C', '\xCD', '\x99', '\x5D', '\x8D', '\xD6', '\xA1', '\xD5'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_etc_off.bmp", 0xFFABE3D5D1BBEF73ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -579,7 +597,8 @@ __declspec(noinline) EncryptedName<45, 0xFFABE3D5D1BBEF73ULL>& EtcOffButtonName1 // OFFSET: 0x00A5B910 // FUNCTION: fn_16422 __declspec(noinline) EncryptedName<44, 0xA597A7E7492B39D5ULL>& EtcOnButtonName() { - const char source[] = {'\x15', '\x96', '\xEB', '\xB3', '\x27', '\x69', '\x52', '\x68', '\x13', '\xDD', '\xEB', '\x85', '\x5A', '\x1D', '\xCB', '\xF7', '\xB0', '\x57', '\x4E', '\x3E', '\xB8', '\xF6', '\xE2', '\xC0', '\xA6', '\x4D', '\x7E', '\x00', '\xBB', '\xC5', '\xE3', '\xCB', '\x8A', '\x5C', '\x5F', '\x2A', '\xB8', '\xC8', '\xF9', '\x8B', '\xB7', '\x54', '\x5B', '\x49'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_etc_on.bmp", 0xA597A7E7492B39D5ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -587,7 +606,8 @@ __declspec(noinline) EncryptedName<44, 0xA597A7E7492B39D5ULL>& EtcOnButtonName() // OFFSET: 0x00A5B9F0 // FUNCTION: fn_16423 __declspec(noinline) EncryptedName<45, 0xD5A78DB38D8DAFABULL>& EtcOffButtonName2() { - const char source[] = {'\x6B', '\x00', '\x4D', '\x77', '\x73', '\x43', '\x62', '\x18', '\x6D', '\x4B', '\x4D', '\x41', '\x0E', '\x37', '\xFB', '\x87', '\xCE', '\xC1', '\xE8', '\xFA', '\xEC', '\xDC', '\xD2', '\xB0', '\xD8', '\xDB', '\xD8', '\xC4', '\xEF', '\xEF', '\xD3', '\xBB', '\xF4', '\xCA', '\xF9', '\xEE', '\xEC', '\xE2', '\xC1', '\xB3', '\x85', '\xCD', '\xE0', '\xFD', '\xB3'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_etc_off.bmp", 0xD5A78DB38D8DAFABULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -595,7 +615,8 @@ __declspec(noinline) EncryptedName<45, 0xD5A78DB38D8DAFABULL>& EtcOffButtonName2 // OFFSET: 0x00A5BAE0 // FUNCTION: fn_16424 __declspec(noinline) EncryptedName<45, 0x0399459DAF454F0FULL>& EtcOffButtonName3() { - const char source[] = {'\xCF', '\xE0', '\x85', '\x55', '\x5D', '\x8B', '\x5C', '\xCE', '\xC9', '\xAB', '\x85', '\x63', '\x20', '\xFF', '\xC5', '\x51', '\x6A', '\x21', '\x20', '\xD8', '\xC2', '\x14', '\xEC', '\x66', '\x7C', '\x3B', '\x10', '\xE6', '\xC1', '\x27', '\xED', '\x6D', '\x50', '\x2A', '\x31', '\xCC', '\xC2', '\x2A', '\xFF', '\x65', '\x21', '\x2D', '\x28', '\xDF', '\x9D'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_etc_off.bmp", 0x0399459DAF454F0FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -603,7 +624,8 @@ __declspec(noinline) EncryptedName<45, 0x0399459DAF454F0FULL>& EtcOffButtonName3 // OFFSET: 0x00A5BBD0 // FUNCTION: fn_16425 __declspec(noinline) EncryptedName<51, 0xAD6153019F93A527ULL>& SearchNormalButtonName() { - const char source[] = {'\xE7', '\x0A', '\x53', '\x65', '\xC1', '\x9D', '\xA4', '\x60', '\xE1', '\x41', '\x53', '\x53', '\xBC', '\xE9', '\x3D', '\xFF', '\x42', '\xCB', '\xF6', '\xE8', '\x5E', '\x02', '\x14', '\xC8', '\x54', '\xD1', '\xC6', '\xD6', '\x5D', '\x31', '\x15', '\xC3', '\x78', '\xD6', '\xF6', '\xFE', '\x73', '\x30', '\x09', '\xF2', '\x49', '\xCA', '\xE1', '\xF2', '\x60', '\x3F', '\x4F', '\xCF', '\x4A', '\xD5', '\x93'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_search_normal.bmp", 0xAD6153019F93A527ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -611,7 +633,8 @@ __declspec(noinline) EncryptedName<51, 0xAD6153019F93A527ULL>& SearchNormalButto // OFFSET: 0x00A5BCB0 // FUNCTION: fn_16426 __declspec(noinline) EncryptedName<50, 0x85E1F5A7A5755B7FULL>& SearchPressButtonName() { - const char source[] = {'\xBF', '\xF4', '\xB5', '\x5F', '\x67', '\x3B', '\x24', '\x48', '\xB9', '\xBF', '\xB5', '\x69', '\x1A', '\x4F', '\xBD', '\xD7', '\x1A', '\x35', '\x10', '\xD2', '\xF8', '\xA4', '\x94', '\xE0', '\x0C', '\x2F', '\x20', '\xEC', '\xFB', '\x97', '\x95', '\xEB', '\x20', '\x28', '\x10', '\xC4', '\xD5', '\x96', '\x89', '\xDA', '\x0F', '\x29', '\x10', '\xD6', '\xD4', '\xDB', '\x83', '\xE8', '\x0F', '\x5B'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_search_press.bmp", 0x85E1F5A7A5755B7FULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -619,7 +642,8 @@ __declspec(noinline) EncryptedName<50, 0x85E1F5A7A5755B7FULL>& SearchPressButton // OFFSET: 0x00A5BD90 // FUNCTION: fn_16427 __declspec(noinline) EncryptedName<49, 0x659975C121557D3DULL>& SearchOverButtonName() { - const char source[] = {'\xFD', '\xD2', '\x95', '\xDB', '\x01', '\xBB', '\x5C', '\xA8', '\xFB', '\x99', '\x95', '\xED', '\x7C', '\xCF', '\xC5', '\x37', '\x58', '\x13', '\x30', '\x56', '\x9E', '\x24', '\xEC', '\x00', '\x4E', '\x09', '\x00', '\x68', '\x9D', '\x17', '\xED', '\x0B', '\x62', '\x0E', '\x30', '\x40', '\xB3', '\x16', '\xF1', '\x3A', '\x52', '\x0B', '\x30', '\x53', '\xEF', '\x17', '\xF4', '\x15', '\x3D'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_search_over.bmp", 0x659975C121557D3DULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -627,7 +651,8 @@ __declspec(noinline) EncryptedName<49, 0x659975C121557D3DULL>& SearchOverButtonN // OFFSET: 0x00A5BE70 // FUNCTION: fn_16428 __declspec(noinline) EncryptedName<52, 0xBFF5C517A1A77F59ULL>& SearchDisableButtonName() { - const char source[] = {'\x99', '\xD0', '\x67', '\x5B', '\xD7', '\x0B', '\x30', '\x72', '\x9F', '\x9B', '\x67', '\x6D', '\xAA', '\x7F', '\xA9', '\xED', '\x3C', '\x11', '\xC2', '\xD6', '\x48', '\x94', '\x80', '\xDA', '\x2A', '\x0B', '\xF2', '\xE8', '\x4B', '\xA7', '\x81', '\xD1', '\x06', '\x0C', '\xC2', '\xC0', '\x65', '\xA6', '\x9D', '\xE0', '\x3D', '\x16', '\xD4', '\xC0', '\x75', '\xA9', '\x90', '\x91', '\x3B', '\x12', '\xD7', '\xA1'}; + constexpr auto sourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\btn_search_disable.bmp", 0xBFF5C517A1A77F59ULL); + const auto& source = sourceText.data; thread_local EncryptedName name(source); return name; } @@ -1446,30 +1471,17 @@ void RenewQuestUI::CUIQuestList::OnCreate(int width, int height) { this->list->SetBinder([this](CUIQuestItem* item, const unsigned long& questId) { this->BindItem(item, questId); }); { CUIListBoxEx* list = this->list; - const char disabledSource[] = { - '\x09', '\x5A', '\x9F', '\x71', '\x4F', '\x1B', '\x7E', '\xEE', '\x0F', '\x11', '\x9F', '\x47', '\x32', '\x6F', '\xE7', '\x71', - '\xAC', '\x9B', '\x3A', '\xFC', '\xD0', '\x84', '\xCE', '\x46', '\xBA', '\x81', '\x0A', '\xC2', '\xD3', '\xB7', '\xDC', '\x7C', - '\xB8', '\x80', '\x3A', '\xF8', '\xFB', '\x99', '\xD2', '\x50', '\xBD', '\xDB', '\x3D', '\xE6', '\xFF', '\xD5' - }; + constexpr auto disabledSourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\bg_questList.bmp", 0x23BBD58F8B5FF5C9ULL); + const auto& disabledSource = disabledSourceText.data; const std::string disabled(DecryptName<0x23BBD58F8B5FF5C9ULL>(disabledSource)); - const char pressedSource[] = { - '\xAF', '\xD2', '\x3B', '\xD9', '\xB1', '\xC9', '\x4A', '\x00', '\xA9', '\x99', '\x3B', '\xEF', '\xCC', '\xBD', '\xD3', '\x9F', - '\x0A', '\x13', '\x9E', '\x54', '\x2E', '\x56', '\xFA', '\xA8', '\x1C', '\x09', '\xAE', '\x6A', '\x2D', '\x65', '\xE8', '\x92', - '\x1E', '\x08', '\x9E', '\x50', '\x05', '\x4B', '\xE6', '\xBE', '\x1B', '\x53', '\x99', '\x4E', '\x01', '\x07' - }; + constexpr auto pressedSourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\bg_questList.bmp", 0xCD8F077123FB7D6FULL); + const auto& pressedSource = pressedSourceText.data; const std::string pressed(DecryptName<0xCD8F077123FB7D6FULL>(pressedSource)); - const char hoverSource[] = { - '\x83', '\x86', '\x93', '\xDD', '\x15', '\x71', '\x8C', '\x54', '\x85', '\xCD', '\x93', '\xEB', '\x68', '\x05', '\x15', '\xCB', - '\x26', '\x47', '\x36', '\x50', '\x8A', '\xEE', '\x3C', '\xFC', '\x30', '\x5D', '\x06', '\x6E', '\x89', '\xDD', '\x2E', '\xC6', - '\x32', '\x5C', '\x36', '\x54', '\xA1', '\xF3', '\x20', '\xEA', '\x37', '\x76', '\x30', '\x4F', '\xB0', '\xDC', '\x22', '\xB7', - '\x21', '\x44', '\x23', '\x27' - }; + constexpr auto hoverSourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\bg_questList_check.bmp", 0x9949BFD527532943ULL); + const auto& hoverSource = hoverSourceText.data; const std::string hover(DecryptName<0x9949BFD527532943ULL>(hoverSource)); - const char normalSource[] = { - '\xF7', '\xE8', '\x6D', '\xC3', '\x7F', '\x2B', '\x6C', '\xDA', '\xF1', '\xA3', '\x6D', '\xF5', '\x02', '\x5F', '\xF5', '\x45', - '\x52', '\x29', '\xC8', '\x4E', '\xE0', '\xB4', '\xDC', '\x72', '\x44', '\x33', '\xF8', '\x70', '\xE3', '\x87', '\xCE', '\x48', - '\x46', '\x32', '\xC8', '\x4A', '\xCB', '\xA9', '\xC0', '\x64', '\x43', '\x69', '\xCF', '\x54', '\xCF', '\xE5' - }; + constexpr auto normalSourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\bg_questList.bmp", 0x17A9E5BF39AD4737ULL); + const auto& normalSource = normalSourceText.data; const std::string normal(DecryptName<0x17A9E5BF39AD4737ULL>(normalSource)); list->SetImages(normal, hover, pressed, disabled); } @@ -1483,45 +1495,25 @@ void RenewQuestUI::CUIQuestList::OnCreate(int width, int height) { this->list->scrollBar->step = 138; { CUIListBoxEx* list = this->list; - const char downSource[] = { - '\x65', '\x32', '\xAD', '\x03', '\xA3', '\xE9', '\xB2', '\xCE', '\x63', '\x79', '\xAD', '\x35', '\xDE', '\x9D', '\x2B', '\x51', - '\xC0', '\xF3', '\x08', '\x8E', '\x3C', '\x76', '\x02', '\x66', '\xD6', '\xE9', '\x38', '\xB0', '\x3F', '\x45', '\x03', '\x5C', - '\xD6', '\xFE', '\x1F', '\x96', '\x0F', '\x4B', '\x15', '\x62', '\xD7', '\xC2', '\x0C', '\x8B', '\x11', '\x48', '\x00', '\x5C', - '\xC1', '\xF2', '\x1A', '\x97', '\x4D', '\x45', '\x1A', '\x73', '\xA5' - }; + constexpr auto downSourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\bt_scrollbar_arrow_down.bmp", 0x03772763F96D9DA5ULL); + const auto& downSource = downSourceText.data; const std::string down(DecryptName<0x03772763F96D9DA5ULL>(downSource)); - const char upSource[] = { - '\xAD', '\x14', '\x55', '\xD7', '\x53', '\x35', '\xD2', '\x08', '\xAB', '\x5F', '\x55', '\xE1', '\x2E', '\x41', '\x4B', '\x97', - '\x08', '\xD5', '\xF0', '\x5A', '\xCC', '\xAA', '\x62', '\xA0', '\x1E', '\xCF', '\xC0', '\x64', '\xCF', '\x99', '\x63', '\x9A', - '\x1E', '\xD8', '\xE7', '\x42', '\xFF', '\x97', '\x75', '\xA4', '\x1F', '\xE4', '\xF4', '\x5F', '\xE1', '\x94', '\x60', '\x9A', - '\x18', '\xCB', '\xE5', '\x48', '\xE1', '\xD5', '\x75', '\xA8', '\x1D', '\xBB' - }; + constexpr auto upSourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\bt_scrollbar_arrow_upper.bmp", 0xC517FB932D95BB6DULL); + const auto& upSource = upSourceText.data; const std::string up(DecryptName<0xC517FB932D95BB6DULL>(upSource)); list->SetScrollBarButtonImages(up, down); } this->list->SetScrollBarBackground(""); { CUIListBoxEx* list = this->list; - const char bottomSource[] = { - '\x2F', '\xDE', '\x1F', '\xE9', '\xAD', '\x81', '\x02', '\x20', '\x29', '\x95', '\x1F', '\xDF', '\xD0', '\xF5', '\x9B', '\xBF', - '\x8A', '\x1F', '\xBA', '\x64', '\x32', '\x1E', '\xB2', '\x88', '\x9C', '\x05', '\x8A', '\x5A', '\x31', '\x2D', '\xB3', '\xB2', - '\x9C', '\x12', '\xAD', '\x7C', '\x01', '\x23', '\x85', '\x8C', '\x9D', '\x2E', '\xBB', '\x7C', '\x1A', '\x21', '\xE9', '\x8F', - '\x82', '\x01', '\xDF' - }; + constexpr auto bottomSourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\bt_scrollBar_down.bmp", 0xEDC74F6D13DF71EFULL); + const auto& bottomSource = bottomSourceText.data; const std::string bottom(DecryptName<0xEDC74F6D13DF71EFULL>(bottomSource)); - const char middleSource[] = { - '\x55', '\x20', '\x21', '\xF7', '\x9D', '\xC7', '\xA4', '\x3C', '\x53', '\x6B', '\x21', '\xC1', '\xE0', '\xB3', '\x3D', '\xA3', - '\xF0', '\xE1', '\x84', '\x7A', '\x02', '\x58', '\x14', '\x94', '\xE6', '\xFB', '\xB4', '\x44', '\x01', '\x6B', '\x15', '\xAE', - '\xE6', '\xEC', '\x93', '\x62', '\x31', '\x65', '\x23', '\x90', '\xE7', '\xD0', '\x8C', '\x64', '\x39', '\x27', '\x03', '\x9C', - '\xE5', '\x8F' - }; + constexpr auto middleSourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\bt_scrollBar_mid.bmp", 0xF161095D0DE18F95ULL); + const auto& middleSource = middleSourceText.data; const std::string middle(DecryptName<0xF161095D0DE18F95ULL>(middleSource)); - const char topSource[] = { - '\x47', '\xBC', '\xAB', '\x85', '\xF9', '\xC7', '\xB4', '\xC6', '\x41', '\xF7', '\xAB', '\xB3', '\x84', '\xB3', '\x2D', '\x59', - '\xE2', '\x7D', '\x0E', '\x08', '\x66', '\x58', '\x04', '\x6E', '\xF4', '\x67', '\x3E', '\x36', '\x65', '\x6B', '\x05', '\x54', - '\xF4', '\x70', '\x19', '\x10', '\x55', '\x65', '\x33', '\x6A', '\xF5', '\x4C', '\x1E', '\x0F', '\x17', '\x6B', '\x1C', '\x7B', - '\x87' - }; + constexpr auto topSourceText = CRYPT_NAME("유저인터페이스\\Renew_QuestUI\\bt_scrollBar_up.bmp", 0x0B7109397F6B1387ULL); + const auto& topSource = topSourceText.data; const std::string top(DecryptName<0x0B7109397F6B1387ULL>(topSource)); list->SetScrollBarThumbImages(top, middle, bottom); }