mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 12:11:33 -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 .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 ..strings.region_names import Region
|
||||
from ..strings.skill_names import Skill, ModSkill
|
||||
from ..strings.tool_names import ToolMaterial, Tool
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from ..mods.logic.mod_logic import ModLogicMixin
|
||||
else:
|
||||
ModLogicMixin = object
|
||||
|
||||
|
||||
class AbilityLogicMixin(BaseLogicMixin):
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -25,8 +11,7 @@ class AbilityLogicMixin(BaseLogicMixin):
|
||||
self.ability = AbilityLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class AbilityLogic(BaseLogic[Union[AbilityLogicMixin, RegionLogicMixin, ReceivedLogicMixin, ToolLogicMixin, SkillLogicMixin, MineLogicMixin, MagicLogicMixin,
|
||||
ModLogicMixin]]):
|
||||
class AbilityLogic(BaseLogic):
|
||||
def can_mine_perfectly(self) -> StardewRule:
|
||||
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 .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 ..strings.generic_names import Generic
|
||||
from ..strings.geode_names import Geode
|
||||
@@ -19,7 +13,7 @@ class ActionLogicMixin(BaseLogicMixin):
|
||||
self.action = ActionLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class ActionLogic(BaseLogic[Union[ActionLogicMixin, RegionLogicMixin, ReceivedLogicMixin, HasLogicMixin, ToolLogicMixin]]):
|
||||
class ActionLogic(BaseLogic):
|
||||
|
||||
def can_watch(self, channel: str = None):
|
||||
tv_rule = True_()
|
||||
|
@@ -6,11 +6,6 @@ from ..strings.building_names import Building
|
||||
from ..strings.forageable_names import Forageable
|
||||
from ..strings.machine_names import Machine
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from .logic import StardewLogic
|
||||
else:
|
||||
StardewLogic = object
|
||||
|
||||
|
||||
class AnimalLogicMixin(BaseLogicMixin):
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -18,7 +13,7 @@ class AnimalLogicMixin(BaseLogicMixin):
|
||||
self.animal = AnimalLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class AnimalLogic(BaseLogic[StardewLogic]):
|
||||
class AnimalLogic(BaseLogic):
|
||||
|
||||
def can_incubate(self, egg_item: str) -> StardewRule:
|
||||
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 .received_logic import ReceivedLogicMixin
|
||||
from .region_logic import RegionLogicMixin
|
||||
from .. import options
|
||||
from ..stardew_rule import StardewRule, True_
|
||||
from ..strings.region_names import Region
|
||||
@@ -14,7 +10,7 @@ class ArcadeLogicMixin(BaseLogicMixin):
|
||||
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:
|
||||
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 .has_logic import HasLogicMixin
|
||||
from .time_logic import TimeLogicMixin
|
||||
from ..data.artisan import MachineSource
|
||||
from ..data.game_item import ItemTag
|
||||
from ..stardew_rule import StardewRule
|
||||
@@ -20,7 +16,7 @@ class ArtisanLogicMixin(BaseLogicMixin):
|
||||
self.artisan = ArtisanLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class ArtisanLogic(BaseLogic[Union[ArtisanLogicMixin, TimeLogicMixin, HasLogicMixin]]):
|
||||
class ArtisanLogic(BaseLogic):
|
||||
def initialize_rules(self):
|
||||
# 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})
|
||||
|
@@ -1,11 +1,15 @@
|
||||
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 ..options import StardewValleyOptions
|
||||
from ..stardew_rule import StardewRule
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from .logic import StardewLogic
|
||||
|
||||
|
||||
class LogicRegistry:
|
||||
|
||||
@@ -30,18 +34,16 @@ class BaseLogicMixin:
|
||||
pass
|
||||
|
||||
|
||||
T = TypeVar("T", bound=BaseLogicMixin)
|
||||
|
||||
|
||||
class BaseLogic(BaseLogicMixin, Generic[T]):
|
||||
class BaseLogic(BaseLogicMixin):
|
||||
player: int
|
||||
registry: LogicRegistry
|
||||
options: StardewValleyOptions
|
||||
content: StardewContent
|
||||
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)
|
||||
self.player = player
|
||||
self.registry = registry
|
||||
|
@@ -1,9 +1,5 @@
|
||||
from typing import Union
|
||||
|
||||
from Utils import cache_self1
|
||||
from .base_logic import BaseLogicMixin, BaseLogic
|
||||
from .has_logic import HasLogicMixin
|
||||
from .received_logic import ReceivedLogicMixin
|
||||
from ..stardew_rule import StardewRule
|
||||
|
||||
|
||||
@@ -13,7 +9,7 @@ class BookLogicMixin(BaseLogicMixin):
|
||||
self.book = BookLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class BookLogic(BaseLogic[Union[ReceivedLogicMixin, HasLogicMixin]]):
|
||||
class BookLogic(BaseLogic):
|
||||
|
||||
@cache_self1
|
||||
def has_book_power(self, book: str) -> StardewRule:
|
||||
|
@@ -1,21 +1,11 @@
|
||||
import typing
|
||||
from functools import cached_property
|
||||
from typing import Union
|
||||
|
||||
from Utils import cache_self1
|
||||
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 ..strings.building_names import Building
|
||||
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}
|
||||
|
||||
|
||||
@@ -25,7 +15,7 @@ class BuildingLogicMixin(BaseLogicMixin):
|
||||
self.building = BuildingLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class BuildingLogic(BaseLogic[Union[BuildingLogicMixin, RegionLogicMixin, ReceivedLogicMixin, HasLogicMixin, SourceLogicMixin]]):
|
||||
class BuildingLogic(BaseLogic):
|
||||
|
||||
@cache_self1
|
||||
def can_build(self, building_name: str) -> StardewRule:
|
||||
|
@@ -1,16 +1,7 @@
|
||||
from functools import cached_property
|
||||
from typing import Union, List
|
||||
from typing import List
|
||||
|
||||
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 ..stardew_rule import StardewRule, True_
|
||||
from ..strings.ap_names.community_upgrade_names import CommunityUpgrade
|
||||
@@ -27,8 +18,7 @@ class BundleLogicMixin(BaseLogicMixin):
|
||||
self.bundle = BundleLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class BundleLogic(BaseLogic[Union[ReceivedLogicMixin, HasLogicMixin, TimeLogicMixin, RegionLogicMixin, MoneyLogicMixin, QualityLogicMixin, FishingLogicMixin,
|
||||
SkillLogicMixin, QuestLogicMixin]]):
|
||||
class BundleLogic(BaseLogic):
|
||||
# Should be cached
|
||||
def can_complete_bundle(self, bundle: Bundle) -> StardewRule:
|
||||
item_rules = []
|
||||
|
@@ -1,12 +1,7 @@
|
||||
from functools import cached_property
|
||||
from typing import Union
|
||||
|
||||
from Utils import cache_self1
|
||||
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 ..strings.ap_names.ap_weapon_names import APWeapon
|
||||
from ..strings.performance_names import Performance
|
||||
@@ -20,7 +15,7 @@ class CombatLogicMixin(BaseLogicMixin):
|
||||
self.combat = CombatLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class CombatLogic(BaseLogic[Union[HasLogicMixin, CombatLogicMixin, RegionLogicMixin, ReceivedLogicMixin, MagicLogicMixin]]):
|
||||
class CombatLogic(BaseLogic):
|
||||
@cache_self1
|
||||
def can_fight_at_level(self, level: str) -> StardewRule:
|
||||
if level == Performance.basic:
|
||||
|
@@ -1,17 +1,7 @@
|
||||
from functools import cached_property
|
||||
from typing import Union
|
||||
|
||||
from Utils import cache_self1
|
||||
from .action_logic import ActionLogicMixin
|
||||
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, \
|
||||
QueenOfSauceSource, CookingRecipe, ShopFriendshipSource
|
||||
from ..data.recipe_source import CutsceneSource, ShopTradeSource
|
||||
@@ -29,8 +19,7 @@ class CookingLogicMixin(BaseLogicMixin):
|
||||
self.cooking = CookingLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class CookingLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, MoneyLogicMixin, ActionLogicMixin,
|
||||
BuildingLogicMixin, RelationshipLogicMixin, SkillLogicMixin, CookingLogicMixin]]):
|
||||
class CookingLogic(BaseLogic):
|
||||
@cached_property
|
||||
def can_cook_in_kitchen(self) -> StardewRule:
|
||||
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 .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 ..data.craftable_data import CraftingRecipe
|
||||
from ..data.recipe_source import CutsceneSource, ShopTradeSource, ArchipelagoSource, LogicSource, SpecialOrderSource, \
|
||||
@@ -25,8 +15,7 @@ class CraftingLogicMixin(BaseLogicMixin):
|
||||
self.crafting = CraftingLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class CraftingLogic(BaseLogic[Union[ReceivedLogicMixin, HasLogicMixin, RegionLogicMixin, MoneyLogicMixin, RelationshipLogicMixin,
|
||||
SkillLogicMixin, SpecialOrderLogicMixin, CraftingLogicMixin, QuestLogicMixin]]):
|
||||
class CraftingLogic(BaseLogic):
|
||||
@cache_self1
|
||||
def can_craft(self, recipe: CraftingRecipe = None) -> StardewRule:
|
||||
if recipe is None:
|
||||
|
@@ -3,11 +3,6 @@ from typing import Union, Tuple
|
||||
|
||||
from Utils import cache_self1
|
||||
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 ..stardew_rule import StardewRule, True_, false_
|
||||
from ..strings.fertilizer_names import Fertilizer
|
||||
@@ -29,7 +24,7 @@ class FarmingLogicMixin(BaseLogicMixin):
|
||||
self.farming = FarmingLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class FarmingLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, ToolLogicMixin, FarmingLogicMixin]]):
|
||||
class FarmingLogic(BaseLogic):
|
||||
|
||||
@cached_property
|
||||
def has_farming_tools(self) -> StardewRule:
|
||||
@@ -45,6 +40,8 @@ class FarmingLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogi
|
||||
if tier >= 3:
|
||||
return self.logic.has(Fertilizer.deluxe)
|
||||
|
||||
return self.logic.false_
|
||||
|
||||
@cache_self1
|
||||
def can_plant_and_grow_item(self, seasons: Union[str, Tuple[str]]) -> StardewRule:
|
||||
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 .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 ..stardew_rule import StardewRule
|
||||
from ..strings.animal_product_names import AnimalProduct
|
||||
@@ -36,8 +20,7 @@ class FestivalLogicMixin(BaseLogicMixin):
|
||||
self.festival = FestivalLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class FestivalLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, FestivalLogicMixin, ArtisanLogicMixin, AnimalLogicMixin, MoneyLogicMixin, TimeLogicMixin,
|
||||
SkillLogicMixin, RegionLogicMixin, ActionLogicMixin, MonsterLogicMixin, RelationshipLogicMixin, FishingLogicMixin, MuseumLogicMixin, GiftLogicMixin]]):
|
||||
class FestivalLogic(BaseLogic):
|
||||
|
||||
def initialize_rules(self):
|
||||
self.registry.festival_rules.update({
|
||||
|
@@ -1,17 +1,8 @@
|
||||
from typing import Union
|
||||
|
||||
from Utils import cache_self1
|
||||
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.fish_data import FishItem
|
||||
from ..options import ExcludeGingerIsland
|
||||
from ..options import SpecialOrderLocations
|
||||
from ..options import ExcludeGingerIsland, SpecialOrderLocations
|
||||
from ..stardew_rule import StardewRule, True_, False_
|
||||
from ..strings.ap_names.mods.mod_items import SVEQuestItem
|
||||
from ..strings.craftable_names import Fishing
|
||||
@@ -28,8 +19,7 @@ class FishingLogicMixin(BaseLogicMixin):
|
||||
self.fishing = FishingLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class FishingLogic(BaseLogic[Union[HasLogicMixin, FishingLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, ToolLogicMixin,
|
||||
SkillLogicMixin]]):
|
||||
class FishingLogic(BaseLogic):
|
||||
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))
|
||||
|
||||
|
@@ -1,7 +1,6 @@
|
||||
from functools import cached_property
|
||||
|
||||
from .base_logic import BaseLogic, BaseLogicMixin
|
||||
from .has_logic import HasLogicMixin
|
||||
from ..stardew_rule import StardewRule
|
||||
from ..strings.animal_product_names import AnimalProduct
|
||||
from ..strings.gift_names import Gift
|
||||
@@ -13,7 +12,7 @@ class GiftLogicMixin(BaseLogicMixin):
|
||||
self.gifts = GiftLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class GiftLogic(BaseLogic[HasLogicMixin]):
|
||||
class GiftLogic(BaseLogic):
|
||||
|
||||
@cached_property
|
||||
def has_any_universal_love(self) -> StardewRule:
|
||||
|
@@ -1,5 +1,3 @@
|
||||
import typing
|
||||
|
||||
from .base_logic import BaseLogic, BaseLogicMixin
|
||||
from ..data.craftable_data import all_crafting_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.wallet_item_names import Wallet
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from .logic import StardewLogic
|
||||
else:
|
||||
StardewLogic = object
|
||||
|
||||
|
||||
class GoalLogicMixin(BaseLogicMixin):
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -24,7 +17,7 @@ class GoalLogicMixin(BaseLogicMixin):
|
||||
self.goal = GoalLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class GoalLogic(BaseLogic[StardewLogic]):
|
||||
class GoalLogic(BaseLogic):
|
||||
|
||||
def can_complete_community_center(self) -> StardewRule:
|
||||
return self.logic.bundle.can_complete_community_center
|
||||
|
@@ -38,7 +38,7 @@ class GrindLogicMixin(BaseLogicMixin):
|
||||
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:
|
||||
opening_rule = self.logic.region.can_reach(Region.blacksmith)
|
||||
|
@@ -1,15 +1,7 @@
|
||||
from functools import cached_property
|
||||
from typing import Union
|
||||
|
||||
from Utils import cache_self1
|
||||
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 ..stardew_rule import StardewRule
|
||||
from ..strings.ap_names.community_upgrade_names import CommunityUpgrade
|
||||
@@ -22,8 +14,7 @@ class HarvestingLogicMixin(BaseLogicMixin):
|
||||
self.harvesting = HarvestingLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class HarvestingLogic(BaseLogic[Union[HarvestingLogicMixin, HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, ToolLogicMixin,
|
||||
FarmingLogicMixin, TimeLogicMixin]]):
|
||||
class HarvestingLogic(BaseLogic):
|
||||
|
||||
@cached_property
|
||||
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
|
||||
|
||||
|
||||
class HasLogicMixin(BaseLogic[None]):
|
||||
class HasLogicMixin(BaseLogic):
|
||||
true_ = true_
|
||||
false_ = false_
|
||||
|
||||
|
@@ -12,7 +12,7 @@ class TimeLogicMixin(BaseLogicMixin):
|
||||
self.time = TimeLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class TimeLogic(BaseLogic[Union[TimeLogicMixin, ReceivedLogicMixin]]):
|
||||
class TimeLogic(BaseLogic):
|
||||
|
||||
def has_lived_months(self, number: int) -> StardewRule:
|
||||
return self.logic.received(Event.month_end, number)
|
||||
|
@@ -1,14 +1,5 @@
|
||||
from typing import Union
|
||||
|
||||
from Utils import cache_self1
|
||||
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 ..stardew_rule import StardewRule, True_
|
||||
from ..strings.performance_names import Performance
|
||||
@@ -23,8 +14,7 @@ class MineLogicMixin(BaseLogicMixin):
|
||||
self.mine = MineLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class MineLogic(BaseLogic[Union[HasLogicMixin, MineLogicMixin, RegionLogicMixin, ReceivedLogicMixin, CombatLogicMixin, ToolLogicMixin,
|
||||
SkillLogicMixin, CookingLogicMixin]]):
|
||||
class MineLogic(BaseLogic):
|
||||
# Regions
|
||||
def can_mine_in_the_mines_floor_1_40(self) -> StardewRule:
|
||||
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 .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 ..options import SpecialOrderLocations
|
||||
from ..stardew_rule import StardewRule, True_, HasProgressionPercent, False_, true_
|
||||
from ..strings.currency_names import Currency
|
||||
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",
|
||||
"20 Qi Gems", "15 Qi Gems", "10 Qi Gems")
|
||||
|
||||
@@ -30,8 +16,7 @@ class MoneyLogicMixin(BaseLogicMixin):
|
||||
self.money = MoneyLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class MoneyLogic(BaseLogic[Union[RegionLogicMixin, MoneyLogicMixin, TimeLogicMixin, RegionLogicMixin, ReceivedLogicMixin, HasLogicMixin, SeasonLogicMixin,
|
||||
GrindLogicMixin, ShippingLogicMixin]]):
|
||||
class MoneyLogic(BaseLogic):
|
||||
|
||||
@cache_self1
|
||||
def can_have_earned_total(self, amount: int) -> StardewRule:
|
||||
|
@@ -20,7 +20,7 @@ class MonsterLogicMixin(BaseLogicMixin):
|
||||
self.monster = MonsterLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class MonsterLogic(BaseLogic[Union[HasLogicMixin, MonsterLogicMixin, RegionLogicMixin, CombatLogicMixin, TimeLogicMixin]]):
|
||||
class MonsterLogic(BaseLogic):
|
||||
|
||||
@cached_property
|
||||
def all_monsters_by_name(self):
|
||||
|
@@ -22,7 +22,7 @@ class MuseumLogicMixin(BaseLogicMixin):
|
||||
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:
|
||||
return self.logic.region.can_reach(Region.museum) & self.logic.museum.can_find_museum_items(number)
|
||||
|
@@ -1,11 +1,6 @@
|
||||
import math
|
||||
from typing import Union
|
||||
|
||||
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 ..stardew_rule import StardewRule, True_
|
||||
from ..strings.region_names import Region
|
||||
@@ -17,7 +12,7 @@ class PetLogicMixin(BaseLogicMixin):
|
||||
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:
|
||||
assert hearts >= 0, "You can't have negative hearts with a pet."
|
||||
if hearts == 0:
|
||||
|
@@ -14,7 +14,7 @@ class QualityLogicMixin(BaseLogicMixin):
|
||||
self.quality = QualityLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class QualityLogic(BaseLogic[Union[SkillLogicMixin, FarmingLogicMixin]]):
|
||||
class QualityLogic(BaseLogic):
|
||||
|
||||
@cache_self1
|
||||
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 .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 ..strings.ap_names.community_upgrade_names import CommunityUpgrade
|
||||
from ..strings.artisan_good_names import ArtisanGood
|
||||
@@ -43,9 +28,7 @@ class QuestLogicMixin(BaseLogicMixin):
|
||||
self.quest = QuestLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class QuestLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, MoneyLogicMixin, MineLogicMixin, RegionLogicMixin, RelationshipLogicMixin, ToolLogicMixin,
|
||||
FishingLogicMixin, CookingLogicMixin, CombatLogicMixin, SeasonLogicMixin, SkillLogicMixin, WalletLogicMixin, QuestLogicMixin,
|
||||
BuildingLogicMixin, TimeLogicMixin]]):
|
||||
class QuestLogic(BaseLogic):
|
||||
|
||||
def initialize_rules(self):
|
||||
self.update_rules({
|
||||
|
@@ -8,7 +8,7 @@ from ..items import item_table
|
||||
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:
|
||||
assert count >= 0, "Can't receive a negative amount of item."
|
||||
|
||||
|
@@ -29,7 +29,7 @@ class RegionLogicMixin(BaseLogicMixin):
|
||||
self.region = RegionLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class RegionLogic(BaseLogic[Union[RegionLogicMixin, HasLogicMixin]]):
|
||||
class RegionLogic(BaseLogic):
|
||||
|
||||
@cache_self1
|
||||
def can_reach(self, region_name: str) -> StardewRule:
|
||||
|
@@ -1,16 +1,8 @@
|
||||
import math
|
||||
import typing
|
||||
from typing import Union
|
||||
|
||||
from Utils import cache_self1
|
||||
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 ..data.villagers_data import Villager
|
||||
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.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")
|
||||
|
||||
|
||||
@@ -43,8 +30,7 @@ class RelationshipLogicMixin(BaseLogicMixin):
|
||||
self.relationship = RelationshipLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class RelationshipLogic(BaseLogic[Union[RelationshipLogicMixin, BuildingLogicMixin, SeasonLogicMixin, TimeLogicMixin, GiftLogicMixin, RegionLogicMixin,
|
||||
ReceivedLogicMixin, HasLogicMixin, ModLogicMixin]]):
|
||||
class RelationshipLogic(BaseLogic):
|
||||
|
||||
def can_date(self, npc: str) -> StardewRule:
|
||||
return self.logic.relationship.has_hearts(npc, 8) & self.logic.has(Gift.bouquet)
|
||||
|
@@ -1,20 +1,7 @@
|
||||
import functools
|
||||
from typing import Union, Iterable
|
||||
from typing import Iterable
|
||||
|
||||
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.requirement import ToolRequirement, BookRequirement, SkillRequirement, SeasonRequirement, YearRequirement, CombatRequirement, QuestRequirement, \
|
||||
RelationshipRequirement, FishingRequirement, WalnutRequirement, RegionRequirement
|
||||
@@ -26,8 +13,7 @@ class RequirementLogicMixin(BaseLogicMixin):
|
||||
self.requirement = RequirementLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class RequirementLogic(BaseLogic[Union[RequirementLogicMixin, HasLogicMixin, ReceivedLogicMixin, ToolLogicMixin, SkillLogicMixin, BookLogicMixin,
|
||||
SeasonLogicMixin, TimeLogicMixin, CombatLogicMixin, QuestLogicMixin, RelationshipLogicMixin, FishingLogicMixin, WalnutLogicMixin, RegionLogicMixin]]):
|
||||
class RequirementLogic(BaseLogic):
|
||||
|
||||
def meet_all_requirements(self, requirements: Iterable[Requirement]):
|
||||
if not requirements:
|
||||
|
@@ -18,7 +18,7 @@ class SeasonLogicMixin(BaseLogicMixin):
|
||||
self.season = SeasonLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class SeasonLogic(BaseLogic[Union[HasLogicMixin, SeasonLogicMixin, TimeLogicMixin, ReceivedLogicMixin]]):
|
||||
class SeasonLogic(BaseLogic):
|
||||
|
||||
@cached_property
|
||||
def has_spring(self) -> StardewRule:
|
||||
|
@@ -20,7 +20,7 @@ class ShippingLogicMixin(BaseLogicMixin):
|
||||
self.shipping = ShippingLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class ShippingLogic(BaseLogic[Union[ReceivedLogicMixin, ShippingLogicMixin, BuildingLogicMixin, RegionLogicMixin, HasLogicMixin]]):
|
||||
class ShippingLogic(BaseLogic):
|
||||
|
||||
@cached_property
|
||||
def can_use_shipping_bin(self) -> StardewRule:
|
||||
|
@@ -1,19 +1,9 @@
|
||||
import typing
|
||||
from functools import cached_property
|
||||
from typing import Union, Tuple
|
||||
|
||||
from Utils import cache_self1
|
||||
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 ..mods.logic.magic_logic import MagicLogicMixin
|
||||
from ..mods.logic.mod_skills_levels import get_mod_skill_levels
|
||||
from ..stardew_rule import StardewRule, true_, True_, False_
|
||||
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.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)
|
||||
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)
|
||||
|
||||
|
||||
class SkillLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, TimeLogicMixin, ToolLogicMixin, SkillLogicMixin,
|
||||
CombatLogicMixin, MagicLogicMixin, HarvestingLogicMixin, ModLogicMixin]]):
|
||||
class SkillLogic(BaseLogic):
|
||||
|
||||
# Should be cached
|
||||
def can_earn_level(self, skill: str, level: int) -> StardewRule:
|
||||
|
@@ -1,17 +1,7 @@
|
||||
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 .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.artisan import MachineSource
|
||||
from ..data.game_item import GenericSource, Source, GameItem, CustomRuleSource
|
||||
@@ -26,8 +16,7 @@ class SourceLogicMixin(BaseLogicMixin):
|
||||
self.source = SourceLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class SourceLogic(BaseLogic[Union[SourceLogicMixin, HasLogicMixin, ReceivedLogicMixin, HarvestingLogicMixin, MoneyLogicMixin, RegionLogicMixin,
|
||||
ArtisanLogicMixin, ToolLogicMixin, RequirementLogicMixin, GrindLogicMixin, AnimalLogicMixin]]):
|
||||
class SourceLogic(BaseLogic):
|
||||
|
||||
def has_access_to_item(self, item: GameItem):
|
||||
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 .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.qi_board import qi_board_content_pack
|
||||
from ..stardew_rule import StardewRule, Has, false_
|
||||
@@ -44,10 +28,7 @@ class SpecialOrderLogicMixin(BaseLogicMixin):
|
||||
self.special_order = SpecialOrderLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class SpecialOrderLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, SeasonLogicMixin, TimeLogicMixin, MoneyLogicMixin,
|
||||
ShippingLogicMixin, ArcadeLogicMixin, ArtisanLogicMixin, RelationshipLogicMixin, ToolLogicMixin, SkillLogicMixin,
|
||||
MineLogicMixin, CookingLogicMixin,
|
||||
AbilityLogicMixin, SpecialOrderLogicMixin, MonsterLogicMixin]]):
|
||||
class SpecialOrderLogic(BaseLogic):
|
||||
|
||||
def initialize_rules(self):
|
||||
self.update_rules({
|
||||
|
@@ -22,7 +22,7 @@ class TimeLogicMixin(BaseLogicMixin):
|
||||
self.time = TimeLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class TimeLogic(BaseLogic[Union[TimeLogicMixin, HasLogicMixin]]):
|
||||
class TimeLogic(BaseLogic):
|
||||
|
||||
@cache_self1
|
||||
def has_lived_months(self, number: int) -> StardewRule:
|
||||
|
@@ -2,12 +2,6 @@ from typing import Union, Iterable, Tuple
|
||||
|
||||
from Utils import cache_self1
|
||||
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 ..strings.ap_names.skill_level_names import ModSkillLevel
|
||||
from ..strings.region_names import Region, LogicRegion
|
||||
@@ -40,7 +34,7 @@ class ToolLogicMixin(BaseLogicMixin):
|
||||
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]]):
|
||||
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)
|
||||
|
||||
|
||||
class TravelingMerchantLogic(BaseLogic[Union[TravelingMerchantLogicMixin, ReceivedLogicMixin]]):
|
||||
class TravelingMerchantLogic(BaseLogic):
|
||||
|
||||
def has_days(self, number_days: int = 1):
|
||||
if number_days <= 0:
|
||||
|
@@ -10,7 +10,7 @@ class WalletLogicMixin(BaseLogicMixin):
|
||||
self.wallet = WalletLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class WalletLogic(BaseLogic[ReceivedLogicMixin]):
|
||||
class WalletLogic(BaseLogic):
|
||||
|
||||
def can_speak_dwarf(self) -> StardewRule:
|
||||
return self.logic.received(Wallet.dwarvish_translation_guide)
|
||||
|
@@ -1,12 +1,6 @@
|
||||
from functools import cached_property
|
||||
from typing import Union
|
||||
|
||||
from .ability_logic import AbilityLogicMixin
|
||||
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 ..stardew_rule import StardewRule, False_, True_
|
||||
from ..strings.ap_names.ap_option_names import WalnutsanityOptionName
|
||||
@@ -24,8 +18,7 @@ class WalnutLogicMixin(BaseLogicMixin):
|
||||
self.walnut = WalnutLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class WalnutLogic(BaseLogic[Union[WalnutLogicMixin, ReceivedLogicMixin, HasLogicMixin, RegionLogicMixin, CombatLogicMixin,
|
||||
AbilityLogicMixin]]):
|
||||
class WalnutLogic(BaseLogic):
|
||||
|
||||
def has_walnut(self, number: int) -> StardewRule:
|
||||
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.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 ...stardew_rule import StardewRule, True_, true_
|
||||
from ...strings.ap_names.mods.mod_items import DeepWoodsItem
|
||||
@@ -25,8 +17,7 @@ class DeepWoodsLogicMixin(BaseLogicMixin):
|
||||
self.deepwoods = DeepWoodsLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class DeepWoodsLogic(BaseLogic[Union[SkillLogicMixin, ReceivedLogicMixin, HasLogicMixin, CombatLogicMixin, ToolLogicMixin, SkillLogicMixin,
|
||||
CookingLogicMixin]]):
|
||||
class DeepWoodsLogic(BaseLogic):
|
||||
|
||||
def can_reach_woods_depth(self, depth: int) -> StardewRule:
|
||||
# Assuming you can always do the 10 first floor
|
||||
|
@@ -1,5 +1,4 @@
|
||||
from ...logic.base_logic import BaseLogicMixin, BaseLogic
|
||||
from ...logic.received_logic import ReceivedLogicMixin
|
||||
from ...mods.mod_data import ModNames
|
||||
from ...options import ElevatorProgression
|
||||
from ...stardew_rule import StardewRule, True_
|
||||
@@ -11,7 +10,7 @@ class ModElevatorLogicMixin(BaseLogicMixin):
|
||||
self.elevator = ModElevatorLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class ModElevatorLogic(BaseLogic[ReceivedLogicMixin]):
|
||||
class ModElevatorLogic(BaseLogic):
|
||||
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:
|
||||
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 ...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 ...strings.artisan_good_names import ModArtisanGood
|
||||
from ...strings.craftable_names import ModCraftable
|
||||
@@ -39,9 +23,7 @@ class ModItemLogicMixin(BaseLogicMixin):
|
||||
self.item = ModItemLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class ModItemLogic(BaseLogic[Union[CombatLogicMixin, ReceivedLogicMixin, CookingLogicMixin, FishingLogicMixin, HasLogicMixin, MoneyLogicMixin,
|
||||
RegionLogicMixin, SeasonLogicMixin, RelationshipLogicMixin, MuseumLogicMixin, ToolLogicMixin, CraftingLogicMixin, SkillLogicMixin, TimeLogicMixin, QuestLogicMixin,
|
||||
FarmingLogicMixin]]):
|
||||
class ModItemLogic(BaseLogic):
|
||||
|
||||
def get_modded_item_rules(self) -> Dict[str, StardewRule]:
|
||||
items = dict()
|
||||
|
@@ -1,9 +1,4 @@
|
||||
from typing import Union
|
||||
|
||||
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 ...stardew_rule import StardewRule, False_
|
||||
from ...strings.ap_names.skill_level_names import ModSkillLevel
|
||||
@@ -18,7 +13,7 @@ class MagicLogicMixin(BaseLogicMixin):
|
||||
|
||||
|
||||
# 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:
|
||||
if ModNames.magic not in self.options.mods:
|
||||
return False_()
|
||||
|
@@ -1,15 +1,7 @@
|
||||
from typing import Dict, Union
|
||||
from typing import Dict
|
||||
|
||||
from ..mod_data import ModNames
|
||||
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 ...strings.animal_product_names import AnimalProduct
|
||||
from ...strings.ap_names.mods.mod_items import SVEQuestItem
|
||||
@@ -34,8 +26,7 @@ class ModQuestLogicMixin(BaseLogicMixin):
|
||||
self.quest = ModQuestLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class ModQuestLogic(BaseLogic[Union[HasLogicMixin, QuestLogicMixin, ReceivedLogicMixin, RegionLogicMixin,
|
||||
TimeLogicMixin, SeasonLogicMixin, RelationshipLogicMixin, MonsterLogicMixin]]):
|
||||
class ModQuestLogic(BaseLogic):
|
||||
def get_modded_quest_rules(self) -> Dict[str, StardewRule]:
|
||||
quests = dict()
|
||||
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.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 ...stardew_rule import StardewRule, False_, True_, And
|
||||
from ...strings.building_names import Building
|
||||
@@ -30,8 +17,7 @@ class ModSkillLogicMixin(BaseLogicMixin):
|
||||
self.skill = ModSkillLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class ModSkillLogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, RegionLogicMixin, ActionLogicMixin, RelationshipLogicMixin, BuildingLogicMixin,
|
||||
ToolLogicMixin, FishingLogicMixin, CookingLogicMixin, CraftingLogicMixin, MagicLogicMixin]]):
|
||||
class ModSkillLogic(BaseLogic):
|
||||
def has_mod_level(self, skill: str, level: int) -> StardewRule:
|
||||
if level <= 0:
|
||||
return True_()
|
||||
|
@@ -1,17 +1,6 @@
|
||||
from typing import Union
|
||||
|
||||
from ..mod_data import ModNames
|
||||
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.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.artisan_good_names import ArtisanGood
|
||||
from ...strings.craftable_names import Consumable, Edible, Bomb
|
||||
@@ -33,8 +22,7 @@ class ModSpecialOrderLogicMixin(BaseLogicMixin):
|
||||
self.special_order = ModSpecialOrderLogic(*args, **kwargs)
|
||||
|
||||
|
||||
class ModSpecialOrderLogic(BaseLogic[Union[ActionLogicMixin, ArtisanLogicMixin, CraftingLogicMixin, HasLogicMixin, RegionLogicMixin,
|
||||
ReceivedLogicMixin, RelationshipLogicMixin, SeasonLogicMixin, WalletLogicMixin]]):
|
||||
class ModSpecialOrderLogic(BaseLogic):
|
||||
def get_modded_special_orders_rules(self):
|
||||
special_orders = {}
|
||||
if ModNames.juna in self.options.mods:
|
||||
|
@@ -1,21 +1,7 @@
|
||||
from typing import Union
|
||||
|
||||
from ..mod_regions import SVERegion
|
||||
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.quest_names import ModQuest
|
||||
from ...strings.quest_names import Quest
|
||||
from ...strings.quest_names import Quest, ModQuest
|
||||
from ...strings.region_names import Region
|
||||
from ...strings.tool_names import Tool, ToolMaterial
|
||||
from ...strings.wallet_item_names import Wallet
|
||||
@@ -27,8 +13,7 @@ class SVELogicMixin(BaseLogicMixin):
|
||||
self.sve = SVELogic(*args, **kwargs)
|
||||
|
||||
|
||||
class SVELogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, QuestLogicMixin, RegionLogicMixin, RelationshipLogicMixin, TimeLogicMixin, ToolLogicMixin,
|
||||
CookingLogicMixin, MoneyLogicMixin, CombatLogicMixin, SeasonLogicMixin]]):
|
||||
class SVELogic(BaseLogic):
|
||||
def initialize_rules(self):
|
||||
self.registry.sve_location_rules.update({
|
||||
SVELocation.tempered_galaxy_sword: self.logic.money.can_spend_at(SVERegion.alesia_shop, 350000),
|
||||
|
Reference in New Issue
Block a user