Added move_type to obj.move_to and its many hooks and what calls it.

This commit is contained in:
Andrew Bastien 2022-07-10 19:36:57 -04:00
parent ae21036a34
commit c99cd45f93
10 changed files with 48 additions and 37 deletions

View file

@ -130,7 +130,7 @@ def menunode_inspect_and_buy(caller, raw_string):
if wealth >= value:
rtext = f"You pay {value} gold and purchase {ware.key}!"
caller.db.gold -= value
ware.move_to(caller, quiet=True)
ware.move_to(caller, quiet=True, move_type="buy")
else:
rtext = f"You cannot afford {value} gold for {ware.key}!"
caller.msg(rtext)

View file

@ -86,7 +86,7 @@ class CmdEnterTrain(Command):
def func(self):
train = self.obj
self.caller.msg("You board the train.")
self.caller.move_to(train)
self.caller.move_to(train, move_type="board")
class CmdLeaveTrain(Command):
@ -107,7 +107,7 @@ class CmdLeaveTrain(Command):
def func(self):
train = self.obj
parent = train.location
self.caller.move_to(parent)
self.caller.move_to(parent, move_type="disembark")
class CmdSetTrain(CmdSet):

View file

@ -603,7 +603,7 @@ class CmdCreate(ObjManipCommand):
if "drop" in self.switches:
if caller.location:
obj.home = caller.location
obj.move_to(caller.location, quiet=True)
obj.move_to(caller.location, quiet=True, move_type="drop")
if string:
caller.msg(string)
@ -993,7 +993,7 @@ class CmdDig(ObjManipCommand):
)
caller.msg("%s%s%s" % (room_string, exit_to_string, exit_back_string))
if new_room and "teleport" in self.switches:
caller.move_to(new_room)
caller.move_to(new_room, move_type="teleport")
class CmdTunnel(COMMAND_DEFAULT_CLASS):
@ -3709,6 +3709,7 @@ class CmdTeleport(COMMAND_DEFAULT_CLASS):
quiet="quiet" in self.switches,
emit_to_obj=caller,
use_destination="intoexit" not in self.switches,
move_type="teleport"
):
if obj_to_teleport == caller:

View file

@ -49,7 +49,7 @@ class CmdHome(COMMAND_DEFAULT_CLASS):
caller.msg("You are already home!")
else:
caller.msg("There's no place like home ...")
caller.move_to(home)
caller.move_to(home, move_type="teleport")
class CmdLook(COMMAND_DEFAULT_CLASS):
@ -434,7 +434,7 @@ class CmdGet(COMMAND_DEFAULT_CLASS):
if not obj.at_pre_get(caller):
return
success = obj.move_to(caller, quiet=True)
success = obj.move_to(caller, quiet=True, move_type="get")
if not success:
caller.msg("This can't be picked up.")
else:
@ -484,7 +484,7 @@ class CmdDrop(COMMAND_DEFAULT_CLASS):
if not obj.at_pre_drop(caller):
return
success = obj.move_to(caller.location, quiet=True)
success = obj.move_to(caller.location, quiet=True, move_type="drop")
if not success:
caller.msg("This couldn't be dropped.")
else:
@ -538,7 +538,7 @@ class CmdGive(COMMAND_DEFAULT_CLASS):
return
# give object
success = to_give.move_to(target, quiet=True)
success = to_give.move_to(target, quiet=True, move_type="get")
if not success:
caller.msg("This could not be given.")
else:

View file

@ -236,7 +236,7 @@ class CmdGiveUp(CmdEvscapeRoom):
# manually call move hooks
self.room.msg_room(self.caller, f"|r{self.caller.key} gave up and was whisked away!|n")
self.room.at_object_leave(self.caller, self.caller.home)
self.caller.move_to(self.caller.home, quiet=True, move_hooks=False)
self.caller.move_to(self.caller.home, quiet=True, move_hooks=False, move_type="teleport")
# back to menu
run_evscaperoom_menu(self.caller)

View file

@ -611,7 +611,7 @@ class CmdDrop(MuxCommand):
if obj.db.worn:
obj.remove(caller, quiet=True)
obj.move_to(caller.location, quiet=True)
obj.move_to(caller.location, quiet=True, move_type="drop")
caller.msg("You drop %s." % (obj.name,))
caller.location.msg_contents("%s drops %s." % (caller.name, obj.name), exclude=caller)
# Call the object script's at_drop() method.
@ -664,10 +664,10 @@ class CmdGive(MuxCommand):
# Remove clothes if they're given.
if to_give.db.worn:
to_give.remove(caller)
to_give.move_to(caller.location, quiet=True)
to_give.move_to(caller.location, quiet=True, move_type="remove")
# give object
caller.msg("You give %s to %s." % (to_give.key, target.key))
to_give.move_to(target, quiet=True)
to_give.move_to(target, quiet=True, move_type="give")
target.msg("%s gives you %s." % (caller.key, to_give.key))
# Call the object script's at_give() method.
to_give.at_give(caller, target)

View file

@ -82,7 +82,7 @@ class SlowExit(DefaultExit):
def move_callback():
"This callback will be called by utils.delay after move_delay seconds."
source_location = traversing_object.location
if traversing_object.move_to(target_location):
if traversing_object.move_to(target_location, move_type="traverse"):
self.at_post_traverse(traversing_object, source_location)
else:
if self.db.err_traverse:

View file

@ -225,7 +225,7 @@ class CmdTutorialGiveUp(default_cmds.MuxCommand):
)
return
self.caller.move_to(outro_room)
self.caller.move_to(outro_room, move_type="teleport")
class TutorialRoomCmdSet(CmdSet):
@ -523,7 +523,7 @@ class CmdEast(Command):
# Move to the east room.
eexit = search_object(self.obj.db.east_exit)
if eexit:
caller.move_to(eexit[0])
caller.move_to(eexit[0], move_type="traverse")
else:
caller.msg("No east exit was found for this room. Contact an admin.")
return
@ -570,7 +570,7 @@ class CmdWest(Command):
# Move to the west room.
wexit = search_object(self.obj.db.west_exit)
if wexit:
caller.move_to(wexit[0])
caller.move_to(wexit[0], move_type="traverse")
else:
caller.msg("No west exit was found for this room. Contact an admin.")
return
@ -658,7 +658,7 @@ class CmdLookBridge(Command):
fall_exit = search_object(self.obj.db.fall_exit)
if fall_exit:
self.caller.msg("|r%s|n" % FALL_MESSAGE)
self.caller.move_to(fall_exit[0], quiet=True)
self.caller.move_to(fall_exit[0], quiet=True, move_type="fall")
# inform others on the bridge
self.obj.msg_contents(
"A plank gives way under %s's feet and "
@ -1130,7 +1130,7 @@ class TeleportRoom(TutorialRoom):
else:
character.msg(self.db.failure_teleport_msg)
# teleport quietly to the new place
character.move_to(results[0], quiet=True, move_hooks=False)
character.move_to(results[0], quiet=True, move_hooks=False, move_type="teleport")
# we have to call this manually since we turn off move_hooks
# - this is necessary to make the target dark room aware of an
# already carried light.

View file

@ -160,7 +160,7 @@ class TestTutorialWorldRooms(BaseEvenniaCommandTest):
def test_bridgeroom(self):
room = create_object(tutrooms.BridgeRoom, key="bridgeroom")
room.update_weather()
self.char1.move_to(room)
self.char1.move_to(room, move_type="teleport")
self.call(
tutrooms.CmdBridgeHelp(),
"",
@ -181,7 +181,7 @@ class TestTutorialWorldRooms(BaseEvenniaCommandTest):
def test_darkroom(self):
room = create_object(tutrooms.DarkRoom, key="darkroom")
self.char1.move_to(room)
self.char1.move_to(room, move_type="teleport")
self.call(tutrooms.CmdDarkHelp(), "", "Can't help you until")
def test_teleportroom(self):

View file

@ -836,6 +836,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
use_destination=True,
to_none=False,
move_hooks=True,
move_type="move",
**kwargs,
):
"""
@ -857,6 +858,10 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
move_hooks (bool): If False, turn off the calling of move-related hooks
(at_pre/post_move etc) with quiet=True, this is as quiet a move
as can be done.
move_type (str): Will be used for generating the text tuple {"type": move_type},
and can be used for log filtering in hooks. Evennia has only a few
move_types for move_to to start with, like "teleport", "traverse",
"get", "give", and "drop".
Keyword Args:
Passed on to announce_move_to and announce_move_from hooks.
@ -906,7 +911,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
# Before the move, call eventual pre-commands.
if move_hooks:
try:
if not self.at_pre_move(destination, **kwargs):
if not self.at_pre_move(destination, move_type=move_type, **kwargs):
return False
except Exception as err:
logerr(errtxt.format(err="at_pre_move()"), err)
@ -918,7 +923,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
# Call hook on source location
if move_hooks and source_location:
try:
source_location.at_object_leave(self, destination, **kwargs)
source_location.at_object_leave(self, destination, move_type=move_type, **kwargs)
except Exception as err:
logerr(errtxt.format(err="at_object_leave()"), err)
return False
@ -926,7 +931,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
if not quiet:
# tell the old room we are leaving
try:
self.announce_move_from(destination, **kwargs)
self.announce_move_from(destination, move_type=move_type, **kwargs)
except Exception as err:
logerr(errtxt.format(err="announce_move_from()"), err)
return False
@ -941,7 +946,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
if not quiet:
# Tell the new room we are there.
try:
self.announce_move_to(source_location, **kwargs)
self.announce_move_to(source_location, move_type=move_type, **kwargs)
except Exception as err:
logerr(errtxt.format(err="announce_move_to()"), err)
return False
@ -950,7 +955,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
# Perform eventual extra commands on the receiving location
# (the object has already arrived at this point)
try:
destination.at_object_receive(self, source_location, **kwargs)
destination.at_object_receive(self, source_location, move_type=move_type, **kwargs)
except Exception as err:
logerr(errtxt.format(err="at_object_receive()"), err)
return False
@ -959,7 +964,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
# (usually calling 'look')
if move_hooks:
try:
self.at_post_move(source_location, **kwargs)
self.at_post_move(source_location, move_type=move_type, **kwargs)
except Exception as err:
logerr(errtxt.format(err="at_post_move"), err)
return False
@ -1020,7 +1025,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
# Famous last words: The account should never see this.
string = "This place should not exist ... contact an admin."
obj.msg(_(string))
obj.move_to(home)
obj.move_to(home, move_type="teleport")
@classmethod
def create(cls, key, account=None, **kwargs):
@ -1472,13 +1477,14 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
# hooks called when moving the object
def at_pre_move(self, destination, **kwargs):
def at_pre_move(self, destination, move_type="move", **kwargs):
"""
Called just before starting to move this object to
destination.
Args:
destination (Object): The object we are moving to
move_type (str): The type of move. "give", "traverse", etc.
**kwargs (dict): Arbitrary, optional arguments for users
overriding the call (unused by default).
@ -1496,7 +1502,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
# deprecated alias
at_before_move = at_pre_move
def announce_move_from(self, destination, msg=None, mapping=None, **kwargs):
def announce_move_from(self, destination, msg=None, mapping=None, move_type="move", **kwargs):
"""
Called if the move is to be announced. This is
called while we are still standing in the old
@ -1506,6 +1512,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
destination (Object): The place we are going to.
msg (str, optional): a replacement message.
mapping (dict, optional): additional mapping objects.
move_type (str): The type of move. "give", "traverse", etc.
**kwargs (dict): Arbitrary, optional arguments for users
overriding the call (unused by default).
@ -1541,9 +1548,9 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
}
)
location.msg_contents(string, exclude=(self,), from_obj=self, mapping=mapping)
location.msg_contents((string, {"type": move_type}), exclude=(self,), from_obj=self, mapping=mapping)
def announce_move_to(self, source_location, msg=None, mapping=None, **kwargs):
def announce_move_to(self, source_location, msg=None, mapping=None, move_type="move", **kwargs):
"""
Called after the move if the move was not quiet. At this point
we are standing in the new location.
@ -1552,6 +1559,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
source_location (Object): The place we came from
msg (str, optional): the replacement message if location.
mapping (dict, optional): additional mapping objects.
move_type (str): The type of move. "give", "traverse", etc.
**kwargs (dict): Arbitrary, optional arguments for users
overriding the call (unused by default).
@ -1605,7 +1613,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
}
)
destination.msg_contents(string, exclude=(self,), from_obj=self, mapping=mapping)
destination.msg_contents((string, {"type": move_type}), exclude=(self,), from_obj=self, mapping=mapping)
def at_post_move(self, source_location, **kwargs):
"""
@ -1624,20 +1632,21 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
# deprecated
at_after_move = at_post_move
def at_object_leave(self, moved_obj, target_location, **kwargs):
def at_object_leave(self, moved_obj, target_location, move_type="move", **kwargs):
"""
Called just before an object leaves from inside this object
Args:
moved_obj (Object): The object leaving
target_location (Object): Where `moved_obj` is going.
move_type (str): The type of move. "give", "traverse", etc.
**kwargs (dict): Arbitrary, optional arguments for users
overriding the call (unused by default).
"""
pass
def at_object_receive(self, moved_obj, source_location, **kwargs):
def at_object_receive(self, moved_obj, source_location, move_type="move", **kwargs):
"""
Called after an object has been moved into this object.
@ -1645,6 +1654,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
moved_obj (Object): The object moved into this one
source_location (Object): Where `moved_object` came from.
Note that this could be `None`.
move_type (str): The type of move. "give", "traverse", etc.
**kwargs (dict): Arbitrary, optional arguments for users
overriding the call (unused by default).
@ -2381,7 +2391,7 @@ class DefaultCharacter(DefaultObject):
# add the default cmdset
self.cmdset.add_default(settings.CMDSET_CHARACTER, persistent=True)
def at_post_move(self, source_location, **kwargs):
def at_post_move(self, source_location, move_type="move", **kwargs):
"""
We make sure to look around after a move.
@ -2859,7 +2869,7 @@ class DefaultExit(DefaultObject):
"""
source_location = traversing_object.location
if traversing_object.move_to(target_location):
if traversing_object.move_to(target_location, move_type="traverse"):
self.at_post_traverse(traversing_object, source_location)
else:
if self.db.err_traverse: