diff --git a/common/emu_constants.h b/common/emu_constants.h index 8d27e74b0..9f24d5c20 100644 --- a/common/emu_constants.h +++ b/common/emu_constants.h @@ -188,6 +188,7 @@ namespace EQEmu namespace constants { const EQEmu::versions::ClientVersion CHARACTER_CREATION_CLIENT = EQEmu::versions::ClientVersion::Titanium; + using RoF2::constants::EXPANSION; using RoF2::constants::EXPANSION_BIT; using RoF2::constants::EXPANSIONS_MASK; diff --git a/common/emu_versions.cpp b/common/emu_versions.cpp index ba532b8fc..d74835671 100644 --- a/common/emu_versions.cpp +++ b/common/emu_versions.cpp @@ -342,56 +342,224 @@ EQEmu::versions::MobVersion EQEmu::versions::ConvertClientVersionToOfflinePCMobV } } -const char* EQEmu::expansions::ExpansionName(uint32 expansion_bit) +const char* EQEmu::expansions::ExpansionName(Expansion expansion) { - switch (expansion_bit) { - case expansions::bitEverQuest: + switch (expansion) { + case Expansion::EverQuest: return "EverQuest"; - case expansions::bitRoK: + case Expansion::RoK: return "The Ruins of Kunark"; - case expansions::bitSoV: + case Expansion::SoV: return "The Scars of Velious"; - case expansions::bitSoL: + case Expansion::SoL: return "The Shadows of Luclin"; - case expansions::bitPoP: + case Expansion::PoP: return "The Planes of Power"; - case expansions::bitLoY: + case Expansion::LoY: return "The Legacy of Ykesha"; - case expansions::bitLDoN: + case Expansion::LDoN: return "Lost Dungeons of Norrath"; - case expansions::bitGoD: + case Expansion::GoD: return "Gates of Discord"; - case expansions::bitOoW: + case Expansion::OoW: return "Omens of War"; - case expansions::bitDoN: + case Expansion::DoN: return "Dragons of Norrath"; - case expansions::bitDoD: + case Expansion::DoD: return "Depths of Darkhollow"; - case expansions::bitPoR: + case Expansion::PoR: return "Prophecy of Ro"; - case expansions::bitTSS: + case Expansion::TSS: return "The Serpent's Spine"; - case expansions::bitTBS: + case Expansion::TBS: return "The Buried Sea"; - case expansions::bitSoF: + case Expansion::SoF: return "Secrets of Faydwer"; - case expansions::bitSoD: + case Expansion::SoD: return "Seeds of Destruction"; - case expansions::bitUF: + case Expansion::UF: return "Underfoot"; - case expansions::bitHoT: + case Expansion::HoT: return "House of Thule"; - case expansions::bitVoA: + case Expansion::VoA: return "Veil of Alaris"; - case expansions::bitRoF: + case Expansion::RoF: return "Rain of Fear"; - case expansions::bitCotF: + case Expansion::CotF: return "Call of the Forsaken"; default: return "Invalid Expansion"; } } +const char* EQEmu::expansions::ExpansionName(uint32 expansion_bit) +{ + return ExpansionName(ConvertExpansionBitToExpansion(expansion_bit)); +} + +uint32 EQEmu::expansions::ConvertExpansionToExpansionBit(Expansion expansion) +{ + switch (expansion) { + case Expansion::RoK: + return bitRoK; + case Expansion::SoV: + return bitSoV; + case Expansion::SoL: + return bitSoL; + case Expansion::PoP: + return bitPoP; + case Expansion::LoY: + return bitLoY; + case Expansion::LDoN: + return bitLDoN; + case Expansion::GoD: + return bitGoD; + case Expansion::OoW: + return bitOoW; + case Expansion::DoN: + return bitDoN; + case Expansion::DoD: + return bitDoD; + case Expansion::PoR: + return bitPoR; + case Expansion::TSS: + return bitTSS; + case Expansion::TBS: + return bitTBS; + case Expansion::SoF: + return bitSoF; + case Expansion::SoD: + return bitSoD; + case Expansion::UF: + return bitUF; + case Expansion::HoT: + return bitHoT; + case Expansion::VoA: + return bitVoA; + case Expansion::RoF: + return bitRoF; + case Expansion::CotF: + return bitCotF; + default: + return bitEverQuest; + } +} + +EQEmu::expansions::Expansion EQEmu::expansions::ConvertExpansionBitToExpansion(uint32 expansion_bit) +{ + switch (expansion_bit) { + case bitRoK: + return Expansion::RoK; + case bitSoV: + return Expansion::SoV; + case bitSoL: + return Expansion::SoL; + case bitPoP: + return Expansion::PoP; + case bitLoY: + return Expansion::LoY; + case bitLDoN: + return Expansion::LDoN; + case bitGoD: + return Expansion::GoD; + case bitOoW: + return Expansion::OoW; + case bitDoN: + return Expansion::DoN; + case bitDoD: + return Expansion::DoD; + case bitPoR: + return Expansion::PoR; + case bitTSS: + return Expansion::TSS; + case bitTBS: + return Expansion::TBS; + case bitSoF: + return Expansion::SoF; + case bitSoD: + return Expansion::SoD; + case bitUF: + return Expansion::UF; + case bitHoT: + return Expansion::HoT; + case bitVoA: + return Expansion::VoA; + case bitRoF: + return Expansion::RoF; + case bitCotF: + return Expansion::CotF; + default: + return Expansion::EverQuest; + } +} + +uint32 EQEmu::expansions::ConvertExpansionToExpansionMask(Expansion expansion) +{ + switch (expansion) { + case Expansion::RoK: + return maskRoK; + case Expansion::SoV: + return maskSoV; + case Expansion::SoL: + return maskSoL; + case Expansion::PoP: + return maskPoP; + case Expansion::LoY: + return maskLoY; + case Expansion::LDoN: + return maskLDoN; + case Expansion::GoD: + return maskGoD; + case Expansion::OoW: + return maskOoW; + case Expansion::DoN: + return maskDoN; + case Expansion::DoD: + return maskDoD; + case Expansion::PoR: + return maskPoR; + case Expansion::TSS: + return maskTSS; + case Expansion::TBS: + return maskTBS; + case Expansion::SoF: + return maskSoF; + case Expansion::SoD: + return maskSoD; + case Expansion::UF: + return maskUF; + case Expansion::HoT: + return maskHoT; + case Expansion::VoA: + return maskVoA; + case Expansion::RoF: + return maskRoF; + case Expansion::CotF: + return maskCotF; + default: + return maskEverQuest; + } +} + +EQEmu::expansions::Expansion EQEmu::expansions::ConvertClientVersionToExpansion(versions::ClientVersion client_version) +{ + switch (client_version) { + case versions::ClientVersion::Titanium: + return expansions::Expansion::PoR; + case versions::ClientVersion::SoF: + return expansions::Expansion::SoF; + case versions::ClientVersion::SoD: + return expansions::Expansion::SoD; + case versions::ClientVersion::UF: + return expansions::Expansion::UF; + case versions::ClientVersion::RoF: + case versions::ClientVersion::RoF2: + return expansions::Expansion::RoF; + default: + return expansions::Expansion::EverQuest; + } +} + uint32 EQEmu::expansions::ConvertClientVersionToExpansionBit(versions::ClientVersion client_version) { switch (client_version) { diff --git a/common/emu_versions.h b/common/emu_versions.h index 20bfd6dbc..17ea82b9f 100644 --- a/common/emu_versions.h +++ b/common/emu_versions.h @@ -137,6 +137,30 @@ namespace EQEmu } /*versions*/ namespace expansions { + enum class Expansion : uint32 { + EverQuest = 0, + RoK, + SoV, + SoL, + PoP, + LoY, + LDoN, + GoD, + OoW, + DoN, + DoD, + PoR, + TSS, + TBS, + SoF, + SoD, + UF, + HoT, + VoA, + RoF, + CotF + }; + enum ExpansionBitmask : uint32 { bitEverQuest = 0x00000000, bitRoK = 0x00000001, @@ -182,7 +206,12 @@ namespace EQEmu maskCotF = 0x000FFFFF }; + const char* ExpansionName(Expansion expansion); const char* ExpansionName(uint32 expansion_bit); + uint32 ConvertExpansionToExpansionBit(Expansion expansion); + Expansion ConvertExpansionBitToExpansion(uint32 expansion_bit); + uint32 ConvertExpansionToExpansionMask(Expansion expansion); + Expansion ConvertClientVersionToExpansion(versions::ClientVersion client_version); uint32 ConvertClientVersionToExpansionBit(versions::ClientVersion client_version); uint32 ConvertClientVersionToExpansionMask(versions::ClientVersion client_version); diff --git a/common/eq_limits.cpp b/common/eq_limits.cpp index 025ec4f95..f07b5cf0f 100644 --- a/common/eq_limits.cpp +++ b/common/eq_limits.cpp @@ -25,6 +25,7 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi { /*[ClientVersion::Unknown] =*/ EQEmu::constants::LookupEntry( + EQEmu::expansions::Expansion::EverQuest, ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL, @@ -39,6 +40,7 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::Client62] =*/ EQEmu::constants::LookupEntry( + EQEmu::expansions::Expansion::EverQuest, Client62::INULL, Client62::INULL, Client62::INULL, @@ -53,6 +55,7 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::Titanium] =*/ EQEmu::constants::LookupEntry( + Titanium::constants::EXPANSION, Titanium::constants::EXPANSION_BIT, Titanium::constants::EXPANSIONS_MASK, Titanium::constants::CHARACTER_CREATION_LIMIT, @@ -67,6 +70,7 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::SoF] =*/ EQEmu::constants::LookupEntry( + SoF::constants::EXPANSION, SoF::constants::EXPANSION_BIT, SoF::constants::EXPANSIONS_MASK, SoF::constants::CHARACTER_CREATION_LIMIT, @@ -81,6 +85,7 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::SoD] =*/ EQEmu::constants::LookupEntry( + SoD::constants::EXPANSION, SoD::constants::EXPANSION_BIT, SoD::constants::EXPANSIONS_MASK, SoD::constants::CHARACTER_CREATION_LIMIT, @@ -95,6 +100,7 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::UF] =*/ EQEmu::constants::LookupEntry( + UF::constants::EXPANSION, UF::constants::EXPANSION_BIT, UF::constants::EXPANSIONS_MASK, UF::constants::CHARACTER_CREATION_LIMIT, @@ -109,6 +115,7 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::RoF] =*/ EQEmu::constants::LookupEntry( + RoF::constants::EXPANSION, RoF::constants::EXPANSION_BIT, RoF::constants::EXPANSIONS_MASK, RoF::constants::CHARACTER_CREATION_LIMIT, @@ -123,6 +130,7 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::RoF2] =*/ EQEmu::constants::LookupEntry( + RoF2::constants::EXPANSION, RoF2::constants::EXPANSION_BIT, RoF2::constants::EXPANSIONS_MASK, RoF2::constants::CHARACTER_CREATION_LIMIT, diff --git a/common/eq_limits.h b/common/eq_limits.h index f18edd212..21bc2459b 100644 --- a/common/eq_limits.h +++ b/common/eq_limits.h @@ -35,6 +35,7 @@ namespace EQEmu { namespace constants { struct LookupEntry { + EQEmu::expansions::Expansion Expansion; uint32 ExpansionBit; uint32 ExpansionsMask; int16 CharacterCreationLimit; @@ -48,6 +49,7 @@ namespace EQEmu int MercBuffs; LookupEntry( + EQEmu::expansions::Expansion Expansion, uint32 ExpansionBit, uint32 ExpansionsMask, int16 CharacterCreationLimit, @@ -60,6 +62,7 @@ namespace EQEmu int PetBuffs, int MercBuffs ) : + Expansion(Expansion), ExpansionBit(ExpansionBit), ExpansionsMask(ExpansionsMask), CharacterCreationLimit(CharacterCreationLimit), diff --git a/common/patches/rof2_limits.h b/common/patches/rof2_limits.h index ecfd6de4b..8b83e885c 100644 --- a/common/patches/rof2_limits.h +++ b/common/patches/rof2_limits.h @@ -259,6 +259,7 @@ namespace RoF2 namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::RoF2; } + const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::RoF; const uint32 EXPANSION_BIT = EQEmu::expansions::bitRoF; const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskRoF; diff --git a/common/patches/rof_limits.h b/common/patches/rof_limits.h index 6bb59c14c..42cffc5bf 100644 --- a/common/patches/rof_limits.h +++ b/common/patches/rof_limits.h @@ -250,6 +250,7 @@ namespace RoF namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::RoF; } + const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::RoF; const uint32 EXPANSION_BIT = EQEmu::expansions::bitRoF; const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskRoF; diff --git a/common/patches/sod_limits.h b/common/patches/sod_limits.h index cb7e3e21a..eb6ce1daa 100644 --- a/common/patches/sod_limits.h +++ b/common/patches/sod_limits.h @@ -277,6 +277,7 @@ namespace SoD namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::SoD; } + const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::SoD; const uint32 EXPANSION_BIT = EQEmu::expansions::bitSoD; const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskSoD; diff --git a/common/patches/sof_limits.h b/common/patches/sof_limits.h index a3ff9bc2d..22b6995c8 100644 --- a/common/patches/sof_limits.h +++ b/common/patches/sof_limits.h @@ -277,6 +277,7 @@ namespace SoF namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::SoF; } + const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::SoF; const uint32 EXPANSION_BIT = EQEmu::expansions::bitSoF; const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskSoF; diff --git a/common/patches/titanium_limits.h b/common/patches/titanium_limits.h index 01cbe0b09..8bfebe319 100644 --- a/common/patches/titanium_limits.h +++ b/common/patches/titanium_limits.h @@ -276,6 +276,7 @@ namespace Titanium namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::Titanium; } + const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::PoR; const uint32 EXPANSION_BIT = EQEmu::expansions::bitPoR; const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskPoR; diff --git a/common/patches/uf_limits.h b/common/patches/uf_limits.h index 0232a1b85..ce1f9c770 100644 --- a/common/patches/uf_limits.h +++ b/common/patches/uf_limits.h @@ -278,6 +278,7 @@ namespace UF namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::UF; } + const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::UF; const uint32 EXPANSION_BIT = EQEmu::expansions::bitUF; const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskUF;