2024-03-15 12:05:14 +00:00
|
|
|
from dataclasses import dataclass
|
|
|
|
from typing import Iterable, Union, List, Tuple, Hashable
|
|
|
|
|
Stardew Valley 6.x.x: The Content Update (#3478)
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
2024-07-07 13:04:25 +00:00
|
|
|
from BaseClasses import CollectionState
|
2024-03-15 12:05:14 +00:00
|
|
|
from .base import BaseStardewRule, CombinableStardewRule
|
|
|
|
from .protocol import StardewRule
|
|
|
|
|
|
|
|
|
|
|
|
class TotalReceived(BaseStardewRule):
|
|
|
|
count: int
|
|
|
|
items: Iterable[str]
|
|
|
|
player: int
|
|
|
|
|
|
|
|
def __init__(self, count: int, items: Union[str, Iterable[str]], player: int):
|
|
|
|
items_list: List[str]
|
|
|
|
|
|
|
|
if isinstance(items, Iterable):
|
|
|
|
items_list = [*items]
|
|
|
|
else:
|
|
|
|
items_list = [items]
|
|
|
|
|
|
|
|
self.player = player
|
|
|
|
self.items = items_list
|
|
|
|
self.count = count
|
|
|
|
|
|
|
|
def __call__(self, state: CollectionState) -> bool:
|
|
|
|
c = 0
|
|
|
|
for item in self.items:
|
|
|
|
c += state.count(item, self.player)
|
|
|
|
if c >= self.count:
|
|
|
|
return True
|
|
|
|
return False
|
|
|
|
|
|
|
|
def evaluate_while_simplifying(self, state: CollectionState) -> Tuple[StardewRule, bool]:
|
|
|
|
return self, self(state)
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
return f"Received {self.count} {self.items}"
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
|
|
class Received(CombinableStardewRule):
|
|
|
|
item: str
|
|
|
|
player: int
|
|
|
|
count: int
|
Stardew Valley 6.x.x: The Content Update (#3478)
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
2024-07-07 13:04:25 +00:00
|
|
|
event: bool = False
|
|
|
|
"""Helps `explain` to know it can dig into a location with the same name."""
|
2024-03-15 12:05:14 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
def combination_key(self) -> Hashable:
|
|
|
|
return self.item
|
|
|
|
|
|
|
|
@property
|
|
|
|
def value(self):
|
|
|
|
return self.count
|
|
|
|
|
|
|
|
def __call__(self, state: CollectionState) -> bool:
|
|
|
|
return state.has(self.item, self.player, self.count)
|
|
|
|
|
|
|
|
def evaluate_while_simplifying(self, state: CollectionState) -> Tuple[StardewRule, bool]:
|
|
|
|
return self, self(state)
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
if self.count == 1:
|
Stardew Valley 6.x.x: The Content Update (#3478)
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
2024-07-07 13:04:25 +00:00
|
|
|
return f"Received {'event ' if self.event else ''}{self.item}"
|
|
|
|
return f"Received {'event ' if self.event else ''}{self.count} {self.item}"
|
2024-03-15 12:05:14 +00:00
|
|
|
|
|
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
|
|
class Reach(BaseStardewRule):
|
|
|
|
spot: str
|
|
|
|
resolution_hint: str
|
|
|
|
player: int
|
|
|
|
|
|
|
|
def __call__(self, state: CollectionState) -> bool:
|
|
|
|
if self.resolution_hint == 'Region' and self.spot not in state.multiworld.regions.region_cache[self.player]:
|
|
|
|
return False
|
|
|
|
return state.can_reach(self.spot, self.resolution_hint, self.player)
|
|
|
|
|
|
|
|
def evaluate_while_simplifying(self, state: CollectionState) -> Tuple[StardewRule, bool]:
|
|
|
|
return self, self(state)
|
|
|
|
|
|
|
|
def __repr__(self):
|
|
|
|
return f"Reach {self.resolution_hint} {self.spot}"
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
|
|
class HasProgressionPercent(CombinableStardewRule):
|
|
|
|
player: int
|
|
|
|
percent: int
|
|
|
|
|
|
|
|
def __post_init__(self):
|
|
|
|
assert self.percent > 0, "HasProgressionPercent rule must be above 0%"
|
|
|
|
assert self.percent <= 100, "HasProgressionPercent rule can't require more than 100% of items"
|
|
|
|
|
|
|
|
@property
|
|
|
|
def combination_key(self) -> Hashable:
|
|
|
|
return HasProgressionPercent.__name__
|
|
|
|
|
|
|
|
@property
|
|
|
|
def value(self):
|
|
|
|
return self.percent
|
|
|
|
|
|
|
|
def __call__(self, state: CollectionState) -> bool:
|
|
|
|
stardew_world = state.multiworld.worlds[self.player]
|
|
|
|
total_count = stardew_world.total_progression_items
|
|
|
|
needed_count = (total_count * self.percent) // 100
|
Stardew Valley 6.x.x: The Content Update (#3478)
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
2024-07-07 13:04:25 +00:00
|
|
|
player_state = state.prog_items[self.player]
|
|
|
|
|
|
|
|
if needed_count <= len(player_state):
|
|
|
|
return True
|
|
|
|
|
2024-03-15 12:05:14 +00:00
|
|
|
total_count = 0
|
Stardew Valley 6.x.x: The Content Update (#3478)
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
2024-07-07 13:04:25 +00:00
|
|
|
for item, item_count in player_state.items():
|
2024-03-15 12:05:14 +00:00
|
|
|
total_count += item_count
|
|
|
|
if total_count >= needed_count:
|
|
|
|
return True
|
Stardew Valley 6.x.x: The Content Update (#3478)
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
2024-07-07 13:04:25 +00:00
|
|
|
|
2024-03-15 12:05:14 +00:00
|
|
|
return False
|
|
|
|
|
|
|
|
def evaluate_while_simplifying(self, state: CollectionState) -> Tuple[StardewRule, bool]:
|
|
|
|
return self, self(state)
|
|
|
|
|
|
|
|
def __repr__(self):
|
2024-07-20 19:24:24 +00:00
|
|
|
return f"Received {self.percent}% progression items"
|