From 8eaed2233f321e6b56c9798acd730d385b319131 Mon Sep 17 00:00:00 2001 From: Uleat Date: Mon, 7 Jan 2019 18:18:35 -0500 Subject: [PATCH] Added namespace expansions --- common/emu_constants.h | 3 + common/emu_versions.cpp | 109 +++++++++++++++++++++++++------ common/emu_versions.h | 56 +++++++++++++++- common/eq_limits.cpp | 24 +++++++ common/eq_limits.h | 9 +++ common/patches/rof2_limits.h | 3 + common/patches/rof_limits.h | 3 + common/patches/sod_limits.h | 3 + common/patches/sof_limits.h | 3 + common/patches/titanium_limits.h | 3 + common/patches/uf_limits.h | 3 + world/client.cpp | 2 +- zone/attack.cpp | 2 +- zone/client_packet.cpp | 2 +- 14 files changed, 198 insertions(+), 27 deletions(-) diff --git a/common/emu_constants.h b/common/emu_constants.h index 4fbdd107d..8d27e74b0 100644 --- a/common/emu_constants.h +++ b/common/emu_constants.h @@ -188,6 +188,9 @@ namespace EQEmu namespace constants { const EQEmu::versions::ClientVersion CHARACTER_CREATION_CLIENT = EQEmu::versions::ClientVersion::Titanium; + using RoF2::constants::EXPANSION_BIT; + using RoF2::constants::EXPANSIONS_MASK; + using RoF2::constants::CHARACTER_CREATION_LIMIT; const size_t SAY_LINK_OPENER_SIZE = 1; diff --git a/common/emu_versions.cpp b/common/emu_versions.cpp index ee4970638..e1c867cbb 100644 --- a/common/emu_versions.cpp +++ b/common/emu_versions.cpp @@ -106,27 +106,6 @@ EQEmu::versions::ClientVersion EQEmu::versions::ConvertClientVersionBitToClientV } } -uint32 EQEmu::versions::ConvertClientVersionToExpansion(ClientVersion client_version) -{ - switch (client_version) { - case ClientVersion::Unknown: - case ClientVersion::Client62: - case ClientVersion::Titanium: - return 0x000007FFU; - case ClientVersion::SoF: - return 0x00007FFFU; - case ClientVersion::SoD: - return 0x0000FFFFU; - case ClientVersion::UF: - return 0x0001FFFFU; - case ClientVersion::RoF: - case ClientVersion::RoF2: - return 0x000FFFFFU; - default: - return 0; - } -} - bool EQEmu::versions::IsValidMobVersion(MobVersion mob_version) { if (mob_version <= MobVersion::Unknown || mob_version > LastMobVersion) @@ -368,3 +347,91 @@ EQEmu::versions::MobVersion EQEmu::versions::ConvertClientVersionToOfflinePCMobV return MobVersion::Unknown; } } + +const char* EQEmu::expansions::ExpansionName(uint32 expansion_bit) +{ + switch (expansion_bit) { + case expansions::bitEverQuest: + return "EverQuest"; + case expansions::bitRoK: + return "The Ruins of Kunark"; + case expansions::bitSoV: + return "The Scars of Velious"; + case expansions::bitSoL: + return "The Shadows of Luclin"; + case expansions::bitPoP: + return "The Planes of Power"; + case expansions::bitLoY: + return "The Legacy of Ykesha"; + case expansions::bitLDoN: + return "Lost Dungeons of Norrath"; + case expansions::bitGoD: + return "Gates of Discord"; + case expansions::bitOoW: + return "Omens of War"; + case expansions::bitDoN: + return "Dragons of Norrath"; + case expansions::bitDoD: + return "Depths of Darkhollow"; + case expansions::bitPoR: + return "Prophecy of Ro"; + case expansions::bitTSS: + return "The Serpent's Spine"; + case expansions::bitTBS: + return "The Buried Sea"; + case expansions::bitSoF: + return "Secrets of Faydwer"; + case expansions::bitSoD: + return "Seeds of Destruction"; + case expansions::bitUF: + return "Underfoot"; + case expansions::bitHoT: + return "House of Thule"; + case expansions::bitVoA: + return "Veil of Alaris"; + case expansions::bitRoF: + return "Rain of Fear"; + case expansions::bitCotF: + return "Call of the Forsaken"; + default: + return "Invalid Expansion"; + } +} + +uint32 EQEmu::expansions::ConvertClientVersionToExpansionBit(versions::ClientVersion client_version) +{ + switch (client_version) { + case versions::ClientVersion::Titanium: + return expansions::bitPoR; + case versions::ClientVersion::SoF: + return expansions::bitSoF; + case versions::ClientVersion::SoD: + return expansions::bitSoD; + case versions::ClientVersion::UF: + return expansions::bitUF; + case versions::ClientVersion::RoF: + case versions::ClientVersion::RoF2: + return expansions::bitRoF; + default: + return expansions::bitEverQuest; + } +} + +uint32 EQEmu::expansions::ConvertClientVersionToExpansionMask(versions::ClientVersion client_version) +{ + switch (client_version) { + case versions::ClientVersion::Titanium: + return expansions::maskPoR; + case versions::ClientVersion::SoF: + return expansions::maskSoF; + case versions::ClientVersion::SoD: + return expansions::maskSoD; + case versions::ClientVersion::UF: + return expansions::maskUF; + case versions::ClientVersion::RoF: + case versions::ClientVersion::RoF2: + return expansions::maskRoF; + default: + return expansions::maskEverQuest; + } +} diff --git a/common/emu_versions.h b/common/emu_versions.h index a5f3d0183..2ef68b283 100644 --- a/common/emu_versions.h +++ b/common/emu_versions.h @@ -69,9 +69,7 @@ namespace EQEmu const char* ClientVersionName(ClientVersion client_version); uint32 ConvertClientVersionToClientVersionBit(ClientVersion client_version); ClientVersion ConvertClientVersionBitToClientVersion(uint32 client_version_bit); - uint32 ConvertClientVersionToExpansion(ClientVersion client_version); - - + enum class MobVersion : uint32 { Unknown = 0, Client62, @@ -137,6 +135,58 @@ namespace EQEmu } /*versions*/ + namespace expansions { + enum ExpansionBitmask : uint32 { + bitEverQuest = 0x00000000, + bitRoK = 0x00000001, + bitSoV = 0x00000002, + bitSoL = 0x00000004, + bitPoP = 0x00000008, + bitLoY = 0x00000010, + bitLDoN = 0x00000020, + bitGoD = 0x00000040, + bitOoW = 0x00000080, + bitDoN = 0x00000100, + bitDoD = 0x00000200, + bitPoR = 0x00000400, + bitTSS = 0x00000800, + bitTBS = 0x00001000, + bitSoF = 0x00002000, + bitSoD = 0x00004000, + bitUF = 0x00008000, + bitHoT = 0x00010000, + bitVoA = 0x00020000, + bitRoF = 0x00040000, + bitCotF = 0x00080000, + maskEverQuest = 0x00000000, + maskRoK = 0x00000001, + maskSoV = 0x00000003, + maskSoL = 0x00000007, + maskPoP = 0x0000000F, + maskLoY = 0x0000001F, + maskLDoN = 0x0000003F, + maskGoD = 0x0000007F, + maskOoW = 0x000000FF, + maskDoN = 0x000001FF, + maskDoD = 0x000003FF, + maskPoR = 0x000007FF, + maskTSS = 0x00000FFF, + maskTBS = 0x00001FFF, + maskSoF = 0x00003FFF, + maskSoD = 0x00007FFF, + maskUF = 0x0000FFFF, + maskHoT = 0x0001FFFF, + maskVoA = 0x0003FFFF, + maskRoF = 0x0007FFFF, + maskCotF = 0x000FFFFF + }; + + const char* ExpansionName(uint32 expansion_bit); + uint32 ConvertClientVersionToExpansionBit(versions::ClientVersion client_version); + uint32 ConvertClientVersionToExpansionMask(versions::ClientVersion client_version); + + } /*expansions*/ + } /*EQEmu*/ #endif /*COMMON_EMU_VERSIONS_H*/ diff --git a/common/eq_limits.cpp b/common/eq_limits.cpp index 557e5c7f4..025ec4f95 100644 --- a/common/eq_limits.cpp +++ b/common/eq_limits.cpp @@ -32,6 +32,9 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL, + ClientUnknown::INULL, + ClientUnknown::INULL, + ClientUnknown::INULL, ClientUnknown::INULL ), /*[ClientVersion::Client62] =*/ @@ -43,11 +46,17 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi Client62::INULL, Client62::INULL, Client62::INULL, + Client62::INULL, + Client62::INULL, + Client62::INULL, Client62::INULL ), /*[ClientVersion::Titanium] =*/ EQEmu::constants::LookupEntry( + Titanium::constants::EXPANSION_BIT, + Titanium::constants::EXPANSIONS_MASK, Titanium::constants::CHARACTER_CREATION_LIMIT, + Titanium::constants::SAY_LINK_BODY_SIZE, Titanium::constants::LongBuffs, Titanium::constants::ShortBuffs, Titanium::constants::DiscBuffs, @@ -58,7 +67,10 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::SoF] =*/ EQEmu::constants::LookupEntry( + SoF::constants::EXPANSION_BIT, + SoF::constants::EXPANSIONS_MASK, SoF::constants::CHARACTER_CREATION_LIMIT, + SoF::constants::SAY_LINK_BODY_SIZE, SoF::constants::LongBuffs, SoF::constants::ShortBuffs, SoF::constants::DiscBuffs, @@ -69,7 +81,10 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::SoD] =*/ EQEmu::constants::LookupEntry( + SoD::constants::EXPANSION_BIT, + SoD::constants::EXPANSIONS_MASK, SoD::constants::CHARACTER_CREATION_LIMIT, + SoD::constants::SAY_LINK_BODY_SIZE, SoD::constants::LongBuffs, SoD::constants::ShortBuffs, SoD::constants::DiscBuffs, @@ -80,7 +95,10 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::UF] =*/ EQEmu::constants::LookupEntry( + UF::constants::EXPANSION_BIT, + UF::constants::EXPANSIONS_MASK, UF::constants::CHARACTER_CREATION_LIMIT, + UF::constants::SAY_LINK_BODY_SIZE, UF::constants::LongBuffs, UF::constants::ShortBuffs, UF::constants::DiscBuffs, @@ -91,7 +109,10 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::RoF] =*/ EQEmu::constants::LookupEntry( + RoF::constants::EXPANSION_BIT, + RoF::constants::EXPANSIONS_MASK, RoF::constants::CHARACTER_CREATION_LIMIT, + RoF::constants::SAY_LINK_BODY_SIZE, RoF::constants::LongBuffs, RoF::constants::ShortBuffs, RoF::constants::DiscBuffs, @@ -102,7 +123,10 @@ static const EQEmu::constants::LookupEntry constants_lookup_entries[EQEmu::versi ), /*[ClientVersion::RoF2] =*/ EQEmu::constants::LookupEntry( + RoF2::constants::EXPANSION_BIT, + RoF2::constants::EXPANSIONS_MASK, RoF2::constants::CHARACTER_CREATION_LIMIT, + RoF2::constants::SAY_LINK_BODY_SIZE, RoF2::constants::LongBuffs, RoF2::constants::ShortBuffs, RoF2::constants::DiscBuffs, diff --git a/common/eq_limits.h b/common/eq_limits.h index fe95ea809..f18edd212 100644 --- a/common/eq_limits.h +++ b/common/eq_limits.h @@ -35,7 +35,10 @@ namespace EQEmu { namespace constants { struct LookupEntry { + uint32 ExpansionBit; + uint32 ExpansionsMask; int16 CharacterCreationLimit; + size_t SayLinkBodySize; int LongBuffs; int ShortBuffs; int DiscBuffs; @@ -45,7 +48,10 @@ namespace EQEmu int MercBuffs; LookupEntry( + uint32 ExpansionBit, + uint32 ExpansionsMask, int16 CharacterCreationLimit, + size_t SayLinkBodySize, int LongBuffs, int ShortBuffs, int DiscBuffs, @@ -54,7 +60,10 @@ namespace EQEmu int PetBuffs, int MercBuffs ) : + ExpansionBit(ExpansionBit), + ExpansionsMask(ExpansionsMask), CharacterCreationLimit(CharacterCreationLimit), + SayLinkBodySize(SayLinkBodySize), LongBuffs(LongBuffs), ShortBuffs(ShortBuffs), DiscBuffs(DiscBuffs), diff --git a/common/patches/rof2_limits.h b/common/patches/rof2_limits.h index 96c231cf4..ecfd6de4b 100644 --- a/common/patches/rof2_limits.h +++ b/common/patches/rof2_limits.h @@ -259,6 +259,9 @@ namespace RoF2 namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::RoF2; } + const uint32 EXPANSION_BIT = EQEmu::expansions::bitRoF; + const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskRoF; + const size_t CHARACTER_CREATION_LIMIT = 12; const size_t SAY_LINK_BODY_SIZE = 56; diff --git a/common/patches/rof_limits.h b/common/patches/rof_limits.h index 69db29f8f..6bb59c14c 100644 --- a/common/patches/rof_limits.h +++ b/common/patches/rof_limits.h @@ -250,6 +250,9 @@ namespace RoF namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::RoF; } + const uint32 EXPANSION_BIT = EQEmu::expansions::bitRoF; + const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskRoF; + const size_t CHARACTER_CREATION_LIMIT = 12; const size_t SAY_LINK_BODY_SIZE = 55; diff --git a/common/patches/sod_limits.h b/common/patches/sod_limits.h index 82381355e..cb7e3e21a 100644 --- a/common/patches/sod_limits.h +++ b/common/patches/sod_limits.h @@ -277,6 +277,9 @@ namespace SoD namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::SoD; } + const uint32 EXPANSION_BIT = EQEmu::expansions::bitSoD; + const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskSoD; + const size_t CHARACTER_CREATION_LIMIT = 12; const size_t SAY_LINK_BODY_SIZE = 50; diff --git a/common/patches/sof_limits.h b/common/patches/sof_limits.h index ab5a32807..a3ff9bc2d 100644 --- a/common/patches/sof_limits.h +++ b/common/patches/sof_limits.h @@ -277,6 +277,9 @@ namespace SoF namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::SoF; } + const uint32 EXPANSION_BIT = EQEmu::expansions::bitSoF; + const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskSoF; + const size_t CHARACTER_CREATION_LIMIT = 12; const size_t SAY_LINK_BODY_SIZE = 50; diff --git a/common/patches/titanium_limits.h b/common/patches/titanium_limits.h index 33fb3bdc5..01cbe0b09 100644 --- a/common/patches/titanium_limits.h +++ b/common/patches/titanium_limits.h @@ -276,6 +276,9 @@ namespace Titanium namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::Titanium; } + const uint32 EXPANSION_BIT = EQEmu::expansions::bitPoR; + const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskPoR; + const size_t CHARACTER_CREATION_LIMIT = 8; // Hard-coded in client - DO NOT ALTER const size_t SAY_LINK_BODY_SIZE = 45; diff --git a/common/patches/uf_limits.h b/common/patches/uf_limits.h index ef00b912e..0232a1b85 100644 --- a/common/patches/uf_limits.h +++ b/common/patches/uf_limits.h @@ -278,6 +278,9 @@ namespace UF namespace constants { inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::UF; } + const uint32 EXPANSION_BIT = EQEmu::expansions::bitUF; + const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskUF; + const size_t CHARACTER_CREATION_LIMIT = 12; const size_t SAY_LINK_BODY_SIZE = 50; diff --git a/world/client.cpp b/world/client.cpp index d3b477286..b72b81351 100644 --- a/world/client.cpp +++ b/world/client.cpp @@ -172,7 +172,7 @@ void Client::SendExpansionInfo() { auto outapp = new EQApplicationPacket(OP_ExpansionInfo, sizeof(ExpansionInfo_Struct)); ExpansionInfo_Struct *eis = (ExpansionInfo_Struct*)outapp->pBuffer; if(RuleB(World, UseClientBasedExpansionSettings)) { - eis->Expansions = EQEmu::versions::ConvertClientVersionToExpansion(eqs->ClientVersion()); + eis->Expansions = EQEmu::expansions::ConvertClientVersionToExpansionMask(eqs->ClientVersion()); } else { eis->Expansions = (RuleI(World, ExpansionSettings)); } diff --git a/zone/attack.cpp b/zone/attack.cpp index 771976ef1..a6a9da784 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -5478,4 +5478,4 @@ int32 Mob::GetHPRegen() const int32 Mob::GetManaRegen() const { return mana_regen; -} \ No newline at end of file +} diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index eca721031..07c5cbb2f 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1398,7 +1398,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) if (m_pp.ldon_points_available < 0 || m_pp.ldon_points_available > 2000000000) { m_pp.ldon_points_available = 0; } if (RuleB(World, UseClientBasedExpansionSettings)) { - m_pp.expansions = EQEmu::versions::ConvertClientVersionToExpansion(ClientVersion()); + m_pp.expansions = EQEmu::expansions::ConvertClientVersionToExpansionMask(ClientVersion()); } else { m_pp.expansions = RuleI(World, ExpansionSettings);