diff --git a/common/deity.cpp b/common/deity.cpp index bbaf0b4e0..5ed0619b0 100644 --- a/common/deity.cpp +++ b/common/deity.cpp @@ -19,81 +19,17 @@ #include "deity.h" -EQ::deity::DeityTypeBit EQ::deity::GetDeityBitmask(DeityType deity_type) +uint32 Deity::GetBitmask(uint32 deity_id) { - switch (deity_type) { - case DeityBertoxxulous: - return bit_DeityBertoxxulous; - case DeityBrellSirilis: - return bit_DeityBrellSirilis; - case DeityCazicThule: - return bit_DeityCazicThule; - case DeityErollisiMarr: - return bit_DeityErollisiMarr; - case DeityBristlebane: - return bit_DeityBristlebane; - case DeityInnoruuk: - return bit_DeityInnoruuk; - case DeityKarana: - return bit_DeityKarana; - case DeityMithanielMarr: - return bit_DeityMithanielMarr; - case DeityPrexus: - return bit_DeityPrexus; - case DeityQuellious: - return bit_DeityQuellious; - case DeityRallosZek: - return bit_DeityRallosZek; - case DeityRodcetNife: - return bit_DeityRodcetNife; - case DeitySolusekRo: - return bit_DeitySolusekRo; - case DeityTheTribunal: - return bit_DeityTheTribunal; - case DeityTunare: - return bit_DeityTunare; - case DeityVeeshan: - return bit_DeityVeeshan; - case DeityAgnostic_LB: - case DeityAgnostic: - return bit_DeityAgnostic; - default: - return bit_DeityAll; - } + return IsValid(deity_id) ? deity_bitmasks[deity_id] : Deity::Bitmask::All; } -const std::map& EQ::deity::GetDeityMap() +std::string Deity::GetName(uint32 deity_id) { - static const std::map deity_map = { - { DeityAgnostic, "Agnostic" }, - { DeityAgnostic_LB, "Agnostic" }, - { DeityBertoxxulous, "Bertoxxulous" }, - { DeityBrellSirilis, "Brell Serilis" }, - { DeityBristlebane, "Bristlebane" }, - { DeityCazicThule, "Cazic-Thule" }, - { DeityErollisiMarr, "Erollisi Marr" }, - { DeityInnoruuk, "Innoruuk" }, - { DeityKarana, "Karana" }, - { DeityMithanielMarr, "Mithaniel Marr" }, - { DeityPrexus, "Prexus" }, - { DeityQuellious, "Quellious" }, - { DeityRallosZek, "Rallos Zek" }, - { DeityRodcetNife, "Rodcet Nife" }, - { DeitySolusekRo, "Solusek Ro" }, - { DeityTheTribunal, "The Tribunal" }, - { DeityTunare, "Tunare" }, - { DeityVeeshan, "Veeshan" } - }; - - return deity_map; + return IsValid(deity_id) ? deity_names[deity_id] : "UNKNOWN DEITY"; } -std::string EQ::deity::GetDeityName(DeityType deity_type) +bool Deity::IsValid(uint32 deity_id) { - - if (EQ::deity::GetDeityMap().find(deity_type) != EQ::deity::GetDeityMap().end()) { - return EQ::deity::GetDeityMap().find(deity_type)->second; - } - - return std::string(); + return deity_names.find(deity_id) != deity_names.end(); } diff --git a/common/deity.h b/common/deity.h index 6789aa723..370e009b6 100644 --- a/common/deity.h +++ b/common/deity.h @@ -23,62 +23,95 @@ #include "types.h" #include #include +#include +namespace Deity { + constexpr uint32 Unknown = 0; + constexpr uint32 Agnostic1 = 140; + constexpr uint32 Bertoxxulous = 201; + constexpr uint32 BrellSirilis = 202; + constexpr uint32 CazicThule = 203; + constexpr uint32 ErollisiMarr = 204; + constexpr uint32 Bristlebane = 205; + constexpr uint32 Innoruuk = 206; + constexpr uint32 Karana = 207; + constexpr uint32 MithanielMarr = 208; + constexpr uint32 Prexus = 209; + constexpr uint32 Quellious = 210; + constexpr uint32 RallosZek = 211; + constexpr uint32 RodcetNife = 212; + constexpr uint32 SolusekRo = 213; + constexpr uint32 TheTribunal = 214; + constexpr uint32 Tunare = 215; + constexpr uint32 Veeshan = 216; + constexpr uint32 Agnostic2 = 396; -namespace EQ -{ - namespace deity { - enum DeityType { - DeityUnknown = 0, - DeityAgnostic_LB = 140, - DeityBertoxxulous = 201, - DeityBrellSirilis, - DeityCazicThule, - DeityErollisiMarr, - DeityBristlebane, - DeityInnoruuk, - DeityKarana, - DeityMithanielMarr, - DeityPrexus, - DeityQuellious, - DeityRallosZek, - DeityRodcetNife, - DeitySolusekRo, - DeityTheTribunal, - DeityTunare, - DeityVeeshan, - DeityAgnostic = 396 - }; + namespace Bitmask { + constexpr uint32 Agnostic = 1; + constexpr uint32 Bertoxxulous = 2; + constexpr uint32 BrellSirilis = 4; + constexpr uint32 CazicThule = 8; + constexpr uint32 ErollisiMarr = 16; + constexpr uint32 Bristlebane = 32; + constexpr uint32 Innoruuk = 64; + constexpr uint32 Karana = 128; + constexpr uint32 MithanielMarr = 256; + constexpr uint32 Prexus = 512; + constexpr uint32 Quellious = 1024; + constexpr uint32 RallosZek = 2048; + constexpr uint32 RodcetNife = 4096; + constexpr uint32 SolusekRo = 8192; + constexpr uint32 TheTribunal = 16384; + constexpr uint32 Tunare = 32768; + constexpr uint32 Veeshan = 65536; + constexpr uint32 All = std::numeric_limits::max(); + } - enum DeityTypeBit : uint32 { - bit_DeityAgnostic = 0x00000001, - bit_DeityBertoxxulous = 0x00000002, - bit_DeityBrellSirilis = 0x00000004, - bit_DeityCazicThule = 0x00000008, - bit_DeityErollisiMarr = 0x00000010, - bit_DeityBristlebane = 0x00000020, - bit_DeityInnoruuk = 0x00000040, - bit_DeityKarana = 0x00000080, - bit_DeityMithanielMarr = 0x00000100, - bit_DeityPrexus = 0x00000200, - bit_DeityQuellious = 0x00000400, - bit_DeityRallosZek = 0x00000800, - bit_DeityRodcetNife = 0x00001000, - bit_DeitySolusekRo = 0x00002000, - bit_DeityTheTribunal = 0x00004000, - bit_DeityTunare = 0x00008000, - bit_DeityVeeshan = 0x00010000, - bit_DeityAll = UINT32_MAX - }; + uint32 GetBitmask(uint32 deity_id); + std::string GetName(uint32 deity_id); + bool IsValid(uint32 deity_id); +} - constexpr int format_as(DeityType type) { return static_cast(type); } +static std::map deity_names = { + { Deity::Agnostic1, "Agnostic" }, + { Deity::Agnostic2, "Agnostic" }, + { Deity::Bertoxxulous, "Bertoxxulous" }, + { Deity::BrellSirilis, "Brell Serilis" }, + { Deity::Bristlebane, "Bristlebane" }, + { Deity::CazicThule, "Cazic-Thule" }, + { Deity::ErollisiMarr, "Erollisi Marr" }, + { Deity::Innoruuk, "Innoruuk" }, + { Deity::Karana, "Karana" }, + { Deity::MithanielMarr, "Mithaniel Marr" }, + { Deity::Prexus, "Prexus" }, + { Deity::Quellious, "Quellious" }, + { Deity::RallosZek, "Rallos Zek" }, + { Deity::RodcetNife, "Rodcet Nife" }, + { Deity::SolusekRo, "Solusek Ro" }, + { Deity::TheTribunal, "The Tribunal" }, + { Deity::Tunare, "Tunare" }, + { Deity::Veeshan, "Veeshan" } +}; - extern DeityTypeBit GetDeityBitmask(DeityType deity_type); - extern std::string GetDeityName(DeityType deity_type); - extern const std::map& GetDeityMap(); - - } /*deity*/ - -} /*EQEmu*/ +static std::map deity_bitmasks = { + { Deity::Agnostic1, Deity::Bitmask::Agnostic }, + { Deity::Agnostic2, Deity::Bitmask::Agnostic }, + { Deity::Bertoxxulous, Deity::Bitmask::Bertoxxulous }, + { Deity::BrellSirilis, Deity::Bitmask::BrellSirilis }, + { Deity::CazicThule, Deity::Bitmask::CazicThule }, + { Deity::ErollisiMarr, Deity::Bitmask::ErollisiMarr }, + { Deity::Bristlebane, Deity::Bitmask::Bristlebane }, + { Deity::Innoruuk, Deity::Bitmask::Innoruuk }, + { Deity::Karana, Deity::Bitmask::Karana }, + { Deity::MithanielMarr, Deity::Bitmask::MithanielMarr }, + { Deity::Prexus, Deity::Bitmask::Prexus }, + { Deity::Quellious, Deity::Bitmask::Quellious }, + { Deity::RallosZek, Deity::Bitmask::RallosZek }, + { Deity::RodcetNife, Deity::Bitmask::RodcetNife }, + { Deity::SolusekRo, Deity::Bitmask::SolusekRo }, + { Deity::TheTribunal, Deity::Bitmask::TheTribunal }, + { Deity::Tunare, Deity::Bitmask::Tunare }, + { Deity::Veeshan, Deity::Bitmask::Veeshan } +}; #endif /* COMMON_DEITY_H */ diff --git a/common/inventory_profile.cpp b/common/inventory_profile.cpp index b8d77edbf..b07ce8f74 100644 --- a/common/inventory_profile.cpp +++ b/common/inventory_profile.cpp @@ -276,7 +276,7 @@ bool EQ::InventoryProfile::SwapItem( SwapItemFailState &fail_state, uint16 race_id, uint8 class_id, - uint16 deity_id, + uint32 deity_id, uint8 level ) { fail_state = swapInvalid; @@ -354,7 +354,7 @@ bool EQ::InventoryProfile::SwapItem( fail_state = swapRaceClass; return false; } - if (deity_id && source_item->Deity && !(deity::GetDeityBitmask((deity::DeityType)deity_id) & source_item->Deity)) { + if (deity_id && source_item->Deity && !(Deity::GetBitmask(deity_id) & source_item->Deity)) { fail_state = swapDeity; return false; } @@ -380,7 +380,7 @@ bool EQ::InventoryProfile::SwapItem( fail_state = swapRaceClass; return false; } - if (deity_id && destination_item->Deity && !(deity::GetDeityBitmask((deity::DeityType)deity_id) & destination_item->Deity)) { + if (deity_id && destination_item->Deity && !(Deity::GetBitmask(deity_id) & destination_item->Deity)) { fail_state = swapDeity; return false; } diff --git a/common/inventory_profile.h b/common/inventory_profile.h index 657668a3e..42dba9619 100644 --- a/common/inventory_profile.h +++ b/common/inventory_profile.h @@ -132,7 +132,7 @@ namespace EQ // Swap items in inventory enum SwapItemFailState : int8 { swapInvalid = -1, swapPass = 0, swapNotAllowed, swapNullData, swapRaceClass, swapDeity, swapLevel }; - bool SwapItem(int16 source_slot, int16 destination_slot, SwapItemFailState& fail_state, uint16 race_id = Race::Doug, uint8 class_id = Class::None, uint16 deity_id = deity::DeityType::DeityUnknown, uint8 level = 0); + bool SwapItem(int16 source_slot, int16 destination_slot, SwapItemFailState& fail_state, uint16 race_id = Race::Doug, uint8 class_id = Class::None, uint32 deity_id = Deity::Unknown, uint8 level = 0); // Remove item from inventory bool DeleteItem(int16 slot_id, int16 quantity = 0); diff --git a/world/worlddb.cpp b/world/worlddb.cpp index dcf03bc5b..986843da5 100644 --- a/world/worlddb.cpp +++ b/world/worlddb.cpp @@ -670,7 +670,7 @@ void WorldDatabase::SetTitaniumDefaultStartZone(PlayerProfile_Struct* in_pp, Cha { case StartZoneIndex::Odus: { - if (in_cc->deity == EQ::deity::DeityCazicThule) // Cazic-Thule Erudites go to Paineel + if (in_cc->deity == Deity::CazicThule) // Cazic-Thule Erudites go to Paineel { in_pp->zone_id = Zones::PAINEEL; // paineel in_pp->binds[0].zone_id = Zones::PAINEEL; diff --git a/zone/beacon.cpp b/zone/beacon.cpp index 006d0e1ff..09ce44453 100644 --- a/zone/beacon.cpp +++ b/zone/beacon.cpp @@ -53,7 +53,7 @@ Beacon::Beacon(const glm::vec4 &in_pos, int lifetime) : Mob( Race::InvisibleMan, // in_race Class::None, // in_class BT_NoTarget, // in_bodytype - 0, // in_deity + Deity::Unknown, // in_deity 0, // in_level 0, // in_npctype_id 0.0f, // in_size diff --git a/zone/bot.cpp b/zone/bot.cpp index ac971ff31..c2bbd0b5b 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -652,7 +652,7 @@ NPCType *Bot::FillNPCTypeStruct( n->race = botRace; n->class_ = botClass; n->bodytype = 1; - n->deity = EQ::deity::DeityAgnostic; + n->deity = Deity::Agnostic1; n->level = botLevel; n->npc_spells_id = botSpellsID; n->AC = ac; @@ -712,7 +712,7 @@ NPCType *Bot::CreateDefaultNPCTypeStructForBot( n->race = botRace; n->class_ = botClass; n->bodytype = 1; - n->deity = EQ::deity::DeityAgnostic; + n->deity = Deity::Agnostic1; n->level = botLevel; n->AC = 12; n->ATK = 75; diff --git a/zone/client.cpp b/zone/client.cpp index 1aed949bf..b5696d759 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -96,7 +96,7 @@ Client::Client(EQStreamInterface *ieqs) : Mob( Race::Doug, // in_race Class::None, // in_class BT_Humanoid, // in_bodytype - 0, // in_deity + Deity::Unknown, // in_deity 0, // in_level 0, // in_npctype_id 0.0f, // in_size diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index d97871c3d..13e76d85d 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -513,7 +513,7 @@ void Perl__sfollow() quest_manager.sfollow(); } -void Perl__changedeity(int deity_id) +void Perl__changedeity(uint32 deity_id) { quest_manager.changedeity(deity_id); } @@ -5850,9 +5850,9 @@ uint16 Perl__get_class_bitmask(uint8 class_id) return GetPlayerClassBit(class_id); } -uint32 Perl__get_deity_bitmask(uint16 deity_id) +uint32 Perl__get_deity_bitmask(uint32 deity_id) { - return static_cast(EQ::deity::GetDeityBitmask(static_cast(deity_id))); + return Deity::GetBitmask(deity_id); } uint16 Perl__get_race_bitmask(uint16 race_id) diff --git a/zone/encounter.cpp b/zone/encounter.cpp index 512178028..553071ac8 100644 --- a/zone/encounter.cpp +++ b/zone/encounter.cpp @@ -41,7 +41,7 @@ Encounter::Encounter(const char *enc_name) : Mob( Race::InvisibleMan, // in_race Class::None, // in_class BT_NoTarget, // in_bodytype - 0, // in_deity + Deity::Unknown, // in_deity 0, // in_level 0, // in_npcype_id 0, // in_size diff --git a/zone/gm_commands/find/deity.cpp b/zone/gm_commands/find/deity.cpp index 25d9365d7..be295bfed 100644 --- a/zone/gm_commands/find/deity.cpp +++ b/zone/gm_commands/find/deity.cpp @@ -3,46 +3,45 @@ void FindDeity(Client *c, const Seperator *sep) { if (sep->IsNumber(2)) { - const auto deity_id = static_cast(Strings::ToInt(sep->arg[2])); - const auto& deity_name = EQ::deity::GetDeityName(deity_id); - if (!deity_name.empty()) { - const auto deity_bit = EQ::deity::GetDeityBitmask(deity_id); - + const uint32 deity_id = Strings::ToUnsignedInt(sep->arg[2]); + const std::string& deity_name = Deity::GetName(deity_id); + if (Strings::EqualFold(deity_name, "UNKNOWN DEITY")) { c->Message( Chat::White, fmt::format( - "Deity {} | {} ({})", - deity_id, - deity_name, - Strings::Commify(deity_bit) + "Deity ID {} does not exist.", + deity_id ).c_str() ); - return; } + const uint32 deity_bitmask = Deity::GetBitmask(deity_id); + c->Message( Chat::White, fmt::format( - "Deity ID {} was not found.", - deity_id + "Deity {} | {} ({})", + deity_id, + deity_name, + Strings::Commify(deity_bitmask) ).c_str() ); return; } - const auto& search_criteria = Strings::ToLower(sep->argplus[2]); + const std::string& search_criteria = Strings::ToLower(sep->argplus[2]); - auto found_count = 0; + uint32 found_count = 0; - for (const auto& d : EQ::deity::GetDeityMap()) { - const auto& deity_name_lower = Strings::ToLower(d.second); + for (const auto& d : deity_names) { + const std::string& deity_name_lower = Strings::ToLower(d.second); if (!Strings::Contains(deity_name_lower, search_criteria)) { continue; } - const auto deity_bit = EQ::deity::GetDeityBitmask(d.first); + const uint32 deity_bitmask = Deity::GetBitmask(d.first); c->Message( Chat::White, @@ -50,7 +49,7 @@ void FindDeity(Client *c, const Seperator *sep) "Deity {} | {} ({})", d.first, d.second, - Strings::Commify(deity_bit) + Strings::Commify(deity_bitmask) ).c_str() ); diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index e25a6a37b..7f175dc3d 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -157,7 +157,7 @@ uint16 Lua_Client::GetClassBitmask() { uint32 Lua_Client::GetDeityBitmask() { Lua_Safe_Call_Int(); - return static_cast(EQ::deity::GetDeityBitmask(static_cast(GetDeity()))); + return Deity::GetBitmask(GetDeity()); } uint16 Lua_Client::GetRaceBitmask() { diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 10123f1c3..6e78d2849 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -5484,8 +5484,8 @@ uint16 lua_get_class_bitmask(uint8 class_id) { return GetPlayerClassBit(class_id); } -uint32 lua_get_deity_bitmask(uint16 deity_id) { - return static_cast(EQ::deity::GetDeityBitmask(static_cast(deity_id))); +uint32 lua_get_deity_bitmask(uint32 deity_id) { + return Deity::GetBitmask(deity_id); } uint16 lua_get_race_bitmask(uint16 race_id) { diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index 69fe0e935..f119c1e7a 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -3301,7 +3301,7 @@ bool Lua_Mob::IsAlwaysAggro() std::string Lua_Mob::GetDeityName() { Lua_Safe_Call_String(); - return EQ::deity::GetDeityName(static_cast(self->GetDeity())); + return Deity::GetName(self->GetDeity()); } luabind::object Lua_Mob::GetBuffs(lua_State* L) diff --git a/zone/mob.h b/zone/mob.h index d81ceb4df..deef3b890 100644 --- a/zone/mob.h +++ b/zone/mob.h @@ -556,7 +556,7 @@ public: virtual inline uint8 GetBaseGender() const { return base_gender; } virtual uint16 GetFactionRace(); virtual inline uint16 GetDeity() const { return deity; } - virtual EQ::deity::DeityTypeBit GetDeityBit() { return EQ::deity::GetDeityBitmask((EQ::deity::DeityType)deity); } + virtual uint32 GetDeityBit() { return Deity::GetBitmask(deity); } inline uint16 GetRace() const { return race; } inline uint16 GetModel() const { return (use_model == 0) ? race : use_model; } inline uint8 GetGender() const { return gender; } diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index 391e82b1f..cbe0765ed 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -2014,7 +2014,7 @@ uint16_t Perl_Client_GetClassBitmask(Client* self) uint32_t Perl_Client_GetDeityBitmask(Client* self) { - return static_cast(EQ::deity::GetDeityBitmask(static_cast(self->GetDeity()))); + return Deity::GetBitmask(self->GetDeity()); } uint16_t Perl_Client_GetRaceBitmask(Client* self) // @categories Stats and Attributes diff --git a/zone/perl_mob.cpp b/zone/perl_mob.cpp index b805400cf..6bfbba9c4 100644 --- a/zone/perl_mob.cpp +++ b/zone/perl_mob.cpp @@ -3427,7 +3427,7 @@ bool Perl_Mob_IsAlwaysAggro(Mob* self) std::string Perl_Mob_GetDeityName(Mob* self) { - return EQ::deity::GetDeityName(static_cast(self->GetDeity())); + return Deity::GetName(self->GetDeity()); } perl::array Perl_Mob_GetBuffs(Mob* self) diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index b57c738fa..0dbf67720 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -1371,7 +1371,7 @@ void QuestManager::sfollow() { owner->SetFollowID(0); } -void QuestManager::changedeity(int deity_id) { +void QuestManager::changedeity(uint32 deity_id) { QuestManagerCurrentQuestVars(); //Changes the deity. if(initiator) @@ -4364,7 +4364,7 @@ std::string QuestManager::getgendername(uint32 gender_id) { } std::string QuestManager::getdeityname(uint32 deity_id) { - return EQ::deity::GetDeityName(static_cast(deity_id)); + return Deity::GetName(deity_id); } std::string QuestManager::getinventoryslotname(int16 slot_id) { diff --git a/zone/questmgr.h b/zone/questmgr.h index 4f381203c..6b97ae6ae 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -110,7 +110,7 @@ public: void settarget(const char *type, int target_id); void follow(int entity_id, int distance); void sfollow(); - void changedeity(int deity_id); + void changedeity(uint32 deity_id); void exp(int amt); void level(int newlevel); void traindisc(uint32 discipline_tome_item_id);