Added States for monsters and corpses (#43)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user