diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index b9376da29..6aa16bbe6 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -182,14 +182,20 @@ void Mob::CalcItemBonuses(StatBonuses* b) { SetDualWeaponsEquipped(true); } - if (IsOfClientBot()) { - for (i = EQ::invslot::TRIBUTE_BEGIN; i <= EQ::invslot::TRIBUTE_END; i++) { - const EQ::ItemInstance* inst = m_inv[i]; - if (!inst) { - continue; - } + if (IsClient()) { + if (CastToClient()->GetPP().tribute_active) { + for (auto const &t: CastToClient()->GetPP().tributes) { + auto item_id = CastToClient()->LookupTributeItemID(t.tribute, t.tier); + if (item_id) { + const EQ::ItemInstance *inst = database.CreateItem(item_id); + if (!inst) { + continue; + } - AddItemBonuses(inst, b, false, true); + AddItemBonuses(inst, b, false, true); + safe_delete(inst); + } + } } } diff --git a/zone/client.h b/zone/client.h index d06ae2a35..77f34b1fe 100644 --- a/zone/client.h +++ b/zone/client.h @@ -70,6 +70,7 @@ namespace EQ #include "../common/data_verification.h" #include "../common/repositories/character_parcels_repository.h" #include "../common/repositories/trader_repository.h" +#include "../common/guild_base.h" #ifdef _WINDOWS // since windows defines these within windef.h (which windows.h include) @@ -967,6 +968,8 @@ public: void ChangeTributeSettings(TributeInfo_Struct *t); void SendTributeTimer(); void ToggleTribute(bool enabled); + std::map GetTributeList(); + uint32 LookupTributeItemID(uint32 tribute_id, uint32 tier); void SendPathPacket(const std::vector &path); inline PTimerList &GetPTimers() { return(p_timers); } diff --git a/zone/tribute.cpp b/zone/tribute.cpp index abac9a88f..31cb0bddf 100644 --- a/zone/tribute.cpp +++ b/zone/tribute.cpp @@ -48,7 +48,7 @@ but I dont see a point to that right now, so I dont do it. */ extern WorldServer worldserver; -std::map tribute_list; +std::map tribute_list{}; void Client::ToggleTribute(bool enabled) { if(enabled) { @@ -622,6 +622,26 @@ void Client::SendGuildTributeDonatePlatReply(GuildTributeDonatePlatRequest_Struc } +std::map Client::GetTributeList() { + return tribute_list; +} + +uint32 Client::LookupTributeItemID(uint32 tribute_id, uint32 tier) +{ + if (!tribute_id && !tier) { + return 0; + } + + if (tribute_list.contains(tribute_id)) { + auto tribute = tribute_list.find(tribute_id); + auto item_id = tribute->second.tiers[tier].tribute_item_id; + if (!item_id) { + return 0; + } + return item_id; + } +} + /* 64.37.149.6:1353 == server 66.90.221.245:3173 == client