106 lines
3.2 KiB
Python
106 lines
3.2 KiB
Python
"""
|
|
Steward commands — ask a palace steward about memories.
|
|
"""
|
|
|
|
from evennia.commands.command import Command
|
|
from evennia import search_object
|
|
|
|
|
|
class CmdAskSteward(Command):
|
|
"""
|
|
Ask a steward NPC about a topic from the palace memory.
|
|
|
|
Usage:
|
|
ask <steward> about <topic>
|
|
ask <steward> about <topic> --fleet
|
|
|
|
Example:
|
|
ask bezalel-steward about nightly watch
|
|
ask bezalel-steward about runner outage --fleet
|
|
"""
|
|
|
|
key = "ask"
|
|
aliases = ["question"]
|
|
locks = "cmd:all()"
|
|
help_category = "Mind Palace"
|
|
|
|
def parse(self):
|
|
"""Parse 'ask <target> about <topic>' syntax."""
|
|
raw = self.args.strip()
|
|
fleet = "--fleet" in raw
|
|
if fleet:
|
|
raw = raw.replace("--fleet", "").strip()
|
|
|
|
if " about " in raw.lower():
|
|
parts = raw.split(" about ", 1)
|
|
self.target_name = parts[0].strip()
|
|
self.topic = parts[1].strip()
|
|
else:
|
|
self.target_name = ""
|
|
self.topic = raw
|
|
self.fleet = fleet
|
|
|
|
def func(self):
|
|
if not self.args.strip():
|
|
self.caller.msg("Usage: ask <steward> about <topic> [--fleet]")
|
|
return
|
|
|
|
self.parse()
|
|
|
|
if not self.target_name:
|
|
self.caller.msg("Ask whom? Usage: ask <steward> about <topic>")
|
|
return
|
|
|
|
# Find steward NPC in current room
|
|
stewards = [
|
|
obj for obj in self.caller.location.contents
|
|
if hasattr(obj, "respond_to_question")
|
|
and self.target_name.lower() in obj.key.lower()
|
|
]
|
|
|
|
if not stewards:
|
|
self.caller.msg(f"There is no steward here matching '{self.target_name}'.")
|
|
return
|
|
|
|
steward = stewards[0]
|
|
self.caller.msg(f"You ask |c{steward.key}|n about '{self.topic}'...")
|
|
steward.respond_to_question(self.topic, self.caller, fleet=self.fleet)
|
|
|
|
|
|
class CmdSummonSteward(Command):
|
|
"""
|
|
Summon your wing's steward NPC to your current location.
|
|
|
|
Usage:
|
|
summon steward
|
|
"""
|
|
|
|
key = "summon steward"
|
|
locks = "cmd:all()"
|
|
help_category = "Mind Palace"
|
|
|
|
def func(self):
|
|
wing = self.caller.db.wing if self.caller.attributes.has("wing") else (self.caller.key.lower() if self.caller.key else "general")
|
|
steward_key = f"{wing}-steward"
|
|
|
|
# Search for existing steward
|
|
from typeclasses.steward_npc import StewardNPC
|
|
stewards = search_object(steward_key, typeclass="typeclasses.steward_npc.StewardNPC")
|
|
|
|
if stewards:
|
|
steward = stewards[0]
|
|
steward.move_to(self.caller.location, move_type="teleport")
|
|
self.caller.location.msg_contents(
|
|
f"A shimmer of light coalesces into |c{steward.key}|n.",
|
|
from_obj=self.caller,
|
|
)
|
|
else:
|
|
steward = StewardNPC.create(steward_key)[0]
|
|
steward.db.wing = wing
|
|
steward.db.steward_name = self.caller.key
|
|
steward.move_to(self.caller.location, move_type="teleport")
|
|
self.caller.location.msg_contents(
|
|
f"You call forth |c{steward.key}|n from the palace archives.",
|
|
from_obj=self.caller,
|
|
)
|