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
 |