""" 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 about ask about --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 about ' 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 about [--fleet]") return self.parse() if not self.target_name: self.caller.msg("Ask whom? Usage: ask about ") 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, )