diff --git a/client_files/export/main.cpp b/client_files/export/main.cpp index 3e66e259d..f7519d040 100644 --- a/client_files/export/main.cpp +++ b/client_files/export/main.cpp @@ -40,7 +40,6 @@ WorldContentService content_service; PlayerEventLogs player_event_logs; -EvolvingItemsManager evolving_items_manager; void ExportSpells(SharedDatabase *db); void ExportSkillCaps(SharedDatabase *db); diff --git a/client_files/import/main.cpp b/client_files/import/main.cpp index 312a8a5d4..ab3d184df 100644 --- a/client_files/import/main.cpp +++ b/client_files/import/main.cpp @@ -34,7 +34,6 @@ WorldContentService content_service; PlayerEventLogs player_event_logs; -EvolvingItemsManager evolving_items_manager; void ImportSpells(SharedDatabase *db); void ImportSkillCaps(SharedDatabase *db); diff --git a/common/evolving_items.cpp b/common/evolving_items.cpp index b74efc17b..f7f99b7a6 100644 --- a/common/evolving_items.cpp +++ b/common/evolving_items.cpp @@ -21,8 +21,8 @@ void EvolvingItemsManager::LoadEvolvingItems() const results.begin(), results.end(), std::inserter( - evolving_items_manager.GetEvolvingItemsCache(), - evolving_items_manager.GetEvolvingItemsCache().end() + EvolvingItemsManager::Instance()->GetEvolvingItemsCache(), + EvolvingItemsManager::Instance()->GetEvolvingItemsCache().end() ), [](const ItemsEvolvingDetailsRepository::ItemsEvolvingDetails &x) { return std::make_pair(x.item_id, x); @@ -42,13 +42,13 @@ void EvolvingItemsManager::SetContentDatabase(Database *db) double EvolvingItemsManager::CalculateProgression(const uint64 current_amount, const uint32 item_id) { - if (!evolving_items_manager.GetEvolvingItemsCache().contains(item_id)) { + if (!EvolvingItemsManager::Instance()->GetEvolvingItemsCache().contains(item_id)) { return 0; } - return evolving_items_manager.GetEvolvingItemsCache().at(item_id).required_amount > 0 + return EvolvingItemsManager::Instance()->GetEvolvingItemsCache().at(item_id).required_amount > 0 ? static_cast(current_amount) - / static_cast(evolving_items_manager.GetEvolvingItemsCache().at(item_id).required_amount) * 100 + / static_cast(EvolvingItemsManager::Instance()->GetEvolvingItemsCache().at(item_id).required_amount) * 100 : 0; } @@ -73,7 +73,7 @@ void EvolvingItemsManager::DoLootChecks(const uint32 char_id, const uint16 slot_ e.character_id = char_id; e.item_id = inst.GetID(); e.equipped = inst.GetEvolveEquipped(); - e.final_item_id = evolving_items_manager.GetFinalItemID(inst); + e.final_item_id = EvolvingItemsManager::Instance()->GetFinalItemID(inst); auto r = CharacterEvolvingItemsRepository::InsertOne(*m_db, e); e.id = r.id; @@ -96,20 +96,20 @@ uint32 EvolvingItemsManager::GetFinalItemID(const EQ::ItemInstance &inst) const } const auto start_iterator = std::ranges::find_if( - evolving_items_manager.GetEvolvingItemsCache().cbegin(), - evolving_items_manager.GetEvolvingItemsCache().cend(), + EvolvingItemsManager::Instance()->GetEvolvingItemsCache().cbegin(), + EvolvingItemsManager::Instance()->GetEvolvingItemsCache().cend(), [&](const std::pair &a) { return a.second.item_evo_id == inst.GetEvolveLoreID(); } ); - if (start_iterator == std::end(evolving_items_manager.GetEvolvingItemsCache())) { + if (start_iterator == std::end(EvolvingItemsManager::Instance()->GetEvolvingItemsCache())) { return 0; } const auto final_id = std::ranges::max_element( start_iterator, - evolving_items_manager.GetEvolvingItemsCache().cend(), + EvolvingItemsManager::Instance()->GetEvolvingItemsCache().cend(), [&]( const std::pair &a, const std::pair &b @@ -131,15 +131,15 @@ uint32 EvolvingItemsManager::GetNextEvolveItemID(const EQ::ItemInstance &inst) c int8 const current_level = inst.GetEvolveLvl(); const auto iterator = std::ranges::find_if( - evolving_items_manager.GetEvolvingItemsCache().cbegin(), - evolving_items_manager.GetEvolvingItemsCache().cend(), + EvolvingItemsManager::Instance()->GetEvolvingItemsCache().cbegin(), + EvolvingItemsManager::Instance()->GetEvolvingItemsCache().cend(), [&](const std::pair &a) { return a.second.item_evo_id == inst.GetEvolveLoreID() && a.second.item_evolve_level == current_level + 1; } ); - if (iterator == std::end(evolving_items_manager.GetEvolvingItemsCache())) { + if (iterator == std::end(EvolvingItemsManager::Instance()->GetEvolvingItemsCache())) { return 0; } @@ -255,8 +255,8 @@ EvolveTransfer EvolvingItemsManager::DetermineTransferResults( return ets; } - auto evolving_details_inst_from = evolving_items_manager.GetEvolveItemDetails(inst_from.GetID()); - auto evolving_details_inst_to = evolving_items_manager.GetEvolveItemDetails(inst_to.GetID()); + auto evolving_details_inst_from = EvolvingItemsManager::Instance()->GetEvolveItemDetails(inst_from.GetID()); + auto evolving_details_inst_to = EvolvingItemsManager::Instance()->GetEvolveItemDetails(inst_to.GetID()); if (!evolving_details_inst_from.id || !evolving_details_inst_to.id) { return ets; @@ -272,10 +272,10 @@ EvolveTransfer EvolvingItemsManager::DetermineTransferResults( compatibility = 30; } - xp = evolving_items_manager.GetTotalEarnedXP(inst_from) * compatibility / 100; - auto results = evolving_items_manager.GetNextItemByXP(inst_to, xp); + xp = EvolvingItemsManager::Instance()->GetTotalEarnedXP(inst_from) * compatibility / 100; + auto results = EvolvingItemsManager::Instance()->GetNextItemByXP(inst_to, xp); - ets.item_from_id = evolving_items_manager.GetFirstItemInLoreGroup(inst_from.GetEvolveLoreID()); + ets.item_from_id = EvolvingItemsManager::Instance()->GetFirstItemInLoreGroup(inst_from.GetEvolveLoreID()); ets.item_from_current_amount = results.from_current_amount; ets.item_to_id = results.new_item_id; ets.item_to_current_amount = results.new_current_amount; diff --git a/common/evolving_items.h b/common/evolving_items.h index 56f7e4be8..3bdb4d697 100644 --- a/common/evolving_items.h +++ b/common/evolving_items.h @@ -56,12 +56,15 @@ public: std::map& GetEvolvingItemsCache() { return m_evolving_items_cache; } std::vector GetEvolveIDItems(uint32 evolve_id); + static EvolvingItemsManager* Instance() + { + static EvolvingItemsManager instance; + return &instance; + } private: std::map m_evolving_items_cache; Database * m_db; Database * m_content_db; }; -extern EvolvingItemsManager evolving_items_manager; - #endif //EVOLVING_H diff --git a/common/item_instance.h b/common/item_instance.h index 805ac019d..99edfb570 100644 --- a/common/item_instance.h +++ b/common/item_instance.h @@ -335,7 +335,7 @@ namespace EQ void SetEvolveAddToCurrentAmount(const uint64 in) const { m_evolving_details.current_amount += in; } void SetEvolveFinalItemID(const uint32 in) const { m_evolving_details.final_item_id = in; } bool TransferOwnership(Database& db, const uint32 to_char_id) const; - void CalculateEvolveProgression() const { m_evolving_details.progression = evolving_items_manager.CalculateProgression(GetEvolveCurrentAmount(), GetID()); } + void CalculateEvolveProgression() const { m_evolving_details.progression = EvolvingItemsManager::Instance()->CalculateProgression(GetEvolveCurrentAmount(), GetID()); } protected: ////////////////////////// diff --git a/common/shareddb.cpp b/common/shareddb.cpp index d143dfbfd..0880e1f2e 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -824,7 +824,7 @@ bool SharedDatabase::GetInventory(Client *c) e.character_id = char_id; e.item_id = item_id; e.equipped = inst->GetEvolveEquipped(); - e.final_item_id = evolving_items_manager.GetFinalItemID(*inst); + e.final_item_id = EvolvingItemsManager::Instance()->GetFinalItemID(*inst); auto r = CharacterEvolvingItemsRepository::InsertOne(*this, e); e.id = r.id; diff --git a/shared_memory/main.cpp b/shared_memory/main.cpp index a9a043f58..564841b9a 100644 --- a/shared_memory/main.cpp +++ b/shared_memory/main.cpp @@ -37,7 +37,6 @@ WorldContentService content_service; PlayerEventLogs player_event_logs; -EvolvingItemsManager evolving_items_manager; #ifdef _WINDOWS #include diff --git a/world/main.cpp b/world/main.cpp index 666a01a45..6d997291b 100644 --- a/world/main.cpp +++ b/world/main.cpp @@ -110,7 +110,6 @@ const WorldConfig *Config; WorldContentService content_service; WebInterfaceList web_interface; PlayerEventLogs player_event_logs; -EvolvingItemsManager evolving_items_manager; void CatchSignal(int sig_num); diff --git a/zone/client_evolving_items.cpp b/zone/client_evolving_items.cpp index fef8fa085..316034308 100644 --- a/zone/client_evolving_items.cpp +++ b/zone/client_evolving_items.cpp @@ -92,7 +92,7 @@ void Client::ProcessEvolvingItem(const uint64 exp, const Mob *mob) continue; } - if (!evolving_items_manager.GetEvolvingItemsCache().contains(inst->GetID())) { + if (!EvolvingItemsManager::Instance()->GetEvolvingItemsCache().contains(inst->GetID())) { LogEvolveItem( "Character ID {} has an evolving item that is not found in the db. Please check your " "items_evolving_details table for item id {}", @@ -102,8 +102,8 @@ void Client::ProcessEvolvingItem(const uint64 exp, const Mob *mob) continue; } - auto const type = evolving_items_manager.GetEvolvingItemsCache().at(inst->GetID()).type; - auto const sub_type = evolving_items_manager.GetEvolvingItemsCache().at(inst->GetID()).sub_type; + auto const type = EvolvingItemsManager::Instance()->GetEvolvingItemsCache().at(inst->GetID()).type; + auto const sub_type = EvolvingItemsManager::Instance()->GetEvolvingItemsCache().at(inst->GetID()).sub_type; LogEvolveItemDetail( "CharacterID [{}] item id [{}] type {} sub_type {} is Evolving. Continue processing...", @@ -301,7 +301,7 @@ void Client::DoEvolveItemDisplayFinalResult(const EQApplicationPacket *app) "Character ID [{}] requested to view final evolve item id [{}] for evolve item id [{}]", CharacterID(), item_id, - evolving_items_manager.GetFirstItemInLoreGroupByItemID(item_id) + EvolvingItemsManager::Instance()->GetFirstItemInLoreGroupByItemID(item_id) ); inst->SetEvolveProgression(100); @@ -322,7 +322,7 @@ bool Client::DoEvolveCheckProgression(EQ::ItemInstance &inst) return false; } - const auto new_item_id = evolving_items_manager.GetNextEvolveItemID(inst); + const auto new_item_id = EvolvingItemsManager::Instance()->GetNextEvolveItemID(inst); if (!new_item_id) { return false; } @@ -387,12 +387,12 @@ bool Client::DoEvolveCheckProgression(EQ::ItemInstance &inst) PlayerEvent::EvolveItem e{}; RemoveItemBySerialNumber(inst.GetSerialNumber()); - evolving_items_manager.LoadPlayerEvent(inst, e); + EvolvingItemsManager::Instance()->LoadPlayerEvent(inst, e); e.status = "Evolved Item due to obtaining progression - Old Evolve Item removed from inventory."; RecordPlayerEventLog(PlayerEvent::EVOLVE_ITEM, e); PushItemOnCursor(*new_inst, true); - evolving_items_manager.LoadPlayerEvent(*new_inst, e); + EvolvingItemsManager::Instance()->LoadPlayerEvent(*new_inst, e); e.status = "Evolved Item due to obtaining progression - New Evolve Item placed in inventory."; RecordPlayerEventLog(PlayerEvent::EVOLVE_ITEM, e); @@ -437,7 +437,7 @@ void Client::SendEvolveXPWindowDetails(const EQApplicationPacket *app) return; } - const auto results = evolving_items_manager.DetermineTransferResults(*inst_from, *inst_to); + const auto results = EvolvingItemsManager::Instance()->DetermineTransferResults(*inst_from, *inst_to); if (!results.item_from_id || !results.item_to_id) { SendEvolveTransferResults(*inst_from, *inst_to, *inst_from, *inst_to, 0, 0); @@ -482,7 +482,7 @@ void Client::DoEvolveTransferXP(const EQApplicationPacket *app) return; } - const auto results = evolving_items_manager.DetermineTransferResults(*inst_from, *inst_to); + const auto results = EvolvingItemsManager::Instance()->DetermineTransferResults(*inst_from, *inst_to); if (!results.item_from_id || !results.item_to_id) { Message(Chat::Red, "Transfer Failed. Incompatible Items."); @@ -507,22 +507,22 @@ void Client::DoEvolveTransferXP(const EQApplicationPacket *app) PlayerEvent::EvolveItem e{}; RemoveItemBySerialNumber(inst_from->GetSerialNumber()); - evolving_items_manager.LoadPlayerEvent(*inst_from, e); + EvolvingItemsManager::Instance()->LoadPlayerEvent(*inst_from, e); e.status = "Transfer XP - Original FROM Evolve Item removed from inventory."; RecordPlayerEventLog(PlayerEvent::EVOLVE_ITEM, e); PushItemOnCursor(*inst_from_new, true); - evolving_items_manager.LoadPlayerEvent(*inst_from_new, e); + EvolvingItemsManager::Instance()->LoadPlayerEvent(*inst_from_new, e); e.status = "Transfer XP - Updated FROM item placed in inventory."; RecordPlayerEventLog(PlayerEvent::EVOLVE_ITEM, e); RemoveItemBySerialNumber(inst_to->GetSerialNumber()); - evolving_items_manager.LoadPlayerEvent(*inst_to, e); + EvolvingItemsManager::Instance()->LoadPlayerEvent(*inst_to, e); e.status = "Transfer XP - Original TO Evolve Item removed from inventory."; RecordPlayerEventLog(PlayerEvent::EVOLVE_ITEM, e); PushItemOnCursor(*inst_to_new, true); - evolving_items_manager.LoadPlayerEvent(*inst_to_new, e); + EvolvingItemsManager::Instance()->LoadPlayerEvent(*inst_to_new, e); e.status = "Transfer XP - Updated TO Evolve item placed in inventory."; RecordPlayerEventLog(PlayerEvent::EVOLVE_ITEM, e); diff --git a/zone/gm_commands/evolving_items.cpp b/zone/gm_commands/evolving_items.cpp index 3971c0021..241a79a50 100644 --- a/zone/gm_commands/evolving_items.cpp +++ b/zone/gm_commands/evolving_items.cpp @@ -33,7 +33,7 @@ void command_evolvingitems(Client *c, const Seperator *sep) continue; } - auto item = evolving_items_manager.GetEvolvingItemsCache().at(value->GetID()); + auto item = EvolvingItemsManager::Instance()->GetEvolvingItemsCache().at(value->GetID()); c->Message( Chat::Yellow, fmt::format( @@ -126,7 +126,7 @@ void command_evolvingitems(Client *c, const Seperator *sep) continue; } - auto item = evolving_items_manager.GetEvolvingItemsCache().at(value->GetID()); + auto item = EvolvingItemsManager::Instance()->GetEvolvingItemsCache().at(value->GetID()); c->Message( Chat::Yellow, fmt::format( diff --git a/zone/inventory.cpp b/zone/inventory.cpp index f2a0faaa7..32510dec5 100644 --- a/zone/inventory.cpp +++ b/zone/inventory.cpp @@ -1037,7 +1037,7 @@ bool Client::PushItemOnCursor(const EQ::ItemInstance& inst, bool client_update) { LogInventory("Putting item [{}] ([{}]) on the cursor", inst.GetItem()->Name, inst.GetItem()->ID); - evolving_items_manager.DoLootChecks(CharacterID(), EQ::invslot::slotCursor, inst); + EvolvingItemsManager::Instance()->DoLootChecks(CharacterID(), EQ::invslot::slotCursor, inst); m_inv.PushCursor(inst); if (client_update) { @@ -1059,7 +1059,7 @@ bool Client::PutItemInInventory(int16 slot_id, const EQ::ItemInstance& inst, boo return PushItemOnCursor(inst, client_update); } - evolving_items_manager.DoLootChecks(CharacterID(), slot_id, inst); + EvolvingItemsManager::Instance()->DoLootChecks(CharacterID(), slot_id, inst); m_inv.PutItem(slot_id, inst); if (client_update) @@ -1087,7 +1087,7 @@ void Client::PutLootInInventory(int16 slot_id, const EQ::ItemInstance &inst, Loo bool cursor_empty = m_inv.CursorEmpty(); - evolving_items_manager.DoLootChecks(CharacterID(), slot_id, inst); + EvolvingItemsManager::Instance()->DoLootChecks(CharacterID(), slot_id, inst); if (slot_id == EQ::invslot::slotCursor) { m_inv.PushCursor(inst); diff --git a/zone/main.cpp b/zone/main.cpp index 58e205609..39495c22c 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -105,7 +105,12 @@ QuestParserCollection *parse = 0; ZoneEventScheduler event_scheduler; WorldContentService content_service; PlayerEventLogs player_event_logs; +<<<<<<< kinglykrab/evolvingitemsmanager-global-to-singleton +DatabaseUpdate database_update; +SkillCaps skill_caps; +======= EvolvingItemsManager evolving_items_manager; +>>>>>>> master const SPDat_Spell_Struct* spells; int32 SPDAT_RECORDS = -1; @@ -394,9 +399,9 @@ int main(int argc, char **argv) content_db.LoadTributes(); // Load evolving item data - evolving_items_manager.SetDatabase(&database); - evolving_items_manager.SetContentDatabase(&content_db); - evolving_items_manager.LoadEvolvingItems(); + EvolvingItemsManager::Instance()->SetDatabase(&database); + EvolvingItemsManager::Instance()->SetContentDatabase(&content_db); + EvolvingItemsManager::Instance()->LoadEvolvingItems(); database.GetDecayTimes(npcCorpseDecayTimes);