mirror of
https://github.com/evennia/evennia.git
synced 2026-03-17 05:16:31 +01:00
As part of this work, I have also written full listings of all available properties on Typeclassed objects (including those inherited in various ways). Should hopefully make things easier to find. One can of course still import things directly from src/ as before. But this is a first step towards removing the "base" objects in game/gamesrc and instead making those accessible through the core API.
240 lines
12 KiB
Python
240 lines
12 KiB
Python
"""
|
|
These are the base object typeclasses, a convenient shortcut to the
|
|
objects in src/objects/objects.py. You can start building your game
|
|
from these bases if you want.
|
|
|
|
To change these defaults to point to some other object,
|
|
change some or all of these variables in settings.py:
|
|
BASE_OBJECT_TYPECLASS
|
|
BASE_CHARACTER_TYPECLASS
|
|
BASE_ROOM_TYPECLASS
|
|
BASE_EXIT_TYPECLASS
|
|
BASE_PLAYER_TYPECLASS
|
|
|
|
Some of the main uses for these settings are not hard-coded in
|
|
Evennia, rather they are convenient defaults for in-game commands
|
|
(which you may change) Example would be build commands like '@dig'
|
|
knowing to create a particular room-type object).
|
|
|
|
New instances of Objects (inheriting from these typeclasses)
|
|
are created with src.utils.create.create_object(typeclass, ...)
|
|
where typeclass is the python path to the class you want to use.
|
|
"""
|
|
from src.objects.objects import Object as BaseObject
|
|
from src.objects.objects import Character as BaseCharacter
|
|
from src.objects.objects import Room as BaseRoom
|
|
from src.objects.objects import Exit as BaseExit
|
|
from src.players.player import Player as BasePlayer
|
|
|
|
class Object(BaseObject):
|
|
"""
|
|
This is the root typeclass object, implementing an in-game Evennia
|
|
game object, such as having a location, being able to be
|
|
manipulated or looked at, etc. If you create a new typeclass, it
|
|
must always inherit from this object (or any of the other objects
|
|
in this file, since they all actually inherit from BaseObject, as
|
|
seen in src.object.objects).
|
|
|
|
The BaseObject class implements several hooks tying into the game
|
|
engine. By re-implementing these hooks you can control the
|
|
system. You should never need to re-implement special Python
|
|
methods, such as __init__ and especially never __getattribute__ and
|
|
__setattr__ since these are used heavily by the typeclass system
|
|
of Evennia and messing with them might well break things for you.
|
|
|
|
|
|
* Base properties defined/available on all Objects
|
|
|
|
key (string) - name of object
|
|
name (string)- same as key
|
|
aliases (list of strings) - aliases to the object. Will be saved to database as AliasDB entries but returned as strings.
|
|
dbref (int, read-only) - unique #id-number. Also "id" can be used.
|
|
dbobj (Object, read-only) - link to database model. dbobj.typeclass points back to this class
|
|
typeclass (Object, read-only) - this links back to this class as an identified only. Use self.swap_typeclass() to switch.
|
|
date_created (string) - time stamp of object creation
|
|
permissions (list of strings) - list of permission strings
|
|
|
|
player (Player) - controlling player (will also return offline player)
|
|
location (Object) - current location. Is None if this is a room
|
|
home (Object) - safety start-location
|
|
sessions (list of Sessions, read-only) - returns all sessions connected to this object
|
|
has_player (bool, read-only)- will only return *connected* players
|
|
contents (list of Objects, read-only) - returns all objects inside this object (including exits)
|
|
exits (list of Objects, read-only) - returns all exits from this object, if any
|
|
destination (Object) - only set if this object is an exit.
|
|
is_superuser (bool, read-only) - True/False if this user is a superuser
|
|
|
|
* Handlers available
|
|
|
|
locks - lock-handler: use locks.add() to add new lock strings
|
|
db - attribute-handler: store/retrieve database attributes on this self.db.myattr=val, val=self.db.myattr
|
|
ndb - non-persistent attribute handler: same as db but does not create a database entry when storing data
|
|
scripts - script-handler. Add new scripts to object with scripts.add()
|
|
cmdset - cmdset-handler. Use cmdset.add() to add new cmdsets to object
|
|
nicks - nick-handler. New nicks with nicks.add().
|
|
|
|
* Helper methods (see src.objects.objects.py for full headers)
|
|
|
|
search(ostring, global_search=False, attribute_name=None, use_nicks=False, location=None, ignore_errors=False, player=False)
|
|
execute_cmd(raw_string)
|
|
msg(message, from_obj=None, data=None)
|
|
msg_contents(message, exclude=None, from_obj=None, data=None)
|
|
move_to(destination, quiet=False, emit_to_obj=None, use_destination=True)
|
|
copy(new_key=None)
|
|
delete()
|
|
is_typeclass(typeclass, exact=False)
|
|
swap_typeclass(new_typeclass, clean_attributes=False, no_default=True)
|
|
access(accessing_obj, access_type='read', default=False)
|
|
check_permstring(permstring)
|
|
|
|
* Hooks (these are class methods, so their arguments should also start with self):
|
|
|
|
basetype_setup() - only called once, used for behind-the-scenes setup. Normally not modified.
|
|
basetype_posthook_setup() - customization in basetype, after the object has been created; Normally not modified.
|
|
|
|
at_object_creation() - only called once, when object is first created. Object customizations go here.
|
|
at_object_delete() - called just before deleting an object. If returning False, deletion is aborted. Note that all objects
|
|
inside a deleted object are automatically moved to their <home>, they don't need to be removed here.
|
|
|
|
at_init() - called whenever typeclass is cached from memory, at least once every server restart/reload
|
|
at_cmdset_get() - this is called just before the command handler requests a cmdset from this object
|
|
at_first_login() - (player-controlled objects only) called once, the very first time user logs in.
|
|
at_pre_login() - (player-controlled objects only) called every time the user connects, after they have identified, before other setup
|
|
at_post_login() - (player-controlled objects only) called at the end of login, just before setting the player loose in the world.
|
|
at_disconnect() - (player-controlled objects only) called just before the user disconnects (or goes linkless)
|
|
at_server_reload() - called before server is reloaded
|
|
at_server_shutdown() - called just before server is fully shut down
|
|
|
|
at_before_move(destination) - called just before moving object to the destination. If returns False, move is cancelled.
|
|
announce_move_from(destination) - called in old location, just before move, if obj.move_to() has quiet=False
|
|
announce_move_to(source_location) - called in new location, just after move, if obj.move_to() has quiet=False
|
|
at_after_move(source_location) - always called after a move has been successfully performed.
|
|
at_object_leave(obj, target_location) - called when an object leaves this object in any fashion
|
|
at_object_receive(obj, source_location) - called when this object receives another object
|
|
|
|
at_before_traverse(traversing_object) - (exit-objects only) called just before an object traverses this object
|
|
at_after_traverse(traversing_object, source_location) - (exit-objects only) called just after a traversal has happened.
|
|
at_failed_traverse(traversing_object) - (exit-objects only) called if traversal fails and property err_traverse is not defined.
|
|
|
|
at_msg_receive(self, msg, from_obj=None, data=None) - called when a message (via self.msg()) is sent to this obj.
|
|
If returns false, aborts send.
|
|
at_msg_send(self, msg, to_obj=None, data=None) - called when this objects sends a message to someone via self.msg().
|
|
|
|
return_appearance(looker) - describes this object. Used by "look" command by default
|
|
at_desc(looker=None) - called by 'look' whenever the appearance is requested.
|
|
at_get(getter) - called after object has been picked up. Does not stop pickup.
|
|
at_drop(dropper) - called when this object has been dropped.
|
|
at_say(speaker, message) - by default, called if an object inside this object speaks
|
|
|
|
"""
|
|
pass
|
|
|
|
|
|
class Character(BaseCharacter):
|
|
"""
|
|
This is the default object created for a new user connecting - the
|
|
in-game player character representation. The basetype_setup always
|
|
assigns the default_cmdset as a fallback to objects of this type.
|
|
The default hooks also hide the character object away (by moving
|
|
it to a Null location whenever the player logs off (otherwise the
|
|
character would remain in the world, "headless" so to say).
|
|
"""
|
|
pass
|
|
|
|
class Room(BaseRoom):
|
|
"""
|
|
Rooms are like any object, except their location is None
|
|
(which is default). Usually this object should be
|
|
assigned to room-building commands by use of the
|
|
settings.BASE_ROOM_TYPECLASS variable.
|
|
"""
|
|
pass
|
|
|
|
class Exit(BaseExit):
|
|
"""
|
|
Exits are connectors between rooms. Exits defines the
|
|
'destination' property and sets up a command on itself with the
|
|
same name as the Exit object - this command allows the player to
|
|
traverse the exit to the destination just by writing the name of
|
|
the object on the command line.
|
|
|
|
Relevant hooks:
|
|
at_before_traverse(traveller) - called just before traversing
|
|
at_after_traverse(traveller, source_loc) - called just after traversing
|
|
at_failed_traverse(traveller) - called if traversal failed for some reason. Will
|
|
not be called if the attribute 'err_traverse' is
|
|
defined, in which case that will simply be echoed.
|
|
"""
|
|
pass
|
|
|
|
class Player(BasePlayer):
|
|
"""
|
|
This class describes the actual OOC player (i.e. the user connecting
|
|
to the MUD). It does NOT have visual appearance in the game world (that
|
|
|
|
is handled by the character which is connected to this). Comm channels
|
|
are attended/joined using this object.
|
|
|
|
It can be useful e.g. for storing configuration options for your game, but
|
|
should generally not hold any character-related info (that's best handled
|
|
on the character level).
|
|
|
|
Can be set using BASE_PLAYER_TYPECLASS.
|
|
|
|
|
|
* available properties
|
|
|
|
key (string) - name of player
|
|
name (string)- wrapper for user.username
|
|
aliases (list of strings) - aliases to the object. Will be saved to database as AliasDB entries but returned as strings.
|
|
dbref (int, read-only) - unique #id-number. Also "id" can be used.
|
|
dbobj (Player, read-only) - link to database model. dbobj.typeclass points back to this class
|
|
typeclass (Player, read-only) - this links back to this class as an identified only. Use self.swap_typeclass() to switch.
|
|
date_created (string) - time stamp of object creation
|
|
permissions (list of strings) - list of permission strings
|
|
|
|
user (User, read-only) - django User authorization object
|
|
obj (Object) - game object controlled by player. 'character' can also be used.
|
|
sessions (list of Sessions) - sessions connected to this player
|
|
is_superuser (bool, read-only) - if the connected user is a superuser
|
|
|
|
* Handlers
|
|
|
|
locks - lock-handler: use locks.add() to add new lock strings
|
|
db - attribute-handler: store/retrieve database attributes on this self.db.myattr=val, val=self.db.myattr
|
|
ndb - non-persistent attribute handler: same as db but does not create a database entry when storing data
|
|
scripts - script-handler. Add new scripts to object with scripts.add()
|
|
cmdset - cmdset-handler. Use cmdset.add() to add new cmdsets to object
|
|
nicks - nick-handler. New nicks with nicks.add().
|
|
|
|
* Helper methods
|
|
|
|
msg(outgoing_string, from_obj=None, data=None)
|
|
swap_character(new_character, delete_old_character=False)
|
|
execute_cmd(raw_string)
|
|
search(ostring, global_search=False, attribute_name=None, use_nicks=False, location=None, ignore_errors=False, player=False)
|
|
is_typeclass(typeclass, exact=False)
|
|
swap_typeclass(new_typeclass, clean_attributes=False, no_default=True)
|
|
access(accessing_obj, access_type='read', default=False)
|
|
check_permstring(permstring)
|
|
|
|
* Hook methods (when re-implementation, remember methods need to have self as first arg)
|
|
|
|
basetype_setup()
|
|
at_player_creation()
|
|
|
|
- note that the following hooks are also found on Objects and are
|
|
usually handled on the character level:
|
|
|
|
at_init()
|
|
at_cmdset_get()
|
|
at_first_login()
|
|
at_post_login()
|
|
at_disconnect()
|
|
at_message_receive()
|
|
at_message_send()
|
|
at_server_reload()
|
|
at_server_shutdown()
|
|
|
|
"""
|
|
pass
|