diff --git a/config/template/config.yaml b/config/template/config.yaml index 823782b0e..f28df174a 100644 --- a/config/template/config.yaml +++ b/config/template/config.yaml @@ -65,6 +65,9 @@ game: spider_cavern: openChests: true focusOnElitePacks: false + lower_kurast_chests: + openRacks: true + getSewersChests: false pit: # default - Outer Cloister -> Monastery Gates -> Tamoe Highland moveThroughBlackMarsh: false # Use Black Marsh -> Tamoe Highland route diff --git a/internal/config/config.go b/internal/config/config.go index 7afa7b5ab..0373205de 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -203,7 +203,8 @@ type CharacterCfg struct { KillShenk bool `yaml:"killShenk"` } `yaml:"eldritch"` LowerKurastChest struct { - OpenRacks bool `yaml:"openRacks"` + OpenRacks bool `yaml:"openRacks"` + GetSewersChests bool `yaml:"getSewersChests"` } `yaml:"lowerkurastchests"` TerrorZone struct { FocusOnElitePacks bool `yaml:"focusOnElitePacks"` diff --git a/internal/run/lower_kurast_chests.go b/internal/run/lower_kurast_chests.go index 91f71a27b..e335d4b92 100644 --- a/internal/run/lower_kurast_chests.go +++ b/internal/run/lower_kurast_chests.go @@ -4,6 +4,7 @@ import ( "fmt" "slices" "sort" + "time" "github.com/hectorgimenez/d2go/pkg/data" "github.com/hectorgimenez/d2go/pkg/data/area" @@ -108,15 +109,65 @@ func (run LowerKurastChests) Run() error { } } - // Return to town - if err = action.ReturnTown(); err != nil { - return err - } + if run.ctx.CharacterCfg.Game.LowerKurastChest.GetSewersChests { + // Go get all those chests in sewers lvl 2 + err = action.MoveToArea(area.KurastBazaar) + err = action.MoveToArea(area.SewersLevel1Act3) + if err != nil { + return err + } + action.Buff() - // Move to A4 if possible to shorten the run time - err = action.WayPoint(area.ThePandemoniumFortress) - if err != nil { - return err + err = action.MoveTo(func() (data.Position, bool) { + for _, l := range run.ctx.Data.AdjacentLevels { + if l.Area == area.SewersLevel2Act3 { + return l.Position, true + } + } + return data.Position{}, false + }) + if err != nil { + return err + } + + _ = action.ClearAreaAroundPlayer(10, data.MonsterAnyFilter()) + + stairs, found := run.ctx.Data.Objects.FindOne(object.Act3SewerStairsToLevel3) + if !found { + run.ctx.Logger.Debug("Stairs in Act 3 Sewers not found") + } + + _ = action.MoveToCoords(stairs.Position) + + _ = action.InteractObject(stairs, func() bool { + o, _ := run.ctx.Data.Objects.FindOne(object.Act3SewerStairsToLevel3) + + return !o.Selectable + }) + + time.Sleep(3000) + + err = action.MoveToArea(area.SewersLevel2Act3) + if err != nil { + return err + } + action.Buff() + + err = action.ClearCurrentLevel(true, run.ctx.Data.MonsterFilterAnyReachable()) + if err != nil { + return err + } + + // Return to town + if err = action.ReturnTown(); err != nil { + return err + } + + // Move to A4 if possible to shorten the run time + err = action.WayPoint(area.ThePandemoniumFortress) + if err != nil { + return err + } } // Done diff --git a/internal/server/http_server.go b/internal/server/http_server.go index 7ec51428e..1e751fba3 100644 --- a/internal/server/http_server.go +++ b/internal/server/http_server.go @@ -907,6 +907,7 @@ func (s *HttpServer) characterSettings(w http.ResponseWriter, r *http.Request) { cfg.Game.Eldritch.KillShenk = r.Form.Has("gameEldritchKillShenk") cfg.Game.LowerKurastChest.OpenRacks = r.Form.Has("gameLowerKurastChestOpenRacks") + cfg.Game.LowerKurastChest.GetSewersChests = r.Form.Has("gameLowerKurastChestGetSewersChests") cfg.Game.Diablo.StartFromStar = r.Form.Has("gameDiabloStartFromStar") cfg.Game.Diablo.KillDiablo = r.Form.Has("gameDiabloKillDiablo") cfg.Game.Diablo.FocusOnElitePacks = r.Form.Has("gameDiabloFocusOnElitePacks") diff --git a/internal/server/templates/run_settings_components.gohtml b/internal/server/templates/run_settings_components.gohtml index 639dce0c1..e349b442c 100644 --- a/internal/server/templates/run_settings_components.gohtml +++ b/internal/server/templates/run_settings_components.gohtml @@ -113,6 +113,7 @@ {{ define "lower_kurast_chest" }}
{{ end }}