Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor internal/character directory #671

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion internal/character/berserk_barb.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
)

type Berserker struct {
BaseCharacter
CharacterBuild
isKillingCouncil atomic.Bool
}

Expand Down
73 changes: 2 additions & 71 deletions internal/character/blizzard_sorceress.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ const (
)

type BlizzardSorceress struct {
BaseCharacter
CharacterBuild
}

func (s BlizzardSorceress) CheckKeyBindings() []skill.ID {
requireKeybindings := []skill.ID{skill.Blizzard, skill.Teleport, skill.TomeOfTownPortal, skill.ShiverArmor, skill.StaticField}
requireKeybindings := []skill.ID{skill.Blizzard, skill.Teleport, skill.TomeOfTownPortal, skill.ShiverArmor}
missingKeybindings := []skill.ID{}

for _, cskill := range requireKeybindings {
Expand Down Expand Up @@ -108,27 +108,6 @@ func (s BlizzardSorceress) KillMonsterSequence(
}
}

func (s BlizzardSorceress) killMonster(npc npc.ID, t data.MonsterType) error {
return s.KillMonsterSequence(func(d game.Data) (data.UnitID, bool) {
m, found := d.Monsters.FindOne(npc, t)
if !found {
return 0, false
}

return m.UnitID, true
}, nil)
}

func (s BlizzardSorceress) killMonsterByName(id npc.ID, monsterType data.MonsterType, skipOnImmunities []stat.Resist) error {
return s.KillMonsterSequence(func(d game.Data) (data.UnitID, bool) {
if m, found := d.Monsters.FindOne(id, monsterType); found {
return m.UnitID, true
}

return 0, false
}, skipOnImmunities)
}

func (s BlizzardSorceress) BuffSkills() []skill.ID {
skillsList := make([]skill.ID, 0)
if _, found := s.Data.KeyBindings.KeyBindingForSkill(skill.EnergyShield); found {
Expand All @@ -146,26 +125,6 @@ func (s BlizzardSorceress) BuffSkills() []skill.ID {
return skillsList
}

func (s BlizzardSorceress) PreCTABuffSkills() []skill.ID {
return []skill.ID{}
}

func (s BlizzardSorceress) KillCountess() error {
return s.killMonsterByName(npc.DarkStalker, data.MonsterTypeSuperUnique, nil)
}

func (s BlizzardSorceress) KillAndariel() error {
return s.killMonsterByName(npc.Andariel, data.MonsterTypeUnique, nil)
}

func (s BlizzardSorceress) KillSummoner() error {
return s.killMonsterByName(npc.Summoner, data.MonsterTypeUnique, nil)
}

func (s BlizzardSorceress) KillDuriel() error {
return s.killMonsterByName(npc.Duriel, data.MonsterTypeUnique, nil)
}

func (s BlizzardSorceress) KillCouncil() error {
return s.KillMonsterSequence(func(d game.Data) (data.UnitID, bool) {
// Exclude monsters that are not council members
Expand All @@ -191,17 +150,6 @@ func (s BlizzardSorceress) KillCouncil() error {
}, nil)
}

func (s BlizzardSorceress) KillMephisto() error {
return s.killMonsterByName(npc.Mephisto, data.MonsterTypeUnique, nil)
}

func (s BlizzardSorceress) KillIzual() error {
m, _ := s.Data.Monsters.FindOne(npc.Izual, data.MonsterTypeUnique)
_ = step.SecondaryAttack(skill.StaticField, m.UnitID, 4, step.Distance(5, 8))

return s.killMonster(npc.Izual, data.MonsterTypeUnique)
}

func (s BlizzardSorceress) KillDiablo() error {
timeout := time.Second * 20
startTime := time.Now()
Expand All @@ -228,23 +176,6 @@ func (s BlizzardSorceress) KillDiablo() error {
diabloFound = true
s.Logger.Info("Diablo detected, attacking")

_ = step.SecondaryAttack(skill.StaticField, diablo.UnitID, 5, step.Distance(3, 8))

return s.killMonster(npc.Diablo, data.MonsterTypeUnique)
}
}

func (s BlizzardSorceress) KillPindle() error {
return s.killMonsterByName(npc.DefiledWarrior, data.MonsterTypeSuperUnique, s.CharacterCfg.Game.Pindleskin.SkipOnImmunities)
}

func (s BlizzardSorceress) KillNihlathak() error {
return s.killMonsterByName(npc.Nihlathak, data.MonsterTypeSuperUnique, nil)
}

func (s BlizzardSorceress) KillBaal() error {
m, _ := s.Data.Monsters.FindOne(npc.BaalCrab, data.MonsterTypeUnique)
step.SecondaryAttack(skill.StaticField, m.UnitID, 4, step.Distance(5, 8))

return s.killMonster(npc.BaalCrab, data.MonsterTypeUnique)
}
29 changes: 15 additions & 14 deletions internal/character/character.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,43 +14,44 @@ func BuildCharacter(ctx *context.Context) (context.Character, error) {
bc := BaseCharacter{
Context: ctx,
}
characterBuild := CharacterBuild{BaseCharacter: bc}

if len(ctx.CharacterCfg.Game.Runs) > 0 && ctx.CharacterCfg.Game.Runs[0] == "leveling" {
switch strings.ToLower(ctx.CharacterCfg.Character.Class) {
case "sorceress_leveling_lightning":
return SorceressLevelingLightning{BaseCharacter: bc}, nil
return SorceressLevelingLightning{CharacterBuild: characterBuild}, nil
case "sorceress_leveling":
return SorceressLeveling{BaseCharacter: bc}, nil
return SorceressLeveling{CharacterBuild: characterBuild}, nil
case "paladin":
return PaladinLeveling{BaseCharacter: bc}, nil
return PaladinLeveling{CharacterBuild: characterBuild}, nil
}

return nil, fmt.Errorf("leveling only available for sorceress and paladin")
}

switch strings.ToLower(ctx.CharacterCfg.Character.Class) {
case "sorceress":
return BlizzardSorceress{BaseCharacter: bc}, nil
return BlizzardSorceress{CharacterBuild: characterBuild}, nil
case "nova":
return NovaSorceress{BaseCharacter: bc}, nil
return NovaSorceress{CharacterBuild: characterBuild}, nil
case "hydraorb":
return HydraOrbSorceress{BaseCharacter: bc}, nil
return HydraOrbSorceress{CharacterBuild: characterBuild}, nil
case "lightsorc":
return LightningSorceress{BaseCharacter: bc}, nil
return LightningSorceress{CharacterBuild: characterBuild}, nil
case "hammerdin":
return Hammerdin{BaseCharacter: bc}, nil
return Hammerdin{CharacterBuild: characterBuild}, nil
case "foh":
return Foh{BaseCharacter: bc}, nil
return Foh{CharacterBuild: characterBuild}, nil
case "trapsin":
return Trapsin{BaseCharacter: bc}, nil
return Trapsin{CharacterBuild: characterBuild}, nil
case "mosaic":
return MosaicSin{BaseCharacter: bc}, nil
return MosaicSin{CharacterBuild: characterBuild}, nil
case "winddruid":
return WindDruid{BaseCharacter: bc}, nil
return WindDruid{CharacterBuild: characterBuild}, nil
case "javazon":
return Javazon{BaseCharacter: bc}, nil
return Javazon{CharacterBuild: characterBuild}, nil
case "berserker":
return &Berserker{BaseCharacter: bc}, nil // Return a pointer to Berserker
return &Berserker{CharacterBuild: characterBuild}, nil // Return a pointer to Berserker
}

return nil, fmt.Errorf("class %s not implemented", ctx.CharacterCfg.Character.Class)
Expand Down
Loading