From 14eea61f2069a4ba794c0be4d374abb4c67e3bad Mon Sep 17 00:00:00 2001
From: Evennia docbuilder action
Fix: Traceback when creating objects with initial nattributes (InspectorCaracal)
Docs: Typo fixes and starting earlier with explaining how to add to the +default cmdsets.
This is the simplest form of command you can imagine. It just gives itself a name, “echo”. This is what you will use to call this command later.
Next we need to put this in a CmdSet. It will be a one-command CmdSet for now! Change your file as such:
-
+# in mygame/commands/mycommands.py
+
from commands.command import Command
from evennia import CmdSet
@@ -239,7 +243,8 @@ current cmdset (self.cmdset): ChannelCmdSet
obj - this is object on which this Command (and CmdSet) “sits”. So you, in this case.
The reason our command doesn’t do anything yet is because it’s missing a func method. This is what Evennia looks for to figure out what a Command actually does. Modify your CmdEcho class:
-# ...
+# in mygame/commands/mycommands.py
+# ...
class CmdEcho(Command):
"""
@@ -275,13 +280,9 @@ Echo: ''
Echo: ' Woo Tang!'
-Note that there is an extra space before Woo!. That is because self.args contains everything after the command name, including spaces. Evennia will happily understand if you skip that space too:
-> echoWoo Tang!
-Echo: 'Woo Tang!'
-
-
-There are ways to force Evennia to require an initial space, but right now we want to just ignore it since it looks a bit weird for our echo example. Tweak the code:
-# ...
+Note that there is an extra space before Woo. That is because self.args contains everything after the command name, including spaces. Let’s remove that extra space with a small tweak:
+# in mygame/commands/mycommands.py
+# ...
class CmdEcho(Command):
"""
@@ -318,15 +319,62 @@ enough to make echo
> py self.cmdset.add("commands.mycommands.MyCmdSet", persistent=True)
-Now you can reload as much as you want and your code changes will be available directly without
-needing to re-add the MyCmdSet again. To remove the cmdset again, you’d do
+Now you can reload as much as you want and your code changes will be available directly without needing to re-add the MyCmdSet again.
+We will add this cmdset in another way, so remove it manually:
> py self.cmdset.remove("commands.mycommands.MyCmdSet")
-But for now, keep it around, we’ll expand it with some more examples.
+
+
+8.2. Add the echo command to the default cmdset¶
+Above we added the echo command to ourselves. It will only be available to us and noone else in the game. But all commands in Evennia are part of command-sets, including the normal look and py commands we have been using all the while. You can easily extend the default command set with your echo command - this way everyone in the game will have access to it!
+In mygame/commands/ you’ll find an existing module named default_cmdsets.py Open it and you’ll find four empty cmdset-classes:
+
+CharacterCmdSet - this sits on all Characters (this is the one we usually want to modify)
+AccountCmdSet - this sits on all Accounts (shared between Characters, like logout etc)
+UnloggedCmdSet - commands available before you login, like the commands for creating your password and connecting to the game.
+SessionCmdSet - commands unique to your Session (your particular client connection). This is unused by default.
+
+Tweak this file as follows:
+# in mygame/commands/default_cmdsets.py
+
+# ,..
+
+from .mycommands import CmdEcho # <-------
+
+class CharacterCmdSet(default_cmds.CharacterCmdSet):
+ """
+ The `CharacterCmdSet` contains general in-game commands like `look`,
+ `get`, etc available on in-game Character objects. It is merged with
+ the `AccountCmdSet` when an Account puppets a Character.
+ """
+
+ key = "DefaultCharacter"
+
+ def at_cmdset_creation(self):
+ """
+ Populates the cmdset
+ """
+ super().at_cmdset_creation()
+ #
+ # any commands you add below will overload the default ones.
+ #
+ self.add(command.CmdEcho) # <-----------
+
+# ...
+
+
+
+This works the same way as when you added CmdEcho to your MyCmdSet. The only difference cmdsets are automatically added to all Characters/Accounts etc so you don’t have to do so manually. We must also make sure to import the CmdEcho from your mycommands module in order for this module to know about it. The period . in from .mycommands import ... means that we are telling Python that mycommands.py sits in the same directory as this current module.
+Just reload the server and your echo command will be available again. There is no limit to how many cmdsets a given Command can be a part of.
+To remove, you just comment out or delete the self.add() line. Keep it like this for now though - we’ll expand on it below.
-8.1.2. Figuring out who to hit¶
+8.2.1. Figuring out who to hit¶
Let’s try something a little more exciting than just echo. Let’s make a hit command, for punching someone in the face! This is how we want it to work:
> hit <target>
You hit <target> with full force!
@@ -472,7 +520,7 @@ You hit Smaug with full force!
-8.2. Summary¶
+8.3. Summary¶
In this lesson we learned how to create our own Command, add it to a CmdSet and then to ourselves. We also upset a dragon.
In the next lesson we’ll learn how to hit Smaug with different weapons. We’ll also
get into how we replace and extend Evennia’s default Commands.
diff --git a/docs/2.x/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Part1-Overview.html b/docs/2.x/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Part1-Overview.html
index 8d5ee9fccd..1daace3be5 100644
--- a/docs/2.x/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Part1-Overview.html
+++ b/docs/2.x/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Part1-Overview.html
@@ -197,7 +197,8 @@
8. Adding custom commands
9. Parsing Command input
diff --git a/docs/2.x/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.html b/docs/2.x/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.html
index 50ce73e1a1..ff7cb2deff 100644
--- a/docs/2.x/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.html
+++ b/docs/2.x/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.html
@@ -354,10 +354,10 @@ types) with Evennia’s search functions:
inventory_use_slot = AttributeProperty(WieldLocation.WEAPON_HAND, autocreate=False)
quality = AttributeProperty(3, autocreate=False)
- attack_type = AttibuteProperty(Ability.STR, autocreate=False)
- defend_type = AttibuteProperty(Ability.ARMOR, autocreate=False)
+ attack_type = AttributeProperty(Ability.STR, autocreate=False)
+ defend_type = AttributeProperty(Ability.ARMOR, autocreate=False)
- damage_roll = AttibuteProperty("1d6", autocreate=False)
+ damage_roll = AttributeProperty("1d6", autocreate=False)
def at_pre_use(self, user, target=None, *args, **kwargs):
@@ -481,10 +481,10 @@ types) with Evennia’s search functions:
inventory_use_slot = WieldLocation.TWO_HANDS # always two hands for magic
quality = AttributeProperty(3, autocreate=False)
- attack_type = AttibuteProperty(Ability.INT, autocreate=False)
- defend_type = AttibuteProperty(Ability.DEX, autocreate=False)
+ attack_type = AttributeProperty(Ability.INT, autocreate=False)
+ defend_type = AttributeProperty(Ability.DEX, autocreate=False)
- damage_roll = AttibuteProperty("1d8", autocreate=False)
+ damage_roll = AttributeProperty("1d8", autocreate=False)
def at_post_use(self, user, *args, **kwargs):
"""Called after usage/spell was cast"""
diff --git a/docs/2.x/_sources/Coding/Changelog.md.txt b/docs/2.x/_sources/Coding/Changelog.md.txt
index d5f2b1c717..84a8afba69 100644
--- a/docs/2.x/_sources/Coding/Changelog.md.txt
+++ b/docs/2.x/_sources/Coding/Changelog.md.txt
@@ -7,6 +7,8 @@
instead of 'Custom' (InspectorCaracal)
- [Fix][pull3274]: Traceback when creating objects with initial nattributes
(InspectorCaracal)
+- Docs: Typo fixes and starting earlier with explaining how to add to the
+ default cmdsets.
[pull3267]: https://github.com/evennia/evennia/pull/3267
[pull3270]: https://github.com/evennia/evennia/pull/3270
diff --git a/docs/2.x/_sources/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Adding-Commands.md.txt b/docs/2.x/_sources/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Adding-Commands.md.txt
index 3b1c562534..8a166c32af 100644
--- a/docs/2.x/_sources/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Adding-Commands.md.txt
+++ b/docs/2.x/_sources/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Adding-Commands.md.txt
@@ -66,6 +66,7 @@ Next we need to put this in a CmdSet. It will be a one-command CmdSet for now! C
```python
+# in mygame/commands/mycommands.py
from commands.command import Command
from evennia import CmdSet
@@ -137,6 +138,7 @@ These are all properties you can access with `.` on the Command instance, such a
The reason our command doesn't do anything yet is because it's missing a `func` method. This is what Evennia looks for to figure out what a Command actually does. Modify your `CmdEcho` class:
```python
+# in mygame/commands/mycommands.py
# ...
class CmdEcho(Command):
@@ -175,14 +177,10 @@ Try to pass an argument:
> echo Woo Tang!
Echo: ' Woo Tang!'
-Note that there is an extra space before `Woo!`. That is because self.args contains _everything_ after the command name, including spaces. Evennia will happily understand if you skip that space too:
-
- > echoWoo Tang!
- Echo: 'Woo Tang!'
-
-There are ways to force Evennia to _require_ an initial space, but right now we want to just ignore it since it looks a bit weird for our echo example. Tweak the code:
+Note that there is an extra space before `Woo`. That is because self.args contains _everything_ after the command name, including spaces. Let's remove that extra space with a small tweak:
```python
+# in mygame/commands/mycommands.py
# ...
class CmdEcho(Command):
@@ -221,13 +219,64 @@ enough to make `echo` a _persistent_ change though:
> py self.cmdset.add("commands.mycommands.MyCmdSet", persistent=True)
-Now you can `reload` as much as you want and your code changes will be available directly without
-needing to re-add the MyCmdSet again. To remove the cmdset again, you'd do
+Now you can `reload` as much as you want and your code changes will be available directly without needing to re-add the MyCmdSet again.
+
+We will add this cmdset in another way, so remove it manually:
> py self.cmdset.remove("commands.mycommands.MyCmdSet")
-But for now, keep it around, we'll expand it with some more examples.
+## Add the echo command to the default cmdset
+Above we added the `echo` command to ourselves. It will _only_ be available to us and noone else in the game. But all commands in Evennia are part of command-sets, including the normal `look` and `py` commands we have been using all the while. You can easily extend the default command set with your `echo` command - this way _everyone_ in the game will have access to it!
+
+In `mygame/commands/` you'll find an existing module named `default_cmdsets.py` Open it and you'll find four empty cmdset-classes:
+
+- `CharacterCmdSet` - this sits on all Characters (this is the one we usually want to modify)
+- `AccountCmdSet` - this sits on all Accounts (shared between Characters, like `logout` etc)
+- `UnloggedCmdSet` - commands available _before_ you login, like the commands for creating your password and connecting to the game.
+- `SessionCmdSet` - commands unique to your Session (your particular client connection). This is unused by default.
+
+Tweak this file as follows:
+
+```python
+# in mygame/commands/default_cmdsets.py
+
+# ,..
+
+from .mycommands import CmdEcho # <-------
+
+class CharacterCmdSet(default_cmds.CharacterCmdSet):
+ """
+ The `CharacterCmdSet` contains general in-game commands like `look`,
+ `get`, etc available on in-game Character objects. It is merged with
+ the `AccountCmdSet` when an Account puppets a Character.
+ """
+
+ key = "DefaultCharacter"
+
+ def at_cmdset_creation(self):
+ """
+ Populates the cmdset
+ """
+ super().at_cmdset_creation()
+ #
+ # any commands you add below will overload the default ones.
+ #
+ self.add(command.CmdEcho) # <-----------
+
+# ...
+```
+
+```{sidebar} super() and overriding defaults
+The `super()` Python keyword means that the _parent_ is called. In this case, the parent adds all default commands to this cmdset.
+
+Coincidentally, this is also how you replace default commands in Evennia!jj To replace e.g. the command `get`, you just give your replacement command the `key` 'get' and add it here - since it's added after `super()`, it will replace the default version of `get`.
+```
+This works the same way as when you added `CmdEcho` to your `MyCmdSet`. The only difference cmdsets are automatically added to all Characters/Accounts etc so you don't have to do so manually. We must also make sure to import the `CmdEcho` from your `mycommands` module in order for this module to know about it. The period `.` in `from .mycommands import ...` means that we are telling Python that `mycommands.py` sits in the same directory as this current module.
+
+Just `reload` the server and your `echo` command will be available again. There is no limit to how many cmdsets a given Command can be a part of.
+
+To remove, you just comment out or delete the `self.add()` line. Keep it like this for now though - we'll expand on it below.
### Figuring out who to hit
Let's try something a little more exciting than just echo. Let's make a `hit` command, for punching someone in the face! This is how we want it to work:
diff --git a/docs/2.x/_sources/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.md.txt b/docs/2.x/_sources/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.md.txt
index 55090dc0c4..a1ffb51526 100644
--- a/docs/2.x/_sources/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.md.txt
+++ b/docs/2.x/_sources/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.md.txt
@@ -247,10 +247,10 @@ class EvAdventureWeapon(EvAdventureObject):
inventory_use_slot = AttributeProperty(WieldLocation.WEAPON_HAND, autocreate=False)
quality = AttributeProperty(3, autocreate=False)
- attack_type = AttibuteProperty(Ability.STR, autocreate=False)
- defend_type = AttibuteProperty(Ability.ARMOR, autocreate=False)
+ attack_type = AttributeProperty(Ability.STR, autocreate=False)
+ defend_type = AttributeProperty(Ability.ARMOR, autocreate=False)
- damage_roll = AttibuteProperty("1d6", autocreate=False)
+ damage_roll = AttributeProperty("1d6", autocreate=False)
def at_pre_use(self, user, target=None, *args, **kwargs):
@@ -386,10 +386,10 @@ class EvAdventureRuneStone(EvAdventureWeapon, EvAdventureConsumable):
inventory_use_slot = WieldLocation.TWO_HANDS # always two hands for magic
quality = AttributeProperty(3, autocreate=False)
- attack_type = AttibuteProperty(Ability.INT, autocreate=False)
- defend_type = AttibuteProperty(Ability.DEX, autocreate=False)
+ attack_type = AttributeProperty(Ability.INT, autocreate=False)
+ defend_type = AttributeProperty(Ability.DEX, autocreate=False)
- damage_roll = AttibuteProperty("1d8", autocreate=False)
+ damage_roll = AttributeProperty("1d8", autocreate=False)
def at_post_use(self, user, *args, **kwargs):
"""Called after usage/spell was cast"""
diff --git a/docs/2.x/_sources/api/evennia.contrib.tutorials.evadventure.tests.md.txt b/docs/2.x/_sources/api/evennia.contrib.tutorials.evadventure.tests.md.txt
index 78fb3c7812..3c4466534e 100644
--- a/docs/2.x/_sources/api/evennia.contrib.tutorials.evadventure.tests.md.txt
+++ b/docs/2.x/_sources/api/evennia.contrib.tutorials.evadventure.tests.md.txt
@@ -13,6 +13,7 @@ evennia.contrib.tutorials.evadventure.tests
:maxdepth: 6
evennia.contrib.tutorials.evadventure.tests.mixins
+ evennia.contrib.tutorials.evadventure.tests.test_ai
evennia.contrib.tutorials.evadventure.tests.test_characters
evennia.contrib.tutorials.evadventure.tests.test_chargen
evennia.contrib.tutorials.evadventure.tests.test_combat
diff --git a/docs/2.x/api/evennia.commands.default.admin.html b/docs/2.x/api/evennia.commands.default.admin.html
index d19b4515c3..7564dce65b 100644
--- a/docs/2.x/api/evennia.commands.default.admin.html
+++ b/docs/2.x/api/evennia.commands.default.admin.html
@@ -325,7 +325,7 @@ to accounts respectively.
@@ -356,7 +356,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/2.x/api/evennia.commands.default.building.html b/docs/2.x/api/evennia.commands.default.building.html
index fdce263dd9..4e57d0a1c6 100644
--- a/docs/2.x/api/evennia.commands.default.building.html
+++ b/docs/2.x/api/evennia.commands.default.building.html
@@ -1353,7 +1353,7 @@ server settings.
-
-
aliases = ['@type', '@typeclasses', '@update', '@parent', '@swap']¶
+aliases = ['@update', '@typeclasses', '@type', '@swap', '@parent']¶
@@ -1384,7 +1384,7 @@ server settings.
-
-
search_index_entry = {'aliases': '@type @typeclasses @update @parent @swap', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass type typeclasses update parent swap', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}¶
+search_index_entry = {'aliases': '@update @typeclasses @type @swap @parent', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass update typeclasses type 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 "}¶
@@ -1846,7 +1846,7 @@ one is given.
@@ -1877,7 +1877,7 @@ one is given.
-
-
search_index_entry = {'aliases': '@search @locate', 'category': 'building', 'key': '@find', 'no_prefix': 'find search locate', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}¶
+search_index_entry = {'aliases': '@locate @search', 'category': 'building', 'key': '@find', 'no_prefix': 'find locate search', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}¶
diff --git a/docs/2.x/api/evennia.commands.default.general.html b/docs/2.x/api/evennia.commands.default.general.html
index 6ae3c4f18c..93569d0f81 100644
--- a/docs/2.x/api/evennia.commands.default.general.html
+++ b/docs/2.x/api/evennia.commands.default.general.html
@@ -331,7 +331,7 @@ inv
@@ -362,7 +362,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 '}¶
@@ -717,7 +717,7 @@ automatically begin with your name.
@@ -758,7 +758,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 "}¶
@@ -781,7 +781,7 @@ which permission groups you are a member of.
@@ -812,7 +812,7 @@ which permission groups you are a member of.
-
-
search_index_entry = {'aliases': 'groups hierarchy', 'category': 'general', 'key': 'access', 'no_prefix': ' groups hierarchy', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}¶
+search_index_entry = {'aliases': 'hierarchy groups', 'category': 'general', 'key': 'access', 'no_prefix': ' hierarchy groups', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}¶
diff --git a/docs/2.x/api/evennia.commands.default.tests.html b/docs/2.x/api/evennia.commands.default.tests.html
index 26247b8df4..602a7f892b 100644
--- a/docs/2.x/api/evennia.commands.default.tests.html
+++ b/docs/2.x/api/evennia.commands.default.tests.html
@@ -963,7 +963,7 @@ main test suite started with
Test the batch processor.
+red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmphxshdwso/3c20eeb223a91f720d422c8d600c6628c4e7f378/evennia/contrib/tutorials/red_button/red_button.py'>¶
diff --git a/docs/2.x/api/evennia.commands.default.unloggedin.html b/docs/2.x/api/evennia.commands.default.unloggedin.html
index 3aee010a6a..c3c09da728 100644
--- a/docs/2.x/api/evennia.commands.default.unloggedin.html
+++ b/docs/2.x/api/evennia.commands.default.unloggedin.html
@@ -130,7 +130,7 @@ connect “account name” “pass word”
@@ -165,7 +165,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'co con conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' co con conn', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
+search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
@@ -189,7 +189,7 @@ create “account name” “pass word”
@@ -226,7 +226,7 @@ create “account name” “pass word”
-
-
search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
+search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
@@ -349,7 +349,7 @@ for simplicity. It shows a pane of info.
@@ -375,7 +375,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/2.x/api/evennia.contrib.base_systems.email_login.email_login.html b/docs/2.x/api/evennia.contrib.base_systems.email_login.email_login.html
index a6c39ef954..bebc9dfcac 100644
--- a/docs/2.x/api/evennia.contrib.base_systems.email_login.email_login.html
+++ b/docs/2.x/api/evennia.contrib.base_systems.email_login.email_login.html
@@ -147,7 +147,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.
@@ -177,7 +177,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'co con conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' co con conn', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶
+search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶
@@ -199,7 +199,7 @@ there is no object yet before the account has logged in)
@@ -235,7 +235,7 @@ name enclosed in quotes:
-
-
search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}¶
+search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}¶
@@ -343,7 +343,7 @@ for simplicity. It shows a pane of info.
@@ -369,7 +369,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/2.x/api/evennia.contrib.base_systems.ingame_python.commands.html b/docs/2.x/api/evennia.contrib.base_systems.ingame_python.commands.html
index 3bf7ad15fe..45e4c64ead 100644
--- a/docs/2.x/api/evennia.contrib.base_systems.ingame_python.commands.html
+++ b/docs/2.x/api/evennia.contrib.base_systems.ingame_python.commands.html
@@ -124,7 +124,7 @@
@@ -205,7 +205,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': '@callbacks @calls @callback', 'category': 'building', 'key': '@call', 'no_prefix': 'call callbacks calls callback', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶
diff --git a/docs/2.x/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html b/docs/2.x/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html
index 7161fd5c59..7c888fd333 100644
--- a/docs/2.x/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html
+++ b/docs/2.x/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html
@@ -168,7 +168,7 @@ aliases to an already joined channel.
@@ -199,7 +199,7 @@ aliases to an already joined channel.
-
-
search_index_entry = {'aliases': 'aliaschan chanalias', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' aliaschan chanalias', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶
+search_index_entry = {'aliases': 'chanalias aliaschan', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' chanalias aliaschan', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶
diff --git a/docs/2.x/api/evennia.contrib.full_systems.evscaperoom.commands.html b/docs/2.x/api/evennia.contrib.full_systems.evscaperoom.commands.html
index 401e95814a..4720fe9484 100644
--- a/docs/2.x/api/evennia.contrib.full_systems.evscaperoom.commands.html
+++ b/docs/2.x/api/evennia.contrib.full_systems.evscaperoom.commands.html
@@ -219,7 +219,7 @@ the operation will be general or on the room.
@@ -243,7 +243,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'chicken out q quit abort', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out q quit abort', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶
+search_index_entry = {'aliases': 'quit abort chicken out q', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' quit abort chicken out 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 '}¶
@@ -379,7 +379,7 @@ shout
@@ -408,7 +408,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 '}¶
@@ -589,7 +589,7 @@ set in self.parse())
@@ -613,7 +613,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'i inv inventory give', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' i inv inventory give', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
+search_index_entry = {'aliases': 'inventory inv i give', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory inv i give', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
@@ -634,7 +634,7 @@ set in self.parse())
@@ -657,7 +657,7 @@ to all the variables defined therein.
-
-
search_index_entry = {'aliases': '@dig @open', 'category': 'general', 'key': 'open', 'no_prefix': ' dig open', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}¶
+search_index_entry = {'aliases': '@open @dig', 'category': 'general', 'key': 'open', 'no_prefix': ' open dig', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}¶
diff --git a/docs/2.x/api/evennia.contrib.game_systems.clothing.clothing.html b/docs/2.x/api/evennia.contrib.game_systems.clothing.clothing.html
index 2c3865a810..7c96a8a017 100644
--- a/docs/2.x/api/evennia.contrib.game_systems.clothing.clothing.html
+++ b/docs/2.x/api/evennia.contrib.game_systems.clothing.clothing.html
@@ -630,7 +630,7 @@ inv
@@ -661,7 +661,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/2.x/api/evennia.contrib.grid.xyzgrid.commands.html b/docs/2.x/api/evennia.contrib.grid.xyzgrid.commands.html
index f92fe04007..652a2fef7e 100644
--- a/docs/2.x/api/evennia.contrib.grid.xyzgrid.commands.html
+++ b/docs/2.x/api/evennia.contrib.grid.xyzgrid.commands.html
@@ -430,7 +430,7 @@ there is no room above/below you, your movement will fail.
@@ -453,7 +453,7 @@ to all the variables defined therein.
-
-
search_index_entry = {'aliases': 'dive fly', 'category': 'general', 'key': 'fly or dive', 'no_prefix': ' dive fly', 'tags': '', 'text': '\n Fly or Dive up and down.\n\n Usage:\n fly\n dive\n\n Will fly up one room or dive down one room at your current position. If\n there is no room above/below you, your movement will fail.\n\n '}¶
+search_index_entry = {'aliases': 'fly dive', 'category': 'general', 'key': 'fly or dive', 'no_prefix': ' fly dive', 'tags': '', 'text': '\n Fly or Dive up and down.\n\n Usage:\n fly\n dive\n\n Will fly up one room or dive down one room at your current position. If\n there is no room above/below you, your movement will fail.\n\n '}¶
diff --git a/docs/2.x/api/evennia.contrib.rpg.rpsystem.rpsystem.html b/docs/2.x/api/evennia.contrib.rpg.rpsystem.rpsystem.html
index 797bc2810d..06adb5293a 100644
--- a/docs/2.x/api/evennia.contrib.rpg.rpsystem.rpsystem.html
+++ b/docs/2.x/api/evennia.contrib.rpg.rpsystem.rpsystem.html
@@ -881,7 +881,7 @@ Using the command without arguments will list all current recogs.
@@ -908,7 +908,7 @@ Using the command without arguments will list all current recogs.
-
-
search_index_entry = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', 'no_prefix': ' forget recognize', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶
+search_index_entry = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'no_prefix': ' recognize forget', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶
diff --git a/docs/2.x/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html b/docs/2.x/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html
index 5009392c4f..73fe4f65d0 100644
--- a/docs/2.x/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html
+++ b/docs/2.x/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html
@@ -474,7 +474,7 @@ turn of combat, performing everyone’s actions in random order.
@@ -520,7 +520,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'turnbased combat hit', 'category': 'general', 'key': 'attack', 'no_prefix': ' turnbased combat hit', 'tags': '', 'text': '\n Start or join combat.\n\n Usage:\n attack [<target>]\n\n '}¶
+search_index_entry = {'aliases': 'hit turnbased combat', 'category': 'general', 'key': 'attack', 'no_prefix': ' hit turnbased combat', 'tags': '', 'text': '\n Start or join combat.\n\n Usage:\n attack [<target>]\n\n '}¶
diff --git a/docs/2.x/api/evennia.contrib.tutorials.evadventure.combat_twitch.html b/docs/2.x/api/evennia.contrib.tutorials.evadventure.combat_twitch.html
index 6775e22af1..2961fd81d2 100644
--- a/docs/2.x/api/evennia.contrib.tutorials.evadventure.combat_twitch.html
+++ b/docs/2.x/api/evennia.contrib.tutorials.evadventure.combat_twitch.html
@@ -485,7 +485,7 @@ boost INT Wizard Goblin
@@ -519,7 +519,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'foil boost', 'category': 'combat', 'key': 'stunt', 'no_prefix': ' foil boost', 'tags': '', 'text': '\n Perform a combat stunt, that boosts an ally against a target, or\n foils an enemy, giving them disadvantage against an ally.\n\n Usage:\n boost [ability] <recipient> <target>\n foil [ability] <recipient> <target>\n boost [ability] <target> (same as boost me <target>)\n foil [ability] <target> (same as foil <target> me)\n\n Example:\n boost STR me Goblin\n boost DEX Goblin\n foil STR Goblin me\n foil INT Goblin\n boost INT Wizard Goblin\n\n '}¶
+search_index_entry = {'aliases': 'boost foil', 'category': 'combat', 'key': 'stunt', 'no_prefix': ' boost foil', 'tags': '', 'text': '\n Perform a combat stunt, that boosts an ally against a target, or\n foils an enemy, giving them disadvantage against an ally.\n\n Usage:\n boost [ability] <recipient> <target>\n foil [ability] <recipient> <target>\n boost [ability] <target> (same as boost me <target>)\n foil [ability] <target> (same as foil <target> me)\n\n Example:\n boost STR me Goblin\n boost DEX Goblin\n foil STR Goblin me\n foil INT Goblin\n boost INT Wizard Goblin\n\n '}¶
diff --git a/docs/2.x/api/evennia.contrib.tutorials.evadventure.commands.html b/docs/2.x/api/evennia.contrib.tutorials.evadventure.commands.html
index 7142454385..a8bfcc0523 100644
--- a/docs/2.x/api/evennia.contrib.tutorials.evadventure.commands.html
+++ b/docs/2.x/api/evennia.contrib.tutorials.evadventure.commands.html
@@ -200,7 +200,7 @@ self.args).
@@ -224,7 +224,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}¶
+search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}¶
@@ -301,7 +301,7 @@ unwear <item>
@@ -325,7 +325,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'unwear unwield', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwear unwield', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}¶
+search_index_entry = {'aliases': 'unwield unwear', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwield unwear', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}¶
diff --git a/docs/2.x/api/evennia.contrib.tutorials.red_button.red_button.html b/docs/2.x/api/evennia.contrib.tutorials.red_button.red_button.html
index 7192fdd017..33070c66ba 100644
--- a/docs/2.x/api/evennia.contrib.tutorials.red_button.red_button.html
+++ b/docs/2.x/api/evennia.contrib.tutorials.red_button.red_button.html
@@ -260,7 +260,7 @@ check if the lid is open or closed.
+aliases = ['smash lid', 'smash', 'break lid']¶
@@ -287,7 +287,7 @@ break.
+search_index_entry = {'aliases': 'smash lid smash break lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid smash break lid', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}¶
@@ -514,7 +514,7 @@ be mutually exclusive.
+aliases = ['examine', 'feel', 'ex', 'get', 'listen', 'l']¶
@@ -540,7 +540,7 @@ be mutually exclusive.
+search_index_entry = {'aliases': 'examine feel ex get listen l', 'category': 'general', 'key': 'look', 'no_prefix': ' examine feel ex get listen l', '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/2.x/api/evennia.contrib.tutorials.tutorial_world.objects.html b/docs/2.x/api/evennia.contrib.tutorials.tutorial_world.objects.html
index e6562bade1..8df49db8df 100644
--- a/docs/2.x/api/evennia.contrib.tutorials.tutorial_world.objects.html
+++ b/docs/2.x/api/evennia.contrib.tutorials.tutorial_world.objects.html
@@ -433,7 +433,7 @@ of the object. We overload it with our own version.
@@ -460,7 +460,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 '}¶
@@ -564,7 +564,7 @@ shift green root up/down
@@ -600,7 +600,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'pull push move shiftroot', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' pull push move shiftroot', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}¶
+search_index_entry = {'aliases': 'push pull move shiftroot', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push pull move shiftroot', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}¶
@@ -617,7 +617,7 @@ yellow/green - horizontal roots
-
-
aliases = ['push button', 'button', 'press button']¶
+aliases = ['push button', 'press button', 'button']¶
@@ -643,7 +643,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 '}¶
@@ -787,7 +787,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
aliases = ['hit', 'slash', 'kill', 'pierce', 'stab', 'bash', 'thrust', 'chop', 'parry', 'fight', 'defend']¶
+aliases = ['bash', 'slash', 'defend', 'thrust', 'stab', 'pierce', 'fight', 'chop', 'hit', 'kill', 'parry']¶
@@ -813,7 +813,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
search_index_entry = {'aliases': 'hit slash kill pierce stab bash thrust chop parry fight defend', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' hit slash kill pierce stab bash thrust chop parry fight defend', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶
+search_index_entry = {'aliases': 'bash slash defend thrust stab pierce fight chop hit kill parry', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' bash slash defend thrust stab pierce fight chop hit kill 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 '}¶
diff --git a/docs/2.x/api/evennia.contrib.tutorials.tutorial_world.rooms.html b/docs/2.x/api/evennia.contrib.tutorials.tutorial_world.rooms.html
index 824bd4312a..031ef663b4 100644
--- a/docs/2.x/api/evennia.contrib.tutorials.tutorial_world.rooms.html
+++ b/docs/2.x/api/evennia.contrib.tutorials.tutorial_world.rooms.html
@@ -824,7 +824,7 @@ if they fall off the bridge.
@@ -850,7 +850,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 '}¶
@@ -976,7 +976,7 @@ to find something.
-
-
aliases = ['feel', 'fiddle', 'feel around', 'search', 'l']¶
+aliases = ['fiddle', 'feel', 'search', 'feel around', 'l']¶
@@ -1004,7 +1004,7 @@ random chance of eventually finding a light source.
-
-
search_index_entry = {'aliases': 'feel fiddle feel around search l', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel fiddle feel around search l', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}¶
+search_index_entry = {'aliases': 'fiddle feel search feel around l', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' fiddle feel search feel around l', '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/2.x/api/evennia.contrib.utils.git_integration.git_integration.html b/docs/2.x/api/evennia.contrib.utils.git_integration.git_integration.html
index 1b1af61979..dd71de0d40 100644
--- a/docs/2.x/api/evennia.contrib.utils.git_integration.git_integration.html
+++ b/docs/2.x/api/evennia.contrib.utils.git_integration.git_integration.html
@@ -216,7 +216,7 @@ git evennia pull - Pull the latest evennia code.
-
-
directory = '/tmp/tmpks0i109c/bf8620887b4407fad850e87c9342e0b8f72338e8/evennia'¶
+directory = '/tmp/tmphxshdwso/3c20eeb223a91f720d422c8d600c6628c4e7f378/evennia'¶
@@ -277,7 +277,7 @@ git pull - Pull the latest code from your current branch.
-
-
directory = '/tmp/tmpks0i109c/bf8620887b4407fad850e87c9342e0b8f72338e8/evennia/game_template'¶
+directory = '/tmp/tmphxshdwso/3c20eeb223a91f720d422c8d600c6628c4e7f378/evennia/game_template'¶
diff --git a/docs/2.x/api/evennia.utils.eveditor.html b/docs/2.x/api/evennia.utils.eveditor.html
index 5047d1f35e..2e8ab7482b 100644
--- a/docs/2.x/api/evennia.utils.eveditor.html
+++ b/docs/2.x/api/evennia.utils.eveditor.html
@@ -344,7 +344,7 @@ indentation.
-
-
aliases = [':dd', ':x', '::', ':I', ':::', ':!', ':u', ':', ':p', ':fd', ':fi', ':DD', ':w', ':<', ':f', ':echo', ':q', ':s', ':>', ':uu', ':dw', ':A', ':wq', ':i', ':y', ':r', ':q!', ':UU', ':S', ':=', ':h', ':j']¶
+aliases = [':q', ':fi', ':x', ':dd', ':echo', ':y', ':r', ':S', ':UU', ':fd', ':<', ':h', ':dw', ':', ':wq', ':=', ':f', '::', ':q!', ':w', ':A', ':j', ':i', ':!', ':DD', ':p', ':I', ':u', ':>', ':s', ':::', ':uu']¶
@@ -372,7 +372,7 @@ efficient presentation.
-
-
search_index_entry = {'aliases': ':dd :x :: :I ::: :! :u : :p :fd :fi :DD :w :< :f :echo :q :s :> :uu :dw :A :wq :i :y :r :q! :UU :S := :h :j', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :dd :x :: :I ::: :! :u : :p :fd :fi :DD :w :< :f :echo :q :s :> :uu :dw :A :wq :i :y :r :q! :UU :S := :h :j', 'tags': '', 'text': '\n Commands for the editor\n '}¶
+search_index_entry = {'aliases': ':q :fi :x :dd :echo :y :r :S :UU :fd :< :h :dw : :wq := :f :: :q! :w :A :j :i :! :DD :p :I :u :> :s ::: :uu', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :q :fi :x :dd :echo :y :r :S :UU :fd :< :h :dw : :wq := :f :: :q! :w :A :j :i :! :DD :p :I :u :> :s ::: :uu', 'tags': '', 'text': '\n Commands for the editor\n '}¶
diff --git a/docs/2.x/api/evennia.utils.evmenu.html b/docs/2.x/api/evennia.utils.evmenu.html
index 4090e4d978..3e0ecd4af6 100644
--- a/docs/2.x/api/evennia.utils.evmenu.html
+++ b/docs/2.x/api/evennia.utils.evmenu.html
@@ -947,7 +947,7 @@ single question.
+aliases = ['n', 'no', 'a', '__nomatch_command', 'abort', 'yes', 'y']¶
@@ -973,7 +973,7 @@ single question.
+search_index_entry = {'aliases': 'n no a __nomatch_command abort yes y', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n no a __nomatch_command abort yes y', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}¶
diff --git a/docs/2.x/api/evennia.utils.evmore.html b/docs/2.x/api/evennia.utils.evmore.html
index 1643892da8..bb1f8dc247 100644
--- a/docs/2.x/api/evennia.utils.evmore.html
+++ b/docs/2.x/api/evennia.utils.evmore.html
@@ -145,7 +145,7 @@ the caller.msg() construct every time the page is updated.
-
-
aliases = ['t', 'e', 'a', 'n', 'quit', 'top', 'previous', 'next', 'p', 'q', 'abort', 'end']¶
+aliases = ['e', 'p', 'n', 'q', 'a', 'quit', 'previous', 't', 'abort', 'top', 'next', 'end']¶
@@ -171,7 +171,7 @@ the caller.msg() construct every time the page is updated.
-
-
search_index_entry = {'aliases': 't e a n quit top previous next p q abort end', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' t e a n quit top previous next p q abort end', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶
+search_index_entry = {'aliases': 'e p n q a quit previous t abort top next end', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' e p n q a quit previous t abort top next end', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶
diff --git a/docs/2.x/objects.inv b/docs/2.x/objects.inv
index 14e117f03d41a1f4eecb3dbe7415609145d408b3..eb7a87655ad61013dba2171b6d107a6cc60ea94a 100644
GIT binary patch
delta 77604
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