Core/Items: Add location filters to Player.GetItemByEntry

Port From (https://github.com/TrinityCore/TrinityCore/commit/96575e33bb6992e6906e02427f20c58af674bdaa)
This commit is contained in:
hondacrx
2019-12-02 13:21:01 -05:00
parent 916f9a2ea2
commit 40ed357043
9 changed files with 98 additions and 45 deletions
+72 -30
View File
@@ -2858,47 +2858,89 @@ namespace Game.Entities
return null;
}
public Item GetItemByEntry(uint entry)
public Item GetItemByEntry(uint entry, ItemSearchLocation where = ItemSearchLocation.Default)
{
// in inventory
int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
for (byte i = InventorySlots.ItemStart; i < inventoryEnd; ++i)
if (where.HasAnyFlag(ItemSearchLocation.InEquipment))
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
if (pItem.GetEntry() == entry)
return pItem;
for (byte i = EquipmentSlot.Start; i < InventorySlots.BagEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
if (pItem.GetEntry() == entry)
return pItem;
}
}
for (byte i = InventorySlots.BagStart; i < InventorySlots.BagEnd; ++i)
if (where.HasAnyFlag(ItemSearchLocation.InInventory))
{
Bag pBag = GetBagByPos(i);
if (pBag != null)
for (byte j = 0; j < pBag.GetBagSize(); ++j)
{
Item pItem = pBag.GetItemByPos(j);
if (pItem != null)
int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
for (byte i = InventorySlots.ItemStart; i < inventoryEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
if (pItem.GetEntry() == entry)
return pItem;
}
for (byte i = InventorySlots.BagStart; i < InventorySlots.BagEnd; ++i)
{
Bag pBag = GetBagByPos(i);
if (pBag != null)
for (byte j = 0; j < pBag.GetBagSize(); ++j)
{
if (pItem.GetEntry() == entry)
return pItem;
Item pItem = pBag.GetItemByPos(j);
if (pItem != null)
{
if (pItem.GetEntry() == entry)
return pItem;
}
}
}
for (byte i = InventorySlots.ChildEquipmentStart; i < InventorySlots.ChildEquipmentEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem)
if (pItem.GetEntry() == entry)
return pItem;
}
}
if (where.HasAnyFlag(ItemSearchLocation.InBank))
{
for (byte i = InventorySlots.BankItemStart; i < InventorySlots.BankItemEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
if (pItem.GetEntry() == entry)
return pItem;
}
for (byte i = InventorySlots.BankBagStart; i < InventorySlots.BankBagEnd; ++i)
{
Bag pBag = GetBagByPos(i);
if (pBag != null)
{
for (byte j = 0; j < pBag.GetBagSize(); ++j)
{
Item pItem = pBag.GetItemByPos(j);
if (pItem != null)
if (pItem.GetEntry() == entry)
return pItem;
}
}
}
}
for (byte i = EquipmentSlot.Start; i < InventorySlots.BagEnd; ++i)
if (where.HasAnyFlag(ItemSearchLocation.InReagentBank))
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
if (pItem.GetEntry() == entry)
return pItem;
}
for (byte i = InventorySlots.ChildEquipmentStart; i < InventorySlots.ChildEquipmentEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem)
if (pItem.GetEntry() == entry)
return pItem;
for (byte i = InventorySlots.ReagentStart; i < InventorySlots.ReagentEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
if (pItem.GetEntry() == entry)
return pItem;
}
}
return null;
@@ -422,7 +422,7 @@ namespace Game.Entities
activeGlyphs.IsFullUpdate = true;
SendPacket(activeGlyphs);
Item item = GetItemByEntry(PlayerConst.ItemIdHeartOfAzeroth);
Item item = GetItemByEntry(PlayerConst.ItemIdHeartOfAzeroth, ItemSearchLocation.Everywhere);
if (item != null)
{
AzeriteItem azeriteItem = item.ToAzeriteItem();
+1 -1
View File
@@ -1248,7 +1248,7 @@ namespace Game.Entities
{
if (count > 0)
{
Item heartOfAzeroth = GetItemByEntry(PlayerConst.ItemIdHeartOfAzeroth);
Item heartOfAzeroth = GetItemByEntry(PlayerConst.ItemIdHeartOfAzeroth, ItemSearchLocation.Everywhere);
if (heartOfAzeroth != null)
heartOfAzeroth.ToAzeriteItem().GiveXP((ulong)count);
}