From 2856056808a7bb922f1bf9681a9ae8b0042ed708 Mon Sep 17 00:00:00 2001
From: Evennia docbuilder action Evennia has an official docker image which makes
+ Evennia releases docker images which makes
running an Evennia-based game in a Docker container easy. First, install the Running Evennia in Docker¶
-Install Evennia through docker¶
docker program so you can run the Evennia container. You can get it freely from
docker.com. Linux users can likely also get it through their normal
package manager.
docker pull evennia/evennia
This is a good command to know, it is also how you update to the latest version when we make updates
-in the future. This tracks the master branch of Evennia.
--Note: If you want to experiment with the (unstable)
-developbranch, usedocker pull evennia/evennia:develop.
Next cd to a place where your game dir is, or where you want to create it. Then run:
docker run -it --rm -p 4000:4000 -p 4001:4001 -p 4002:4002 --rm -v $PWD:/usr/src/game --user
+This will get the latest stable image.
+docker pull evennia/evennia:develop
+
+
+gets the image based off Evennia’s unstable develop branch.
+Next, cd to a place where your game dir is, or where you want to create it. Then run:
+docker run -it --rm -p 4000:4000 -p 4001:4001 -p 4002:4002 --rm -v $PWD:/usr/src/game --user $UID:$GID evennia/evennia
-\(UID:\)GID evennia/evennia
Having run this (see next section for a description of what’s what), you will be at a prompt inside
the docker container:
evennia|docker /usr/src/game $
@@ -71,8 +68,8 @@ the docker container:
This is a normal shell prompt. We are in the /usr/src/game location inside the docker container.
If you had anything in the folder you started from, you should see it here (with ls) since we
mounted the current directory to usr/src/game (with -v above). You have the evennia command
-available and can now proceed to create a new game as per the Setup Quickstart
-instructions (you can skip the virtualenv and install ‘globally’ in the container though).
+available and can now proceed to create a new game as per the normal game setup
+instructions (no virtualenv needed).
You can run Evennia from inside this container if you want to, it’s like you are root in a little
isolated Linux environment. To exit the container and all processes in there, press Ctrl-D. If you
created a new game folder, you will find that it has appeared on-disk.
@@ -82,13 +79,7 @@ by rootsudo chown myname:myname -R mygame, where you replace myname with
your username and mygame with whatever your game folder is named.
-
-Description of the docker run command¶
- docker run -it --rm -p 4000:4000 -p 4001:4001 -p 4002:4002 --rm -v $PWD:/usr/src/game --user
-$UID:$GID evennia/evennia
-
-
-This is what it does:
+Below is an explanation of the docker run command we used:
docker run ... evennia/evennia tells us that we want to run a new container based on the
evennia/evennia docker image. Everything in between are options for this. The evennia/evennia is
@@ -114,8 +105,6 @@ group IDs instead of root’s IDs (root is the user running evennia inside the c
having stale .pid files in your filesystem between container reboots which you have to force
delete with sudo rm server/*.pid before each boot.
-
-
Running your game as a docker image¶
If you run the docker command given in the previous section from your game dir you can then
@@ -133,17 +122,17 @@ install dependencies.
container comes up. If you already have a game folder with a database set up you can also start the
docker container and pass commands directly to it. The command you pass will be the main process to
run in the container. From your game dir, run for example this command:
-docker run -it --rm -p 4000:4000 -p 4001:4001 -p 4002:4002 --rm -v $PWD:/usr/src/game
+docker run -it --rm -p 4000:4000 -p 4001:4001 -p 4002:4002 --rm -v $PWD:/usr/src/game evennia/evennia evennia start -l
-evennia/evennia evennia start -l
This will start Evennia as the foreground process, echoing the log to the terminal. Closing the
terminal will kill the server. Note that you must use a foreground command like evennia start -l
or evennia ipstart to start the server - otherwise the foreground process will finish immediately
and the container go down.
+
-Create your own game image¶
+Create your own game image¶
These steps assume that you have created or otherwise obtained a game directory already. First, cd
to your game dir and create a new empty text file named Dockerfile. Save the following two lines
into it:
@@ -165,7 +154,6 @@ build the image locally only (name the container whatever you like in that case,
mygame).
Docker images are stored centrally on your computer. You can see which ones you have available
locally with docker images. Once built, you have a couple of options to run your game.
-
Run container from your game image for development¶
To run the container based on your game image locally for development, mount the local game
@@ -335,13 +323,11 @@ line.
Table of Contents
- Running Evennia in Docker
-- Install Evennia through docker
-
- Running your game as a docker image
+
+- Create your own game image
diff --git a/docs/1.0-dev/_sources/Setup/Installation-Docker.md.txt b/docs/1.0-dev/_sources/Setup/Installation-Docker.md.txt
index b07953838f..ca44d7e5e6 100644
--- a/docs/1.0-dev/_sources/Setup/Installation-Docker.md.txt
+++ b/docs/1.0-dev/_sources/Setup/Installation-Docker.md.txt
@@ -1,9 +1,7 @@
# Running Evennia in Docker
-Evennia has an [official docker image](https://hub.docker.com/r/evennia/evennia/) which makes
-running an Evennia-based game in a Docker container easy.
-
-## Install Evennia through docker
+Evennia releases [docker images](https://hub.docker.com/r/evennia/evennia/) which makes
+running an Evennia-based game in a Docker container easy.
First, install the `docker` program so you can run the Evennia container. You can get it freely from
[docker.com](https://www.docker.com/). Linux users can likely also get it through their normal
@@ -13,16 +11,17 @@ To fetch the latest evennia docker image, run:
docker pull evennia/evennia
-This is a good command to know, it is also how you update to the latest version when we make updates
-in the future. This tracks the `master` branch of Evennia.
+This will get the latest stable image.
-> Note: If you want to experiment with the (unstable) `develop` branch, use `docker pull
-evennia/evennia:develop`.
+ docker pull evennia/evennia:develop
-Next `cd` to a place where your game dir is, or where you want to create it. Then run:
+gets the image based off Evennia's unstable `develop` branch.
- docker run -it --rm -p 4000:4000 -p 4001:4001 -p 4002:4002 --rm -v $PWD:/usr/src/game --user
-$UID:$GID evennia/evennia
+Next, `cd` to a place where your game dir is, or where you want to create it. Then run:
+
+```bash
+docker run -it --rm -p 4000:4000 -p 4001:4001 -p 4002:4002 --rm -v $PWD:/usr/src/game --user $UID:$GID evennia/evennia
+```
Having run this (see next section for a description of what's what), you will be at a prompt inside
the docker container:
@@ -34,8 +33,8 @@ evennia|docker /usr/src/game $
This is a normal shell prompt. We are in the `/usr/src/game` location inside the docker container.
If you had anything in the folder you started from, you should see it here (with `ls`) since we
mounted the current directory to `usr/src/game` (with `-v` above). You have the `evennia` command
-available and can now proceed to create a new game as per the [Setup Quickstart](./Installation.md)
-instructions (you can skip the virtualenv and install 'globally' in the container though).
+available and can now proceed to create a new game as per the normal [game setup](./Installation.md)
+instructions (no virtualenv needed).
You can run Evennia from inside this container if you want to, it's like you are root in a little
isolated Linux environment. To exit the container and all processes in there, press `Ctrl-D`. If you
@@ -46,14 +45,7 @@ by `root`. If you want to edit the files outside of the container you should cha
On Linux/Mac you do this with `sudo chown myname:myname -R mygame`, where you replace `myname` with
your username and `mygame` with whatever your game folder is named.
-### Description of the `docker run` command
-
-```bash
- docker run -it --rm -p 4000:4000 -p 4001:4001 -p 4002:4002 --rm -v $PWD:/usr/src/game --user
-$UID:$GID evennia/evennia
-```
-
-This is what it does:
+Below is an explanation of the `docker run` command we used:
- `docker run ... evennia/evennia` tells us that we want to run a new container based on the
`evennia/evennia` docker image. Everything in between are options for this. The `evennia/evennia` is
@@ -100,14 +92,14 @@ container comes up. If you already have a game folder with a database set up you
docker container and pass commands directly to it. The command you pass will be the main process to
run in the container. From your game dir, run for example this command:
- docker run -it --rm -p 4000:4000 -p 4001:4001 -p 4002:4002 --rm -v $PWD:/usr/src/game
-evennia/evennia evennia start -l
+ docker run -it --rm -p 4000:4000 -p 4001:4001 -p 4002:4002 --rm -v $PWD:/usr/src/game evennia/evennia evennia start -l
This will start Evennia as the foreground process, echoing the log to the terminal. Closing the
terminal will kill the server. Note that you *must* use a foreground command like `evennia start -l`
or `evennia ipstart` to start the server - otherwise the foreground process will finish immediately
and the container go down.
-### Create your own game image
+
+## Create your own game image
These steps assume that you have created or otherwise obtained a game directory already. First, `cd`
to your game dir and create a new empty text file named `Dockerfile`. Save the following two lines
diff --git a/docs/1.0-dev/api/evennia.commands.default.account.html b/docs/1.0-dev/api/evennia.commands.default.account.html
index e2c4a48a01..baa22b04f4 100644
--- a/docs/1.0-dev/api/evennia.commands.default.account.html
+++ b/docs/1.0-dev/api/evennia.commands.default.account.html
@@ -73,7 +73,7 @@ method. Otherwise all text will be returned to all connected sessions.
@@ -104,7 +104,7 @@ method. Otherwise all text will be returned to all connected sessions.
-
-
search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}¶
+search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.commands.default.admin.html b/docs/1.0-dev/api/evennia.commands.default.admin.html
index fe99d81d00..f5aac9e474 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': '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 '}¶
+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 '}¶
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 75a0d42a73..acfc0e8412 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', '@type', '@typeclasses', '@swap', '@parent']¶
+aliases = ['@parent', '@typeclasses', '@swap', '@update', '@type']¶
@@ -1316,7 +1316,7 @@ server settings.
-
-
search_index_entry = {'aliases': '@update @type @typeclasses @swap @parent', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass update type typeclasses swap 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': '@parent @typeclasses @swap @update @type', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass parent typeclasses swap update 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 "}¶
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 397cffba6f..e59ebb3aa9 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': '@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 "}¶
@@ -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': '@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/1.0-dev/api/evennia.commands.default.general.html b/docs/1.0-dev/api/evennia.commands.default.general.html
index 9014eb682b..41942d77f9 100644
--- a/docs/1.0-dev/api/evennia.commands.default.general.html
+++ b/docs/1.0-dev/api/evennia.commands.default.general.html
@@ -115,7 +115,7 @@ look *<account&g
@@ -146,7 +146,7 @@ look *<account&g
-
-
search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶
+search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶
@@ -263,7 +263,7 @@ inv
@@ -294,7 +294,7 @@ inv
-
-
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 '}¶
+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 '}¶
@@ -538,7 +538,7 @@ placing it in their inventory.
@@ -569,7 +569,7 @@ placing it in their inventory.
-
-
search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', 'no_prefix': ' " \'', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
+search_index_entry = {'aliases': '\' "', 'category': 'general', 'key': 'say', 'no_prefix': ' \' "', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.commands.default.tests.html b/docs/1.0-dev/api/evennia.commands.default.tests.html
index f0e3de6784..ca6dd24b15 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/tmppbnclpak/6a6d3d7438cc71efa838dd1e612a66ae98e8dec1/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 3e819aa352..e709c76c82 100644
--- a/docs/1.0-dev/api/evennia.commands.default.unloggedin.html
+++ b/docs/1.0-dev/api/evennia.commands.default.unloggedin.html
@@ -121,7 +121,7 @@ create “account name” “pass word”
@@ -152,7 +152,7 @@ create “account name” “pass word”
-
-
search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
+search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
@@ -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 '}¶
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 8b8f34bb9a..225501e113 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
@@ -130,7 +130,7 @@ there is no object yet before the account has logged in)
@@ -166,7 +166,7 @@ name enclosed in quotes:
-
-
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 '}¶
+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 '}¶
@@ -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 '}¶
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 5f79434bdc..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': '@calls @callbacks @callback', 'category': 'building', 'key': '@call', 'no_prefix': 'call calls callbacks callback', '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 175032d9e7..ad36fb4026 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
@@ -156,7 +156,7 @@ for that channel.
@@ -187,7 +187,7 @@ for that channel.
-
-
search_index_entry = {'aliases': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delaliaschan delchanalias', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}¶
+search_index_entry = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delchanalias delaliaschan', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html b/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html
index 237a490229..9098afb5b7 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': 'quit chicken out abort q', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' quit chicken out abort q', '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': 'chicken out abort quit q', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out abort quit q', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶
@@ -195,7 +195,7 @@ set in self.parse())
@@ -229,7 +229,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'ls l', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}¶
+search_index_entry = {'aliases': 'l ls', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}¶
@@ -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': 'shout ; whisper', 'category': 'general', 'key': 'say', 'no_prefix': ' shout ; whisper', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶
@@ -367,7 +367,7 @@ emote /me points to /box and /lever.
@@ -406,7 +406,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': ': pose', 'category': 'general', 'key': 'emote', 'no_prefix': ' : pose', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use "..." to enact speech.\n\n Usage:\n emote <emote>\n :<emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}¶
+search_index_entry = {'aliases': 'pose :', 'category': 'general', 'key': 'emote', 'no_prefix': ' pose :', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use "..." to enact speech.\n\n Usage:\n emote <emote>\n :<emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}¶
@@ -429,7 +429,7 @@ looks and what actions is available.
@@ -458,7 +458,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'e ex unfocus examine', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' e ex unfocus examine', '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': 'unfocus examine e ex', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' unfocus examine e 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 '}¶
@@ -520,7 +520,7 @@ set in self.parse())
@@ -544,7 +544,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'inv i give inventory', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inv i give inventory', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
+search_index_entry = {'aliases': 'i give inv inventory', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' i give inv inventory', 'tags': '', 'text': '\n Use focus / examine instead.\n\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 2a05b13542..1699b8634e 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': '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 '}¶
+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 '}¶
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 88597c208d..5a64acfdba 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': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_equip.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_equip.html
index 92487c6825..8175f4678a 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': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_items.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_items.html
index 691998f985..7897b5860a 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': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_magic.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_magic.html
index 7fed227a6f..8742a1d9b8 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': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_range.html b/docs/1.0-dev/api/evennia.contrib.game_systems.turnbattle.tb_range.html
index 9afe7eb48a..7dda2eff22 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': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html b/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html
index e051830f22..c8c8e3a0f7 100644
--- a/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html
+++ b/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html
@@ -279,7 +279,7 @@ look *<account&g
@@ -299,7 +299,7 @@ look *<account&g
-
-
search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}¶
+search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}¶
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 4789101ad1..fb84c39fe7 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': '@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/1.0-dev/api/evennia.contrib.rpg.rpsystem.rpsystem.html b/docs/1.0-dev/api/evennia.contrib.rpg.rpsystem.rpsystem.html
index 2b811c41cb..2ddc6bb432 100644
--- a/docs/1.0-dev/api/evennia.contrib.rpg.rpsystem.rpsystem.html
+++ b/docs/1.0-dev/api/evennia.contrib.rpg.rpsystem.rpsystem.html
@@ -700,7 +700,7 @@ a different language.
@@ -731,7 +731,7 @@ a different language.
-
-
search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', 'no_prefix': ' " \'', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
+search_index_entry = {'aliases': '\' "', 'category': 'general', 'key': 'say', 'no_prefix': ' \' "', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html b/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html
index df494d5eb2..234469cc41 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 = ['break lid', 'smash', 'smash lid']¶
@@ -210,7 +210,7 @@ break.
+search_index_entry = {'aliases': 'break lid smash smash lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' break lid smash 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 = ['listen', 'l', 'get', 'examine', 'ex', 'feel']¶
@@ -463,7 +463,7 @@ be mutually exclusive.
+search_index_entry = {'aliases': 'listen l get examine ex feel', 'category': 'general', 'key': 'look', 'no_prefix': ' listen l get examine ex feel', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}¶
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 25e7ddcec4..9aa601ce9c 100644
--- a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html
+++ b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html
@@ -364,7 +364,7 @@ of the object. We overload it with our own version.
@@ -391,7 +391,7 @@ to sit on a “lightable” object, we operate only on self.obj.
-
-
search_index_entry = {'aliases': 'light burn', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' light burn', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}¶
+search_index_entry = {'aliases': 'burn light', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' burn light', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}¶
@@ -495,7 +495,7 @@ shift green root up/down
@@ -531,7 +531,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'pull move shiftroot push', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' pull move shiftroot 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': 'shiftroot pull push move', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' shiftroot pull push 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 '}¶
@@ -548,7 +548,7 @@ yellow/green - horizontal roots
-
-
aliases = ['push button', 'button', 'press button']¶
+aliases = ['push button', 'press button', 'button']¶
@@ -574,7 +574,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'push button button press button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' push button button press button', 'tags': '', 'text': '\n Presses a button.\n '}¶
+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 '}¶
@@ -718,7 +718,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
aliases = ['chop', 'fight', 'bash', 'stab', 'defend', 'thrust', 'slash', 'hit', 'parry', 'kill', 'pierce']¶
+aliases = ['parry', 'pierce', 'slash', 'hit', 'thrust', 'kill', 'bash', 'chop', 'stab', 'defend', 'fight']¶
@@ -744,7 +744,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
search_index_entry = {'aliases': 'chop fight bash stab defend thrust slash hit parry kill pierce', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' chop fight bash stab defend thrust slash hit parry kill pierce', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶
+search_index_entry = {'aliases': 'parry pierce slash hit thrust kill bash chop stab defend fight', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' parry pierce slash hit thrust kill bash chop stab defend fight', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html
index 382bec8c2d..c5ff77583f 100644
--- a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html
+++ b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html
@@ -187,7 +187,7 @@ code except for adding in the details.
@@ -202,7 +202,7 @@ code except for adding in the details.
-
-
search_index_entry = {'aliases': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}¶
+search_index_entry = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}¶
@@ -907,7 +907,7 @@ to find something.
-
-
aliases = ['feel', 'feel around', 'search', 'l', 'fiddle']¶
+aliases = ['feel around', 'fiddle', 'l', 'search', 'feel']¶
@@ -935,7 +935,7 @@ random chance of eventually finding a light source.
-
-
search_index_entry = {'aliases': 'feel feel around search l fiddle', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel feel around search l 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': 'feel around fiddle l search feel', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel around fiddle l search feel', '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 48878e47da..3778722c6a 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 = [':S', ':h', ':=', ':p', ':<', ':q', ':::', ':echo', ':y', ':r', ':A', ':>', ':u', ':fd', ':uu', ':DD', ':I', ':q!', ':s', ':fi', ':UU', ':f', ':wq', ':dd', ':w', ':', ':!', ':dw', ':x', ':j', '::', ':i']¶
+aliases = [':w', ':i', ':', ':f', ':q!', ':>', ':S', ':j', ':UU', ':!', ':s', ':echo', ':r', ':q', ':fd', ':fi', ':dd', ':A', ':u', ':y', ':wq', ':uu', ':=', '::', ':dw', ':<', ':DD', ':h', ':x', ':p', ':I', ':::']¶
@@ -305,7 +305,7 @@ efficient presentation.
-
-
search_index_entry = {'aliases': ':S :h := :p :< :q ::: :echo :y :r :A :> :u :fd :uu :DD :I :q! :s :fi :UU :f :wq :dd :w : :! :dw :x :j :: :i', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :S :h := :p :< :q ::: :echo :y :r :A :> :u :fd :uu :DD :I :q! :s :fi :UU :f :wq :dd :w : :! :dw :x :j :: :i', 'tags': '', 'text': '\n Commands for the editor\n '}¶
+search_index_entry = {'aliases': ':w :i : :f :q! :> :S :j :UU :! :s :echo :r :q :fd :fi :dd :A :u :y :wq :uu := :: :dw :< :DD :h :x :p :I :::', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :w :i : :f :q! :> :S :j :UU :! :s :echo :r :q :fd :fi :dd :A :u :y :wq :uu := :: :dw :< :DD :h :x :p :I :::', '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 65c9c195d3..e7c0c1c17a 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 = ['a', 'abort', 'yes', 'no', 'n', 'y', '__nomatch_command']¶
@@ -973,7 +973,7 @@ single question.
+search_index_entry = {'aliases': 'a abort yes no n y __nomatch_command', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' a abort yes no n y __nomatch_command', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}¶
diff --git a/docs/1.0-dev/api/evennia.utils.evmore.html b/docs/1.0-dev/api/evennia.utils.evmore.html
index 26c2062eac..d1470ef360 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 = ['t', 'e', 'top', 'end', 'q', 'n', 'p', 'quit', 'next', 'a', 'abort', 'previous']¶
+aliases = ['a', 'abort', 'top', 'n', 'e', 'end', 'next', 'quit', 'previous', 'q', 't', 'p']¶
@@ -104,7 +104,7 @@ the caller.msg() construct every time the page is updated.
-
-
search_index_entry = {'aliases': 't e top end q n p quit next a abort previous', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' t e top end q n p quit next a abort previous', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶
+search_index_entry = {'aliases': 'a abort top n e end next quit previous q t p', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' a abort top n e end next quit previous q t p', '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 3624b2c1ed832caf5a78f40d4713b5339d3f76c7..8e131588693927a3a5d401f84dfab8cb1956fed5 100644
GIT binary patch
delta 73692
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
(0nv^8fS_Sluz!BSL7aC8iGSD^mu+l^852YA
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
znv