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
|