update item data

This commit is contained in:
vietdungdev
2026-05-22 00:23:35 +07:00
parent aec833c636
commit 666a16813e
2 changed files with 25 additions and 9 deletions

View File

@@ -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 {

View File

@@ -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: