From 3ba4299df672d85c76d5520b19c9f0fa0f87b0fe Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 9 Jan 2022 17:24:06 +0100 Subject: [PATCH] Updated HTML docs --- docs/0.9.5/.buildinfo | 2 +- docs/0.9.5/Coding-Utils.html | 8 +- .../_modules/evennia/accounts/manager.html | 116 ++- .../evennia/commands/default/building.html | 253 +++++-- .../evennia/commands/default/comms.html | 16 +- .../evennia/commands/default/tests.html | 19 +- .../_modules/evennia/comms/managers.html | 118 ++- docs/0.9.5/_modules/evennia/comms/models.html | 2 +- docs/0.9.5/_modules/evennia/help/manager.html | 51 +- .../_modules/evennia/objects/manager.html | 172 ++++- .../evennia/prototypes/prototypes.html | 6 +- .../_modules/evennia/scripts/manager.html | 145 +++- .../evennia/scripts/monitorhandler.html | 26 +- .../evennia/typeclasses/managers.html | 7 +- docs/0.9.5/_modules/evennia/utils/create.html | 691 ----------------- docs/0.9.5/_modules/evennia/utils/search.html | 10 +- .../evennia/utils/test_resources.html | 53 +- docs/0.9.5/_modules/index.html | 1 - docs/0.9.5/api/evennia.accounts.manager.html | 46 ++ .../api/evennia.commands.default.account.html | 4 +- ...evennia.commands.default.batchprocess.html | 4 +- .../evennia.commands.default.building.html | 69 +- .../api/evennia.commands.default.general.html | 16 +- .../api/evennia.commands.default.system.html | 4 +- .../api/evennia.commands.default.tests.html | 5 + .../evennia.commands.default.unloggedin.html | 12 +- docs/0.9.5/api/evennia.comms.managers.html | 69 +- docs/0.9.5/api/evennia.help.manager.html | 28 + docs/0.9.5/api/evennia.objects.manager.html | 55 +- docs/0.9.5/api/evennia.scripts.manager.html | 53 +- .../api/evennia.scripts.monitorhandler.html | 7 +- .../api/evennia.typeclasses.managers.html | 2 +- docs/0.9.5/api/evennia.utils.create.html | 12 +- docs/0.9.5/api/evennia.utils.eveditor.html | 4 +- docs/0.9.5/api/evennia.utils.evmenu.html | 4 +- docs/0.9.5/api/evennia.utils.evmore.html | 4 +- docs/0.9.5/api/evennia.utils.search.html | 14 +- .../api/evennia.utils.test_resources.html | 15 - docs/0.9.5/genindex.html | 68 +- docs/0.9.5/objects.inv | Bin 83826 -> 83889 bytes docs/0.9.5/searchindex.js | 2 +- docs/1.0-dev/.buildinfo | 2 +- .../_modules/evennia/accounts/manager.html | 116 ++- .../evennia/commands/default/building.html | 253 +++++-- .../evennia/commands/default/comms.html | 16 +- .../evennia/commands/default/tests.html | 19 +- .../_modules/evennia/comms/managers.html | 118 ++- .../_modules/evennia/comms/models.html | 2 +- .../evennia/contrib/utils/auditing/tests.html | 3 +- .../_modules/evennia/help/manager.html | 51 +- .../_modules/evennia/objects/manager.html | 172 ++++- .../evennia/prototypes/prototypes.html | 6 +- .../_modules/evennia/scripts/manager.html | 145 +++- .../evennia/scripts/monitorhandler.html | 26 +- .../evennia/typeclasses/managers.html | 7 +- .../_modules/evennia/utils/create.html | 693 ------------------ .../_modules/evennia/utils/search.html | 10 +- .../evennia/utils/test_resources.html | 53 +- docs/1.0-dev/_modules/index.html | 1 - docs/1.0-dev/_sources/Contributing.md.txt | 2 +- .../1.0-dev/api/evennia.accounts.manager.html | 46 ++ .../api/evennia.commands.default.account.html | 4 +- ...evennia.commands.default.batchprocess.html | 4 +- .../evennia.commands.default.building.html | 73 +- .../api/evennia.commands.default.comms.html | 8 +- .../api/evennia.commands.default.general.html | 12 +- .../api/evennia.commands.default.system.html | 4 +- .../api/evennia.commands.default.tests.html | 5 + .../evennia.commands.default.unloggedin.html | 12 +- docs/1.0-dev/api/evennia.comms.managers.html | 69 +- ....base_systems.email_login.email_login.html | 12 +- ...systems.mux_comms_cmds.mux_comms_cmds.html | 8 +- ...rib.full_systems.evscaperoom.commands.html | 24 +- ...ia.contrib.game_systems.barter.barter.html | 4 +- ...ontrib.game_systems.clothing.clothing.html | 4 +- ...trib.game_systems.turnbattle.tb_basic.html | 4 +- ...trib.game_systems.turnbattle.tb_equip.html | 4 +- ...trib.game_systems.turnbattle.tb_items.html | 4 +- ...trib.game_systems.turnbattle.tb_magic.html | 4 +- ...trib.game_systems.turnbattle.tb_range.html | 4 +- ...trib.grid.extended_room.extended_room.html | 4 +- ...evennia.contrib.rpg.rpsystem.rpsystem.html | 4 +- ...ntrib.tutorials.red_button.red_button.html | 16 +- ...trib.tutorials.tutorial_world.objects.html | 16 +- ...ontrib.tutorials.tutorial_world.rooms.html | 8 +- docs/1.0-dev/api/evennia.help.manager.html | 28 + docs/1.0-dev/api/evennia.objects.manager.html | 55 +- docs/1.0-dev/api/evennia.scripts.manager.html | 53 +- .../api/evennia.scripts.monitorhandler.html | 7 +- .../api/evennia.typeclasses.managers.html | 2 +- docs/1.0-dev/api/evennia.utils.create.html | 12 +- docs/1.0-dev/api/evennia.utils.eveditor.html | 4 +- docs/1.0-dev/api/evennia.utils.evmenu.html | 4 +- docs/1.0-dev/api/evennia.utils.evmore.html | 4 +- docs/1.0-dev/api/evennia.utils.search.html | 14 +- .../api/evennia.utils.test_resources.html | 15 - docs/1.0-dev/genindex.html | 60 +- docs/1.0-dev/objects.inv | Bin 137068 -> 137139 bytes docs/1.0-dev/searchindex.js | 2 +- 99 files changed, 2573 insertions(+), 1932 deletions(-) delete mode 100644 docs/0.9.5/_modules/evennia/utils/create.html delete mode 100644 docs/1.0-dev/_modules/evennia/utils/create.html diff --git a/docs/0.9.5/.buildinfo b/docs/0.9.5/.buildinfo index d11e7da81b..b06bf58165 100644 --- a/docs/0.9.5/.buildinfo +++ b/docs/0.9.5/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 3bf6b5fb5391a938af0647d41b75c1c8 +config: 13e03b2041c10390196e0d6afb7b4405 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/0.9.5/Coding-Utils.html b/docs/0.9.5/Coding-Utils.html index fad16edc63..7ac03cf3be 100644 --- a/docs/0.9.5/Coding-Utils.html +++ b/docs/0.9.5/Coding-Utils.html @@ -83,12 +83,12 @@ entities directly in code (for example when defining new create commands).

Each of these create-functions have a host of arguments to further customize the created entity. See evennia/utils/create.py for more information.

diff --git a/docs/0.9.5/_modules/evennia/accounts/manager.html b/docs/0.9.5/_modules/evennia/accounts/manager.html index 41917a2f60..c53bf73108 100644 --- a/docs/0.9.5/_modules/evennia/accounts/manager.html +++ b/docs/0.9.5/_modules/evennia/accounts/manager.html @@ -46,9 +46,12 @@ """ import datetime +from django.conf import settings from django.utils import timezone from django.contrib.auth.models import UserManager from evennia.typeclasses.managers import TypedObjectManager, TypeclassManager +from evennia.server import signals +from evennia.utils.utils import make_iter, class_from_module, dbid_to_obj __all__ = ("AccountManager", "AccountDBManager") @@ -196,14 +199,17 @@ (non-case-sensitive fuzzy match). typeclass (str or Typeclass, optional): Limit the search only to accounts of this typeclass. + Returns: + Queryset: A queryset (an iterable) with 0, 1 or more matches. """ dbref = self.dbref(ostring) if dbref or dbref == 0: - # bref search is always exact - matches = self.filter(id=dbref) - if matches: - return matches + # dbref search is always exact + dbref_match = self.search_dbref(dbref) + if dbref_match: + return dbref_match + query = {"username__iexact" if exact else "username__icontains": ostring} if typeclass: # we accept both strings and actual typeclasses @@ -224,6 +230,108 @@ ) return matches +
[docs] def create_account( + self, + key, + email, + password, + typeclass=None, + is_superuser=False, + locks=None, + permissions=None, + tags=None, + attributes=None, + report_to=None, + ): + """ + This creates a new account. + + Args: + key (str): The account's name. This should be unique. + email (str or None): Email on valid addr@addr.domain form. If + the empty string, will be set to None. + password (str): Password in cleartext. + + Keyword Args: + typeclass (str): The typeclass to use for the account. + is_superuser (bool): Wether or not this account is to be a superuser + locks (str): Lockstring. + permission (list): List of permission strings. + tags (list): List of Tags on form `(key, category[, data])` + attributes (list): List of Attributes on form + `(key, value [, category, [,lockstring [, default_pass]]])` + report_to (Object): An object with a msg() method to report + errors to. If not given, errors will be logged. + + Returns: + Account: The newly created Account. + Raises: + ValueError: If `key` already exists in database. + + + Notes: + Usually only the server admin should need to be superuser, all + other access levels can be handled with more fine-grained + permissions or groups. A superuser bypasses all lock checking + operations and is thus not suitable for play-testing the game. + + """ + typeclass = typeclass if typeclass else settings.BASE_ACCOUNT_TYPECLASS + locks = make_iter(locks) if locks is not None else None + permissions = make_iter(permissions) if permissions is not None else None + tags = make_iter(tags) if tags is not None else None + attributes = make_iter(attributes) if attributes is not None else None + + if isinstance(typeclass, str): + # a path is given. Load the actual typeclass. + typeclass = class_from_module(typeclass, settings.TYPECLASS_PATHS) + + # setup input for the create command. We use AccountDB as baseclass + # here to give us maximum freedom (the typeclasses will load + # correctly when each object is recovered). + + if not email: + email = None + if self.model.objects.filter(username__iexact=key): + raise ValueError("An Account with the name '%s' already exists." % key) + + # this handles a given dbref-relocate to an account. + report_to = dbid_to_obj(report_to, self.model) + + # create the correct account entity, using the setup from + # base django auth. + now = timezone.now() + email = typeclass.objects.normalize_email(email) + new_account = typeclass( + username=key, + email=email, + is_staff=is_superuser, + is_superuser=is_superuser, + last_login=now, + date_joined=now, + ) + if password is not None: + # the password may be None for 'fake' accounts, like bots + valid, error = new_account.validate_password(password, new_account) + if not valid: + raise error + + new_account.set_password(password) + + new_account._createdict = dict( + locks=locks, permissions=permissions, + report_to=report_to, tags=tags, attributes=attributes + ) + # saving will trigger the signal that calls the + # at_first_save hook on the typeclass, where the _createdict + # can be used. + new_account.save() + + # note that we don't send a signal here, that is sent from the Account.create helper method + # instead. + + return new_account
+ # back-compatibility alias account_search = search_account diff --git a/docs/0.9.5/_modules/evennia/commands/default/building.html b/docs/0.9.5/_modules/evennia/commands/default/building.html index 4b7767bb83..4c8a1003d3 100644 --- a/docs/0.9.5/_modules/evennia/commands/default/building.html +++ b/docs/0.9.5/_modules/evennia/commands/default/building.html @@ -64,6 +64,7 @@ interactive, list_to_string, display_len, + format_grid, ) from evennia.utils.eveditor import EvEditor from evennia.utils.evmore import EvMore @@ -74,6 +75,7 @@ COMMAND_DEFAULT_CLASS = class_from_module(settings.COMMAND_DEFAULT_CLASS) _FUNCPARSER = None +_ATTRFUNCPARSER = None # limit symbol import for API __all__ = ( @@ -1635,11 +1637,20 @@ char: Setting an attribute on a character (global search) character: Alias for char, as above. + Example: + set self/foo = "bar" + set/delete self/foo + set self/foo = $dbref(#53) + Sets attributes on objects. The second example form above clears a previously set attribute while the third form inspects the current value of the attribute (if any). The last one (with the star) is a shortcut for operating on a player Account rather than an Object. + If you want <value> to be an object, use $dbef(#dbref) or + $search(key) to assign it. You need control or edit access to + the object you are adding. + The most common data to save with this command are strings and numbers. You can however also set Python primitives such as lists, dictionaries and tuples on objects (this might be important for @@ -1964,13 +1975,33 @@ result.append(self.rm_attr(obj, attr, category)) else: # setting attribute(s). Make sure to convert to real Python type before saving. + # add support for $dbref() and $search() in set argument + global _ATTRFUNCPARSER + if not _ATTRFUNCPARSER: + _ATTRFUNCPARSER = funcparser.FuncParser( + {"dbref": funcparser.funcparser_callable_search, + "search": funcparser.funcparser_callable_search} + ) + if not (obj.access(self.caller, "control") or obj.access(self.caller, "edit")): caller.msg("You don't have permission to edit %s." % obj.key) return for attr in attrs: if not self.check_attr(obj, attr, category): continue - value = _convert_from_string(self, value) + # from evennia import set_trace;set_trace() + parsed_value = _ATTRFUNCPARSER.parse(value, return_str=False, caller=caller) + if hasattr(parsed_value, "access"): + # if this is an object we must have the right to read it, if so, + # we will not convert it to a string + if not (parsed_value.access(caller, "control") + or parsed_value.access(self.caller, "edit")): + caller.msg("You don't have permission to set " + f"object with identifier '{value}'.") + continue + value = parsed_value + else: + value = _convert_from_string(self, value) result.append(self.set_attr(obj, attr, value, category)) # send feedback caller.msg("".join(result).strip("\n")) @@ -2458,6 +2489,8 @@ Switch: account - examine an Account (same as adding *) object - examine an Object (useful when OOC) + script - examine a Script + channel - examine a Channel The examine command shows detailed game info about an object and optionally a specific attribute on it. @@ -2472,8 +2505,10 @@ locks = "cmd:perm(examine) or perm(Builder)" help_category = "Building" arg_regex = r"(/\w+?(\s|$))|\s|$" + switch_options = ["account", "object", "script", "channel"] + + object_type = "object" - account_mode = False detail_color = "|c" header_color = "|w" quell_color = "|r" @@ -2498,7 +2533,7 @@ return ", ".join(utils.make_iter(str(obj.aliases)))
[docs] def format_typeclass(self, obj): - if hasattr(obj, "typeclass"): + if hasattr(obj, "typeclass_path"): return f"{obj.typename} ({obj.typeclass_path})"
[docs] def format_sessions(self, obj): @@ -2597,7 +2632,7 @@ for cmdset in stored_cmdsets: if cmdset.key != "_EMPTY_CMDSET": stored_cmdset_strings.append(self.format_single_cmdset(cmdset)) - return "\n ".join(stored_cmdset_strings)
+ return "\n " + "\n ".join(stored_cmdset_strings)
[docs] def format_merged_cmdsets(self, obj, current_cmdset): if not hasattr(obj, "cmdset"): @@ -2631,7 +2666,7 @@ for cmdset in all_cmdsets: if cmdset.key != "_EMPTY_CMDSET": merged_cmdset_strings.append(self.format_single_cmdset(cmdset)) - return "\n ".join(merged_cmdset_strings)
+ return "\n " + "\n ".join(merged_cmdset_strings)
[docs] def format_current_cmds(self, obj, current_cmdset): current_commands = sorted([cmd.key for cmd in current_cmdset if cmd.access(obj, "cmd")]) @@ -2686,10 +2721,13 @@ return f"{self.header_color}{key}|n={value}{typ}"
[docs] def format_attributes(self, obj): - return "\n " + "\n ".join( + output = "\n " + "\n ".join( sorted(self.format_single_attribute(attr) for attr in obj.db_attributes.all()) - )
+ ) + if output.strip(): + # we don't want just an empty line + return output
[docs] def format_nattributes(self, obj): try: @@ -2720,6 +2758,51 @@ if not obj.account and not obj.destination) return things if things else None
+
[docs] def format_script_desc(self, obj): + if hasattr(obj, "db_desc") and obj.db_desc: + return crop(obj.db_desc, 20)
+ +
[docs] def format_script_is_persistent(self, obj): + if hasattr(obj, "db_persistent"): + return "T" if obj.db_persistent else "F"
+ +
[docs] def format_script_timer_data(self, obj): + if hasattr(obj, "db_interval") and obj.db_interval > 0: + start_delay = "T" if obj.db_start_delay else "F" + next_repeat = obj.time_until_next_repeat() + active = "|grunning|n" if obj.db_is_active and next_repeat else "|rinactive|n" + interval = obj.db_interval + next_repeat = "N/A" if next_repeat is None else f"{next_repeat}s" + repeats = "" + if obj.db_repeats: + remaining_repeats = obj.remaining_repeats() + remaining_repeats = 0 if remaining_repeats is None else remaining_repeats + repeats = f" - {remaining_repeats}/{obj.db_repeats} remain" + return (f"{active} - interval: {interval}s " + f"(next: {next_repeat}{repeats}, start_delay: {start_delay})")
+ +
[docs] def format_channel_sub_totals(self, obj): + if hasattr(obj, "db_account_subscriptions"): + account_subs = obj.db_account_subscriptions.all() + object_subs = obj.db_object_subscriptions.all() + online = len(obj.subscriptions.online()) + ntotal = account_subs.count() + object_subs.count() + return f"{ntotal} ({online} online)"
+ +
[docs] def format_channel_account_subs(self, obj): + if hasattr(obj, "db_account_subscriptions"): + account_subs = obj.db_account_subscriptions.all() + if account_subs: + return "\n " + "\n ".join( + format_grid([sub.key for sub in account_subs], sep=' ', width=_DEFAULT_WIDTH))
+ +
[docs] def format_channel_object_subs(self, obj): + if hasattr(obj, "db_object_subscriptions"): + object_subs = obj.db_object_subscriptions.all() + if object_subs: + return "\n " + "\n ".join( + format_grid([sub.key for sub in object_subs], sep=' ', width=_DEFAULT_WIDTH))
+
[docs] def get_formatted_obj_data(self, obj, current_cmdset): """ Calls all other `format_*` methods. @@ -2747,6 +2830,10 @@ objdata["Merged Cmdset(s)"] = self.format_merged_cmdsets(obj, current_cmdset) objdata[f"Commands vailable to {obj.key} (result of Merged Cmdset(s))"] = ( self.format_current_cmds(obj, current_cmdset)) + if self.object_type == "script": + objdata["Description"] = self.format_script_desc(obj) + objdata["Persistent"] = self.format_script_is_persistent(obj) + objdata["Script Repeat"] = self.format_script_timer_data(obj) objdata["Scripts"] = self.format_scripts(obj) objdata["Tags"] = self.format_tags(obj) objdata["Persistent Attributes"] = self.format_attributes(obj) @@ -2754,6 +2841,11 @@ objdata["Exits"] = self.format_exits(obj) objdata["Characters"] = self.format_chars(obj) objdata["Content"] = self.format_things(obj) + if self.object_type == "channel": + objdata["Subscription Totals"] = self.format_channel_sub_totals(obj) + objdata["Account Subscriptions"] = self.format_channel_account_subs(obj) + objdata["Object Subscriptions"] = self.format_channel_object_subs(obj) + return objdata
[docs] def format_output(self, obj, current_cmdset): @@ -2778,6 +2870,46 @@ return f"{sep}\n{main_str}\n{sep}"
+ def _search_by_object_type(self, obj_name, objtype): + """ + Route to different search functions depending on the object type being + examined. This also handles error reporting for multimatches/no matches. + + Args: + obj_name (str): The search query. + objtype (str): One of 'object', 'account', 'script' or 'channel'. + Returns: + any: `None` if no match or multimatch, otherwise a single result. + + """ + obj = None + + if objtype == "object": + obj = self.caller.search(obj_name) + elif objtype == "account": + try: + obj = self.caller.search_account(obj_name.lstrip("*")) + except AttributeError: + # this means we are calling examine from an account object + obj = self.caller.search( + obj_name.lstrip("*"), search_object="object" in self.switches + ) + else: + obj = getattr(search, f"search_{objtype}")(obj_name) + if not obj: + self.caller.msg(f"No {objtype} found with key {obj_name}.") + obj = None + elif len(obj) > 1: + err = "Multiple {objtype} found with key {obj_name}:\n{matches}" + self.caller.msg(err.format( + obj_name=obj_name, + matches=", ".join(f"{ob.key}(#{ob.id})" for ob in obj) + )) + obj = None + else: + obj = obj[0] + return obj +
[docs] def parse(self): super().parse() @@ -2792,42 +2924,32 @@ raise InterruptCommand else: for objdef in self.lhs_objattr: + # note that we check the objtype for every repeat; this will always + # be the same result, but it makes for a cleaner code and multi-examine + # is not so common anyway. + obj = None obj_name = objdef["name"] # name obj_attrs = objdef["attrs"] # /attrs - self.account_mode = ( - utils.inherits_from(self.caller, "evennia.accounts.accounts.DefaultAccount") - or "account" in self.switches - or obj_name.startswith("*") - ) - if self.account_mode: - try: - obj = self.caller.search_account(obj_name.lstrip("*")) - except AttributeError: - # this means we are calling examine from an account object - obj = self.caller.search( - obj_name.lstrip("*"), search_object="object" in self.switches - ) - else: - obj = self.caller.search(obj_name) + # identify object type, in prio account - script - channel + object_type = "object" + if (utils.inherits_from(self.caller, "evennia.accounts.accounts.DefaultAccount") + or "account" in self.switches or obj_name.startswith("*")): + object_type = "account" + elif "script" in self.switches: + object_type = "script" + elif "channel" in self.switches: + object_type = "channel" + + self.object_type = object_type + obj = self._search_by_object_type(obj_name, object_type) if obj: self.examine_objs.append((obj, obj_attrs))
[docs] def func(self): """Process command""" - def get_cmdset_callback(current_cmdset): - """ - We make use of the cmdhandler.get_and_merge_cmdsets below. This - is an asynchronous function, returning a Twisted deferred. - So in order to properly use this we need use this callback; - it is called with the result of get_and_merge_cmdsets, whenever - that function finishes. Taking the resulting cmdset, we continue - to format and output the result. - """ - self.msg(self.format_output(obj, current_cmdset).strip()) - for obj, obj_attrs in self.examine_objs: # these are parsed out in .parse already @@ -2855,31 +2977,42 @@ # examine the obj itself - # get the cmdset status - session = None - if obj.sessions.count(): - mergemode = "session" - session = obj.sessions.get()[0] - elif self.account_mode: - mergemode = "account" - else: - mergemode = "object" + if self.object_type in ("object", "account"): + # for objects and accounts we need to set up an asynchronous + # fetch of the cmdset and not proceed with the examine display + # until the fetch is complete + session = None + if obj.sessions.count(): + mergemode = "session" + session = obj.sessions.get()[0] + elif self.object_type == "account": + mergemode = "account" + else: + mergemode = "object" - account = None - objct = None - if self.account_mode: - account = obj - else: - account = obj.account - objct = obj + account = None + objct = None + if self.object_type == "account": + account = obj + else: + account = obj.account + objct = obj - # this is usually handled when a command runs, but when we examine - # we may have leftover inherited cmdsets directly after a move etc. - obj.cmdset.update() - # using callback to print results whenever function returns. - get_and_merge_cmdsets( - obj, session, account, objct, mergemode, self.raw_string - ).addCallback(get_cmdset_callback)
+ # this is usually handled when a command runs, but when we examine + # we may have leftover inherited cmdsets directly after a move etc. + obj.cmdset.update() + # using callback to print results whenever function returns. + + def _get_cmdset_callback(current_cmdset): + self.msg(self.format_output(obj, current_cmdset).strip()) + + get_and_merge_cmdsets( + obj, session, account, objct, mergemode, self.raw_string + ).addCallback(_get_cmdset_callback) + + else: + # for objects without cmdsets we can proceed to examine immediately + self.msg(self.format_output(obj, None).strip())
[docs]class CmdFind(COMMAND_DEFAULT_CLASS): @@ -3172,6 +3305,7 @@ script/stop myobj = scriptname - stop script on object script/pause foo.Bar.Script - pause global script script/delete myobj - delete ALL scripts on object + script/delete #dbref[-#dbref] - delete script or range by dbref When given with an `<obj>` as left-hand-side, this creates and assigns a new script to that object. Without an `<obj>`, this @@ -3213,6 +3347,13 @@ scripts = ScriptDB.objects.filter(db_typeclass_path__iendswith=args) if scripts: return scripts + if "-" in args: + # may be a dbref-range + val1, val2 = (dbref(part.strip()) for part in args.split('-', 1)) + if val1 and val2: + scripts = ScriptDB.objects.filter(id__in=(range(val1, val2 + 1))) + if scripts: + return scripts
[docs] def func(self): """implement method""" diff --git a/docs/0.9.5/_modules/evennia/commands/default/comms.html b/docs/0.9.5/_modules/evennia/commands/default/comms.html index 113e693ac7..9581136b9a 100644 --- a/docs/0.9.5/_modules/evennia/commands/default/comms.html +++ b/docs/0.9.5/_modules/evennia/commands/default/comms.html @@ -780,6 +780,7 @@ """ comtable = self.styled_table( + "id", "channel", "my aliases", "locks", @@ -790,17 +791,24 @@ for chan in subscribed: locks = "-" + chanid = "-" if chan.access(self.caller, "control"): locks = chan.locks + chanid = chan.id my_aliases = ", ".join(self.get_channel_aliases(chan)) comtable.add_row( - *("{}{}".format( - chan.key, - "({})".format(",".join(chan.aliases.all())) if chan.aliases.all() else ""), + *( + chanid, + "{key}{aliases}".format( + key=chan.key, + aliases=";"+ ";".join(chan.aliases.all()) if chan.aliases.all() else "" + ), my_aliases, locks, - chan.db.desc)) + chan.db.desc + ) + ) return comtable
[docs] def display_all_channels(self, subscribed, available): diff --git a/docs/0.9.5/_modules/evennia/commands/default/tests.html b/docs/0.9.5/_modules/evennia/commands/default/tests.html index 66f10e616b..2d2019c818 100644 --- a/docs/0.9.5/_modules/evennia/commands/default/tests.html +++ b/docs/0.9.5/_modules/evennia/commands/default/tests.html @@ -83,7 +83,7 @@ from evennia.commands.command import Command, InterruptCommand from evennia.commands import cmdparser from evennia.commands.cmdset import CmdSet -from evennia.utils import ansi, utils, gametime +from evennia.utils import ansi, utils, gametime, create from evennia.server.sessionhandler import SESSIONS from evennia import search_object from evennia import DefaultObject, DefaultCharacter @@ -1771,6 +1771,23 @@ "Global Script Deleted -" )
+
[docs] def test_script_multi_delete(self): + + script1 = create.create_script() + script2 = create.create_script() + script3 = create.create_script() + + self.call( + building.CmdScripts(), + "/delete #{}-#{}".format(script1.id, script3.id), + "Global Script Deleted - #2 (evennia.scripts.scripts.DefaultScript)|" + "Global Script Deleted - #3 (evennia.scripts.scripts.DefaultScript)|" + "Global Script Deleted - #4 (evennia.scripts.scripts.DefaultScript)", + inputs=["y"] + ) + self.assertFalse(script1.pk) + self.assertFalse(script2.pk) + self.assertFalse(script3.pk)
[docs] def test_teleport(self): oid = self.obj1.id diff --git a/docs/0.9.5/_modules/evennia/comms/managers.html b/docs/0.9.5/_modules/evennia/comms/managers.html index fbed94aa09..029240d36e 100644 --- a/docs/0.9.5/_modules/evennia/comms/managers.html +++ b/docs/0.9.5/_modules/evennia/comms/managers.html @@ -48,10 +48,12 @@ """ +from django.conf import settings from django.db.models import Q from evennia.typeclasses.managers import TypedObjectManager, TypeclassManager +from evennia.server import signals from evennia.utils import logger -from evennia.utils.utils import dbref +from evennia.utils.utils import dbref, make_iter, class_from_module _GA = object.__getattribute__ _AccountDB = None @@ -278,7 +280,7 @@ always gives only one match. Returns: - Queryset: Message matches. + Queryset: Iterable with 0, 1 or more matches. """ # unique msg id @@ -328,8 +330,57 @@ return self.filter(sender_restrict & receiver_restrict & fulltext_restrict)
# back-compatibility alias - message_search = search_message
+ message_search = search_message +
[docs] def create_message(self, senderobj, message, receivers=None, locks=None, tags=None, + header=None, **kwargs): + """ + Create a new communication Msg. Msgs represent a unit of + database-persistent communication between entites. + + Args: + senderobj (Object, Account, Script, str or list): The entity (or + entities) sending the Msg. If a `str`, this is the id-string + for an external sender type. + message (str): Text with the message. Eventual headers, titles + etc should all be included in this text string. Formatting + will be retained. + receivers (Object, Account, Script, str or list): An Account/Object to send + to, or a list of them. If a string, it's an identifier for an external + receiver. + locks (str): Lock definition string. + tags (list): A list of tags or tuples `(tag, category)`. + header (str): Mime-type or other optional information for the message + + Notes: + The Comm system is created to be very open-ended, so it's fully + possible to let a message both go several receivers at the same time, + it's up to the command definitions to limit this as desired. + + """ + if 'channels' in kwargs: + raise DeprecationWarning( + "create_message() does not accept 'channel' kwarg anymore " + "- channels no longer accept Msg objects." + ) + + if not message: + # we don't allow empty messages. + return None + new_message = self.model(db_message=message) + new_message.save() + for sender in make_iter(senderobj): + new_message.senders = sender + new_message.header = header + for receiver in make_iter(receivers): + new_message.receivers = receiver + if locks: + new_message.locks.add(locks) + if tags: + new_message.tags.batch_add(*tags) + + new_message.save() + return new_message
# # Channel manager @@ -412,13 +463,16 @@ exact (bool, optional): Require an exact (but not case sensitive) match. + Returns: + Queryset: Iterable with 0, 1 or more matches. + """ dbref = self.dbref(ostring) if dbref: - try: - return self.get(id=dbref) - except self.model.DoesNotExist: - pass + dbref_match = self.search_dbref(dbref) + if dbref_match: + return dbref_match + if exact: channels = self.filter( Q(db_key__iexact=ostring) @@ -431,6 +485,56 @@ ).distinct() return channels +
[docs] def create_channel( + self, key, aliases=None, desc=None, locks=None, keep_log=True, typeclass=None, tags=None + ): + """ + Create A communication Channel. A Channel serves as a central hub + for distributing Msgs to groups of people without specifying the + receivers explicitly. Instead accounts may 'connect' to the channel + and follow the flow of messages. By default the channel allows + access to all old messages, but this can be turned off with the + keep_log switch. + + Args: + key (str): This must be unique. + + Keyword Args: + aliases (list of str): List of alternative (likely shorter) keynames. + desc (str): A description of the channel, for use in listings. + locks (str): Lockstring. + keep_log (bool): Log channel throughput. + typeclass (str or class): The typeclass of the Channel (not + often used). + tags (list): A list of tags or tuples `(tag, category)`. + + Returns: + channel (Channel): A newly created channel. + + """ + typeclass = typeclass if typeclass else settings.BASE_CHANNEL_TYPECLASS + + if isinstance(typeclass, str): + # a path is given. Load the actual typeclass + typeclass = class_from_module(typeclass, settings.TYPECLASS_PATHS) + + # create new instance + new_channel = typeclass(db_key=key) + + # store call signature for the signal + new_channel._createdict = dict( + key=key, aliases=aliases, desc=desc, locks=locks, keep_log=keep_log, tags=tags + ) + + # this will trigger the save signal which in turn calls the + # at_first_save hook on the typeclass, where the _createdict can be + # used. + new_channel.save() + + signals.SIGNAL_CHANNEL_POST_CREATE.send(sender=new_channel) + + return new_channel
+ # back-compatibility alias channel_search = search_channel diff --git a/docs/0.9.5/_modules/evennia/comms/models.html b/docs/0.9.5/_modules/evennia/comms/models.html index 950861a4c2..5957c40c91 100644 --- a/docs/0.9.5/_modules/evennia/comms/models.html +++ b/docs/0.9.5/_modules/evennia/comms/models.html @@ -456,7 +456,7 @@ # ------------------------------------------------------------ -
[docs]class TempMsg(object): +
[docs]class TempMsg: """ This is a non-persistent object for sending temporary messages that will not be stored. It mimics the "real" Msg object, but doesn't require sender to be given. diff --git a/docs/0.9.5/_modules/evennia/help/manager.html b/docs/0.9.5/_modules/evennia/help/manager.html index 1ee36690c2..e448f62e81 100644 --- a/docs/0.9.5/_modules/evennia/help/manager.html +++ b/docs/0.9.5/_modules/evennia/help/manager.html @@ -44,8 +44,11 @@ """ Custom manager for HelpEntry objects. """ +from django.db import IntegrityError from evennia.utils import logger, utils from evennia.typeclasses.managers import TypedObjectManager +from evennia.utils.utils import make_iter +from evennia.server import signals __all__ = ("HelpEntryManager",) @@ -186,12 +189,58 @@ ostring (str): The help topic to look for. category (str): Limit the search to a particular help topic + Returns: + Queryset: An iterable with 0, 1 or more matches. + """ ostring = ostring.strip().lower() if help_category: return self.filter(db_key__iexact=ostring, db_help_category__iexact=help_category) else: - return self.filter(db_key__iexact=ostring)
+ return self.filter(db_key__iexact=ostring) + +
[docs] def create_help(self, key, entrytext, category="General", locks=None, aliases=None, tags=None): + """ + Create a static help entry in the help database. Note that Command + help entries are dynamic and directly taken from the __doc__ + entries of the command. The database-stored help entries are + intended for more general help on the game, more extensive info, + in-game setting information and so on. + + Args: + key (str): The name of the help entry. + entrytext (str): The body of te help entry + category (str, optional): The help category of the entry. + locks (str, optional): A lockstring to restrict access. + aliases (list of str, optional): List of alternative (likely shorter) keynames. + tags (lst, optional): List of tags or tuples `(tag, category)`. + + Returns: + help (HelpEntry): A newly created help entry. + + """ + try: + new_help = self.model() + new_help.key = key + new_help.entrytext = entrytext + new_help.help_category = category + if locks: + new_help.locks.add(locks) + if aliases: + new_help.aliases.add(make_iter(aliases)) + if tags: + new_help.tags.batch_add(*tags) + new_help.save() + return new_help + except IntegrityError: + string = "Could not add help entry: key '%s' already exists." % key + logger.log_err(string) + return None + except Exception: + logger.log_trace() + return None + + signals.SIGNAL_HELPENTRY_POST_CREATE.send(sender=new_help)
diff --git a/docs/0.9.5/_modules/evennia/objects/manager.html b/docs/0.9.5/_modules/evennia/objects/manager.html index 0749664f49..4f2f8945b3 100644 --- a/docs/0.9.5/_modules/evennia/objects/manager.html +++ b/docs/0.9.5/_modules/evennia/objects/manager.html @@ -50,6 +50,9 @@ from django.db.models.fields import exceptions from evennia.typeclasses.managers import TypedObjectManager, TypeclassManager from evennia.utils.utils import is_iter, make_iter, string_partial_matching +from evennia.utils.utils import class_from_module, dbid_to_obj +from evennia.server import signals + __all__ = ("ObjectManager", "ObjectDBManager") _GA = object.__getattribute__ @@ -72,7 +75,7 @@ Querysets or database objects). dbref (converter) - get_id (alias: dbref_search) + dbref_search get_dbref_range object_totals typeclass_search @@ -202,8 +205,8 @@ typeclasses (list, optional): Python pats to restrict matches with. Returns: - matches (query): Objects fullfilling both the `attribute_name` and - `attribute_value` criterions. + Queryset: Iterable with 0, 1 or more matches fullfilling both the `attribute_name` and + `attribute_value` criterions. Notes: This uses the Attribute's PickledField to transparently search the database by matching @@ -262,6 +265,9 @@ candidates (list, optional): List of objects to limit search to. typeclasses (list, optional): List of typeclass-path strings to restrict matches with + Returns: + Queryset: Iterable with 0, 1 or more matches. + """ if isinstance(property_name, str): if not property_name.startswith("db_"): @@ -274,11 +280,10 @@ ) type_restriction = typeclasses and Q(db_typeclass_path__in=make_iter(typeclasses)) or Q() try: - return list( - self.filter(cand_restriction & type_restriction & Q(**querykwargs)).order_by("id") - ) + return self.filter( + cand_restriction & type_restriction & Q(**querykwargs)).order_by("id") except exceptions.FieldError: - return [] + return self.none() except ValueError: from evennia.utils import logger @@ -286,7 +291,7 @@ "The property '%s' does not support search criteria of the type %s." % (property_name, type(property_value)) ) - return [] + return self.none()
[docs] def get_contents(self, location, excludeobj=None): """ @@ -298,7 +303,8 @@ to exclude from the match. Returns: - contents (query): Matching contents, without excludeobj, if given. + Queryset: Iterable with 0, 1 or more matches. + """ exclude_restriction = ( Q(pk__in=[_GA(obj, "id") for obj in make_iter(excludeobj)]) if excludeobj else Q() @@ -316,17 +322,18 @@ typeclasses (list): Only match objects with typeclasses having thess path strings. Returns: - matches (query): A list of matches of length 0, 1 or more. + Queryset: An iterable with 0, 1 or more matches. + """ if not isinstance(ostring, str): if hasattr(ostring, "key"): ostring = ostring.key else: - return [] + return self.none() if is_iter(candidates) and not len(candidates): # if candidates is an empty iterable there can be no matches # Exit early. - return [] + return self.none() # build query objects candidates_id = [_GA(obj, "id") for obj in make_iter(candidates) if obj] @@ -367,10 +374,12 @@ # fuzzy matching key_strings = search_candidates.values_list("db_key", flat=True).order_by("id") + match_ids = [] index_matches = string_partial_matching(key_strings, ostring, ret_index=True) if index_matches: # a match by key - return [obj for ind, obj in enumerate(search_candidates) if ind in index_matches] + match_ids = [obj.id for ind, obj in enumerate(search_candidates) + if ind in index_matches] else: # match by alias rather than by key search_candidates = search_candidates.filter( @@ -386,8 +395,10 @@ index_matches = string_partial_matching(alias_strings, ostring, ret_index=True) if index_matches: # it's possible to have multiple matches to the same Object, we must weed those out - return list({alias_candidates[ind] for ind in index_matches}) - return []
+ match_ids = [alias_candidates[ind].id for ind in index_matches] + # TODO - not ideal to have to do a second lookup here, but we want to return a queryset + # rather than a list ... maybe the above queries can be improved. + return self.filter(id__in=match_ids) # main search methods and helper functions @@ -462,7 +473,7 @@ ) if not searchdata and searchdata != 0: - return [] + return self.none() if typeclass: # typeclass may also be a list @@ -490,10 +501,11 @@ # Easiest case - dbref matching (always exact) dbref_match = self.dbref_search(dbref) if dbref_match: - if not candidates or dbref_match in candidates: - return [dbref_match] + dmatch = dbref_match[0] + if not candidates or dmatch in candidates: + return dbref_match else: - return [] + return self.none() # Search through all possibilities. match_number = None @@ -518,15 +530,16 @@ # this indicates trying to get a single match with a match-number # targeting some higher-number match (like 2-box when there is only # one box in the room). This leads to a no-match. - matches = [] + matches = self.none() elif len(matches) > 1 and match_number is not None: # multiple matches, but a number was given to separate them if 0 <= match_number < len(matches): - # limit to one match - matches = [matches[match_number]] + # limit to one match (we still want a queryset back) + # TODO: Can we do this some other way and avoid a second lookup? + matches = self.filter(id=matches[match_number].id) else: # a number was given outside of range. This means a no-match. - matches = [] + matches = self.none() # return a list (possibly empty) return matches @@ -636,7 +649,118 @@ db_account field set. """ - self.filter(db_sessid__isnull=False).update(db_sessid=None) + self.filter(db_sessid__isnull=False).update(db_sessid=None) + +
[docs] def create_object( + self, + typeclass=None, + key=None, + location=None, + home=None, + permissions=None, + locks=None, + aliases=None, + tags=None, + destination=None, + report_to=None, + nohome=False, + attributes=None, + nattributes=None, + ): + """ + + Create a new in-game object. + + Keyword Args: + typeclass (class or str): Class or python path to a typeclass. + key (str): Name of the new object. If not set, a name of + `#dbref` will be set. + location (Object or str): Obj or #dbref to use as the location of the new object. + home (Object or str): Obj or #dbref to use as the object's home location. + permissions (list): A list of permission strings or tuples (permstring, category). + locks (str): one or more lockstrings, separated by semicolons. + aliases (list): A list of alternative keys or tuples (aliasstring, category). + tags (list): List of tag keys or tuples (tagkey, category) or (tagkey, category, data). + destination (Object or str): Obj or #dbref to use as an Exit's target. + report_to (Object): The object to return error messages to. + nohome (bool): This allows the creation of objects without a + default home location; only used when creating the default + location itself or during unittests. + attributes (list): Tuples on the form (key, value) or (key, value, category), + (key, value, lockstring) or (key, value, lockstring, default_access). + to set as Attributes on the new object. + nattributes (list): Non-persistent tuples on the form (key, value). Note that + adding this rarely makes sense since this data will not survive a reload. + + Returns: + object (Object): A newly created object of the given typeclass. + + Raises: + ObjectDB.DoesNotExist: If trying to create an Object with + `location` or `home` that can't be found. + + """ + typeclass = typeclass if typeclass else settings.BASE_OBJECT_TYPECLASS + + # convenience converters to avoid common usage mistake + permissions = make_iter(permissions) if permissions is not None else None + locks = make_iter(locks) if locks is not None else None + aliases = make_iter(aliases) if aliases is not None else None + tags = make_iter(tags) if tags is not None else None + attributes = make_iter(attributes) if attributes is not None else None + + if isinstance(typeclass, str): + # a path is given. Load the actual typeclass + typeclass = class_from_module(typeclass, settings.TYPECLASS_PATHS) + + # Setup input for the create command. We use ObjectDB as baseclass here + # to give us maximum freedom (the typeclasses will load + # correctly when each object is recovered). + + location = dbid_to_obj(location, self.model) + destination = dbid_to_obj(destination, self.model) + home = dbid_to_obj(home, self.model) + if not home: + try: + home = dbid_to_obj(settings.DEFAULT_HOME, self.model) if not nohome else None + except self.model_ObjectDB.DoesNotExist: + raise self.model.DoesNotExist( + "settings.DEFAULT_HOME (= '%s') does not exist, or the setting is malformed." + % settings.DEFAULT_HOME + ) + + # create new instance + new_object = typeclass( + db_key=key, + db_location=location, + db_destination=destination, + db_home=home, + db_typeclass_path=typeclass.path, + ) + # store the call signature for the signal + new_object._createdict = dict( + key=key, + location=location, + destination=destination, + home=home, + typeclass=typeclass.path, + permissions=permissions, + locks=locks, + aliases=aliases, + tags=tags, + report_to=report_to, + nohome=nohome, + attributes=attributes, + nattributes=nattributes, + ) + # this will trigger the save signal which in turn calls the + # at_first_save hook on the typeclass, where the _createdict can be + # used. + new_object.save() + + signals.SIGNAL_OBJECT_POST_CREATE.send(sender=new_object) + + return new_object
[docs]class ObjectManager(ObjectDBManager, TypeclassManager): diff --git a/docs/0.9.5/_modules/evennia/prototypes/prototypes.html b/docs/0.9.5/_modules/evennia/prototypes/prototypes.html index 5f060639ad..5bb3c99abc 100644 --- a/docs/0.9.5/_modules/evennia/prototypes/prototypes.html +++ b/docs/0.9.5/_modules/evennia/prototypes/prototypes.html @@ -182,11 +182,11 @@ nattr = len(attr) if nattr == 1: # we assume a None-value - homogenized_attrs.append(attr[0], None, None, "") + homogenized_attrs.append((attr[0], None, None, "")) elif nattr == 2: - homogenized_attrs.append(attr[0], attr[1], None, "") + homogenized_attrs.append((attr[0], attr[1], None, "")) elif nattr == 3: - homogenized_attrs.append(attr[0], attr[1], attr[2], "") + homogenized_attrs.append((attr[0], attr[1], attr[2], "")) else: homogenized_attrs.append(attr[:4]) diff --git a/docs/0.9.5/_modules/evennia/scripts/manager.html b/docs/0.9.5/_modules/evennia/scripts/manager.html index 31f6c35010..685e5c512b 100644 --- a/docs/0.9.5/_modules/evennia/scripts/manager.html +++ b/docs/0.9.5/_modules/evennia/scripts/manager.html @@ -45,13 +45,19 @@ The custom manager for Scripts. """ +from django.conf import settings from django.db.models import Q from evennia.typeclasses.managers import TypedObjectManager, TypeclassManager -from evennia.utils.utils import make_iter +from evennia.utils.utils import make_iter, class_from_module, dbid_to_obj +from evennia.server import signals __all__ = ("ScriptManager", "ScriptDBManager") _GA = object.__getattribute__ +_ObjectDB = None +_AccountDB = None + + VALIDATE_ITERATION = 0 @@ -65,7 +71,7 @@ Querysets or database objects). dbref (converter) - get_id (or dbref_search) + dbref_search get_dbref_range object_totals typeclass_search @@ -124,7 +130,6 @@ """ if key: - script = [] dbref = self.dbref(key) if dbref: return self.filter(id=dbref) @@ -176,6 +181,9 @@ on a timer. typeclass (class or str): Typeclass or path to typeclass. + Returns: + Queryset: An iterable with 0, 1 or more results. + """ ostring = ostring.strip() @@ -184,10 +192,10 @@ if dbref: # this is a dbref, try to find the script directly dbref_match = self.dbref_search(dbref) - if dbref_match and not ( - (obj and obj != dbref_match.obj) or (only_timed and dbref_match.interval) - ): - return [dbref_match] + if dbref_match: + dmatch = dbref_match[0] + if not (obj and obj != dmatch.obj) or (only_timed and dmatch.interval): + return dbref_match if typeclass: if callable(typeclass): @@ -232,6 +240,129 @@ new_script = create.create_script( typeclass, key=new_key, obj=new_obj, locks=new_locks, autostart=True ) + return new_script
+ +
[docs] def create_script( + self, + typeclass=None, + key=None, + obj=None, + account=None, + locks=None, + interval=None, + start_delay=None, + repeats=None, + persistent=None, + autostart=True, + report_to=None, + desc=None, + tags=None, + attributes=None, + ): + """ + Create a new script. All scripts are a combination of a database + object that communicates with the database, and an typeclass that + 'decorates' the database object into being different types of + scripts. It's behaviour is similar to the game objects except + scripts has a time component and are more limited in scope. + + Keyword Args: + typeclass (class or str): Class or python path to a typeclass. + key (str): Name of the new object. If not set, a name of + #dbref will be set. + obj (Object): The entity on which this Script sits. If this + is `None`, we are creating a "global" script. + account (Account): The account on which this Script sits. It is + exclusiv to `obj`. + locks (str): one or more lockstrings, separated by semicolons. + interval (int): The triggering interval for this Script, in + seconds. If unset, the Script will not have a timing + component. + start_delay (bool): If `True`, will wait `interval` seconds + before triggering the first time. + repeats (int): The number of times to trigger before stopping. + If unset, will repeat indefinitely. + persistent (bool): If this Script survives a server shutdown + or not (all Scripts will survive a reload). + autostart (bool): If this Script will start immediately when + created or if the `start` method must be called explicitly. + report_to (Object): The object to return error messages to. + desc (str): Optional description of script + tags (list): List of tags or tuples (tag, category). + attributes (list): List if tuples (key, value) or (key, value, category) + (key, value, lockstring) or (key, value, lockstring, default_access). + + Returns: + script (obj): An instance of the script created + + See evennia.scripts.manager for methods to manipulate existing + scripts in the database. + + """ + global _ObjectDB, _AccountDB + if not _ObjectDB: + from evennia.objects.models import ObjectDB as _ObjectDB + from evennia.accounts.models import AccountDB as _AccountDB + + typeclass = typeclass if typeclass else settings.BASE_SCRIPT_TYPECLASS + + if isinstance(typeclass, str): + # a path is given. Load the actual typeclass + typeclass = class_from_module(typeclass, settings.TYPECLASS_PATHS) + + # validate input + kwarg = {} + if key: + kwarg["db_key"] = key + if account: + kwarg["db_account"] = dbid_to_obj(account, _AccountDB) + if obj: + kwarg["db_obj"] = dbid_to_obj(obj, _ObjectDB) + if interval: + kwarg["db_interval"] = max(0, interval) + if start_delay: + kwarg["db_start_delay"] = start_delay + if repeats: + kwarg["db_repeats"] = max(0, repeats) + if persistent: + kwarg["db_persistent"] = persistent + if desc: + kwarg["db_desc"] = desc + tags = make_iter(tags) if tags is not None else None + attributes = make_iter(attributes) if attributes is not None else None + + # create new instance + new_script = typeclass(**kwarg) + + # store the call signature for the signal + new_script._createdict = dict( + key=key, + obj=obj, + account=account, + locks=locks, + interval=interval, + start_delay=start_delay, + repeats=repeats, + persistent=persistent, + autostart=autostart, + report_to=report_to, + desc=desc, + tags=tags, + attributes=attributes, + ) + # this will trigger the save signal which in turn calls the + # at_first_save hook on the typeclass, where the _createdict + # can be used. + new_script.save() + + if not new_script.id: + # this happens in the case of having a repeating script with `repeats=1` and + # `start_delay=False` - the script will run once and immediately stop before + # save is over. + return None + + signals.SIGNAL_SCRIPT_POST_CREATE.send(sender=new_script) + return new_script
diff --git a/docs/0.9.5/_modules/evennia/scripts/monitorhandler.html b/docs/0.9.5/_modules/evennia/scripts/monitorhandler.html index 4c3c8e3dd6..1242944848 100644 --- a/docs/0.9.5/_modules/evennia/scripts/monitorhandler.html +++ b/docs/0.9.5/_modules/evennia/scripts/monitorhandler.html @@ -136,11 +136,25 @@ # make sure to clean data from database ServerConfig.objects.conf(key=self.savekey, delete=True) + def _attr_category_fieldname(self, fieldname, category): + """ + Modify the saved fieldname to make sure to differentiate between Attributes + with different categories. + + """ + return f"{fieldname}[{category}]" if category else fieldname +
[docs] def at_update(self, obj, fieldname): """ Called by the field/attribute as it saves. """ + # if this an Attribute with a category we should differentiate + fieldname = self._attr_category_fieldname( + fieldname, obj.db_category + if fieldname == "db_value" and hasattr(obj, "db_category") else None + ) + to_delete = [] if obj in self.monitors and fieldname in self.monitors[obj]: for idstring, (callback, persistent, kwargs) in self.monitors[obj][fieldname].items(): @@ -153,7 +167,8 @@ for (obj, fieldname, idstring) in to_delete: del self.monitors[obj][fieldname][idstring]
-
[docs] def add(self, obj, fieldname, callback, idstring="", persistent=False, **kwargs): +
[docs] def add(self, obj, fieldname, callback, idstring="", persistent=False, + category=None, **kwargs): """ Add monitoring to a given field or Attribute. A field must be specified with the full db_* name or it will be assumed @@ -169,6 +184,9 @@ of the same field and object. persistent (bool, optional): If False, the monitor will survive a server reload but not a cold restart. This is default. + category (str, optional): This is only used if `fieldname` refers to + an Attribute (i.e. it does not start with `db_`). You must specify this + if you want to target an Attribute with a category. Keyword Args: session (Session): If this keyword is given, the monitorhandler will @@ -183,7 +201,7 @@ obj = obj.attributes.get(fieldname, return_obj=True) if not obj: return - fieldname = "db_value" + fieldname = self._attr_category_fieldname("db_value", category) # we try to serialize this data to test it's valid. Otherwise we won't accept it. try: @@ -203,7 +221,7 @@ else: self.monitors[obj][fieldname][idstring] = (callback, persistent, kwargs)
-
[docs] def remove(self, obj, fieldname, idstring=""): +
[docs] def remove(self, obj, fieldname, idstring="", category=None): """ Remove a monitor. """ @@ -211,7 +229,7 @@ obj = obj.attributes.get(fieldname, return_obj=True) if not obj: return - fieldname = "db_value" + fieldname = self._attr_category_fieldname("db_value", category) idstring_dict = self.monitors[obj][fieldname] if idstring in idstring_dict: diff --git a/docs/0.9.5/_modules/evennia/typeclasses/managers.html b/docs/0.9.5/_modules/evennia/typeclasses/managers.html index 01ab89261f..8d1df0b33e 100644 --- a/docs/0.9.5/_modules/evennia/typeclasses/managers.html +++ b/docs/0.9.5/_modules/evennia/typeclasses/managers.html @@ -507,10 +507,13 @@ dbref (str or int): The id to search for. Returns: - object (TypedObject): The matched object. + Queryset: Queryset with 0 or 1 match. """ - return self.get_id(dbref)
+ dbref = self.dbref(dbref, reqhash=False) + if dbref: + return self.filter(id=dbref) + return self.none()
[docs] def get_dbref_range(self, min_dbref=None, max_dbref=None): """ diff --git a/docs/0.9.5/_modules/evennia/utils/create.html b/docs/0.9.5/_modules/evennia/utils/create.html deleted file mode 100644 index e00af6dc20..0000000000 --- a/docs/0.9.5/_modules/evennia/utils/create.html +++ /dev/null @@ -1,691 +0,0 @@ - - - - - - - - evennia.utils.create — Evennia 0.9.5 documentation - - - - - - - - - - - - - - - -
-
-
-
- -

Source code for evennia.utils.create

-"""
-This module gathers all the essential database-creation functions for the game
-engine's various object types.
-
-Only objects created 'stand-alone' are in here. E.g. object Attributes are
-always created through their respective objects handlers.
-
-Each `creation_*` function also has an alias named for the entity being created,
-such as create_object() and object(). This is for consistency with the
-utils.search module and allows you to do the shorter `create.object()`.
-
-The respective object managers hold more methods for manipulating and searching
-objects already existing in the database.
-
-"""
-from django.conf import settings
-from django.db import IntegrityError
-from django.utils import timezone
-from evennia.utils import logger
-from evennia.server import signals
-from evennia.utils.utils import make_iter, class_from_module, dbid_to_obj
-
-# delayed imports
-_User = None
-_ObjectDB = None
-_Object = None
-_Script = None
-_ScriptDB = None
-_HelpEntry = None
-_Msg = None
-_Account = None
-_AccountDB = None
-_to_object = None
-_ChannelDB = None
-
-
-# limit symbol import from API
-__all__ = (
-    "create_object",
-    "create_script",
-    "create_help_entry",
-    "create_message",
-    "create_channel",
-    "create_account",
-)
-
-_GA = object.__getattribute__
-
-#
-# Game Object creation
-
-
-
[docs]def create_object( - typeclass=None, - key=None, - location=None, - home=None, - permissions=None, - locks=None, - aliases=None, - tags=None, - destination=None, - report_to=None, - nohome=False, - attributes=None, - nattributes=None, -): - """ - - Create a new in-game object. - - Keyword Args: - typeclass (class or str): Class or python path to a typeclass. - key (str): Name of the new object. If not set, a name of - `#dbref` will be set. - location (Object or str): Obj or #dbref to use as the location of the new object. - home (Object or str): Obj or #dbref to use as the object's home location. - permissions (list): A list of permission strings or tuples (permstring, category). - locks (str): one or more lockstrings, separated by semicolons. - aliases (list): A list of alternative keys or tuples (aliasstring, category). - tags (list): List of tag keys or tuples (tagkey, category) or (tagkey, category, data). - destination (Object or str): Obj or #dbref to use as an Exit's target. - report_to (Object): The object to return error messages to. - nohome (bool): This allows the creation of objects without a - default home location; only used when creating the default - location itself or during unittests. - attributes (list): Tuples on the form (key, value) or (key, value, category), - (key, value, lockstring) or (key, value, lockstring, default_access). - to set as Attributes on the new object. - nattributes (list): Non-persistent tuples on the form (key, value). Note that - adding this rarely makes sense since this data will not survive a reload. - - Returns: - object (Object): A newly created object of the given typeclass. - - Raises: - ObjectDB.DoesNotExist: If trying to create an Object with - `location` or `home` that can't be found. - - """ - global _ObjectDB - if not _ObjectDB: - from evennia.objects.models import ObjectDB as _ObjectDB - - typeclass = typeclass if typeclass else settings.BASE_OBJECT_TYPECLASS - - # convenience converters to avoid common usage mistake - permissions = make_iter(permissions) if permissions is not None else None - locks = make_iter(locks) if locks is not None else None - aliases = make_iter(aliases) if aliases is not None else None - tags = make_iter(tags) if tags is not None else None - attributes = make_iter(attributes) if attributes is not None else None - - if isinstance(typeclass, str): - # a path is given. Load the actual typeclass - typeclass = class_from_module(typeclass, settings.TYPECLASS_PATHS) - - # Setup input for the create command. We use ObjectDB as baseclass here - # to give us maximum freedom (the typeclasses will load - # correctly when each object is recovered). - - location = dbid_to_obj(location, _ObjectDB) - destination = dbid_to_obj(destination, _ObjectDB) - home = dbid_to_obj(home, _ObjectDB) - if not home: - try: - home = dbid_to_obj(settings.DEFAULT_HOME, _ObjectDB) if not nohome else None - except _ObjectDB.DoesNotExist: - raise _ObjectDB.DoesNotExist( - "settings.DEFAULT_HOME (= '%s') does not exist, or the setting is malformed." - % settings.DEFAULT_HOME - ) - - # create new instance - new_object = typeclass( - db_key=key, - db_location=location, - db_destination=destination, - db_home=home, - db_typeclass_path=typeclass.path, - ) - # store the call signature for the signal - new_object._createdict = dict( - key=key, - location=location, - destination=destination, - home=home, - typeclass=typeclass.path, - permissions=permissions, - locks=locks, - aliases=aliases, - tags=tags, - report_to=report_to, - nohome=nohome, - attributes=attributes, - nattributes=nattributes, - ) - # this will trigger the save signal which in turn calls the - # at_first_save hook on the typeclass, where the _createdict can be - # used. - new_object.save() - - signals.SIGNAL_OBJECT_POST_CREATE.send(sender=new_object) - - return new_object
- - -# alias for create_object -object = create_object - - -# -# Script creation - - -
[docs]def create_script( - typeclass=None, - key=None, - obj=None, - account=None, - locks=None, - interval=None, - start_delay=None, - repeats=None, - persistent=None, - autostart=True, - report_to=None, - desc=None, - tags=None, - attributes=None, -): - """ - Create a new script. All scripts are a combination of a database - object that communicates with the database, and an typeclass that - 'decorates' the database object into being different types of - scripts. It's behaviour is similar to the game objects except - scripts has a time component and are more limited in scope. - - Keyword Args: - typeclass (class or str): Class or python path to a typeclass. - key (str): Name of the new object. If not set, a name of - #dbref will be set. - obj (Object): The entity on which this Script sits. If this - is `None`, we are creating a "global" script. - account (Account): The account on which this Script sits. It is - exclusiv to `obj`. - locks (str): one or more lockstrings, separated by semicolons. - interval (int): The triggering interval for this Script, in - seconds. If unset, the Script will not have a timing - component. - start_delay (bool): If `True`, will wait `interval` seconds - before triggering the first time. - repeats (int): The number of times to trigger before stopping. - If unset, will repeat indefinitely. - persistent (bool): If this Script survives a server shutdown - or not (all Scripts will survive a reload). - autostart (bool): If this Script will start immediately when - created or if the `start` method must be called explicitly. - report_to (Object): The object to return error messages to. - desc (str): Optional description of script - tags (list): List of tags or tuples (tag, category). - attributes (list): List if tuples (key, value) or (key, value, category) - (key, value, lockstring) or (key, value, lockstring, default_access). - - Returns: - script (obj): An instance of the script created - - See evennia.scripts.manager for methods to manipulate existing - scripts in the database. - - """ - global _ScriptDB - if not _ScriptDB: - from evennia.scripts.models import ScriptDB as _ScriptDB - - typeclass = typeclass if typeclass else settings.BASE_SCRIPT_TYPECLASS - - if isinstance(typeclass, str): - # a path is given. Load the actual typeclass - typeclass = class_from_module(typeclass, settings.TYPECLASS_PATHS) - - # validate input - kwarg = {} - if key: - kwarg["db_key"] = key - if account: - kwarg["db_account"] = dbid_to_obj(account, _AccountDB) - if obj: - kwarg["db_obj"] = dbid_to_obj(obj, _ObjectDB) - if interval: - kwarg["db_interval"] = max(0, interval) - if start_delay: - kwarg["db_start_delay"] = start_delay - if repeats: - kwarg["db_repeats"] = max(0, repeats) - if persistent: - kwarg["db_persistent"] = persistent - if desc: - kwarg["db_desc"] = desc - tags = make_iter(tags) if tags is not None else None - attributes = make_iter(attributes) if attributes is not None else None - - # create new instance - new_script = typeclass(**kwarg) - - # store the call signature for the signal - new_script._createdict = dict( - key=key, - obj=obj, - account=account, - locks=locks, - interval=interval, - start_delay=start_delay, - repeats=repeats, - persistent=persistent, - autostart=autostart, - report_to=report_to, - desc=desc, - tags=tags, - attributes=attributes, - ) - # this will trigger the save signal which in turn calls the - # at_first_save hook on the typeclass, where the _createdict - # can be used. - new_script.save() - - if not new_script.id: - # this happens in the case of having a repeating script with `repeats=1` and - # `start_delay=False` - the script will run once and immediately stop before save is over. - return None - - signals.SIGNAL_SCRIPT_POST_CREATE.send(sender=new_script) - - return new_script
- - -# alias -script = create_script - - -# -# Help entry creation -# - - -
[docs]def create_help_entry(key, entrytext, category="General", locks=None, aliases=None, tags=None): - """ - Create a static help entry in the help database. Note that Command - help entries are dynamic and directly taken from the __doc__ - entries of the command. The database-stored help entries are - intended for more general help on the game, more extensive info, - in-game setting information and so on. - - Args: - key (str): The name of the help entry. - entrytext (str): The body of te help entry - category (str, optional): The help category of the entry. - locks (str, optional): A lockstring to restrict access. - aliases (list of str, optional): List of alternative (likely shorter) keynames. - tags (lst, optional): List of tags or tuples `(tag, category)`. - - Returns: - help (HelpEntry): A newly created help entry. - - """ - global _HelpEntry - if not _HelpEntry: - from evennia.help.models import HelpEntry as _HelpEntry - - try: - new_help = _HelpEntry() - new_help.key = key - new_help.entrytext = entrytext - new_help.help_category = category - if locks: - new_help.locks.add(locks) - if aliases: - new_help.aliases.add(make_iter(aliases)) - if tags: - new_help.tags.batch_add(*tags) - new_help.save() - return new_help - except IntegrityError: - string = "Could not add help entry: key '%s' already exists." % key - logger.log_err(string) - return None - except Exception: - logger.log_trace() - return None - - signals.SIGNAL_HELPENTRY_POST_CREATE.send(sender=new_help)
- - -# alias -help_entry = create_help_entry - - -# -# Comm system methods - - -
[docs]def create_message( - senderobj, message, receivers=None, locks=None, tags=None, - header=None, **kwargs): - """ - Create a new communication Msg. Msgs represent a unit of - database-persistent communication between entites. - - Args: - senderobj (Object, Account, Script, str or list): The entity (or - entities) sending the Msg. If a `str`, this is the id-string - for an external sender type. - message (str): Text with the message. Eventual headers, titles - etc should all be included in this text string. Formatting - will be retained. - receivers (Object, Account, Script, str or list): An Account/Object to send - to, or a list of them. If a string, it's an identifier for an external - receiver. - locks (str): Lock definition string. - tags (list): A list of tags or tuples `(tag, category)`. - header (str): Mime-type or other optional information for the message - - Notes: - The Comm system is created to be very open-ended, so it's fully - possible to let a message both go several receivers at the same time, - it's up to the command definitions to limit this as desired. - - """ - if 'channels' in kwargs: - raise DeprecationWarning( - "create_message() does not accept 'channel' kwarg anymore " - "- channels no longer accept Msg objects." - ) - - global _Msg - if not _Msg: - from evennia.comms.models import Msg as _Msg - if not message: - # we don't allow empty messages. - return None - new_message = _Msg(db_message=message) - new_message.save() - for sender in make_iter(senderobj): - new_message.senders = sender - new_message.header = header - for receiver in make_iter(receivers): - new_message.receivers = receiver - if locks: - new_message.locks.add(locks) - if tags: - new_message.tags.batch_add(*tags) - - new_message.save() - return new_message
- - -message = create_message -create_msg = create_message - - -
[docs]def create_channel( - key, aliases=None, desc=None, locks=None, keep_log=True, typeclass=None, tags=None -): - """ - Create A communication Channel. A Channel serves as a central hub - for distributing Msgs to groups of people without specifying the - receivers explicitly. Instead accounts may 'connect' to the channel - and follow the flow of messages. By default the channel allows - access to all old messages, but this can be turned off with the - keep_log switch. - - Args: - key (str): This must be unique. - - Keyword Args: - aliases (list of str): List of alternative (likely shorter) keynames. - desc (str): A description of the channel, for use in listings. - locks (str): Lockstring. - keep_log (bool): Log channel throughput. - typeclass (str or class): The typeclass of the Channel (not - often used). - tags (list): A list of tags or tuples `(tag, category)`. - - Returns: - channel (Channel): A newly created channel. - - """ - typeclass = typeclass if typeclass else settings.BASE_CHANNEL_TYPECLASS - - if isinstance(typeclass, str): - # a path is given. Load the actual typeclass - typeclass = class_from_module(typeclass, settings.TYPECLASS_PATHS) - - # create new instance - new_channel = typeclass(db_key=key) - - # store call signature for the signal - new_channel._createdict = dict( - key=key, aliases=aliases, desc=desc, locks=locks, keep_log=keep_log, tags=tags - ) - - # this will trigger the save signal which in turn calls the - # at_first_save hook on the typeclass, where the _createdict can be - # used. - new_channel.save() - - signals.SIGNAL_CHANNEL_POST_CREATE.send(sender=new_channel) - - return new_channel
- - -channel = create_channel - - -# -# Account creation methods -# - - -
[docs]def create_account( - key, - email, - password, - typeclass=None, - is_superuser=False, - locks=None, - permissions=None, - tags=None, - attributes=None, - report_to=None, -): - """ - This creates a new account. - - Args: - key (str): The account's name. This should be unique. - email (str or None): Email on valid addr@addr.domain form. If - the empty string, will be set to None. - password (str): Password in cleartext. - - Keyword Args: - typeclass (str): The typeclass to use for the account. - is_superuser (bool): Wether or not this account is to be a superuser - locks (str): Lockstring. - permission (list): List of permission strings. - tags (list): List of Tags on form `(key, category[, data])` - attributes (list): List of Attributes on form - `(key, value [, category, [,lockstring [, default_pass]]])` - report_to (Object): An object with a msg() method to report - errors to. If not given, errors will be logged. - - Returns: - Account: The newly created Account. - Raises: - ValueError: If `key` already exists in database. - - - Notes: - Usually only the server admin should need to be superuser, all - other access levels can be handled with more fine-grained - permissions or groups. A superuser bypasses all lock checking - operations and is thus not suitable for play-testing the game. - - """ - global _AccountDB - if not _AccountDB: - from evennia.accounts.models import AccountDB as _AccountDB - - typeclass = typeclass if typeclass else settings.BASE_ACCOUNT_TYPECLASS - locks = make_iter(locks) if locks is not None else None - permissions = make_iter(permissions) if permissions is not None else None - tags = make_iter(tags) if tags is not None else None - attributes = make_iter(attributes) if attributes is not None else None - - if isinstance(typeclass, str): - # a path is given. Load the actual typeclass. - typeclass = class_from_module(typeclass, settings.TYPECLASS_PATHS) - - # setup input for the create command. We use AccountDB as baseclass - # here to give us maximum freedom (the typeclasses will load - # correctly when each object is recovered). - - if not email: - email = None - if _AccountDB.objects.filter(username__iexact=key): - raise ValueError("An Account with the name '%s' already exists." % key) - - # this handles a given dbref-relocate to an account. - report_to = dbid_to_obj(report_to, _AccountDB) - - # create the correct account entity, using the setup from - # base django auth. - now = timezone.now() - email = typeclass.objects.normalize_email(email) - new_account = typeclass( - username=key, - email=email, - is_staff=is_superuser, - is_superuser=is_superuser, - last_login=now, - date_joined=now, - ) - if password is not None: - # the password may be None for 'fake' accounts, like bots - valid, error = new_account.validate_password(password, new_account) - if not valid: - raise error - - new_account.set_password(password) - - new_account._createdict = dict( - locks=locks, permissions=permissions, report_to=report_to, tags=tags, attributes=attributes - ) - # saving will trigger the signal that calls the - # at_first_save hook on the typeclass, where the _createdict - # can be used. - new_account.save() - - # note that we don't send a signal here, that is sent from the Account.create helper method - # instead. - - return new_account
- - -# alias -account = create_account -
- -
-
-
-
- -
-
- - - - \ No newline at end of file diff --git a/docs/0.9.5/_modules/evennia/utils/search.html b/docs/0.9.5/_modules/evennia/utils/search.html index 63e2a89285..4d1b06ed6e 100644 --- a/docs/0.9.5/_modules/evennia/utils/search.html +++ b/docs/0.9.5/_modules/evennia/utils/search.html @@ -153,7 +153,7 @@ # candidates=None, # attribute_name=None): # -search_object = ObjectDB.objects.object_search +search_object = ObjectDB.objects.search_object search_objects = search_object object_search = search_object objects = search_objects @@ -169,7 +169,7 @@ # ostring = a string or database id. # -search_account = AccountDB.objects.account_search +search_account = AccountDB.objects.search_account search_accounts = search_account account_search = search_account accounts = search_accounts @@ -187,7 +187,7 @@ # on a timer. # -search_script = ScriptDB.objects.script_search +search_script = ScriptDB.objects.search_script search_scripts = search_script script_search = search_script scripts = search_scripts @@ -208,7 +208,7 @@ # one of the other arguments to limit the search. # -search_message = Msg.objects.message_search +search_message = Msg.objects.search_message search_messages = search_message message_search = search_message messages = search_messages @@ -224,7 +224,7 @@ # exact - requires an exact ostring match (not case sensitive) # -search_channel = ChannelDB.objects.channel_search +search_channel = ChannelDB.objects.search_channel search_channels = search_channel channel_search = search_channel channels = search_channels diff --git a/docs/0.9.5/_modules/evennia/utils/test_resources.html b/docs/0.9.5/_modules/evennia/utils/test_resources.html index 566772d4fa..0521e51c41 100644 --- a/docs/0.9.5/_modules/evennia/utils/test_resources.html +++ b/docs/0.9.5/_modules/evennia/utils/test_resources.html @@ -174,26 +174,6 @@ room_typeclass = DefaultRoom script_typeclass = DefaultScript -
[docs] def save_backups(self): - self.backups = ( - SESSIONS.data_out, - SESSIONS.disconnect, - settings.DEFAULT_HOME, - settings.PROTOTYPE_MODULES, - )
- -
[docs] def restore_backups(self): - flush_cache() - SESSIONS.data_out = self.backups[0] - SESSIONS.disconnect = self.backups[1] - settings.DEFAULT_HOME = self.backups[2] - settings.PROTOTYPE_MODULES = self.backups[3]
- -
[docs] def mock_sessions(self): - SESSIONS.data_out = Mock() - SESSIONS.disconnect = Mock() - self.mocked_SESSIONS = SESSIONS
-
[docs] def create_accounts(self): self.account = create.create_account( "TestAccount", @@ -210,8 +190,10 @@ self.account.permissions.add("Developer")
[docs] def teardown_accounts(self): - self.account.delete() - self.account2.delete()
+ if hasattr(self, "account"): + self.account.delete() + if hasattr(self, "account2"): + self.account2.delete()
[docs] def create_rooms(self): self.room1 = create.create_object(self.room_typeclass, key="Room", nohome=True) @@ -261,15 +243,23 @@ self.session = session
[docs] def teardown_session(self): - del SESSIONS[self.session.sessid]
+ if hasattr(self, "sessions"): + del SESSIONS[self.session.sessid]
[docs] @patch("evennia.scripts.taskhandler.deferLater", _mock_deferlater) def setUp(self): """ Sets up testing environment """ - self.save_backups() - self.mock_sessions() + self.backups = ( + SESSIONS.data_out, + SESSIONS.disconnect, + settings.DEFAULT_HOME, + settings.PROTOTYPE_MODULES, + ) + SESSIONS.data_out = Mock() + SESSIONS.disconnect = Mock() + self.create_accounts() self.create_rooms() self.create_objs() @@ -278,8 +268,17 @@ self.setup_session()
[docs] def tearDown(self): - self.restore_backups() - self.teardown_session() + flush_cache() + try: + SESSIONS.data_out = self.backups[0] + SESSIONS.disconnect = self.backups[1] + settings.DEFAULT_HOME = self.backups[2] + settings.PROTOTYPE_MODULES = self.backups[3] + except AttributeError as err: + raise AttributeError(f"{err}: Teardown error. If you overrode the `setUp()` method " + "in your test, make sure you also added `super().setUp()`!") + + del SESSIONS[self.session.sessid] self.teardown_accounts() super().tearDown()
diff --git a/docs/0.9.5/_modules/index.html b/docs/0.9.5/_modules/index.html index 87c6294202..4669d4364a 100644 --- a/docs/0.9.5/_modules/index.html +++ b/docs/0.9.5/_modules/index.html @@ -141,7 +141,6 @@
  • evennia.utils.ansi
  • evennia.utils.batchprocessors
  • evennia.utils.containers
  • -
  • evennia.utils.create
  • evennia.utils.dbserialize
  • evennia.utils.eveditor
  • evennia.utils.evform
  • diff --git a/docs/0.9.5/api/evennia.accounts.manager.html b/docs/0.9.5/api/evennia.accounts.manager.html index bf4a527691..5bb1bb5e14 100644 --- a/docs/0.9.5/api/evennia.accounts.manager.html +++ b/docs/0.9.5/api/evennia.accounts.manager.html @@ -190,9 +190,52 @@ otherwise also match also keys containing the ostring accounts of this typeclass.

    +
    Returns
    +

    Queryset – A queryset (an iterable) with 0, 1 or more matches.

    +
    +
    +
    +create_account(key, email, password, typeclass=None, is_superuser=False, locks=None, permissions=None, tags=None, attributes=None, report_to=None)[source]
    +

    This creates a new account.

    +
    +
    Parameters
    +
      +
    • key (str) – The account’s name. This should be unique.

    • +
    • email (str or None) – Email on valid addr@addr.domain form. If +the empty string, will be set to None.

    • +
    • password (str) – Password in cleartext.

    • +
    +
    +
    Keyword Arguments
    +
      +
    • typeclass (str) – The typeclass to use for the account.

    • +
    • is_superuser (bool) – Wether or not this account is to be a superuser

    • +
    • locks (str) – Lockstring.

    • +
    • permission (list) – List of permission strings.

    • +
    • tags (list) – List of Tags on form (key, category[, data])

    • +
    • attributes (list) – List of Attributes on form +(key, value [, category, [,lockstring [, default_pass]]])

    • +
    • report_to (Object) – An object with a msg() method to report +errors to. If not given, errors will be logged.

    • +
    +
    +
    Returns
    +

    Account – The newly created Account.

    +
    +
    Raises
    +

    ValueError – If key already exists in database.

    +
    +
    +

    Notes

    +

    Usually only the server admin should need to be superuser, all +other access levels can be handled with more fine-grained +permissions or groups. A superuser bypasses all lock checking +operations and is thus not suitable for play-testing the game.

    +
    +
    @@ -210,6 +253,9 @@ otherwise also match also keys containing the ostring accounts of this typeclass.

    +
    Returns
    +

    Queryset – A queryset (an iterable) with 0, 1 or more matches.

    +
    diff --git a/docs/0.9.5/api/evennia.commands.default.account.html b/docs/0.9.5/api/evennia.commands.default.account.html index d27ea03d67..f5afee99de 100644 --- a/docs/0.9.5/api/evennia.commands.default.account.html +++ b/docs/0.9.5/api/evennia.commands.default.account.html @@ -72,7 +72,7 @@ method. Otherwise all text will be returned to all connected sessions.

    -aliases = ['ls', 'l']
    +aliases = ['l', 'ls']
    @@ -103,7 +103,7 @@ method. Otherwise all text will be returned to all connected sessions.

    -search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}
    +search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}
    diff --git a/docs/0.9.5/api/evennia.commands.default.batchprocess.html b/docs/0.9.5/api/evennia.commands.default.batchprocess.html index 8069ef18b0..08f21bbe41 100644 --- a/docs/0.9.5/api/evennia.commands.default.batchprocess.html +++ b/docs/0.9.5/api/evennia.commands.default.batchprocess.html @@ -77,7 +77,7 @@ skipping, reloading etc.

    -aliases = ['batchcmd', 'batchcommand']
    +aliases = ['batchcommand', 'batchcmd']
    @@ -108,7 +108,7 @@ skipping, reloading etc.

    -search_index_entry = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}
    +search_index_entry = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}
    diff --git a/docs/0.9.5/api/evennia.commands.default.building.html b/docs/0.9.5/api/evennia.commands.default.building.html index 279aa91011..ce99c356de 100644 --- a/docs/0.9.5/api/evennia.commands.default.building.html +++ b/docs/0.9.5/api/evennia.commands.default.building.html @@ -1086,10 +1086,17 @@ char: Setting an attribute on a character (global search) character: Alias for char, as above.

    +

    Example

    +

    set self/foo = “bar” +set/delete self/foo +set self/foo = $dbref(#53)

    Sets attributes on objects. The second example form above clears a previously set attribute while the third form inspects the current value of the attribute (if any). The last one (with the star) is a shortcut for operating on a player Account rather than an Object.

    +

    If you want <value> to be an object, use $dbef(#dbref) or +$search(key) to assign it. You need control or edit access to +the object you are adding.

    The most common data to save with this command are strings and numbers. You can however also set Python primitives such as lists, dictionaries and tuples on objects (this might be important for @@ -1219,7 +1226,7 @@ with older attrs that might have been named with []’s.

    -search_index_entry = {'aliases': '', 'category': 'building', 'key': '@set', 'no_prefix': 'set ', 'tags': '', 'text': '\n set attribute on an object or account\n\n Usage:\n set[/switch] <obj>/<attr>[:category] = <value>\n set[/switch] <obj>/<attr>[:category] = # delete attribute\n set[/switch] <obj>/<attr>[:category] # view attribute\n set[/switch] *<account>/<attr>[:category] = <value>\n\n Switch:\n edit: Open the line editor (string values only)\n script: If we\'re trying to set an attribute on a script\n channel: If we\'re trying to set an attribute on a channel\n account: If we\'re trying to set an attribute on an account\n room: Setting an attribute on a room (global search)\n exit: Setting an attribute on an exit (global search)\n char: Setting an attribute on a character (global search)\n character: Alias for char, as above.\n\n Sets attributes on objects. The second example form above clears a\n previously set attribute while the third form inspects the current value of\n the attribute (if any). The last one (with the star) is a shortcut for\n operating on a player Account rather than an Object.\n\n The most common data to save with this command are strings and\n numbers. You can however also set Python primitives such as lists,\n dictionaries and tuples on objects (this might be important for\n the functionality of certain custom objects). This is indicated\n by you starting your value with one of |c\'|n, |c"|n, |c(|n, |c[|n\n or |c{ |n.\n\n Once you have stored a Python primitive as noted above, you can include\n |c[<key>]|n in <attr> to reference nested values in e.g. a list or dict.\n\n Remember that if you use Python primitives like this, you must\n write proper Python syntax too - notably you must include quotes\n around your strings or you will get an error.\n\n '}
    +search_index_entry = {'aliases': '', 'category': 'building', 'key': '@set', 'no_prefix': 'set ', 'tags': '', 'text': '\n set attribute on an object or account\n\n Usage:\n set[/switch] <obj>/<attr>[:category] = <value>\n set[/switch] <obj>/<attr>[:category] = # delete attribute\n set[/switch] <obj>/<attr>[:category] # view attribute\n set[/switch] *<account>/<attr>[:category] = <value>\n\n Switch:\n edit: Open the line editor (string values only)\n script: If we\'re trying to set an attribute on a script\n channel: If we\'re trying to set an attribute on a channel\n account: If we\'re trying to set an attribute on an account\n room: Setting an attribute on a room (global search)\n exit: Setting an attribute on an exit (global search)\n char: Setting an attribute on a character (global search)\n character: Alias for char, as above.\n\n Example:\n set self/foo = "bar"\n set/delete self/foo\n set self/foo = $dbref(#53)\n\n Sets attributes on objects. The second example form above clears a\n previously set attribute while the third form inspects the current value of\n the attribute (if any). The last one (with the star) is a shortcut for\n operating on a player Account rather than an Object.\n\n If you want <value> to be an object, use $dbef(#dbref) or\n $search(key) to assign it. You need control or edit access to\n the object you are adding.\n\n The most common data to save with this command are strings and\n numbers. You can however also set Python primitives such as lists,\n dictionaries and tuples on objects (this might be important for\n the functionality of certain custom objects). This is indicated\n by you starting your value with one of |c\'|n, |c"|n, |c(|n, |c[|n\n or |c{ |n.\n\n Once you have stored a Python primitive as noted above, you can include\n |c[<key>]|n in <attr> to reference nested values in e.g. a list or dict.\n\n Remember that if you use Python primitives like this, you must\n write proper Python syntax too - notably you must include quotes\n around your strings or you will get an error.\n\n '}
    @@ -1277,7 +1284,7 @@ server settings.

    -aliases = ['@swap', '@type', '@update', '@parent', '@typeclasses']
    +aliases = ['@type', '@update', '@swap', '@parent', '@typeclasses']
    @@ -1308,7 +1315,7 @@ server settings.

    -search_index_entry = {'aliases': '@swap @type @update @parent @typeclasses', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass swap type update parent typeclasses', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}
    +search_index_entry = {'aliases': '@type @update @swap @parent @typeclasses', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass type update swap parent typeclasses', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}
    @@ -1447,7 +1454,9 @@ them by ‘;’, i.e:

    examine [*<account>[/attrname]]

    Switch:

    account - examine an Account (same as adding *) -object - examine an Object (useful when OOC)

    +object - examine an Object (useful when OOC) +script - examine a Script +channel - examine a Channel

    The examine command shows detailed game info about an @@ -1461,7 +1470,7 @@ If object is not specified, the current location is examined.

    -aliases = ['@ex', '@exam']
    +aliases = ['@exam', '@ex']
    @@ -1480,8 +1489,13 @@ If object is not specified, the current location is examined.

    -
    -account_mode = False
    +
    +switch_options = ['account', 'object', 'script', 'channel']
    +
    + +
    +
    +object_type = 'object'
    @@ -1662,6 +1676,36 @@ the message as ‘examine’ for eventual custom markup in the client.

    format_things(obj)[source]
    +
    +
    +format_script_desc(obj)[source]
    +
    + +
    +
    +format_script_is_persistent(obj)[source]
    +
    + +
    +
    +format_script_timer_data(obj)[source]
    +
    + +
    +
    +format_channel_sub_totals(obj)[source]
    +
    + +
    +
    +format_channel_account_subs(obj)[source]
    +
    + +
    +
    +format_channel_object_subs(obj)[source]
    +
    +
    get_formatted_obj_data(obj, current_cmdset)[source]
    @@ -1694,7 +1738,7 @@ the cases, see the module doc.

    -search_index_entry = {'aliases': '@ex @exam', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine ex exam', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}
    +search_index_entry = {'aliases': '@exam @ex', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine exam ex', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}
    @@ -1728,7 +1772,7 @@ one is given.

    -aliases = ['@search', '@locate']
    +aliases = ['@locate', '@search']
    @@ -1759,7 +1803,7 @@ one is given.

    -search_index_entry = {'aliases': '@search @locate', 'category': 'building', 'key': '@find', 'no_prefix': 'find search locate', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}
    +search_index_entry = {'aliases': '@locate @search', 'category': 'building', 'key': '@find', 'no_prefix': 'find locate search', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}
    @@ -1877,7 +1921,8 @@ script scriptname - examine named existing global script script myobj = foo.bar.Script - create and assign script to object script/stop myobj = scriptname - stop script on object script/pause foo.Bar.Script - pause global script -script/delete myobj - delete ALL scripts on object

    +script/delete myobj - delete ALL scripts on object +script/delete #dbref[-#dbref] - delete script or range by dbref

    When given with an <obj> as left-hand-side, this creates and assigns a new script to that object. Without an <obj>, this manages and inspects global scripts

    @@ -1936,7 +1981,7 @@ objects.

    -search_index_entry = {'aliases': '@script', 'category': 'system', 'key': '@scripts', 'no_prefix': 'scripts script', 'tags': '', 'text': "\n List and manage all running scripts. Allows for creating new global\n scripts.\n\n Usage:\n script[/switches] [script-#dbref, key, script.path or <obj>]\n script[/start||stop] <obj> = <script.path or script-key>\n\n Switches:\n start - start/unpause an existing script's timer.\n stop - stops an existing script's timer\n pause - pause a script's timer\n delete - deletes script. This will also stop the timer as needed\n\n Examples:\n script - list scripts\n script myobj - list all scripts on object\n script foo.bar.Script - create a new global Script\n script scriptname - examine named existing global script\n script myobj = foo.bar.Script - create and assign script to object\n script/stop myobj = scriptname - stop script on object\n script/pause foo.Bar.Script - pause global script\n script/delete myobj - delete ALL scripts on object\n\n When given with an `<obj>` as left-hand-side, this creates and\n assigns a new script to that object. Without an `<obj>`, this\n manages and inspects global scripts\n\n If no switches are given, this command just views all active\n scripts. The argument can be either an object, at which point it\n will be searched for all scripts defined on it, or a script name\n or #dbref. For using the /stop switch, a unique script #dbref is\n required since whole classes of scripts often have the same name.\n\n Use the `script` build-level command for managing scripts attached to\n objects.\n\n "}
    +search_index_entry = {'aliases': '@script', 'category': 'system', 'key': '@scripts', 'no_prefix': 'scripts script', 'tags': '', 'text': "\n List and manage all running scripts. Allows for creating new global\n scripts.\n\n Usage:\n script[/switches] [script-#dbref, key, script.path or <obj>]\n script[/start||stop] <obj> = <script.path or script-key>\n\n Switches:\n start - start/unpause an existing script's timer.\n stop - stops an existing script's timer\n pause - pause a script's timer\n delete - deletes script. This will also stop the timer as needed\n\n Examples:\n script - list scripts\n script myobj - list all scripts on object\n script foo.bar.Script - create a new global Script\n script scriptname - examine named existing global script\n script myobj = foo.bar.Script - create and assign script to object\n script/stop myobj = scriptname - stop script on object\n script/pause foo.Bar.Script - pause global script\n script/delete myobj - delete ALL scripts on object\n script/delete #dbref[-#dbref] - delete script or range by dbref\n\n When given with an `<obj>` as left-hand-side, this creates and\n assigns a new script to that object. Without an `<obj>`, this\n manages and inspects global scripts\n\n If no switches are given, this command just views all active\n scripts. The argument can be either an object, at which point it\n will be searched for all scripts defined on it, or a script name\n or #dbref. For using the /stop switch, a unique script #dbref is\n required since whole classes of scripts often have the same name.\n\n Use the `script` build-level command for managing scripts attached to\n objects.\n\n "}
    diff --git a/docs/0.9.5/api/evennia.commands.default.general.html b/docs/0.9.5/api/evennia.commands.default.general.html index e7b653ed30..4d52ca14e7 100644 --- a/docs/0.9.5/api/evennia.commands.default.general.html +++ b/docs/0.9.5/api/evennia.commands.default.general.html @@ -114,7 +114,7 @@ look *<account&g
    -aliases = ['ls', 'l']
    +aliases = ['l', 'ls']
    @@ -145,7 +145,7 @@ look *<account&g
    -search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}
    +search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}
    @@ -207,7 +207,7 @@ for everyone to use, you need build privileges and the alias command.

    -aliases = ['nicks', 'nickname']
    +aliases = ['nickname', 'nicks']
    @@ -239,7 +239,7 @@ for everyone to use, you need build privileges and the alias command.

    -search_index_entry = {'aliases': 'nicks nickname', 'category': 'general', 'key': 'nick', 'no_prefix': ' nicks nickname', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}
    +search_index_entry = {'aliases': 'nickname nicks', 'category': 'general', 'key': 'nick', 'no_prefix': ' nickname nicks', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}
    @@ -262,7 +262,7 @@ inv

    -aliases = ['i', 'inv']
    +aliases = ['inv', 'i']
    @@ -293,7 +293,7 @@ inv

    -search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
    +search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
    @@ -648,7 +648,7 @@ automatically begin with your name.

    -aliases = [':', 'emote']
    +aliases = ['emote', ':']
    @@ -689,7 +689,7 @@ space.

    -search_index_entry = {'aliases': ': emote', 'category': 'general', 'key': 'pose', 'no_prefix': ' : emote', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}
    +search_index_entry = {'aliases': 'emote :', 'category': 'general', 'key': 'pose', 'no_prefix': ' emote :', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}
    diff --git a/docs/0.9.5/api/evennia.commands.default.system.html b/docs/0.9.5/api/evennia.commands.default.system.html index c7e972e11f..56579098bc 100644 --- a/docs/0.9.5/api/evennia.commands.default.system.html +++ b/docs/0.9.5/api/evennia.commands.default.system.html @@ -622,7 +622,7 @@ See |luhttps://ww
    -aliases = ['@delays', '@task']
    +aliases = ['@task', '@delays']
    @@ -668,7 +668,7 @@ to all the variables defined therein.

    -search_index_entry = {'aliases': '@delays @task', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
    +search_index_entry = {'aliases': '@task @delays', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
    diff --git a/docs/0.9.5/api/evennia.commands.default.tests.html b/docs/0.9.5/api/evennia.commands.default.tests.html index 3feafb2381..da857b2f25 100644 --- a/docs/0.9.5/api/evennia.commands.default.tests.html +++ b/docs/0.9.5/api/evennia.commands.default.tests.html @@ -710,6 +710,11 @@ classes and settings in mygame.

    test_script()[source]
    +
    +
    +test_script_multi_delete()[source]
    +
    +
    test_teleport()[source]
    diff --git a/docs/0.9.5/api/evennia.commands.default.unloggedin.html b/docs/0.9.5/api/evennia.commands.default.unloggedin.html index 3015e28f2d..71bae7efed 100644 --- a/docs/0.9.5/api/evennia.commands.default.unloggedin.html +++ b/docs/0.9.5/api/evennia.commands.default.unloggedin.html @@ -61,7 +61,7 @@ connect “account name” “pass word”

    -aliases = ['co', 'conn', 'con']
    +aliases = ['conn', 'con', 'co']
    @@ -96,7 +96,7 @@ there is no object yet before the account has logged in)

    -search_index_entry = {'aliases': 'co conn con', 'category': 'general', 'key': 'connect', 'no_prefix': ' co conn con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
    +search_index_entry = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn con co', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
    @@ -120,7 +120,7 @@ create “account name” “pass word”

    -aliases = ['cre', 'cr']
    +aliases = ['cr', 'cre']
    @@ -151,7 +151,7 @@ create “account name” “pass word”

    -search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
    +search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
    @@ -274,7 +274,7 @@ for simplicity. It shows a pane of info.

    -aliases = ['?', 'h']
    +aliases = ['h', '?']
    @@ -300,7 +300,7 @@ for simplicity. It shows a pane of info.

    -search_index_entry = {'aliases': '? h', 'category': 'general', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
    +search_index_entry = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
    diff --git a/docs/0.9.5/api/evennia.comms.managers.html b/docs/0.9.5/api/evennia.comms.managers.html index 915c414b1f..0e2d3b4965 100644 --- a/docs/0.9.5/api/evennia.comms.managers.html +++ b/docs/0.9.5/api/evennia.comms.managers.html @@ -190,7 +190,7 @@ always gives only one match.

    Returns
    -

    Queryset – Message matches.

    +

    Queryset – Iterable with 0, 1 or more matches.

    @@ -215,11 +215,40 @@ always gives only one match.

    Returns
    -

    Queryset – Message matches.

    +

    Queryset – Iterable with 0, 1 or more matches.

    +
    +
    +create_message(senderobj, message, receivers=None, locks=None, tags=None, header=None, **kwargs)[source]
    +

    Create a new communication Msg. Msgs represent a unit of +database-persistent communication between entites.

    +
    +
    Parameters
    +
      +
    • senderobj (Object, Account, Script, str or list) – The entity (or +entities) sending the Msg. If a str, this is the id-string +for an external sender type.

    • +
    • message (str) – Text with the message. Eventual headers, titles +etc should all be included in this text string. Formatting +will be retained.

    • +
    • receivers (Object, Account, Script, str or list) – An Account/Object to send +to, or a list of them. If a string, it’s an identifier for an external +receiver.

    • +
    • locks (str) – Lock definition string.

    • +
    • tags (list) – A list of tags or tuples (tag, category).

    • +
    • header (str) – Mime-type or other optional information for the message

    • +
    +
    +
    +

    Notes

    +

    The Comm system is created to be very open-ended, so it’s fully +possible to let a message both go several receivers at the same time, +it’s up to the command definitions to limit this as desired.

    +
    +
    @@ -286,6 +315,39 @@ Also searches its aliases.

    case sensitive) match.

    +
    Returns
    +

    Queryset – Iterable with 0, 1 or more matches.

    +
    +
    + + +
    +
    +create_channel(key, aliases=None, desc=None, locks=None, keep_log=True, typeclass=None, tags=None)[source]
    +

    Create A communication Channel. A Channel serves as a central hub +for distributing Msgs to groups of people without specifying the +receivers explicitly. Instead accounts may ‘connect’ to the channel +and follow the flow of messages. By default the channel allows +access to all old messages, but this can be turned off with the +keep_log switch.

    +
    +
    Parameters
    +

    key (str) – This must be unique.

    +
    +
    Keyword Arguments
    +
      +
    • aliases (list of str) – List of alternative (likely shorter) keynames.

    • +
    • desc (str) – A description of the channel, for use in listings.

    • +
    • locks (str) – Lockstring.

    • +
    • keep_log (bool) – Log channel throughput.

    • +
    • typeclass (str or class) – The typeclass of the Channel (not +often used).

    • +
    • tags (list) – A list of tags or tuples (tag, category).

    • +
    +
    +
    Returns
    +

    channel (Channel) – A newly created channel.

    +
    @@ -301,6 +363,9 @@ case sensitive) match.

    case sensitive) match.

    +
    Returns
    +

    Queryset – Iterable with 0, 1 or more matches.

    +
    diff --git a/docs/0.9.5/api/evennia.help.manager.html b/docs/0.9.5/api/evennia.help.manager.html index 0ca749fc80..18e87b9ae8 100644 --- a/docs/0.9.5/api/evennia.help.manager.html +++ b/docs/0.9.5/api/evennia.help.manager.html @@ -174,6 +174,34 @@ up in one easily separated category.

  • category (str) – Limit the search to a particular help topic

  • +
    Returns
    +

    Queryset – An iterable with 0, 1 or more matches.

    +
    + + + +
    +
    +create_help(key, entrytext, category='General', locks=None, aliases=None, tags=None)[source]
    +

    Create a static help entry in the help database. Note that Command +help entries are dynamic and directly taken from the __doc__ +entries of the command. The database-stored help entries are +intended for more general help on the game, more extensive info, +in-game setting information and so on.

    +
    +
    Parameters
    +
      +
    • key (str) – The name of the help entry.

    • +
    • entrytext (str) – The body of te help entry

    • +
    • category (str, optional) – The help category of the entry.

    • +
    • locks (str, optional) – A lockstring to restrict access.

    • +
    • aliases (list of str, optional) – List of alternative (likely shorter) keynames.

    • +
    • tags (lst, optional) – List of tags or tuples (tag, category).

    • +
    +
    +
    Returns
    +

    help (HelpEntry) – A newly created help entry.

    +
    diff --git a/docs/0.9.5/api/evennia.objects.manager.html b/docs/0.9.5/api/evennia.objects.manager.html index f4672ac5af..7874ff422b 100644 --- a/docs/0.9.5/api/evennia.objects.manager.html +++ b/docs/0.9.5/api/evennia.objects.manager.html @@ -58,7 +58,7 @@ and manipulating Objects directly from the database.

    lists of Typeclasses, whereas Django-general methods will return Querysets or database objects).

    dbref (converter) -get_id (alias: dbref_search) +dbref_search get_dbref_range object_totals typeclass_search @@ -148,8 +148,12 @@ objects.

    Returns
    -

    matches (query) – Objects fullfilling both the attribute_name and -attribute_value criterions.

    +

    Queryset

    +
    +
    Iterable with 0, 1 or more matches fullfilling both the attribute_name and

    attribute_value criterions.

    +
    +
    +

    Notes

    @@ -188,6 +192,9 @@ cannot be indexed, searching by Attribute key is to be preferred whenever possib
  • typeclasses (list, optional) – List of typeclass-path strings to restrict matches with

  • +
    Returns
    +

    Queryset – Iterable with 0, 1 or more matches.

    +
    @@ -204,7 +211,7 @@ to exclude from the match.

    Returns
    -

    contents (query) – Matching contents, without excludeobj, if given.

    +

    Queryset – Iterable with 0, 1 or more matches.

    @@ -224,7 +231,7 @@ using evennia.utils.utils.string_partial_matching algorithm.

    Returns
    -

    matches (query) – A list of matches of length 0, 1 or more.

    +

    Queryset – An iterable with 0, 1 or more matches.

    @@ -402,6 +409,44 @@ arguments. None if an error was encountered.

    db_account field set.

    +
    +
    +create_object(typeclass=None, key=None, location=None, home=None, permissions=None, locks=None, aliases=None, tags=None, destination=None, report_to=None, nohome=False, attributes=None, nattributes=None)[source]
    +

    Create a new in-game object.

    +
    +
    Keyword Arguments
    +
      +
    • typeclass (class or str) – Class or python path to a typeclass.

    • +
    • key (str) – Name of the new object. If not set, a name of +#dbref will be set.

    • +
    • location (Object or str) – Obj or #dbref to use as the location of the new object.

    • +
    • home (Object or str) – Obj or #dbref to use as the object’s home location.

    • +
    • permissions (list) – A list of permission strings or tuples (permstring, category).

    • +
    • locks (str) – one or more lockstrings, separated by semicolons.

    • +
    • aliases (list) – A list of alternative keys or tuples (aliasstring, category).

    • +
    • tags (list) – List of tag keys or tuples (tagkey, category) or (tagkey, category, data).

    • +
    • destination (Object or str) – Obj or #dbref to use as an Exit’s target.

    • +
    • report_to (Object) – The object to return error messages to.

    • +
    • nohome (bool) – This allows the creation of objects without a +default home location; only used when creating the default +location itself or during unittests.

    • +
    • attributes (list) – Tuples on the form (key, value) or (key, value, category), +(key, value, lockstring) or (key, value, lockstring, default_access). +to set as Attributes on the new object.

    • +
    • nattributes (list) – Non-persistent tuples on the form (key, value). Note that +adding this rarely makes sense since this data will not survive a reload.

    • +
    +
    +
    Returns
    +

    object (Object) – A newly created object of the given typeclass.

    +
    +
    Raises
    +

    ObjectDB.DoesNotExist – If trying to create an Object with +location or home that can’t be found.

    +
    +
    +
    + diff --git a/docs/0.9.5/api/evennia.scripts.manager.html b/docs/0.9.5/api/evennia.scripts.manager.html index 67559a1844..8b6160777d 100644 --- a/docs/0.9.5/api/evennia.scripts.manager.html +++ b/docs/0.9.5/api/evennia.scripts.manager.html @@ -58,7 +58,7 @@ and manipulating Scripts directly from the database.

    lists of Typeclasses, whereas Django-general methods will return Querysets or database objects).

    dbref (converter) -get_id (or dbref_search) +dbref_search get_dbref_range object_totals typeclass_search @@ -139,6 +139,9 @@ on a timer.

  • typeclass (class or str) – Typeclass or path to typeclass.

  • +
    Returns
    +

    Queryset – An iterable with 0, 1 or more results.

    +
    @@ -157,6 +160,9 @@ on a timer.

  • typeclass (class or str) – Typeclass or path to typeclass.

  • +
    Returns
    +

    Queryset – An iterable with 0, 1 or more results.

    +
    @@ -185,6 +191,51 @@ the original.

    +
    +
    +create_script(typeclass=None, key=None, obj=None, account=None, locks=None, interval=None, start_delay=None, repeats=None, persistent=None, autostart=True, report_to=None, desc=None, tags=None, attributes=None)[source]
    +

    Create a new script. All scripts are a combination of a database +object that communicates with the database, and an typeclass that +‘decorates’ the database object into being different types of +scripts. It’s behaviour is similar to the game objects except +scripts has a time component and are more limited in scope.

    +
    +
    Keyword Arguments
    +
      +
    • typeclass (class or str) – Class or python path to a typeclass.

    • +
    • key (str) – Name of the new object. If not set, a name of +#dbref will be set.

    • +
    • obj (Object) – The entity on which this Script sits. If this +is None, we are creating a “global” script.

    • +
    • account (Account) – The account on which this Script sits. It is +exclusiv to obj.

    • +
    • locks (str) – one or more lockstrings, separated by semicolons.

    • +
    • interval (int) – The triggering interval for this Script, in +seconds. If unset, the Script will not have a timing +component.

    • +
    • start_delay (bool) – If True, will wait interval seconds +before triggering the first time.

    • +
    • repeats (int) – The number of times to trigger before stopping. +If unset, will repeat indefinitely.

    • +
    • persistent (bool) – If this Script survives a server shutdown +or not (all Scripts will survive a reload).

    • +
    • autostart (bool) – If this Script will start immediately when +created or if the start method must be called explicitly.

    • +
    • report_to (Object) – The object to return error messages to.

    • +
    • desc (str) – Optional description of script

    • +
    • tags (list) – List of tags or tuples (tag, category).

    • +
    • attributes (list) – List if tuples (key, value) or (key, value, category) +(key, value, lockstring) or (key, value, lockstring, default_access).

    • +
    +
    +
    Returns
    +

    script (obj) – An instance of the script created

    +
    +
    +

    See evennia.scripts.manager for methods to manipulate existing +scripts in the database.

    +
    + diff --git a/docs/0.9.5/api/evennia.scripts.monitorhandler.html b/docs/0.9.5/api/evennia.scripts.monitorhandler.html index 8fbfc91eae..8f91323580 100644 --- a/docs/0.9.5/api/evennia.scripts.monitorhandler.html +++ b/docs/0.9.5/api/evennia.scripts.monitorhandler.html @@ -99,7 +99,7 @@ non-persistent tickers must be killed.

    -add(obj, fieldname, callback, idstring='', persistent=False, **kwargs)[source]
    +add(obj, fieldname, callback, idstring='', persistent=False, category=None, **kwargs)[source]

    Add monitoring to a given field or Attribute. A field must be specified with the full db_* name or it will be assumed to be an Attribute (so db_key, not just key).

    @@ -115,6 +115,9 @@ where kwargs holds keys fieldname and obj.

    of the same field and object.

  • persistent (bool, optional) – If False, the monitor will survive a server reload but not a cold restart. This is default.

  • +
  • category (str, optional) – This is only used if fieldname refers to +an Attribute (i.e. it does not start with db_). You must specify this +if you want to target an Attribute with a category.

  • Keyword Arguments
    @@ -131,7 +134,7 @@ all kwargs must be possible to pickle!

    -remove(obj, fieldname, idstring='')[source]
    +remove(obj, fieldname, idstring='', category=None)[source]

    Remove a monitor.

    diff --git a/docs/0.9.5/api/evennia.typeclasses.managers.html b/docs/0.9.5/api/evennia.typeclasses.managers.html index 0735beb19d..00e3b966be 100644 --- a/docs/0.9.5/api/evennia.typeclasses.managers.html +++ b/docs/0.9.5/api/evennia.typeclasses.managers.html @@ -360,7 +360,7 @@ either a string ‘#N’ or an integer N.

    dbref (str or int) – The id to search for.

    Returns
    -

    object (TypedObject) – The matched object.

    +

    Queryset – Queryset with 0 or 1 match.

    diff --git a/docs/0.9.5/api/evennia.utils.create.html b/docs/0.9.5/api/evennia.utils.create.html index 414417b5f7..17baa8f397 100644 --- a/docs/0.9.5/api/evennia.utils.create.html +++ b/docs/0.9.5/api/evennia.utils.create.html @@ -52,7 +52,7 @@ utils.search module and allows you to do the shorter create.object()
    -evennia.utils.create.create_object(typeclass=None, key=None, location=None, home=None, permissions=None, locks=None, aliases=None, tags=None, destination=None, report_to=None, nohome=False, attributes=None, nattributes=None)[source]
    +evennia.utils.create.create_object(typeclass=None, key=None, location=None, home=None, permissions=None, locks=None, aliases=None, tags=None, destination=None, report_to=None, nohome=False, attributes=None, nattributes=None)

    Create a new in-game object.

    Keyword Arguments
    @@ -90,7 +90,7 @@ adding this rarely makes sense since this data will not survive a reload.

    -evennia.utils.create.create_script(typeclass=None, key=None, obj=None, account=None, locks=None, interval=None, start_delay=None, repeats=None, persistent=None, autostart=True, report_to=None, desc=None, tags=None, attributes=None)[source]
    +evennia.utils.create.create_script(typeclass=None, key=None, obj=None, account=None, locks=None, interval=None, start_delay=None, repeats=None, persistent=None, autostart=True, report_to=None, desc=None, tags=None, attributes=None)

    Create a new script. All scripts are a combination of a database object that communicates with the database, and an typeclass that ‘decorates’ the database object into being different types of @@ -135,7 +135,7 @@ scripts in the database.

    -evennia.utils.create.create_help_entry(key, entrytext, category='General', locks=None, aliases=None, tags=None)[source]
    +evennia.utils.create.create_help_entry(key, entrytext, category='General', locks=None, aliases=None, tags=None)

    Create a static help entry in the help database. Note that Command help entries are dynamic and directly taken from the __doc__ entries of the command. The database-stored help entries are @@ -160,7 +160,7 @@ in-game setting information and so on.

    -evennia.utils.create.create_message(senderobj, message, receivers=None, locks=None, tags=None, header=None, **kwargs)[source]
    +evennia.utils.create.create_message(senderobj, message, receivers=None, locks=None, tags=None, header=None, **kwargs)

    Create a new communication Msg. Msgs represent a unit of database-persistent communication between entites.

    @@ -189,7 +189,7 @@ it’s up to the command definitions to limit this as desired.

    -evennia.utils.create.create_channel(key, aliases=None, desc=None, locks=None, keep_log=True, typeclass=None, tags=None)[source]
    +evennia.utils.create.create_channel(key, aliases=None, desc=None, locks=None, keep_log=True, typeclass=None, tags=None)

    Create A communication Channel. A Channel serves as a central hub for distributing Msgs to groups of people without specifying the receivers explicitly. Instead accounts may ‘connect’ to the channel @@ -219,7 +219,7 @@ often used).

    -evennia.utils.create.create_account(key, email, password, typeclass=None, is_superuser=False, locks=None, permissions=None, tags=None, attributes=None, report_to=None)[source]
    +evennia.utils.create.create_account(key, email, password, typeclass=None, is_superuser=False, locks=None, permissions=None, tags=None, attributes=None, report_to=None)

    This creates a new account.

    Parameters
    diff --git a/docs/0.9.5/api/evennia.utils.eveditor.html b/docs/0.9.5/api/evennia.utils.eveditor.html index b2cf9666a7..a99fcd6c2c 100644 --- a/docs/0.9.5/api/evennia.utils.eveditor.html +++ b/docs/0.9.5/api/evennia.utils.eveditor.html @@ -276,7 +276,7 @@ indentation.

    -aliases = [':wq', ':f', ':u', ':q', ':s', ':fi', ':q!', ':A', ':!', ':uu', ':j', ':r', ':echo', ':w', ':dw', ':=', ':DD', ':>', ':fd', ':p', '::', ':', ':S', ':x', ':i', ':::', ':UU', ':dd', ':<', ':h', ':I', ':y']
    +aliases = [':S', ':w', ':UU', ':fd', ':', ':dd', ':f', ':::', ':DD', ':x', ':i', ':echo', ':q', ':h', ':dw', ':A', ':s', ':>', '::', ':p', ':uu', ':!', ':u', ':wq', ':I', ':fi', ':=', ':<', ':j', ':r', ':q!', ':y']
    @@ -304,7 +304,7 @@ efficient presentation.

    -search_index_entry = {'aliases': ':wq :f :u :q :s :fi :q! :A :! :uu :j :r :echo :w :dw := :DD :> :fd :p :: : :S :x :i ::: :UU :dd :< :h :I :y', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :wq :f :u :q :s :fi :q! :A :! :uu :j :r :echo :w :dw := :DD :> :fd :p :: : :S :x :i ::: :UU :dd :< :h :I :y', 'tags': '', 'text': '\n Commands for the editor\n '}
    +search_index_entry = {'aliases': ':S :w :UU :fd : :dd :f ::: :DD :x :i :echo :q :h :dw :A :s :> :: :p :uu :! :u :wq :I :fi := :< :j :r :q! :y', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :S :w :UU :fd : :dd :f ::: :DD :x :i :echo :q :h :dw :A :s :> :: :p :uu :! :u :wq :I :fi := :< :j :r :q! :y', 'tags': '', 'text': '\n Commands for the editor\n '}
    diff --git a/docs/0.9.5/api/evennia.utils.evmenu.html b/docs/0.9.5/api/evennia.utils.evmenu.html index b3ede23c31..defc94769d 100644 --- a/docs/0.9.5/api/evennia.utils.evmenu.html +++ b/docs/0.9.5/api/evennia.utils.evmenu.html @@ -946,7 +946,7 @@ single question.

    -aliases = ['n', 'abort', 'yes', 'no', 'a', '__nomatch_command', 'y']
    +aliases = ['n', 'a', 'yes', 'no', 'abort', 'y', '__nomatch_command']
    @@ -972,7 +972,7 @@ single question.

    -search_index_entry = {'aliases': 'n abort yes no a __nomatch_command y', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n abort yes no a __nomatch_command y', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
    +search_index_entry = {'aliases': 'n a yes no abort y __nomatch_command', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n a yes no abort y __nomatch_command', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
    diff --git a/docs/0.9.5/api/evennia.utils.evmore.html b/docs/0.9.5/api/evennia.utils.evmore.html index e664fe3b80..612b98de5a 100644 --- a/docs/0.9.5/api/evennia.utils.evmore.html +++ b/docs/0.9.5/api/evennia.utils.evmore.html @@ -77,7 +77,7 @@ the caller.msg() construct every time the page is updated.

    -aliases = ['top', 'end', 'p', 'n', 'abort', 't', 'next', 'quit', 'a', 'e', 'previous', 'q']
    +aliases = ['n', 'a', 'p', 't', 'end', 'next', 'e', 'previous', 'top', 'abort', 'quit', 'q']
    @@ -103,7 +103,7 @@ the caller.msg() construct every time the page is updated.

    -search_index_entry = {'aliases': 'top end p n abort t next quit a e previous q', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' top end p n abort t next quit a e previous q', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
    +search_index_entry = {'aliases': 'n a p t end next e previous top abort quit q', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n a p t end next e previous top abort quit q', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
    diff --git a/docs/0.9.5/api/evennia.utils.search.html b/docs/0.9.5/api/evennia.utils.search.html index 2ba1a7987a..4b265225c8 100644 --- a/docs/0.9.5/api/evennia.utils.search.html +++ b/docs/0.9.5/api/evennia.utils.search.html @@ -120,6 +120,9 @@ otherwise also match also keys containing the ostring accounts of this typeclass.

    +
    Returns
    +

    Queryset – A queryset (an iterable) with 0, 1 or more matches.

    +
    @@ -138,6 +141,9 @@ on a timer.

  • typeclass (class or str) – Typeclass or path to typeclass.

  • +
    Returns
    +

    Queryset – An iterable with 0, 1 or more results.

    +
    @@ -161,7 +167,7 @@ always gives only one match.

    Returns
    -

    Queryset – Message matches.

    +

    Queryset – Iterable with 0, 1 or more matches.

    @@ -178,6 +184,9 @@ always gives only one match.

    case sensitive) match.

    +
    Returns
    +

    Queryset – Iterable with 0, 1 or more matches.

    +
    @@ -192,6 +201,9 @@ case sensitive) match.

  • category (str) – Limit the search to a particular help topic

  • +
    Returns
    +

    Queryset – An iterable with 0, 1 or more matches.

    +
    diff --git a/docs/0.9.5/api/evennia.utils.test_resources.html b/docs/0.9.5/api/evennia.utils.test_resources.html index 9cb671764b..3029755cde 100644 --- a/docs/0.9.5/api/evennia.utils.test_resources.html +++ b/docs/0.9.5/api/evennia.utils.test_resources.html @@ -118,21 +118,6 @@ loaded once).

    alias of evennia.scripts.scripts.DefaultScript

    -
    -
    -save_backups()[source]
    -
    - -
    -
    -restore_backups()[source]
    -
    - -
    -
    -mock_sessions()[source]
    -
    -
    create_accounts()[source]
    diff --git a/docs/0.9.5/genindex.html b/docs/0.9.5/genindex.html index 604deac6ad..9df98c3a80 100644 --- a/docs/0.9.5/genindex.html +++ b/docs/0.9.5/genindex.html @@ -326,8 +326,6 @@
  • account_count() (evennia.server.sessionhandler.ServerSessionHandler method) -
  • -
  • account_mode (evennia.commands.default.building.CmdExamine attribute)
  • account_search() (evennia.accounts.manager.AccountDBManager method)
  • @@ -731,14 +729,14 @@
  • AMPServerProtocol (class in evennia.server.portal.amp_server)
  • - - + - + -
  • create_account() (in module evennia.utils.create) +
  • create_account() (evennia.accounts.manager.AccountDBManager method) + +
  • create_accounts() (evennia.utils.test_resources.EvenniaTestMixin method)
  • create_attribute() (evennia.typeclasses.attributes.IAttributeBackend method) @@ -2062,6 +2064,8 @@
  • create_channel() (evennia.commands.default.comms.CmdChannel method)
  • @@ -2078,15 +2082,25 @@
  • create_exit_cmdset() (evennia.objects.objects.DefaultExit method)
  • create_game_directory() (in module evennia.server.evennia_launcher) +
  • +
  • create_help() (evennia.help.manager.HelpEntryManager method)
  • create_help_entry() (in module evennia.utils.create)
  • create_match() (in module evennia.commands.cmdparser)
  • -
  • create_message() (in module evennia.utils.create) +
  • create_message() (evennia.comms.managers.MsgManager method) + +
  • +
  • create_object() (evennia.objects.manager.ObjectDBManager method) + +
  • create_objects() (in module evennia.server.initial_setup)
  • create_objs() (evennia.utils.test_resources.EvenniaTestMixin method) @@ -2095,9 +2109,11 @@
  • create_rooms() (evennia.utils.test_resources.EvenniaTestMixin method)
  • -
  • create_script() (evennia.utils.test_resources.EvenniaTestMixin method) +
  • create_script() (evennia.scripts.manager.ScriptDBManager method)
  • @@ -4044,6 +4060,12 @@
  • format_attributes() (evennia.commands.default.building.CmdExamine method)
  • format_available_protfuncs() (in module evennia.prototypes.prototypes) +
  • +
  • format_channel_account_subs() (evennia.commands.default.building.CmdExamine method) +
  • +
  • format_channel_object_subs() (evennia.commands.default.building.CmdExamine method) +
  • +
  • format_channel_sub_totals() (evennia.commands.default.building.CmdExamine method)
  • format_chars() (evennia.commands.default.building.CmdExamine method)
  • @@ -4082,6 +4104,12 @@
  • format_output() (evennia.commands.default.building.CmdExamine method)
  • format_permissions() (evennia.commands.default.building.CmdExamine method) +
  • +
  • format_script_desc() (evennia.commands.default.building.CmdExamine method) +
  • +
  • format_script_is_persistent() (evennia.commands.default.building.CmdExamine method) +
  • +
  • format_script_timer_data() (evennia.commands.default.building.CmdExamine method)
  • format_scripts() (evennia.commands.default.building.CmdExamine method)
  • @@ -6244,8 +6272,6 @@
  • message_search() (evennia.comms.managers.MsgManager method)
  • message_transform() (evennia.comms.comms.DefaultChannel method) -
  • -
  • mock_sessions() (evennia.utils.test_resources.EvenniaTestMixin method)
  • mockdeferLater() (in module evennia.utils.test_resources)
  • @@ -6913,6 +6939,8 @@
  • object_subscription_set (evennia.objects.models.ObjectDB attribute)
  • object_totals() (evennia.typeclasses.managers.TypedObjectManager method) +
  • +
  • object_type (evennia.commands.default.building.CmdExamine attribute)
  • object_typeclass (evennia.utils.test_resources.EvenniaTest attribute) @@ -7577,11 +7605,11 @@
  • remove_backspaces() (evennia.utils.text2html.TextToHTMLparser method)
  • remove_bells() (evennia.utils.text2html.TextToHTMLparser method) -
  • -
  • remove_default() (evennia.commands.cmdsethandler.CmdSetHandler method)
  • -
  • save_backups() (evennia.utils.test_resources.EvenniaTestMixin method) -
  • save_buffer() (evennia.utils.eveditor.EvEditor method)
  • save_for_next (evennia.commands.command.Command attribute) @@ -8220,10 +8244,10 @@
  • (evennia.utils.optionclasses.Timezone method)
  • - - + +
    Returns
    +

    Queryset – A queryset (an iterable) with 0, 1 or more matches.

    +
    +
    +
    +create_account(key, email, password, typeclass=None, is_superuser=False, locks=None, permissions=None, tags=None, attributes=None, report_to=None)[source]
    +

    This creates a new account.

    +
    +
    Parameters
    +
      +
    • key (str) – The account’s name. This should be unique.

    • +
    • email (str or None) – Email on valid addr@addr.domain form. If +the empty string, will be set to None.

    • +
    • password (str) – Password in cleartext.

    • +
    +
    +
    Keyword Arguments
    +
      +
    • typeclass (str) – The typeclass to use for the account.

    • +
    • is_superuser (bool) – Wether or not this account is to be a superuser

    • +
    • locks (str) – Lockstring.

    • +
    • permission (list) – List of permission strings.

    • +
    • tags (list) – List of Tags on form (key, category[, data])

    • +
    • attributes (list) – List of Attributes on form +(key, value [, category, [,lockstring [, default_pass]]])

    • +
    • report_to (Object) – An object with a msg() method to report +errors to. If not given, errors will be logged.

    • +
    +
    +
    Returns
    +

    Account – The newly created Account.

    +
    +
    Raises
    +

    ValueError – If key already exists in database.

    +
    +
    +

    Notes

    +

    Usually only the server admin should need to be superuser, all +other access levels can be handled with more fine-grained +permissions or groups. A superuser bypasses all lock checking +operations and is thus not suitable for play-testing the game.

    +
    +
    @@ -211,6 +254,9 @@ otherwise also match also keys containing the ostring accounts of this typeclass.

    +
    Returns
    +

    Queryset – A queryset (an iterable) with 0, 1 or more matches.

    +
    diff --git a/docs/1.0-dev/api/evennia.commands.default.account.html b/docs/1.0-dev/api/evennia.commands.default.account.html index c8a57a75ed..9a07462030 100644 --- a/docs/1.0-dev/api/evennia.commands.default.account.html +++ b/docs/1.0-dev/api/evennia.commands.default.account.html @@ -73,7 +73,7 @@ method. Otherwise all text will be returned to all connected sessions.

    -aliases = ['l', 'ls']
    +aliases = ['ls', 'l']
    @@ -104,7 +104,7 @@ method. Otherwise all text will be returned to all connected sessions.

    -search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}
    +search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}
    diff --git a/docs/1.0-dev/api/evennia.commands.default.batchprocess.html b/docs/1.0-dev/api/evennia.commands.default.batchprocess.html index 4c14a254c7..6b6a30d6b0 100644 --- a/docs/1.0-dev/api/evennia.commands.default.batchprocess.html +++ b/docs/1.0-dev/api/evennia.commands.default.batchprocess.html @@ -78,7 +78,7 @@ skipping, reloading etc.

    -aliases = ['batchcommand', 'batchcmd']
    +aliases = ['batchcmd', 'batchcommand']
    @@ -109,7 +109,7 @@ skipping, reloading etc.

    -search_index_entry = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}
    +search_index_entry = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}
    diff --git a/docs/1.0-dev/api/evennia.commands.default.building.html b/docs/1.0-dev/api/evennia.commands.default.building.html index 49525a4913..4c76083760 100644 --- a/docs/1.0-dev/api/evennia.commands.default.building.html +++ b/docs/1.0-dev/api/evennia.commands.default.building.html @@ -532,7 +532,7 @@ You can specify the /force switch to bypass this confirmation.

    -aliases = ['@delete', '@del']
    +aliases = ['@del', '@delete']
    @@ -573,7 +573,7 @@ You can specify the /force switch to bypass this confirmation.

    -search_index_entry = {'aliases': '@delete @del', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy delete del', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}
    +search_index_entry = {'aliases': '@del @delete', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy del delete', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}
    @@ -1087,10 +1087,17 @@ char: Setting an attribute on a character (global search) character: Alias for char, as above.

    +

    Example

    +

    set self/foo = “bar” +set/delete self/foo +set self/foo = $dbref(#53)

    Sets attributes on objects. The second example form above clears a previously set attribute while the third form inspects the current value of the attribute (if any). The last one (with the star) is a shortcut for operating on a player Account rather than an Object.

    +

    If you want <value> to be an object, use $dbef(#dbref) or +$search(key) to assign it. You need control or edit access to +the object you are adding.

    The most common data to save with this command are strings and numbers. You can however also set Python primitives such as lists, dictionaries and tuples on objects (this might be important for @@ -1220,7 +1227,7 @@ with older attrs that might have been named with []’s.

    -search_index_entry = {'aliases': '', 'category': 'building', 'key': '@set', 'no_prefix': 'set ', 'tags': '', 'text': '\n set attribute on an object or account\n\n Usage:\n set[/switch] <obj>/<attr>[:category] = <value>\n set[/switch] <obj>/<attr>[:category] = # delete attribute\n set[/switch] <obj>/<attr>[:category] # view attribute\n set[/switch] *<account>/<attr>[:category] = <value>\n\n Switch:\n edit: Open the line editor (string values only)\n script: If we\'re trying to set an attribute on a script\n channel: If we\'re trying to set an attribute on a channel\n account: If we\'re trying to set an attribute on an account\n room: Setting an attribute on a room (global search)\n exit: Setting an attribute on an exit (global search)\n char: Setting an attribute on a character (global search)\n character: Alias for char, as above.\n\n Sets attributes on objects. The second example form above clears a\n previously set attribute while the third form inspects the current value of\n the attribute (if any). The last one (with the star) is a shortcut for\n operating on a player Account rather than an Object.\n\n The most common data to save with this command are strings and\n numbers. You can however also set Python primitives such as lists,\n dictionaries and tuples on objects (this might be important for\n the functionality of certain custom objects). This is indicated\n by you starting your value with one of |c\'|n, |c"|n, |c(|n, |c[|n\n or |c{ |n.\n\n Once you have stored a Python primitive as noted above, you can include\n |c[<key>]|n in <attr> to reference nested values in e.g. a list or dict.\n\n Remember that if you use Python primitives like this, you must\n write proper Python syntax too - notably you must include quotes\n around your strings or you will get an error.\n\n '}
    +search_index_entry = {'aliases': '', 'category': 'building', 'key': '@set', 'no_prefix': 'set ', 'tags': '', 'text': '\n set attribute on an object or account\n\n Usage:\n set[/switch] <obj>/<attr>[:category] = <value>\n set[/switch] <obj>/<attr>[:category] = # delete attribute\n set[/switch] <obj>/<attr>[:category] # view attribute\n set[/switch] *<account>/<attr>[:category] = <value>\n\n Switch:\n edit: Open the line editor (string values only)\n script: If we\'re trying to set an attribute on a script\n channel: If we\'re trying to set an attribute on a channel\n account: If we\'re trying to set an attribute on an account\n room: Setting an attribute on a room (global search)\n exit: Setting an attribute on an exit (global search)\n char: Setting an attribute on a character (global search)\n character: Alias for char, as above.\n\n Example:\n set self/foo = "bar"\n set/delete self/foo\n set self/foo = $dbref(#53)\n\n Sets attributes on objects. The second example form above clears a\n previously set attribute while the third form inspects the current value of\n the attribute (if any). The last one (with the star) is a shortcut for\n operating on a player Account rather than an Object.\n\n If you want <value> to be an object, use $dbef(#dbref) or\n $search(key) to assign it. You need control or edit access to\n the object you are adding.\n\n The most common data to save with this command are strings and\n numbers. You can however also set Python primitives such as lists,\n dictionaries and tuples on objects (this might be important for\n the functionality of certain custom objects). This is indicated\n by you starting your value with one of |c\'|n, |c"|n, |c(|n, |c[|n\n or |c{ |n.\n\n Once you have stored a Python primitive as noted above, you can include\n |c[<key>]|n in <attr> to reference nested values in e.g. a list or dict.\n\n Remember that if you use Python primitives like this, you must\n write proper Python syntax too - notably you must include quotes\n around your strings or you will get an error.\n\n '}
    @@ -1278,7 +1285,7 @@ server settings.

    -aliases = ['@update', '@typeclasses', '@type', '@parent', '@swap']
    +aliases = ['@typeclasses', '@type', '@swap', '@update', '@parent']
    @@ -1309,7 +1316,7 @@ server settings.

    -search_index_entry = {'aliases': '@update @typeclasses @type @parent @swap', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass update typeclasses type parent swap', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}
    +search_index_entry = {'aliases': '@typeclasses @type @swap @update @parent', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass typeclasses type swap update parent', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}
    @@ -1448,7 +1455,9 @@ them by ‘;’, i.e:

    examine [*<account>[/attrname]]

    Switch:

    account - examine an Account (same as adding *) -object - examine an Object (useful when OOC)

    +object - examine an Object (useful when OOC) +script - examine a Script +channel - examine a Channel

    The examine command shows detailed game info about an @@ -1462,7 +1471,7 @@ If object is not specified, the current location is examined.

    -aliases = ['@ex', '@exam']
    +aliases = ['@exam', '@ex']
    @@ -1481,8 +1490,13 @@ If object is not specified, the current location is examined.

    -
    -account_mode = False
    +
    +switch_options = ['account', 'object', 'script', 'channel']
    +
    + +
    +
    +object_type = 'object'
    @@ -1663,6 +1677,36 @@ the message as ‘examine’ for eventual custom markup in the client.

    format_things(obj)[source]
    +
    +
    +format_script_desc(obj)[source]
    +
    + +
    +
    +format_script_is_persistent(obj)[source]
    +
    + +
    +
    +format_script_timer_data(obj)[source]
    +
    + +
    +
    +format_channel_sub_totals(obj)[source]
    +
    + +
    +
    +format_channel_account_subs(obj)[source]
    +
    + +
    +
    +format_channel_object_subs(obj)[source]
    +
    +
    get_formatted_obj_data(obj, current_cmdset)[source]
    @@ -1695,7 +1739,7 @@ the cases, see the module doc.

    -search_index_entry = {'aliases': '@ex @exam', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine ex exam', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}
    +search_index_entry = {'aliases': '@exam @ex', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine exam ex', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}
    @@ -1729,7 +1773,7 @@ one is given.

    -aliases = ['@search', '@locate']
    +aliases = ['@locate', '@search']
    @@ -1760,7 +1804,7 @@ one is given.

    -search_index_entry = {'aliases': '@search @locate', 'category': 'building', 'key': '@find', 'no_prefix': 'find search locate', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}
    +search_index_entry = {'aliases': '@locate @search', 'category': 'building', 'key': '@find', 'no_prefix': 'find locate search', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}
    @@ -1878,7 +1922,8 @@ script scriptname - examine named existing global script script myobj = foo.bar.Script - create and assign script to object script/stop myobj = scriptname - stop script on object script/pause foo.Bar.Script - pause global script -script/delete myobj - delete ALL scripts on object

    +script/delete myobj - delete ALL scripts on object +script/delete #dbref[-#dbref] - delete script or range by dbref

    When given with an <obj> as left-hand-side, this creates and assigns a new script to that object. Without an <obj>, this manages and inspects global scripts

    @@ -1937,7 +1982,7 @@ objects.

    -search_index_entry = {'aliases': '@script', 'category': 'system', 'key': '@scripts', 'no_prefix': 'scripts script', 'tags': '', 'text': "\n List and manage all running scripts. Allows for creating new global\n scripts.\n\n Usage:\n script[/switches] [script-#dbref, key, script.path or <obj>]\n script[/start||stop] <obj> = <script.path or script-key>\n\n Switches:\n start - start/unpause an existing script's timer.\n stop - stops an existing script's timer\n pause - pause a script's timer\n delete - deletes script. This will also stop the timer as needed\n\n Examples:\n script - list scripts\n script myobj - list all scripts on object\n script foo.bar.Script - create a new global Script\n script scriptname - examine named existing global script\n script myobj = foo.bar.Script - create and assign script to object\n script/stop myobj = scriptname - stop script on object\n script/pause foo.Bar.Script - pause global script\n script/delete myobj - delete ALL scripts on object\n\n When given with an `<obj>` as left-hand-side, this creates and\n assigns a new script to that object. Without an `<obj>`, this\n manages and inspects global scripts\n\n If no switches are given, this command just views all active\n scripts. The argument can be either an object, at which point it\n will be searched for all scripts defined on it, or a script name\n or #dbref. For using the /stop switch, a unique script #dbref is\n required since whole classes of scripts often have the same name.\n\n Use the `script` build-level command for managing scripts attached to\n objects.\n\n "}
    +search_index_entry = {'aliases': '@script', 'category': 'system', 'key': '@scripts', 'no_prefix': 'scripts script', 'tags': '', 'text': "\n List and manage all running scripts. Allows for creating new global\n scripts.\n\n Usage:\n script[/switches] [script-#dbref, key, script.path or <obj>]\n script[/start||stop] <obj> = <script.path or script-key>\n\n Switches:\n start - start/unpause an existing script's timer.\n stop - stops an existing script's timer\n pause - pause a script's timer\n delete - deletes script. This will also stop the timer as needed\n\n Examples:\n script - list scripts\n script myobj - list all scripts on object\n script foo.bar.Script - create a new global Script\n script scriptname - examine named existing global script\n script myobj = foo.bar.Script - create and assign script to object\n script/stop myobj = scriptname - stop script on object\n script/pause foo.Bar.Script - pause global script\n script/delete myobj - delete ALL scripts on object\n script/delete #dbref[-#dbref] - delete script or range by dbref\n\n When given with an `<obj>` as left-hand-side, this creates and\n assigns a new script to that object. Without an `<obj>`, this\n manages and inspects global scripts\n\n If no switches are given, this command just views all active\n scripts. The argument can be either an object, at which point it\n will be searched for all scripts defined on it, or a script name\n or #dbref. For using the /stop switch, a unique script #dbref is\n required since whole classes of scripts often have the same name.\n\n Use the `script` build-level command for managing scripts attached to\n objects.\n\n "}
    diff --git a/docs/1.0-dev/api/evennia.commands.default.comms.html b/docs/1.0-dev/api/evennia.commands.default.comms.html index f37e10c816..e1c8bfbb59 100644 --- a/docs/1.0-dev/api/evennia.commands.default.comms.html +++ b/docs/1.0-dev/api/evennia.commands.default.comms.html @@ -196,7 +196,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.

    -aliases = ['@channels', '@chan']
    +aliases = ['@chan', '@channels']
    @@ -722,7 +722,7 @@ don’t actually sub to yet.

    -search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
    +search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
    @@ -875,7 +875,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.

    -aliases = ['@channels', '@chan']
    +aliases = ['@chan', '@channels']
    @@ -895,7 +895,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.

    -search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
    +search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
    diff --git a/docs/1.0-dev/api/evennia.commands.default.general.html b/docs/1.0-dev/api/evennia.commands.default.general.html index 2e9e372ce2..e773d4e96e 100644 --- a/docs/1.0-dev/api/evennia.commands.default.general.html +++ b/docs/1.0-dev/api/evennia.commands.default.general.html @@ -115,7 +115,7 @@ look *<account&g
    -aliases = ['l', 'ls']
    +aliases = ['ls', 'l']
    @@ -146,7 +146,7 @@ look *<account&g
    -search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}
    +search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}
    @@ -263,7 +263,7 @@ inv

    -aliases = ['i', 'inv']
    +aliases = ['inv', 'i']
    @@ -294,7 +294,7 @@ inv

    -search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
    +search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
    @@ -538,7 +538,7 @@ placing it in their inventory.

    -aliases = ["'", '"']
    +aliases = ['"', "'"]
    @@ -569,7 +569,7 @@ placing it in their inventory.

    -search_index_entry = {'aliases': '\' "', 'category': 'general', 'key': 'say', 'no_prefix': ' \' "', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}
    +search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', 'no_prefix': ' " \'', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}
    diff --git a/docs/1.0-dev/api/evennia.commands.default.system.html b/docs/1.0-dev/api/evennia.commands.default.system.html index cb8914202b..4234cd3b6a 100644 --- a/docs/1.0-dev/api/evennia.commands.default.system.html +++ b/docs/1.0-dev/api/evennia.commands.default.system.html @@ -623,7 +623,7 @@ See |luhttps://ww
    -aliases = ['@delays', '@task']
    +aliases = ['@task', '@delays']
    @@ -669,7 +669,7 @@ to all the variables defined therein.

    -search_index_entry = {'aliases': '@delays @task', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
    +search_index_entry = {'aliases': '@task @delays', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
    diff --git a/docs/1.0-dev/api/evennia.commands.default.tests.html b/docs/1.0-dev/api/evennia.commands.default.tests.html index 2f5ffe6814..e23f4739de 100644 --- a/docs/1.0-dev/api/evennia.commands.default.tests.html +++ b/docs/1.0-dev/api/evennia.commands.default.tests.html @@ -711,6 +711,11 @@ classes and settings in mygame.

    test_script()[source]
    +
    +
    +test_script_multi_delete()[source]
    +
    +
    test_teleport()[source]
    diff --git a/docs/1.0-dev/api/evennia.commands.default.unloggedin.html b/docs/1.0-dev/api/evennia.commands.default.unloggedin.html index de0b2532ae..3029699285 100644 --- a/docs/1.0-dev/api/evennia.commands.default.unloggedin.html +++ b/docs/1.0-dev/api/evennia.commands.default.unloggedin.html @@ -62,7 +62,7 @@ connect “account name” “pass word”

    -aliases = ['con', 'co', 'conn']
    +aliases = ['con', 'conn', 'co']
    @@ -97,7 +97,7 @@ there is no object yet before the account has logged in)

    -search_index_entry = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
    +search_index_entry = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
    @@ -176,7 +176,7 @@ version is a bit more complicated.

    -aliases = ['qu', 'q']
    +aliases = ['q', 'qu']
    @@ -202,7 +202,7 @@ version is a bit more complicated.

    -search_index_entry = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
    +search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
    @@ -226,7 +226,7 @@ All it does is display the connect screen.

    -aliases = ['l', 'look']
    +aliases = ['look', 'l']
    @@ -252,7 +252,7 @@ All it does is display the connect screen.

    -search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
    +search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
    diff --git a/docs/1.0-dev/api/evennia.comms.managers.html b/docs/1.0-dev/api/evennia.comms.managers.html index 1243b241af..7fdf04e19b 100644 --- a/docs/1.0-dev/api/evennia.comms.managers.html +++ b/docs/1.0-dev/api/evennia.comms.managers.html @@ -191,7 +191,7 @@ always gives only one match.

    Returns
    -

    Queryset – Message matches.

    +

    Queryset – Iterable with 0, 1 or more matches.

    @@ -216,11 +216,40 @@ always gives only one match.

    Returns
    -

    Queryset – Message matches.

    +

    Queryset – Iterable with 0, 1 or more matches.

    +
    +
    +create_message(senderobj, message, receivers=None, locks=None, tags=None, header=None, **kwargs)[source]
    +

    Create a new communication Msg. Msgs represent a unit of +database-persistent communication between entites.

    +
    +
    Parameters
    +
      +
    • senderobj (Object, Account, Script, str or list) – The entity (or +entities) sending the Msg. If a str, this is the id-string +for an external sender type.

    • +
    • message (str) – Text with the message. Eventual headers, titles +etc should all be included in this text string. Formatting +will be retained.

    • +
    • receivers (Object, Account, Script, str or list) – An Account/Object to send +to, or a list of them. If a string, it’s an identifier for an external +receiver.

    • +
    • locks (str) – Lock definition string.

    • +
    • tags (list) – A list of tags or tuples (tag, category).

    • +
    • header (str) – Mime-type or other optional information for the message

    • +
    +
    +
    +

    Notes

    +

    The Comm system is created to be very open-ended, so it’s fully +possible to let a message both go several receivers at the same time, +it’s up to the command definitions to limit this as desired.

    +
    +
    @@ -287,6 +316,39 @@ Also searches its aliases.

    case sensitive) match.

    +
    Returns
    +

    Queryset – Iterable with 0, 1 or more matches.

    +
    +
    + + +
    +
    +create_channel(key, aliases=None, desc=None, locks=None, keep_log=True, typeclass=None, tags=None)[source]
    +

    Create A communication Channel. A Channel serves as a central hub +for distributing Msgs to groups of people without specifying the +receivers explicitly. Instead accounts may ‘connect’ to the channel +and follow the flow of messages. By default the channel allows +access to all old messages, but this can be turned off with the +keep_log switch.

    +
    +
    Parameters
    +

    key (str) – This must be unique.

    +
    +
    Keyword Arguments
    +
      +
    • aliases (list of str) – List of alternative (likely shorter) keynames.

    • +
    • desc (str) – A description of the channel, for use in listings.

    • +
    • locks (str) – Lockstring.

    • +
    • keep_log (bool) – Log channel throughput.

    • +
    • typeclass (str or class) – The typeclass of the Channel (not +often used).

    • +
    • tags (list) – A list of tags or tuples (tag, category).

    • +
    +
    +
    Returns
    +

    channel (Channel) – A newly created channel.

    +
    @@ -302,6 +364,9 @@ case sensitive) match.

    case sensitive) match.

    +
    Returns
    +

    Queryset – Iterable with 0, 1 or more matches.

    +
    diff --git a/docs/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html b/docs/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html index 41540dcc9d..ac429fdc47 100644 --- a/docs/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html +++ b/docs/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html @@ -78,7 +78,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.

    -aliases = ['con', 'co', 'conn']
    +aliases = ['con', 'conn', 'co']
    @@ -108,7 +108,7 @@ there is no object yet before the account has logged in)

    -search_index_entry = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}
    +search_index_entry = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}
    @@ -185,7 +185,7 @@ version is a bit more complicated.

    -aliases = ['qu', 'q']
    +aliases = ['q', 'qu']
    @@ -211,7 +211,7 @@ version is a bit more complicated.

    -search_index_entry = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
    +search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
    @@ -230,7 +230,7 @@ All it does is display the connect screen.

    -aliases = ['l', 'look']
    +aliases = ['look', 'l']
    @@ -256,7 +256,7 @@ All it does is display the connect screen.

    -search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
    +search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
    diff --git a/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html b/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html index 7bc6859a62..179f7b82e6 100644 --- a/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html +++ b/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html @@ -99,7 +99,7 @@ aliases to an already joined channel.

    -aliases = ['aliaschan', 'chanalias']
    +aliases = ['chanalias', 'aliaschan']
    @@ -130,7 +130,7 @@ aliases to an already joined channel.

    -search_index_entry = {'aliases': 'aliaschan chanalias', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' aliaschan chanalias', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}
    +search_index_entry = {'aliases': 'chanalias aliaschan', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' chanalias aliaschan', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}
    @@ -156,7 +156,7 @@ for that channel.

    -aliases = ['delaliaschan', 'delchanalias']
    +aliases = ['delchanalias', 'delaliaschan']
    @@ -187,7 +187,7 @@ for that channel.

    -search_index_entry = {'aliases': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delaliaschan delchanalias', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}
    +search_index_entry = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delchanalias delaliaschan', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}
    diff --git a/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html b/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html index 0118bfd73f..0414ad9f23 100644 --- a/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html +++ b/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html @@ -150,7 +150,7 @@ the operation will be general or on the room.

    -aliases = ['chicken out', 'q', 'quit', 'abort']
    +aliases = ['quit', 'q', 'abort', 'chicken out']
    @@ -174,7 +174,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'chicken out q quit abort', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out q quit abort', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}
    +search_index_entry = {'aliases': 'quit q abort chicken out', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' quit q abort chicken out', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}
    @@ -195,7 +195,7 @@ set in self.parse())

    -aliases = ['l', 'ls']
    +aliases = ['ls', 'l']
    @@ -229,7 +229,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'l ls', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}
    +search_index_entry = {'aliases': 'ls l', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}
    @@ -310,7 +310,7 @@ shout

    -aliases = ['shout', 'whisper', ';']
    +aliases = ['shout', ';', 'whisper']
    @@ -339,7 +339,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'shout whisper ;', 'category': 'general', 'key': 'say', 'no_prefix': ' shout whisper ;', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}
    +search_index_entry = {'aliases': 'shout ; whisper', 'category': 'general', 'key': 'say', 'no_prefix': ' shout ; whisper', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}
    @@ -367,7 +367,7 @@ emote /me points to /box and /lever.

    -aliases = ['pose', ':']
    +aliases = [':', 'pose']
    @@ -406,7 +406,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'pose :', 'category': 'general', 'key': 'emote', 'no_prefix': ' pose :', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use "..." to enact speech.\n\n Usage:\n emote <emote>\n :<emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}
    +search_index_entry = {'aliases': ': pose', 'category': 'general', 'key': 'emote', 'no_prefix': ' : pose', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use "..." to enact speech.\n\n Usage:\n emote <emote>\n :<emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}
    @@ -429,7 +429,7 @@ looks and what actions is available.

    -aliases = ['ex', 'examine', 'e', 'unfocus']
    +aliases = ['e', 'examine', 'ex', 'unfocus']
    @@ -458,7 +458,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'ex examine e unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' ex examine e unfocus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}
    +search_index_entry = {'aliases': 'e examine ex unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' e examine ex unfocus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}
    @@ -520,7 +520,7 @@ set in self.parse())

    -aliases = ['i', 'give', 'inventory', 'inv']
    +aliases = ['inventory', 'inv', 'give', 'i']
    @@ -544,7 +544,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'i give inventory inv', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' i give inventory inv', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}
    +search_index_entry = {'aliases': 'inventory inv give i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory inv give i', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}
    diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.barter.barter.html b/docs/1.0-dev/api/evennia.contrib.game_systems.barter.barter.html index 5ce84d7646..0132d5b6b6 100644 --- a/docs/1.0-dev/api/evennia.contrib.game_systems.barter.barter.html +++ b/docs/1.0-dev/api/evennia.contrib.game_systems.barter.barter.html @@ -684,7 +684,7 @@ try to influence the other part in the deal.

    -aliases = ['offers', 'deal']
    +aliases = ['deal', 'offers']
    @@ -710,7 +710,7 @@ try to influence the other part in the deal.

    -search_index_entry = {'aliases': 'offers deal', 'category': 'trading', 'key': 'status', 'no_prefix': ' offers deal', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}
    +search_index_entry = {'aliases': 'deal offers', 'category': 'trading', 'key': 'status', 'no_prefix': ' deal offers', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}
    diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html b/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html index 39b2131185..5975b30364 100644 --- a/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html +++ b/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html @@ -631,7 +631,7 @@ inv

    -aliases = ['i', 'inv']
    +aliases = ['inv', 'i']
    @@ -662,7 +662,7 @@ inv

    -search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
    +search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
    diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_basic.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_basic.html index deb755259e..721195c01f 100644 --- a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_basic.html +++ b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_basic.html @@ -573,7 +573,7 @@ if there are still any actions you can take.

    -aliases = ['hold', 'wait']
    +aliases = ['wait', 'hold']
    @@ -594,7 +594,7 @@ if there are still any actions you can take.

    -search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    +search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_equip.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_equip.html index e2550808cb..7ba44b24fa 100644 --- a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_equip.html +++ b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_equip.html @@ -690,7 +690,7 @@ if there are still any actions you can take.

    -aliases = ['hold', 'wait']
    +aliases = ['wait', 'hold']
    @@ -711,7 +711,7 @@ if there are still any actions you can take.

    -search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    +search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_items.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_items.html index b6e4d3c373..099fb1788d 100644 --- a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_items.html +++ b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_items.html @@ -724,7 +724,7 @@ if there are still any actions you can take.

    -aliases = ['hold', 'wait']
    +aliases = ['wait', 'hold']
    @@ -745,7 +745,7 @@ if there are still any actions you can take.

    -search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    +search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_magic.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_magic.html index 13a03a9906..01164e7484 100644 --- a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_magic.html +++ b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_magic.html @@ -596,7 +596,7 @@ if there are still any actions you can take.

    -aliases = ['hold', 'wait']
    +aliases = ['wait', 'hold']
    @@ -617,7 +617,7 @@ if there are still any actions you can take.

    -search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    +search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_range.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_range.html index be3daf60fc..e215874ae8 100644 --- a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_range.html +++ b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_range.html @@ -1023,7 +1023,7 @@ if there are still any actions you can take.

    -aliases = ['hold', 'wait']
    +aliases = ['wait', 'hold']
    @@ -1044,7 +1044,7 @@ if there are still any actions you can take.

    -search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    +search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    diff --git a/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html b/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html index fe8614ebd7..7eb533864a 100644 --- a/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html +++ b/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html @@ -279,7 +279,7 @@ look *<account&g
    -aliases = ['l', 'ls']
    +aliases = ['ls', 'l']
    @@ -299,7 +299,7 @@ look *<account&g
    -search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}
    +search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}
    diff --git a/docs/1.0-dev/api/evennia.contrib.rpg.rpsystem.rpsystem.html b/docs/1.0-dev/api/evennia.contrib.rpg.rpsystem.rpsystem.html index 7f90f6d21b..603a70c421 100644 --- a/docs/1.0-dev/api/evennia.contrib.rpg.rpsystem.rpsystem.html +++ b/docs/1.0-dev/api/evennia.contrib.rpg.rpsystem.rpsystem.html @@ -700,7 +700,7 @@ a different language.

    -aliases = ["'", '"']
    +aliases = ['"', "'"]
    @@ -731,7 +731,7 @@ a different language.

    -search_index_entry = {'aliases': '\' "', 'category': 'general', 'key': 'say', 'no_prefix': ' \' "', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}
    +search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', 'no_prefix': ' " \'', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}
    diff --git a/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html b/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html index 17116bb800..aba8be254f 100644 --- a/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html +++ b/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html @@ -84,7 +84,7 @@ such as when closing the lid and un-blinding a character.

    -aliases = ['push', 'press button', 'press']
    +aliases = ['press', 'press button', 'push']
    @@ -113,7 +113,7 @@ check if the lid is open or closed.

    -search_index_entry = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}
    +search_index_entry = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'no_prefix': ' press press button push', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}
    @@ -183,7 +183,7 @@ check if the lid is open or closed.

    -aliases = ['smash lid', 'break lid', 'smash']
    +aliases = ['smash lid', 'smash', 'break lid']
    @@ -210,7 +210,7 @@ break.

    -search_index_entry = {'aliases': 'smash lid break lid smash', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid break lid smash', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}
    +search_index_entry = {'aliases': 'smash lid smash break lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid smash break lid', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}
    @@ -310,7 +310,7 @@ be mutually exclusive.

    -aliases = ['push', 'press button', 'press']
    +aliases = ['press', 'press button', 'push']
    @@ -339,7 +339,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}
    +search_index_entry = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'no_prefix': ' press press button push', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}
    @@ -437,7 +437,7 @@ be mutually exclusive.

    -aliases = ['examine', 'get', 'l', 'ex', 'listen', 'feel']
    +aliases = ['feel', 'ex', 'listen', 'l', 'get', 'examine']
    @@ -463,7 +463,7 @@ be mutually exclusive.

    -search_index_entry = {'aliases': 'examine get l ex listen feel', 'category': 'general', 'key': 'look', 'no_prefix': ' examine get l ex listen feel', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}
    +search_index_entry = {'aliases': 'feel ex listen l get examine', 'category': 'general', 'key': 'look', 'no_prefix': ' feel ex listen l get examine', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}
    diff --git a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html index 3536abafbf..5218d52b2c 100644 --- a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html +++ b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html @@ -364,7 +364,7 @@ of the object. We overload it with our own version.

    -aliases = ['burn', 'light']
    +aliases = ['light', 'burn']
    @@ -391,7 +391,7 @@ to sit on a “lightable” object, we operate only on self.obj.

    -search_index_entry = {'aliases': 'burn light', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' burn light', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}
    +search_index_entry = {'aliases': 'light burn', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' light burn', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}
    @@ -495,7 +495,7 @@ shift green root up/down

    -aliases = ['push', 'shiftroot', 'move', 'pull']
    +aliases = ['pull', 'move', 'push', 'shiftroot']
    @@ -531,7 +531,7 @@ yellow/green - horizontal roots

    -search_index_entry = {'aliases': 'push shiftroot move pull', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push shiftroot move pull', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}
    +search_index_entry = {'aliases': 'pull move push shiftroot', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' pull move push shiftroot', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}
    @@ -548,7 +548,7 @@ yellow/green - horizontal roots

    -aliases = ['push button', 'press button', 'button']
    +aliases = ['button', 'press button', 'push button']
    @@ -574,7 +574,7 @@ yellow/green - horizontal roots

    -search_index_entry = {'aliases': 'push button press button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' push button press button button', 'tags': '', 'text': '\n Presses a button.\n '}
    +search_index_entry = {'aliases': 'button press button push button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' button press button push button', 'tags': '', 'text': '\n Presses a button.\n '}
    @@ -718,7 +718,7 @@ parry - forgoes your attack but will make you harder to hit on next

    -aliases = ['bash', 'hit', 'defend', 'fight', 'thrust', 'stab', 'slash', 'kill', 'chop', 'parry', 'pierce']
    +aliases = ['bash', 'kill', 'slash', 'parry', 'stab', 'defend', 'pierce', 'thrust', 'chop', 'hit', 'fight']
    @@ -744,7 +744,7 @@ parry - forgoes your attack but will make you harder to hit on next

    -search_index_entry = {'aliases': 'bash hit defend fight thrust stab slash kill chop parry pierce', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' bash hit defend fight thrust stab slash kill chop parry pierce', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}
    +search_index_entry = {'aliases': 'bash kill slash parry stab defend pierce thrust chop hit fight', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' bash kill slash parry stab defend pierce thrust chop hit fight', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}
    diff --git a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html index 7dcf743284..f3b40da037 100644 --- a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html +++ b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html @@ -187,7 +187,7 @@ code except for adding in the details.

    -aliases = ['l', 'ls']
    +aliases = ['ls', 'l']
    @@ -202,7 +202,7 @@ code except for adding in the details.

    -search_index_entry = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}
    +search_index_entry = {'aliases': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}
    @@ -868,7 +868,7 @@ to find something.

    -aliases = ['l', 'search', 'fiddle', 'feel', 'feel around']
    +aliases = ['feel', 'l', 'feel around', 'fiddle', 'search']
    @@ -896,7 +896,7 @@ random chance of eventually finding a light source.

    -search_index_entry = {'aliases': 'l search fiddle feel feel around', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l search fiddle feel feel around', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}
    +search_index_entry = {'aliases': 'feel l feel around fiddle search', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel l feel around fiddle search', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}
    diff --git a/docs/1.0-dev/api/evennia.help.manager.html b/docs/1.0-dev/api/evennia.help.manager.html index fa77f1cac1..4193b68ee8 100644 --- a/docs/1.0-dev/api/evennia.help.manager.html +++ b/docs/1.0-dev/api/evennia.help.manager.html @@ -175,6 +175,34 @@ up in one easily separated category.

  • category (str) – Limit the search to a particular help topic

  • +
    Returns
    +

    Queryset – An iterable with 0, 1 or more matches.

    +
    + + + +
    +
    +create_help(key, entrytext, category='General', locks=None, aliases=None, tags=None)[source]
    +

    Create a static help entry in the help database. Note that Command +help entries are dynamic and directly taken from the __doc__ +entries of the command. The database-stored help entries are +intended for more general help on the game, more extensive info, +in-game setting information and so on.

    +
    +
    Parameters
    +
      +
    • key (str) – The name of the help entry.

    • +
    • entrytext (str) – The body of te help entry

    • +
    • category (str, optional) – The help category of the entry.

    • +
    • locks (str, optional) – A lockstring to restrict access.

    • +
    • aliases (list of str, optional) – List of alternative (likely shorter) keynames.

    • +
    • tags (lst, optional) – List of tags or tuples (tag, category).

    • +
    +
    +
    Returns
    +

    help (HelpEntry) – A newly created help entry.

    +
    diff --git a/docs/1.0-dev/api/evennia.objects.manager.html b/docs/1.0-dev/api/evennia.objects.manager.html index b4a9e53bc0..e473f5981d 100644 --- a/docs/1.0-dev/api/evennia.objects.manager.html +++ b/docs/1.0-dev/api/evennia.objects.manager.html @@ -59,7 +59,7 @@ and manipulating Objects directly from the database.

    lists of Typeclasses, whereas Django-general methods will return Querysets or database objects).

    dbref (converter) -get_id (alias: dbref_search) +dbref_search get_dbref_range object_totals typeclass_search @@ -149,8 +149,12 @@ objects.

    Returns
    -

    matches (query) – Objects fullfilling both the attribute_name and -attribute_value criterions.

    +

    Queryset

    +
    +
    Iterable with 0, 1 or more matches fullfilling both the attribute_name and

    attribute_value criterions.

    +
    +
    +

    Notes

    @@ -189,6 +193,9 @@ cannot be indexed, searching by Attribute key is to be preferred whenever possib
  • typeclasses (list, optional) – List of typeclass-path strings to restrict matches with

  • +
    Returns
    +

    Queryset – Iterable with 0, 1 or more matches.

    +
    @@ -205,7 +212,7 @@ to exclude from the match.

    Returns
    -

    contents (query) – Matching contents, without excludeobj, if given.

    +

    Queryset – Iterable with 0, 1 or more matches.

    @@ -225,7 +232,7 @@ using evennia.utils.utils.string_partial_matching algorithm.

    Returns
    -

    matches (query) – A list of matches of length 0, 1 or more.

    +

    Queryset – An iterable with 0, 1 or more matches.

    @@ -403,6 +410,44 @@ arguments. None if an error was encountered.

    db_account field set.

    +
    +
    +create_object(typeclass=None, key=None, location=None, home=None, permissions=None, locks=None, aliases=None, tags=None, destination=None, report_to=None, nohome=False, attributes=None, nattributes=None)[source]
    +

    Create a new in-game object.

    +
    +
    Keyword Arguments
    +
      +
    • typeclass (class or str) – Class or python path to a typeclass.

    • +
    • key (str) – Name of the new object. If not set, a name of +#dbref will be set.

    • +
    • location (Object or str) – Obj or #dbref to use as the location of the new object.

    • +
    • home (Object or str) – Obj or #dbref to use as the object’s home location.

    • +
    • permissions (list) – A list of permission strings or tuples (permstring, category).

    • +
    • locks (str) – one or more lockstrings, separated by semicolons.

    • +
    • aliases (list) – A list of alternative keys or tuples (aliasstring, category).

    • +
    • tags (list) – List of tag keys or tuples (tagkey, category) or (tagkey, category, data).

    • +
    • destination (Object or str) – Obj or #dbref to use as an Exit’s target.

    • +
    • report_to (Object) – The object to return error messages to.

    • +
    • nohome (bool) – This allows the creation of objects without a +default home location; only used when creating the default +location itself or during unittests.

    • +
    • attributes (list) – Tuples on the form (key, value) or (key, value, category), +(key, value, lockstring) or (key, value, lockstring, default_access). +to set as Attributes on the new object.

    • +
    • nattributes (list) – Non-persistent tuples on the form (key, value). Note that +adding this rarely makes sense since this data will not survive a reload.

    • +
    +
    +
    Returns
    +

    object (Object) – A newly created object of the given typeclass.

    +
    +
    Raises
    +

    ObjectDB.DoesNotExist – If trying to create an Object with +location or home that can’t be found.

    +
    +
    +
    + diff --git a/docs/1.0-dev/api/evennia.scripts.manager.html b/docs/1.0-dev/api/evennia.scripts.manager.html index 50db53bdb6..bccc0b2a67 100644 --- a/docs/1.0-dev/api/evennia.scripts.manager.html +++ b/docs/1.0-dev/api/evennia.scripts.manager.html @@ -59,7 +59,7 @@ and manipulating Scripts directly from the database.

    lists of Typeclasses, whereas Django-general methods will return Querysets or database objects).

    dbref (converter) -get_id (or dbref_search) +dbref_search get_dbref_range object_totals typeclass_search @@ -140,6 +140,9 @@ on a timer.

  • typeclass (class or str) – Typeclass or path to typeclass.

  • +
    Returns
    +

    Queryset – An iterable with 0, 1 or more results.

    +
    @@ -158,6 +161,9 @@ on a timer.

  • typeclass (class or str) – Typeclass or path to typeclass.

  • +
    Returns
    +

    Queryset – An iterable with 0, 1 or more results.

    +
    @@ -186,6 +192,51 @@ the original.

    +
    +
    +create_script(typeclass=None, key=None, obj=None, account=None, locks=None, interval=None, start_delay=None, repeats=None, persistent=None, autostart=True, report_to=None, desc=None, tags=None, attributes=None)[source]
    +

    Create a new script. All scripts are a combination of a database +object that communicates with the database, and an typeclass that +‘decorates’ the database object into being different types of +scripts. It’s behaviour is similar to the game objects except +scripts has a time component and are more limited in scope.

    +
    +
    Keyword Arguments
    +
      +
    • typeclass (class or str) – Class or python path to a typeclass.

    • +
    • key (str) – Name of the new object. If not set, a name of +#dbref will be set.

    • +
    • obj (Object) – The entity on which this Script sits. If this +is None, we are creating a “global” script.

    • +
    • account (Account) – The account on which this Script sits. It is +exclusiv to obj.

    • +
    • locks (str) – one or more lockstrings, separated by semicolons.

    • +
    • interval (int) – The triggering interval for this Script, in +seconds. If unset, the Script will not have a timing +component.

    • +
    • start_delay (bool) – If True, will wait interval seconds +before triggering the first time.

    • +
    • repeats (int) – The number of times to trigger before stopping. +If unset, will repeat indefinitely.

    • +
    • persistent (bool) – If this Script survives a server shutdown +or not (all Scripts will survive a reload).

    • +
    • autostart (bool) – If this Script will start immediately when +created or if the start method must be called explicitly.

    • +
    • report_to (Object) – The object to return error messages to.

    • +
    • desc (str) – Optional description of script

    • +
    • tags (list) – List of tags or tuples (tag, category).

    • +
    • attributes (list) – List if tuples (key, value) or (key, value, category) +(key, value, lockstring) or (key, value, lockstring, default_access).

    • +
    +
    +
    Returns
    +

    script (obj) – An instance of the script created

    +
    +
    +

    See evennia.scripts.manager for methods to manipulate existing +scripts in the database.

    +
    + diff --git a/docs/1.0-dev/api/evennia.scripts.monitorhandler.html b/docs/1.0-dev/api/evennia.scripts.monitorhandler.html index 16833ab4fa..fc597733a1 100644 --- a/docs/1.0-dev/api/evennia.scripts.monitorhandler.html +++ b/docs/1.0-dev/api/evennia.scripts.monitorhandler.html @@ -100,7 +100,7 @@ non-persistent tickers must be killed.

    -add(obj, fieldname, callback, idstring='', persistent=False, **kwargs)[source]
    +add(obj, fieldname, callback, idstring='', persistent=False, category=None, **kwargs)[source]

    Add monitoring to a given field or Attribute. A field must be specified with the full db_* name or it will be assumed to be an Attribute (so db_key, not just key).

    @@ -116,6 +116,9 @@ where kwargs holds keys fieldname and obj.

    of the same field and object.

  • persistent (bool, optional) – If False, the monitor will survive a server reload but not a cold restart. This is default.

  • +
  • category (str, optional) – This is only used if fieldname refers to +an Attribute (i.e. it does not start with db_). You must specify this +if you want to target an Attribute with a category.

  • Keyword Arguments
    @@ -132,7 +135,7 @@ all kwargs must be possible to pickle!

    -remove(obj, fieldname, idstring='')[source]
    +remove(obj, fieldname, idstring='', category=None)[source]

    Remove a monitor.

    diff --git a/docs/1.0-dev/api/evennia.typeclasses.managers.html b/docs/1.0-dev/api/evennia.typeclasses.managers.html index 16d9b2b2ce..9ed3787bde 100644 --- a/docs/1.0-dev/api/evennia.typeclasses.managers.html +++ b/docs/1.0-dev/api/evennia.typeclasses.managers.html @@ -361,7 +361,7 @@ either a string ‘#N’ or an integer N.

    dbref (str or int) – The id to search for.

    Returns
    -

    object (TypedObject) – The matched object.

    +

    Queryset – Queryset with 0 or 1 match.

    diff --git a/docs/1.0-dev/api/evennia.utils.create.html b/docs/1.0-dev/api/evennia.utils.create.html index ed964fe7f5..633baab511 100644 --- a/docs/1.0-dev/api/evennia.utils.create.html +++ b/docs/1.0-dev/api/evennia.utils.create.html @@ -53,7 +53,7 @@ utils.search module and allows you to do the shorter create.object()
    -evennia.utils.create.create_object(typeclass=None, key=None, location=None, home=None, permissions=None, locks=None, aliases=None, tags=None, destination=None, report_to=None, nohome=False, attributes=None, nattributes=None)[source]
    +evennia.utils.create.create_object(typeclass=None, key=None, location=None, home=None, permissions=None, locks=None, aliases=None, tags=None, destination=None, report_to=None, nohome=False, attributes=None, nattributes=None)

    Create a new in-game object.

    Keyword Arguments
    @@ -91,7 +91,7 @@ adding this rarely makes sense since this data will not survive a reload.

    -evennia.utils.create.create_script(typeclass=None, key=None, obj=None, account=None, locks=None, interval=None, start_delay=None, repeats=None, persistent=None, autostart=True, report_to=None, desc=None, tags=None, attributes=None)[source]
    +evennia.utils.create.create_script(typeclass=None, key=None, obj=None, account=None, locks=None, interval=None, start_delay=None, repeats=None, persistent=None, autostart=True, report_to=None, desc=None, tags=None, attributes=None)

    Create a new script. All scripts are a combination of a database object that communicates with the database, and an typeclass that ‘decorates’ the database object into being different types of @@ -136,7 +136,7 @@ scripts in the database.

    -evennia.utils.create.create_help_entry(key, entrytext, category='General', locks=None, aliases=None, tags=None)[source]
    +evennia.utils.create.create_help_entry(key, entrytext, category='General', locks=None, aliases=None, tags=None)

    Create a static help entry in the help database. Note that Command help entries are dynamic and directly taken from the __doc__ entries of the command. The database-stored help entries are @@ -161,7 +161,7 @@ in-game setting information and so on.

    -evennia.utils.create.create_message(senderobj, message, receivers=None, locks=None, tags=None, header=None, **kwargs)[source]
    +evennia.utils.create.create_message(senderobj, message, receivers=None, locks=None, tags=None, header=None, **kwargs)

    Create a new communication Msg. Msgs represent a unit of database-persistent communication between entites.

    @@ -190,7 +190,7 @@ it’s up to the command definitions to limit this as desired.

    -evennia.utils.create.create_channel(key, aliases=None, desc=None, locks=None, keep_log=True, typeclass=None, tags=None)[source]
    +evennia.utils.create.create_channel(key, aliases=None, desc=None, locks=None, keep_log=True, typeclass=None, tags=None)

    Create A communication Channel. A Channel serves as a central hub for distributing Msgs to groups of people without specifying the receivers explicitly. Instead accounts may ‘connect’ to the channel @@ -220,7 +220,7 @@ often used).

    -evennia.utils.create.create_account(key, email, password, typeclass=None, is_superuser=False, locks=None, permissions=None, tags=None, attributes=None, report_to=None)[source]
    +evennia.utils.create.create_account(key, email, password, typeclass=None, is_superuser=False, locks=None, permissions=None, tags=None, attributes=None, report_to=None)

    This creates a new account.

    Parameters
    diff --git a/docs/1.0-dev/api/evennia.utils.eveditor.html b/docs/1.0-dev/api/evennia.utils.eveditor.html index ffe8b0843c..3a8cd72b08 100644 --- a/docs/1.0-dev/api/evennia.utils.eveditor.html +++ b/docs/1.0-dev/api/evennia.utils.eveditor.html @@ -277,7 +277,7 @@ indentation.

    -aliases = [':', ':<', ':w', ':x', ':uu', ':!', ':wq', ':y', ':i', ':=', ':q', ':fd', ':dd', ':u', ':I', ':j', '::', ':UU', ':s', ':fi', ':dw', ':r', ':echo', ':q!', ':f', ':h', ':DD', ':p', ':A', ':S', ':>', ':::']
    +aliases = [':u', ':p', ':x', ':q', ':DD', ':fd', ':f', ':<', ':S', ':j', ':A', ':s', ':fi', ':::', ':h', ':q!', ':=', ':echo', ':', '::', ':dd', ':dw', ':i', ':UU', ':!', ':uu', ':w', ':r', ':I', ':wq', ':>', ':y']
    @@ -305,7 +305,7 @@ efficient presentation.

    -search_index_entry = {'aliases': ': :< :w :x :uu :! :wq :y :i := :q :fd :dd :u :I :j :: :UU :s :fi :dw :r :echo :q! :f :h :DD :p :A :S :> :::', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' : :< :w :x :uu :! :wq :y :i := :q :fd :dd :u :I :j :: :UU :s :fi :dw :r :echo :q! :f :h :DD :p :A :S :> :::', 'tags': '', 'text': '\n Commands for the editor\n '}
    +search_index_entry = {'aliases': ':u :p :x :q :DD :fd :f :< :S :j :A :s :fi ::: :h :q! := :echo : :: :dd :dw :i :UU :! :uu :w :r :I :wq :> :y', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :u :p :x :q :DD :fd :f :< :S :j :A :s :fi ::: :h :q! := :echo : :: :dd :dw :i :UU :! :uu :w :r :I :wq :> :y', 'tags': '', 'text': '\n Commands for the editor\n '}
    diff --git a/docs/1.0-dev/api/evennia.utils.evmenu.html b/docs/1.0-dev/api/evennia.utils.evmenu.html index 07c4a932c7..31be6a195b 100644 --- a/docs/1.0-dev/api/evennia.utils.evmenu.html +++ b/docs/1.0-dev/api/evennia.utils.evmenu.html @@ -947,7 +947,7 @@ single question.

    -aliases = ['no', 'a', 'yes', 'y', '__nomatch_command', 'n', 'abort']
    +aliases = ['no', '__nomatch_command', 'y', 'abort', 'n', 'yes', 'a']
    @@ -973,7 +973,7 @@ single question.

    -search_index_entry = {'aliases': 'no a yes y __nomatch_command n abort', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' no a yes y __nomatch_command n abort', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
    +search_index_entry = {'aliases': 'no __nomatch_command y abort n yes a', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' no __nomatch_command y abort n yes a', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
    diff --git a/docs/1.0-dev/api/evennia.utils.evmore.html b/docs/1.0-dev/api/evennia.utils.evmore.html index c402b4c9ea..0bbd47cc09 100644 --- a/docs/1.0-dev/api/evennia.utils.evmore.html +++ b/docs/1.0-dev/api/evennia.utils.evmore.html @@ -78,7 +78,7 @@ the caller.msg() construct every time the page is updated.

    -aliases = ['a', 'quit', 'previous', 'top', 'end', 't', 'p', 'n', 'q', 'e', 'next', 'abort']
    +aliases = ['q', 't', 'quit', 'top', 'abort', 'n', 'e', 'previous', 'end', 'p', 'next', 'a']
    @@ -104,7 +104,7 @@ the caller.msg() construct every time the page is updated.

    -search_index_entry = {'aliases': 'a quit previous top end t p n q e next abort', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' a quit previous top end t p n q e next abort', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
    +search_index_entry = {'aliases': 'q t quit top abort n e previous end p next a', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' q t quit top abort n e previous end p next a', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
    diff --git a/docs/1.0-dev/api/evennia.utils.search.html b/docs/1.0-dev/api/evennia.utils.search.html index dfa77a3552..3c9fd0f702 100644 --- a/docs/1.0-dev/api/evennia.utils.search.html +++ b/docs/1.0-dev/api/evennia.utils.search.html @@ -121,6 +121,9 @@ otherwise also match also keys containing the ostring accounts of this typeclass.

    +
    Returns
    +

    Queryset – A queryset (an iterable) with 0, 1 or more matches.

    +
    @@ -139,6 +142,9 @@ on a timer.

  • typeclass (class or str) – Typeclass or path to typeclass.

  • +
    Returns
    +

    Queryset – An iterable with 0, 1 or more results.

    +
    @@ -162,7 +168,7 @@ always gives only one match.

    Returns
    -

    Queryset – Message matches.

    +

    Queryset – Iterable with 0, 1 or more matches.

    @@ -179,6 +185,9 @@ always gives only one match.

    case sensitive) match.

    +
    Returns
    +

    Queryset – Iterable with 0, 1 or more matches.

    +
    @@ -193,6 +202,9 @@ case sensitive) match.

  • category (str) – Limit the search to a particular help topic

  • +
    Returns
    +

    Queryset – An iterable with 0, 1 or more matches.

    +
    diff --git a/docs/1.0-dev/api/evennia.utils.test_resources.html b/docs/1.0-dev/api/evennia.utils.test_resources.html index 12f4c714f6..6f164e9de1 100644 --- a/docs/1.0-dev/api/evennia.utils.test_resources.html +++ b/docs/1.0-dev/api/evennia.utils.test_resources.html @@ -119,21 +119,6 @@ loaded once).

    alias of evennia.scripts.scripts.DefaultScript

    -
    -
    -save_backups()[source]
    -
    - -
    -
    -restore_backups()[source]
    -
    - -
    -
    -mock_sessions()[source]
    -
    -
    create_accounts()[source]
    diff --git a/docs/1.0-dev/genindex.html b/docs/1.0-dev/genindex.html index 1c1b496942..f2aab4e5ab 100644 --- a/docs/1.0-dev/genindex.html +++ b/docs/1.0-dev/genindex.html @@ -438,8 +438,6 @@
  • account_count() (evennia.server.sessionhandler.ServerSessionHandler method) -
  • -
  • account_mode (evennia.commands.default.building.CmdExamine attribute)
  • account_search() (evennia.accounts.manager.AccountDBManager method)
  • @@ -1311,10 +1309,10 @@
  • ANSITextWrapper (class in evennia.utils.evtable)
  • - - + - + -
  • create_account() (in module evennia.utils.create) +
  • create_account() (evennia.accounts.manager.AccountDBManager method) + +
  • create_accounts() (evennia.utils.test_resources.EvenniaTestMixin method)
  • create_attribute() (evennia.typeclasses.attributes.IAttributeBackend method) @@ -3972,6 +3974,8 @@
  • create_channel() (evennia.commands.default.comms.CmdChannel method)
  • @@ -3996,16 +4000,24 @@
  • create_fantasy_word() (in module evennia.contrib.full_systems.evscaperoom.utils)
  • create_game_directory() (in module evennia.server.evennia_launcher) +
  • +
  • create_help() (evennia.help.manager.HelpEntryManager method)
  • create_help_entry() (in module evennia.utils.create)
  • create_match() (in module evennia.commands.cmdparser)
  • -
  • create_message() (in module evennia.utils.create) +
  • create_message() (evennia.comms.managers.MsgManager method) + +
  • create_object() (evennia.contrib.full_systems.evscaperoom.state.BaseState method)
  • @@ -4017,9 +4029,11 @@
  • create_rooms() (evennia.utils.test_resources.EvenniaTestMixin method)
  • -
  • create_script() (evennia.utils.test_resources.EvenniaTestMixin method) +
  • create_script() (evennia.scripts.manager.ScriptDBManager method)
  • @@ -7768,6 +7782,12 @@
  • format_available_protfuncs() (in module evennia.prototypes.prototypes)
  • format_callback() (evennia.contrib.base_systems.ingame_python.callbackhandler.CallbackHandler static method) +
  • +
  • format_channel_account_subs() (evennia.commands.default.building.CmdExamine method) +
  • +
  • format_channel_object_subs() (evennia.commands.default.building.CmdExamine method) +
  • +
  • format_channel_sub_totals() (evennia.commands.default.building.CmdExamine method)
  • format_chars() (evennia.commands.default.building.CmdExamine method)
  • @@ -7808,6 +7828,12 @@
  • format_output() (evennia.commands.default.building.CmdExamine method)
  • format_permissions() (evennia.commands.default.building.CmdExamine method) +
  • +
  • format_script_desc() (evennia.commands.default.building.CmdExamine method) +
  • +
  • format_script_is_persistent() (evennia.commands.default.building.CmdExamine method) +
  • +
  • format_script_timer_data() (evennia.commands.default.building.CmdExamine method)
  • format_scripts() (evennia.commands.default.building.CmdExamine method)
  • @@ -12428,8 +12454,6 @@
  • Mob.MultipleObjectsReturned
  • MobCmdSet (class in evennia.contrib.tutorials.tutorial_world.mob) -
  • -
  • mock_sessions() (evennia.utils.test_resources.EvenniaTestMixin method)
  • mockdeferLater() (in module evennia.utils.test_resources)
  • @@ -13763,6 +13787,8 @@
  • object_subscription_set (evennia.objects.models.ObjectDB attribute)
  • object_totals() (evennia.typeclasses.managers.TypedObjectManager method) +
  • +
  • object_type (evennia.commands.default.building.CmdExamine attribute)
  • object_typeclass (evennia.utils.test_resources.EvenniaTest attribute) @@ -15298,8 +15324,6 @@
  • (evennia.scripts.tickerhandler.TickerHandler method)
  • -
  • restore_backups() (evennia.utils.test_resources.EvenniaTestMixin method) -
  • retain_instance (evennia.commands.command.Command attribute)
  • return_appearance() (evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject method) @@ -15504,8 +15528,6 @@
  • (evennia.web.admin.server.ServerConfigAdmin attribute)
  • -
  • save_backups() (evennia.utils.test_resources.EvenniaTestMixin method) -
  • save_buffer() (evennia.utils.eveditor.EvEditor method)
  • save_for_next (evennia.commands.command.Command attribute) @@ -16332,10 +16354,10 @@
  • (evennia.server.portal.webclient_ajax.AjaxWebClientSession method)
  • - - +