2024-05-27 13:10:24 +00:00
|
|
|
from taleweave.context import action_context, get_system_data
|
|
|
|
from taleweave.systems.quest import (
|
2024-05-25 20:18:40 +00:00
|
|
|
QUEST_SYSTEM,
|
|
|
|
complete_quest,
|
|
|
|
get_active_quest,
|
2024-05-27 01:32:03 +00:00
|
|
|
get_quests_for_character,
|
2024-05-25 20:18:40 +00:00
|
|
|
set_active_quest,
|
|
|
|
)
|
2024-05-27 13:10:24 +00:00
|
|
|
from taleweave.utils.search import find_character_in_room
|
2024-05-25 20:18:40 +00:00
|
|
|
|
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
def accept_quest(character: str, quest: str) -> str:
|
2024-05-25 20:18:40 +00:00
|
|
|
"""
|
|
|
|
Accept and start a quest being given by another character.
|
|
|
|
"""
|
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
with action_context() as (action_room, action_character):
|
2024-05-25 20:18:40 +00:00
|
|
|
quests = get_system_data(QUEST_SYSTEM)
|
|
|
|
if not quests:
|
|
|
|
return "No quests available."
|
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
target_character = find_character_in_room(action_room, character)
|
|
|
|
if not target_character:
|
|
|
|
return f"{character} is not in the room."
|
2024-05-25 20:18:40 +00:00
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
available_quests = get_quests_for_character(quests, target_character)
|
2024-05-25 20:18:40 +00:00
|
|
|
|
|
|
|
for available_quest in available_quests:
|
|
|
|
if available_quest.name == quest:
|
2024-05-27 01:32:03 +00:00
|
|
|
set_active_quest(quests, action_character, available_quest)
|
2024-05-25 20:18:40 +00:00
|
|
|
return f"You have accepted the quest: {quest}"
|
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
return f"{character} does not have the quest: {quest}"
|
2024-05-25 20:18:40 +00:00
|
|
|
|
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
def submit_quest(character: str) -> str:
|
2024-05-25 20:18:40 +00:00
|
|
|
"""
|
|
|
|
Submit your active quest to the quest giver. If you have completed the quest, you will be rewarded.
|
|
|
|
"""
|
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
with action_context() as (action_room, action_character):
|
2024-05-25 20:18:40 +00:00
|
|
|
quests = get_system_data(QUEST_SYSTEM)
|
|
|
|
if not quests:
|
|
|
|
return "No quests available."
|
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
active_quest = get_active_quest(quests, action_character)
|
2024-05-25 20:18:40 +00:00
|
|
|
if not active_quest:
|
|
|
|
return "You do not have an active quest."
|
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
target_character = find_character_in_room(action_room, character)
|
|
|
|
if not target_character:
|
|
|
|
return f"{character} is not in the room."
|
2024-05-25 20:18:40 +00:00
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
if active_quest.giver.character == target_character.name:
|
|
|
|
complete_quest(quests, action_character, active_quest)
|
2024-05-25 20:18:40 +00:00
|
|
|
return f"You have completed the quest: {active_quest.name}"
|
|
|
|
|
2024-05-27 01:32:03 +00:00
|
|
|
return f"{character} is not the quest giver for your active quest."
|