Updated objects.objects docs

This commit is contained in:
Griatch 2015-03-09 12:44:28 +01:00
parent 60163184ad
commit 733f1c6147

View file

@ -169,14 +169,18 @@ class DefaultObject(ObjectDB):
@property
def has_player(self):
"""
Convenience function for checking if an active player is
currently connected to this object
Convenience property for checking if an active player is
currently connected to this object.
"""
return any(self.sessions)
@property
def is_superuser(self):
"Check if user has a player, and if so, if it is a superuser."
"""
Check if user has a player, and if so, if it is a superuser.
"""
return self.db_player and self.db_player.is_superuser \
and not self.db_player.attributes.get("_quell")
@ -186,7 +190,16 @@ class DefaultObject(ObjectDB):
objects that has this object set as its location.
This should be publically available.
exclude is one or more objects to not return
Args:
exclude (Object): Object to exclude from returned
contents list
Returns:
contents (list): List of contents of this Object.
Notes:
Also available as the `contents` property.
"""
return self.contents_cache.get(exclude=exclude)
contents = property(contents_get)
@ -195,8 +208,8 @@ class DefaultObject(ObjectDB):
@property
def exits(self):
"""
Returns all exits from this object, i.e. all objects
at this location having the property destination != None.
Returns all exits from this object, i.e. all objects at this
location having the property destination != `None`.
"""
return [exi for exi in self.contents if exi.destination]
@ -328,25 +341,25 @@ class DefaultObject(ObjectDB):
"""
Simple shortcut wrapper to search for players, not characters.
searchdata - search criterion - the key or dbref of the player
to search for. If this is "here" or "me", search
for the player connected to this object.
quiet - return the results as a list rather than echo eventual
standard error messages.
Args:
searchdata (str): Search criterion - the key or dbref of the player
to search for. If this is "here" or "me", search
for the player connected to this object.
quiet (bool): Returns the results as a list rather than
echo eventual standard error messages. Default `False`.
Returns:
quiet=False (default):
no match or multimatch:
auto-echoes errors to self.msg, then returns None
(results are handled by settings.SEARCH_AT_RESULT
and settings.SEARCH_AT_MULTIMATCH_INPUT)
match:
a unique player match
quiet=True:
no match or multimatch:
returns None or list of multi-matches
match:
a unique object match
result (Player, None or list): Just what is returned depends on
the `quiet` setting:
- `quiet=True`: No match or multumatch auto-echoes errors
to self.msg, then returns `None`. The esults are passed
through `settings.SEARCH_AT_RESULT` and
`settings.SEARCH_AT_MULTIMATCH_INPUT`. If there is a
unique match, this will be returned.
- `quiet=True`: No automatic error messaging is done, and
what is returned is always a list with 0, 1 or more
matching Players.
"""
if isinstance(searchdata, basestring):
# searchdata is a string; wrap some common self-references
@ -361,28 +374,33 @@ class DefaultObject(ObjectDB):
def execute_cmd(self, raw_string, sessid=None, **kwargs):
"""
Do something as this object. This method is a copy of the execute_
cmd method on the session. This is never called normally, it's only
used when wanting specifically to let an object be the caller of a
command. It makes use of nicks of eventual connected players as well.
Do something as this object. This method is a copy of the
`execute_cmd` method on the session. This is never called
normally, it's only used when wanting specifically to let an
object be the caller of a command. It makes use of nicks of
eventual connected players as well.
Argument:
raw_string (string) - raw command input
sessid (int) - optional session id to return results to
**kwargs - other keyword arguments will be added to the found command
object instace as variables before it executes. This is
unused by default Evennia but may be used to set flags and
change operating paramaters for commands at run-time.
Args:
raw_string (string): Raw command input
sessid (int, optional): Session id to return results to
Returns Deferred - this is an asynchronous Twisted object that will
not fire until the command has actually finished executing. To
overload this one needs to attach callback functions to it, with
addCallback(function). This function will be called with an
eventual return value from the command execution.
Kwargs:
Other keyword arguments will be added to the found command
object instace as variables before it executes. This is
unused by default Evennia but may be used to set flags and
change operating paramaters for commands at run-time.
Returns:
defer (Deferred): This is an asynchronous Twisted object that
will not fire until the command has actually finished
executing. To overload this one needs to attach
callback functions to it, with addCallback(function).
This function will be called with an eventual return
value from the command execution. This return is not
used at all by Evennia by default, but might be useful
for coders intending to implement some sort of nested
command structure.
This return is not used at all by Evennia by default, but might
be useful for coders intending to implement some sort of nested
command structure.
"""
# nick replacement - we require full-word matching.
# do text encoding conversion
@ -437,10 +455,19 @@ class DefaultObject(ObjectDB):
def msg_contents(self, message, exclude=None, from_obj=None, **kwargs):
"""
Emits something to all objects inside an object.
Emits a message to all objects inside this object.
exclude is a list of objects not to send to. See self.msg() for
Args:
message (str): Message to send.
exclude (list, optional): A list of objects not to send to.
from_obj (Object, optional): An object designated as the
"sender" of the message. See `DefaultObject.msg()` for
more info.
Kwargs:
Keyword arguments will be passed on to `obj.msg()` for all
messaged objects.
"""
contents = self.contents
if exclude:
@ -454,13 +481,6 @@ class DefaultObject(ObjectDB):
"""
Moves this object to a new location.
Moves this object to a new location. Note that if <destination> is an
exit object (i.e. it has "destination"!=None), the move_to will
happen to this destination and -not- into the exit object itself, unless
use_destination=False. Note that no lock checks are done by this
function, such things are assumed to have been handled before calling
move_to.
Args:
destination (Object): Reference to the object to move to. This
can also be an exit object, in which case the
@ -481,8 +501,24 @@ class DefaultObject(ObjectDB):
result (bool): True/False depending on if there were problems with the move.
This method may also return various error messages to the
emit_to_obj.
Notes:
No access checks are done in this method, these should be handled before
calling `move_to`.
The `DefaultObject` hooks called (if `move_hooks=True`) are, in order:
1. `self.at_before_move(destination)` (if this returns False, move is aborted)
1. `source_location.at_object_leave(self, destination)`
1. `self.announce_move_from(destination)`
1. (move happens here)
1. `self.announce_move_to(source_location)`
1. `destination.at_object_receive(self, source_location)`
1. `self.at_after_move(source_location)`
"""
def logerr(string=""):
"Simple log helper method"
trc = traceback.format_exc()
errstring = "%s%s" % (trc, string)
log_trace()
@ -600,8 +636,8 @@ class DefaultObject(ObjectDB):
def clear_contents(self):
"""
Moves all objects (players/things) to their home
location or to default home.
Moves all objects (players/things) to their home location or
to default home.
"""
# Gather up everything that thinks this is its location.
default_home_id = int(settings.DEFAULT_HOME.lstrip("#"))
@ -645,14 +681,17 @@ class DefaultObject(ObjectDB):
def copy(self, new_key=None):
"""
Makes an identical copy of this object. If you want to customize the
copy by changing some settings, use ObjectDB.object.copy_object()
Makes an identical copy of this object, identical except for a
new dbref in the database. If you want to customize the copy
by changing some settings, use ObjectDB.object.copy_object()
directly.
new_key (string) - new key/name of copied object. If new_key is not
specified, the copy will be named <old_key>_copy
by default.
Returns: Object (copy of this one)
Args:
new_key (string): New key/name of copied object. If new_key is not
specified, the copy will be named <old_key>_copy by default.
Returns:
copy (Object): A copy of this object.
"""
def find_clone_key():
"""
@ -674,10 +713,14 @@ class DefaultObject(ObjectDB):
delete_iter = 0
def delete(self):
"""
Deletes this object.
Before deletion, this method makes sure to move all contained
objects to their respective home locations, as well as clean
up all exits to/from the object.
Deletes this object. Before deletion, this method makes sure
to move all contained objects to their respective home
locations, as well as clean up all exits to/from the object.
Returns:
noerror (bool): Returns whether or not the delete completed
successfully or not.
"""
global _ScriptDB
if not _ScriptDB:
@ -727,10 +770,12 @@ class DefaultObject(ObjectDB):
def __eq__(self, other):
"""
Checks for equality against an id string or another object or user.
Checks for equality against an id string or another object or
user.
Args:
other (Object): object to compare to.
This has be located at this level, having it in the
parent doesn't work.
"""
try:
return self.dbid == other.dbid
@ -741,6 +786,10 @@ class DefaultObject(ObjectDB):
except AttributeError:
return False
#
# Hook methods
#
def at_first_save(self):
"""
This is called by the typeclass system whenever an instance of
@ -748,6 +797,7 @@ class DefaultObject(ObjectDB):
for calling the startup hooks for the various game entities.
When overloading you generally don't overload this but
overload the hooks called by this method.
"""
self.basetype_setup()
self.at_object_creation()
@ -804,11 +854,12 @@ class DefaultObject(ObjectDB):
def basetype_setup(self):
"""
This sets up the default properties of an Object,
just before the more general at_object_creation.
This sets up the default properties of an Object, just before
the more general at_object_creation.
You normally don't need to change this unless you change some
fundamental things like names of permission groups.
"""
# the default security setup fallback for a generic
# object. Overload in child for a custom setup. Also creation
@ -834,21 +885,24 @@ class DefaultObject(ObjectDB):
setup after the object is created. An example of this is
EXITs, who need to know keys, aliases, locks etc to set up
their exit-cmdsets.
"""
pass
def at_object_creation(self):
"""
Called once, when this object is first created. This is
the normal hook to overload for most object types.
Called once, when this object is first created. This is the
normal hook to overload for most object types.
"""
pass
def at_object_delete(self):
"""
Called just before the database object is
permanently delete()d from the database. If
this method returns False, deletion is aborted.
Called just before the database object is permanently
delete()d from the database. If this method returns False,
deletion is aborted.
"""
return True
@ -859,6 +913,7 @@ class DefaultObject(ObjectDB):
happens on-demand first time the object is used or activated
in some way after being created but also after each server
restart or reload.
"""
pass
@ -868,44 +923,53 @@ class DefaultObject(ObjectDB):
command handler. If changes need to be done on the fly to the
cmdset before passing them on to the cmdhandler, this is the
place to do it. This is called also if the object currently
have no cmdsets. **kwargs are usually not set but could be
used e.g. to force rebuilding of a dynamically created cmdset
or similar.
have no cmdsets.
Kwargs:
Usually not set but could be used e.g. to force rebuilding
of a dynamically created cmdset or similar.
"""
pass
def at_pre_puppet(self, player, sessid=None):
"""
Called just before a Player connects to this object
to puppet it.
Called just before a Player connects to this object to puppet
it.
player - connecting player object
sessid - session id controlling the connection
Args:
player (Player): This is the connecting player.
sessid (int): Session id controlling the connection.
"""
pass
def at_post_puppet(self):
"""
Called just after puppeting has been completed and
all Player<->Object links have been established.
Called just after puppeting has been completed and all
Player<->Object links have been established.
"""
self.player.db._last_puppet = self
def at_pre_unpuppet(self):
"""
Called just before beginning to un-connect a puppeting
from this Player.
Called just before beginning to un-connect a puppeting from
this Player.
"""
pass
def at_post_unpuppet(self, player, sessid=None):
"""
Called just after the Player successfully disconnected
from this object, severing all connections.
Called just after the Player successfully disconnected from
this object, severing all connections.
Args:
player (Player): The player object that just disconnected
from this object.
sessid (int): Session id controlling the connection that
just disconnected.
player - the player object that just disconnected from
this object.
sessid - session id controlling the connection
"""
pass
@ -914,6 +978,7 @@ class DefaultObject(ObjectDB):
This hook is called whenever the server is shutting down for
restart/reboot. If you want to, for example, save non-persistent
properties across a restart, this is the place to do it.
"""
pass
@ -921,6 +986,7 @@ class DefaultObject(ObjectDB):
"""
This hook is called whenever the server is shutting down fully
(i.e. not for a restart).
"""
pass
@ -931,6 +997,17 @@ class DefaultObject(ObjectDB):
not affect the result of the lock check. It can be used e.g. to
customize error messages in a central location or other effects
based on the access result.
Args:
result (bool): The outcome of the access call.
accessing_obj (Object or Player): The entity trying to
gain access. access_type (str): The type of access that
was requested.
Kwargs:
Not used by default, added for possible expandability in a
game.
"""
pass
@ -939,13 +1016,19 @@ class DefaultObject(ObjectDB):
def at_before_move(self, destination):
"""
Called just before starting to move
this object to destination.
Called just before starting to move this object to
destination.
destination - the object we are moving to
Args:
destination (Object): The object we are moving to
Returns:
shouldmove (bool): If we should move or not.
Notes:
If this method returns False/None, the move is cancelled
before it is even started.
If this method returns False/None, the move
is cancelled before it is even started.
"""
#return has_perm(self, destination, "can_move")
return True
@ -956,7 +1039,9 @@ class DefaultObject(ObjectDB):
called while we are still standing in the old
location.
destination - the place we are going to.
Args:
destination (Object): The place we are going to.
"""
if not self.location:
return
@ -969,10 +1054,12 @@ class DefaultObject(ObjectDB):
def announce_move_to(self, source_location):
"""
Called after the move if the move was not quiet. At this
point we are standing in the new location.
Called after the move if the move was not quiet. At this point
we are standing in the new location.
Args:
source_location (Object): The place we came from
source_location - the place we came from
"""
name = self.name
@ -992,10 +1079,13 @@ class DefaultObject(ObjectDB):
def at_after_move(self, source_location):
"""
Called after move has completed, regardless of quiet mode or not.
Allows changes to the object due to the location it is now in.
Called after move has completed, regardless of quiet mode or
not. Allows changes to the object due to the location it is
now in.
Args:
source_location (Object): Wwhere we came from. This may be `None`.
source_location - where we came from. This may be None.
"""
pass
@ -1003,8 +1093,10 @@ class DefaultObject(ObjectDB):
"""
Called just before an object leaves from inside this object
moved_obj - the object leaving
target_location - where the object is going.
Args:
moved_obj (Object): The object leaving
target_location (Object): Where `moved_obj` is going.
"""
pass
@ -1012,93 +1104,140 @@ class DefaultObject(ObjectDB):
"""
Called after an object has been moved into this object.
moved_obj - the object moved into this one
source_location - where moved_object came from.
Args:
moved_obj (Object): The object moved into this one
source_location (Object): Where `moved_object` came from.
"""
pass
def at_before_traverse(self, traversing_object):
"""
Called just before an object uses this object to
traverse to another object (i.e. this object is a type of Exit)
Called just before an object uses this object to traverse to
another object (i.e. this object is a type of Exit)
Args:
traversing_object (Object): The object traversing us.
Notes:
The target destination should normally be available as
`self.destination`.
The target location should normally be available as self.destination.
"""
pass
def at_traverse(self, traversing_object, target_location):
"""
This hook is responsible for handling the actual traversal, normally
by calling traversing_object.move_to(target_location). It is normally
only implemented by Exit objects. If it returns False (usually because
move_to returned False), at_after_traverse below should not be called
and instead at_failed_traverse should be called.
This hook is responsible for handling the actual traversal,
normally by calling
`traversing_object.move_to(target_location)`. It is normally
only implemented by Exit objects. If it returns False (usually
because move_to returned False), at_after_traverse below
should not be called and instead at_failed_traverse should be
called.
Args:
traversing_object (Object): Object traversing us.
target_location (Object): Where target is going.
"""
pass
def at_after_traverse(self, traversing_object, source_location):
"""
Called just after an object successfully used this object to
traverse to another object (i.e. this object is a type of Exit)
traverse to another object (i.e. this object is a type of
Exit)
The target location should normally be available as self.destination.
Args:
traversing_object (Object): The object traversing us.
source_location (Object): Where `traversing_object` came from.
Notes:
The target location should normally be available as `self.destination`.
"""
pass
def at_failed_traverse(self, traversing_object):
"""
This is called if an object fails to traverse this object for some
reason. It will not be called if the attribute err_traverse is defined,
that attribute will then be echoed back instead.
This is called if an object fails to traverse this object for
some reason.
Args:
traversing_object (Object): The object that failed traversing us.
Notes:
Using the default exits, this hook will not be called if an
Attribute `err_traverse` is defined - this will in that case be
read for an error string instead.
"""
pass
def at_msg_receive(self, text=None, **kwargs):
"""
This hook is called whenever someone
sends a message to this object.
This hook is called whenever someone sends a message to this
object using the `msg` method.
Note that from_obj may be None if the sender did
not include itself as an argument to the obj.msg()
call - so you have to check for this. .
Note that from_obj may be None if the sender did not include
itself as an argument to the obj.msg() call - so you have to
check for this. .
Consider this a pre-processing method before msg is passed on
to the user sesssion. If this method returns False, the msg
will not be passed on.
Args:
text (str, optional): The message received.
Kwargs:
This includes any keywords sent to the `msg` method.
Returns:
receive (bool): If this message should be received.
Notes:
If this method returns False, the `msg` operation
will abort without sending the message.
Consider this a pre-processing method before
msg is passed on to the user sesssion. If this
method returns False, the msg will not be
passed on.
Input:
msg = the message received
from_obj = the one sending the message
Output:
boolean True/False
"""
return True
def at_msg_send(self, text=None, to_obj=None, **kwargs):
"""
This is a hook that is called when /this/ object
sends a message to another object with obj.msg()
while also specifying that it is the one sending.
This is a hook that is called when *this* object sends a
message to another object with `obj.msg(text, to_obj=obj)`.
Args:
text (str): Text to send.
to_obj (Object): The object to send to.
Kwargs:
Keywords passed from msg()
Notes:
Since this method is executed `from_obj`, if no `from_obj`
was passed to `DefaultCharacter.msg` this hook will never
get called.
Note that this method is executed on the object
passed along with the msg() function (i.e. using
obj.msg(msg, from_obj=caller) will then launch caller.at_msg())
and if no object was passed, it will never be called.
"""
pass
# hooks called by the default cmdset.
def return_appearance(self, pobject):
def return_appearance(self, looker):
"""
This is a convenient hook for a 'look'
command to call.
This formats a description. It is the hook a 'look' command
should call.
Args:
looker (Object): Object doing the looking.
"""
if not pobject:
if not looker:
return
# get and identify all objects
visible = (con for con in self.contents if con != pobject and
con.access(pobject, "view"))
visible = (con for con in self.contents if con != looker and
con.access(looker, "view"))
exits, users, things = [], [], []
for con in visible:
key = con.key
@ -1121,39 +1260,58 @@ class DefaultObject(ObjectDB):
def at_desc(self, looker=None):
"""
This is called whenever someone looks
at this object. Looker is the looking
object.
This is called whenever someone looks at this object.
looker (Object): The object requesting the description.
"""
pass
def at_get(self, getter):
"""
Called when this object has been picked up. Obs-
this method cannot stop the pickup - use permissions
for that!
Called by the default `get` command when this object has been
picked up.
Args:
getter (Object): The object getting this object.
Notes:
This hook cannot stop the pickup from happening. Use
permissions for that.
getter - the object getting this object.
"""
pass
def at_drop(self, dropper):
"""
Called when this object has been dropped.
Called by the default `drop` command when this object has been
dropped.
Args:
dropper (Object): The object which just dropped this object.
Notes:
This hook cannot stop the pickup from happening. Use
permissions from that.
dropper - the object which just dropped this object.
"""
pass
def at_say(self, speaker, message):
"""
Called on this object if an object inside this object speaks.
The string returned from this method is the final form
of the speech. Obs - you don't have to add things like
'you say: ' or similar, that is handled by the say command.
The string returned from this method is the final form of the
speech.
Args:
speaker (Object): The object speaking.
message (str): The words spoken.
Notes:
You should not need to add things like 'you say: ' or
similar here, that should be handled by the say command before
this.
speaker - the object speaking
message - the words spoken.
"""
return message
@ -1164,18 +1322,19 @@ class DefaultObject(ObjectDB):
class DefaultCharacter(DefaultObject):
"""
This is just like the Object except it implements its own
version of the at_object_creation to set up the script
that adds the default cmdset to the object.
This implements an Object puppeted by a Session and what that
means.
"""
def basetype_setup(self):
"""
Setup character-specific security
Setup character-specific security.
You should normally not need to overload this, but if you do, make
sure to reproduce at least the two last commands in this method (unless
you want to fundamentally change how a Character object works).
You should normally not need to overload this, but if you do,
make sure to reproduce at least the two last commands in this
method (unless you want to fundamentally change how a
Character object works).
"""
super(DefaultCharacter, self).basetype_setup()
@ -1184,23 +1343,22 @@ class DefaultCharacter(DefaultObject):
# add the default cmdset
self.cmdset.add_default(settings.CMDSET_CHARACTER, permanent=True)
def at_object_creation(self):
"""
All this does (for now) is to add the default cmdset. Since
the script is permanently stored to this object (the permanent
keyword creates a script to do this), we should never need to
do this again for as long as this object exists.
"""
pass
def at_after_move(self, source_location):
"Default is to look around after a move."
"""
We make sure to look around after a move.
"""
self.execute_cmd('look')
def at_pre_puppet(self, player, sessid=None):
"""
This recovers the character again after having been "stoved away"
at the unpuppet
This implementation recovers the character again after having been "stoved
away" to the `None` location in `at_post_unpuppet`.
Args:
player (Player): This is the connecting player.
sessid (int): Session id controlling the connection.
"""
if self.db.prelogout_location:
# try to recover
@ -1217,7 +1375,9 @@ class DefaultCharacter(DefaultObject):
def at_post_puppet(self):
"""
Called just after puppeting has completed.
Called just after puppeting has been completed and all
Player<->Object links have been established.
"""
self.msg("\nYou become {c%s{n.\n" % self.name)
self.execute_cmd("look")
@ -1227,8 +1387,14 @@ class DefaultCharacter(DefaultObject):
def at_post_unpuppet(self, player, sessid=None):
"""
We stove away the character when the player goes ooc/logs off,
otherwise the character object will remain in the room also after the
player logged off ("headless", so to say).
otherwise the character object will remain in the room also
after the player logged off ("headless", so to say).
Args:
player (Player): The player object that just disconnected
from this object.
sessid (int): Session id controlling the connection that
just disconnected.
"""
if self.location: # have to check, in case of multiple connections closing
self.location.msg_contents("%s has left the game." % self.name, exclude=[self])
@ -1242,12 +1408,13 @@ class DefaultCharacter(DefaultObject):
class DefaultRoom(DefaultObject):
"""
This is the base room object. It's just like any Object except its
location is None.
location is always `None`.
"""
def basetype_setup(self):
"""
Simple setup, shown as an example
(since default is None anyway)
Simple room setup setting locks to make sure the room
cannot be picked up.
"""
super(DefaultRoom, self).basetype_setup()
@ -1269,6 +1436,7 @@ class DefaultExit(DefaultObject):
created dynamically depending on what the exit is called). This
command (which has a high priority) will thus allow us to traverse
exits simply by giving the exit-object's name on its own.
"""
# Helper classes and methods to implement the Exit. These need not
@ -1279,23 +1447,26 @@ class DefaultExit(DefaultObject):
"""
Helper function for creating an exit command set + command.
The command of this cmdset has the same name as the Exit object
and allows the exit to react when the player enter the exit's name,
triggering the movement between rooms.
The command of this cmdset has the same name as the Exit
object and allows the exit to react when the player enter the
exit's name, triggering the movement between rooms.
Args:
exiddobj (Object): The DefaultExit object to base the command on.
Note that exitdbobj is an ObjectDB instance. This is necessary
for handling reloads and avoid tracebacks if this is called while
the typeclass system is rebooting.
"""
class ExitCommand(command.Command):
"""
This is a command that simply cause the caller
to traverse the object it is attached to.
This is a command that simply cause the caller to traverse
the object it is attached to.
"""
obj = None
def func(self):
"Default exit traverse if no syscommand is defined."
"""
Default exit traverse if no syscommand is defined.
"""
if self.obj.access(self.caller, 'traverse'):
# we may traverse the exit.
@ -1333,8 +1504,9 @@ class DefaultExit(DefaultObject):
"""
Setup exit-security
You should normally not need to overload this - if you do make sure you
include all the functionality in this method.
You should normally not need to overload this - if you do make
sure you include all the functionality in this method.
"""
super(DefaultExit, self).basetype_setup()
@ -1349,28 +1521,32 @@ class DefaultExit(DefaultObject):
def at_cmdset_get(self, **kwargs):
"""
Called when the cmdset is requested from this object, just before the
cmdset is actually extracted. If no Exit-cmdset is cached, create
it now.
Called just before cmdsets on this object are requested by the
command handler. If changes need to be done on the fly to the
cmdset before passing them on to the cmdhandler, this is the
place to do it. This is called also if the object currently
have no cmdsets.
Kwargs:
force_init (bool): If `True`, force a re-build of the cmdset
(for example to update aliases).
kwargs:
force_init=True - force a re-build of the cmdset (for example to update aliases)
"""
if "force_init" in kwargs or not self.cmdset.has_cmdset("_exitset", must_be_default=True):
# we are resetting, or no exit-cmdset was set. Create one dynamically.
self.cmdset.add_default(self.create_exit_cmdset(self), permanent=False)
# this and other hooks are what usually can be modified safely.
def at_object_creation(self):
"Called once, when object is first created (after basetype_setup)."
pass
def at_traverse(self, traversing_object, target_location):
"""
This implements the actual traversal. The traverse lock has already been
checked (in the Exit command) at this point.
This implements the actual traversal. The traverse lock has
already been checked (in the Exit command) at this point.
Args:
traversing_object (Object): Object traversing us.
target_location (Object): Where target is going.
"""
source_location = traversing_object.location
if traversing_object.move_to(target_location):
@ -1383,19 +1559,17 @@ class DefaultExit(DefaultObject):
# No shorthand error message. Call hook.
self.at_failed_traverse(traversing_object)
def at_after_traverse(self, traversing_object, source_location):
"""
Called after a successful traverse.
"""
pass
def at_failed_traverse(self, traversing_object):
"""
This is called if an object fails to traverse this object for some
reason. It will not be called if the attribute "err_traverse" is
defined, that attribute will then be echoed back instead as a
convenient shortcut.
Overloads the default hook to implement a simple default error message.
Args:
traversing_object (Object): The object that failed traversing us.
Notes:
Using the default exits, this hook will not be called if an
Attribute `err_traverse` is defined - this will in that case be
read for an error string instead.
(See also hooks at_before_traverse and at_after_traverse).
"""
traversing_object.msg("You cannot go there.")