[Cleanup] Cleanup Deity Code (#4363)

* [Cleanup] Cleanup Deity-based Code

* Final push.

* Update deity.cpp

* Update deity.cpp

* Update deity.cpp

* Cleanup

* Cleanup

* [Cleanup] Cleanup Skill-based Code

* Update deity.cpp

* Update lua_client.cpp
This commit is contained in:
Alex King 2024-06-01 19:21:26 -04:00 committed by GitHub
parent 76b9ce0ac1
commit caa647dc6b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 131 additions and 163 deletions

View File

@ -19,81 +19,17 @@
#include "deity.h" #include "deity.h"
EQ::deity::DeityTypeBit EQ::deity::GetDeityBitmask(DeityType deity_type) uint32 Deity::GetBitmask(uint32 deity_id)
{ {
switch (deity_type) { return IsValid(deity_id) ? deity_bitmasks[deity_id] : Deity::Bitmask::All;
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;
}
} }
const std::map<EQ::deity::DeityType, std::string>& EQ::deity::GetDeityMap() std::string Deity::GetName(uint32 deity_id)
{ {
static const std::map<EQ::deity::DeityType, std::string> deity_map = { return IsValid(deity_id) ? deity_names[deity_id] : "UNKNOWN DEITY";
{ 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;
} }
std::string EQ::deity::GetDeityName(DeityType deity_type) bool Deity::IsValid(uint32 deity_id)
{ {
return deity_names.find(deity_id) != deity_names.end();
if (EQ::deity::GetDeityMap().find(deity_type) != EQ::deity::GetDeityMap().end()) {
return EQ::deity::GetDeityMap().find(deity_type)->second;
}
return std::string();
} }

View File

@ -23,62 +23,95 @@
#include "types.h" #include "types.h"
#include <map> #include <map>
#include <string> #include <string>
#include <limits>
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 Bitmask {
{ constexpr uint32 Agnostic = 1;
namespace deity { constexpr uint32 Bertoxxulous = 2;
enum DeityType { constexpr uint32 BrellSirilis = 4;
DeityUnknown = 0, constexpr uint32 CazicThule = 8;
DeityAgnostic_LB = 140, constexpr uint32 ErollisiMarr = 16;
DeityBertoxxulous = 201, constexpr uint32 Bristlebane = 32;
DeityBrellSirilis, constexpr uint32 Innoruuk = 64;
DeityCazicThule, constexpr uint32 Karana = 128;
DeityErollisiMarr, constexpr uint32 MithanielMarr = 256;
DeityBristlebane, constexpr uint32 Prexus = 512;
DeityInnoruuk, constexpr uint32 Quellious = 1024;
DeityKarana, constexpr uint32 RallosZek = 2048;
DeityMithanielMarr, constexpr uint32 RodcetNife = 4096;
DeityPrexus, constexpr uint32 SolusekRo = 8192;
DeityQuellious, constexpr uint32 TheTribunal = 16384;
DeityRallosZek, constexpr uint32 Tunare = 32768;
DeityRodcetNife, constexpr uint32 Veeshan = 65536;
DeitySolusekRo, constexpr uint32 All = std::numeric_limits<uint32>::max();
DeityTheTribunal, }
DeityTunare,
DeityVeeshan,
DeityAgnostic = 396
};
enum DeityTypeBit : uint32 { uint32 GetBitmask(uint32 deity_id);
bit_DeityAgnostic = 0x00000001, std::string GetName(uint32 deity_id);
bit_DeityBertoxxulous = 0x00000002, bool IsValid(uint32 deity_id);
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
};
constexpr int format_as(DeityType type) { return static_cast<int>(type); } static std::map<uint32, std::string> 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); static std::map<uint32, uint32> deity_bitmasks = {
extern std::string GetDeityName(DeityType deity_type); { Deity::Agnostic1, Deity::Bitmask::Agnostic },
extern const std::map<DeityType, std::string>& GetDeityMap(); { Deity::Agnostic2, Deity::Bitmask::Agnostic },
{ Deity::Bertoxxulous, Deity::Bitmask::Bertoxxulous },
} /*deity*/ { Deity::BrellSirilis, Deity::Bitmask::BrellSirilis },
{ Deity::CazicThule, Deity::Bitmask::CazicThule },
} /*EQEmu*/ { 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 */ #endif /* COMMON_DEITY_H */

View File

@ -276,7 +276,7 @@ bool EQ::InventoryProfile::SwapItem(
SwapItemFailState &fail_state, SwapItemFailState &fail_state,
uint16 race_id, uint16 race_id,
uint8 class_id, uint8 class_id,
uint16 deity_id, uint32 deity_id,
uint8 level uint8 level
) { ) {
fail_state = swapInvalid; fail_state = swapInvalid;
@ -354,7 +354,7 @@ bool EQ::InventoryProfile::SwapItem(
fail_state = swapRaceClass; fail_state = swapRaceClass;
return false; 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; fail_state = swapDeity;
return false; return false;
} }
@ -380,7 +380,7 @@ bool EQ::InventoryProfile::SwapItem(
fail_state = swapRaceClass; fail_state = swapRaceClass;
return false; 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; fail_state = swapDeity;
return false; return false;
} }

View File

@ -132,7 +132,7 @@ namespace EQ
// Swap items in inventory // Swap items in inventory
enum SwapItemFailState : int8 { swapInvalid = -1, swapPass = 0, swapNotAllowed, swapNullData, swapRaceClass, swapDeity, swapLevel }; 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 // Remove item from inventory
bool DeleteItem(int16 slot_id, int16 quantity = 0); bool DeleteItem(int16 slot_id, int16 quantity = 0);

View File

@ -670,7 +670,7 @@ void WorldDatabase::SetTitaniumDefaultStartZone(PlayerProfile_Struct* in_pp, Cha
{ {
case StartZoneIndex::Odus: 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->zone_id = Zones::PAINEEL; // paineel
in_pp->binds[0].zone_id = Zones::PAINEEL; in_pp->binds[0].zone_id = Zones::PAINEEL;

View File

@ -53,7 +53,7 @@ Beacon::Beacon(const glm::vec4 &in_pos, int lifetime) : Mob(
Race::InvisibleMan, // in_race Race::InvisibleMan, // in_race
Class::None, // in_class Class::None, // in_class
BT_NoTarget, // in_bodytype BT_NoTarget, // in_bodytype
0, // in_deity Deity::Unknown, // in_deity
0, // in_level 0, // in_level
0, // in_npctype_id 0, // in_npctype_id
0.0f, // in_size 0.0f, // in_size

View File

@ -652,7 +652,7 @@ NPCType *Bot::FillNPCTypeStruct(
n->race = botRace; n->race = botRace;
n->class_ = botClass; n->class_ = botClass;
n->bodytype = 1; n->bodytype = 1;
n->deity = EQ::deity::DeityAgnostic; n->deity = Deity::Agnostic1;
n->level = botLevel; n->level = botLevel;
n->npc_spells_id = botSpellsID; n->npc_spells_id = botSpellsID;
n->AC = ac; n->AC = ac;
@ -712,7 +712,7 @@ NPCType *Bot::CreateDefaultNPCTypeStructForBot(
n->race = botRace; n->race = botRace;
n->class_ = botClass; n->class_ = botClass;
n->bodytype = 1; n->bodytype = 1;
n->deity = EQ::deity::DeityAgnostic; n->deity = Deity::Agnostic1;
n->level = botLevel; n->level = botLevel;
n->AC = 12; n->AC = 12;
n->ATK = 75; n->ATK = 75;

View File

@ -96,7 +96,7 @@ Client::Client(EQStreamInterface *ieqs) : Mob(
Race::Doug, // in_race Race::Doug, // in_race
Class::None, // in_class Class::None, // in_class
BT_Humanoid, // in_bodytype BT_Humanoid, // in_bodytype
0, // in_deity Deity::Unknown, // in_deity
0, // in_level 0, // in_level
0, // in_npctype_id 0, // in_npctype_id
0.0f, // in_size 0.0f, // in_size

View File

@ -513,7 +513,7 @@ void Perl__sfollow()
quest_manager.sfollow(); quest_manager.sfollow();
} }
void Perl__changedeity(int deity_id) void Perl__changedeity(uint32 deity_id)
{ {
quest_manager.changedeity(deity_id); quest_manager.changedeity(deity_id);
} }
@ -5850,9 +5850,9 @@ uint16 Perl__get_class_bitmask(uint8 class_id)
return GetPlayerClassBit(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<uint32>(EQ::deity::GetDeityBitmask(static_cast<EQ::deity::DeityType>(deity_id))); return Deity::GetBitmask(deity_id);
} }
uint16 Perl__get_race_bitmask(uint16 race_id) uint16 Perl__get_race_bitmask(uint16 race_id)

View File

@ -41,7 +41,7 @@ Encounter::Encounter(const char *enc_name) : Mob(
Race::InvisibleMan, // in_race Race::InvisibleMan, // in_race
Class::None, // in_class Class::None, // in_class
BT_NoTarget, // in_bodytype BT_NoTarget, // in_bodytype
0, // in_deity Deity::Unknown, // in_deity
0, // in_level 0, // in_level
0, // in_npcype_id 0, // in_npcype_id
0, // in_size 0, // in_size

View File

@ -3,10 +3,20 @@
void FindDeity(Client *c, const Seperator *sep) void FindDeity(Client *c, const Seperator *sep)
{ {
if (sep->IsNumber(2)) { if (sep->IsNumber(2)) {
const auto deity_id = static_cast<EQ::deity::DeityType>(Strings::ToInt(sep->arg[2])); const uint32 deity_id = Strings::ToUnsignedInt(sep->arg[2]);
const auto& deity_name = EQ::deity::GetDeityName(deity_id); const std::string& deity_name = Deity::GetName(deity_id);
if (!deity_name.empty()) { if (Strings::EqualFold(deity_name, "UNKNOWN DEITY")) {
const auto deity_bit = EQ::deity::GetDeityBitmask(deity_id); c->Message(
Chat::White,
fmt::format(
"Deity ID {} does not exist.",
deity_id
).c_str()
);
return;
}
const uint32 deity_bitmask = Deity::GetBitmask(deity_id);
c->Message( c->Message(
Chat::White, Chat::White,
@ -14,35 +24,24 @@ void FindDeity(Client *c, const Seperator *sep)
"Deity {} | {} ({})", "Deity {} | {} ({})",
deity_id, deity_id,
deity_name, deity_name,
Strings::Commify(deity_bit) Strings::Commify(deity_bitmask)
).c_str() ).c_str()
); );
return; return;
} }
c->Message( const std::string& search_criteria = Strings::ToLower(sep->argplus[2]);
Chat::White,
fmt::format(
"Deity ID {} was not found.",
deity_id
).c_str()
);
return; uint32 found_count = 0;
}
const auto& search_criteria = Strings::ToLower(sep->argplus[2]); for (const auto& d : deity_names) {
const std::string& deity_name_lower = Strings::ToLower(d.second);
auto found_count = 0;
for (const auto& d : EQ::deity::GetDeityMap()) {
const auto& deity_name_lower = Strings::ToLower(d.second);
if (!Strings::Contains(deity_name_lower, search_criteria)) { if (!Strings::Contains(deity_name_lower, search_criteria)) {
continue; continue;
} }
const auto deity_bit = EQ::deity::GetDeityBitmask(d.first); const uint32 deity_bitmask = Deity::GetBitmask(d.first);
c->Message( c->Message(
Chat::White, Chat::White,
@ -50,7 +49,7 @@ void FindDeity(Client *c, const Seperator *sep)
"Deity {} | {} ({})", "Deity {} | {} ({})",
d.first, d.first,
d.second, d.second,
Strings::Commify(deity_bit) Strings::Commify(deity_bitmask)
).c_str() ).c_str()
); );

View File

@ -157,7 +157,7 @@ uint16 Lua_Client::GetClassBitmask() {
uint32 Lua_Client::GetDeityBitmask() { uint32 Lua_Client::GetDeityBitmask() {
Lua_Safe_Call_Int(); Lua_Safe_Call_Int();
return static_cast<uint32>(EQ::deity::GetDeityBitmask(static_cast<EQ::deity::DeityType>(GetDeity()))); return Deity::GetBitmask(GetDeity());
} }
uint16 Lua_Client::GetRaceBitmask() { uint16 Lua_Client::GetRaceBitmask() {

View File

@ -5484,8 +5484,8 @@ uint16 lua_get_class_bitmask(uint8 class_id) {
return GetPlayerClassBit(class_id); return GetPlayerClassBit(class_id);
} }
uint32 lua_get_deity_bitmask(uint16 deity_id) { uint32 lua_get_deity_bitmask(uint32 deity_id) {
return static_cast<uint32>(EQ::deity::GetDeityBitmask(static_cast<EQ::deity::DeityType>(deity_id))); return Deity::GetBitmask(deity_id);
} }
uint16 lua_get_race_bitmask(uint16 race_id) { uint16 lua_get_race_bitmask(uint16 race_id) {

View File

@ -3301,7 +3301,7 @@ bool Lua_Mob::IsAlwaysAggro()
std::string Lua_Mob::GetDeityName() std::string Lua_Mob::GetDeityName()
{ {
Lua_Safe_Call_String(); Lua_Safe_Call_String();
return EQ::deity::GetDeityName(static_cast<EQ::deity::DeityType>(self->GetDeity())); return Deity::GetName(self->GetDeity());
} }
luabind::object Lua_Mob::GetBuffs(lua_State* L) luabind::object Lua_Mob::GetBuffs(lua_State* L)

View File

@ -556,7 +556,7 @@ public:
virtual inline uint8 GetBaseGender() const { return base_gender; } virtual inline uint8 GetBaseGender() const { return base_gender; }
virtual uint16 GetFactionRace(); virtual uint16 GetFactionRace();
virtual inline uint16 GetDeity() const { return deity; } 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 GetRace() const { return race; }
inline uint16 GetModel() const { return (use_model == 0) ? race : use_model; } inline uint16 GetModel() const { return (use_model == 0) ? race : use_model; }
inline uint8 GetGender() const { return gender; } inline uint8 GetGender() const { return gender; }

View File

@ -2014,7 +2014,7 @@ uint16_t Perl_Client_GetClassBitmask(Client* self)
uint32_t Perl_Client_GetDeityBitmask(Client* self) uint32_t Perl_Client_GetDeityBitmask(Client* self)
{ {
return static_cast<uint32_t>(EQ::deity::GetDeityBitmask(static_cast<EQ::deity::DeityType>(self->GetDeity()))); return Deity::GetBitmask(self->GetDeity());
} }
uint16_t Perl_Client_GetRaceBitmask(Client* self) // @categories Stats and Attributes uint16_t Perl_Client_GetRaceBitmask(Client* self) // @categories Stats and Attributes

View File

@ -3427,7 +3427,7 @@ bool Perl_Mob_IsAlwaysAggro(Mob* self)
std::string Perl_Mob_GetDeityName(Mob* self) std::string Perl_Mob_GetDeityName(Mob* self)
{ {
return EQ::deity::GetDeityName(static_cast<EQ::deity::DeityType>(self->GetDeity())); return Deity::GetName(self->GetDeity());
} }
perl::array Perl_Mob_GetBuffs(Mob* self) perl::array Perl_Mob_GetBuffs(Mob* self)

View File

@ -1371,7 +1371,7 @@ void QuestManager::sfollow() {
owner->SetFollowID(0); owner->SetFollowID(0);
} }
void QuestManager::changedeity(int deity_id) { void QuestManager::changedeity(uint32 deity_id) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
//Changes the deity. //Changes the deity.
if(initiator) if(initiator)
@ -4364,7 +4364,7 @@ std::string QuestManager::getgendername(uint32 gender_id) {
} }
std::string QuestManager::getdeityname(uint32 deity_id) { std::string QuestManager::getdeityname(uint32 deity_id) {
return EQ::deity::GetDeityName(static_cast<EQ::deity::DeityType>(deity_id)); return Deity::GetName(deity_id);
} }
std::string QuestManager::getinventoryslotname(int16 slot_id) { std::string QuestManager::getinventoryslotname(int16 slot_id) {

View File

@ -110,7 +110,7 @@ public:
void settarget(const char *type, int target_id); void settarget(const char *type, int target_id);
void follow(int entity_id, int distance); void follow(int entity_id, int distance);
void sfollow(); void sfollow();
void changedeity(int deity_id); void changedeity(uint32 deity_id);
void exp(int amt); void exp(int amt);
void level(int newlevel); void level(int newlevel);
void traindisc(uint32 discipline_tome_item_id); void traindisc(uint32 discipline_tome_item_id);