From a0049241124b81b2025e8bdb63e3d37121c51cc2 Mon Sep 17 00:00:00 2001 From: Alex King <89047260+Kinglykrab@users.noreply.github.com> Date: Mon, 26 Jun 2023 00:22:10 -0400 Subject: [PATCH] [Bug Fix] Fix NPC Item Stat Bonuses (#3444) * [Bug Fix] Fix NPC Item Stat Bonuses # Notes - Due to https://github.com/EQEmu/Server/pull/3136 NPCs/Mercs were not receiving stat bonuses from their items, this fixes that. * Update npc.h * Changes. * Cleanup * Cleanup * Update loottables.cpp * Update npc.cpp * Update loottables.cpp --- zone/bonuses.cpp | 3 ++- zone/loottables.cpp | 20 +++++++++++++++++--- zone/npc.cpp | 2 ++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 438d0022f..9337920af 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -146,7 +146,8 @@ void Mob::CalcItemBonuses(StatBonuses* b) { int16 i; for (i = EQ::invslot::BONUS_BEGIN; i <= EQ::invslot::BONUS_SKILL_END; i++) { - const EQ::ItemInstance* inst = GetInv().GetItem(i); + const auto* inst = GetInv().GetItem(i); + if (!inst) { continue; } diff --git a/zone/loottables.cpp b/zone/loottables.cpp index 45b1017bf..7d1e9d525 100644 --- a/zone/loottables.cpp +++ b/zone/loottables.cpp @@ -363,11 +363,23 @@ void NPC::AddLootDrop( bool found = false; // track if we found an empty slot we fit into + int foundslot = -1; // for multi-slot items + + const auto* inst = database.CreateItem( + item2->ID, + loot_drop.item_charges, + aug1, + aug2, + aug3, + aug4, + aug5, + aug6 + ); + if (loot_drop.equip_item > 0) { uint8 eslot = 0xFF; char newid[20]; const EQ::ItemData* compitem = nullptr; - int32 foundslot = -1; // for multi-slot items // Equip rules are as follows: // If the item has the NoPet flag set it will not be equipped. @@ -511,10 +523,12 @@ void NPC::AddLootDrop( } } - if (itemlist != nullptr) { + if (itemlist) { + GetInv().PutItem(foundslot, *inst); itemlist->push_back(item); + } else { + safe_delete(item); } - else safe_delete(item); if (found) { CalcBonuses(); diff --git a/zone/npc.cpp b/zone/npc.cpp index cf676d527..76f711c49 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -441,6 +441,8 @@ NPC::NPC(const NPCType *npc_type_data, Spawn2 *in_respawn, const glm::vec4 &posi m_can_open_doors = false; } + GetInv().SetInventoryVersion(EQ::versions::MobVersion::RoF2); + GetInv().SetGMInventory(false); } float NPC::GetRoamboxMaxX() const