mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 12:41:30 +00:00
[Code] EvolvingItemsManager Global to Singleton Cleanup (#4929)
Co-authored-by: Chris Miles <akkadius1@gmail.com>
This commit is contained in:
parent
1e6a4dac78
commit
128732e05d
@ -40,7 +40,6 @@
|
||||
|
||||
WorldContentService content_service;
|
||||
PlayerEventLogs player_event_logs;
|
||||
EvolvingItemsManager evolving_items_manager;
|
||||
|
||||
void ExportSpells(SharedDatabase *db);
|
||||
void ExportSkillCaps(SharedDatabase *db);
|
||||
|
||||
@ -34,7 +34,6 @@
|
||||
|
||||
WorldContentService content_service;
|
||||
PlayerEventLogs player_event_logs;
|
||||
EvolvingItemsManager evolving_items_manager;
|
||||
|
||||
void ImportSpells(SharedDatabase *db);
|
||||
void ImportSkillCaps(SharedDatabase *db);
|
||||
|
||||
@ -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<double>(current_amount)
|
||||
/ static_cast<double>(evolving_items_manager.GetEvolvingItemsCache().at(item_id).required_amount) * 100
|
||||
/ static_cast<double>(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<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &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<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &a,
|
||||
const std::pair<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &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<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &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;
|
||||
|
||||
@ -56,12 +56,15 @@ public:
|
||||
std::map<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails>& GetEvolvingItemsCache() { return m_evolving_items_cache; }
|
||||
std::vector<ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> GetEvolveIDItems(uint32 evolve_id);
|
||||
|
||||
static EvolvingItemsManager* Instance()
|
||||
{
|
||||
static EvolvingItemsManager instance;
|
||||
return &instance;
|
||||
}
|
||||
private:
|
||||
std::map<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> m_evolving_items_cache;
|
||||
Database * m_db;
|
||||
Database * m_content_db;
|
||||
};
|
||||
|
||||
extern EvolvingItemsManager evolving_items_manager;
|
||||
|
||||
#endif //EVOLVING_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:
|
||||
//////////////////////////
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -37,7 +37,6 @@
|
||||
|
||||
WorldContentService content_service;
|
||||
PlayerEventLogs player_event_logs;
|
||||
EvolvingItemsManager evolving_items_manager;
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#include <direct.h>
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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 <green>[{}] item id <green>[{}] type {} sub_type {} is Evolving. Continue processing...",
|
||||
@ -301,7 +301,7 @@ void Client::DoEvolveItemDisplayFinalResult(const EQApplicationPacket *app)
|
||||
"Character ID <green>[{}] requested to view final evolve item id <yellow>[{}] for evolve item id <yellow>[{}]",
|
||||
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);
|
||||
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user