From 8085745f61f19b450c2d2637f267668ac1686d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Gim=C3=A9nez?= Date: Sat, 14 Oct 2023 22:10:47 +0900 Subject: [PATCH] left/right selected skills --- pkg/data/data.go | 18 ++++++++++-------- pkg/memory/player.go | 24 +++++++++++++++++------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/pkg/data/data.go b/pkg/data/data.go index 285b613..7ecfa39 100644 --- a/pkg/data/data.go +++ b/pkg/data/data.go @@ -135,14 +135,16 @@ type Position struct { } type PlayerUnit struct { - Name string - ID UnitID - Area area.Area - Position Position - Stats map[stat.ID]int - Skills map[skill.Skill]int - States state.States - Class Class + Name string + ID UnitID + Area area.Area + Position Position + Stats map[stat.ID]int + Skills map[skill.Skill]int + States state.States + Class Class + LeftSkill skill.Skill + RightSkill skill.Skill } func (pu PlayerUnit) MaxGold() int { diff --git a/pkg/memory/player.go b/pkg/memory/player.go index f8a7328..3efde73 100644 --- a/pkg/memory/player.go +++ b/pkg/memory/player.go @@ -115,7 +115,16 @@ func (gd *GameReader) GetPlayerUnit(playerUnit uintptr) data.PlayerUnit { states := gd.getStates(statsListExPtr) // Skills - skills := gd.getSkills(playerUnit + 0x100) + skillListPtr := uintptr(gd.Process.ReadUInt(playerUnit+0x100, Uint64)) + skills := gd.getSkills(skillListPtr) + + leftSkillPtr := gd.Process.ReadUInt(skillListPtr+0x08, Uint64) + leftSkillTxtPtr := uintptr(gd.Process.ReadUInt(uintptr(leftSkillPtr), Uint64)) + leftSkillId := uintptr(gd.Process.ReadUInt(leftSkillTxtPtr, Uint16)) + + rightSkillPtr := gd.Process.ReadUInt(skillListPtr+0x10, Uint64) + rightSkillTxtPtr := uintptr(gd.Process.ReadUInt(uintptr(rightSkillPtr), Uint64)) + rightSkillId := uintptr(gd.Process.ReadUInt(rightSkillTxtPtr, Uint16)) // Class class := data.Class(gd.Process.ReadUInt(playerUnit+0x174, Uint32)) @@ -135,16 +144,17 @@ func (gd *GameReader) GetPlayerUnit(playerUnit uintptr) data.PlayerUnit { X: int(xPos), Y: int(yPos), }, - Stats: stats, - Skills: skills, - States: states, - Class: class, + Stats: stats, + Skills: skills, + States: states, + Class: class, + LeftSkill: skill.Skill(leftSkillId), + RightSkill: skill.Skill(rightSkillId), } } -func (gd *GameReader) getSkills(skillsPtr uintptr) map[skill.Skill]int { +func (gd *GameReader) getSkills(skillListPtr uintptr) map[skill.Skill]int { skills := make(map[skill.Skill]int) - skillListPtr := uintptr(gd.Process.ReadUInt(skillsPtr, Uint64)) skillPtr := uintptr(gd.Process.ReadUInt(skillListPtr, Uint64))