Added States for monsters and corpses (#43)

This commit is contained in:
elb
2024-09-29 07:32:19 -04:00
committed by GitHub
parent 8239f1bbe4
commit 9020cc396e
5 changed files with 35 additions and 7 deletions

View File

@@ -139,6 +139,7 @@ type Corpse struct {
Found bool
IsHovered bool
Position Position
States state.States
}
type Position struct {
@@ -290,3 +291,23 @@ type OpenMenus struct {
func (om OpenMenus) IsMenuOpen() bool {
return om.Inventory || om.NPCInteract || om.NPCShop || om.Stash || om.Waypoint || om.SkillTree || om.Character || om.QuitMenu || om.Cube || om.SkillSelect || om.Anvil
}
func (c Corpse) StateNotInteractable() bool {
CorpseStates := []state.State{
state.CorpseNoselect,
state.CorpseNodraw,
state.Revive,
state.Redeemed,
state.Shatter,
state.Freeze,
}
for _, s := range c.States {
for _, d := range CorpseStates {
if s == d {
return true
}
}
}
return false
}

View File

@@ -3,6 +3,7 @@ package data
import (
"github.com/hectorgimenez/d2go/pkg/data/npc"
"github.com/hectorgimenez/d2go/pkg/data/stat"
"github.com/hectorgimenez/d2go/pkg/data/state"
)
type NPC struct {
@@ -20,6 +21,7 @@ type Monster struct {
Position Position
Stats map[stat.ID]int
Type MonsterType
States state.States
}
type Monsters []Monster

View File

@@ -44,6 +44,7 @@ func (gd *GameReader) GetData() data.Data {
Found: corpseUnit.Address != 0,
IsHovered: corpseUnit.IsHovered,
Position: corpseUnit.Position,
States: corpseUnit.States,
},
Game: data.OnlineGame{
LastGameName: gd.LastGameName(),

View File

@@ -48,6 +48,7 @@ func (gd *GameReader) Monsters(playerPosition data.Position, hover data.HoverDat
statCount := gd.Process.ReadUInt(statsListExPtr+0x38, Uint64)
stats := gd.getMonsterStats(statCount, statPtr)
states := gd.GetStates(statsListExPtr)
// This excludes good NPCs but includes Mercs
if !gd.shouldBeIgnored(txtFileNo) || stats[stat.Experience] > 0 {
@@ -59,8 +60,9 @@ func (gd *GameReader) Monsters(playerPosition data.Position, hover data.HoverDat
X: int(posX),
Y: int(posY),
},
Stats: stats,
Type: getMonsterType(flag),
Stats: stats,
Type: getMonsterType(flag),
States: states,
}
if isCorpse == 0 {
@@ -146,6 +148,7 @@ func (gd *GameReader) Corpses(playerPosition data.Position, hover data.HoverData
statCount := gd.Process.ReadUInt(statsListExPtr+0x38, Uint64)
stats := gd.getMonsterStats(statCount, statPtr)
states := gd.GetStates(statsListExPtr)
hovered := hover.IsHovered && hover.UnitType == 1 && hover.UnitID == data.UnitID(unitID)
@@ -158,8 +161,9 @@ func (gd *GameReader) Corpses(playerPosition data.Position, hover data.HoverData
X: int(posX),
Y: int(posY),
},
Stats: stats,
Type: getMonsterType(flag),
Stats: stats,
Type: getMonsterType(flag),
States: states,
}
corpses = append(corpses, m)

View File

@@ -45,7 +45,7 @@ func (gd *GameReader) GetRawPlayerUnits() RawPlayerUnits {
statsListExPtr := uintptr(gd.Process.ReadUInt(playerUnit+0x88, Uint64))
baseStats := gd.getStatsList(statsListExPtr + 0x30)
stats := gd.getStatsList(statsListExPtr + 0x88)
states := gd.getStates(statsListExPtr)
states := gd.GetStates(statsListExPtr)
rawPlayerUnits = append(rawPlayerUnits, RawPlayerUnit{
UnitID: data.UnitID(unitID),
@@ -140,8 +140,8 @@ func (gd *GameReader) getSkills(skillListPtr uintptr) map[skill.ID]skill.Points
return skills
}
func (gd *GameReader) getStates(statsListExPtr uintptr) []state.State {
var states []state.State
func (gd *GameReader) GetStates(statsListExPtr uintptr) state.States {
var states state.States
for i := 0; i < 6; i++ {
offset := i * 4
stateByte := gd.Process.ReadUInt(statsListExPtr+0xAD0+uintptr(offset), Uint32)