// Package d2r implements the Diablo II: Resurrected game plugin. package d2r import ( "fmt" "image" "git.cloonar.com/openclawd/iso-bot/pkg/plugin" "git.cloonar.com/openclawd/iso-bot/pkg/engine/resolution" ) // Plugin implements plugin.Plugin for D2R. type Plugin struct { config Config services plugin.EngineServices detector *Detector reader *Reader resolutionRegistry *resolution.Registry } // New creates a new D2R plugin with default config. func New() *Plugin { return &Plugin{ config: DefaultConfig(), resolutionRegistry: resolution.NewRegistry(), } } // Info returns plugin metadata. func (p *Plugin) Info() plugin.PluginInfo { return plugin.PluginInfo{ ID: "d2r", Name: "Diablo II: Resurrected", Version: "0.1.0", Description: "Bot plugin for Diablo II: Resurrected — MF runs, rune farming, and more", Resolution: image.Point{X: 1920, Y: 1080}, } } // Init initializes the plugin with engine services. func (p *Plugin) Init(services plugin.EngineServices) error { p.services = services // Register D2R resolution profiles if err := RegisterProfiles(p.resolutionRegistry); err != nil { return fmt.Errorf("failed to register D2R profiles: %w", err) } p.detector = NewDetector(p.config, services) p.reader = NewReader(p.config, services) return nil } // Detector returns the game state detector. func (p *Plugin) Detector() plugin.GameDetector { return p.detector } // Reader returns the screen reader. func (p *Plugin) Reader() plugin.ScreenReader { return p.reader } // Routines returns available farming routines. func (p *Plugin) Routines() []plugin.Routine { return []plugin.Routine{ // TODO: Initialize routines with plugin services } } // DefaultLootFilter returns the default D2R loot filter. func (p *Plugin) DefaultLootFilter() plugin.LootFilter { // TODO: Return default rule engine return nil } // SupportedResolutions returns resolutions available for D2R. func (p *Plugin) SupportedResolutions() []image.Point { return p.resolutionRegistry.SupportedResolutions("d2r") } // RegisterResolutionProfiles registers D2R profiles with an external registry. // Called by the engine before Init(). func (p *Plugin) RegisterResolutionProfiles(reg *resolution.Registry) error { return RegisterProfiles(reg) }