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: if wealth >= value:
rtext = f"You pay {value} gold and purchase {ware.key}!" rtext = f"You pay {value} gold and purchase {ware.key}!"
caller.db.gold -= value caller.db.gold -= value
ware.move_to(caller, quiet=True) ware.move_to(caller, quiet=True, move_type="buy")
else: else:
rtext = f"You cannot afford {value} gold for {ware.key}!" rtext = f"You cannot afford {value} gold for {ware.key}!"
caller.msg(rtext) caller.msg(rtext)

View file

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

View file

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

View file

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

View file

@ -236,7 +236,7 @@ class CmdGiveUp(CmdEvscapeRoom):
# manually call move hooks # manually call move hooks
self.room.msg_room(self.caller, f"|r{self.caller.key} gave up and was whisked away!|n") 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.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 # back to menu
run_evscaperoom_menu(self.caller) run_evscaperoom_menu(self.caller)

View file

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

View file

@ -82,7 +82,7 @@ class SlowExit(DefaultExit):
def move_callback(): def move_callback():
"This callback will be called by utils.delay after move_delay seconds." "This callback will be called by utils.delay after move_delay seconds."
source_location = traversing_object.location 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) self.at_post_traverse(traversing_object, source_location)
else: else:
if self.db.err_traverse: if self.db.err_traverse:

View file

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

View file

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

View file

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