1
0
Fork 0
taleweave-ai/adventure/actions/quest.py

59 lines
1.9 KiB
Python

from adventure.context import action_context, get_system_data
from adventure.systems.quest import (
QUEST_SYSTEM,
complete_quest,
get_active_quest,
get_quests_for_actor,
set_active_quest,
)
from adventure.utils.search import find_actor_in_room
def accept_quest(actor: str, quest: str) -> str:
"""
Accept and start a quest being given by another character.
"""
with action_context() as (action_room, action_actor):
quests = get_system_data(QUEST_SYSTEM)
if not quests:
return "No quests available."
target_actor = find_actor_in_room(action_room, actor)
if not target_actor:
return f"{actor} is not in the room."
available_quests = get_quests_for_actor(quests, target_actor)
for available_quest in available_quests:
if available_quest.name == quest:
set_active_quest(quests, action_actor, available_quest)
return f"You have accepted the quest: {quest}"
return f"{actor} does not have the quest: {quest}"
def submit_quest(actor: str) -> str:
"""
Submit your active quest to the quest giver. If you have completed the quest, you will be rewarded.
"""
with action_context() as (action_room, action_actor):
quests = get_system_data(QUEST_SYSTEM)
if not quests:
return "No quests available."
active_quest = get_active_quest(quests, action_actor)
if not active_quest:
return "You do not have an active quest."
target_actor = find_actor_in_room(action_room, actor)
if not target_actor:
return f"{actor} is not in the room."
if active_quest.giver.actor == target_actor.name:
complete_quest(quests, action_actor, active_quest)
return f"You have completed the quest: {active_quest.name}"
return f"{actor} is not the quest giver for your active quest."