skill <> kb

This commit is contained in:
Héctor Giménez
2024-04-20 23:22:53 +09:00
parent 75bd4bcc6a
commit bac1051094
2 changed files with 36 additions and 9 deletions

View File

@@ -1,5 +1,7 @@
package data package data
import "github.com/hectorgimenez/d2go/pkg/data/skill"
type KeyBindings struct { type KeyBindings struct {
CharacterScreen KeyBinding CharacterScreen KeyBinding
Inventory KeyBinding Inventory KeyBinding
@@ -12,7 +14,7 @@ type KeyBindings struct {
SkillTree KeyBinding SkillTree KeyBinding
SkillSpeedBar KeyBinding SkillSpeedBar KeyBinding
Skills [16]KeyBinding Skills [16]SkillBinding
SelectPreviousSkill KeyBinding SelectPreviousSkill KeyBinding
SelectNextSkill KeyBinding SelectNextSkill KeyBinding
@@ -54,3 +56,18 @@ type KeyBinding struct {
Key1 [2]byte Key1 [2]byte
Key2 [2]byte Key2 [2]byte
} }
type SkillBinding struct {
SkillID skill.ID
KeyBinding
}
func (kb KeyBindings) KeyBindingForSkill(skillID skill.ID) (KeyBinding, bool) {
for _, sk := range kb.Skills {
if sk.SkillID == skillID {
return sk.KeyBinding, true
}
}
return KeyBinding{}, false
}

View File

@@ -1,23 +1,33 @@
package memory package memory
import ( import (
"encoding/binary"
"github.com/hectorgimenez/d2go/pkg/data" "github.com/hectorgimenez/d2go/pkg/data"
"github.com/hectorgimenez/d2go/pkg/data/skill"
) )
func (gd *GameReader) GetKeyBindings() data.KeyBindings { func (gd *GameReader) GetKeyBindings() data.KeyBindings {
blob := gd.ReadBytesFromMemory(gd.moduleBaseAddressPtr+0x1e26934, 0x500) blob := gd.ReadBytesFromMemory(gd.moduleBaseAddressPtr+0x1e26934, 0x500)
blobSkills := gd.ReadBytesFromMemory(gd.moduleBaseAddressPtr+0x224edc0, 0x500)
skills := [16]data.KeyBinding{} skillsKB := [16]data.SkillBinding{}
for i := 0; i < 7; i++ { for i := 0; i < 7; i++ {
skills[i] = data.KeyBinding{ skillsKB[i] = data.SkillBinding{
SkillID: skill.ID(binary.LittleEndian.Uint32(blobSkills[i*0x1c : i*0x1c+4])),
KeyBinding: data.KeyBinding{
Key1: [2]byte{blob[0x118+(i*0x14)], blob[0x119+(i*0x14)]}, Key1: [2]byte{blob[0x118+(i*0x14)], blob[0x119+(i*0x14)]},
Key2: [2]byte{blob[0x122+(i*0x14)], blob[0x123+(i*0x14)]}, Key2: [2]byte{blob[0x122+(i*0x14)], blob[0x123+(i*0x14)]},
},
} }
} }
for i := 0; i < 9; i++ { for i := 0; i < 9; i++ {
skills[i+7] = data.KeyBinding{ skillIdx := i + 7
skillsKB[skillIdx] = data.SkillBinding{
SkillID: skill.ID(binary.LittleEndian.Uint32(blobSkills[skillIdx*0x1c : skillIdx*0x1c+4])),
KeyBinding: data.KeyBinding{
Key1: [2]byte{blob[0x384+(i*0x14)], blob[0x385+(i*0x14)]}, Key1: [2]byte{blob[0x384+(i*0x14)], blob[0x385+(i*0x14)]},
Key2: [2]byte{blob[0x38e+(i*0x14)], blob[0x38f+(i*0x14)]}, Key2: [2]byte{blob[0x38e+(i*0x14)], blob[0x38f+(i*0x14)]},
},
} }
} }
@@ -70,7 +80,7 @@ func (gd *GameReader) GetKeyBindings() data.KeyBindings {
Key1: [2]byte{blob[0x104], blob[0x105]}, Key1: [2]byte{blob[0x104], blob[0x105]},
Key2: [2]byte{blob[0x10e], blob[0x10f]}, Key2: [2]byte{blob[0x10e], blob[0x10f]},
}, },
Skills: skills, Skills: skillsKB,
SelectPreviousSkill: data.KeyBinding{ SelectPreviousSkill: data.KeyBinding{
Key1: [2]byte{blob[0x2f8], blob[0x2f9]}, Key1: [2]byte{blob[0x2f8], blob[0x2f9]},
Key2: [2]byte{blob[0x302], blob[0x303]}, Key2: [2]byte{blob[0x302], blob[0x303]},