iso-bot/games/d2r/routines/pindle.py

80 lines
2.2 KiB
Python

"""Pindleskin farming routine for D2R.
Fastest MF run: Create game → Take red portal in Harrogath →
Kill Pindleskin → Loot → Exit → Repeat
"""
import logging
from enum import Enum, auto
logger = logging.getLogger(__name__)
class PindlePhase(Enum):
CREATE_GAME = auto()
TAKE_PORTAL = auto()
FIND_PINDLE = auto()
KILL_PINDLE = auto()
LOOT = auto()
EXIT_GAME = auto()
class PindleRoutine:
"""Automated Pindleskin farming runs.
The simplest and fastest MF route. Requires Act 5 red portal
(Anya quest completed). Works with any class.
"""
def __init__(self, bot):
self.bot = bot
self.phase = PindlePhase.CREATE_GAME
self.run_count = 0
def execute_run(self) -> bool:
"""Execute a single Pindleskin run."""
logger.info(f"Starting Pindle run #{self.run_count + 1}")
phases = [
(PindlePhase.CREATE_GAME, self._create_game),
(PindlePhase.TAKE_PORTAL, self._take_red_portal),
(PindlePhase.FIND_PINDLE, self._find_pindle),
(PindlePhase.KILL_PINDLE, self._kill_pindle),
(PindlePhase.LOOT, self._loot_items),
(PindlePhase.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 _take_red_portal(self) -> bool:
"""Navigate to and enter the red portal near Anya."""
# TODO: Find red portal in Harrogath, click it
return True
def _find_pindle(self) -> bool:
"""Locate Pindleskin in Nihlathak's Temple entrance."""
# TODO: Move toward Pindle's fixed spawn location
return True
def _kill_pindle(self) -> bool:
"""Kill Pindleskin and his minions."""
# TODO: Attack routine
return True
def _loot_items(self) -> bool:
"""Pick up valuable drops."""
return True
def _exit_game(self) -> bool:
"""Exit game."""
return True