import java.awt.Point /** * Interface for common task parameters used across automation routines. * * This defines standard fields needed by most routines like total volume, * volume per step, and the Agent instance. * * @property totalVolume The total number of items to process in the routine. * @property volumePerStep The volume of items to process per step. * @property agent The Agent instance that will run the routine. */ interface TaskParams { val totalVolume: Int val volumePerStep: Int val agent: Agent } /** * Interface for bank related parameters used in automation routines. * * Routines that involve banking items will need bank specific * configuration like location and preset hotkeys. * * This interface encapsulates those common bank parameters. Classes * that represent task params should implement this if banking is required. * * @property bankPoint The Point location of the bank to use. * @property bankPresetHotkey The bank preset hotkey to withdraw/deposit items. */ interface BankParams { val bankPoint: Point val bankPresetHotkey: Int } /** * Interface for crafting related parameters used in automation routines. * * Routines that involve a crafting action like fletching, cooking, etc will * need crafting specific configuration like hotkeys and timing. * * This interface encapsulates those common crafting parameters. Classes * that represent task params should implement this if they involve crafting. * * @property craftingDialogHotkey The hotkey used to open the crafting dialog. * @property craftingWaitDurationMillis Base time in ms to wait after crafting. * @property craftingWaitDurationVarianceMillis Random variance added to wait. */ interface CraftingParams { val craftingDialogHotkey: Int val craftingWaitDurationMillis: Long val craftingWaitDurationVarianceMillis: Long } /** * Interface for travel related parameters used in automation routines. * * Routines that involve traveling between a bank and activity area (e.g. * crafting, cooking) will need travel related configuration. * * This interface encapsulates those common travel params. Classes that * represent travel task params should implement this interface. * * @property travelPoint The Point destination to travel to. * @property travelDurationMillis The expected travel time in milliseconds. * @property travelDurationVarianceMillis Random variance to apply to the * travel time. This helps simulate human-like travel. */ interface TravelParams { val travelPoint: Point val travelDurationMillis: Long val travelDurationVarianceMillis: Long } /** * Task parameters for routines performed while standing in one spot. * * This represents routines like fletching, cooking, etc. that are done * without traveling between a bank and activity area. * * @param totalVolume Total number of items to process. * @param volumePerStep The volume of items to process per iteration. * @param agent The Agent instance. * @param bankPoint Location of the bank. * @param bankPresetHotkey Bank preset hotkey to use. * @param craftingDialogHotkey Hotkey to open crafting dialog. * @param craftingWaitDurationMillis Crafting action duration. * @param craftingWaitDurationVarianceMillis Random variance for duration. */ data class StandingTaskParams( override val totalVolume: Int, override val volumePerStep: Int, override val agent: Agent, override val bankPoint: Point, override val bankPresetHotkey: Int, override val craftingDialogHotkey: Int, override val craftingWaitDurationMillis: Long, override val craftingWaitDurationVarianceMillis: Long ) : TaskParams, BankParams, CraftingParams /** * Task parameters for routines that involve traveling. * * This encapsulates all the configuration needed for routines where the * player travels between a bank and activity area for crafting, cooking, etc. * * It brings together the common [TaskParams], bank [BankParams], crafting * [CraftingParams], and travel [TravelParams] parameters into one data class. * * @param totalVolume Total number of items to process. * @param volumePerStep The volume of items per crafting iteration. * @param agent The Agent instance. * @param bankPoint The bank location. * @param travelPoint The travel destination. * @param bankPresetHotkey Hotkey for bank preset. * @param craftingDialogHotkey Hotkey to open crafting dialog. * @param craftingWaitDurationMillis Base crafting action time. * @param craftingWaitDurationVarianceMillis Crafting time variance. * @param travelDurationMillis Expected travel time. * @param travelDurationVarianceMillis Travel time variance. */ data class TravelTaskParams( override val totalVolume: Int, override val volumePerStep: Int, override val agent: Agent, override val bankPoint: Point, override val travelPoint: Point, override val bankPresetHotkey: Int, override val craftingDialogHotkey: Int = -1, //all current travel tasks click the thing that starts the crafting dialogue override val craftingWaitDurationMillis: Long, override val craftingWaitDurationVarianceMillis: Long, override val travelDurationMillis: Long, override val travelDurationVarianceMillis: Long ) : TaskParams, BankParams, CraftingParams, TravelParams /** * CommonVolumesPerStep provides constants for common inventory volumes used during routines. */ object CommonVolumesPerStep { /** * Full inventory volume constant. */ const val FullInventory = 28 /** * Two-reagent full inventory volume constant. * For example, when combining two items that fill the inventory. */ const val TwoReagentFullInventory = 14 /** * Volume for coating incense sticks with ashes. */ const val CoatingIncenseWithAsh = 26 /** * Volume for infusing incense sticks with herbs. */ const val InfusingIncenseWithHerb = 27 }