510 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			510 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from dataclasses import dataclass
 | |
| 
 | |
| from Options import Choice, Toggle, Range, PerGameCommonOptions
 | |
| 
 | |
| MAX_COMBAT_TASKS = 16
 | |
| MAX_PRAYER_TASKS = 3
 | |
| MAX_MAGIC_TASKS = 4
 | |
| MAX_RUNECRAFT_TASKS = 3
 | |
| MAX_CRAFTING_TASKS = 5
 | |
| MAX_MINING_TASKS = 5
 | |
| MAX_SMITHING_TASKS = 4
 | |
| MAX_FISHING_TASKS = 5
 | |
| MAX_COOKING_TASKS = 5
 | |
| MAX_FIREMAKING_TASKS = 2
 | |
| MAX_WOODCUTTING_TASKS = 3
 | |
| 
 | |
| NON_QUEST_LOCATION_COUNT = 22
 | |
| 
 | |
| 
 | |
| class StartingArea(Choice):
 | |
|     """
 | |
|     Which chunks are available at the start. The player may need to move through locked chunks to reach the starting
 | |
|     area, but any areas that require quests, skills, or coins are not available as a starting location.
 | |
| 
 | |
|     "Any Bank" rolls a random region that contains a bank.
 | |
|     Chunksanity can start you in any chunk. Hope you like woodcutting!
 | |
|     """
 | |
|     display_name = "Starting Region"
 | |
|     option_lumbridge = 0
 | |
|     option_al_kharid = 1
 | |
|     option_varrock_east = 2
 | |
|     option_varrock_west = 3
 | |
|     option_edgeville = 4
 | |
|     option_falador = 5
 | |
|     option_draynor = 6
 | |
|     option_wilderness = 7
 | |
|     option_any_bank = 8
 | |
|     option_chunksanity = 9
 | |
|     default = 0
 | |
| 
 | |
| 
 | |
| class BrutalGrinds(Toggle):
 | |
|     """
 | |
|     Whether to allow skill tasks without having reasonable access to the usual skill training path.
 | |
|     For example, if enabled, you could be forced to train smithing without an anvil purely by smelting bars,
 | |
|     or training fishing to high levels entirely on shrimp.
 | |
|     """
 | |
|     display_name = "Allow Brutal Grinds"
 | |
| 
 | |
| 
 | |
| class ProgressiveTasks(Toggle):
 | |
|     """
 | |
|     Whether skill tasks should always be generated in order of easiest to hardest.
 | |
|     If enabled, you would not be assigned "Mine Gold" without also being assigned
 | |
|     "Mine Silver", "Mine Coal", and "Mine Iron". Enabling this will result in a generally shorter seed, but with
 | |
|     a lower variety of tasks.
 | |
|     """
 | |
|     display_name = "Progressive Tasks"
 | |
| 
 | |
| 
 | |
| class MaxCombatLevel(Range):
 | |
|     """
 | |
|     The highest combat level of monster to possibly be assigned as a task.
 | |
|     If set to 0, no combat tasks will be generated.
 | |
|     """
 | |
|     display_name = "Max Required Enemy Combat Level"
 | |
|     range_start = 0
 | |
|     range_end = 1520
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxCombatTasks(Range):
 | |
|     """
 | |
|     The maximum number of Combat Tasks to possibly be assigned.
 | |
|     If set to 0, no combat tasks will be generated.
 | |
|     This only determines the maximum possible, fewer than the maximum could be assigned.
 | |
|     """
 | |
|     display_name = "Max Combat Task Count"
 | |
|     range_start = 0
 | |
|     range_end = MAX_COMBAT_TASKS
 | |
|     default = MAX_COMBAT_TASKS
 | |
| 
 | |
| 
 | |
| class CombatTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating combat tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "Combat Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxPrayerLevel(Range):
 | |
|     """
 | |
|     The highest Prayer requirement of any task generated.
 | |
|     If set to 0, no Prayer tasks will be generated.
 | |
|     """
 | |
|     display_name = "Max Required Prayer Level"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxPrayerTasks(Range):
 | |
|     """
 | |
|     The maximum number of Prayer Tasks to possibly be assigned.
 | |
|     If set to 0, no Prayer tasks will be generated.
 | |
|     This only determines the maximum possible, fewer than the maximum could be assigned.
 | |
|     """
 | |
|     display_name = "Max Prayer Task Count"
 | |
|     range_start = 0
 | |
|     range_end = MAX_PRAYER_TASKS
 | |
|     default = MAX_PRAYER_TASKS
 | |
| 
 | |
| 
 | |
| class PrayerTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating Prayer tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "Prayer Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxMagicLevel(Range):
 | |
|     """
 | |
|     The highest Magic requirement of any task generated.
 | |
|     If set to 0, no Magic tasks will be generated.
 | |
|     """
 | |
|     display_name = "Max Required Magic Level"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxMagicTasks(Range):
 | |
|     """
 | |
|     The maximum number of Magic Tasks to possibly be assigned.
 | |
|     If set to 0, no Magic tasks will be generated.
 | |
|     This only determines the maximum possible, fewer than the maximum could be assigned.
 | |
|     """
 | |
|     display_name = "Max Magic Task Count"
 | |
|     range_start = 0
 | |
|     range_end = MAX_MAGIC_TASKS
 | |
|     default = MAX_MAGIC_TASKS
 | |
| 
 | |
| 
 | |
| class MagicTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating Magic tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "Magic Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxRunecraftLevel(Range):
 | |
|     """
 | |
|     The highest Runecraft requirement of any task generated.
 | |
|     If set to 0, no Runecraft tasks will be generated.
 | |
|     """
 | |
|     display_name = "Max Required Runecraft Level"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxRunecraftTasks(Range):
 | |
|     """
 | |
|     The maximum number of Runecraft Tasks to possibly be assigned.
 | |
|     If set to 0, no Runecraft tasks will be generated.
 | |
|     This only determines the maximum possible, fewer than the maximum could be assigned.
 | |
|     """
 | |
|     display_name = "Max Runecraft Task Count"
 | |
|     range_start = 0
 | |
|     range_end = MAX_RUNECRAFT_TASKS
 | |
|     default = MAX_RUNECRAFT_TASKS
 | |
| 
 | |
| 
 | |
| class RunecraftTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating Runecraft tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "Runecraft Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxCraftingLevel(Range):
 | |
|     """
 | |
|     The highest Crafting requirement of any task generated.
 | |
|     If set to 0, no Crafting tasks will be generated.
 | |
|     """
 | |
|     display_name = "Max Required Crafting Level"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxCraftingTasks(Range):
 | |
|     """
 | |
|     The maximum number of Crafting Tasks to possibly be assigned.
 | |
|     If set to 0, no Crafting tasks will be generated.
 | |
|     This only determines the maximum possible, fewer than the maximum could be assigned.
 | |
|     """
 | |
|     display_name = "Max Crafting Task Count"
 | |
|     range_start = 0
 | |
|     range_end = MAX_CRAFTING_TASKS
 | |
|     default = MAX_CRAFTING_TASKS
 | |
| 
 | |
| 
 | |
| class CraftingTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating Crafting tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "Crafting Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxMiningLevel(Range):
 | |
|     """
 | |
|     The highest Mining requirement of any task generated.
 | |
|     If set to 0, no Mining tasks will be generated.
 | |
|     """
 | |
|     display_name = "Max Required Mining Level"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxMiningTasks(Range):
 | |
|     """
 | |
|     The maximum number of Mining Tasks to possibly be assigned.
 | |
|     If set to 0, no Mining tasks will be generated.
 | |
|     This only determines the maximum possible, fewer than the maximum could be assigned.
 | |
|     """
 | |
|     display_name = "Max Mining Task Count"
 | |
|     range_start = 0
 | |
|     range_end = MAX_MINING_TASKS
 | |
|     default = MAX_MINING_TASKS
 | |
| 
 | |
| 
 | |
| class MiningTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating Mining tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "Mining Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxSmithingLevel(Range):
 | |
|     """
 | |
|     The highest Smithing requirement of any task generated.
 | |
|     If set to 0, no Smithing tasks will be generated.
 | |
|     """
 | |
|     display_name = "Max Required Smithing Level"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxSmithingTasks(Range):
 | |
|     """
 | |
|     The maximum number of Smithing Tasks to possibly be assigned.
 | |
|     If set to 0, no Smithing tasks will be generated.
 | |
|     This only determines the maximum possible, fewer than the maximum could be assigned.
 | |
|     """
 | |
|     display_name = "Max Smithing Task Count"
 | |
|     range_start = 0
 | |
|     range_end = MAX_SMITHING_TASKS
 | |
|     default = MAX_SMITHING_TASKS
 | |
| 
 | |
| 
 | |
| class SmithingTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating Smithing tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "Smithing Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxFishingLevel(Range):
 | |
|     """
 | |
|     The highest Fishing requirement of any task generated.
 | |
|     If set to 0, no Fishing tasks will be generated.
 | |
|     """
 | |
|     display_name = "Max Required Fishing Level"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxFishingTasks(Range):
 | |
|     """
 | |
|     The maximum number of Fishing Tasks to possibly be assigned.
 | |
|     If set to 0, no Fishing tasks will be generated.
 | |
|     This only determines the maximum possible, fewer than the maximum could be assigned.
 | |
|     """
 | |
|     display_name = "Max Fishing Task Count"
 | |
|     range_start = 0
 | |
|     range_end = MAX_FISHING_TASKS
 | |
|     default = MAX_FISHING_TASKS
 | |
| 
 | |
| 
 | |
| class FishingTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating Fishing tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "Fishing Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxCookingLevel(Range):
 | |
|     """
 | |
|     The highest Cooking requirement of any task generated.
 | |
|     If set to 0, no Cooking tasks will be generated.
 | |
|     """
 | |
|     display_name = "Max Required Cooking Level"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxCookingTasks(Range):
 | |
|     """
 | |
|     The maximum number of Cooking Tasks to possibly be assigned.
 | |
|     If set to 0, no Cooking tasks will be generated.
 | |
|     This only determines the maximum possible, fewer than the maximum could be assigned.
 | |
|     """
 | |
|     display_name = "Max Cooking Task Count"
 | |
|     range_start = 0
 | |
|     range_end = MAX_COOKING_TASKS
 | |
|     default = MAX_COOKING_TASKS
 | |
| 
 | |
| 
 | |
| class CookingTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating Cooking tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "Cooking Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxFiremakingLevel(Range):
 | |
|     """
 | |
|     The highest Firemaking requirement of any task generated.
 | |
|     If set to 0, no Firemaking tasks will be generated.
 | |
|     """
 | |
|     display_name = "Max Required Firemaking Level"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxFiremakingTasks(Range):
 | |
|     """
 | |
|     The maximum number of Firemaking Tasks to possibly be assigned.
 | |
|     If set to 0, no Firemaking tasks will be generated.
 | |
|     This only determines the maximum possible, fewer than the maximum could be assigned.
 | |
|     """
 | |
|     display_name = "Max Firemaking Task Count"
 | |
|     range_start = 0
 | |
|     range_end = MAX_FIREMAKING_TASKS
 | |
|     default = MAX_FIREMAKING_TASKS
 | |
| 
 | |
| 
 | |
| class FiremakingTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating Firemaking tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "Firemaking Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxWoodcuttingLevel(Range):
 | |
|     """
 | |
|     The highest Woodcutting requirement of any task generated.
 | |
|     If set to 0, no Woodcutting tasks will be generated.
 | |
|     """
 | |
|     display_name = "Max Required Woodcutting Level"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MaxWoodcuttingTasks(Range):
 | |
|     """
 | |
|     The maximum number of Woodcutting Tasks to possibly be assigned.
 | |
|     If set to 0, no Woodcutting tasks will be generated.
 | |
|     This only determines the maximum possible, fewer than the maximum could be assigned.
 | |
|     """
 | |
|     display_name = "Max Woodcutting Task Count"
 | |
|     range_start = 0
 | |
|     range_end = MAX_WOODCUTTING_TASKS
 | |
|     default = MAX_WOODCUTTING_TASKS
 | |
| 
 | |
| 
 | |
| class WoodcuttingTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating Woodcutting tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "Woodcutting Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| class MinimumGeneralTasks(Range):
 | |
|     """
 | |
|     How many guaranteed general progression tasks to be assigned (total level, total XP, etc.).
 | |
|     General progression tasks will be used to fill out any holes caused by having fewer possible tasks than needed, so
 | |
|     there is no maximum.
 | |
|     """
 | |
|     display_name = "Minimum General Task Count"
 | |
|     range_start = 0
 | |
|     range_end = NON_QUEST_LOCATION_COUNT
 | |
|     default = 10
 | |
| 
 | |
| 
 | |
| class GeneralTaskWeight(Range):
 | |
|     """
 | |
|     How much to favor generating General tasks over other types of task.
 | |
|     Weights of all Task Types will be compared against each other, a task with 50 weight
 | |
|     is twice as likely to appear as one with 25.
 | |
|     """
 | |
|     display_name = "General Task Weight"
 | |
|     range_start = 0
 | |
|     range_end = 99
 | |
|     default = 50
 | |
| 
 | |
| 
 | |
| @dataclass
 | |
| class OSRSOptions(PerGameCommonOptions):
 | |
|     starting_area: StartingArea
 | |
|     brutal_grinds: BrutalGrinds
 | |
|     progressive_tasks: ProgressiveTasks
 | |
|     max_combat_level: MaxCombatLevel
 | |
|     max_combat_tasks: MaxCombatTasks
 | |
|     combat_task_weight: CombatTaskWeight
 | |
|     max_prayer_level: MaxPrayerLevel
 | |
|     max_prayer_tasks: MaxPrayerTasks
 | |
|     prayer_task_weight: PrayerTaskWeight
 | |
|     max_magic_level: MaxMagicLevel
 | |
|     max_magic_tasks: MaxMagicTasks
 | |
|     magic_task_weight: MagicTaskWeight
 | |
|     max_runecraft_level: MaxRunecraftLevel
 | |
|     max_runecraft_tasks: MaxRunecraftTasks
 | |
|     runecraft_task_weight: RunecraftTaskWeight
 | |
|     max_crafting_level: MaxCraftingLevel
 | |
|     max_crafting_tasks: MaxCraftingTasks
 | |
|     crafting_task_weight: CraftingTaskWeight
 | |
|     max_mining_level: MaxMiningLevel
 | |
|     max_mining_tasks: MaxMiningTasks
 | |
|     mining_task_weight: MiningTaskWeight
 | |
|     max_smithing_level: MaxSmithingLevel
 | |
|     max_smithing_tasks: MaxSmithingTasks
 | |
|     smithing_task_weight: SmithingTaskWeight
 | |
|     max_fishing_level: MaxFishingLevel
 | |
|     max_fishing_tasks: MaxFishingTasks
 | |
|     fishing_task_weight: FishingTaskWeight
 | |
|     max_cooking_level: MaxCookingLevel
 | |
|     max_cooking_tasks: MaxCookingTasks
 | |
|     cooking_task_weight: CookingTaskWeight
 | |
|     max_firemaking_level: MaxFiremakingLevel
 | |
|     max_firemaking_tasks: MaxFiremakingTasks
 | |
|     firemaking_task_weight: FiremakingTaskWeight
 | |
|     max_woodcutting_level: MaxWoodcuttingLevel
 | |
|     max_woodcutting_tasks: MaxWoodcuttingTasks
 | |
|     woodcutting_task_weight: WoodcuttingTaskWeight
 | |
|     minimum_general_tasks: MinimumGeneralTasks
 | |
|     general_task_weight: GeneralTaskWeight
 | 
