Ability to tether objects

This allows a user to get something, but if they leave an area, they
automatically put it back.
This commit is contained in:
Howard Abrams 2025-03-03 21:32:44 -08:00
parent 9d7ff34566
commit cff8a5176d
2 changed files with 23 additions and 2 deletions

View file

@ -15,6 +15,8 @@ from utils.word_list import Token, routput
from .objects import Object from .objects import Object
from .tutorial import TutorBird, TutorialState from .tutorial import TutorBird, TutorialState
from re import match
INTRO = """ INTRO = """
As the surrounding mists dissipate, you find yourself in an ancient, halcyon forest dripping with moss. You see an envelope of parchment wedged under a scaly protrusion of bark...inside, a letter in familiar penmanship, personally addressed to you, which you pick up. As the surrounding mists dissipate, you find yourself in an ancient, halcyon forest dripping with moss. You see an envelope of parchment wedged under a scaly protrusion of bark...inside, a letter in familiar penmanship, personally addressed to you, which you pick up.
@ -93,7 +95,7 @@ class Character(Object, DefaultCharacter):
thing.move_to(self, quiet=True, use_destination=True) thing.move_to(self, quiet=True, use_destination=True)
return return
self.msg(f"{victim.key} doesn't have a {to_take}.") self.msg(f"{victim.key} doesn't have a {to_take} you can take.")
else: else:
self.msg(f"You don't see {from_whom}.") self.msg(f"You don't see {from_whom}.")
@ -107,6 +109,25 @@ class Character(Object, DefaultCharacter):
if self.db.is_sitting: if self.db.is_sitting:
self.msg("You stand up first...") self.msg("You stand up first...")
self.db.is_sitting = False; self.db.is_sitting = False;
# @lock thing = tethered:id(#19)
# @set thing/tethered_msg = "Let's put that back"
for thing in self.contents:
to = thing.locks.get('tethered')
if to:
m = match(r".*:id\(#?(.*)\)", to)
if m:
id_num = m.group(1)
dest = self.global_search(f"#{id_num}")
msg = thing.db.tethered_msg
if dest and msg:
thing.location = dest
self.msg(msg)
else:
print(f"Found tethered, {thing} to #{id_num}, but dest is {dest} and msg is '{msg}'. Set both.")
else:
print(f"Found tethered, {thing} to #{to}, but that needs to be 'tethered:id(num) where num is the ID# of an object/place.")
return super().at_pre_move(destination) return super().at_pre_move(destination)
def at_pre_say(self, message, **kwargs): def at_pre_say(self, message, **kwargs):

View file

@ -204,7 +204,7 @@ class Knocker(Object):
# Let's see if a keyword gives a good response: # Let's see if a keyword gives a good response:
for idx, [regex, responses] in enumerate(self.all_responses): for idx, [regex, responses] in enumerate(self.all_responses):
full_regex = r".*" + regex + r".*" full_regex = r".*" + regex + r".*"
if re.match(full_regex, message): if re.match(full_regex, message, re.IGNORECASE):
# The first match is the password, so we set a tag on # The first match is the password, so we set a tag on
# the character, so that they can go through the door: # the character, so that they can go through the door:
if idx == 0: if idx == 0: