84 lines
2.4 KiB
Python
84 lines
2.4 KiB
Python
"""Countess farming routine for D2R.
|
|
|
|
Rune farming: Create game → Black Marsh WP → Tower Cellar →
|
|
Kill Countess → Loot runes → Exit → Repeat
|
|
"""
|
|
|
|
import logging
|
|
from enum import Enum, auto
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class CountessPhase(Enum):
|
|
CREATE_GAME = auto()
|
|
WAYPOINT_TO_MARSH = auto()
|
|
FIND_TOWER = auto()
|
|
NAVIGATE_CELLAR = auto()
|
|
KILL_COUNTESS = auto()
|
|
LOOT = auto()
|
|
EXIT_GAME = auto()
|
|
|
|
|
|
class CountessRoutine:
|
|
"""Automated Countess farming for rune drops.
|
|
|
|
Best route for mid-tier rune farming (up to Ist).
|
|
Requires navigating 5 tower cellar levels.
|
|
"""
|
|
|
|
def __init__(self, bot):
|
|
self.bot = bot
|
|
self.phase = CountessPhase.CREATE_GAME
|
|
self.run_count = 0
|
|
|
|
def execute_run(self) -> bool:
|
|
"""Execute a single Countess run."""
|
|
logger.info(f"Starting Countess run #{self.run_count + 1}")
|
|
|
|
phases = [
|
|
(CountessPhase.CREATE_GAME, self._create_game),
|
|
(CountessPhase.WAYPOINT_TO_MARSH, self._go_to_marsh),
|
|
(CountessPhase.FIND_TOWER, self._find_tower),
|
|
(CountessPhase.NAVIGATE_CELLAR, self._navigate_cellar),
|
|
(CountessPhase.KILL_COUNTESS, self._kill_countess),
|
|
(CountessPhase.LOOT, self._loot_runes),
|
|
(CountessPhase.EXIT_GAME, self._exit_game),
|
|
]
|
|
|
|
for phase, handler in phases:
|
|
self.phase = phase
|
|
if not handler():
|
|
return False
|
|
self.bot.humanizer.wait()
|
|
|
|
self.run_count += 1
|
|
return True
|
|
|
|
def _create_game(self) -> bool:
|
|
return True
|
|
|
|
def _go_to_marsh(self) -> bool:
|
|
"""Take waypoint to Black Marsh."""
|
|
return True
|
|
|
|
def _find_tower(self) -> bool:
|
|
"""Navigate from Black Marsh to Forgotten Tower entrance."""
|
|
# TODO: This is the hardest part — tower location is random
|
|
return True
|
|
|
|
def _navigate_cellar(self) -> bool:
|
|
"""Navigate through 5 cellar levels to level 5."""
|
|
# TODO: Find stairs on each level, descend
|
|
return True
|
|
|
|
def _kill_countess(self) -> bool:
|
|
"""Kill the Countess."""
|
|
return True
|
|
|
|
def _loot_runes(self) -> bool:
|
|
"""Pick up rune drops (Countess has special rune drop table)."""
|
|
return True
|
|
|
|
def _exit_game(self) -> bool:
|
|
return True
|