From dc10fd3a2c0ebdf2256c83340d8a26823ac95931 Mon Sep 17 00:00:00 2001
From: Evennia docbuilder action
Date: Sun, 15 Dec 2024 15:15:59 +0000
Subject: [PATCH] Updated HTML docs.
---
docs/latest/.buildinfo | 2 +-
docs/latest/Coding/Changelog.html | 19 ++++++++++++++
docs/latest/Coding/Coding-Overview.html | 1 +
.../_modules/evennia/objects/manager.html | 2 +-
.../_modules/evennia/objects/objects.html | 17 ++++++++-----
docs/latest/_sources/Coding/Changelog.md.txt | 24 ++++++++++++++++++
...evennia.commands.default.batchprocess.html | 4 +--
.../evennia.commands.default.building.html | 16 ++++++------
.../api/evennia.commands.default.comms.html | 8 +++---
.../api/evennia.commands.default.general.html | 8 +++---
.../api/evennia.commands.default.system.html | 4 +--
.../api/evennia.commands.default.tests.html | 2 +-
.../evennia.commands.default.unloggedin.html | 16 ++++++------
....base_systems.email_login.email_login.html | 16 ++++++------
...b.base_systems.ingame_python.commands.html | 4 +--
...b.base_systems.ingame_reports.reports.html | 4 +--
...systems.mux_comms_cmds.mux_comms_cmds.html | 4 +--
...rib.full_systems.evscaperoom.commands.html | 12 ++++-----
...ame_systems.achievements.achievements.html | 4 +--
...ontrib.game_systems.clothing.clothing.html | 4 +--
...evennia.contrib.grid.xyzgrid.commands.html | 4 +--
.../api/evennia.contrib.rpg.dice.dice.html | 4 +--
...evennia.contrib.rpg.rpsystem.rpsystem.html | 4 +--
...b.tutorials.evadventure.combat_twitch.html | 4 +--
...ontrib.tutorials.evadventure.commands.html | 8 +++---
...ntrib.tutorials.red_button.red_button.html | 16 ++++++------
...trib.tutorials.tutorial_world.objects.html | 12 ++++-----
...ontrib.tutorials.tutorial_world.rooms.html | 8 +++---
...utils.git_integration.git_integration.html | 4 +--
docs/latest/api/evennia.utils.eveditor.html | 4 +--
docs/latest/api/evennia.utils.evmenu.html | 4 +--
docs/latest/api/evennia.utils.evmore.html | 4 +--
docs/latest/objects.inv | Bin 172557 -> 172594 bytes
docs/latest/searchindex.js | 2 +-
34 files changed, 149 insertions(+), 100 deletions(-)
diff --git a/docs/latest/.buildinfo b/docs/latest/.buildinfo
index 4b9ffb7ec0..60daabccfa 100644
--- a/docs/latest/.buildinfo
+++ b/docs/latest/.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: 8381c325bd6e7676e473dfe8e4455c23
+config: f9222ed9ca753766e17eb5580f2e4cb3
tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/latest/Coding/Changelog.html b/docs/latest/Coding/Changelog.html
index 76b6622dcf..d264c7a09d 100644
--- a/docs/latest/Coding/Changelog.html
+++ b/docs/latest/Coding/Changelog.html
@@ -66,6 +66,7 @@
- Changelog
+- Main branch
- Evennia 4.5.0
- Evennia 4.4.1
- Evennia 4.4.0
@@ -200,6 +201,24 @@
Changelog
+
+Main branch
+
+Feat: Default object’s default descs are now taken from a default_description
+class variable instead of the desc Attribute always being set (count-infinity)
+Fix: Make sure that DefaultAccount.create normalizes to empty
+strings instead of None if no name is provided, also enforce string type (InspectorCaracal)
+Fix: Allow in-game help searching for commands natively starting
+with * (which is the Lunr search wildcard) (count-infinity)
+Fix: Web client stopped auto-focusing the input box after opening
+settings (count-infinity)
+Fix: Partial matching fix in default search, makes sure e.g. b sw uniquely
+finds big sword even if another type of sword is around (InspectorCaracal)
+Fix: In searches, allow special ‘here’ and ‘me’ keywords only be valid queries
+unless current location and/or caller is in valid search candidates respectively (InspectorCaracal)
+[Docs]: Fixes from InspectorCaracal
+
+
Evennia 4.5.0
Nov 12, 2024
diff --git a/docs/latest/Coding/Coding-Overview.html b/docs/latest/Coding/Coding-Overview.html
index 1afac89237..44ce255fdb 100644
--- a/docs/latest/Coding/Coding-Overview.html
+++ b/docs/latest/Coding/Coding-Overview.html
@@ -177,6 +177,7 @@ make your game, also if you never coded before.
[docs] def get_search_candidates(self, searchdata, **kwargs):
@@ -928,8 +930,14 @@
# replace incoming searchdata string with a potentially modified version
searchdata = self.get_search_query_replacement(searchdata, **input_kwargs)
+
# get candidates
+
candidates = self.get_search_candidates(searchdata, **input_kwargs)
+
# handle special input strings, like "me" or "here".
-
should_return, searchdata = self.get_search_direct_match(searchdata, **input_kwargs)
+
# we also want to include the identified candidates here instead of input, to account for defaults
+
should_return, searchdata = self.get_search_direct_match(
+
searchdata, **(input_kwargs | {"candidates": candidates})
+
)
if should_return:
# we got an actual result, return it immediately
return [searchdata] if quiet else searchdata
@@ -949,9 +957,6 @@
# always use exact match for dbref/global searches
exact = True if global_search or dbref(searchdata) else exact
-
# get candidates
-
candidates = self.get_search_candidates(searchdata, **input_kwargs)
-
# do the actual search
results = self.get_search_result(
searchdata,
diff --git a/docs/latest/_sources/Coding/Changelog.md.txt b/docs/latest/_sources/Coding/Changelog.md.txt
index 7ab8af2583..5d66f39e04 100644
--- a/docs/latest/_sources/Coding/Changelog.md.txt
+++ b/docs/latest/_sources/Coding/Changelog.md.txt
@@ -1,5 +1,29 @@
# Changelog
+## Main branch
+
+- [Feat][pull3633]: Default object's default descs are now taken from a `default_description`
+ class variable instead of the `desc` Attribute always being set (count-infinity)
+- [Fix][pull3677]: Make sure that `DefaultAccount.create` normalizes to empty
+ strings instead of `None` if no name is provided, also enforce string type (InspectorCaracal)
+- [Fix][pull3682]: Allow in-game help searching for commands natively starting
+ with `*` (which is the Lunr search wildcard) (count-infinity)
+- [Fix][pull3684]: Web client stopped auto-focusing the input box after opening
+ settings (count-infinity)
+- [Fix][pull3689]: Partial matching fix in default search, makes sure e.g. `b sw` uniquely
+ finds `big sword` even if another type of sword is around (InspectorCaracal)
+- [Fix][pull3690]: In searches, allow special 'here' and 'me' keywords only be valid queries
+ unless current location and/or caller is in valid search candidates respectively (InspectorCaracal)
+- [Docs]: Fixes from InspectorCaracal
+
+
+[pull3633]: https://github.com/evennia/evennia/pull/3633
+[pull3677]: https://github.com/evennia/evennia/pull/3677
+[pull3682]: https://github.com/evennia/evennia/pull/3682
+[pull3684]: https://github.com/evennia/evennia/pull/3684
+[pull3689]: https://github.com/evennia/evennia/pull/3689
+[pull3690]: https://github.com/evennia/evennia/pull/3690
+
## Evennia 4.5.0
Nov 12, 2024
diff --git a/docs/latest/api/evennia.commands.default.batchprocess.html b/docs/latest/api/evennia.commands.default.batchprocess.html
index 9b80e97757..5a7b88c2de 100644
--- a/docs/latest/api/evennia.commands.default.batchprocess.html
+++ b/docs/latest/api/evennia.commands.default.batchprocess.html
@@ -152,7 +152,7 @@ skipping, reloading etc.
-
-
aliases = ['batchcommand', 'batchcmd']
+aliases = ['batchcmd', 'batchcommand']
@@ -183,7 +183,7 @@ skipping, reloading etc.
-
-
search_index_entry = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}
+search_index_entry = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}
diff --git a/docs/latest/api/evennia.commands.default.building.html b/docs/latest/api/evennia.commands.default.building.html
index 84bf81444f..e20f833e4c 100644
--- a/docs/latest/api/evennia.commands.default.building.html
+++ b/docs/latest/api/evennia.commands.default.building.html
@@ -651,7 +651,7 @@ You can specify the /force switch to bypass this confirmation.
-
-
aliases = ['@delete', '@del']
+aliases = ['@del', '@delete']
@@ -692,7 +692,7 @@ You can specify the /force switch to bypass this confirmation.
-
-
search_index_entry = {'aliases': '@delete @del', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy delete del', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}
+search_index_entry = {'aliases': '@del @delete', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy del delete', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}
@@ -1419,7 +1419,7 @@ server settings.
-
-
aliases = ['@typeclasses', '@swap', '@update', '@type', '@parent']
+aliases = ['@typeclasses', '@parent', '@update', '@swap', '@type']
@@ -1450,7 +1450,7 @@ server settings.
-
-
search_index_entry = {'aliases': '@typeclasses @swap @update @type @parent', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass typeclasses swap update type parent', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}
+search_index_entry = {'aliases': '@typeclasses @parent @update @swap @type', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass typeclasses parent update swap type', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}
@@ -1605,7 +1605,7 @@ If object is not specified, the current location is examined.
-
-
aliases = ['@ex', '@exam']
+aliases = ['@exam', '@ex']
@@ -1878,7 +1878,7 @@ the cases, see the module doc.
-
-
search_index_entry = {'aliases': '@ex @exam', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine ex exam', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}
+search_index_entry = {'aliases': '@exam @ex', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine exam ex', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}
@@ -1912,7 +1912,7 @@ one is given.
-
-
aliases = ['@locate', '@search']
+aliases = ['@search', '@locate']
@@ -1943,7 +1943,7 @@ one is given.
-
-
search_index_entry = {'aliases': '@locate @search', 'category': 'building', 'key': '@find', 'no_prefix': 'find locate search', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}
+search_index_entry = {'aliases': '@search @locate', 'category': 'building', 'key': '@find', 'no_prefix': 'find search locate', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}
diff --git a/docs/latest/api/evennia.commands.default.comms.html b/docs/latest/api/evennia.commands.default.comms.html
index 0fa48db791..e1cd9627c3 100644
--- a/docs/latest/api/evennia.commands.default.comms.html
+++ b/docs/latest/api/evennia.commands.default.comms.html
@@ -270,7 +270,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.
-
-
aliases = ['@chan', '@channels']
+aliases = ['@channels', '@chan']
@@ -795,7 +795,7 @@ don’t actually sub to yet.
-
-
search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
+search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
@@ -948,7 +948,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.
-
-
aliases = ['@chan', '@channels']
+aliases = ['@channels', '@chan']
@@ -968,7 +968,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.
-
-
search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
+search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
diff --git a/docs/latest/api/evennia.commands.default.general.html b/docs/latest/api/evennia.commands.default.general.html
index 3ec6db40b2..91d219b181 100644
--- a/docs/latest/api/evennia.commands.default.general.html
+++ b/docs/latest/api/evennia.commands.default.general.html
@@ -337,7 +337,7 @@ inv
-
-
aliases = ['i', 'inv']
+aliases = ['inv', 'i']
@@ -368,7 +368,7 @@ inv
-
-
search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
+search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
@@ -722,7 +722,7 @@ automatically begin with your name.
-
-
aliases = ['emote', ':']
+aliases = [':', 'emote']
@@ -763,7 +763,7 @@ space.
-
-
search_index_entry = {'aliases': 'emote :', 'category': 'general', 'key': 'pose', 'no_prefix': ' emote :', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}
+search_index_entry = {'aliases': ': emote', 'category': 'general', 'key': 'pose', 'no_prefix': ' : emote', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}
diff --git a/docs/latest/api/evennia.commands.default.system.html b/docs/latest/api/evennia.commands.default.system.html
index 196b1c1736..d02b7cfcc2 100644
--- a/docs/latest/api/evennia.commands.default.system.html
+++ b/docs/latest/api/evennia.commands.default.system.html
@@ -697,7 +697,7 @@ See
|luhttps://ww
-
-
aliases = ['@delays', '@task']
+aliases = ['@task', '@delays']
@@ -743,7 +743,7 @@ to all the variables defined therein.
-
-
search_index_entry = {'aliases': '@delays @task', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
+search_index_entry = {'aliases': '@task @delays', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
diff --git a/docs/latest/api/evennia.commands.default.tests.html b/docs/latest/api/evennia.commands.default.tests.html
index 2df38b628d..aac604fc2b 100644
--- a/docs/latest/api/evennia.commands.default.tests.html
+++ b/docs/latest/api/evennia.commands.default.tests.html
@@ -985,7 +985,7 @@ main test suite started with
Test the batch processor.
-
-
red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmp257gzhpz/d429646a9392307d3cac5702175c14fd5235a330/evennia/contrib/tutorials/red_button/red_button.py'>
+red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmpe5mjlcym/40aac8131477500881fecb7555f9fd031f7abb58/evennia/contrib/tutorials/red_button/red_button.py'>
diff --git a/docs/latest/api/evennia.commands.default.unloggedin.html b/docs/latest/api/evennia.commands.default.unloggedin.html
index 0eefec7013..c1d774f24b 100644
--- a/docs/latest/api/evennia.commands.default.unloggedin.html
+++ b/docs/latest/api/evennia.commands.default.unloggedin.html
@@ -136,7 +136,7 @@ connect “account name” “pass word”
-
-
aliases = ['conn', 'co', 'con']
+aliases = ['conn', 'con', 'co']
@@ -171,7 +171,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
+search_index_entry = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn con co', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
@@ -195,7 +195,7 @@ create “account name” “pass word”
-
-
aliases = ['cr', 'cre']
+aliases = ['cre', 'cr']
@@ -232,7 +232,7 @@ create “account name” “pass word”
-
-
search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
+search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
@@ -306,7 +306,7 @@ All it does is display the connect screen.
-
-
aliases = ['look', 'l']
+aliases = ['l', 'look']
@@ -332,7 +332,7 @@ All it does is display the connect screen.
-
-
search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
+search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
@@ -355,7 +355,7 @@ for simplicity. It shows a pane of info.
-
-
aliases = ['h', '?']
+aliases = ['?', 'h']
@@ -381,7 +381,7 @@ for simplicity. It shows a pane of info.
-
-
search_index_entry = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
+search_index_entry = {'aliases': '? h', 'category': 'general', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
diff --git a/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html b/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html
index 4e6475d646..a566a22f64 100644
--- a/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html
+++ b/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html
@@ -153,7 +153,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.
-
-
aliases = ['conn', 'co', 'con']
+aliases = ['conn', 'con', 'co']
@@ -183,7 +183,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', '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': 'conn con co', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn con co', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}
@@ -205,7 +205,7 @@ there is no object yet before the account has logged in)
-
-
aliases = ['cr', 'cre']
+aliases = ['cre', 'cr']
@@ -247,7 +247,7 @@ name enclosed in quotes:
-
-
search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', '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', 'no_prefix': ' cre cr', '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 '}
@@ -311,7 +311,7 @@ All it does is display the connect screen.
-
-
aliases = ['look', 'l']
+aliases = ['l', 'look']
@@ -337,7 +337,7 @@ All it does is display the connect screen.
-
-
search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
+search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
@@ -355,7 +355,7 @@ for simplicity. It shows a pane of info.
-
-
aliases = ['h', '?']
+aliases = ['?', 'h']
@@ -381,7 +381,7 @@ for simplicity. It shows a pane of info.
-
-
search_index_entry = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'no_prefix': ' h ?', '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', 'no_prefix': ' ? h', '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/latest/api/evennia.contrib.base_systems.ingame_python.commands.html b/docs/latest/api/evennia.contrib.base_systems.ingame_python.commands.html
index 111f869f23..7af3c85a5d 100644
--- a/docs/latest/api/evennia.contrib.base_systems.ingame_python.commands.html
+++ b/docs/latest/api/evennia.contrib.base_systems.ingame_python.commands.html
@@ -130,7 +130,7 @@
-
-
aliases = ['@callbacks', '@calls', '@callback']
+aliases = ['@callback', '@callbacks', '@calls']
@@ -211,7 +211,7 @@ on user permission.
-
-
search_index_entry = {'aliases': '@callbacks @calls @callback', 'category': 'building', 'key': '@call', 'no_prefix': 'call callbacks calls callback', 'tags': '', 'text': '\n Command to edit callbacks.\n '}
+search_index_entry = {'aliases': '@callback @callbacks @calls', 'category': 'building', 'key': '@call', 'no_prefix': 'call callback callbacks calls', 'tags': '', 'text': '\n Command to edit callbacks.\n '}
diff --git a/docs/latest/api/evennia.contrib.base_systems.ingame_reports.reports.html b/docs/latest/api/evennia.contrib.base_systems.ingame_reports.reports.html
index 127e941ac4..b617b6803f 100644
--- a/docs/latest/api/evennia.contrib.base_systems.ingame_reports.reports.html
+++ b/docs/latest/api/evennia.contrib.base_systems.ingame_reports.reports.html
@@ -174,7 +174,7 @@ players
-
-
aliases = ['manage players', 'manage bugs', 'manage ideas']
+aliases = ['manage ideas', 'manage bugs', 'manage players']
@@ -208,7 +208,7 @@ to all the variables defined therein.
-
-
search_index_entry = {'aliases': 'manage players manage bugs manage ideas', 'category': 'general', 'key': 'manage reports', 'no_prefix': ' manage players manage bugs manage ideas', 'tags': '', 'text': '\n manage the various reports\n\n Usage:\n manage [report type]\n\n Available report types:\n bugs\n ideas\n players\n\n Initializes a menu for reviewing and changing the status of current reports.\n '}
+search_index_entry = {'aliases': 'manage ideas manage bugs manage players', 'category': 'general', 'key': 'manage reports', 'no_prefix': ' manage ideas manage bugs manage players', 'tags': '', 'text': '\n manage the various reports\n\n Usage:\n manage [report type]\n\n Available report types:\n bugs\n ideas\n players\n\n Initializes a menu for reviewing and changing the status of current reports.\n '}
diff --git a/docs/latest/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html b/docs/latest/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html
index aeb199286e..bd9f03dcd2 100644
--- a/docs/latest/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html
+++ b/docs/latest/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html
@@ -231,7 +231,7 @@ for that channel.
-
-
aliases = ['delaliaschan', 'delchanalias']
+aliases = ['delchanalias', 'delaliaschan']
@@ -262,7 +262,7 @@ for that channel.
-
-
search_index_entry = {'aliases': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delaliaschan delchanalias', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}
+search_index_entry = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delchanalias delaliaschan', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}
diff --git a/docs/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html b/docs/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html
index c36febe414..a221e317ba 100644
--- a/docs/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html
+++ b/docs/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html
@@ -385,7 +385,7 @@ shout
-
-
aliases = ['whisper', ';', 'shout']
+aliases = [';', 'shout', 'whisper']
@@ -414,7 +414,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'whisper ; shout', 'category': 'general', 'key': 'say', 'no_prefix': ' whisper ; shout', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}
+search_index_entry = {'aliases': '; shout whisper', 'category': 'general', 'key': 'say', 'no_prefix': ' ; shout whisper', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}
@@ -504,7 +504,7 @@ looks and what actions is available.
-
-
aliases = ['examine', 'e', 'unfocus', 'ex']
+aliases = ['examine', 'unfocus', 'ex', 'e']
@@ -533,7 +533,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'examine e unfocus ex', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' examine e unfocus ex', '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 unfocus ex e', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' examine unfocus ex e', '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 '}
@@ -595,7 +595,7 @@ set in self.parse())
-
-
aliases = ['inventory', 'i', 'give', 'inv']
+aliases = ['give', 'inv', 'inventory', 'i']
@@ -619,7 +619,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'inventory i give inv', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory i give inv', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}
+search_index_entry = {'aliases': 'give inv inventory i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' give inv inventory i', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}
diff --git a/docs/latest/api/evennia.contrib.game_systems.achievements.achievements.html b/docs/latest/api/evennia.contrib.game_systems.achievements.achievements.html
index 2e8ab78baa..47a6ce4f06 100644
--- a/docs/latest/api/evennia.contrib.game_systems.achievements.achievements.html
+++ b/docs/latest/api/evennia.contrib.game_systems.achievements.achievements.html
@@ -289,7 +289,7 @@ achievements/progress rats
-
-
aliases = ['achievement', 'achieves', 'achieve']
+aliases = ['achieves', 'achievement', 'achieve']
@@ -337,7 +337,7 @@ to all the variables defined therein.
-
-
search_index_entry = {'aliases': 'achievement achieves achieve', 'category': 'general', 'key': 'achievements', 'no_prefix': ' achievement achieves achieve', 'tags': '', 'text': '\n view achievements\n\n Usage:\n achievements[/switches] [args]\n\n Switches:\n all View all achievements, including locked ones.\n completed View achievements you\'ve completed.\n progress View achievements you have partially completed\n\n Check your achievement statuses or browse the list. Providing a command argument\n will search all your currently unlocked achievements for matches, and the switches\n will filter the list to something other than "all unlocked". Combining a command\n argument with a switch will search only in that list.\n\n Examples:\n achievements apples\n achievements/all\n achievements/progress rats\n '}
+search_index_entry = {'aliases': 'achieves achievement achieve', 'category': 'general', 'key': 'achievements', 'no_prefix': ' achieves achievement achieve', 'tags': '', 'text': '\n view achievements\n\n Usage:\n achievements[/switches] [args]\n\n Switches:\n all View all achievements, including locked ones.\n completed View achievements you\'ve completed.\n progress View achievements you have partially completed\n\n Check your achievement statuses or browse the list. Providing a command argument\n will search all your currently unlocked achievements for matches, and the switches\n will filter the list to something other than "all unlocked". Combining a command\n argument with a switch will search only in that list.\n\n Examples:\n achievements apples\n achievements/all\n achievements/progress rats\n '}
diff --git a/docs/latest/api/evennia.contrib.game_systems.clothing.clothing.html b/docs/latest/api/evennia.contrib.game_systems.clothing.clothing.html
index 8c8be515bb..158896c484 100644
--- a/docs/latest/api/evennia.contrib.game_systems.clothing.clothing.html
+++ b/docs/latest/api/evennia.contrib.game_systems.clothing.clothing.html
@@ -636,7 +636,7 @@ inv
-
-
aliases = ['i', 'inv']
+aliases = ['inv', 'i']
@@ -667,7 +667,7 @@ inv
-
-
search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
+search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
diff --git a/docs/latest/api/evennia.contrib.grid.xyzgrid.commands.html b/docs/latest/api/evennia.contrib.grid.xyzgrid.commands.html
index f6516a49a8..fd3910210f 100644
--- a/docs/latest/api/evennia.contrib.grid.xyzgrid.commands.html
+++ b/docs/latest/api/evennia.contrib.grid.xyzgrid.commands.html
@@ -436,7 +436,7 @@ there is no room above/below you, your movement will fail.
-
-
aliases = ['dive', 'fly']
+aliases = ['fly', 'dive']
@@ -459,7 +459,7 @@ to all the variables defined therein.
-
-
search_index_entry = {'aliases': 'dive fly', 'category': 'general', 'key': 'fly or dive', 'no_prefix': ' dive fly', 'tags': '', 'text': '\n Fly or Dive up and down.\n\n Usage:\n fly\n dive\n\n Will fly up one room or dive down one room at your current position. If\n there is no room above/below you, your movement will fail.\n\n '}
+search_index_entry = {'aliases': 'fly dive', 'category': 'general', 'key': 'fly or dive', 'no_prefix': ' fly dive', 'tags': '', 'text': '\n Fly or Dive up and down.\n\n Usage:\n fly\n dive\n\n Will fly up one room or dive down one room at your current position. If\n there is no room above/below you, your movement will fail.\n\n '}
diff --git a/docs/latest/api/evennia.contrib.rpg.dice.dice.html b/docs/latest/api/evennia.contrib.rpg.dice.dice.html
index 3d7ee8d157..fad4cb5e02 100644
--- a/docs/latest/api/evennia.contrib.rpg.dice.dice.html
+++ b/docs/latest/api/evennia.contrib.rpg.dice.dice.html
@@ -340,7 +340,7 @@ everyone but the person rolling.
-
-
aliases = ['@dice', 'roll']
+aliases = ['roll', '@dice']
@@ -366,7 +366,7 @@ everyone but the person rolling.
-
-
search_index_entry = {'aliases': '@dice roll', 'category': 'general', 'key': 'dice', 'no_prefix': ' dice roll', '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', 'no_prefix': ' roll 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/latest/api/evennia.contrib.rpg.rpsystem.rpsystem.html b/docs/latest/api/evennia.contrib.rpg.rpsystem.rpsystem.html
index e7d57657fb..c634d4dadb 100644
--- a/docs/latest/api/evennia.contrib.rpg.rpsystem.rpsystem.html
+++ b/docs/latest/api/evennia.contrib.rpg.rpsystem.rpsystem.html
@@ -908,7 +908,7 @@ Using the command without arguments will list all current recogs.
-
-
aliases = ['recognize', 'forget']
+aliases = ['forget', 'recognize']
@@ -935,7 +935,7 @@ Using the command without arguments will list all current recogs.
-
-
search_index_entry = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'no_prefix': ' recognize forget', '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': 'forget recognize', 'category': 'general', 'key': 'recog', 'no_prefix': ' forget recognize', '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/latest/api/evennia.contrib.tutorials.evadventure.combat_twitch.html b/docs/latest/api/evennia.contrib.tutorials.evadventure.combat_twitch.html
index b4a3e80767..2d9f9a7a5d 100644
--- a/docs/latest/api/evennia.contrib.tutorials.evadventure.combat_twitch.html
+++ b/docs/latest/api/evennia.contrib.tutorials.evadventure.combat_twitch.html
@@ -491,7 +491,7 @@ boost INT Wizard Goblin
-
-
aliases = ['foil', 'boost']
+aliases = ['boost', 'foil']
@@ -525,7 +525,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'foil boost', 'category': 'combat', 'key': 'stunt', 'no_prefix': ' foil boost', 'tags': '', 'text': '\n Perform a combat stunt, that boosts an ally against a target, or\n foils an enemy, giving them disadvantage against an ally.\n\n Usage:\n boost [ability] <recipient> <target>\n foil [ability] <recipient> <target>\n boost [ability] <target> (same as boost me <target>)\n foil [ability] <target> (same as foil <target> me)\n\n Example:\n boost STR me Goblin\n boost DEX Goblin\n foil STR Goblin me\n foil INT Goblin\n boost INT Wizard Goblin\n\n '}
+search_index_entry = {'aliases': 'boost foil', 'category': 'combat', 'key': 'stunt', 'no_prefix': ' boost foil', 'tags': '', 'text': '\n Perform a combat stunt, that boosts an ally against a target, or\n foils an enemy, giving them disadvantage against an ally.\n\n Usage:\n boost [ability] <recipient> <target>\n foil [ability] <recipient> <target>\n boost [ability] <target> (same as boost me <target>)\n foil [ability] <target> (same as foil <target> me)\n\n Example:\n boost STR me Goblin\n boost DEX Goblin\n foil STR Goblin me\n foil INT Goblin\n boost INT Wizard Goblin\n\n '}
diff --git a/docs/latest/api/evennia.contrib.tutorials.evadventure.commands.html b/docs/latest/api/evennia.contrib.tutorials.evadventure.commands.html
index 6e54a30a6b..c0bc2608d6 100644
--- a/docs/latest/api/evennia.contrib.tutorials.evadventure.commands.html
+++ b/docs/latest/api/evennia.contrib.tutorials.evadventure.commands.html
@@ -206,7 +206,7 @@ self.args).
-
-
aliases = ['i', 'inv']
+aliases = ['inv', 'i']
@@ -230,7 +230,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}
+search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}
@@ -307,7 +307,7 @@ unwear <item>
-
-
aliases = ['unwield', 'unwear']
+aliases = ['unwear', 'unwield']
@@ -331,7 +331,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'unwield unwear', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwield unwear', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}
+search_index_entry = {'aliases': 'unwear unwield', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwear unwield', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}
diff --git a/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html b/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html
index 3c27f3953d..5ca5d883d6 100644
--- a/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html
+++ b/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html
@@ -167,7 +167,7 @@ such as when closing the lid and un-blinding a character.
-
-
aliases = ['press button', 'push', 'press']
+aliases = ['press', 'push', 'press button']
@@ -196,7 +196,7 @@ check if the lid is open or closed.
-
-
search_index_entry = {'aliases': 'press button push press', 'category': 'general', 'key': 'push button', 'no_prefix': ' press button push press', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}
+search_index_entry = {'aliases': 'press push press button', 'category': 'general', 'key': 'push button', 'no_prefix': ' press push press button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}
@@ -266,7 +266,7 @@ check if the lid is open or closed.
-
-
aliases = ['smash', 'smash lid', 'break lid']
+aliases = ['smash lid', 'smash', 'break lid']
@@ -293,7 +293,7 @@ break.
-
-
search_index_entry = {'aliases': 'smash smash lid break lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash smash lid break lid', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}
+search_index_entry = {'aliases': 'smash lid smash break lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid smash break lid', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}
@@ -393,7 +393,7 @@ be mutually exclusive.
-
-
aliases = ['press button', 'push', 'press']
+aliases = ['press', 'push', 'press button']
@@ -422,7 +422,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'press button push press', 'category': 'general', 'key': 'push button', 'no_prefix': ' press button push press', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}
+search_index_entry = {'aliases': 'press push press button', 'category': 'general', 'key': 'push button', 'no_prefix': ' press push press button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}
@@ -520,7 +520,7 @@ be mutually exclusive.
-
-
aliases = ['feel', 'ex', 'l', 'listen', 'examine', 'get']
+aliases = ['get', 'examine', 'ex', 'l', 'feel', 'listen']
@@ -546,7 +546,7 @@ be mutually exclusive.
-
-
search_index_entry = {'aliases': 'feel ex l listen examine get', 'category': 'general', 'key': 'look', 'no_prefix': ' feel ex l listen examine get', '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': 'get examine ex l feel listen', 'category': 'general', 'key': 'look', 'no_prefix': ' get examine ex l feel listen', '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/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html
index 490ed1d1b3..506447cd20 100644
--- a/docs/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html
+++ b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html
@@ -570,7 +570,7 @@ shift green root up/down
-
-
aliases = ['push', 'shiftroot', 'pull', 'move']
+aliases = ['push', 'shiftroot', 'move', 'pull']
@@ -606,7 +606,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'push shiftroot pull move', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push shiftroot pull move', '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 shiftroot move pull', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push shiftroot move pull', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}
@@ -623,7 +623,7 @@ yellow/green - horizontal roots
-
-
aliases = ['press button', 'button', 'push button']
+aliases = ['button', 'push button', 'press button']
@@ -649,7 +649,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'press button button push button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' press button button push button', 'tags': '', 'text': '\n Presses a button.\n '}
+search_index_entry = {'aliases': 'button push button press button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' button push button press button', 'tags': '', 'text': '\n Presses a button.\n '}
@@ -793,7 +793,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
aliases = ['fight', 'slash', 'chop', 'pierce', 'parry', 'kill', 'stab', 'bash', 'thrust', 'hit', 'defend']
+aliases = ['defend', 'stab', 'pierce', 'fight', 'kill', 'hit', 'bash', 'thrust', 'chop', 'parry', 'slash']
@@ -819,7 +819,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
search_index_entry = {'aliases': 'fight slash chop pierce parry kill stab bash thrust hit defend', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' fight slash chop pierce parry kill stab bash thrust hit defend', '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 stab pierce fight kill hit bash thrust chop parry slash', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' defend stab pierce fight kill hit bash thrust chop parry slash', '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/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html
index bfb9482a11..18d2d1412d 100644
--- a/docs/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html
+++ b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html
@@ -830,7 +830,7 @@ if they fall off the bridge.
-
-
aliases = ['h', '?']
+aliases = ['?', 'h']
@@ -856,7 +856,7 @@ if they fall off the bridge.
-
-
search_index_entry = {'aliases': 'h ?', 'category': 'tutorial world', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}
+search_index_entry = {'aliases': '? h', 'category': 'tutorial world', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}
@@ -982,7 +982,7 @@ to find something.
-
-
aliases = ['feel', 'fiddle', 'l', 'search', 'feel around']
+aliases = ['l', 'feel around', 'fiddle', 'feel', 'search']
@@ -1010,7 +1010,7 @@ random chance of eventually finding a light source.
-
-
search_index_entry = {'aliases': 'feel fiddle l search feel around', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel fiddle l search feel around', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}
+search_index_entry = {'aliases': 'l feel around fiddle feel search', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l feel around fiddle feel search', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}
diff --git a/docs/latest/api/evennia.contrib.utils.git_integration.git_integration.html b/docs/latest/api/evennia.contrib.utils.git_integration.git_integration.html
index 570e0af164..5a48a9d247 100644
--- a/docs/latest/api/evennia.contrib.utils.git_integration.git_integration.html
+++ b/docs/latest/api/evennia.contrib.utils.git_integration.git_integration.html
@@ -222,7 +222,7 @@ git evennia pull - Pull the latest evennia code.
-
-
directory = '/tmp/tmp257gzhpz/d429646a9392307d3cac5702175c14fd5235a330/evennia'
+directory = '/tmp/tmpe5mjlcym/40aac8131477500881fecb7555f9fd031f7abb58/evennia'
@@ -283,7 +283,7 @@ git pull - Pull the latest code from your current branch.
-
-
directory = '/tmp/tmp257gzhpz/d429646a9392307d3cac5702175c14fd5235a330/evennia/game_template'
+directory = '/tmp/tmpe5mjlcym/40aac8131477500881fecb7555f9fd031f7abb58/evennia/game_template'
diff --git a/docs/latest/api/evennia.utils.eveditor.html b/docs/latest/api/evennia.utils.eveditor.html
index 8555b73bcd..262549f174 100644
--- a/docs/latest/api/evennia.utils.eveditor.html
+++ b/docs/latest/api/evennia.utils.eveditor.html
@@ -356,7 +356,7 @@ indentation.
-
-
aliases = [':j', ':!', ':A', ':x', ':echo', ':s', ':<', ':', ':uu', ':u', ':q', ':i', ':y', ':h', ':q!', ':UU', ':dd', ':fi', ':=', ':::', ':DD', ':>', ':f', ':w', ':S', ':r', ':dw', ':wq', '::', ':p', ':fd', ':I']
+aliases = ['::', ':u', ':>', ':!', ':dd', ':p', ':f', ':S', ':I', ':q', ':', ':uu', ':::', ':echo', ':w', ':=', ':UU', ':r', ':DD', ':x', ':j', ':s', ':y', ':<', ':wq', ':A', ':fi', ':h', ':dw', ':fd', ':i', ':q!']
@@ -384,7 +384,7 @@ efficient presentation.
-
-
search_index_entry = {'aliases': ':j :! :A :x :echo :s :< : :uu :u :q :i :y :h :q! :UU :dd :fi := ::: :DD :> :f :w :S :r :dw :wq :: :p :fd :I', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :j :! :A :x :echo :s :< : :uu :u :q :i :y :h :q! :UU :dd :fi := ::: :DD :> :f :w :S :r :dw :wq :: :p :fd :I', 'tags': '', 'text': '\n Commands for the editor\n '}
+search_index_entry = {'aliases': ':: :u :> :! :dd :p :f :S :I :q : :uu ::: :echo :w := :UU :r :DD :x :j :s :y :< :wq :A :fi :h :dw :fd :i :q!', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :: :u :> :! :dd :p :f :S :I :q : :uu ::: :echo :w := :UU :r :DD :x :j :s :y :< :wq :A :fi :h :dw :fd :i :q!', 'tags': '', 'text': '\n Commands for the editor\n '}
diff --git a/docs/latest/api/evennia.utils.evmenu.html b/docs/latest/api/evennia.utils.evmenu.html
index e456ba7fae..bf524e9d69 100644
--- a/docs/latest/api/evennia.utils.evmenu.html
+++ b/docs/latest/api/evennia.utils.evmenu.html
@@ -955,7 +955,7 @@ single question.
+aliases = ['yes', '__nomatch_command', 'n', 'abort', 'y', 'a', 'no']
@@ -981,7 +981,7 @@ single question.
+search_index_entry = {'aliases': 'yes __nomatch_command n abort y a no', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' yes __nomatch_command n abort y a no', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
diff --git a/docs/latest/api/evennia.utils.evmore.html b/docs/latest/api/evennia.utils.evmore.html
index d3eb3d86de..93470f5412 100644
--- a/docs/latest/api/evennia.utils.evmore.html
+++ b/docs/latest/api/evennia.utils.evmore.html
@@ -151,7 +151,7 @@ the caller.msg() construct every time the page is updated.
-
-
aliases = ['t', 'p', 'end', 'quit', 'e', 'n', 'top', 'previous', 'next', 'q', 'abort', 'a']
+aliases = ['end', 'abort', 'n', 'next', 't', 'top', 'quit', 'previous', 'e', 'a', 'p', 'q']
@@ -177,7 +177,7 @@ the caller.msg() construct every time the page is updated.
-
-
search_index_entry = {'aliases': 't p end quit e n top previous next q abort a', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' t p end quit e n top previous next q abort a', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
+search_index_entry = {'aliases': 'end abort n next t top quit previous e a p q', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' end abort n next t top quit previous e a p q', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
diff --git a/docs/latest/objects.inv b/docs/latest/objects.inv
index 092e4bbd7e1792d7f88e01de153ad327fecc6327..0b9c00646a93be674bd48d52f0a2ccc4255f9151 100644
GIT binary patch
delta 114214
zcmXteW3VnftnRXH+qP}nwr#)5Huqk(ZQHiJmu=&I=bX7e(kIiIHq%KnNt-8b7^ZO;
zratiqKsweyw_sSHoflEfEpIN9lu_w(u0eyA#EcrPBs)1-8{k}&ofw1ewits+oyvju
zj9oTk5m4KEWb{uWa5zn&{fk&c0m!!|?$h5?dmdcZ9;V$*T3s1)raq#Oj(-%%KxL%=2(SYU+;})EQQ~6!6|bohin>Q|hPW+WQp&64S_ouq?
zf*fT;RRiN__nL=Rmdf}#SxiVp4R`L5S$KX(v496~xuKKvLRoR>Iv-K4arYp4f9C?!
zJC->EMEaOI11xoM;rKmjsq4;7qgAYZo!MFGiorbCIiB;(1
z3qFj7Q%W3G?H_pMi^}g9#MiIG`cq(BPVL87AFgG;)9TA#^??}N)Bli{!_;d
zH`TbXY33EKZl{k6#rMawk|B8K;MXAxaPIXera$rw!so3!Bs_ofKwGu{Qn8H}UPZw0
zmUhP4P`0<5U+YMdIz~LzsUG4n-m%VxnuT-s%5TdWF?{B2nqX5utYavaeHmBl_D
zz#~@!+pIYR
zbXB|L9_qxR|BCJmtV;#gO36KjNTwyHVE&1Oh&VoO;HTrv#u;4Nb53ppL>vK1u1e=R
zS|IIszDiwU7J{HJM9E8k^<1cBUSW+{{|1O|WDGs!>6Ci;m;Yr55Uf0n*CBpNU4X4j
z=g=`O2?41~nRUg!pkV}Jqm8&%fFr566$A>~+#4n`^|&!@axcH`rbH#Hztszd5OC}?
z(f>#{i0a4Wb{g?!tlW?V%=tEa7*^_so?I#Md6BpgRldnBK!fn+aH9q7oa04f?^r_3
zgsG`wIM{PN5oh8KxUauR%v-RvXxX)$L3gfX0;QkhD5tk}7>>xB)PZElse#LI(F<5BVQ3_W|RmOqt)KGpBhk2%kP
z*{RI3OaUf32YZ7KnV;F~!QItdJrb$rYhmwGKK}%~gh079y0r3TFWwq$
zkLF&Vgf>CU#lZQr*S7Ta3o3Q5ah{a?;tDzVtRt~yzRF@#m?*DsI9~LS8_8WTRP|C+
zvtmyB!8l9=wo!sdikO1p(8Kne_~{MPZOPF2_AU=t6Ekc9?P}XE4L4I?6c|3g{f!RV
z+oz>k5yIwKJ6rj3l9mh7PlAu%Xc5B|)^X4%y`Sh8=F~KcXJyh$1llR6G
zEM88PQ1ozsHmlIQrcxaYd*5kbc+3biqQ46Th87uc)!X+Vg^&_3cdZ_IiE*lyWIJ|B%_JOPVE
z94QH;!yT;i7B@jc#{Jzl*CbC&7BRtT#VZ+?ltDYd-s3i6jy`UL;@p&J**&Te>Kb(<
zPH&G(x_NRG3IQp?E9@-T@KBE}1lnf%${ekMC1Y?*_O%Tw&9K9O?VQ_bdl{21Vn6Z^
ztbd9)c98S_ct^iB!T>TOCPSOHGD9vn7`wxVYP1*hW9{vS#XCjtpv3a0sk|YUwwf(a
zT=^rweFsDTK2$&r-(|OAk5JHI054@kwsp%ywSZ5fkowFyMXn?|!^rdM`LFmAw9r2a
zL@b$)p4xQBST3h-=-y$cKrkL|Fv;%2ciR<-ng!CYc5fC6Uadyw(oSt}ek82^w?FFM
z=X_Tsq0c($N5+C`Pm!DUFQEb0?RsHC1(^c?x99+^CC-GN*{^CT_pONFZ^GtH+sBRxn!V0dkAG{kKz}dPlfyVmKe{Y#)zn)X`9XZskRliCOXDB^Wwza%pPg;FNL)`;Gx!{0i544jUX6=$58
z$~0)57G%Rm|CK=F-rP!YT0O%aVEL0fQrLcn)AlrqiM_t)Cjn$A3BkkmvT)boo@@c&|EM;G
zDdL6|4qGQC+8x4+XI>2PfQ~Z;%BCeM`wa7(&7M@J
zyn)TmR~Pa&-penh;i3@vEDQ~BHg#1Ju(C#w;fkFtVkPJ-%dd{OWuUq(_=KDEd5aIZ
z_rZ$Sj;+|M(cyb_*LBbizfbhXAf960FwW8(z+u*Jd;X9`2)7hC^ceH6a7IM%Ao2Bn
z>kYQ0r{(xGh(5ISgb0}R=7&AaUVL&-#O<0i|IMlD5$-c%543|9`}JxQ;y()
zlH|Xj->T!yW;Hxa2c8UJCFhx`t?0tZxH=OXf-o|}d3n%POBX$YVSorLhjcD%`Nx^SvIpIsvwS90RF{g@+HOE&*Bng|#L!o*LiU4pd4=ff_C|8^RLPG>NI_a_8@2Zw1FwiIy~0$#m&D7?fwf=(;ULN
zXK{k}(Soy*9#M*~G*^Ku(C<=$e$hR-2QKt{(y)bO9ja@wDx*iT4ueLDD~x
zczxgY^;Jh-*N!fIh3WF#!(DJVDz7m>Q)7%SnACTpZlJ#({!uKq_NNo_8FXOT209UM
zI%K@Mg5O;Jj>pHb)qG`i+ObPh=e|+idPV_D(2hy7$FKnqT(;`2Tvuw56-8elvx`ge
zewYK@b2W?1?E)Z~dziYKT5U0cMe0xW_~=!pV({%bah_gt@y9oCQ7mibc7qYoHgqT<
zr!m7HnUPL|-r9Pvqa(z9`dKcW7Ia}?Jz;tItVHEs8(&l9g>{`uA*QaUEXF)4?uR%&
zgE44F+NZ``yG)Xh*>3i<0ey5h_TcFkN$VcJgQUs&t$=YNILv>~BKp`NG#Jr)u*HJQ
zkr3v`D&7nGNkFp@Iuq%$$q;iJ8Gpyv{aYqCGi-X$w3KUFv484(Lth2cg~(sk-b!(1
z$+1QmSi%c1!lMcfOnQ*a*0Ry3&>pzRBMNTzk;|&}k~mxn3<8DQMp~&@8GXBf^S>=Z
z#-y>VDgbsgFZb?LTi
zK7148YY#V=Ix+uVWHq4R5^5UxBFKls5`Fd5bX*MGo2J)Kp*4lHuC+Sfy%;9_a@e`A
z={e6XNs4IO8QKZs>)%0;YG<(6>rFK+(B1-=rT{i88e<1whOQy`Q=+HIGgDA!$@F8#
z3&?HC?R-xm^$%@)9usu;^aWT+>F7kV~jjvId#$JuV#co4{
zn^lg2CSkl>QPT=K4@=sv&?viP>GEsU4RR0OUll>TA{D{pD_iAvC$s49=FQ&jR-Ns}
zQxB^_!-f?+>!y#Jm96P0iMnkQg(vUp7nj2MEcE5pB9-&cA}e4DoA3S=ACa*%1At&H
zK|+<>cPP3|yiAdxh@vK5h5|qbeWwBaVd<9WGG3udb-efbQj@=S-gSY$wmj}>Ew|%L
zjVCx>t8Vq&xzgPu+os2Rry<6m;?~d`sA%mXLNo92{Fx_yBG#ZSFJ7xnkYGYfwr(fS
zz`MU>CE9IgtZe1{;vK4m$M+h!5@1lnIaaay8iCLM3+}5wj@tvNRieRVt<(OpgUEIU
zy9_rPkZ?1GZlKt+r2eUA*LL%YWuQ3Hv{K4-h~_7{Totd;cdNPaVwLu3oVGTm_Y$CI
zK68)JljpRROjzRq2=$#G(`Ec=wrRVfm}S0*fJ{_8yIin=v=x%y^Qf!I2e^P;r;P!L
zWUP2P@m*UbTe$n^U1Z~D@HocH=G-R8<`Djeg#TflhUGQHY&d>`3_!1k8zC+99l@FJ
zoxMeQ4z|xlk(sKAC;q*l7%2ytAW3A5`8NfPCmB1hc!7EPp3FVoOoP(e4egQZe6`=U
zP4Eh1z_V&;jd0M_Tmg_E{kO?f5&>3Sf`cIVu<lnq-*3pQ%qi
zcl9y*$j1LG;21BLcbg!W_up;GBm58Z{=*_%2ZbjdKq2y}S{tc0@bZNRpXqFcgCyHk
zHjO78>0E_{B-`8nsQ(n5pMRfqSqmqf?VMrl6%u5!nu-=rW|XZTzyFgVWouWotS!k#
zac90y)UhURXFlHlfZmzU7iFx8*qN^jd8`TD+3yo+tOL4WFNlkyCf*dstN0UPto_^x
zP|S-U*|FoqXZs=9k`GX;dY5cT1*l!VNw!1+)M)<$Kf&r9!lC_G>c_E_tP`tL?%ILF
z1_xri>z{!I2Lim?*?}YnT)f-dfd&UGyeS9ZJsPg?@MuRgJkhP;Ht6^Q?!zoF$pw&m
z{@^RA#xto+>|XwQy`_iPo4AwOhCIMRCHtHCduw_1B3UTzztEn)TRwsJ`M~9rr%z+t
zYnqlF!^22Gao-OsqCqnE4=oiN`mxmxtqtA?7zLtY5H}<)1oqe3!Nuj1g(3?}G2J0q
znAf$_1_%=^gAJc9f7bcY$bIEFDONC!#W7mMmgVDdBFxXoy*$1hB6w0CHFp3-5-_`x
zHB}E`?A{Ik!XwtZa5@FI@5JLYV<0Q;j)-XfE#_Bi3ldP>>*#$oHooCw#vN>2St(yK
z@7R3*QO5t1=>i7DGDHh_bW~cl|gB9#&NwD0VF;Rv3E}A
zH;||k5nO{)N8W1H_4&oazfl4-%cl@TTu{0;upY%3a8Pz^z%yDjtE9{gOoGeYH6i83
z*}JpPN-@ve++7nL5au$ltf?6&ZdLXDYBB%$B?W?aKwkN!_?6rV^y^1gnvmeB1
ztM^Ow0~+O$b;ldAg;fTCy=;i#fy6x1&LPi7Qo!wbb~g!1ub){6_9hk#2gn_OMtr}W
z#iDj=Dr#>Oy)kEVGHoO*b+zmzl(yuc>O>!7xHnv4mPQg{-g58f!U>xW`FDUw*vcxk
zl=C9t3I_FKk!D1Ls;y)HYx3_nsjk18;x;XACL{N~^^rbt@7V!-z-35rB_yH1L;3=v
z)9}yfNU!(i7d(z?qwUtr;XMV4O1bWb#1qaCLkW5{Gs=!96>aFz=knKeq1);mCcSe^
zxYk$ss0&ta{`Bgb&L}TQ976NXvqcn4;-#xKxG8RH(ey}FOqL>hC`;%rBNJ?N+;53w?+cAD^m!7@b4B|=0|cJBuTB7
zdo}W93J~&)l1YLmF#Tdd70&RJMbjjtJls>Tfl6ku3UExgyarWhZhlh;eBcSbBrf+y_(@pzb#59be+m)MvrG&)z~+UZ6eITVb$75cyFw{^uJzGY-vh{>Ke6*HV7haX;O2?sem(
zJZ?DQf1ev*#HL@`WC#DgxY-U&H<&Q`?(MirPyYZsDDI@Y&GK5h`9es%ym&)QSCKp+
z<_@ow`>8nbSPMIqC#MZW^)O@XB!&f2O^Nv>T=~fOac{UYRrhNsV
zFo*y!f2*!UFv&NG>~>jF%tmi!^h&w2xSBeG5o%}5pfg{thYo!G
z>i_e;Sv-jjQ-Mk2C+#ND?r}Vu@>93)JUQ4
ze4TFnPJ4teQ=2u~TWuj)yWh@4;01U&K}YZAWFybo`mY9c~KRFf=_35zMF$JA_FJl4MCI1jaI4_2(1E
z)%`va^z6kN73}d3N7CAm|Nc1bzg(|kHh`siFU=*LVNII})p@r)-GbLYPexv`Op0c~
zvD*5wk^cnvrHpiVHEL+^{qWwiZ1?9Yo~zwwfLRo)*|)eEsQ0$s8k(lB)kcwmLkIPp
zFhv%pOMIU;rrMvflxGSp7#MYvOT`{j{lhZ*!?T-St2g=V;NNja5Ti{mE?31XVDh`!
z1PW8nLQfzAZQ1K@(W2N4s?Rd5M3bPfLF>xe(3sT|yxdgVyK12oxt$DpOR9bh=P-uD
z%UHkjW;JGj8#-J+8bcJN1F0s=NSfMQW`{cJ@l-b?a_KCL6==7XyU+O(6)^TAR?m0_I*
zCTGT}XGYcKR8|#YTN|MO;9(*j{9Q1hy@!|Y^8>l2Z=d?}L-vwx7k2)*{5tc)oQO{d
z?Lb+<<9z2;dGsp5^9GLvsUjYTp38bpIp5=G(awWkoZG$l=?&Pbw4!|G&y}RH8n6b
z>70tn(rb@=E~6oSL(mMT(&ePmYH6fK~4YXT4Df0-KQ3
z)kiI!9c;26rL7>BdLJDXbx$OZohZpb6+uM?fMg(wpvS9IVR}1s86IRViBuJW
z?^y>Q8Ge%q3v+Y3?7UD~5ywKnhFVx7A<#V%P?tn$62NOWWKS8bMXg(Hd#H(s46~3y
zE*r=4Qb5S`X^4r5x(^H^cflW^4N2$AK6mR`uUV5_Ce`tqIy<
zfaR5mTZTP}MQ$(wA-Z9V&AVH3Voq}cv8VG(p`aGum@^q<
z+W`?(G*fb0)59pexs%nOVS(fGqt(kR5<3IK
zz3-+_JYQ7%u{EHU1f`j4C@N^99j_fxqJeuq-CZvn;y@)dmt?Fc?K8Vw?TKo(7w^W`
zoG!6xBE(_ne82;68|0-te+yHuuFcnYrxf78qi&%150fn~+Jq8Tt$m{J2@J0c1
zW_E(iEGyPM6fcj-c{y>QmA5t2gpH7)V*h)mwE+PK#7-LEr7E7up$YOpzN>qC0>;Phi~gg;W~_;IU%>;
z;&neN1R*H3NVk1>=buD=c?sqE&cjO)sq9#W7qhy<>{tE4dlID^F=nUi>VMzKN5Q4V
zLa$fmc;VA!=AV9-UN^H0(5Tn07LRq3?=HPKApbHRI-yMyMa5MBG
z*G`F%!fF*YBfgmTfP6v8fmk^XT+P8GH%dPpiVnnN%YZsn8mF@$qjNJQIPFb$Rh+UX
zU9iVb3MYbq>L@XT%!I-P1k*aWg$%trSXSleWD5Ch`}3RmZ+QO&>}K7iCyB)%Bh4>~
zbmjO``e5@o>GK!Td1j#_5~bqGOA7xJ=AZlvP-rjq=_eI%T6zy8@!MNNXC{r^wZJb1pQCL
zMwZnfhL3T;Rn#bO+skBYd5LY<9Fn
z$#HS6z)l8GhuI!X?IftFUhXH$v4*MG1kJO-`u32`9zRtF%hYj8!ytshYq9vOWrotZ6-GQ=9Y9rO&jBvRSWL$NT|sR)U(j;$@yv)F(oNu)MHzM^n`(
zKa3-=-zUN|d9#3Q$C+o>m_d9pJ1p)Ry%~A
z#{B=c)GA4-nfwmF!OVlGn5V?v8NxA;j>pSL0X1KXbeE?DM8uqAVrC2}2Lm4sH2_9z
zrX|>JOa(t#>LEK2(w*e>9TCSQ9Lw<%9p9hJkU@D9mhnT)O4u~-sjW|;<0Q9j-0K}&
zr*W&sLSyEV(p}Zhtl;+|DMZ9^m=i(9bo$&|1H|q(a@U!7ab%Yt(9N}VAmXb7dVYc*
zBGb&|kXkC`#!1xwKqIn?M(S(Mi347x>?#P7(K%P!HyjKQ`mt-+0?J*U-0w-Kl>SjG
zAe1xKwhP5odhK{Jvsu>PtM!d`3arToggC()@?ThzdAmk1dJ54kwu~EKhE!+Cx+VhXuD*XDI^;8PlGXyP53kj>RB7m$prW?U?
z^I*zOtyu_P)?h$U(hZArsiv-Ot!#FES6Jqx{6cjn_PLkY)7-{3*T7I4WtsG<{Q9A~Y3xmwirJQ{8|%_w<}6renh=o5ST_7+;m?h4
z&_XbaQ^_#=o(Zmu&DJLat!1*`nGe$xQ73zTSGhuTrT6wwU8e=5Ms84rC8g8tAPkke
zL?`?fU6kZs#u+m|mvuxZ!tX2Z4*(ymRic}dap@8EUg&=(O9z6Sdau_7o@(kf$x)qs
zBrIbRKX9HwGyFFhJ)Qt1q>Z&!6=6DR*LTK>r{MR2N*3IPd5;BvzJ2=wS
zV#aR|mVVJ5-pSzb$}=Jqaqo8p8sxXpVX}X#w&57LO8RFI`xqYeNR9Z{J4m$O`^{BS
zk97k{U9jG;R!38%$8cNd{oAx&&H~RB=eI4{XT^
z$|Hv&kUv&@uwf47qQq7Wp89rzbiL$!Bikc+c_iNx=7Yx)Py_;uJr1UIbz+w|p8D8+
z0uOugFuM`Do_9I#3`f{^Gv~g}HTzfQKg{QfF0%z0Blktgp?bx}Ou);r4Q;lRBgq&3
zhq64soed#>0LYf)u(Y@3xXy;K2X1`F<(5tCQvkVLI=>Yr-2KBS^g{FA^(t|Xvh52;
zlTnChkft5{R_|^T#h$tG$$jy>w5`r7#sFNsF9|x|-nl1!UN*p_%)3{aoMg5WFFqtTr
zJFo;1{H=z(;ryxRyYlXH7R`ka%5@o6ypRKOO
zm(Tj8j3J}0WsNnyazy5DVJO9Np`en8mfC}|15#*^}1-R`)4E;3-
z`rU>8zccYJ{zM2}1C*M72MYMRud^26*MKmjqg8`cMY7@ibk&{%@W_sim(YKTMtp=`
z=M}x-8O7H<&j`Zr1-~{R-c5my67U`*X^#|v69t{e^PUo~4%7+72vU3YD#K_i5!lrs
zni8t%0_OZqnRGf3aR8F^mwSychaWwNDNvt+O)!hczW$wo)O2;)l<-ikHBYF+_8MyE
z{weC0l7w8`Z|FZc^Lr3y7T-`w+>fFd1$FzBVn0`N5c`<7se
z56dv`6hIH~5q_p&U(7%ck_gu2P3S%fobG>%Xy}_VI&W3H1^_gQBPm_hhQ)~TN$h>3
zb(JU(Z_xadGH0Qo3ZeLUM{9@^oWHX}zrutO9}~QfV(W^}Dddk@^_;+oj$FmWj~DKz
z`q*OYbC#*w3z9fO>Gx|;U-JS)cH;muL
zCrQ42MB;KmsAa;da>20tA2KBXO96*sz)E;nH#vY#tE=<;3xb->ZxW2^u5ImTDsazz
zz2SMt!q{;Gk=`VN_o|gF1f5Zh{43|FK=Kq)^@}D95AfyiRugv9HCWe>4-5$Voe}E2
zyez{Y+Aety6k^)W`%9!HcnUcT5_7Wvmif>5s8nH#q3WS}LbbDI4PB8c4E&98qw~c~
z&Og6iV6T__0EK`7d+-1uI|7f#>4EaNC(NNs4t{`RCek#RIvG!KX3__eULWMt4u0HC
zHH^!+0-%;GGeM7TPh(YHL-e?O=qfvAk)iOnf+{afp{@S{rVYY>r;U1Ai(`iA5}UG}
zfk@HwCS#mvPtWfyBq!q5nmNzpPI@hjxL1OmPKp_A`$^ovW^6Fc%qsjUzgKUi?W}jt
zE?-K%N&0Oe8#xbEyOBMs^{7=dy4T{!aZki}6L9>IE<4gHokzJ$Yit00FH@hPk?>49
z+1czbRxW!9DYX9l?r*b`gip;HCZ!%5LoB2s7)Y}x5@^Q1IiQXbW%$j`4!Chz_bJE1lR=
z@ARr+^F0d_6ZAtLekL41wVDGiL#`+QbxQ0l7%u}C4{!U9J;R4gHu<53@}6tV^1>(x
z88flmJ1xxFKb)Txx|_D#Rl5!K^pwrx1EWuMpuU>$Sn
zI0E`7jxWBM8P583)A
zbZ6(N>PAGTbW?9t!QPpiC^l*y@F7Ar>Q(mmtX|e-X#kbX_nX?=!il<{g4x7d^WJExS|!@r`V7q!UkObDr7t;Z
z{6lBv3sKGyleLRo^|VR#pziIe3S0ne7HZ$f{^@ripwWfXG@JlFC`LC1n~PU|F7uR54>
z_2uQ!d3`T8(;{xNC`1VWh~uY7G`Sb96pmi&po++X3k>~g7@cl*1MhW6)S0s~mg8En
z!Cu-`5np>!Uo*0a18@7*sbfH+3SY4WliGP#^}+I>qw0I?H-CUR!DBePf;
zL2#cENNYYefO)OElgM)Uy;JyGUD)fW*#|-DwI=0Db93To%OKGMP(r1wBJallKj
zrNV|6NI5q|o|Yo}K+#!L^8ThIK&VIeHmWDS`&bE;bEpsUf4L1dk@2;j^+B8yg$ig+
zNWL8$c`;OW2RMjow_}~W$Ne<39wenxi70hAg&R}qG&{9@DA|3C@)@&I7fQ;z*K_)l
z%TQJ9U~?^~Go8%=BJy7%n?q=6e^NJE2W?dL!j89?RuJ+3DxPoh-Hc`Od`Vk;qiQ>E
zMKz0f!8uT&!0c)r2K!TZ-c=kMT|Sv!9ny%oUuMT{d#kSM4V=Vd6vWXa+Ah!O+TVU<$xSbeK+-jv-=q$CSklhA!Y<^94CU
z$5X>g`dC0^)I(FiTdHK{Fc8Jy|J%JyXgLhd`>uM-$HND5gSjOtB#GDILkLAc&4s+(`vjan4I+bE9jS2s`zF
z=tIBJ%w;57dP~h|E~bOE7Ao4UVd#LaIu=WkFs4KR=#$`_;wkI$2eN70cThti#d?Rt
zbPK<6UdTbrEERrZE;rXZDQXB@s4N90h)|uHot5&zCeL|2dwpJ2GbRzB;(sN}SUM_zC
z^2p`@m<1{Zu
zV&~yNZIt!^^6i}5J`&ydo5I?RolNR~ro+_%X@#y%c9WeV#jV#LFG*Gkf|D$<>kwd@
zNWTDbL1G|jun*;Q1pEUxlRqqCAoB+ipgq@4-&RqL-uHJzY@9jwtjU{!9ApstiYY)K
zkz|PoKsIhq^`H{F&1
z_s%f1WHVm~Okhu$;p!24(9l`+^%I*L{4%sSS&6~?$tf5DySlL4KU+ih^<$kJ2<9!J
zrUSgsxT+4G?JAo3pV!=gULEX5x$g782*5eec&Iu=3fsyM{D6LYSLtp+DXmdZ=#v~V
z9mIj{0i3FS2E?4Z=*hGjK7$-^&y^!!ISpZ_MOpO@t2T8DE_9s4*MvJo0taY#Lxu;xWJ8jDHm`c+lOyV(oOlItk;#|K$g;L0wrY
z%upL4JTWUm7IGjb=w^xk(;OkzmjP4TM&fh+Yg9YYqqaIj!v+N?pbXr2!Ovz==xEV4
zw8`DN|tp^Wy3r;YrSr+H%Av_=&0*MXX4rB@x6tvKnaR?AGhbSsJ
z$5HHyX`adL?*^M58M3v&x^U!j6Jabo^a#OH7%50Wgbp2rr{gy#O0-=1hTElUJklGqoo4Nb2^
zIdnU)cPSHON)5VcddRkwZCA5zZwa|s!p2MY^fO^#7+4?ef9c2UG$nt@d1}9MN%nEG
zIbL4m{k}Q!AxhxqKnLT&l^L&iCJq^If{CHJcp!=OnC=GQ-?J6zAnic;Yx@bekMh|!SRltMYYyHy15q`Bm+g^1=`8x
z;N*wr>Wm3{e-i
ziJ|W#x|RGyuEGIW@kG5L8+wlj7<#N^u9wB`)+|XJWHGsrHSXnqtVLXJ2hhC5Jx|Jr
ziG-&b11NCM4z*R+hpu#OSjrahDCSwciF2BmqP$XC!g7@HMk}a>q?+&)eA;q;tcrv=
zLzrMw%V!zj&ve0!ht4sI2J811VWsmNXms@
zIx!5iebZ6}QS0~~foj^kDq;F*DG#3ZxHJ{j5XK&R4pi9N6hRuGOvXc=Rtq1(?lQCEO;v+R+ydT7TT(e!#Dug~ewAqG{&_G$g
zemI^(;LY5HIDqQHm&DPn4=GQhzcD@ylJUesGN%OP6MSUJofJ%UQ%PV6(x
zD|0dRu;8s>CzB4-O$K+Y>%8v+%XcoI~Q-|Bys$vMCDy8d41;
zezw5m-eAnx#ydH(me2_m4`}=889CU3*=>7xVXwB4SlEJE_MoJ5Ck8s;!6aE9hTOlj
zA~`i6@mM)hrycdQUgF>1X`$pn2*)2?w;VZY1FkRB3>~=GmZd=?C%C-YR3+aala|Q{
z4=lWwrb-T~pmYD$-&_s0pC23nf2%xg5<~i|mokL0>1FkkQbsuat>+FGmhB9R>4}QC
zbNN5wqiZy5=z%IIXDn9oXP(%h_z6N4t-Xk?Lmm3=j&FL!;T;5xlLk^GXnhs*CjJXa
zis2PG!bK1+8-RKFw~RdjD0UWmy(()Wqk{kX5_vCxp~VBfR>`m@
z#fW5dq9Y`PF|o`YLzxFvnpIhI{pD5k{ZQ6iI3G2e?4M=ZI|cU(D>a)#tDh-f8ZM`M
zO-gchMQvV0_z?f~Vx`eAGEEZd23M%mpB4ulii$TC^DPtnY%0@+w&j5wGSUGya8#%r
zJp+pAjW8Z-7ia)`I!%xc;m9A<>WZfcInmC*R
z+e0zTmn(9Wiw$RaY7X?t4&yZE$6Sjemo{5yQDu9IPPX!Wm+eZxl+SVv8Fq(Eu0n=H
zxKt~neMD=)IZt{g`Q9v=e?avT$XtpuH5!C#NabJf{kAb4>djE^iSv6$QulSmkQNVJ
zDFKKO-TT3{AcZy=-9oCzCUFf}Zs0fUE4La^wYv!;{)Bf(t%C-2{^M^4m+d42N%&WTcTHrFY?5G&6>>bQCYhG*GU;N{m9TT{vX#+
zPvAzIrLC-L<`9klsM7yLzflkF8@x
zcM7d1I#b9S=6o*rF?m~M_R@(a7Jr0!Jq8lCj}Oa!rLnrA8Ov*I#zU?ds(E_)-7Sf!
zpWXnpHhuqP$YpIsc^k~y=&am78^@2Hw~h8Gze1HQcmG`dT$41$l6TD|NJ|lfX2Obg
zlWg$}=VhZ^Ew9Bn)3JL~06+hJLCgLd`*PfNKxkSiD4q?UmLz)jv|x
z_)RRyLS$m(f5P9$mlFu;n=>$0bqm?ZG6ARsyeEl%t>StY&F`N&z;=!6JM&|#l&q%m
zK9W|>eq&gw6}&h9y?{`6)@D-50xVxmPe?=$D)}skGJr*4
z5U%kI3hIsm`Rh<9-)Ly$mel_!hM=Z#EeiN>h?SyUq%Xj7nMj7UFz@qHs^&bv#cLLU
zC_(OtCYKUL2ye{hqrS|`3AZSVm57#ZdX~PBaw$jPuBF+XAw9vkV9rT5EL*|~QOeMW
zH_)F6@wH8*;-%^h!~h_9GwJ;N^b#r7<{^b5>8h#h|W#U
zcex`Eq~0e^FN(pXN=;&2-JFtCVBzVMzj2C)?stjgTgam5cgd<62pK`$&kaI)EOnvY
z-3#!2L~-A$ky%Q3OpCyw-nnqOl!HqZ==?-fEO?S74jOKKHURY86g@?c
zP$w!gFi!JNOHc;QoE%oP1I1a!8-cxQhuc{}eZ5+SS-}9l-}isV_EvV`hO(pLx}LGj
z-mjNsF_({7TT@x@_ehp08L{C&&ru`S$L}*EjD!L`uhF5VYTU|6VSU;0#Og-UzMF2P
zM{Ml2JU#DtOs=?A?Ue}WuYg=5b>KOh3rHS_r#V_ykZph>1R+zci2w8j)zp?s%1u?Q
zw1GAeVW^pSfbcPcdDi@gf-;P-ueg)Z=PCr*`#gHLe+~(ggKY)0DMHUv*wG&*$t;LP
z5ms!sAzT@*ynW6A`v|K~>SJiCI+GziltE$Uz`ds$XU)R_7=(?EaKHp=W>%y|YFnk{
z;otHjm?r}rY~)>dg5FK2cT5+%OJ*^|xGTm%YGVb48~p8vW<%0tRN3HS0r)+J$$1r8
z*mre(2WBUOADfbnB;h%~5`2R6T`Rc3%nEg8A1B@dLypFu-YU-#9-{b=@&D=$;l}k9
z7?9iO7CDJ4cMBrhH+q~_!MLbWYZlM`=fN_u`FBB3ERo4I2pA&GihK5iVxzYDKZT1|n)x)xWZ!j7fp`q1;;^-Gw{Qw}5*%NG+@2C^zm7
z=8--T*Mla;QK94wWUN8;h-mTr>T1|uV8{U+W77E?_y1%_e`p;GYEI}LO3Ni9{A7xQ
z79iaq#qhObWT=nz
zh3rAGblX}iRP6jwX*Nd`IwT~8PByCXeov1{7V>d^UaiAiSIej;14ajs6r?^OPn8Yw
z5|RNJaK1mZwvH!(I==Ksez@sP5s9Msq&Pp&{}S`b~#XBi#M
z3WUfeo3fnH`(YFQ%P7A%r;7WwZ5R-*375Iawso*zBzhD1mn{`r59@HifN#3crFer-
z1WU~|78V`-{{dz|nZH=r&y!Ky1b=UrH86urQ?}B;-pk|td`7Mu25>Sw8yc0mCIOR_
zuVc`li4xSRc^jfu>&SQcf?<^pqaJ8|g6MpJiHlbnJ`3^e&ff+^te1)N=^?;n$Ace*;w;rumB)1hgj(F@Zo
z5c@YA94;*v9Sm9$9vsek=WyJctR#rw%01?5F{LsM5u^~bC6XKrNXlBsZp5HVgfWL+
zTC9ca!ZaYwIBv5gG2%Bv9S$YyMc)w{v?JXC4s#-fIU!+GYg{9B#ebSYKr%@(VhzHU
zB(w5D7V^vczxRmVp7-Vu692(|SkT*g>(Sm#C{(dq{H1N*Mr6>hNy`$C1!`a)^~Imp
zhyYuM(u#)gaA?!^J8BlA3DZH617`9`>?K+Fl!4H!!ec~G22ZA9h5O;GOwWm-tmer$
zV48$u4Ha=t&WW)saDTR9llnm&spTy}sEw$WQUhRDLY#aw#cVhlNuqSS%bsD|nLTB}
z{Pd8@(V3mfq>YlwrIqF9WRjf+`L@n`xITu%=W`S=$zMtCo{BWR3tQ8*Q}CT&L>T
zP{^ag6FIWeEq?%Xnhp>w-~{M)-4r|Hx*_vrof7@fNVC;akKvjOI1(Wb|LKNm5=oA-
zQlxZC+*8yvw&!FNMvMGg>P0h)3MH4s%cu)Cp@5zlmbVrf$-(3TdUhl=wV1}#cNtq#
zn6;AB#u|$^k+v#zMiB4?@ed{Oz;`9KyWy&(tlRzta%a0wf>#xMs
zKn{`5gE$olub3AC7&!Qsut}A-hcf3^ZCcs?ZwT9>$_V6v(l6Y
zF>5829)CcWrO3J_!@XJii>6a25khnHzomZ8nu(Mp5Ie~Dls^;JRZ2;-$#jXsww_v9
z0NBJU6B93II;lIWp_=H0)xBAl2J~vaux!EXI503zMeG^OV0#?YGz`JlN~(!JWxmTcri2GCn(FXtEJUC7E3%gDQ~E4>2}Gmh
zId!KKO8sgVCzo52hqS}41Z}=ffq-(8^+1v+`3BTBMBxv*I1G0*!NgjZZG8092#F_c
zh<`!0&X8T$eVuh^Q#UUxt}h;RIw|aX!Q5Cfych^wn_UVI4~!i(`&trenEJBX4s}~U
z#MW3P)H^1AfKwTz)=sF3^%vwg;HHFOl~{H%;?V&rI5=}|LNOBbC$yW=)DTgDU&nSc
zC%|Nb5Vi){GoiC%W(Oi0i?F50UK%yW{C{PKWRvrnj2l9*Y#SU5NM!8lcp`WVD+Dyp
z{*Ix!fsc&Lw>$0|z-2-ZMnW<&YZo3CZSvyb0W}EB3~+;H-4G)6vFSh2F97qc2r6u)
zNkJ2Xq5n}Fz=FI&;AMq=qP86dY|$&Knat6Tl&kR+psX`;`0BB)zXYV?RP^)Ul7A2v
z3-RB3)VzpZZB$Xb_>Bnv!8~a1=vATG=WI8ptdHbw@uye0o)uwP$giE~ce$|E(^B(}
zJizdHioXJWaKExp2@f@-$nYkMMd|0FEYpJ6OhW>;3a^q8E=ODScyuC}Xs|H55@R98b
zV_al>t>Act!%WLJKH!mDf6j@NXC&=o428llx*%cTWnNp-gFoxIapb{
zDPLI0?YgG8?`?O!RVF(II~>bTj^Yu@x$rbA0dE?t#I^wnZtg-qfI~ftZfd4(oz_|a+m{C!9X2CaR4}C*+Rq;GEw;fxt(|?XY-qG)beS501
zK^1CXQ?7d)5ya9h9>m}tmYh@oYZGURt1Vg*
z`5ff)1VqT~N!aovaS)zQZ6ZX3t1(`>!K9RQ9{O7lbmP&rJ)QX!Z9svE8a1KL{Ql;h
zv>sq7M&q-vuIx8O)qnE80s8V+OY}fQR~m%B
z*p*yUujCsR=G*^a)pS#rIjYL+rS82mSdn>8K0cBUBMa4qT>F6wU#)9~F0*N6X)F`r
zsF|xz*tc1QOMWxt_%jc*+Vq8gra0kJ3 Rt=Mxz-#!%<
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 |