From 5ed4efea194bff232e860e85833ed0d9a7fa5c79 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 29 May 2021 18:36:15 +0200 Subject: [PATCH] Updated HTML docs --- docs/0.9.5/.buildinfo | 2 +- .../_modules/evennia/objects/objects.html | 24 +-- .../evennia/scripts/scripthandler.html | 14 +- .../api/evennia.commands.default.account.html | 4 +- .../evennia.commands.default.building.html | 8 +- .../api/evennia.commands.default.comms.html | 4 +- .../api/evennia.commands.default.general.html | 12 +- .../api/evennia.commands.default.system.html | 8 +- .../evennia.commands.default.unloggedin.html | 16 +- docs/0.9.5/api/evennia.contrib.chargen.html | 4 +- docs/0.9.5/api/evennia.contrib.clothing.html | 4 +- docs/0.9.5/api/evennia.contrib.dice.html | 4 +- .../api/evennia.contrib.email_login.html | 16 +- .../api/evennia.contrib.extended_room.html | 4 +- docs/0.9.5/api/evennia.contrib.rpsystem.html | 4 +- ....contrib.tutorial_examples.red_button.html | 16 +- ...vennia.contrib.tutorial_world.objects.html | 16 +- .../evennia.contrib.tutorial_world.rooms.html | 8 +- 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/1.0-dev/.buildinfo | 2 +- .../Concepts/Internationalization.html | 186 +++++++++++++----- docs/1.0-dev/Contributing-Docs.html | 7 +- .../_modules/evennia/objects/objects.html | 24 +-- .../evennia/scripts/scripthandler.html | 14 +- .../Concepts/Internationalization.md.txt | 147 +++++++++----- .../1.0-dev/_sources/Contributing-Docs.md.txt | 67 +++---- .../evennia.commands.default.building.html | 12 +- .../api/evennia.commands.default.comms.html | 8 +- .../api/evennia.commands.default.general.html | 16 +- .../api/evennia.commands.default.system.html | 4 +- .../evennia.commands.default.unloggedin.html | 20 +- docs/1.0-dev/api/evennia.contrib.dice.html | 4 +- .../api/evennia.contrib.email_login.html | 20 +- .../evennia.contrib.evscaperoom.commands.html | 24 +-- ...vennia.contrib.ingame_python.commands.html | 4 +- .../1.0-dev/api/evennia.contrib.rpsystem.html | 4 +- ....contrib.tutorial_examples.red_button.html | 16 +- ...vennia.contrib.tutorial_world.objects.html | 12 +- .../evennia.contrib.tutorial_world.rooms.html | 8 +- 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/objects.inv | Bin 87127 -> 87148 bytes docs/1.0-dev/searchindex.js | 2 +- 46 files changed, 464 insertions(+), 329 deletions(-) diff --git a/docs/0.9.5/.buildinfo b/docs/0.9.5/.buildinfo index 8fd1e09f2e..de4b2deb66 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: c74856f47440da8d1a4398a453cffae5 +config: ea70b0258e38b75894a7ba9a9b859b1d tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/0.9.5/_modules/evennia/objects/objects.html b/docs/0.9.5/_modules/evennia/objects/objects.html index 3cf83d47d1..0b5f7f7202 100644 --- a/docs/0.9.5/_modules/evennia/objects/objects.html +++ b/docs/0.9.5/_modules/evennia/objects/objects.html @@ -909,7 +909,7 @@ self.msg("%s%s" % (string, "" if err is None else " (%s)" % err)) return - errtxt = _("Couldn't perform move ('%s'). Contact an admin.") + errtxt = _("Couldn't perform move ({err}). Contact an admin.") if not emit_to_obj: emit_to_obj = self @@ -931,7 +931,7 @@ if not self.at_before_move(destination, **kwargs): return False except Exception as err: - logerr(errtxt % "at_before_move()", err) + logerr(errtxt.format(err="at_before_move()"), err) return False # Save the old location @@ -942,7 +942,7 @@ try: source_location.at_object_leave(self, destination, **kwargs) except Exception as err: - logerr(errtxt % "at_object_leave()", err) + logerr(errtxt.format(err="at_object_leave()"), err) return False if not quiet: @@ -950,14 +950,14 @@ try: self.announce_move_from(destination, **kwargs) except Exception as err: - logerr(errtxt % "at_announce_move()", err) + logerr(errtxt.format(err="at_announce_move()"), err) return False # Perform move try: self.location = destination except Exception as err: - logerr(errtxt % "location change", err) + logerr(errtxt.format(err="location change"), err) return False if not quiet: @@ -965,7 +965,7 @@ try: self.announce_move_to(source_location, **kwargs) except Exception as err: - logerr(errtxt % "announce_move_to()", err) + logerr(errtxt.format(err="announce_move_to()"), err) return False if move_hooks: @@ -974,7 +974,7 @@ try: destination.at_object_receive(self, source_location, **kwargs) except Exception as err: - logerr(errtxt % "at_object_receive()", err) + logerr(errtxt.format(err="at_object_receive()"), err) return False # Execute eventual extra commands on this object after moving it @@ -983,7 +983,7 @@ try: self.at_after_move(source_location, **kwargs) except Exception as err: - logerr(errtxt % "at_after_move", err) + logerr(errtxt.format(err="at_after_move"), err) return False return True @@ -1012,8 +1012,8 @@ # we are deleting default home! default_home = None except Exception: - string = _("Could not find default home '(#%d)'.") - logger.log_err(string % default_home_id) + string = _("Could not find default home '(#{dbid})'.") + logger.log_err(string.format(dbid=default_home_id)) default_home = None for obj in self.contents: @@ -1034,8 +1034,8 @@ if obj.has_account: if home: string = "Your current location has ceased to exist," - string += " moving you to %s(#%d)." - obj.msg(_(string) % (home.name, home.dbid)) + string += " moving you to (#{dbid})." + obj.msg(_(string).format(dbid=home.dbid)) else: # Famous last words: The account should never see this. string = "This place should not exist ... contact an admin." diff --git a/docs/0.9.5/_modules/evennia/scripts/scripthandler.html b/docs/0.9.5/_modules/evennia/scripts/scripthandler.html index 47e24f4a50..2cde5eba8a 100644 --- a/docs/0.9.5/_modules/evennia/scripts/scripthandler.html +++ b/docs/0.9.5/_modules/evennia/scripts/scripthandler.html @@ -89,15 +89,11 @@ next_repeat = script.time_until_next_repeat() except Exception: next_repeat = "?" - string += _( - "\n '%(key)s' (%(next_repeat)s/%(interval)s, %(repeats)s repeats): %(desc)s" - ) % { - "key": script.key, - "next_repeat": next_repeat, - "interval": interval, - "repeats": repeats, - "desc": script.desc, - } + string += _("\n '{key}' ({next_repeat}/{interval}, {repeats} repeats): {desc}").format( + key=script.key, next_repeat=next_repeat, + interval=interval, + repeats=repeats, + desc=script.desc) return string.strip()
[docs] def add(self, scriptclass, key=None, autostart=True): 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 4f3e3d9900..78b2b2919a 100644 --- a/docs/0.9.5/api/evennia.commands.default.account.html +++ b/docs/0.9.5/api/evennia.commands.default.account.html @@ -70,7 +70,7 @@ method. Otherwise all text will be returned to all connected sessions.

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

-search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', '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', '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.building.html b/docs/0.9.5/api/evennia.commands.default.building.html index 7c5a523e70..eed3134b52 100644 --- a/docs/0.9.5/api/evennia.commands.default.building.html +++ b/docs/0.9.5/api/evennia.commands.default.building.html @@ -1268,7 +1268,7 @@ server settings.

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

-search_index_entry = {'aliases': 'swap parent update type', 'category': 'building', 'key': 'typeclass', '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 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.\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': 'parent swap type update', 'category': 'building', 'key': 'typeclass', '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 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.\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 "}
@@ -1452,7 +1452,7 @@ If object is not specified, the current location is examined.

-aliases = ['exam', 'ex']
+aliases = ['ex', 'exam']
@@ -1549,7 +1549,7 @@ non-persistent data stored on object

-search_index_entry = {'aliases': 'exam ex', 'category': 'building', 'key': 'examine', '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': 'ex exam', 'category': 'building', 'key': 'examine', '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 '}
diff --git a/docs/0.9.5/api/evennia.commands.default.comms.html b/docs/0.9.5/api/evennia.commands.default.comms.html index da4c775600..4c806bd6a0 100644 --- a/docs/0.9.5/api/evennia.commands.default.comms.html +++ b/docs/0.9.5/api/evennia.commands.default.comms.html @@ -801,7 +801,7 @@ for that channel.

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

-search_index_entry = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', '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': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', '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/0.9.5/api/evennia.commands.default.general.html b/docs/0.9.5/api/evennia.commands.default.general.html index 7cf21e3698..3a21d3238e 100644 --- a/docs/0.9.5/api/evennia.commands.default.general.html +++ b/docs/0.9.5/api/evennia.commands.default.general.html @@ -112,7 +112,7 @@ look *<account&g
-aliases = ['l', 'ls']
+aliases = ['ls', 'l']
@@ -143,7 +143,7 @@ look *<account&g
-search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', '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', '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 '}
@@ -205,7 +205,7 @@ for everyone to use, you need build privileges and the alias command.

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

-search_index_entry = {'aliases': 'nicks nickname', 'category': 'general', 'key': 'nick', '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', '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 '}
@@ -260,7 +260,7 @@ inv

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

-search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
+search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\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 6251c8374d..96982b1fe5 100644 --- a/docs/0.9.5/api/evennia.commands.default.system.html +++ b/docs/0.9.5/api/evennia.commands.default.system.html @@ -385,7 +385,7 @@ given, <nr> defaults to 10.

-aliases = ['listobjs', 'listobjects', 'stats', 'db']
+aliases = ['db', 'listobjs', 'listobjects', 'stats']
@@ -411,7 +411,7 @@ given, <nr> defaults to 10.

-search_index_entry = {'aliases': 'listobjs listobjects stats db', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [<nr>]\n\n Gives statictics on objects in database as well as\n a list of <nr> latest objects in database. If not\n given, <nr> defaults to 10.\n '}
+search_index_entry = {'aliases': 'db listobjs listobjects stats', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [<nr>]\n\n Gives statictics on objects in database as well as\n a list of <nr> latest objects in database. If not\n given, <nr> defaults to 10.\n '}
@@ -612,7 +612,7 @@ the released memory will instead be re-used by the program.

-aliases = ['serverload', 'serverprocess']
+aliases = ['serverprocess', 'serverload']
@@ -643,7 +643,7 @@ the released memory will instead be re-used by the program.

-search_index_entry = {'aliases': 'serverload serverprocess', 'category': 'system', 'key': 'server', 'tags': '', 'text': "\n show server load and memory statistics\n\n Usage:\n server[/mem]\n\n Switches:\n mem - return only a string of the current memory usage\n flushmem - flush the idmapper cache\n\n This command shows server load statistics and dynamic memory\n usage. It also allows to flush the cache of accessed database\n objects.\n\n Some Important statistics in the table:\n\n |wServer load|n is an average of processor usage. It's usually\n between 0 (no usage) and 1 (100% usage), but may also be\n temporarily higher if your computer has multiple CPU cores.\n\n The |wResident/Virtual memory|n displays the total memory used by\n the server process.\n\n Evennia |wcaches|n all retrieved database entities when they are\n loaded by use of the idmapper functionality. This allows Evennia\n to maintain the same instances of an entity and allowing\n non-persistent storage schemes. The total amount of cached objects\n are displayed plus a breakdown of database object types.\n\n The |wflushmem|n switch allows to flush the object cache. Please\n note that due to how Python's memory management works, releasing\n caches may not show you a lower Residual/Virtual memory footprint,\n the released memory will instead be re-used by the program.\n\n "}
+search_index_entry = {'aliases': 'serverprocess serverload', 'category': 'system', 'key': 'server', 'tags': '', 'text': "\n show server load and memory statistics\n\n Usage:\n server[/mem]\n\n Switches:\n mem - return only a string of the current memory usage\n flushmem - flush the idmapper cache\n\n This command shows server load statistics and dynamic memory\n usage. It also allows to flush the cache of accessed database\n objects.\n\n Some Important statistics in the table:\n\n |wServer load|n is an average of processor usage. It's usually\n between 0 (no usage) and 1 (100% usage), but may also be\n temporarily higher if your computer has multiple CPU cores.\n\n The |wResident/Virtual memory|n displays the total memory used by\n the server process.\n\n Evennia |wcaches|n all retrieved database entities when they are\n loaded by use of the idmapper functionality. This allows Evennia\n to maintain the same instances of an entity and allowing\n non-persistent storage schemes. The total amount of cached objects\n are displayed plus a breakdown of database object types.\n\n The |wflushmem|n switch allows to flush the object cache. Please\n note that due to how Python's memory management works, releasing\n caches may not show you a lower Residual/Virtual memory footprint,\n the released memory will instead be re-used by the program.\n\n "}
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 a8ddd44f77..edbd9911c5 100644 --- a/docs/0.9.5/api/evennia.commands.default.unloggedin.html +++ b/docs/0.9.5/api/evennia.commands.default.unloggedin.html @@ -59,7 +59,7 @@ connect “account name” “pass word”

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

-search_index_entry = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', '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 co conn', 'category': 'general', 'key': 'connect', '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 '}
@@ -118,7 +118,7 @@ create “account name” “pass word”

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

-search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', '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', '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 '}
@@ -173,7 +173,7 @@ version is a bit more complicated.

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

-search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', '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': 'qu q', 'category': 'general', 'key': 'quit', '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 '}
@@ -223,7 +223,7 @@ All it does is display the connect screen.

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

-search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', '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', '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/0.9.5/api/evennia.contrib.chargen.html b/docs/0.9.5/api/evennia.contrib.chargen.html index b343048ffd..32a3d0e683 100644 --- a/docs/0.9.5/api/evennia.contrib.chargen.html +++ b/docs/0.9.5/api/evennia.contrib.chargen.html @@ -77,7 +77,7 @@ at them with this command.

-aliases = ['l', 'ls']
+aliases = ['ls', 'l']
@@ -109,7 +109,7 @@ that is checked by the @ic command directly.

-search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n ooc look\n\n Usage:\n look\n look <character>\n\n This is an OOC version of the look command. Since an Account doesn\'t\n have an in-game existence, there is no concept of location or\n "self".\n\n If any characters are available for you to control, you may look\n at them with this command.\n '}
+search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n ooc look\n\n Usage:\n look\n look <character>\n\n This is an OOC version of the look command. Since an Account doesn\'t\n have an in-game existence, there is no concept of location or\n "self".\n\n If any characters are available for you to control, you may look\n at them with this command.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.clothing.html b/docs/0.9.5/api/evennia.contrib.clothing.html index 33a8e557e3..44833552b2 100644 --- a/docs/0.9.5/api/evennia.contrib.clothing.html +++ b/docs/0.9.5/api/evennia.contrib.clothing.html @@ -628,7 +628,7 @@ inv

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

-search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
+search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.dice.html b/docs/0.9.5/api/evennia.contrib.dice.html index 04b8a5a026..3be96b4b1e 100644 --- a/docs/0.9.5/api/evennia.contrib.dice.html +++ b/docs/0.9.5/api/evennia.contrib.dice.html @@ -149,7 +149,7 @@ everyone but the person rolling.

-aliases = ['@dice', 'roll']
+aliases = ['roll', '@dice']
@@ -175,7 +175,7 @@ everyone but the person rolling.

-search_index_entry = {'aliases': '@dice roll', 'category': 'general', 'key': 'dice', 'tags': '', 'text': "\n roll dice\n\n Usage:\n dice[/switch] <nr>d<sides> [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 < 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (<,>,<=,>=,==,!=). So e.g. 2d6 + 3 > 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n "}
+search_index_entry = {'aliases': 'roll @dice', 'category': 'general', 'key': 'dice', 'tags': '', 'text': "\n roll dice\n\n Usage:\n dice[/switch] <nr>d<sides> [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 < 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (<,>,<=,>=,==,!=). So e.g. 2d6 + 3 > 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n "}
diff --git a/docs/0.9.5/api/evennia.contrib.email_login.html b/docs/0.9.5/api/evennia.contrib.email_login.html index 0f906298ce..deef50a912 100644 --- a/docs/0.9.5/api/evennia.contrib.email_login.html +++ b/docs/0.9.5/api/evennia.contrib.email_login.html @@ -74,7 +74,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.

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

-search_index_entry = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', '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 co conn', 'category': 'general', 'key': 'connect', '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 '}
@@ -126,7 +126,7 @@ there is no object yet before the account has logged in)

-aliases = ['cre', 'cr']
+aliases = ['cr', 'cre']
@@ -162,7 +162,7 @@ name enclosed in quotes:

-search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}
+search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}
@@ -181,7 +181,7 @@ version is a bit more complicated.

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

-search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', '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': 'qu q', 'category': 'general', 'key': 'quit', '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 '}
@@ -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', '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', '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/0.9.5/api/evennia.contrib.extended_room.html b/docs/0.9.5/api/evennia.contrib.extended_room.html index 32590f9f50..f40cee98b4 100644 --- a/docs/0.9.5/api/evennia.contrib.extended_room.html +++ b/docs/0.9.5/api/evennia.contrib.extended_room.html @@ -276,7 +276,7 @@ look *<account&g
-aliases = ['l', 'ls']
+aliases = ['ls', 'l']
@@ -296,7 +296,7 @@ look *<account&g
-search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', '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', '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/0.9.5/api/evennia.contrib.rpsystem.html b/docs/0.9.5/api/evennia.contrib.rpsystem.html index a29f5624b4..e77d158964 100644 --- a/docs/0.9.5/api/evennia.contrib.rpsystem.html +++ b/docs/0.9.5/api/evennia.contrib.rpsystem.html @@ -801,7 +801,7 @@ Using the command without arguments will list all current recogs.

-aliases = ['forget', 'recognize']
+aliases = ['recognize', 'forget']
@@ -828,7 +828,7 @@ Using the command without arguments will list all current recogs.

-search_index_entry = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}
+search_index_entry = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.tutorial_examples.red_button.html b/docs/0.9.5/api/evennia.contrib.tutorial_examples.red_button.html index 6657af2c57..3a78b734c0 100644 --- a/docs/0.9.5/api/evennia.contrib.tutorial_examples.red_button.html +++ b/docs/0.9.5/api/evennia.contrib.tutorial_examples.red_button.html @@ -79,7 +79,7 @@ such as when closing the lid and un-blinding a character.

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

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

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

-search_index_entry = {'aliases': 'break lid smash smash lid', 'category': 'general', 'key': 'smash glass', '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 smash lid break lid', 'category': 'general', 'key': 'smash glass', '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 '}
@@ -305,7 +305,7 @@ be mutually exclusive.

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

-search_index_entry = {'aliases': 'push press press button', 'category': 'general', 'key': 'push button', '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', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}
@@ -432,7 +432,7 @@ be mutually exclusive.

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

-search_index_entry = {'aliases': 'get l feel listen ex examine', 'category': 'general', 'key': 'look', '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': 'ex examine listen l feel get', 'category': 'general', 'key': 'look', '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/0.9.5/api/evennia.contrib.tutorial_world.objects.html b/docs/0.9.5/api/evennia.contrib.tutorial_world.objects.html index a1fb235b31..9d63160f8b 100644 --- a/docs/0.9.5/api/evennia.contrib.tutorial_world.objects.html +++ b/docs/0.9.5/api/evennia.contrib.tutorial_world.objects.html @@ -361,7 +361,7 @@ of the object. We overload it with our own version.

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

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

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

-search_index_entry = {'aliases': 'push pull move shiftroot', 'category': 'tutorialworld', 'key': 'shift', '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 push shiftroot move', 'category': 'tutorialworld', 'key': 'shift', '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 '}
@@ -545,7 +545,7 @@ yellow/green - horizontal roots

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

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

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

-search_index_entry = {'aliases': 'hit pierce thrust fight parry defend kill bash stab slash chop', 'category': 'tutorialworld', 'key': 'attack', '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': 'defend pierce kill hit bash thrust parry slash chop stab fight', 'category': 'tutorialworld', 'key': 'attack', '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/0.9.5/api/evennia.contrib.tutorial_world.rooms.html b/docs/0.9.5/api/evennia.contrib.tutorial_world.rooms.html index 02f9608e16..e55e0b5b25 100644 --- a/docs/0.9.5/api/evennia.contrib.tutorial_world.rooms.html +++ b/docs/0.9.5/api/evennia.contrib.tutorial_world.rooms.html @@ -184,7 +184,7 @@ code except for adding in the details.

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

-search_index_entry = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', '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', '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 '}
@@ -865,7 +865,7 @@ to find something.

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

-search_index_entry = {'aliases': 'fiddle l feel feel around search', 'category': 'tutorialworld', 'key': 'look', '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': 'fiddle l search feel feel around', 'category': 'tutorialworld', 'key': 'look', '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/0.9.5/api/evennia.utils.eveditor.html b/docs/0.9.5/api/evennia.utils.eveditor.html index 1eb21e378c..816e1d5c69 100644 --- a/docs/0.9.5/api/evennia.utils.eveditor.html +++ b/docs/0.9.5/api/evennia.utils.eveditor.html @@ -274,7 +274,7 @@ indentation.

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

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

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

-search_index_entry = {'aliases': 'y yes a no __nomatch_command abort n', 'category': 'general', 'key': '__noinput_command', '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 a n y abort yes', 'category': 'general', 'key': '__noinput_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 aa04be92b1..1515e9b7ba 100644 --- a/docs/0.9.5/api/evennia.utils.evmore.html +++ b/docs/0.9.5/api/evennia.utils.evmore.html @@ -75,7 +75,7 @@ the caller.msg() construct every time the page is updated.

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

-search_index_entry = {'aliases': 'next top a b e end q t abort quit back n', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Manipulate the text paging\n '}
+search_index_entry = {'aliases': 'back b q end a next e n t quit abort top', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Manipulate the text paging\n '}
diff --git a/docs/1.0-dev/.buildinfo b/docs/1.0-dev/.buildinfo index 9fb5c74fa8..295ebe4509 100644 --- a/docs/1.0-dev/.buildinfo +++ b/docs/1.0-dev/.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: a4a874fd34a13d8dd7a1bcc0dd3243c3 +config: 5d75be6a61b954fd9e55545508c69741 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/1.0-dev/Concepts/Internationalization.html b/docs/1.0-dev/Concepts/Internationalization.html index a28a7e615b..ab81cd90e8 100644 --- a/docs/1.0-dev/Concepts/Internationalization.html +++ b/docs/1.0-dev/Concepts/Internationalization.html @@ -43,57 +43,109 @@

Internationalization (often abbreviated i18n since there are 18 characters between the first “i” and the last “n” in that word) allows Evennia’s core server to return texts in other languages than English - without anyone having -to edit the source code. Take a look at the locale directory of the Evennia -installation, there you will find which languages are currently supported.

+to edit the source code.

+

Language-translations are done by volunteers, so support can vary a lot +depending on when a given language was last updated. Below are all languages +(besides English) with some level of support. Generally, any language not +updated after May 2021 will be missing some translations.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Language Code

Language

Last updated

es

Spanish

Aug 2019

fr

French

Nov 2018

it

Italian

Feb 2015

ko

Korean (simplified)

Sep 2019

la

Latin

Feb 2021

pl

Polish

Feb 2019

pt

Portugese

Dec 2015

ru

Russian

Apr 2020

sv

Swedish

June 2021

zh

Chinese (simplified)

May 2019

+

Language translations are found in the evennia/locale +folder. Read below if you want to help improve an existing translation of +contribute a new one.

Changing server language

Change language by adding the following to your mygame/server/conf/settings.py file:

1
-2
-3

-    USE_I18N = True
+2
    USE_I18N = True
     LANGUAGE_CODE = 'en'
 
-

Here 'en' should be changed to the abbreviation for one of the supported -languages found in locale/. Restart the server to activate i18n. The -two-character international language codes are found -here.

-
-

Windows Note: If you get errors concerning gettext or xgettext on Windows, -see the -Django documentation. +

Here 'en' (the default English) should be changed to the abbreviation for one +of the supported languages found in locale/ (and in the list above). Restart +the server to activate i18n.

+
+

Important

+

Even for a ‘fully translated’ language you will still see English text +in many places when you start Evennia. This is because we expect you (the +developer) to know English (you are reading this manual after all). So we +translate hard-coded strings that the end player may see - things you +can’t easily change from your mygame/ folder. Outputs from Commands and +Typeclasses are generally not translated, nor are console/log outputs.

+
+
+available on Github

+

Translating Evennia

-
-

Important

-

Evennia offers translations of hard-coded strings in the server, things like -“Connection closed” or “Server restarted”, strings that end users will see and -which game devs are not supposed to change on their own. Text you see in the log -file or on the command line (like error messages) are generally not translated -(this is a part of Python).

-

In addition, text in default Commands and in default Typeclasses will not be -translated by switching i18n language. To translate Commands and Typeclass -hooks you must overload them in your game directory and translate their returns -to the language you want. This is because from Evennia’s perspective, adding -i18n code to commands tend to add complexity to code that is meant to be -changed anyway. One of the goals of Evennia is to keep the user-changeable code -as clean and easy- to-read as possible.

-

Translations are found in the core evennia/ library, under evennia/evennia/locale/. You must make sure to have cloned this repository from Evennia’s github before you can proceed.

-

If you cannot find your language in evennia/evennia/locale/ it’s because noone has -translated it yet. Alternatively you might have the language but find the +

If you cannot find your language in evennia/evennia/locale/ it’s because noone +has translated it yet. Alternatively you might have the language but find the translation bad … You are welcome to help improve the situation!

To start a new translation you need to first have cloned the Evennia repositry -with GIT and activated a python virtualenv as described on the Setup -Quickstart page.

+with GIT and activated a python virtualenv as described on the +Setup Quickstart page.

Go to evennia/evennia/ - that is, not your game dir, but inside the evennia/ repo itself. If you see the locale/ folder you are in the right place. Make sure your virtualenv is active so the evennia command is available. Then run

@@ -113,26 +165,55 @@ existing translation with eventual new strings found in the server. Running this command will not overwrite any existing strings so you can run it as much as you want.

Next head to locale/<language-code>/LC_MESSAGES and edit the **.po file you -find there. You can edit this with a normal text editor but it is easiest if +find there. You can edit this with a normal text editor but it is easiest if you use a special po-file editor from the web (search the web for “po editor” -for many free alternatives).

-

The concept of translating is simple, it’s just a matter of taking the english -strings you find in the **.po file and add your language’s translation best -you can. The **.po format (and many supporting editors) allow you to mark -translations as “fuzzy”. This tells the system (and future translators) that you -are unsure about the translation, or that you couldn’t find a translation that -exactly matched the intention of the original text. Other translators will see -this and might be able to improve it later. Finally, you need to compile your -translation into a more efficient form. Do so from the evennia folder again:

-
evennia compilemessages
+for many free alternatives), for example:

+
- [gtranslator](https://wiki.gnome.org/Apps/Gtranslator)
+- [poeditor](https://poeditor.com/)
 
-

This will go through all languages and create/update compiled files (**.mo) -for them. This needs to be done whenever a **.po file is updated.

+

The concept of translating is simple, it’s just a matter of taking the english +strings you find in the **.po file and add your language’s translation best +you can. Once you are done, run

+
`evennia compilemessages`
+
+
+

This will compile all languages. Check your language and also check back to your +.po file in case the process updated it - you may need to fill in some missing +header fields and should usually note who did the translation.

When you are done, make sure that everyone can benefit from your translation! -Make a PR against Evennia with the updated **.po and *.mo files. Less -ideally (if git is not your thing) you can also attach them to a new post in our -forums.

+Make a PR against Evennia with the updated **.po file. Less ideally (if git is +not your thing) you can also attach it to a new post in our forums.

+
+

Hints on translation

+

Many of the translation strings use { ... } placeholders. This is because they +are to be used in .format() python operations. While you can change the +order of these if it makes more sense in your language, you must not +translate the variables in these formatting tags - Python will look for them!

+
Original: "|G{key} connected|n"
+Swedish:  "|G{key} anslöt|n"
+
+
+

You must also retain line breaks at the start and end of a message, if any +(your po-editor should stop you if you don’t). Try to also end with the same +sentence delimiter (if that makes sense in your language).

+
Original: "\n(Unsuccessfull tried '{path}')."
+Swedish: "\nMisslyckades med att nå '{path}')."
+
+
+

Finally, try to get a feel for who a string is for. If a special technical term +is used it may be more confusing than helpful to translate it, even if it’s +outside of a {...} tag. Even though the result is a mix of your language and +English, clarity is more important. Many languages may also use the English term +normally and reaching for a translation may make the result sound awkward +instead.

+
Original: "\nError loading cmdset: No cmdset class '{classname}' in '{path}'.
+           \n(Traceback was logged {timestamp})"
+Swedish:  "Fel medan cmdset laddades: Ingen cmdset-klass med namn '{classname}' i {path}.
+           \n(Traceback loggades {timestamp})"
+
+
+
@@ -160,7 +241,10 @@ forums.

diff --git a/docs/1.0-dev/Contributing-Docs.html b/docs/1.0-dev/Contributing-Docs.html index 4f9ccf505b..f1dcb843fb 100644 --- a/docs/1.0-dev/Contributing-Docs.html +++ b/docs/1.0-dev/Contributing-Docs.html @@ -141,7 +141,7 @@ running)

@@ -1013,8 +1013,8 @@ # we are deleting default home! default_home = None except Exception: - string = _("Could not find default home '(#%d)'.") - logger.log_err(string % default_home_id) + string = _("Could not find default home '(#{dbid})'.") + logger.log_err(string.format(dbid=default_home_id)) default_home = None for obj in self.contents: @@ -1035,8 +1035,8 @@ if obj.has_account: if home: string = "Your current location has ceased to exist," - string += " moving you to %s(#%d)." - obj.msg(_(string) % (home.name, home.dbid)) + string += " moving you to (#{dbid})." + obj.msg(_(string).format(dbid=home.dbid)) else: # Famous last words: The account should never see this. string = "This place should not exist ... contact an admin." diff --git a/docs/1.0-dev/_modules/evennia/scripts/scripthandler.html b/docs/1.0-dev/_modules/evennia/scripts/scripthandler.html index fcb57f84f1..ae830725c3 100644 --- a/docs/1.0-dev/_modules/evennia/scripts/scripthandler.html +++ b/docs/1.0-dev/_modules/evennia/scripts/scripthandler.html @@ -90,15 +90,11 @@ next_repeat = script.time_until_next_repeat() except Exception: next_repeat = "?" - string += _( - "\n '%(key)s' (%(next_repeat)s/%(interval)s, %(repeats)s repeats): %(desc)s" - ) % { - "key": script.key, - "next_repeat": next_repeat, - "interval": interval, - "repeats": repeats, - "desc": script.desc, - } + string += _("\n '{key}' ({next_repeat}/{interval}, {repeats} repeats): {desc}").format( + key=script.key, next_repeat=next_repeat, + interval=interval, + repeats=repeats, + desc=script.desc) return string.strip()
[docs] def add(self, scriptclass, key=None, autostart=True): diff --git a/docs/1.0-dev/_sources/Concepts/Internationalization.md.txt b/docs/1.0-dev/_sources/Concepts/Internationalization.md.txt index 5ede19304a..cbd80d1956 100644 --- a/docs/1.0-dev/_sources/Concepts/Internationalization.md.txt +++ b/docs/1.0-dev/_sources/Concepts/Internationalization.md.txt @@ -3,8 +3,43 @@ *Internationalization* (often abbreviated *i18n* since there are 18 characters between the first "i" and the last "n" in that word) allows Evennia's core server to return texts in other languages than English - without anyone having -to edit the source code. Take a look at the `locale` directory of the Evennia -installation, there you will find which languages are currently supported. +to edit the source code. + +Language-translations are done by volunteers, so support can vary a lot +depending on when a given language was last updated. Below are all languages +(besides English) with some level of support. Generally, any language not +updated after May 2021 will be missing some translations. + +```eval_rst + ++---------------+----------------------+--------------+ +| Language Code | Language | Last updated | ++===============+======================+==============+ +| es | Spanish | Aug 2019 | ++---------------+----------------------+--------------+ +| fr | French | Nov 2018 | ++---------------+----------------------+--------------+ +| it | Italian | Feb 2015 | ++---------------+----------------------+--------------+ +| ko | Korean (simplified) | Sep 2019 | ++---------------+----------------------+--------------+ +| la | Latin | Feb 2021 | ++---------------+----------------------+--------------+ +| pl | Polish | Feb 2019 | ++---------------+----------------------+--------------+ +| pt | Portugese | Dec 2015 | ++---------------+----------------------+--------------+ +| ru | Russian | Apr 2020 | ++---------------+----------------------+--------------+ +| sv | Swedish | June 2021 | ++---------------+----------------------+--------------+ +| zh | Chinese (simplified) | May 2019 | ++---------------+----------------------+--------------+ +``` + +Language translations are found in the [evennia/locale](github:evennia/locale/) +folder. Read below if you want to help improve an existing translation of +contribute a new one. ## Changing server language @@ -12,53 +47,48 @@ Change language by adding the following to your `mygame/server/conf/settings.py` file: ```python - USE_I18N = True LANGUAGE_CODE = 'en' ``` -Here `'en'` should be changed to the abbreviation for one of the supported -languages found in `locale/`. Restart the server to activate i18n. The -two-character international language codes are found -[here](http://www.science.co.il/Language/Codes.asp). - -> Windows Note: If you get errors concerning `gettext` or `xgettext` on Windows, -> see the -> [Django documentation](https://docs.djangoproject.com/en/3.2/topics/i18n/translation/#gettext-on-windows). -> A self-installing and up-to-date version of gettext for Windows (32/64-bit) is -> available on [Github](https://github.com/mlocati/gettext-iconv-windows). - -## Translating Evennia +Here `'en'` (the default English) should be changed to the abbreviation for one +of the supported languages found in `locale/` (and in the list above). Restart +the server to activate i18n. ```important:: - Evennia offers translations of hard-coded strings in the server, things like - "Connection closed" or "Server restarted", strings that end users will see and - which game devs are not supposed to change on their own. Text you see in the log - file or on the command line (like error messages) are generally *not* translated - (this is a part of Python). + Even for a 'fully translated' language you will still see English text + in many places when you start Evennia. This is because we expect you (the + developer) to know English (you are reading this manual after all). So we + translate *hard-coded strings that the end player may see* - things you + can't easily change from your mygame/ folder. Outputs from Commands and + Typeclasses are generally *not* translated, nor are console/log outputs. - In addition, text in default Commands and in default Typeclasses will *not* be - translated by switching *i18n* language. To translate Commands and Typeclass - hooks you must overload them in your game directory and translate their returns - to the language you want. This is because from Evennia's perspective, adding - *i18n* code to commands tend to add complexity to code that is *meant* to be - changed anyway. One of the goals of Evennia is to keep the user-changeable code - as clean and easy- to-read as possible. ``` +```sidebar:: Windows users + + If you get errors concerning `gettext` or `xgettext` on Windows, + see the `Django documentation `_ + A self-installing and up-to-date version of gettext for Windows (32/64-bit) is + available on `Github `_ + +``` + +## Translating Evennia + Translations are found in the core `evennia/` library, under `evennia/evennia/locale/`. You must make sure to have cloned this repository from [Evennia's github](github:evennia) before you can proceed. -If you cannot find your language in `evennia/evennia/locale/` it's because noone has -translated it yet. Alternatively you might have the language but find the +If you cannot find your language in `evennia/evennia/locale/` it's because noone +has translated it yet. Alternatively you might have the language but find the translation bad ... You are welcome to help improve the situation! To start a new translation you need to first have cloned the Evennia repositry -with GIT and activated a python virtualenv as described on the [Setup -Quickstart](../Setup/Setup-Quickstart) page. +with GIT and activated a python virtualenv as described on the +[Setup Quickstart](../Setup/Setup-Quickstart) page. Go to `evennia/evennia/` - that is, not your game dir, but inside the `evennia/` repo itself. If you see the `locale/` folder you are in the right place. Make @@ -80,25 +110,52 @@ command will not overwrite any existing strings so you can run it as much as you want. Next head to `locale//LC_MESSAGES` and edit the `**.po` file you -find there. You can edit this with a normal text editor but it is easiest if +find there. You can edit this with a normal text editor but it is easiest if you use a special po-file editor from the web (search the web for "po editor" -for many free alternatives). +for many free alternatives), for example: + + - [gtranslator](https://wiki.gnome.org/Apps/Gtranslator) + - [poeditor](https://poeditor.com/) The concept of translating is simple, it's just a matter of taking the english strings you find in the `**.po` file and add your language's translation best -you can. The `**.po` format (and many supporting editors) allow you to mark -translations as "fuzzy". This tells the system (and future translators) that you -are unsure about the translation, or that you couldn't find a translation that -exactly matched the intention of the original text. Other translators will see -this and might be able to improve it later. Finally, you need to compile your -translation into a more efficient form. Do so from the `evennia` folder again: +you can. Once you are done, run - evennia compilemessages + `evennia compilemessages` -This will go through all languages and create/update compiled files (`**.mo`) -for them. This needs to be done whenever a `**.po` file is updated. +This will compile all languages. Check your language and also check back to your +`.po` file in case the process updated it - you may need to fill in some missing +header fields and should usually note who did the translation. When you are done, make sure that everyone can benefit from your translation! -Make a PR against Evennia with the updated `**.po` and `*.mo` files. Less -ideally (if git is not your thing) you can also attach them to a new post in our -forums. +Make a PR against Evennia with the updated `**.po` file. Less ideally (if git is +not your thing) you can also attach it to a new post in our forums. + +### Hints on translation + +Many of the translation strings use `{ ... }` placeholders. This is because they +are to be used in `.format()` python operations. While you can change the +_order_ of these if it makes more sense in your language, you must _not_ +translate the variables in these formatting tags - Python will look for them! + + Original: "|G{key} connected|n" + Swedish: "|G{key} anslöt|n" + +You must also retain line breaks _at the start and end_ of a message, if any +(your po-editor should stop you if you don't). Try to also end with the same +sentence delimiter (if that makes sense in your language). + + Original: "\n(Unsuccessfull tried '{path}')." + Swedish: "\nMisslyckades med att nå '{path}')." + +Finally, try to get a feel for who a string is for. If a special technical term +is used it may be more confusing than helpful to translate it, even if it's +outside of a `{...}` tag. Even though the result is a mix of your language and +English, clarity is more important. Many languages may also use the English term +normally and reaching for a translation may make the result sound awkward +instead. + + Original: "\nError loading cmdset: No cmdset class '{classname}' in '{path}'. + \n(Traceback was logged {timestamp})" + Swedish: "Fel medan cmdset laddades: Ingen cmdset-klass med namn '{classname}' i {path}. + \n(Traceback loggades {timestamp})" diff --git a/docs/1.0-dev/_sources/Contributing-Docs.md.txt b/docs/1.0-dev/_sources/Contributing-Docs.md.txt index c8872ba267..6d7f4b5c44 100644 --- a/docs/1.0-dev/_sources/Contributing-Docs.md.txt +++ b/docs/1.0-dev/_sources/Contributing-Docs.md.txt @@ -13,41 +13,41 @@ Markdown files are simple text files that can be edited with a normal text edito contain raw HTML directives (but that is very rarely needed). They primarly use the [Markdown][commonmark] syntax. See [the syntax section below](#Editing-syntax) for more help. -## Source file structure +## Source file structure The sources are organized into several rough categories, with only a few administrative documents -at the root of `evennia/docs/source/`. The folders are named in singular form since they will +at the root of `evennia/docs/source/`. The folders are named in singular form since they will primarily be accessed as link refs (e.g. `Component/Account`) - `source/Components/` are docs describing separate Evennia building blocks, that is, things that you can import and use. This extends and elaborates on what can be found out by reading the api docs themselves. Example are documentation for `Accounts`, `Objects` and `Commands`. -- `source/Concepts/` describes how larger-scale features of Evennia hang together - things that - can't easily be broken down into one isolated component. This can be general descriptions of - how Models and Typeclasses interact to the path a message takes from the client to the server +- `source/Concepts/` describes how larger-scale features of Evennia hang together - things that + can't easily be broken down into one isolated component. This can be general descriptions of + how Models and Typeclasses interact to the path a message takes from the client to the server and back. -- `source/Setup/` holds detailed docs on installing, running and maintaining the Evennia server and - the infrastructure around it. -- `source/Coding/` has help on how to interact with, use and navigate the Evennia codebase itself. +- `source/Setup/` holds detailed docs on installing, running and maintaining the Evennia server and + the infrastructure around it. +- `source/Coding/` has help on how to interact with, use and navigate the Evennia codebase itself. This also has non-Evennia-specific help on general development concepts and how to set up a sane development environment. - `source/Contribs/` holds documentation specifically for packages in the `evennia/contribs/` folder. Any contrib-specific tutorials will be found here instead of in `Howtos` -- `source/Howtos/` holds docs that describe how to achieve a specific goal, effect or - result in Evennia. This is often on a tutorial or FAQ form and will refer to the rest of the +- `source/Howtos/` holds docs that describe how to achieve a specific goal, effect or + result in Evennia. This is often on a tutorial or FAQ form and will refer to the rest of the documentation for further reading. - `source/Howtos/Starting/` holds all documents part of the initial tutorial sequence. - - + + Other files and folders: - `source/api/` contains the auto-generated API documentation as `.rst` files. Don't edit these - files manually, your changes will be lost. To refer to these files, use `api:` followed by - the Python path, for example `[rpsystem contrib](api:evennia.contrib.rpsystem)`. - - `source/_templates` and `source/_static` should not be modified unless adding a new doc-page + files manually, your changes will be lost. To refer to these files, use `api:` followed by + the Python path, for example `[rpsystem contrib](api:evennia.contrib.rpsystem)`. + - `source/_templates` and `source/_static` should not be modified unless adding a new doc-page feature or changing the look of the HTML documentation. - `conf.py` holds the Sphinx configuration. It should usually not be modified except to update the Evennia version on a new branch. - + ## Building the docs locally @@ -103,12 +103,12 @@ initialize a new game with a default database (you don't need to have any server running) - It's recommended that you use a virtualenv. Install your cloned version of Evennia into -by pointing to the repo folder (the one containing `/docs`): +by pointing to the repo folder (the one containing `/docs`): ``` - pip install -e evennia + pip install -e evennia ``` - + - Make sure you are in the parent folder _containing_ your `evennia/` repo (so _two_ levels up from `evennia/docs/`). - Create a new game folder called exactly `gamedir` at the same level as your `evennia` @@ -118,8 +118,8 @@ repo with evennia --init gamedir ``` -- Then `cd` into it and create a new, empty database. You don't need to start the -game or do any further changes after this. +- Then `cd` into it and create a new, empty database. You don't need to start the +game or do any further changes after this. ``` evennia migrate @@ -234,7 +234,7 @@ smaller and smaller font). > Don't use the same heading/subheading name more than once in one page. While Markdown does not prevent it, it will make it impossible to refer to that heading uniquely. -The Evennia documentation preparser will detect this and give you an error. +The Evennia documentation preparser will detect this and give you an error. ### Lists @@ -313,7 +313,7 @@ The Evennia documentation supports some special reference shortcuts in links: ##### Github online repository -- `github:` - a shortcut for the full path to the Evennia repository on github. This must be given +- `github:` - a shortcut for the full path to the Evennia repository on github. This must be given with forward-slashes and include the `.py` file ending. It will refer to the `master` branch by default: [link to objects.py](github:evennia/objects/objects.py) @@ -337,8 +337,8 @@ with forward-slashes and include the `.py` file ending. It will refer to the `ma ##### Bug reports/feature request -- `github:issue` - links to the github issue selection page, where the user can choose which type of - issue to create. +- `github:issue` - links to the github issue selection page, where the user can choose which type of + issue to create. If you find a problem, make a [bug report](github:issue)! @@ -402,7 +402,7 @@ as the name of the `language` of a literal block: ```` ```eval_rst - This will be evaluated as ReST. + This will be evaluated as ReST. All content must be indented. ``` @@ -420,14 +420,15 @@ There is also a short-hand form for starting a [ReST directive][ReST-directives] ``` ```` -Within a ReST block, one must use Restructured Text syntax, which is not the same as Markdown. +Within a ReST block, one must use Restructured Text syntax, which is not the +same as Markdown. - Single backticks around text makes it _italic_. - Double backticks around text makes it `verbatim`. - A link is written within back-ticks, with an underscore at the end: `python `_ - + [Here is a ReST formatting cheat sheet](https://thomas-cokelaer.info/tutorials/sphinx/rest_syntax.html). Below are examples of ReST-block structures. @@ -554,7 +555,7 @@ a plain HTML string in the markdown like so: #### Tables -A table is specified using [ReST table syntax][ReST-tables] (they don't need to be indented): +A table is specified using [ReST table syntax][ReST-tables] (they don't need to be indented): ```` ```eval_rst @@ -610,7 +611,7 @@ or the more flexible but verbose #### A more flexible code block The regular Markdown Python codeblock is usually enough but for more direct control over the style, one -can also specify the code block explicitly in `ReST` for more flexibility. +can also specify the code block explicitly in `ReST` for more flexibility. It also provides a link to the code block, identified by its name. @@ -659,11 +660,11 @@ lines or captions since that's not a part of the Markdown specification. ## Code documentation The source code docstrings will be parsed as Markdown. When writing a module docstring, you can use Markdown formatting, -including header levels down to 4th level (`#### SubSubSubHeader`). After the module documentation it's -a good idea to end with four dashes `----`. This will create a visible line between the documentation and the +including header levels down to 4th level (`#### SubSubSubHeader`). After the module documentation it's +a good idea to end with four dashes `----`. This will create a visible line between the documentation and the class/function docs to follow. See for example [the Traits docs](api:evennia.contrib.traits). -All non-private classes, methods and functions must have a Google-style docstring, as per the +All non-private classes, methods and functions must have a Google-style docstring, as per the [Evennia coding style guidelines][github:evennia/CODING_STYLE.md]. This will then be correctly formatted into pretty api docs. 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 27b05c958b..6d23c9cb8d 100644 --- a/docs/1.0-dev/api/evennia.commands.default.building.html +++ b/docs/1.0-dev/api/evennia.commands.default.building.html @@ -1269,7 +1269,7 @@ server settings.

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

-search_index_entry = {'aliases': 'parent type swap update', 'category': 'building', 'key': 'typeclass', '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 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.\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', 'category': 'building', 'key': 'typeclass', '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 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.\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 "}
@@ -1453,7 +1453,7 @@ If object is not specified, the current location is examined.

-aliases = ['ex', 'exam']
+aliases = ['exam', 'ex']
@@ -1550,7 +1550,7 @@ non-persistent data stored on object

-search_index_entry = {'aliases': 'ex exam', 'category': 'building', 'key': 'examine', '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', '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 '}
@@ -1584,7 +1584,7 @@ one is given.

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

-search_index_entry = {'aliases': 'locate search', 'category': 'building', 'key': 'find', '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': 'search locate', 'category': 'building', 'key': 'find', '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 '}
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 4efb57379b..8330e6f4de 100644 --- a/docs/1.0-dev/api/evennia.commands.default.comms.html +++ b/docs/1.0-dev/api/evennia.commands.default.comms.html @@ -194,7 +194,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.

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

-search_index_entry = {'aliases': 'channels chan', 'category': 'comms', 'key': 'channel', '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', '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 "}
@@ -802,7 +802,7 @@ for that channel.

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

-search_index_entry = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', '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': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', '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.commands.default.general.html b/docs/1.0-dev/api/evennia.commands.default.general.html index f40943809c..3a446cb751 100644 --- a/docs/1.0-dev/api/evennia.commands.default.general.html +++ b/docs/1.0-dev/api/evennia.commands.default.general.html @@ -206,7 +206,7 @@ for everyone to use, you need build privileges and the alias command.

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

-search_index_entry = {'aliases': 'nickname nicks', 'category': 'general', 'key': 'nick', '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': 'nicks nickname', 'category': 'general', 'key': 'nick', '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 '}
@@ -536,7 +536,7 @@ placing it in their inventory.

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

-search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', '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', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}
@@ -642,7 +642,7 @@ automatically begin with your name.

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

-search_index_entry = {'aliases': ': emote', 'category': 'general', 'key': 'pose', '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', '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 "}
@@ -701,7 +701,7 @@ which permission groups you are a member of.

-aliases = ['groups', 'hierarchy']
+aliases = ['hierarchy', 'groups']
@@ -732,7 +732,7 @@ which permission groups you are a member of.

-search_index_entry = {'aliases': 'groups hierarchy', 'category': 'general', 'key': 'access', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}
+search_index_entry = {'aliases': 'hierarchy groups', 'category': 'general', 'key': 'access', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\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 13572878f7..d961574149 100644 --- a/docs/1.0-dev/api/evennia.commands.default.system.html +++ b/docs/1.0-dev/api/evennia.commands.default.system.html @@ -386,7 +386,7 @@ given, <nr> defaults to 10.

-aliases = ['listobjects', 'stats', 'listobjs', 'db']
+aliases = ['listobjs', 'stats', 'listobjects', 'db']
@@ -412,7 +412,7 @@ given, <nr> defaults to 10.

-search_index_entry = {'aliases': 'listobjects stats listobjs db', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [<nr>]\n\n Gives statictics on objects in database as well as\n a list of <nr> latest objects in database. If not\n given, <nr> defaults to 10.\n '}
+search_index_entry = {'aliases': 'listobjs stats listobjects db', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [<nr>]\n\n Gives statictics on objects in database as well as\n a list of <nr> latest objects in database. If not\n given, <nr> defaults to 10.\n '}
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 e5821752d6..979cce2c0c 100644 --- a/docs/1.0-dev/api/evennia.commands.default.unloggedin.html +++ b/docs/1.0-dev/api/evennia.commands.default.unloggedin.html @@ -60,7 +60,7 @@ connect “account name” “pass word”

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

-search_index_entry = {'aliases': 'co con conn', 'category': 'general', 'key': 'connect', '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 co conn', 'category': 'general', 'key': 'connect', '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 '}
@@ -119,7 +119,7 @@ create “account name” “pass word”

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

-search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', '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': 'cre cr', 'category': 'general', 'key': 'create', '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 '}
@@ -174,7 +174,7 @@ version is a bit more complicated.

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

-search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', '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': 'qu q', 'category': 'general', 'key': 'quit', '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 '}
@@ -224,7 +224,7 @@ All it does is display the connect screen.

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

-search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', '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', '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 '}
@@ -273,7 +273,7 @@ for simplicity. It shows a pane of info.

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

-search_index_entry = {'aliases': '? h', 'category': 'general', 'key': 'help', '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', '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/1.0-dev/api/evennia.contrib.dice.html b/docs/1.0-dev/api/evennia.contrib.dice.html index 7ffb38f6f2..253788c95f 100644 --- a/docs/1.0-dev/api/evennia.contrib.dice.html +++ b/docs/1.0-dev/api/evennia.contrib.dice.html @@ -150,7 +150,7 @@ everyone but the person rolling.

-aliases = ['@dice', 'roll']
+aliases = ['roll', '@dice']
@@ -176,7 +176,7 @@ everyone but the person rolling.

-search_index_entry = {'aliases': '@dice roll', 'category': 'general', 'key': 'dice', 'tags': '', 'text': "\n roll dice\n\n Usage:\n dice[/switch] <nr>d<sides> [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 < 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (<,>,<=,>=,==,!=). So e.g. 2d6 + 3 > 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n "}
+search_index_entry = {'aliases': 'roll @dice', 'category': 'general', 'key': 'dice', 'tags': '', 'text': "\n roll dice\n\n Usage:\n dice[/switch] <nr>d<sides> [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 < 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (<,>,<=,>=,==,!=). So e.g. 2d6 + 3 > 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n "}
diff --git a/docs/1.0-dev/api/evennia.contrib.email_login.html b/docs/1.0-dev/api/evennia.contrib.email_login.html index 0e832db2da..31d671568f 100644 --- a/docs/1.0-dev/api/evennia.contrib.email_login.html +++ b/docs/1.0-dev/api/evennia.contrib.email_login.html @@ -75,7 +75,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.

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

-search_index_entry = {'aliases': 'co con conn', 'category': 'general', 'key': 'connect', '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 co conn', 'category': 'general', 'key': 'connect', '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 '}
@@ -127,7 +127,7 @@ there is no object yet before the account has logged in)

-aliases = ['cr', 'cre']
+aliases = ['cre', 'cr']
@@ -163,7 +163,7 @@ name enclosed in quotes:

-search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}
+search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}
@@ -182,7 +182,7 @@ version is a bit more complicated.

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

-search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', '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': 'qu q', 'category': 'general', 'key': 'quit', '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 '}
@@ -227,7 +227,7 @@ All it does is display the connect screen.

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

-search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', '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', '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 '}
@@ -271,7 +271,7 @@ for simplicity. It shows a pane of info.

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

-search_index_entry = {'aliases': '? h', 'category': 'general', 'key': 'help', 'tags': '', 'text': '\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', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
diff --git a/docs/1.0-dev/api/evennia.contrib.evscaperoom.commands.html b/docs/1.0-dev/api/evennia.contrib.evscaperoom.commands.html index 530a5e8484..9c50e57480 100644 --- a/docs/1.0-dev/api/evennia.contrib.evscaperoom.commands.html +++ b/docs/1.0-dev/api/evennia.contrib.evscaperoom.commands.html @@ -148,7 +148,7 @@ the operation will be general or on the room.

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

-search_index_entry = {'aliases': 'chicken out q quit abort', 'category': 'evscaperoom', 'key': 'give up', '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', '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 '}
@@ -308,7 +308,7 @@ shout

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

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

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

-search_index_entry = {'aliases': ': pose', 'category': 'general', 'key': 'emote', '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', '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 '}
@@ -427,7 +427,7 @@ looks and what actions is available.

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

-search_index_entry = {'aliases': 'ex unfocus examine e', 'category': 'evscaperoom', 'key': 'focus', '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': 'examine e unfocus ex', 'category': 'evscaperoom', 'key': 'focus', '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 '}
@@ -518,7 +518,7 @@ set in self.parse())

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

-search_index_entry = {'aliases': 'give inventory inv i', 'category': 'evscaperoom', 'key': 'get', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}
+search_index_entry = {'aliases': 'inventory inv give i', 'category': 'evscaperoom', 'key': 'get', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}
@@ -563,7 +563,7 @@ set in self.parse())

-aliases = ['@dig', '@open']
+aliases = ['@open', '@dig']
@@ -586,7 +586,7 @@ to all the variables defined therein.

-search_index_entry = {'aliases': '@dig @open', 'category': 'general', 'key': 'open', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}
+search_index_entry = {'aliases': '@open @dig', 'category': 'general', 'key': 'open', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}
diff --git a/docs/1.0-dev/api/evennia.contrib.ingame_python.commands.html b/docs/1.0-dev/api/evennia.contrib.ingame_python.commands.html index 6e39f41dc3..45775a0973 100644 --- a/docs/1.0-dev/api/evennia.contrib.ingame_python.commands.html +++ b/docs/1.0-dev/api/evennia.contrib.ingame_python.commands.html @@ -53,7 +53,7 @@
-aliases = ['@callback', '@calls', '@callbacks']
+aliases = ['@callbacks', '@callback', '@calls']
@@ -134,7 +134,7 @@ on user permission.

-search_index_entry = {'aliases': '@callback @calls @callbacks', 'category': 'building', 'key': '@call', 'tags': '', 'text': '\n Command to edit callbacks.\n '}
+search_index_entry = {'aliases': '@callbacks @callback @calls', 'category': 'building', 'key': '@call', 'tags': '', 'text': '\n Command to edit callbacks.\n '}
diff --git a/docs/1.0-dev/api/evennia.contrib.rpsystem.html b/docs/1.0-dev/api/evennia.contrib.rpsystem.html index 7f70e7a2f9..14ed4cbd10 100644 --- a/docs/1.0-dev/api/evennia.contrib.rpsystem.html +++ b/docs/1.0-dev/api/evennia.contrib.rpsystem.html @@ -637,7 +637,7 @@ a different language.

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

-search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', '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', '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.tutorial_examples.red_button.html b/docs/1.0-dev/api/evennia.contrib.tutorial_examples.red_button.html index 114c76545f..f295139d04 100644 --- a/docs/1.0-dev/api/evennia.contrib.tutorial_examples.red_button.html +++ b/docs/1.0-dev/api/evennia.contrib.tutorial_examples.red_button.html @@ -80,7 +80,7 @@ such as when closing the lid and un-blinding a character.

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

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

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

-search_index_entry = {'aliases': 'break lid smash smash lid', 'category': 'general', 'key': 'smash glass', '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 break lid smash', 'category': 'general', 'key': 'smash glass', '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 '}
@@ -306,7 +306,7 @@ be mutually exclusive.

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

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

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

-search_index_entry = {'aliases': 'feel examine listen get l ex', 'category': 'general', 'key': 'look', '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 l ex listen get examine', 'category': 'general', 'key': 'look', '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.tutorial_world.objects.html b/docs/1.0-dev/api/evennia.contrib.tutorial_world.objects.html index a6b9aa2fc6..0af0531e0b 100644 --- a/docs/1.0-dev/api/evennia.contrib.tutorial_world.objects.html +++ b/docs/1.0-dev/api/evennia.contrib.tutorial_world.objects.html @@ -493,7 +493,7 @@ shift green root up/down

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

-search_index_entry = {'aliases': 'pull push shiftroot move', 'category': 'tutorialworld', 'key': 'shift', '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': 'push move shiftroot pull', 'category': 'tutorialworld', 'key': 'shift', '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 '}
@@ -546,7 +546,7 @@ yellow/green - horizontal roots

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

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

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

-search_index_entry = {'aliases': 'kill hit pierce thrust defend stab parry chop bash fight slash', 'category': 'tutorialworld', 'key': 'attack', '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': 'pierce defend slash chop fight hit thrust stab bash parry kill', 'category': 'tutorialworld', 'key': 'attack', '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.tutorial_world.rooms.html b/docs/1.0-dev/api/evennia.contrib.tutorial_world.rooms.html index 4ebddfd4b3..92325264c4 100644 --- a/docs/1.0-dev/api/evennia.contrib.tutorial_world.rooms.html +++ b/docs/1.0-dev/api/evennia.contrib.tutorial_world.rooms.html @@ -714,7 +714,7 @@ if they fall off the bridge.

-aliases = ['?', 'h']
+aliases = ['h', '?']
@@ -740,7 +740,7 @@ if they fall off the bridge.

-search_index_entry = {'aliases': '? h', 'category': 'tutorial world', 'key': 'help', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}
+search_index_entry = {'aliases': 'h ?', 'category': 'tutorial world', 'key': 'help', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}
@@ -866,7 +866,7 @@ to find something.

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

-search_index_entry = {'aliases': 'fiddle feel feel around l search', 'category': 'tutorialworld', 'key': 'look', '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 search fiddle', 'category': 'tutorialworld', 'key': 'look', '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.utils.eveditor.html b/docs/1.0-dev/api/evennia.utils.eveditor.html index 6234dad6a3..94bed23254 100644 --- a/docs/1.0-dev/api/evennia.utils.eveditor.html +++ b/docs/1.0-dev/api/evennia.utils.eveditor.html @@ -275,7 +275,7 @@ indentation.

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

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

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

-search_index_entry = {'aliases': 'no abort yes n y a __nomatch_command', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
+search_index_entry = {'aliases': 'abort no y yes a __nomatch_command n', 'category': 'general', 'key': '__noinput_command', '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 01bc3b28c0..3a1726f3e0 100644 --- a/docs/1.0-dev/api/evennia.utils.evmore.html +++ b/docs/1.0-dev/api/evennia.utils.evmore.html @@ -76,7 +76,7 @@ the caller.msg() construct every time the page is updated.

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

-search_index_entry = {'aliases': 'quit back abort top q e n end a b t next', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Manipulate the text paging\n '}
+search_index_entry = {'aliases': 'back t b e next abort top end a quit q n', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Manipulate the text paging\n '}
diff --git a/docs/1.0-dev/objects.inv b/docs/1.0-dev/objects.inv index b7ff101ce37ca19429317a2b077fb1b98bf981c3..8e1d6371b1fbdf1421f1baffe4b754d53aded67f 100644 GIT binary patch delta 20682 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
    0o>mu;0%_8ouyAyk`Won<*aR>*iRU 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