Stardew valley: Fix Aurora Vineyard Tablet logic (#4512)

* - Add requirement on Aurora Vineyard tablet to start the quest

* - Add rule for using the aurora vineyard staircase

* - Added a test for the tablet

* - Add a few missing items to the test

* - Introduce a new item to split the quest from the door and avoir ER issues

* - Optimize imports

* - Forgot to generate the item

* fix Aurora mess

# Conflicts:
#	worlds/stardew_valley/rules.py
#	worlds/stardew_valley/test/mods/TestMods.py

* fix a couple errors in the cherry picked commit, added a method to improve readability and reduce chance of human error on story quest conditions

* - remove blank line

* - Code review comments

* - fixed weird assert name

* - fixed accidentally surviving line

* - Fixed imports

---------

Co-authored-by: Jouramie <16137441+Jouramie@users.noreply.github.com>
This commit is contained in:
agilbert1412
2025-03-10 18:39:35 +03:00
committed by GitHub
parent be550ff6fb
commit d83294efa7
15 changed files with 120 additions and 52 deletions

View File

@@ -12,6 +12,7 @@ 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
from ...strings.artisan_good_names import ArtisanGood
from ...strings.crop_names import Fruit, SVEFruit, SVEVegetable, Vegetable
from ...strings.fertilizer_names import Fertilizer
@@ -83,7 +84,8 @@ TimeLogicMixin, SeasonLogicMixin, RelationshipLogicMixin, MonsterLogicMixin]]):
self.logic.region.can_reach(SVERegion.grandpas_shed),
ModQuest.MarlonsBoat: self.logic.has_all(*(Loot.void_essence, Loot.solar_essence, Loot.slime, Loot.bat_wing, Loot.bug_meat)) &
self.logic.relationship.can_meet(ModNPC.lance) & self.logic.region.can_reach(SVERegion.guild_summit),
ModQuest.AuroraVineyard: self.logic.has(Fruit.starfruit) & self.logic.region.can_reach(SVERegion.aurora_vineyard),
ModQuest.AuroraVineyard: self.logic.region.can_reach(SVERegion.aurora_vineyard) & self.logic.received(SVEQuestItem.aurora_vineyard_tablet) &
self.logic.has(Fruit.starfruit) & self.logic.region.can_reach(Region.forest),
ModQuest.MonsterCrops: self.logic.has_all(*(SVEVegetable.monster_mushroom, SVEFruit.slime_berry, SVEFruit.monster_fruit, SVEVegetable.void_root)),
ModQuest.VoidSoul: self.logic.has(ModLoot.void_soul) & self.logic.region.can_reach(Region.farm) &
self.logic.season.has_any_not_winter() & self.logic.region.can_reach(SVERegion.badlands_entrance) &
@@ -91,6 +93,12 @@ TimeLogicMixin, SeasonLogicMixin, RelationshipLogicMixin, MonsterLogicMixin]]):
self.logic.monster.can_kill_any((Monster.shadow_brute, Monster.shadow_shaman, Monster.shadow_sniper)),
}
def has_completed_aurora_vineyard_bundle(self):
if self.options.quest_locations.has_story_quests():
return self.logic.received(SVEQuestItem.aurora_vineyard_reclamation)
return self.logic.quest.can_complete_quest(ModQuest.AuroraVineyard)
def _get_distant_lands_quest_rules(self):
if ModNames.distant_lands not in self.options.mods:
return {}

View File

@@ -41,24 +41,24 @@ class SVELogic(BaseLogic[Union[HasLogicMixin, ReceivedLogicMixin, QuestLogicMixi
return self.logic.or_(*(self.logic.received(rune) for rune in rune_list))
def has_iridium_bomb(self):
if self.options.quest_locations < 0:
return self.logic.quest.can_complete_quest(ModQuest.RailroadBoulder)
return self.logic.received(SVEQuestItem.iridium_bomb)
if self.options.quest_locations.has_story_quests():
return self.logic.received(SVEQuestItem.iridium_bomb)
return self.logic.quest.can_complete_quest(ModQuest.RailroadBoulder)
def has_marlon_boat(self):
if self.options.quest_locations < 0:
return self.logic.quest.can_complete_quest(ModQuest.MarlonsBoat)
return self.logic.received(SVEQuestItem.marlon_boat_paddle)
if self.options.quest_locations.has_story_quests():
return self.logic.received(SVEQuestItem.marlon_boat_paddle)
return self.logic.quest.can_complete_quest(ModQuest.MarlonsBoat)
def has_grandpa_shed_repaired(self):
if self.options.quest_locations < 0:
return self.logic.quest.can_complete_quest(ModQuest.GrandpasShed)
return self.logic.received(SVEQuestItem.grandpa_shed)
if self.options.quest_locations.has_story_quests():
return self.logic.received(SVEQuestItem.grandpa_shed)
return self.logic.quest.can_complete_quest(ModQuest.GrandpasShed)
def has_bear_knowledge(self):
if self.options.quest_locations < 0:
return self.logic.quest.can_complete_quest(Quest.strange_note)
return self.logic.received(Wallet.bears_knowledge)
if self.options.quest_locations.has_story_quests():
return self.logic.received(Wallet.bears_knowledge)
return self.logic.quest.can_complete_quest(Quest.strange_note)
def can_buy_bear_recipe(self):
access_rule = (self.logic.quest.can_complete_quest(Quest.strange_note) & self.logic.tool.has_tool(Tool.axe, ToolMaterial.basic) &