Performance upgrade? (#83)
* Performance upgrade? * update monster to be on 200ms since 250ms will skip to 300
This commit is contained in:
@@ -2,6 +2,7 @@ package memory
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/hectorgimenez/d2go/pkg/data"
|
"github.com/hectorgimenez/d2go/pkg/data"
|
||||||
"github.com/hectorgimenez/d2go/pkg/data/stat"
|
"github.com/hectorgimenez/d2go/pkg/data/stat"
|
||||||
@@ -10,6 +11,14 @@ import (
|
|||||||
type GameReader struct {
|
type GameReader struct {
|
||||||
offset Offset
|
offset Offset
|
||||||
Process
|
Process
|
||||||
|
|
||||||
|
monstersLastUpdate time.Time
|
||||||
|
inventoryLastUpdate time.Time
|
||||||
|
objectsLastUpdate time.Time
|
||||||
|
|
||||||
|
cachedMonsters data.Monsters
|
||||||
|
cachedInventory data.Inventory
|
||||||
|
cachedObjects []data.Object
|
||||||
}
|
}
|
||||||
|
|
||||||
var WidgetStateFlags = map[string]uint64{
|
var WidgetStateFlags = map[string]uint64{
|
||||||
@@ -18,8 +27,11 @@ var WidgetStateFlags = map[string]uint64{
|
|||||||
|
|
||||||
func NewGameReader(process Process) *GameReader {
|
func NewGameReader(process Process) *GameReader {
|
||||||
return &GameReader{
|
return &GameReader{
|
||||||
offset: calculateOffsets(process),
|
offset: calculateOffsets(process),
|
||||||
Process: process,
|
Process: process,
|
||||||
|
monstersLastUpdate: time.Time{},
|
||||||
|
inventoryLastUpdate: time.Time{},
|
||||||
|
objectsLastUpdate: time.Time{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,22 +40,52 @@ func (gd *GameReader) GetData() data.Data {
|
|||||||
gd.offset = calculateOffsets(gd.Process)
|
gd.offset = calculateOffsets(gd.Process)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Always refresh core player data
|
||||||
rawPlayerUnits := gd.GetRawPlayerUnits()
|
rawPlayerUnits := gd.GetRawPlayerUnits()
|
||||||
roster := gd.getRoster(rawPlayerUnits)
|
|
||||||
mainPlayerUnit := rawPlayerUnits.GetMainPlayer()
|
mainPlayerUnit := rawPlayerUnits.GetMainPlayer()
|
||||||
|
|
||||||
pu := gd.GetPlayerUnit(mainPlayerUnit)
|
pu := gd.GetPlayerUnit(mainPlayerUnit)
|
||||||
hover := gd.hoveredData()
|
hover := gd.hoveredData()
|
||||||
|
|
||||||
|
now := time.Now()
|
||||||
|
|
||||||
|
// Conditionally update monsters
|
||||||
|
monsters := gd.cachedMonsters
|
||||||
|
if now.Sub(gd.monstersLastUpdate) > 200*time.Millisecond {
|
||||||
|
monsters = gd.Monsters(pu.Position, hover)
|
||||||
|
gd.cachedMonsters = monsters
|
||||||
|
gd.monstersLastUpdate = now
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
gd.cachedInventory = inventory
|
||||||
|
gd.inventoryLastUpdate = now
|
||||||
|
}
|
||||||
|
|
||||||
|
// Conditionally update objects
|
||||||
|
objects := gd.cachedObjects
|
||||||
|
if now.Sub(gd.objectsLastUpdate) > 200*time.Millisecond {
|
||||||
|
objects = gd.Objects(pu.Position, hover)
|
||||||
|
gd.cachedObjects = objects
|
||||||
|
gd.objectsLastUpdate = now
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always update other critical data
|
||||||
|
corpseUnit := rawPlayerUnits.GetCorpse()
|
||||||
|
roster := gd.getRoster(rawPlayerUnits)
|
||||||
|
openMenus := gd.openMenus()
|
||||||
|
|
||||||
// Quests
|
// Quests
|
||||||
// q1 := uintptr(gd.Process.ReadUInt(gd.moduleBaseAddressPtr+0x22E2978, Uint64))
|
// q1 := uintptr(gd.Process.ReadUInt(gd.moduleBaseAddressPtr+0x22E2978, Uint64))
|
||||||
// q2 := uintptr(gd.Process.ReadUInt(q1, Uint64))
|
// q2 := uintptr(gd.Process.ReadUInt(q1, Uint64))
|
||||||
// q2 := uintptr(gd.Process.ReadUInt(gd.moduleBaseAddressPtr+0x22F1E79, Uint64))
|
// q2 := uintptr(gd.Process.ReadUInt(gd.moduleBaseAddressPtr+0x22F1E79, Uint64))
|
||||||
gameQuestsBytes := gd.Process.ReadBytesFromMemory(gd.moduleBaseAddressPtr+0x22F1E79, 85)
|
gameQuestsBytes := gd.Process.ReadBytesFromMemory(gd.moduleBaseAddressPtr+0x22F1E79, 85)
|
||||||
|
|
||||||
// gameQuestsBytes = gameQuestsBytes[3:]
|
// gameQuestsBytes = gameQuestsBytes[3:]
|
||||||
|
|
||||||
corpseUnit := rawPlayerUnits.GetCorpse()
|
|
||||||
d := data.Data{
|
d := data.Data{
|
||||||
Corpse: data.Corpse{
|
Corpse: data.Corpse{
|
||||||
Found: corpseUnit.Address != 0,
|
Found: corpseUnit.Address != 0,
|
||||||
@@ -56,13 +98,13 @@ func (gd *GameReader) GetData() data.Data {
|
|||||||
LastGamePassword: gd.LastGamePass(),
|
LastGamePassword: gd.LastGamePass(),
|
||||||
FPS: gd.FPS(),
|
FPS: gd.FPS(),
|
||||||
},
|
},
|
||||||
Monsters: gd.Monsters(pu.Position, hover),
|
Monsters: monsters,
|
||||||
Corpses: gd.Corpses(pu.Position, hover),
|
Corpses: gd.Corpses(pu.Position, hover),
|
||||||
PlayerUnit: pu,
|
PlayerUnit: pu,
|
||||||
Inventory: gd.Inventory(rawPlayerUnits, hover),
|
Inventory: inventory,
|
||||||
Objects: gd.Objects(pu.Position, hover),
|
Objects: objects,
|
||||||
Entrances: gd.Entrances(pu.Position, hover),
|
Entrances: gd.Entrances(pu.Position, hover),
|
||||||
OpenMenus: gd.openMenus(),
|
OpenMenus: openMenus,
|
||||||
Widgets: gd.UpdateWidgets(),
|
Widgets: gd.UpdateWidgets(),
|
||||||
Roster: roster,
|
Roster: roster,
|
||||||
HoverData: hover,
|
HoverData: hover,
|
||||||
|
|||||||
Reference in New Issue
Block a user