From 72b06ea80fa9eb629a98fb91280e9909d0c504d2 Mon Sep 17 00:00:00 2001
From: Evennia docbuilder action
Firstly, set aside a folder/directory on your drive for everything to follow.
You need to start by installing Evennia by following most of the
-Getting Started Instructions for your OS. The difference is that you need to git clone https://github.com/TehomCD/evennia.git instead of Evennia’s repo because Arx uses TehomCD’s older
-Evennia 0.8 fork, notably still using Python2. This detail is
-important if referring to newer Evennia documentation.
If you are new to Evennia it’s highly recommended that you run through the
+Git-installation instructions for your OS. The difference is that you
+need to git clone https://github.com/TehomCD/evennia.git instead of Evennia’s repo because Arx
+uses TehomCD’s older Evennia 0.8 fork, notably still using
+Python2. This detail is important if referring to newer Evennia documentation.
If you are new to Evennia it’s highly recommended that you run through the normal install
instructions in full - including initializing and starting a new empty game and connecting to it.
-That way you can be sure Evennia works correctly as a base line. If you have trouble, make sure to
-read the Troubleshooting instructions for your
-operating system. You can also drop into our
-forums, join #evennia on irc.freenode.net
-or chat from the linked Discord Server.
After installing you should have a virtualenv running and you should have the following file
structure in your set-aside folder:
vienv/
-evennia/
-mygame/
-
+muddev/
+ vienv/
+ evennia/
+ mygame/
Here mygame is the empty game you created during the Evennia install, with evennia --init. Go to
@@ -85,23 +82,20 @@ to compare to.
Installing Arxcode¶
-
-Clone the arxcode repo¶
-Cd to the root of your directory and clone the released source code from github:
+cd to the root of your directory and clone the released source code from github:
git clone https://github.com/Arx-Game/arxcode.git myarx
A new folder myarx should appear next to the ones you already had. You could rename this to
something else if you want.
-Cd into myarx. If you wonder about the structure of the game dir, you can
+
cd into myarx. If you wonder about the structure of the game dir, you can
read more about it here.
-
Clean up settings¶
Arx has split evennia’s normal settings into base_settings.py and production_settings.py. It
also has its own solution for managing ‘secret’ parts of the settings file. We’ll keep most of Arx
-way but remove the secret-handling and replace it with the normal Evennia method.
-Cd into myarx/server/conf/ and open the file settings.py in a text editor. The top part (within
+way but we’ll remove the secret-handling and replace it with the normal Evennia method.
+cd into myarx/server/conf/ and open the file settings.py in a text editor. The top part (within
"""...""") is just help text. Wipe everything underneath that and make it look like this instead
(don’t forget to save):
from base_settings import *
@@ -210,10 +204,10 @@ This creates a new in-game Character and places it in your current location.
Now that you have a Character and an Account object, there’s a few additional things you may need to
do in order for some commands to function properly. You can either execute these as in-game commands
-while @ic (controlling your character object).
+while ic (controlling your character object).
-@py from web.character.models import RosterEntry;RosterEntry.objects.create(player=self.player, character=self)
-@py from world.dominion.models import PlayerOrNpc, AssetOwner;dompc = PlayerOrNpc.objects.create(player = self.player);AssetOwner.objects.create(player=dompc)
+py from web.character.models import RosterEntry;RosterEntry.objects.create(player=self.player, character=self)
+py from world.dominion.models import PlayerOrNpc, AssetOwner;dompc = PlayerOrNpc.objects.create(player = self.player);AssetOwner.objects.create(player=dompc)
Those steps will give you a ‘RosterEntry’, ‘PlayerOrNpc’, and ‘AssetOwner’ objects. RosterEntry
explicitly connects a character and account object together, even while offline, and contains
@@ -224,10 +218,11 @@ offscreen members of a character’s family. It also allows for membership in Or
AssetOwner holds information about a character or organization’s money and resources.
-
-Alternate guide by Pax for installing on Windows¶
+
+Alternate Windows install guide¶
+Contributed by Pax
If for some reason you cannot use the Windows Subsystem for Linux (which would use instructions
-identical to the ones above), it’s possible to get Evennia running under Anaconda for Windows. The
+identical to the ones above), it’s possible to get Evennia/Arx running under Anaconda for Windows. The
process is a little bit trickier.
Make sure you have:
@@ -273,7 +268,6 @@ not need winpty.
winpty …/evennia/bin/windows/evennia.bat start
Once this is done, you should have your Evennia server running Arxcode up
on localhost at port 4000, and the webserver at http://localhost:4001/
-And you are done! Huzzah!
@@ -302,7 +296,6 @@ on localhost at port 4000, and the webserver at Arxcode installing help
- Installing Evennia
- Installing Arxcode
-- Clone the arxcode repo
- Clean up settings
- Install Arx dependencies
- Adding logs/ folder
@@ -310,7 +303,7 @@ on localhost at port 4000, and the webserver at Additional Setup Steps
-Alternate guide by Pax for installing on Windows
+Alternate Windows install guide
diff --git a/docs/1.0-dev/_sources/Contribs/Arxcode-Installation.md.txt b/docs/1.0-dev/_sources/Contribs/Arxcode-Installation.md.txt
index 815d3f27d6..3d6cbe66a7 100644
--- a/docs/1.0-dev/_sources/Contribs/Arxcode-Installation.md.txt
+++ b/docs/1.0-dev/_sources/Contribs/Arxcode-Installation.md.txt
@@ -20,27 +20,23 @@ better match with the vanilla Evennia install.
Firstly, set aside a folder/directory on your drive for everything to follow.
You need to start by installing [Evennia](https://www.evennia.com) by following most of the
-[Getting Started Instructions](../Setup/Installation.md) for your OS. The difference is that you need to `git clone
-https://github.com/TehomCD/evennia.git` instead of Evennia's repo because Arx uses TehomCD's older
-Evennia 0.8 [fork](https://github.com/TehomCD/evennia), notably still using Python2. This detail is
-important if referring to newer Evennia documentation.
+[Git-installation instructions](../Setup/Installation-Git.md) for your OS. The difference is that you
+need to `git clone https://github.com/TehomCD/evennia.git` instead of Evennia's repo because Arx
+uses TehomCD's older Evennia 0.8 [fork](https://github.com/TehomCD/evennia), notably still using
+Python2. This detail is important if referring to newer Evennia documentation.
-If you are new to Evennia it's *highly* recommended that you run through the
+If you are new to Evennia it's *highly* recommended that you run through the normal install
instructions in full - including initializing and starting a new empty game and connecting to it.
-That way you can be sure Evennia works correctly as a base line. If you have trouble, make sure to
-read the [Troubleshooting instructions](../Setup/Installation-Git.md#troubleshooting) for your
-operating system. You can also drop into our
-[forums](https://groups.google.com/forum/#%21forum/evennia), join `#evennia` on `irc.freenode.net`
-or chat from the linked [Discord Server](https://discord.gg/NecFePw).
+That way you can be sure Evennia works correctly as a baseline.
After installing you should have a `virtualenv` running and you should have the following file
structure in your set-aside folder:
```
-vienv/
-evennia/
-mygame/
-
+muddev/
+ vienv/
+ evennia/
+ mygame/
```
Here `mygame` is the empty game you created during the Evennia install, with `evennia --init`. Go to
@@ -50,25 +46,23 @@ to compare to.
## Installing Arxcode
-### Clone the arxcode repo
-
-Cd to the root of your directory and clone the released source code from github:
+`cd` to the root of your directory and clone the released source code from github:
git clone https://github.com/Arx-Game/arxcode.git myarx
A new folder `myarx` should appear next to the ones you already had. You could rename this to
something else if you want.
-Cd into `myarx`. If you wonder about the structure of the game dir, you can
+`cd` into `myarx`. If you wonder about the structure of the game dir, you can
[read more about it here](../Howto/Starting/Part1/Gamedir-Overview.md).
### Clean up settings
Arx has split evennia's normal settings into `base_settings.py` and `production_settings.py`. It
also has its own solution for managing 'secret' parts of the settings file. We'll keep most of Arx
-way but remove the secret-handling and replace it with the normal Evennia method.
+way but we'll remove the secret-handling and replace it with the normal Evennia method.
-Cd into `myarx/server/conf/` and open the file `settings.py` in a text editor. The top part (within
+`cd` into `myarx/server/conf/` and open the file `settings.py` in a text editor. The top part (within
`"""..."""`) is just help text. Wipe everything underneath that and make it look like this instead
(don't forget to save):
@@ -184,11 +178,11 @@ name).
Now that you have a Character and an Account object, there's a few additional things you may need to
do in order for some commands to function properly. You can either execute these as in-game commands
-while `@ic` (controlling your character object).
+while `ic` (controlling your character object).
-1. `@py from web.character.models import RosterEntry;RosterEntry.objects.create(player=self.player,
+1. `py from web.character.models import RosterEntry;RosterEntry.objects.create(player=self.player,
character=self)`
-2. `@py from world.dominion.models import PlayerOrNpc, AssetOwner;dompc =
+2. `py from world.dominion.models import PlayerOrNpc, AssetOwner;dompc =
PlayerOrNpc.objects.create(player = self.player);AssetOwner.objects.create(player=dompc)`
Those steps will give you a 'RosterEntry', 'PlayerOrNpc', and 'AssetOwner' objects. RosterEntry
@@ -199,10 +193,12 @@ as well as support for npcs with no in-game presence and just represented by a n
offscreen members of a character's family. It also allows for membership in Organizations.
AssetOwner holds information about a character or organization's money and resources.
-## Alternate guide by Pax for installing on Windows
+## Alternate Windows install guide
+
+_Contributed by Pax_
If for some reason you cannot use the Windows Subsystem for Linux (which would use instructions
-identical to the ones above), it's possible to get Evennia running under Anaconda for Windows. The
+identical to the ones above), it's possible to get Evennia/Arx running under Anaconda for Windows. The
process is a little bit trickier.
Make sure you have:
@@ -263,6 +259,4 @@ mkdir server/logs
winpty ../evennia/bin/windows/evennia.bat start
Once this is done, you should have your Evennia server running Arxcode up
- on localhost at port 4000, and the webserver at http://localhost:4001/
-
- And you are done! Huzzah!
+ on localhost at port 4000, and the webserver at http://localhost:4001/
\ No newline at end of file
diff --git a/docs/1.0-dev/api/evennia.commands.default.admin.html b/docs/1.0-dev/api/evennia.commands.default.admin.html
index f5aac9e474..fe99d81d00 100644
--- a/docs/1.0-dev/api/evennia.commands.default.admin.html
+++ b/docs/1.0-dev/api/evennia.commands.default.admin.html
@@ -257,7 +257,7 @@ to accounts respectively.
@@ -288,7 +288,7 @@ to accounts respectively.
-
-
search_index_entry = {'aliases': 'pemit remit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' pemit remit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}¶
+search_index_entry = {'aliases': 'remit pemit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' remit pemit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.commands.default.batchprocess.html b/docs/1.0-dev/api/evennia.commands.default.batchprocess.html
index 3669e93060..ef4662f632 100644
--- a/docs/1.0-dev/api/evennia.commands.default.batchprocess.html
+++ b/docs/1.0-dev/api/evennia.commands.default.batchprocess.html
@@ -78,7 +78,7 @@ skipping, reloading etc.
@@ -109,7 +109,7 @@ skipping, reloading etc.
-
-
search_index_entry = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}¶
+search_index_entry = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}¶
diff --git a/docs/1.0-dev/api/evennia.commands.default.building.html b/docs/1.0-dev/api/evennia.commands.default.building.html
index 1da445761f..2307f78c53 100644
--- a/docs/1.0-dev/api/evennia.commands.default.building.html
+++ b/docs/1.0-dev/api/evennia.commands.default.building.html
@@ -532,7 +532,7 @@ You can specify the /force switch to bypass this confirmation.
@@ -573,7 +573,7 @@ You can specify the /force switch to bypass this confirmation.
-
-
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 '}¶
+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 '}¶
@@ -1285,7 +1285,7 @@ server settings.
-
-
aliases = ['@update', '@typeclasses', '@swap', '@type', '@parent']¶
+aliases = ['@typeclasses', '@parent', '@type', '@swap', '@update']¶
@@ -1316,7 +1316,7 @@ server settings.
-
-
search_index_entry = {'aliases': '@update @typeclasses @swap @type @parent', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass update typeclasses swap 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 @type @swap @update', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass typeclasses parent type swap update', '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 "}¶
@@ -1773,7 +1773,7 @@ one is given.
@@ -1804,7 +1804,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/1.0-dev/api/evennia.commands.default.comms.html b/docs/1.0-dev/api/evennia.commands.default.comms.html
index e59ebb3aa9..397cffba6f 100644
--- a/docs/1.0-dev/api/evennia.commands.default.comms.html
+++ b/docs/1.0-dev/api/evennia.commands.default.comms.html
@@ -196,7 +196,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.
@@ -722,7 +722,7 @@ don’t actually sub to yet.
-
-
search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
+search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
@@ -875,7 +875,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.
@@ -895,7 +895,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.
-
-
search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
+search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
diff --git a/docs/1.0-dev/api/evennia.commands.default.general.html b/docs/1.0-dev/api/evennia.commands.default.general.html
index 8687c37fbb..22fc4bb8f9 100644
--- a/docs/1.0-dev/api/evennia.commands.default.general.html
+++ b/docs/1.0-dev/api/evennia.commands.default.general.html
@@ -208,7 +208,7 @@ for everyone to use, you need build privileges and the alias command.
@@ -240,7 +240,7 @@ for everyone to use, you need build privileges and the alias command.
-
-
search_index_entry = {'aliases': 'nickname nicks', 'category': 'general', 'key': 'nick', 'no_prefix': ' nickname nicks', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}¶
+search_index_entry = {'aliases': 'nicks nickname', 'category': 'general', 'key': 'nick', 'no_prefix': ' nicks nickname', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}¶
@@ -263,7 +263,7 @@ inv
@@ -294,7 +294,7 @@ inv
-
-
search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶
+search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶
@@ -649,7 +649,7 @@ automatically begin with your name.
@@ -690,7 +690,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/1.0-dev/api/evennia.commands.default.tests.html b/docs/1.0-dev/api/evennia.commands.default.tests.html
index 9503d337a4..149df35e41 100644
--- a/docs/1.0-dev/api/evennia.commands.default.tests.html
+++ b/docs/1.0-dev/api/evennia.commands.default.tests.html
@@ -736,7 +736,7 @@ main test suite started with
Test the batch processor.
+red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmpgvs_60t5/c29e4b47beb0de5efcdfdbd58828dd020809c680/evennia/contrib/tutorials/red_button/red_button.py'>¶
diff --git a/docs/1.0-dev/api/evennia.commands.default.unloggedin.html b/docs/1.0-dev/api/evennia.commands.default.unloggedin.html
index f63a01af4a..4c784c164e 100644
--- a/docs/1.0-dev/api/evennia.commands.default.unloggedin.html
+++ b/docs/1.0-dev/api/evennia.commands.default.unloggedin.html
@@ -62,7 +62,7 @@ connect “account name” “pass word”
@@ -97,7 +97,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'co conn con', 'category': 'general', 'key': 'connect', 'no_prefix': ' co conn con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
+search_index_entry = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
@@ -226,7 +226,7 @@ All it does is display the connect screen.
@@ -252,7 +252,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 '}¶
@@ -275,7 +275,7 @@ for simplicity. It shows a pane of info.
@@ -301,7 +301,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/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html b/docs/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html
index cf641c2c90..40f55b6c3b 100644
--- a/docs/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html
+++ b/docs/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html
@@ -78,7 +78,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.
@@ -108,7 +108,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'co conn con', 'category': 'general', 'key': 'connect', 'no_prefix': ' co conn con', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶
+search_index_entry = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶
@@ -230,7 +230,7 @@ All it does is display the connect screen.
@@ -256,7 +256,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 '}¶
@@ -274,7 +274,7 @@ for simplicity. It shows a pane of info.
@@ -300,7 +300,7 @@ for simplicity. It shows a pane of info.
-
-
search_index_entry = {'aliases': '? h', 'category': 'general', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n 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/1.0-dev/api/evennia.contrib.base_systems.ingame_python.commands.html b/docs/1.0-dev/api/evennia.contrib.base_systems.ingame_python.commands.html
index b05f037d3d..60e82fb0ed 100644
--- a/docs/1.0-dev/api/evennia.contrib.base_systems.ingame_python.commands.html
+++ b/docs/1.0-dev/api/evennia.contrib.base_systems.ingame_python.commands.html
@@ -55,7 +55,7 @@
@@ -136,7 +136,7 @@ on user permission.
-
-
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 '}¶
+search_index_entry = {'aliases': '@calls @callback @callbacks', 'category': 'building', 'key': '@call', 'no_prefix': 'call calls callback callbacks', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html b/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html
index ad36fb4026..1971b01d16 100644
--- a/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html
+++ b/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html
@@ -99,7 +99,7 @@ aliases to an already joined channel.
@@ -130,7 +130,7 @@ aliases to an already joined channel.
-
-
search_index_entry = {'aliases': 'chanalias aliaschan', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' chanalias aliaschan', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶
+search_index_entry = {'aliases': 'aliaschan chanalias', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' aliaschan chanalias', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶
@@ -156,7 +156,7 @@ for that channel.
@@ -187,7 +187,7 @@ for that channel.
-
-
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 "}¶
+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 "}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html b/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html
index d6f5d466e3..cf1c90ed73 100644
--- a/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html
+++ b/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html
@@ -150,7 +150,7 @@ the operation will be general or on the room.
@@ -174,7 +174,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'chicken out q quit abort', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out q quit abort', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶
+search_index_entry = {'aliases': 'q chicken out abort quit', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' q chicken out abort quit', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶
@@ -310,7 +310,7 @@ shout
@@ -339,7 +339,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'shout ; whisper', 'category': 'general', 'key': 'say', 'no_prefix': ' shout ; whisper', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶
+search_index_entry = {'aliases': '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 '}¶
@@ -429,7 +429,7 @@ looks and what actions is available.
@@ -458,7 +458,7 @@ set in self.parse())
-
-
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 '}¶
+search_index_entry = {'aliases': 'examine e ex unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' examine e ex unfocus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶
@@ -520,7 +520,7 @@ set in self.parse())
@@ -544,7 +544,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': 'i give inventory inv', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' i give inventory inv', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.barter.barter.html b/docs/1.0-dev/api/evennia.contrib.game_systems.barter.barter.html
index 993058f8db..c55b7ebece 100644
--- a/docs/1.0-dev/api/evennia.contrib.game_systems.barter.barter.html
+++ b/docs/1.0-dev/api/evennia.contrib.game_systems.barter.barter.html
@@ -684,7 +684,7 @@ try to influence the other part in the deal.
@@ -710,7 +710,7 @@ try to influence the other part in the deal.
-
-
search_index_entry = {'aliases': 'offers deal', 'category': 'trading', 'key': 'status', 'no_prefix': ' offers deal', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶
+search_index_entry = {'aliases': 'deal offers', 'category': 'trading', 'key': 'status', 'no_prefix': ' deal offers', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html b/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html
index 1699b8634e..2a05b13542 100644
--- a/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html
+++ b/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html
@@ -631,7 +631,7 @@ inv
@@ -662,7 +662,7 @@ inv
-
-
search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶
+search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_basic.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_basic.html
index 5a64acfdba..88597c208d 100644
--- a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_basic.html
+++ b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_basic.html
@@ -611,7 +611,7 @@ if there are still any actions you can take.
@@ -637,7 +637,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_equip.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_equip.html
index 8175f4678a..92487c6825 100644
--- a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_equip.html
+++ b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_equip.html
@@ -506,7 +506,7 @@ if there are still any actions you can take.
@@ -526,7 +526,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_items.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_items.html
index 7897b5860a..691998f985 100644
--- a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_items.html
+++ b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_items.html
@@ -629,7 +629,7 @@ if there are still any actions you can take.
@@ -649,7 +649,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_magic.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_magic.html
index 8742a1d9b8..7fed227a6f 100644
--- a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_magic.html
+++ b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_magic.html
@@ -408,7 +408,7 @@ if there are still any actions you can take.
@@ -428,7 +428,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_range.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_range.html
index 7dda2eff22..9afe7eb48a 100644
--- a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_range.html
+++ b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_range.html
@@ -868,7 +868,7 @@ if there are still any actions you can take.
@@ -888,7 +888,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.rpg.dice.dice.html b/docs/1.0-dev/api/evennia.contrib.rpg.dice.dice.html
index fb84c39fe7..4789101ad1 100644
--- a/docs/1.0-dev/api/evennia.contrib.rpg.dice.dice.html
+++ b/docs/1.0-dev/api/evennia.contrib.rpg.dice.dice.html
@@ -234,7 +234,7 @@ everyone but the person rolling.
@@ -260,7 +260,7 @@ everyone but the person rolling.
-
-
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 "}¶
+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 "}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html b/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html
index b5b76a2381..838a38715c 100644
--- a/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html
+++ b/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html
@@ -84,7 +84,7 @@ such as when closing the lid and un-blinding a character.
+aliases = ['press', 'push', 'press button']¶
@@ -113,7 +113,7 @@ check if the lid is open or closed.
+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 '}¶
@@ -183,7 +183,7 @@ check if the lid is open or closed.
+aliases = ['smash', 'break lid', 'smash lid']¶
@@ -210,7 +210,7 @@ break.
+search_index_entry = {'aliases': 'smash break lid smash lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash break lid smash lid', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}¶
@@ -310,7 +310,7 @@ be mutually exclusive.
+aliases = ['press', 'push', 'press button']¶
@@ -339,7 +339,7 @@ set in self.parse())
+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 '}¶
@@ -437,7 +437,7 @@ be mutually exclusive.
+aliases = ['l', 'examine', 'listen', 'feel', 'get', 'ex']¶
@@ -463,7 +463,7 @@ be mutually exclusive.
+search_index_entry = {'aliases': 'l examine listen feel get ex', 'category': 'general', 'key': 'look', 'no_prefix': ' l examine listen feel get ex', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html
index 7f1205be77..9875831cbe 100644
--- a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html
+++ b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html
@@ -495,7 +495,7 @@ shift green root up/down
@@ -531,7 +531,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'move shiftroot pull push', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' move shiftroot pull push', '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': 'move shiftroot push pull', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' move shiftroot push 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 '}¶
@@ -548,7 +548,7 @@ yellow/green - horizontal roots
-
-
aliases = ['push button', 'press button', 'button']¶
+aliases = ['press button', 'push button', 'button']¶
@@ -574,7 +574,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'push button press button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' push button press button button', 'tags': '', 'text': '\n Presses a button.\n '}¶
+search_index_entry = {'aliases': 'press button push button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' press button push button button', 'tags': '', 'text': '\n Presses a button.\n '}¶
@@ -718,7 +718,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
aliases = ['chop', 'stab', 'kill', 'pierce', 'hit', 'bash', 'slash', 'defend', 'thrust', 'fight', 'parry']¶
+aliases = ['kill', 'chop', 'bash', 'thrust', 'parry', 'slash', 'defend', 'stab', 'hit', 'fight', 'pierce']¶
@@ -744,7 +744,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
search_index_entry = {'aliases': 'chop stab kill pierce hit bash slash defend thrust fight parry', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' chop stab kill pierce hit bash slash defend thrust fight parry', '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': 'kill chop bash thrust parry slash defend stab hit fight pierce', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' kill chop bash thrust parry slash defend stab hit fight pierce', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html
index a4f29f309e..b19b5583bb 100644
--- a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html
+++ b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html
@@ -755,7 +755,7 @@ if they fall off the bridge.
@@ -781,7 +781,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 '}¶
@@ -907,7 +907,7 @@ to find something.
-
-
aliases = ['feel', 'l', 'feel around', 'search', 'fiddle']¶
+aliases = ['l', 'feel around', 'search', 'feel', 'fiddle']¶
@@ -935,7 +935,7 @@ random chance of eventually finding a light source.
-
-
search_index_entry = {'aliases': 'feel l feel around search fiddle', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel l feel around search fiddle', '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 search feel fiddle', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l feel around search feel fiddle', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.utils.eveditor.html b/docs/1.0-dev/api/evennia.utils.eveditor.html
index 213248a8fc..4d088e4b66 100644
--- a/docs/1.0-dev/api/evennia.utils.eveditor.html
+++ b/docs/1.0-dev/api/evennia.utils.eveditor.html
@@ -277,7 +277,7 @@ indentation.
-
-
aliases = [':y', ':h', ':u', ':S', ':UU', ':x', ':j', ':dw', ':', ':DD', ':I', ':w', ':q', ':q!', ':fd', ':A', ':f', ':::', ':fi', ':echo', ':wq', ':r', ':i', ':>', ':=', ':p', ':uu', ':!', '::', ':s', ':<', ':dd']¶
+aliases = [':h', ':j', ':::', ':uu', ':w', ':s', ':f', ':y', ':=', ':dd', ':!', ':>', ':q!', ':S', ':p', ':u', ':fd', ':r', ':I', ':A', ':DD', ':', ':dw', ':wq', ':i', ':<', ':echo', ':fi', ':UU', '::', ':x', ':q']¶
@@ -305,7 +305,7 @@ efficient presentation.
-
-
search_index_entry = {'aliases': ':y :h :u :S :UU :x :j :dw : :DD :I :w :q :q! :fd :A :f ::: :fi :echo :wq :r :i :> := :p :uu :! :: :s :< :dd', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :y :h :u :S :UU :x :j :dw : :DD :I :w :q :q! :fd :A :f ::: :fi :echo :wq :r :i :> := :p :uu :! :: :s :< :dd', 'tags': '', 'text': '\n Commands for the editor\n '}¶
+search_index_entry = {'aliases': ':h :j ::: :uu :w :s :f :y := :dd :! :> :q! :S :p :u :fd :r :I :A :DD : :dw :wq :i :< :echo :fi :UU :: :x :q', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :h :j ::: :uu :w :s :f :y := :dd :! :> :q! :S :p :u :fd :r :I :A :DD : :dw :wq :i :< :echo :fi :UU :: :x :q', 'tags': '', 'text': '\n Commands for the editor\n '}¶
diff --git a/docs/1.0-dev/api/evennia.utils.evmenu.html b/docs/1.0-dev/api/evennia.utils.evmenu.html
index dbf6455c55..0e47210540 100644
--- a/docs/1.0-dev/api/evennia.utils.evmenu.html
+++ b/docs/1.0-dev/api/evennia.utils.evmenu.html
@@ -947,7 +947,7 @@ single question.
+aliases = ['y', 'no', 'n', 'a', 'yes', 'abort', '__nomatch_command']¶
@@ -973,7 +973,7 @@ single question.
+search_index_entry = {'aliases': 'y no n a yes abort __nomatch_command', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' y no n a yes abort __nomatch_command', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}¶
diff --git a/docs/1.0-dev/api/evennia.utils.evmore.html b/docs/1.0-dev/api/evennia.utils.evmore.html
index 2ae96815d0..c515e1ea7a 100644
--- a/docs/1.0-dev/api/evennia.utils.evmore.html
+++ b/docs/1.0-dev/api/evennia.utils.evmore.html
@@ -78,7 +78,7 @@ the caller.msg() construct every time the page is updated.
-
-
aliases = ['q', 'quit', 'e', 'top', 'n', 'previous', 'next', 'end', 'p', 't', 'a', 'abort']¶
+aliases = ['q', 'top', 't', 'n', 'a', 'next', 'abort', 'previous', 'p', 'end', 'e', 'quit']¶
@@ -104,7 +104,7 @@ the caller.msg() construct every time the page is updated.
-
-
search_index_entry = {'aliases': 'q quit e top n previous next end p t a abort', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' q quit e top n previous next end p t a abort', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶
+search_index_entry = {'aliases': 'q top t n a next abort previous p end e quit', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' q top t n a next abort previous p end e quit', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶
diff --git a/docs/1.0-dev/objects.inv b/docs/1.0-dev/objects.inv
index f4b272dcac019aae6a24706014a61d892c489f0a..3624b2c1ed832caf5a78f40d4713b5339d3f76c7 100644
GIT binary patch
delta 79114
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