diff --git a/pkg/memory/game_reader.go b/pkg/memory/game_reader.go index fdd2b71..7eb3b68 100644 --- a/pkg/memory/game_reader.go +++ b/pkg/memory/game_reader.go @@ -82,12 +82,15 @@ func (gd *GameReader) GetData() data.Data { gd.monstersLastUpdate = now } + merc, foundMerc := gd.OwnMercenary() + merc.Found = foundMerc + // Conditionally update inventory 500ms // Except when hovering over an item inventory := gd.cachedInventory if now.Sub(gd.inventoryLastUpdate) > 500*time.Millisecond || (hover.IsHovered && hover.UnitType == 4) { // 4 = Item type - inventory = gd.Inventory(rawPlayerUnits, hover) + inventory = gd.Inventory(rawPlayerUnits, merc, hover) gd.cachedInventory = inventory gd.inventoryLastUpdate = now } @@ -147,8 +150,6 @@ func (gd *GameReader) GetData() data.Data { ActiveWeaponSlot: gd.GetActiveWeaponSlot(), } - merc, foundMerc := gd.OwnMercenary() - merc.Found = foundMerc d.Mercenary = data.OwnMercenary(merc) return d } @@ -156,7 +157,9 @@ func (gd *GameReader) GetData() data.Data { func (gd *GameReader) GetInventory() data.Inventory { rawPlayerUnits := gd.GetRawPlayerUnits() hover := gd.HoveredData() - return gd.Inventory(rawPlayerUnits, hover) + merc, foundMerc := gd.OwnMercenary() + merc.Found = foundMerc + return gd.Inventory(rawPlayerUnits, merc, hover) } func (gd *GameReader) InGame() bool { diff --git a/pkg/memory/item.go b/pkg/memory/item.go index 838018a..2694d93 100644 --- a/pkg/memory/item.go +++ b/pkg/memory/item.go @@ -13,7 +13,7 @@ import ( "github.com/hectorgimenez/d2go/pkg/utils" ) -func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverData) data.Inventory { +func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, merc OwnMercenary, hover data.HoverData) data.Inventory { mainPlayer := rawPlayerUnits.GetMainPlayer() baseAddr := gd.Process.moduleBaseAddressPtr + gd.offset.UnitTable + (4 * 1024) unitTableBuffer := gd.Process.ReadBytesFromMemory(baseAddr, 128*8) @@ -132,7 +132,6 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD itm := &data.Item{ ID: int(txtFileNo), UnitID: data.UnitID(unitID), - Owner: data.UnitID(itemOwnerNPC), Name: item.GetNameByEnum(txtFileNo), Quality: item.Quality(itemQuality), Position: data.Position{ @@ -143,9 +142,6 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD Sockets: make([]data.Item, 0), UniqueSetID: txtUniqueSet, } - if itm.Owner == 1 { - itm.Owner = mainPlayer.UnitID - } // Set item properties setProperties(itm, uint32(flags)) @@ -287,6 +283,8 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD location = classifyDLCTabItem(txtFileNo) } } else if data.UnitID(itemOwnerNPC) == mainPlayer.UnitID || itemOwnerNPC == 1 { + itm.Owner = mainPlayer.UnitID + if invPage == 0 { location = item.LocationInventory } else if invPage == 3 { @@ -297,14 +295,29 @@ func (gd *GameReader) Inventory(rawPlayerUnits RawPlayerUnits, hover data.HoverD invPage = 0 } } + + if location == item.LocationSharedStash { + MySharedStashPage := stashUnitIDToPage[uint(mainPlayer.UnitID)] + if invPage == MySharedStashPage { + itm.Owner = mainPlayer.UnitID + } + } case 1: isMercItem := (flags & 0x800000) != 0 if data.UnitID(itemOwnerNPC) == mainPlayer.UnitID || itemOwnerNPC == 1 { + itm.Owner = mainPlayer.UnitID + location = item.LocationEquipped if itm.Type().Code == item.TypeBelt { belt.Name = itm.Name } } else if isMercItem { + if merc.Found { + itm.Owner = merc.UnitID + } else { + itm.Owner = data.UnitID(itemOwnerNPC) + } + location = item.LocationMercenary } case 2: