mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
Stardew Valley: remove BaseLogic generic so importing mixins is no longer needed (#4916)
* remove BaseLogic generic so importing mixins is no longer needed * self review
This commit is contained in:
@@ -1,23 +1,9 @@
|
|||||||
import typing
|
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .mine_logic import MineLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .skill_logic import SkillLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from ..mods.logic.magic_logic import MagicLogicMixin
|
|
||||||
from ..stardew_rule import StardewRule
|
from ..stardew_rule import StardewRule
|
||||||
from ..strings.region_names import Region
|
from ..strings.region_names import Region
|
||||||
from ..strings.skill_names import Skill, ModSkill
|
from ..strings.skill_names import Skill, ModSkill
|
||||||
from ..strings.tool_names import ToolMaterial, Tool
|
from ..strings.tool_names import ToolMaterial, Tool
|
||||||
|
|
||||||
if typing.TYPE_CHECKING:
|
|
||||||
from ..mods.logic.mod_logic import ModLogicMixin
|
|
||||||
else:
|
|
||||||
ModLogicMixin = object
|
|
||||||
|
|
||||||
|
|
||||||
class AbilityLogicMixin(BaseLogicMixin):
|
class AbilityLogicMixin(BaseLogicMixin):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@@ -25,8 +11,7 @@ class AbilityLogicMixin(BaseLogicMixin):
|
|||||||
self.ability = AbilityLogic(*args, **kwargs)
|
self.ability = AbilityLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class AbilityLogic(BaseLogic[Union[AbilityLogicMixin, RegionLogicMixin, ReceivedLogicMixin, ToolLogicMixin, SkillLogicMixin, MineLogicMixin, MagicLogicMixin,
|
class AbilityLogic(BaseLogic):
|
||||||
ModLogicMixin]]):
|
|
||||||
def can_mine_perfectly(self) -> StardewRule:
|
def can_mine_perfectly(self) -> StardewRule:
|
||||||
return self.logic.mine.can_progress_in_the_mines_from_floor(160)
|
return self.logic.mine.can_progress_in_the_mines_from_floor(160)
|
||||||
|
|
||||||
|
@@ -1,11 +1,5 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogic, BaseLogicMixin
|
from .base_logic import BaseLogic, BaseLogicMixin
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from ..stardew_rule import StardewRule, True_
|
from ..stardew_rule import StardewRule, True_
|
||||||
from ..strings.generic_names import Generic
|
from ..strings.generic_names import Generic
|
||||||
from ..strings.geode_names import Geode
|
from ..strings.geode_names import Geode
|
||||||
@@ -19,7 +13,7 @@ class ActionLogicMixin(BaseLogicMixin):
|
|||||||
self.action = ActionLogic(*args, **kwargs)
|
self.action = ActionLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ActionLogic(BaseLogic[Union[ActionLogicMixin, RegionLogicMixin, ReceivedLogicMixin, HasLogicMixin, ToolLogicMixin]]):
|
class ActionLogic(BaseLogic):
|
||||||
|
|
||||||
def can_watch(self, channel: str = None):
|
def can_watch(self, channel: str = None):
|
||||||
tv_rule = True_()
|
tv_rule = True_()
|
||||||
|
@@ -6,11 +6,6 @@ from ..strings.building_names import Building
|
|||||||
from ..strings.forageable_names import Forageable
|
from ..strings.forageable_names import Forageable
|
||||||
from ..strings.machine_names import Machine
|
from ..strings.machine_names import Machine
|
||||||
|
|
||||||
if typing.TYPE_CHECKING:
|
|
||||||
from .logic import StardewLogic
|
|
||||||
else:
|
|
||||||
StardewLogic = object
|
|
||||||
|
|
||||||
|
|
||||||
class AnimalLogicMixin(BaseLogicMixin):
|
class AnimalLogicMixin(BaseLogicMixin):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@@ -18,7 +13,7 @@ class AnimalLogicMixin(BaseLogicMixin):
|
|||||||
self.animal = AnimalLogic(*args, **kwargs)
|
self.animal = AnimalLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class AnimalLogic(BaseLogic[StardewLogic]):
|
class AnimalLogic(BaseLogic):
|
||||||
|
|
||||||
def can_incubate(self, egg_item: str) -> StardewRule:
|
def can_incubate(self, egg_item: str) -> StardewRule:
|
||||||
return self.logic.building.has_building(Building.coop) & self.logic.has(egg_item)
|
return self.logic.building.has_building(Building.coop) & self.logic.has(egg_item)
|
||||||
|
@@ -1,8 +1,4 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from .base_logic import BaseLogic, BaseLogicMixin
|
from .base_logic import BaseLogic, BaseLogicMixin
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .. import options
|
from .. import options
|
||||||
from ..stardew_rule import StardewRule, True_
|
from ..stardew_rule import StardewRule, True_
|
||||||
from ..strings.region_names import Region
|
from ..strings.region_names import Region
|
||||||
@@ -14,7 +10,7 @@ class ArcadeLogicMixin(BaseLogicMixin):
|
|||||||
self.arcade = ArcadeLogic(*args, **kwargs)
|
self.arcade = ArcadeLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ArcadeLogic(BaseLogic[Union[ArcadeLogicMixin, RegionLogicMixin, ReceivedLogicMixin]]):
|
class ArcadeLogic(BaseLogic):
|
||||||
|
|
||||||
def has_jotpk_power_level(self, power_level: int) -> StardewRule:
|
def has_jotpk_power_level(self, power_level: int) -> StardewRule:
|
||||||
if self.options.arcade_machine_locations != options.ArcadeMachineLocations.option_full_shuffling:
|
if self.options.arcade_machine_locations != options.ArcadeMachineLocations.option_full_shuffling:
|
||||||
|
@@ -1,8 +1,4 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from .base_logic import BaseLogic, BaseLogicMixin
|
from .base_logic import BaseLogic, BaseLogicMixin
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .time_logic import TimeLogicMixin
|
|
||||||
from ..data.artisan import MachineSource
|
from ..data.artisan import MachineSource
|
||||||
from ..data.game_item import ItemTag
|
from ..data.game_item import ItemTag
|
||||||
from ..stardew_rule import StardewRule
|
from ..stardew_rule import StardewRule
|
||||||
@@ -20,7 +16,7 @@ class ArtisanLogicMixin(BaseLogicMixin):
|
|||||||
self.artisan = ArtisanLogic(*args, **kwargs)
|
self.artisan = ArtisanLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ArtisanLogic(BaseLogic[Union[ArtisanLogicMixin, TimeLogicMixin, HasLogicMixin]]):
|
class ArtisanLogic(BaseLogic):
|
||||||
def initialize_rules(self):
|
def initialize_rules(self):
|
||||||
# TODO remove this one too once fish are converted to sources
|
# TODO remove this one too once fish are converted to sources
|
||||||
self.registry.artisan_good_rules.update({ArtisanGood.specific_smoked_fish(fish): self.can_smoke(fish) for fish in all_fish})
|
self.registry.artisan_good_rules.update({ArtisanGood.specific_smoked_fish(fish): self.can_smoke(fish) for fish in all_fish})
|
||||||
|
@@ -1,11 +1,15 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TypeVar, Generic, Dict, Collection
|
import typing
|
||||||
|
from typing import Dict, Collection
|
||||||
|
|
||||||
from ..content.game_content import StardewContent
|
from ..content.game_content import StardewContent
|
||||||
from ..options import StardewValleyOptions
|
from ..options import StardewValleyOptions
|
||||||
from ..stardew_rule import StardewRule
|
from ..stardew_rule import StardewRule
|
||||||
|
|
||||||
|
if typing.TYPE_CHECKING:
|
||||||
|
from .logic import StardewLogic
|
||||||
|
|
||||||
|
|
||||||
class LogicRegistry:
|
class LogicRegistry:
|
||||||
|
|
||||||
@@ -30,18 +34,16 @@ class BaseLogicMixin:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
T = TypeVar("T", bound=BaseLogicMixin)
|
class BaseLogic(BaseLogicMixin):
|
||||||
|
|
||||||
|
|
||||||
class BaseLogic(BaseLogicMixin, Generic[T]):
|
|
||||||
player: int
|
player: int
|
||||||
registry: LogicRegistry
|
registry: LogicRegistry
|
||||||
options: StardewValleyOptions
|
options: StardewValleyOptions
|
||||||
content: StardewContent
|
content: StardewContent
|
||||||
regions: Collection[str]
|
regions: Collection[str]
|
||||||
logic: T
|
logic: StardewLogic
|
||||||
|
|
||||||
def __init__(self, player: int, registry: LogicRegistry, options: StardewValleyOptions, content: StardewContent, regions: Collection[str], logic: T):
|
def __init__(self, player: int, registry: LogicRegistry, options: StardewValleyOptions, content: StardewContent, regions: Collection[str],
|
||||||
|
logic: StardewLogic):
|
||||||
super().__init__(player, registry, options, content, regions, logic)
|
super().__init__(player, registry, options, content, regions, logic)
|
||||||
self.player = player
|
self.player = player
|
||||||
self.registry = registry
|
self.registry = registry
|
||||||
|
@@ -1,9 +1,5 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from ..stardew_rule import StardewRule
|
from ..stardew_rule import StardewRule
|
||||||
|
|
||||||
|
|
||||||
@@ -13,7 +9,7 @@ class BookLogicMixin(BaseLogicMixin):
|
|||||||
self.book = BookLogic(*args, **kwargs)
|
self.book = BookLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class BookLogic(BaseLogic[Union[ReceivedLogicMixin, HasLogicMixin]]):
|
class BookLogic(BaseLogic):
|
||||||
|
|
||||||
@cache_self1
|
@cache_self1
|
||||||
def has_book_power(self, book: str) -> StardewRule:
|
def has_book_power(self, book: str) -> StardewRule:
|
||||||
|
@@ -1,21 +1,11 @@
|
|||||||
import typing
|
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogic, BaseLogicMixin
|
from .base_logic import BaseLogic, BaseLogicMixin
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from ..stardew_rule import StardewRule, true_
|
from ..stardew_rule import StardewRule, true_
|
||||||
from ..strings.building_names import Building
|
from ..strings.building_names import Building
|
||||||
from ..strings.region_names import Region
|
from ..strings.region_names import Region
|
||||||
|
|
||||||
if typing.TYPE_CHECKING:
|
|
||||||
from .source_logic import SourceLogicMixin
|
|
||||||
else:
|
|
||||||
SourceLogicMixin = object
|
|
||||||
|
|
||||||
AUTO_BUILDING_BUILDINGS = {Building.shipping_bin, Building.pet_bowl, Building.farm_house}
|
AUTO_BUILDING_BUILDINGS = {Building.shipping_bin, Building.pet_bowl, Building.farm_house}
|
||||||
|
|
||||||
|
|
||||||
@@ -25,7 +15,7 @@ class BuildingLogicMixin(BaseLogicMixin):
|
|||||||
self.building = BuildingLogic(*args, **kwargs)
|
self.building = BuildingLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class BuildingLogic(BaseLogic[Union[BuildingLogicMixin, RegionLogicMixin, ReceivedLogicMixin, HasLogicMixin, SourceLogicMixin]]):
|
class BuildingLogic(BaseLogic):
|
||||||
|
|
||||||
@cache_self1
|
@cache_self1
|
||||||
def can_build(self, building_name: str) -> StardewRule:
|
def can_build(self, building_name: str) -> StardewRule:
|
||||||
|
@@ -1,16 +1,7 @@
|
|||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import Union, List
|
from typing import List
|
||||||
|
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .fishing_logic import FishingLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .money_logic import MoneyLogicMixin
|
|
||||||
from .quality_logic import QualityLogicMixin
|
|
||||||
from .quest_logic import QuestLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .skill_logic import SkillLogicMixin
|
|
||||||
from .time_logic import TimeLogicMixin
|
|
||||||
from ..bundles.bundle import Bundle
|
from ..bundles.bundle import Bundle
|
||||||
from ..stardew_rule import StardewRule, True_
|
from ..stardew_rule import StardewRule, True_
|
||||||
from ..strings.ap_names.community_upgrade_names import CommunityUpgrade
|
from ..strings.ap_names.community_upgrade_names import CommunityUpgrade
|
||||||
@@ -27,8 +18,7 @@ class BundleLogicMixin(BaseLogicMixin):
|
|||||||
self.bundle = BundleLogic(*args, **kwargs)
|
self.bundle = BundleLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class BundleLogic(BaseLogic[Union[ReceivedLogicMixin, HasLogicMixin, TimeLogicMixin, RegionLogicMixin, MoneyLogicMixin, QualityLogicMixin, FishingLogicMixin,
|
class BundleLogic(BaseLogic):
|
||||||
SkillLogicMixin, QuestLogicMixin]]):
|
|
||||||
# Should be cached
|
# Should be cached
|
||||||
def can_complete_bundle(self, bundle: Bundle) -> StardewRule:
|
def can_complete_bundle(self, bundle: Bundle) -> StardewRule:
|
||||||
item_rules = []
|
item_rules = []
|
||||||
|
@@ -1,12 +1,7 @@
|
|||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from ..mods.logic.magic_logic import MagicLogicMixin
|
|
||||||
from ..stardew_rule import StardewRule, False_
|
from ..stardew_rule import StardewRule, False_
|
||||||
from ..strings.ap_names.ap_weapon_names import APWeapon
|
from ..strings.ap_names.ap_weapon_names import APWeapon
|
||||||
from ..strings.performance_names import Performance
|
from ..strings.performance_names import Performance
|
||||||
@@ -20,7 +15,7 @@ class CombatLogicMixin(BaseLogicMixin):
|
|||||||
self.combat = CombatLogic(*args, **kwargs)
|
self.combat = CombatLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class CombatLogic(BaseLogic[Union[HasLogicMixin, CombatLogicMixin, RegionLogicMixin, ReceivedLogicMixin, MagicLogicMixin]]):
|
class CombatLogic(BaseLogic):
|
||||||
@cache_self1
|
@cache_self1
|
||||||
def can_fight_at_level(self, level: str) -> StardewRule:
|
def can_fight_at_level(self, level: str) -> StardewRule:
|
||||||
if level == Performance.basic:
|
if level == Performance.basic:
|
||||||
|
@@ -1,17 +1,7 @@
|
|||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .action_logic import ActionLogicMixin
|
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .building_logic import BuildingLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .money_logic import MoneyLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .relationship_logic import RelationshipLogicMixin
|
|
||||||
from .season_logic import SeasonLogicMixin
|
|
||||||
from .skill_logic import SkillLogicMixin
|
|
||||||
from ..data.recipe_data import RecipeSource, StarterSource, ShopSource, SkillSource, FriendshipSource, \
|
from ..data.recipe_data import RecipeSource, StarterSource, ShopSource, SkillSource, FriendshipSource, \
|
||||||
QueenOfSauceSource, CookingRecipe, ShopFriendshipSource
|
QueenOfSauceSource, CookingRecipe, ShopFriendshipSource
|
||||||
from ..data.recipe_source import CutsceneSource, ShopTradeSource
|
from ..data.recipe_source import CutsceneSource, ShopTradeSource
|
||||||
@@ -29,8 +19,7 @@ class CookingLogicMixin(BaseLogicMixin):
|
|||||||
self.cooking = CookingLogic(*args, **kwargs)
|
self.cooking = CookingLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class CookingLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, MoneyLogicMixin, ActionLogicMixin,
|
class CookingLogic(BaseLogic):
|
||||||
BuildingLogicMixin, RelationshipLogicMixin, SkillLogicMixin, CookingLogicMixin]]):
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def can_cook_in_kitchen(self) -> StardewRule:
|
def can_cook_in_kitchen(self) -> StardewRule:
|
||||||
return self.logic.building.has_building(Building.kitchen) | self.logic.skill.has_level(Skill.foraging, 9)
|
return self.logic.building.has_building(Building.kitchen) | self.logic.skill.has_level(Skill.foraging, 9)
|
||||||
|
@@ -1,15 +1,5 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .money_logic import MoneyLogicMixin
|
|
||||||
from .quest_logic import QuestLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .relationship_logic import RelationshipLogicMixin
|
|
||||||
from .skill_logic import SkillLogicMixin
|
|
||||||
from .special_order_logic import SpecialOrderLogicMixin
|
|
||||||
from .. import options
|
from .. import options
|
||||||
from ..data.craftable_data import CraftingRecipe
|
from ..data.craftable_data import CraftingRecipe
|
||||||
from ..data.recipe_source import CutsceneSource, ShopTradeSource, ArchipelagoSource, LogicSource, SpecialOrderSource, \
|
from ..data.recipe_source import CutsceneSource, ShopTradeSource, ArchipelagoSource, LogicSource, SpecialOrderSource, \
|
||||||
@@ -25,8 +15,7 @@ class CraftingLogicMixin(BaseLogicMixin):
|
|||||||
self.crafting = CraftingLogic(*args, **kwargs)
|
self.crafting = CraftingLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class CraftingLogic(BaseLogic[Union[ReceivedLogicMixin, HasLogicMixin, RegionLogicMixin, MoneyLogicMixin, RelationshipLogicMixin,
|
class CraftingLogic(BaseLogic):
|
||||||
SkillLogicMixin, SpecialOrderLogicMixin, CraftingLogicMixin, QuestLogicMixin]]):
|
|
||||||
@cache_self1
|
@cache_self1
|
||||||
def can_craft(self, recipe: CraftingRecipe = None) -> StardewRule:
|
def can_craft(self, recipe: CraftingRecipe = None) -> StardewRule:
|
||||||
if recipe is None:
|
if recipe is None:
|
||||||
|
@@ -3,11 +3,6 @@ from typing import Union, Tuple
|
|||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .season_logic import SeasonLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from .. import options
|
from .. import options
|
||||||
from ..stardew_rule import StardewRule, True_, false_
|
from ..stardew_rule import StardewRule, True_, false_
|
||||||
from ..strings.fertilizer_names import Fertilizer
|
from ..strings.fertilizer_names import Fertilizer
|
||||||
@@ -29,7 +24,7 @@ class FarmingLogicMixin(BaseLogicMixin):
|
|||||||
self.farming = FarmingLogic(*args, **kwargs)
|
self.farming = FarmingLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class FarmingLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, ToolLogicMixin, FarmingLogicMixin]]):
|
class FarmingLogic(BaseLogic):
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def has_farming_tools(self) -> StardewRule:
|
def has_farming_tools(self) -> StardewRule:
|
||||||
@@ -45,6 +40,8 @@ class FarmingLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogi
|
|||||||
if tier >= 3:
|
if tier >= 3:
|
||||||
return self.logic.has(Fertilizer.deluxe)
|
return self.logic.has(Fertilizer.deluxe)
|
||||||
|
|
||||||
|
return self.logic.false_
|
||||||
|
|
||||||
@cache_self1
|
@cache_self1
|
||||||
def can_plant_and_grow_item(self, seasons: Union[str, Tuple[str]]) -> StardewRule:
|
def can_plant_and_grow_item(self, seasons: Union[str, Tuple[str]]) -> StardewRule:
|
||||||
if seasons == (): # indoor farming
|
if seasons == (): # indoor farming
|
||||||
|
@@ -1,20 +1,4 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from .action_logic import ActionLogicMixin
|
|
||||||
from .animal_logic import AnimalLogicMixin
|
|
||||||
from .artisan_logic import ArtisanLogicMixin
|
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .fishing_logic import FishingLogicMixin
|
|
||||||
from .gift_logic import GiftLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .money_logic import MoneyLogicMixin
|
|
||||||
from .monster_logic import MonsterLogicMixin
|
|
||||||
from .museum_logic import MuseumLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .relationship_logic import RelationshipLogicMixin
|
|
||||||
from .skill_logic import SkillLogicMixin
|
|
||||||
from .time_logic import TimeLogicMixin
|
|
||||||
from ..options import FestivalLocations
|
from ..options import FestivalLocations
|
||||||
from ..stardew_rule import StardewRule
|
from ..stardew_rule import StardewRule
|
||||||
from ..strings.animal_product_names import AnimalProduct
|
from ..strings.animal_product_names import AnimalProduct
|
||||||
@@ -36,8 +20,7 @@ class FestivalLogicMixin(BaseLogicMixin):
|
|||||||
self.festival = FestivalLogic(*args, **kwargs)
|
self.festival = FestivalLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class FestivalLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, FestivalLogicMixin, ArtisanLogicMixin, AnimalLogicMixin, MoneyLogicMixin, TimeLogicMixin,
|
class FestivalLogic(BaseLogic):
|
||||||
SkillLogicMixin, RegionLogicMixin, ActionLogicMixin, MonsterLogicMixin, RelationshipLogicMixin, FishingLogicMixin, MuseumLogicMixin, GiftLogicMixin]]):
|
|
||||||
|
|
||||||
def initialize_rules(self):
|
def initialize_rules(self):
|
||||||
self.registry.festival_rules.update({
|
self.registry.festival_rules.update({
|
||||||
|
@@ -1,17 +1,8 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .season_logic import SeasonLogicMixin
|
|
||||||
from .skill_logic import SkillLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from ..data import fish_data
|
from ..data import fish_data
|
||||||
from ..data.fish_data import FishItem
|
from ..data.fish_data import FishItem
|
||||||
from ..options import ExcludeGingerIsland
|
from ..options import ExcludeGingerIsland, SpecialOrderLocations
|
||||||
from ..options import SpecialOrderLocations
|
|
||||||
from ..stardew_rule import StardewRule, True_, False_
|
from ..stardew_rule import StardewRule, True_, False_
|
||||||
from ..strings.ap_names.mods.mod_items import SVEQuestItem
|
from ..strings.ap_names.mods.mod_items import SVEQuestItem
|
||||||
from ..strings.craftable_names import Fishing
|
from ..strings.craftable_names import Fishing
|
||||||
@@ -28,8 +19,7 @@ class FishingLogicMixin(BaseLogicMixin):
|
|||||||
self.fishing = FishingLogic(*args, **kwargs)
|
self.fishing = FishingLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class FishingLogic(BaseLogic[Union[HasLogicMixin, FishingLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, ToolLogicMixin,
|
class FishingLogic(BaseLogic):
|
||||||
SkillLogicMixin]]):
|
|
||||||
def can_fish_in_freshwater(self) -> StardewRule:
|
def can_fish_in_freshwater(self) -> StardewRule:
|
||||||
return self.logic.skill.can_fish() & self.logic.region.can_reach_any((Region.forest, Region.town, Region.mountain))
|
return self.logic.skill.can_fish() & self.logic.region.can_reach_any((Region.forest, Region.town, Region.mountain))
|
||||||
|
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
|
|
||||||
from .base_logic import BaseLogic, BaseLogicMixin
|
from .base_logic import BaseLogic, BaseLogicMixin
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from ..stardew_rule import StardewRule
|
from ..stardew_rule import StardewRule
|
||||||
from ..strings.animal_product_names import AnimalProduct
|
from ..strings.animal_product_names import AnimalProduct
|
||||||
from ..strings.gift_names import Gift
|
from ..strings.gift_names import Gift
|
||||||
@@ -13,7 +12,7 @@ class GiftLogicMixin(BaseLogicMixin):
|
|||||||
self.gifts = GiftLogic(*args, **kwargs)
|
self.gifts = GiftLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class GiftLogic(BaseLogic[HasLogicMixin]):
|
class GiftLogic(BaseLogic):
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def has_any_universal_love(self) -> StardewRule:
|
def has_any_universal_love(self) -> StardewRule:
|
||||||
|
@@ -1,5 +1,3 @@
|
|||||||
import typing
|
|
||||||
|
|
||||||
from .base_logic import BaseLogic, BaseLogicMixin
|
from .base_logic import BaseLogic, BaseLogicMixin
|
||||||
from ..data.craftable_data import all_crafting_recipes_by_name
|
from ..data.craftable_data import all_crafting_recipes_by_name
|
||||||
from ..data.recipe_data import all_cooking_recipes_by_name
|
from ..data.recipe_data import all_cooking_recipes_by_name
|
||||||
@@ -12,11 +10,6 @@ from ..strings.quest_names import Quest
|
|||||||
from ..strings.season_names import Season
|
from ..strings.season_names import Season
|
||||||
from ..strings.wallet_item_names import Wallet
|
from ..strings.wallet_item_names import Wallet
|
||||||
|
|
||||||
if typing.TYPE_CHECKING:
|
|
||||||
from .logic import StardewLogic
|
|
||||||
else:
|
|
||||||
StardewLogic = object
|
|
||||||
|
|
||||||
|
|
||||||
class GoalLogicMixin(BaseLogicMixin):
|
class GoalLogicMixin(BaseLogicMixin):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@@ -24,7 +17,7 @@ class GoalLogicMixin(BaseLogicMixin):
|
|||||||
self.goal = GoalLogic(*args, **kwargs)
|
self.goal = GoalLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class GoalLogic(BaseLogic[StardewLogic]):
|
class GoalLogic(BaseLogic):
|
||||||
|
|
||||||
def can_complete_community_center(self) -> StardewRule:
|
def can_complete_community_center(self) -> StardewRule:
|
||||||
return self.logic.bundle.can_complete_community_center
|
return self.logic.bundle.can_complete_community_center
|
||||||
|
@@ -38,7 +38,7 @@ class GrindLogicMixin(BaseLogicMixin):
|
|||||||
self.grind = GrindLogic(*args, **kwargs)
|
self.grind = GrindLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class GrindLogic(BaseLogic[Union[GrindLogicMixin, HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, BookLogicMixin, TimeLogicMixin, ToolLogicMixin]]):
|
class GrindLogic(BaseLogic):
|
||||||
|
|
||||||
def can_grind_mystery_boxes(self, quantity: int) -> StardewRule:
|
def can_grind_mystery_boxes(self, quantity: int) -> StardewRule:
|
||||||
opening_rule = self.logic.region.can_reach(Region.blacksmith)
|
opening_rule = self.logic.region.can_reach(Region.blacksmith)
|
||||||
|
@@ -1,15 +1,7 @@
|
|||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .farming_logic import FarmingLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .season_logic import SeasonLogicMixin
|
|
||||||
from .time_logic import TimeLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from ..data.harvest import ForagingSource, HarvestFruitTreeSource, HarvestCropSource
|
from ..data.harvest import ForagingSource, HarvestFruitTreeSource, HarvestCropSource
|
||||||
from ..stardew_rule import StardewRule
|
from ..stardew_rule import StardewRule
|
||||||
from ..strings.ap_names.community_upgrade_names import CommunityUpgrade
|
from ..strings.ap_names.community_upgrade_names import CommunityUpgrade
|
||||||
@@ -22,8 +14,7 @@ class HarvestingLogicMixin(BaseLogicMixin):
|
|||||||
self.harvesting = HarvestingLogic(*args, **kwargs)
|
self.harvesting = HarvestingLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class HarvestingLogic(BaseLogic[Union[HarvestingLogicMixin, HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, ToolLogicMixin,
|
class HarvestingLogic(BaseLogic):
|
||||||
FarmingLogicMixin, TimeLogicMixin]]):
|
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def can_harvest_from_fruit_bats(self) -> StardewRule:
|
def can_harvest_from_fruit_bats(self) -> StardewRule:
|
||||||
|
@@ -2,7 +2,7 @@ from .base_logic import BaseLogic
|
|||||||
from ..stardew_rule import StardewRule, And, Or, Has, Count, true_, false_, HasProgressionPercent
|
from ..stardew_rule import StardewRule, And, Or, Has, Count, true_, false_, HasProgressionPercent
|
||||||
|
|
||||||
|
|
||||||
class HasLogicMixin(BaseLogic[None]):
|
class HasLogicMixin(BaseLogic):
|
||||||
true_ = true_
|
true_ = true_
|
||||||
false_ = false_
|
false_ = false_
|
||||||
|
|
||||||
|
@@ -12,7 +12,7 @@ class TimeLogicMixin(BaseLogicMixin):
|
|||||||
self.time = TimeLogic(*args, **kwargs)
|
self.time = TimeLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class TimeLogic(BaseLogic[Union[TimeLogicMixin, ReceivedLogicMixin]]):
|
class TimeLogic(BaseLogic):
|
||||||
|
|
||||||
def has_lived_months(self, number: int) -> StardewRule:
|
def has_lived_months(self, number: int) -> StardewRule:
|
||||||
return self.logic.received(Event.month_end, number)
|
return self.logic.received(Event.month_end, number)
|
||||||
|
@@ -1,14 +1,5 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .combat_logic import CombatLogicMixin
|
|
||||||
from .cooking_logic import CookingLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .skill_logic import SkillLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from .. import options
|
from .. import options
|
||||||
from ..stardew_rule import StardewRule, True_
|
from ..stardew_rule import StardewRule, True_
|
||||||
from ..strings.performance_names import Performance
|
from ..strings.performance_names import Performance
|
||||||
@@ -23,8 +14,7 @@ class MineLogicMixin(BaseLogicMixin):
|
|||||||
self.mine = MineLogic(*args, **kwargs)
|
self.mine = MineLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class MineLogic(BaseLogic[Union[HasLogicMixin, MineLogicMixin, RegionLogicMixin, ReceivedLogicMixin, CombatLogicMixin, ToolLogicMixin,
|
class MineLogic(BaseLogic):
|
||||||
SkillLogicMixin, CookingLogicMixin]]):
|
|
||||||
# Regions
|
# Regions
|
||||||
def can_mine_in_the_mines_floor_1_40(self) -> StardewRule:
|
def can_mine_in_the_mines_floor_1_40(self) -> StardewRule:
|
||||||
return self.logic.region.can_reach(Region.mines_floor_5)
|
return self.logic.region.can_reach(Region.mines_floor_5)
|
||||||
|
@@ -1,25 +1,11 @@
|
|||||||
import typing
|
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .grind_logic import GrindLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .season_logic import SeasonLogicMixin
|
|
||||||
from .time_logic import TimeLogicMixin
|
|
||||||
from ..data.shop import ShopSource
|
from ..data.shop import ShopSource
|
||||||
from ..options import SpecialOrderLocations
|
from ..options import SpecialOrderLocations
|
||||||
from ..stardew_rule import StardewRule, True_, HasProgressionPercent, False_, true_
|
from ..stardew_rule import StardewRule, True_, HasProgressionPercent, False_, true_
|
||||||
from ..strings.currency_names import Currency
|
from ..strings.currency_names import Currency
|
||||||
from ..strings.region_names import Region, LogicRegion
|
from ..strings.region_names import Region, LogicRegion
|
||||||
|
|
||||||
if typing.TYPE_CHECKING:
|
|
||||||
from .shipping_logic import ShippingLogicMixin
|
|
||||||
else:
|
|
||||||
ShippingLogicMixin = object
|
|
||||||
|
|
||||||
qi_gem_rewards = ("100 Qi Gems", "50 Qi Gems", "40 Qi Gems", "35 Qi Gems", "25 Qi Gems",
|
qi_gem_rewards = ("100 Qi Gems", "50 Qi Gems", "40 Qi Gems", "35 Qi Gems", "25 Qi Gems",
|
||||||
"20 Qi Gems", "15 Qi Gems", "10 Qi Gems")
|
"20 Qi Gems", "15 Qi Gems", "10 Qi Gems")
|
||||||
|
|
||||||
@@ -30,8 +16,7 @@ class MoneyLogicMixin(BaseLogicMixin):
|
|||||||
self.money = MoneyLogic(*args, **kwargs)
|
self.money = MoneyLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class MoneyLogic(BaseLogic[Union[RegionLogicMixin, MoneyLogicMixin, TimeLogicMixin, RegionLogicMixin, ReceivedLogicMixin, HasLogicMixin, SeasonLogicMixin,
|
class MoneyLogic(BaseLogic):
|
||||||
GrindLogicMixin, ShippingLogicMixin]]):
|
|
||||||
|
|
||||||
@cache_self1
|
@cache_self1
|
||||||
def can_have_earned_total(self, amount: int) -> StardewRule:
|
def can_have_earned_total(self, amount: int) -> StardewRule:
|
||||||
|
@@ -20,7 +20,7 @@ class MonsterLogicMixin(BaseLogicMixin):
|
|||||||
self.monster = MonsterLogic(*args, **kwargs)
|
self.monster = MonsterLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class MonsterLogic(BaseLogic[Union[HasLogicMixin, MonsterLogicMixin, RegionLogicMixin, CombatLogicMixin, TimeLogicMixin]]):
|
class MonsterLogic(BaseLogic):
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def all_monsters_by_name(self):
|
def all_monsters_by_name(self):
|
||||||
|
@@ -22,7 +22,7 @@ class MuseumLogicMixin(BaseLogicMixin):
|
|||||||
self.museum = MuseumLogic(*args, **kwargs)
|
self.museum = MuseumLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class MuseumLogic(BaseLogic[Union[ReceivedLogicMixin, HasLogicMixin, TimeLogicMixin, RegionLogicMixin, ActionLogicMixin, ToolLogicMixin, MuseumLogicMixin]]):
|
class MuseumLogic(BaseLogic):
|
||||||
|
|
||||||
def can_donate_museum_items(self, number: int) -> StardewRule:
|
def can_donate_museum_items(self, number: int) -> StardewRule:
|
||||||
return self.logic.region.can_reach(Region.museum) & self.logic.museum.can_find_museum_items(number)
|
return self.logic.region.can_reach(Region.museum) & self.logic.museum.can_find_museum_items(number)
|
||||||
|
@@ -1,11 +1,6 @@
|
|||||||
import math
|
import math
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .time_logic import TimeLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from ..content.feature.friendsanity import pet_heart_item_name
|
from ..content.feature.friendsanity import pet_heart_item_name
|
||||||
from ..stardew_rule import StardewRule, True_
|
from ..stardew_rule import StardewRule, True_
|
||||||
from ..strings.region_names import Region
|
from ..strings.region_names import Region
|
||||||
@@ -17,7 +12,7 @@ class PetLogicMixin(BaseLogicMixin):
|
|||||||
self.pet = PetLogic(*args, **kwargs)
|
self.pet = PetLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class PetLogic(BaseLogic[Union[RegionLogicMixin, ReceivedLogicMixin, TimeLogicMixin, ToolLogicMixin]]):
|
class PetLogic(BaseLogic):
|
||||||
def has_pet_hearts(self, hearts: int = 1) -> StardewRule:
|
def has_pet_hearts(self, hearts: int = 1) -> StardewRule:
|
||||||
assert hearts >= 0, "You can't have negative hearts with a pet."
|
assert hearts >= 0, "You can't have negative hearts with a pet."
|
||||||
if hearts == 0:
|
if hearts == 0:
|
||||||
|
@@ -14,7 +14,7 @@ class QualityLogicMixin(BaseLogicMixin):
|
|||||||
self.quality = QualityLogic(*args, **kwargs)
|
self.quality = QualityLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class QualityLogic(BaseLogic[Union[SkillLogicMixin, FarmingLogicMixin]]):
|
class QualityLogic(BaseLogic):
|
||||||
|
|
||||||
@cache_self1
|
@cache_self1
|
||||||
def can_grow_crop_quality(self, quality: str) -> StardewRule:
|
def can_grow_crop_quality(self, quality: str) -> StardewRule:
|
||||||
|
@@ -1,21 +1,6 @@
|
|||||||
from typing import Dict, Union
|
from typing import Dict
|
||||||
|
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .building_logic import BuildingLogicMixin
|
|
||||||
from .combat_logic import CombatLogicMixin
|
|
||||||
from .cooking_logic import CookingLogicMixin
|
|
||||||
from .fishing_logic import FishingLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .mine_logic import MineLogicMixin
|
|
||||||
from .money_logic import MoneyLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .relationship_logic import RelationshipLogicMixin
|
|
||||||
from .season_logic import SeasonLogicMixin
|
|
||||||
from .skill_logic import SkillLogicMixin
|
|
||||||
from .time_logic import TimeLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from .wallet_logic import WalletLogicMixin
|
|
||||||
from ..stardew_rule import StardewRule, Has, True_
|
from ..stardew_rule import StardewRule, Has, True_
|
||||||
from ..strings.ap_names.community_upgrade_names import CommunityUpgrade
|
from ..strings.ap_names.community_upgrade_names import CommunityUpgrade
|
||||||
from ..strings.artisan_good_names import ArtisanGood
|
from ..strings.artisan_good_names import ArtisanGood
|
||||||
@@ -43,9 +28,7 @@ class QuestLogicMixin(BaseLogicMixin):
|
|||||||
self.quest = QuestLogic(*args, **kwargs)
|
self.quest = QuestLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class QuestLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, MoneyLogicMixin, MineLogicMixin, RegionLogicMixin, RelationshipLogicMixin, ToolLogicMixin,
|
class QuestLogic(BaseLogic):
|
||||||
FishingLogicMixin, CookingLogicMixin, CombatLogicMixin, SeasonLogicMixin, SkillLogicMixin, WalletLogicMixin, QuestLogicMixin,
|
|
||||||
BuildingLogicMixin, TimeLogicMixin]]):
|
|
||||||
|
|
||||||
def initialize_rules(self):
|
def initialize_rules(self):
|
||||||
self.update_rules({
|
self.update_rules({
|
||||||
|
@@ -8,7 +8,7 @@ from ..items import item_table
|
|||||||
from ..stardew_rule import StardewRule, Received, TotalReceived
|
from ..stardew_rule import StardewRule, Received, TotalReceived
|
||||||
|
|
||||||
|
|
||||||
class ReceivedLogicMixin(BaseLogic[HasLogicMixin], BaseLogicMixin):
|
class ReceivedLogicMixin(BaseLogic, BaseLogicMixin):
|
||||||
def received(self, item: str, count: Optional[int] = 1) -> StardewRule:
|
def received(self, item: str, count: Optional[int] = 1) -> StardewRule:
|
||||||
assert count >= 0, "Can't receive a negative amount of item."
|
assert count >= 0, "Can't receive a negative amount of item."
|
||||||
|
|
||||||
|
@@ -29,7 +29,7 @@ class RegionLogicMixin(BaseLogicMixin):
|
|||||||
self.region = RegionLogic(*args, **kwargs)
|
self.region = RegionLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class RegionLogic(BaseLogic[Union[RegionLogicMixin, HasLogicMixin]]):
|
class RegionLogic(BaseLogic):
|
||||||
|
|
||||||
@cache_self1
|
@cache_self1
|
||||||
def can_reach(self, region_name: str) -> StardewRule:
|
def can_reach(self, region_name: str) -> StardewRule:
|
||||||
|
@@ -1,16 +1,8 @@
|
|||||||
import math
|
import math
|
||||||
import typing
|
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogic, BaseLogicMixin
|
from .base_logic import BaseLogic, BaseLogicMixin
|
||||||
from .building_logic import BuildingLogicMixin
|
|
||||||
from .gift_logic import GiftLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .season_logic import SeasonLogicMixin
|
|
||||||
from .time_logic import TimeLogicMixin
|
|
||||||
from ..content.feature import friendsanity
|
from ..content.feature import friendsanity
|
||||||
from ..data.villagers_data import Villager
|
from ..data.villagers_data import Villager
|
||||||
from ..stardew_rule import StardewRule, True_, false_, true_
|
from ..stardew_rule import StardewRule, True_, false_, true_
|
||||||
@@ -22,11 +14,6 @@ from ..strings.region_names import Region
|
|||||||
from ..strings.season_names import Season
|
from ..strings.season_names import Season
|
||||||
from ..strings.villager_names import NPC, ModNPC
|
from ..strings.villager_names import NPC, ModNPC
|
||||||
|
|
||||||
if typing.TYPE_CHECKING:
|
|
||||||
from ..mods.logic.mod_logic import ModLogicMixin
|
|
||||||
else:
|
|
||||||
ModLogicMixin = object
|
|
||||||
|
|
||||||
possible_kids = ("Cute Baby", "Ugly Baby")
|
possible_kids = ("Cute Baby", "Ugly Baby")
|
||||||
|
|
||||||
|
|
||||||
@@ -43,8 +30,7 @@ class RelationshipLogicMixin(BaseLogicMixin):
|
|||||||
self.relationship = RelationshipLogic(*args, **kwargs)
|
self.relationship = RelationshipLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class RelationshipLogic(BaseLogic[Union[RelationshipLogicMixin, BuildingLogicMixin, SeasonLogicMixin, TimeLogicMixin, GiftLogicMixin, RegionLogicMixin,
|
class RelationshipLogic(BaseLogic):
|
||||||
ReceivedLogicMixin, HasLogicMixin, ModLogicMixin]]):
|
|
||||||
|
|
||||||
def can_date(self, npc: str) -> StardewRule:
|
def can_date(self, npc: str) -> StardewRule:
|
||||||
return self.logic.relationship.has_hearts(npc, 8) & self.logic.has(Gift.bouquet)
|
return self.logic.relationship.has_hearts(npc, 8) & self.logic.has(Gift.bouquet)
|
||||||
|
@@ -1,20 +1,7 @@
|
|||||||
import functools
|
import functools
|
||||||
from typing import Union, Iterable
|
from typing import Iterable
|
||||||
|
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .book_logic import BookLogicMixin
|
|
||||||
from .combat_logic import CombatLogicMixin
|
|
||||||
from .fishing_logic import FishingLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .quest_logic import QuestLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .relationship_logic import RelationshipLogicMixin
|
|
||||||
from .season_logic import SeasonLogicMixin
|
|
||||||
from .skill_logic import SkillLogicMixin
|
|
||||||
from .time_logic import TimeLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from .walnut_logic import WalnutLogicMixin
|
|
||||||
from ..data.game_item import Requirement
|
from ..data.game_item import Requirement
|
||||||
from ..data.requirement import ToolRequirement, BookRequirement, SkillRequirement, SeasonRequirement, YearRequirement, CombatRequirement, QuestRequirement, \
|
from ..data.requirement import ToolRequirement, BookRequirement, SkillRequirement, SeasonRequirement, YearRequirement, CombatRequirement, QuestRequirement, \
|
||||||
RelationshipRequirement, FishingRequirement, WalnutRequirement, RegionRequirement
|
RelationshipRequirement, FishingRequirement, WalnutRequirement, RegionRequirement
|
||||||
@@ -26,8 +13,7 @@ class RequirementLogicMixin(BaseLogicMixin):
|
|||||||
self.requirement = RequirementLogic(*args, **kwargs)
|
self.requirement = RequirementLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class RequirementLogic(BaseLogic[Union[RequirementLogicMixin, HasLogicMixin, ReceivedLogicMixin, ToolLogicMixin, SkillLogicMixin, BookLogicMixin,
|
class RequirementLogic(BaseLogic):
|
||||||
SeasonLogicMixin, TimeLogicMixin, CombatLogicMixin, QuestLogicMixin, RelationshipLogicMixin, FishingLogicMixin, WalnutLogicMixin, RegionLogicMixin]]):
|
|
||||||
|
|
||||||
def meet_all_requirements(self, requirements: Iterable[Requirement]):
|
def meet_all_requirements(self, requirements: Iterable[Requirement]):
|
||||||
if not requirements:
|
if not requirements:
|
||||||
|
@@ -18,7 +18,7 @@ class SeasonLogicMixin(BaseLogicMixin):
|
|||||||
self.season = SeasonLogic(*args, **kwargs)
|
self.season = SeasonLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class SeasonLogic(BaseLogic[Union[HasLogicMixin, SeasonLogicMixin, TimeLogicMixin, ReceivedLogicMixin]]):
|
class SeasonLogic(BaseLogic):
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def has_spring(self) -> StardewRule:
|
def has_spring(self) -> StardewRule:
|
||||||
|
@@ -20,7 +20,7 @@ class ShippingLogicMixin(BaseLogicMixin):
|
|||||||
self.shipping = ShippingLogic(*args, **kwargs)
|
self.shipping = ShippingLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ShippingLogic(BaseLogic[Union[ReceivedLogicMixin, ShippingLogicMixin, BuildingLogicMixin, RegionLogicMixin, HasLogicMixin]]):
|
class ShippingLogic(BaseLogic):
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def can_use_shipping_bin(self) -> StardewRule:
|
def can_use_shipping_bin(self) -> StardewRule:
|
||||||
|
@@ -1,19 +1,9 @@
|
|||||||
import typing
|
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import Union, Tuple
|
from typing import Union, Tuple
|
||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .combat_logic import CombatLogicMixin
|
|
||||||
from .harvesting_logic import HarvestingLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .season_logic import SeasonLogicMixin
|
|
||||||
from .time_logic import TimeLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from ..data.harvest import HarvestCropSource
|
from ..data.harvest import HarvestCropSource
|
||||||
from ..mods.logic.magic_logic import MagicLogicMixin
|
|
||||||
from ..mods.logic.mod_skills_levels import get_mod_skill_levels
|
from ..mods.logic.mod_skills_levels import get_mod_skill_levels
|
||||||
from ..stardew_rule import StardewRule, true_, True_, False_
|
from ..stardew_rule import StardewRule, true_, True_, False_
|
||||||
from ..strings.craftable_names import Fishing
|
from ..strings.craftable_names import Fishing
|
||||||
@@ -25,11 +15,6 @@ from ..strings.skill_names import Skill, all_mod_skills, all_vanilla_skills
|
|||||||
from ..strings.tool_names import ToolMaterial, Tool
|
from ..strings.tool_names import ToolMaterial, Tool
|
||||||
from ..strings.wallet_item_names import Wallet
|
from ..strings.wallet_item_names import Wallet
|
||||||
|
|
||||||
if typing.TYPE_CHECKING:
|
|
||||||
from ..mods.logic.mod_logic import ModLogicMixin
|
|
||||||
else:
|
|
||||||
ModLogicMixin = object
|
|
||||||
|
|
||||||
fishing_regions = (Region.beach, Region.town, Region.forest, Region.mountain, Region.island_south, Region.island_west)
|
fishing_regions = (Region.beach, Region.town, Region.forest, Region.mountain, Region.island_south, Region.island_west)
|
||||||
vanilla_skill_items = ("Farming Level", "Mining Level", "Foraging Level", "Fishing Level", "Combat Level")
|
vanilla_skill_items = ("Farming Level", "Mining Level", "Foraging Level", "Fishing Level", "Combat Level")
|
||||||
|
|
||||||
@@ -40,8 +25,7 @@ class SkillLogicMixin(BaseLogicMixin):
|
|||||||
self.skill = SkillLogic(*args, **kwargs)
|
self.skill = SkillLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class SkillLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, TimeLogicMixin, ToolLogicMixin, SkillLogicMixin,
|
class SkillLogic(BaseLogic):
|
||||||
CombatLogicMixin, MagicLogicMixin, HarvestingLogicMixin, ModLogicMixin]]):
|
|
||||||
|
|
||||||
# Should be cached
|
# Should be cached
|
||||||
def can_earn_level(self, skill: str, level: int) -> StardewRule:
|
def can_earn_level(self, skill: str, level: int) -> StardewRule:
|
||||||
|
@@ -1,17 +1,7 @@
|
|||||||
import functools
|
import functools
|
||||||
from typing import Union, Any, Iterable
|
from typing import Any, Iterable
|
||||||
|
|
||||||
from .animal_logic import AnimalLogicMixin
|
|
||||||
from .artisan_logic import ArtisanLogicMixin
|
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .grind_logic import GrindLogicMixin
|
|
||||||
from .harvesting_logic import HarvestingLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .money_logic import MoneyLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .requirement_logic import RequirementLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from ..data.animal import IncubatorSource, OstrichIncubatorSource
|
from ..data.animal import IncubatorSource, OstrichIncubatorSource
|
||||||
from ..data.artisan import MachineSource
|
from ..data.artisan import MachineSource
|
||||||
from ..data.game_item import GenericSource, Source, GameItem, CustomRuleSource
|
from ..data.game_item import GenericSource, Source, GameItem, CustomRuleSource
|
||||||
@@ -26,8 +16,7 @@ class SourceLogicMixin(BaseLogicMixin):
|
|||||||
self.source = SourceLogic(*args, **kwargs)
|
self.source = SourceLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class SourceLogic(BaseLogic[Union[SourceLogicMixin, HasLogicMixin, ReceivedLogicMixin, HarvestingLogicMixin, MoneyLogicMixin, RegionLogicMixin,
|
class SourceLogic(BaseLogic):
|
||||||
ArtisanLogicMixin, ToolLogicMixin, RequirementLogicMixin, GrindLogicMixin, AnimalLogicMixin]]):
|
|
||||||
|
|
||||||
def has_access_to_item(self, item: GameItem):
|
def has_access_to_item(self, item: GameItem):
|
||||||
rules = []
|
rules = []
|
||||||
|
@@ -1,22 +1,6 @@
|
|||||||
from typing import Dict, Union
|
from typing import Dict
|
||||||
|
|
||||||
from .ability_logic import AbilityLogicMixin
|
|
||||||
from .arcade_logic import ArcadeLogicMixin
|
|
||||||
from .artisan_logic import ArtisanLogicMixin
|
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .cooking_logic import CookingLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .mine_logic import MineLogicMixin
|
|
||||||
from .money_logic import MoneyLogicMixin
|
|
||||||
from .monster_logic import MonsterLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .relationship_logic import RelationshipLogicMixin
|
|
||||||
from .season_logic import SeasonLogicMixin
|
|
||||||
from .shipping_logic import ShippingLogicMixin
|
|
||||||
from .skill_logic import SkillLogicMixin
|
|
||||||
from .time_logic import TimeLogicMixin
|
|
||||||
from .tool_logic import ToolLogicMixin
|
|
||||||
from ..content.vanilla.ginger_island import ginger_island_content_pack
|
from ..content.vanilla.ginger_island import ginger_island_content_pack
|
||||||
from ..content.vanilla.qi_board import qi_board_content_pack
|
from ..content.vanilla.qi_board import qi_board_content_pack
|
||||||
from ..stardew_rule import StardewRule, Has, false_
|
from ..stardew_rule import StardewRule, Has, false_
|
||||||
@@ -44,10 +28,7 @@ class SpecialOrderLogicMixin(BaseLogicMixin):
|
|||||||
self.special_order = SpecialOrderLogic(*args, **kwargs)
|
self.special_order = SpecialOrderLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class SpecialOrderLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, TimeLogicMixin, MoneyLogicMixin,
|
class SpecialOrderLogic(BaseLogic):
|
||||||
ShippingLogicMixin, ArcadeLogicMixin, ArtisanLogicMixin, RelationshipLogicMixin, ToolLogicMixin, SkillLogicMixin,
|
|
||||||
MineLogicMixin, CookingLogicMixin,
|
|
||||||
AbilityLogicMixin, SpecialOrderLogicMixin, MonsterLogicMixin]]):
|
|
||||||
|
|
||||||
def initialize_rules(self):
|
def initialize_rules(self):
|
||||||
self.update_rules({
|
self.update_rules({
|
||||||
|
@@ -22,7 +22,7 @@ class TimeLogicMixin(BaseLogicMixin):
|
|||||||
self.time = TimeLogic(*args, **kwargs)
|
self.time = TimeLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class TimeLogic(BaseLogic[Union[TimeLogicMixin, HasLogicMixin]]):
|
class TimeLogic(BaseLogic):
|
||||||
|
|
||||||
@cache_self1
|
@cache_self1
|
||||||
def has_lived_months(self, number: int) -> StardewRule:
|
def has_lived_months(self, number: int) -> StardewRule:
|
||||||
|
@@ -2,12 +2,6 @@ from typing import Union, Iterable, Tuple
|
|||||||
|
|
||||||
from Utils import cache_self1
|
from Utils import cache_self1
|
||||||
from .base_logic import BaseLogicMixin, BaseLogic
|
from .base_logic import BaseLogicMixin, BaseLogic
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .money_logic import MoneyLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from .season_logic import SeasonLogicMixin
|
|
||||||
from ..mods.logic.magic_logic import MagicLogicMixin
|
|
||||||
from ..stardew_rule import StardewRule, True_, False_
|
from ..stardew_rule import StardewRule, True_, False_
|
||||||
from ..strings.ap_names.skill_level_names import ModSkillLevel
|
from ..strings.ap_names.skill_level_names import ModSkillLevel
|
||||||
from ..strings.region_names import Region, LogicRegion
|
from ..strings.region_names import Region, LogicRegion
|
||||||
@@ -40,7 +34,7 @@ class ToolLogicMixin(BaseLogicMixin):
|
|||||||
self.tool = ToolLogic(*args, **kwargs)
|
self.tool = ToolLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ToolLogic(BaseLogic[Union[ToolLogicMixin, HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, MoneyLogicMixin, MagicLogicMixin]]):
|
class ToolLogic(BaseLogic):
|
||||||
|
|
||||||
def has_all_tools(self, tools: Iterable[Tuple[str, str]]):
|
def has_all_tools(self, tools: Iterable[Tuple[str, str]]):
|
||||||
return self.logic.and_(*(self.logic.tool.has_tool(tool, material) for tool, material in tools))
|
return self.logic.and_(*(self.logic.tool.has_tool(tool, material) for tool, material in tools))
|
||||||
|
@@ -12,7 +12,7 @@ class TravelingMerchantLogicMixin(BaseLogicMixin):
|
|||||||
self.traveling_merchant = TravelingMerchantLogic(*args, **kwargs)
|
self.traveling_merchant = TravelingMerchantLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class TravelingMerchantLogic(BaseLogic[Union[TravelingMerchantLogicMixin, ReceivedLogicMixin]]):
|
class TravelingMerchantLogic(BaseLogic):
|
||||||
|
|
||||||
def has_days(self, number_days: int = 1):
|
def has_days(self, number_days: int = 1):
|
||||||
if number_days <= 0:
|
if number_days <= 0:
|
||||||
|
@@ -10,7 +10,7 @@ class WalletLogicMixin(BaseLogicMixin):
|
|||||||
self.wallet = WalletLogic(*args, **kwargs)
|
self.wallet = WalletLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class WalletLogic(BaseLogic[ReceivedLogicMixin]):
|
class WalletLogic(BaseLogic):
|
||||||
|
|
||||||
def can_speak_dwarf(self) -> StardewRule:
|
def can_speak_dwarf(self) -> StardewRule:
|
||||||
return self.logic.received(Wallet.dwarvish_translation_guide)
|
return self.logic.received(Wallet.dwarvish_translation_guide)
|
||||||
|
@@ -1,12 +1,6 @@
|
|||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from .ability_logic import AbilityLogicMixin
|
|
||||||
from .base_logic import BaseLogic, BaseLogicMixin
|
from .base_logic import BaseLogic, BaseLogicMixin
|
||||||
from .combat_logic import CombatLogicMixin
|
|
||||||
from .has_logic import HasLogicMixin
|
|
||||||
from .received_logic import ReceivedLogicMixin
|
|
||||||
from .region_logic import RegionLogicMixin
|
|
||||||
from ..options import ExcludeGingerIsland, Walnutsanity
|
from ..options import ExcludeGingerIsland, Walnutsanity
|
||||||
from ..stardew_rule import StardewRule, False_, True_
|
from ..stardew_rule import StardewRule, False_, True_
|
||||||
from ..strings.ap_names.ap_option_names import WalnutsanityOptionName
|
from ..strings.ap_names.ap_option_names import WalnutsanityOptionName
|
||||||
@@ -24,8 +18,7 @@ class WalnutLogicMixin(BaseLogicMixin):
|
|||||||
self.walnut = WalnutLogic(*args, **kwargs)
|
self.walnut = WalnutLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class WalnutLogic(BaseLogic[Union[WalnutLogicMixin, ReceivedLogicMixin, HasLogicMixin, RegionLogicMixin, CombatLogicMixin,
|
class WalnutLogic(BaseLogic):
|
||||||
AbilityLogicMixin]]):
|
|
||||||
|
|
||||||
def has_walnut(self, number: int) -> StardewRule:
|
def has_walnut(self, number: int) -> StardewRule:
|
||||||
if self.options.exclude_ginger_island == ExcludeGingerIsland.option_true:
|
if self.options.exclude_ginger_island == ExcludeGingerIsland.option_true:
|
||||||
|
@@ -1,13 +1,5 @@
|
|||||||
from typing import Union
|
from ..mod_data import ModNames
|
||||||
|
|
||||||
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
||||||
from ...logic.combat_logic import CombatLogicMixin
|
|
||||||
from ...logic.cooking_logic import CookingLogicMixin
|
|
||||||
from ...logic.has_logic import HasLogicMixin
|
|
||||||
from ...logic.received_logic import ReceivedLogicMixin
|
|
||||||
from ...logic.skill_logic import SkillLogicMixin
|
|
||||||
from ...logic.tool_logic import ToolLogicMixin
|
|
||||||
from ...mods.mod_data import ModNames
|
|
||||||
from ...options import ElevatorProgression
|
from ...options import ElevatorProgression
|
||||||
from ...stardew_rule import StardewRule, True_, true_
|
from ...stardew_rule import StardewRule, True_, true_
|
||||||
from ...strings.ap_names.mods.mod_items import DeepWoodsItem
|
from ...strings.ap_names.mods.mod_items import DeepWoodsItem
|
||||||
@@ -25,8 +17,7 @@ class DeepWoodsLogicMixin(BaseLogicMixin):
|
|||||||
self.deepwoods = DeepWoodsLogic(*args, **kwargs)
|
self.deepwoods = DeepWoodsLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class DeepWoodsLogic(BaseLogic[Union[SkillLogicMixin, ReceivedLogicMixin, HasLogicMixin, CombatLogicMixin, ToolLogicMixin, SkillLogicMixin,
|
class DeepWoodsLogic(BaseLogic):
|
||||||
CookingLogicMixin]]):
|
|
||||||
|
|
||||||
def can_reach_woods_depth(self, depth: int) -> StardewRule:
|
def can_reach_woods_depth(self, depth: int) -> StardewRule:
|
||||||
# Assuming you can always do the 10 first floor
|
# Assuming you can always do the 10 first floor
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
||||||
from ...logic.received_logic import ReceivedLogicMixin
|
|
||||||
from ...mods.mod_data import ModNames
|
from ...mods.mod_data import ModNames
|
||||||
from ...options import ElevatorProgression
|
from ...options import ElevatorProgression
|
||||||
from ...stardew_rule import StardewRule, True_
|
from ...stardew_rule import StardewRule, True_
|
||||||
@@ -11,7 +10,7 @@ class ModElevatorLogicMixin(BaseLogicMixin):
|
|||||||
self.elevator = ModElevatorLogic(*args, **kwargs)
|
self.elevator = ModElevatorLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ModElevatorLogic(BaseLogic[ReceivedLogicMixin]):
|
class ModElevatorLogic(BaseLogic):
|
||||||
def has_skull_cavern_elevator_to_floor(self, floor: int) -> StardewRule:
|
def has_skull_cavern_elevator_to_floor(self, floor: int) -> StardewRule:
|
||||||
if self.options.elevator_progression != ElevatorProgression.option_vanilla and ModNames.skull_cavern_elevator in self.options.mods:
|
if self.options.elevator_progression != ElevatorProgression.option_vanilla and ModNames.skull_cavern_elevator in self.options.mods:
|
||||||
return self.logic.received("Progressive Skull Cavern Elevator", floor // 25)
|
return self.logic.received("Progressive Skull Cavern Elevator", floor // 25)
|
||||||
|
@@ -1,23 +1,7 @@
|
|||||||
from typing import Dict, Union
|
from typing import Dict
|
||||||
|
|
||||||
from ..mod_data import ModNames
|
from ..mod_data import ModNames
|
||||||
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
||||||
from ...logic.combat_logic import CombatLogicMixin
|
|
||||||
from ...logic.cooking_logic import CookingLogicMixin
|
|
||||||
from ...logic.crafting_logic import CraftingLogicMixin
|
|
||||||
from ...logic.farming_logic import FarmingLogicMixin
|
|
||||||
from ...logic.fishing_logic import FishingLogicMixin
|
|
||||||
from ...logic.has_logic import HasLogicMixin
|
|
||||||
from ...logic.money_logic import MoneyLogicMixin
|
|
||||||
from ...logic.museum_logic import MuseumLogicMixin
|
|
||||||
from ...logic.quest_logic import QuestLogicMixin
|
|
||||||
from ...logic.received_logic import ReceivedLogicMixin
|
|
||||||
from ...logic.region_logic import RegionLogicMixin
|
|
||||||
from ...logic.relationship_logic import RelationshipLogicMixin
|
|
||||||
from ...logic.season_logic import SeasonLogicMixin
|
|
||||||
from ...logic.skill_logic import SkillLogicMixin
|
|
||||||
from ...logic.time_logic import TimeLogicMixin
|
|
||||||
from ...logic.tool_logic import ToolLogicMixin
|
|
||||||
from ...stardew_rule import StardewRule
|
from ...stardew_rule import StardewRule
|
||||||
from ...strings.artisan_good_names import ModArtisanGood
|
from ...strings.artisan_good_names import ModArtisanGood
|
||||||
from ...strings.craftable_names import ModCraftable
|
from ...strings.craftable_names import ModCraftable
|
||||||
@@ -39,9 +23,7 @@ class ModItemLogicMixin(BaseLogicMixin):
|
|||||||
self.item = ModItemLogic(*args, **kwargs)
|
self.item = ModItemLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ModItemLogic(BaseLogic[Union[CombatLogicMixin, ReceivedLogicMixin, CookingLogicMixin, FishingLogicMixin, HasLogicMixin, MoneyLogicMixin,
|
class ModItemLogic(BaseLogic):
|
||||||
RegionLogicMixin, SeasonLogicMixin, RelationshipLogicMixin, MuseumLogicMixin, ToolLogicMixin, CraftingLogicMixin, SkillLogicMixin, TimeLogicMixin, QuestLogicMixin,
|
|
||||||
FarmingLogicMixin]]):
|
|
||||||
|
|
||||||
def get_modded_item_rules(self) -> Dict[str, StardewRule]:
|
def get_modded_item_rules(self) -> Dict[str, StardewRule]:
|
||||||
items = dict()
|
items = dict()
|
||||||
|
@@ -1,9 +1,4 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
||||||
from ...logic.has_logic import HasLogicMixin
|
|
||||||
from ...logic.received_logic import ReceivedLogicMixin
|
|
||||||
from ...logic.region_logic import RegionLogicMixin
|
|
||||||
from ...mods.mod_data import ModNames
|
from ...mods.mod_data import ModNames
|
||||||
from ...stardew_rule import StardewRule, False_
|
from ...stardew_rule import StardewRule, False_
|
||||||
from ...strings.ap_names.skill_level_names import ModSkillLevel
|
from ...strings.ap_names.skill_level_names import ModSkillLevel
|
||||||
@@ -18,7 +13,7 @@ class MagicLogicMixin(BaseLogicMixin):
|
|||||||
|
|
||||||
|
|
||||||
# TODO add logic.mods.magic for altar
|
# TODO add logic.mods.magic for altar
|
||||||
class MagicLogic(BaseLogic[Union[RegionLogicMixin, ReceivedLogicMixin, HasLogicMixin]]):
|
class MagicLogic(BaseLogic):
|
||||||
def can_use_clear_debris_instead_of_tool_level(self, level: int) -> StardewRule:
|
def can_use_clear_debris_instead_of_tool_level(self, level: int) -> StardewRule:
|
||||||
if ModNames.magic not in self.options.mods:
|
if ModNames.magic not in self.options.mods:
|
||||||
return False_()
|
return False_()
|
||||||
|
@@ -1,15 +1,7 @@
|
|||||||
from typing import Dict, Union
|
from typing import Dict
|
||||||
|
|
||||||
from ..mod_data import ModNames
|
from ..mod_data import ModNames
|
||||||
from ...logic.base_logic import BaseLogic, BaseLogicMixin
|
from ...logic.base_logic import BaseLogic, BaseLogicMixin
|
||||||
from ...logic.has_logic import HasLogicMixin
|
|
||||||
from ...logic.monster_logic import MonsterLogicMixin
|
|
||||||
from ...logic.quest_logic import QuestLogicMixin
|
|
||||||
from ...logic.received_logic import ReceivedLogicMixin
|
|
||||||
from ...logic.region_logic import RegionLogicMixin
|
|
||||||
from ...logic.relationship_logic import RelationshipLogicMixin
|
|
||||||
from ...logic.season_logic import SeasonLogicMixin
|
|
||||||
from ...logic.time_logic import TimeLogicMixin
|
|
||||||
from ...stardew_rule import StardewRule
|
from ...stardew_rule import StardewRule
|
||||||
from ...strings.animal_product_names import AnimalProduct
|
from ...strings.animal_product_names import AnimalProduct
|
||||||
from ...strings.ap_names.mods.mod_items import SVEQuestItem
|
from ...strings.ap_names.mods.mod_items import SVEQuestItem
|
||||||
@@ -34,8 +26,7 @@ class ModQuestLogicMixin(BaseLogicMixin):
|
|||||||
self.quest = ModQuestLogic(*args, **kwargs)
|
self.quest = ModQuestLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ModQuestLogic(BaseLogic[Union[HasLogicMixin, QuestLogicMixin, ReceivedLogicMixin, RegionLogicMixin,
|
class ModQuestLogic(BaseLogic):
|
||||||
TimeLogicMixin, SeasonLogicMixin, RelationshipLogicMixin, MonsterLogicMixin]]):
|
|
||||||
def get_modded_quest_rules(self) -> Dict[str, StardewRule]:
|
def get_modded_quest_rules(self) -> Dict[str, StardewRule]:
|
||||||
quests = dict()
|
quests = dict()
|
||||||
quests.update(self._get_juna_quest_rules())
|
quests.update(self._get_juna_quest_rules())
|
||||||
|
@@ -1,17 +1,4 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from .magic_logic import MagicLogicMixin
|
|
||||||
from ...logic.action_logic import ActionLogicMixin
|
|
||||||
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
||||||
from ...logic.building_logic import BuildingLogicMixin
|
|
||||||
from ...logic.cooking_logic import CookingLogicMixin
|
|
||||||
from ...logic.crafting_logic import CraftingLogicMixin
|
|
||||||
from ...logic.fishing_logic import FishingLogicMixin
|
|
||||||
from ...logic.has_logic import HasLogicMixin
|
|
||||||
from ...logic.received_logic import ReceivedLogicMixin
|
|
||||||
from ...logic.region_logic import RegionLogicMixin
|
|
||||||
from ...logic.relationship_logic import RelationshipLogicMixin
|
|
||||||
from ...logic.tool_logic import ToolLogicMixin
|
|
||||||
from ...mods.mod_data import ModNames
|
from ...mods.mod_data import ModNames
|
||||||
from ...stardew_rule import StardewRule, False_, True_, And
|
from ...stardew_rule import StardewRule, False_, True_, And
|
||||||
from ...strings.building_names import Building
|
from ...strings.building_names import Building
|
||||||
@@ -30,8 +17,7 @@ class ModSkillLogicMixin(BaseLogicMixin):
|
|||||||
self.skill = ModSkillLogic(*args, **kwargs)
|
self.skill = ModSkillLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ModSkillLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, ActionLogicMixin, RelationshipLogicMixin, BuildingLogicMixin,
|
class ModSkillLogic(BaseLogic):
|
||||||
ToolLogicMixin, FishingLogicMixin, CookingLogicMixin, CraftingLogicMixin, MagicLogicMixin]]):
|
|
||||||
def has_mod_level(self, skill: str, level: int) -> StardewRule:
|
def has_mod_level(self, skill: str, level: int) -> StardewRule:
|
||||||
if level <= 0:
|
if level <= 0:
|
||||||
return True_()
|
return True_()
|
||||||
|
@@ -1,17 +1,6 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from ..mod_data import ModNames
|
from ..mod_data import ModNames
|
||||||
from ...data.craftable_data import all_crafting_recipes_by_name
|
from ...data.craftable_data import all_crafting_recipes_by_name
|
||||||
from ...logic.action_logic import ActionLogicMixin
|
|
||||||
from ...logic.artisan_logic import ArtisanLogicMixin
|
|
||||||
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
||||||
from ...logic.crafting_logic import CraftingLogicMixin
|
|
||||||
from ...logic.has_logic import HasLogicMixin
|
|
||||||
from ...logic.received_logic import ReceivedLogicMixin
|
|
||||||
from ...logic.region_logic import RegionLogicMixin
|
|
||||||
from ...logic.relationship_logic import RelationshipLogicMixin
|
|
||||||
from ...logic.season_logic import SeasonLogicMixin
|
|
||||||
from ...logic.wallet_logic import WalletLogicMixin
|
|
||||||
from ...strings.ap_names.community_upgrade_names import CommunityUpgrade
|
from ...strings.ap_names.community_upgrade_names import CommunityUpgrade
|
||||||
from ...strings.artisan_good_names import ArtisanGood
|
from ...strings.artisan_good_names import ArtisanGood
|
||||||
from ...strings.craftable_names import Consumable, Edible, Bomb
|
from ...strings.craftable_names import Consumable, Edible, Bomb
|
||||||
@@ -33,8 +22,7 @@ class ModSpecialOrderLogicMixin(BaseLogicMixin):
|
|||||||
self.special_order = ModSpecialOrderLogic(*args, **kwargs)
|
self.special_order = ModSpecialOrderLogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ModSpecialOrderLogic(BaseLogic[Union[ActionLogicMixin, ArtisanLogicMixin, CraftingLogicMixin, HasLogicMixin, RegionLogicMixin,
|
class ModSpecialOrderLogic(BaseLogic):
|
||||||
ReceivedLogicMixin, RelationshipLogicMixin, SeasonLogicMixin, WalletLogicMixin]]):
|
|
||||||
def get_modded_special_orders_rules(self):
|
def get_modded_special_orders_rules(self):
|
||||||
special_orders = {}
|
special_orders = {}
|
||||||
if ModNames.juna in self.options.mods:
|
if ModNames.juna in self.options.mods:
|
||||||
|
@@ -1,21 +1,7 @@
|
|||||||
from typing import Union
|
|
||||||
|
|
||||||
from ..mod_regions import SVERegion
|
from ..mod_regions import SVERegion
|
||||||
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
||||||
from ...logic.combat_logic import CombatLogicMixin
|
|
||||||
from ...logic.cooking_logic import CookingLogicMixin
|
|
||||||
from ...logic.has_logic import HasLogicMixin
|
|
||||||
from ...logic.money_logic import MoneyLogicMixin
|
|
||||||
from ...logic.quest_logic import QuestLogicMixin
|
|
||||||
from ...logic.received_logic import ReceivedLogicMixin
|
|
||||||
from ...logic.region_logic import RegionLogicMixin
|
|
||||||
from ...logic.relationship_logic import RelationshipLogicMixin
|
|
||||||
from ...logic.season_logic import SeasonLogicMixin
|
|
||||||
from ...logic.time_logic import TimeLogicMixin
|
|
||||||
from ...logic.tool_logic import ToolLogicMixin
|
|
||||||
from ...strings.ap_names.mods.mod_items import SVELocation, SVERunes, SVEQuestItem
|
from ...strings.ap_names.mods.mod_items import SVELocation, SVERunes, SVEQuestItem
|
||||||
from ...strings.quest_names import ModQuest
|
from ...strings.quest_names import Quest, ModQuest
|
||||||
from ...strings.quest_names import Quest
|
|
||||||
from ...strings.region_names import Region
|
from ...strings.region_names import Region
|
||||||
from ...strings.tool_names import Tool, ToolMaterial
|
from ...strings.tool_names import Tool, ToolMaterial
|
||||||
from ...strings.wallet_item_names import Wallet
|
from ...strings.wallet_item_names import Wallet
|
||||||
@@ -27,8 +13,7 @@ class SVELogicMixin(BaseLogicMixin):
|
|||||||
self.sve = SVELogic(*args, **kwargs)
|
self.sve = SVELogic(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class SVELogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, QuestLogicMixin, RegionLogicMixin, RelationshipLogicMixin, TimeLogicMixin, ToolLogicMixin,
|
class SVELogic(BaseLogic):
|
||||||
CookingLogicMixin, MoneyLogicMixin, CombatLogicMixin, SeasonLogicMixin]]):
|
|
||||||
def initialize_rules(self):
|
def initialize_rules(self):
|
||||||
self.registry.sve_location_rules.update({
|
self.registry.sve_location_rules.update({
|
||||||
SVELocation.tempered_galaxy_sword: self.logic.money.can_spend_at(SVERegion.alesia_shop, 350000),
|
SVELocation.tempered_galaxy_sword: self.logic.money.can_spend_at(SVERegion.alesia_shop, 350000),
|
||||||
|
Reference in New Issue
Block a user