improve item, them owner

This commit is contained in:
vietdungdev
2026-05-08 21:26:09 +07:00
parent 839b04fd89
commit 094eda658f
2 changed files with 25 additions and 24 deletions

View File

@@ -8,25 +8,22 @@ import (
)
type Inventory struct {
Belt Belt
AllItems []Item
Gold int
StashedGold [6]int // [0]=personal, [1..5]=shared stash pages
SharedStashPages int // Number of shared stash units detected (3=non-DLC, 5+=DLC)
MySharedStashPage int // 1-based page index belonging to the current player (0 if not in party)
Belt Belt
AllItems []Item
Gold int
StashedGold [6]int // [0]=personal, [1..5]=shared stash pages
SharedStashPages int // Number of shared stash units detected (3=non-DLC, 5+=DLC)
}
func (i Inventory) CheckMySharedItem(it Item) bool {
if i.MySharedStashPage == 0 {
func isPlayerItem(owner UnitID, it Item) bool {
if it.Location.LocationType != item.LocationMercenary && (owner == it.Owner || it.Owner == 1) {
return true
}
if it.Location.LocationType != item.LocationSharedStash {
return true
}
return it.Location.Page == i.MySharedStashPage
return false
}
func (i Inventory) Find(name item.Name, locations ...item.LocationType) (Item, bool) {
func (i Inventory) Find(owner UnitID, name item.Name, locations ...item.LocationType) (Item, bool) {
for _, it := range i.AllItems {
if strings.EqualFold(string(it.Name), string(name)) {
// If no locations are specified, return the first item found
@@ -35,7 +32,7 @@ func (i Inventory) Find(name item.Name, locations ...item.LocationType) (Item, b
}
for _, l := range locations {
if it.Location.LocationType == l && i.CheckMySharedItem(it) {
if it.Location.LocationType == l || it.Owner == owner {
return it, true
}
}
@@ -45,9 +42,9 @@ func (i Inventory) Find(name item.Name, locations ...item.LocationType) (Item, b
return Item{}, false
}
func (i Inventory) FindByID(unitID UnitID) (Item, bool) {
func (i Inventory) FindByID(owner UnitID, unitID UnitID) (Item, bool) {
for _, it := range i.AllItems {
if it.UnitID == unitID && i.CheckMySharedItem(it) {
if it.UnitID == unitID || it.Owner == owner {
return it, true
}
}
@@ -55,12 +52,12 @@ func (i Inventory) FindByID(unitID UnitID) (Item, bool) {
return Item{}, false
}
func (i Inventory) ByLocation(locations ...item.LocationType) []Item {
func (i Inventory) ByLocation(owner UnitID, locations ...item.LocationType) []Item {
var items []Item
for _, it := range i.AllItems {
for _, l := range locations {
if it.Location.LocationType == l && i.CheckMySharedItem(it) {
if it.Location.LocationType == l || it.Owner == owner {
items = append(items, it)
}
}
@@ -69,9 +66,9 @@ func (i Inventory) ByLocation(locations ...item.LocationType) []Item {
return items
}
func (i Inventory) Matrix() [4][10]bool {
func (i Inventory) Matrix(owner UnitID) [4][10]bool {
invMatrix := [4][10]bool{} // false = empty, true = occupied
for _, itm := range i.ByLocation(item.LocationInventory) {
for _, itm := range i.ByLocation(owner, item.LocationInventory) {
for k := range itm.Desc().InventoryWidth {
for j := range itm.Desc().InventoryHeight {
invMatrix[itm.Position.Y+j][itm.Position.X+k] = true
@@ -98,6 +95,7 @@ type ItemAffixes struct {
type Item struct {
ID int
UnitID
Owner UnitID
Name item.Name
Quality item.Quality
IdentifiedName string