Added States for monsters and corpses (#43)
This commit is contained in:
@@ -139,6 +139,7 @@ type Corpse struct {
|
|||||||
Found bool
|
Found bool
|
||||||
IsHovered bool
|
IsHovered bool
|
||||||
Position Position
|
Position Position
|
||||||
|
States state.States
|
||||||
}
|
}
|
||||||
|
|
||||||
type Position struct {
|
type Position struct {
|
||||||
@@ -290,3 +291,23 @@ type OpenMenus struct {
|
|||||||
func (om OpenMenus) IsMenuOpen() bool {
|
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
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package data
|
|||||||
import (
|
import (
|
||||||
"github.com/hectorgimenez/d2go/pkg/data/npc"
|
"github.com/hectorgimenez/d2go/pkg/data/npc"
|
||||||
"github.com/hectorgimenez/d2go/pkg/data/stat"
|
"github.com/hectorgimenez/d2go/pkg/data/stat"
|
||||||
|
"github.com/hectorgimenez/d2go/pkg/data/state"
|
||||||
)
|
)
|
||||||
|
|
||||||
type NPC struct {
|
type NPC struct {
|
||||||
@@ -20,6 +21,7 @@ type Monster struct {
|
|||||||
Position Position
|
Position Position
|
||||||
Stats map[stat.ID]int
|
Stats map[stat.ID]int
|
||||||
Type MonsterType
|
Type MonsterType
|
||||||
|
States state.States
|
||||||
}
|
}
|
||||||
|
|
||||||
type Monsters []Monster
|
type Monsters []Monster
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ func (gd *GameReader) GetData() data.Data {
|
|||||||
Found: corpseUnit.Address != 0,
|
Found: corpseUnit.Address != 0,
|
||||||
IsHovered: corpseUnit.IsHovered,
|
IsHovered: corpseUnit.IsHovered,
|
||||||
Position: corpseUnit.Position,
|
Position: corpseUnit.Position,
|
||||||
|
States: corpseUnit.States,
|
||||||
},
|
},
|
||||||
Game: data.OnlineGame{
|
Game: data.OnlineGame{
|
||||||
LastGameName: gd.LastGameName(),
|
LastGameName: gd.LastGameName(),
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ func (gd *GameReader) Monsters(playerPosition data.Position, hover data.HoverDat
|
|||||||
statCount := gd.Process.ReadUInt(statsListExPtr+0x38, Uint64)
|
statCount := gd.Process.ReadUInt(statsListExPtr+0x38, Uint64)
|
||||||
|
|
||||||
stats := gd.getMonsterStats(statCount, statPtr)
|
stats := gd.getMonsterStats(statCount, statPtr)
|
||||||
|
states := gd.GetStates(statsListExPtr)
|
||||||
|
|
||||||
// This excludes good NPCs but includes Mercs
|
// This excludes good NPCs but includes Mercs
|
||||||
if !gd.shouldBeIgnored(txtFileNo) || stats[stat.Experience] > 0 {
|
if !gd.shouldBeIgnored(txtFileNo) || stats[stat.Experience] > 0 {
|
||||||
@@ -61,6 +62,7 @@ func (gd *GameReader) Monsters(playerPosition data.Position, hover data.HoverDat
|
|||||||
},
|
},
|
||||||
Stats: stats,
|
Stats: stats,
|
||||||
Type: getMonsterType(flag),
|
Type: getMonsterType(flag),
|
||||||
|
States: states,
|
||||||
}
|
}
|
||||||
|
|
||||||
if isCorpse == 0 {
|
if isCorpse == 0 {
|
||||||
@@ -146,6 +148,7 @@ func (gd *GameReader) Corpses(playerPosition data.Position, hover data.HoverData
|
|||||||
statCount := gd.Process.ReadUInt(statsListExPtr+0x38, Uint64)
|
statCount := gd.Process.ReadUInt(statsListExPtr+0x38, Uint64)
|
||||||
|
|
||||||
stats := gd.getMonsterStats(statCount, statPtr)
|
stats := gd.getMonsterStats(statCount, statPtr)
|
||||||
|
states := gd.GetStates(statsListExPtr)
|
||||||
|
|
||||||
hovered := hover.IsHovered && hover.UnitType == 1 && hover.UnitID == data.UnitID(unitID)
|
hovered := hover.IsHovered && hover.UnitType == 1 && hover.UnitID == data.UnitID(unitID)
|
||||||
|
|
||||||
@@ -160,6 +163,7 @@ func (gd *GameReader) Corpses(playerPosition data.Position, hover data.HoverData
|
|||||||
},
|
},
|
||||||
Stats: stats,
|
Stats: stats,
|
||||||
Type: getMonsterType(flag),
|
Type: getMonsterType(flag),
|
||||||
|
States: states,
|
||||||
}
|
}
|
||||||
|
|
||||||
corpses = append(corpses, m)
|
corpses = append(corpses, m)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ func (gd *GameReader) GetRawPlayerUnits() RawPlayerUnits {
|
|||||||
statsListExPtr := uintptr(gd.Process.ReadUInt(playerUnit+0x88, Uint64))
|
statsListExPtr := uintptr(gd.Process.ReadUInt(playerUnit+0x88, Uint64))
|
||||||
baseStats := gd.getStatsList(statsListExPtr + 0x30)
|
baseStats := gd.getStatsList(statsListExPtr + 0x30)
|
||||||
stats := gd.getStatsList(statsListExPtr + 0x88)
|
stats := gd.getStatsList(statsListExPtr + 0x88)
|
||||||
states := gd.getStates(statsListExPtr)
|
states := gd.GetStates(statsListExPtr)
|
||||||
|
|
||||||
rawPlayerUnits = append(rawPlayerUnits, RawPlayerUnit{
|
rawPlayerUnits = append(rawPlayerUnits, RawPlayerUnit{
|
||||||
UnitID: data.UnitID(unitID),
|
UnitID: data.UnitID(unitID),
|
||||||
@@ -140,8 +140,8 @@ func (gd *GameReader) getSkills(skillListPtr uintptr) map[skill.ID]skill.Points
|
|||||||
return skills
|
return skills
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gd *GameReader) getStates(statsListExPtr uintptr) []state.State {
|
func (gd *GameReader) GetStates(statsListExPtr uintptr) state.States {
|
||||||
var states []state.State
|
var states state.States
|
||||||
for i := 0; i < 6; i++ {
|
for i := 0; i < 6; i++ {
|
||||||
offset := i * 4
|
offset := i * 4
|
||||||
stateByte := gd.Process.ReadUInt(statsListExPtr+0xAD0+uintptr(offset), Uint32)
|
stateByte := gd.Process.ReadUInt(statsListExPtr+0xAD0+uintptr(offset), Uint32)
|
||||||
|
|||||||
Reference in New Issue
Block a user