From dbfc11fda0165c67cc99ae1c8ab729a2554249b2 Mon Sep 17 00:00:00 2001
From: Evennia docbuilder action
Date: Sun, 29 Sep 2024 08:30:40 +0000
Subject: [PATCH] Updated HTML docs.
---
docs/latest/.buildinfo | 2 +-
.../Beginner-Tutorial-Django-queries.html | 22 ++++++------
.../_modules/evennia/objects/objects.html | 33 +++++++++++++++---
.../_modules/evennia/prototypes/spawner.html | 5 +++
.../Beginner-Tutorial-Django-queries.md.txt | 24 ++++++-------
...evennia.commands.default.batchprocess.html | 4 +--
.../evennia.commands.default.building.html | 8 ++---
.../api/evennia.commands.default.general.html | 16 ++++-----
.../api/evennia.commands.default.system.html | 4 +--
.../api/evennia.commands.default.tests.html | 2 +-
.../evennia.commands.default.unloggedin.html | 8 ++---
....base_systems.email_login.email_login.html | 8 ++---
...b.base_systems.ingame_python.commands.html | 4 +--
...rib.full_systems.evscaperoom.commands.html | 20 +++++------
...ame_systems.achievements.achievements.html | 4 +--
...ontrib.game_systems.clothing.clothing.html | 4 +--
...evennia.contrib.grid.xyzgrid.commands.html | 4 +--
...evennia.contrib.rpg.rpsystem.rpsystem.html | 4 +--
...utorials.evadventure.combat_turnbased.html | 4 +--
...ontrib.tutorials.evadventure.commands.html | 4 +--
...ntrib.tutorials.red_button.red_button.html | 8 ++---
...trib.tutorials.tutorial_world.objects.html | 16 ++++-----
...ontrib.tutorials.tutorial_world.rooms.html | 4 +--
...utils.git_integration.git_integration.html | 4 +--
docs/latest/api/evennia.objects.objects.html | 24 +++++++++++++
docs/latest/api/evennia.utils.eveditor.html | 4 +--
docs/latest/api/evennia.utils.evmenu.html | 4 +--
docs/latest/api/evennia.utils.evmore.html | 4 +--
docs/latest/genindex.html | 8 +++--
docs/latest/objects.inv | Bin 171682 -> 171691 bytes
docs/latest/searchindex.js | 2 +-
31 files changed, 160 insertions(+), 102 deletions(-)
diff --git a/docs/latest/.buildinfo b/docs/latest/.buildinfo
index 5b26570a47..640a174833 100644
--- a/docs/latest/.buildinfo
+++ b/docs/latest/.buildinfo
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: d7b846554994f01deeee5ba90fb167f9
+config: 206397901914720058abc1e9045cb51e
tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/latest/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Django-queries.html b/docs/latest/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Django-queries.html
index da3682e8ee..d636cceb88 100644
--- a/docs/latest/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Django-queries.html
+++ b/docs/latest/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Django-queries.html
@@ -142,7 +142,7 @@ But sometimes you need to be more specific:
You want to find all Characters …
… who are in Rooms tagged as moonlit …
-… and who has the Attribute lycantrophy with a level higher than 2 …
+… and who has the Attribute lycanthropy with a level equal to 2 …
… because they should immediately transform to werewolves!
In principle you could achieve this with the existing search functions combined with a lot of loops
@@ -266,7 +266,7 @@ this is how we have identified mages:
of this lesson.
Firstly, we make ourselves and our current location match the criteria, so we can test:
> py here.tags.add("moonlit")
-> py me.db.lycantrophy = 3
+> py me.db.lycanthropy = 2
This is an example of a more complex query. We’ll consider it an example of what is
@@ -286,7 +286,7 @@ possible.
Character.objects
.filter(
db_location__db_tags__db_key__iexact="moonlit",
- db_attributes__db_key="lycantrophy",
+ db_attributes__db_key="lycanthropy",
db_attributes__db_value__eq=2
)
)
@@ -307,12 +307,12 @@ that we can treat like an object for this purpose; it references all Tags on the
… and from those Tags, we looking for Tags whose db_key is “monlit” (non-case sensitive).
-Line 7: … We also want only Characters with Attributes whose db_key is exactly "lycantrophy"
+Line 7: … We also want only Characters with Attributes whose db_key is exactly "lycanthropy"
Line 8 :… at the same time as the Attribute’s db_value is exactly 2.
-Running this query makes our newly lycantrophic Character appear in will_transform so we know to transform it. Success!
+Running this query makes our newly lycanthropic Character appear in will_transform so we know to transform it. Success!
Important
You can’t query for an Attribute db_value quite as freely as other data-types. This is because Attributes can store any Python entity and is actually stored as strings on the database side. So while you can use __eq=2 in the above example, you will not be able to __gt=2 or __lt=2 because these operations don’t make sense for strings. See Attributes for more information on dealing with Attributes.
@@ -321,7 +321,7 @@ that we can treat like an object for this purpose; it references all Tags on the
12.3. Queries with OR or NOT
All examples so far used AND relations. The arguments to .filter are added together with AND
-(“we want tag room to be “monlit” and lycantrhopy be > 2”).
+(“we want tag room to be “monlit” and lycanthropy be > 2”).
For queries using OR and NOT we need Django’s Q object. It is imported from Django directly:
from django.db.models import Q
@@ -346,7 +346,7 @@ Character.objects.filter(q1 | ~q2)
Would get all Characters that are either named “Dalton” or which is not in prison. The result is a mix
of Daltons and non-prisoners.
-Let us expand our original werewolf query. Not only do we want to find all Characters in a moonlit room with a certain level of lycanthrophy - we decide that if they have been newly bitten, they should also turn, regardless of their lycantrophy level (more dramatic that way!).
+Let us expand our original werewolf query. Not only do we want to find all Characters in a moonlit room with a certain level of lycanthropy - we decide that if they have been newly bitten, they should also turn, regardless of their lycanthropy level (more dramatic that way!).
Let’s say that getting bitten means that you’ll get assigned a Tag recently_bitten.
This is how we’d change our query:
from django.db.models import Q
@@ -356,7 +356,7 @@ of Daltons and non-prisoners.
.filter(
Q(db_location__db_tags__db_key__iexact="moonlit")
& (
- Q(db_attributes__db_key="lycantrophy",
+ Q(db_attributes__db_key="lycanthropy",
db_attributes__db_value__eq=2)
| Q(db_tags__db_key__iexact="recently_bitten")
))
@@ -368,12 +368,12 @@ of Daltons and non-prisoners.
from django.db.models import Q
q_moonlit = Q(db_location__db_tags__db_key__iexact="moonlit")
-q_lycantropic = Q(db_attributes__db_key="lycantrophy", db_attributes__db_value__eq=2)
+q_lycanthropic = Q(db_attributes__db_key="lycanthropy", db_attributes__db_value__eq=2)
q_recently_bitten = Q(db_tags__db_key__iexact="recently_bitten")
will_transform = (
Character.objects
- .filter(q_moonlit & (q_lycantropic | q_recently_bitten))
+ .filter(q_moonlit & (q_lycanthropic | q_recently_bitten))
.distinct()
)
@@ -386,7 +386,7 @@ joined with
LEFT
This reads as “Find all Characters in a moonlit room that either has the
-Attribute lycantrophy higher than two, or which has the Tag
+Attribute lycanthropy equal to two, or which has the Tag
recently_bitten”. With an OR-query like this it’s possible to find the same
Character via different paths, so we add .distinct() at the end. This makes
sure that there is only one instance of each Character in the result.
diff --git a/docs/latest/_modules/evennia/objects/objects.html b/docs/latest/_modules/evennia/objects/objects.html
index e7c2151997..76e672ab79 100644
--- a/docs/latest/_modules/evennia/objects/objects.html
+++ b/docs/latest/_modules/evennia/objects/objects.html
@@ -396,11 +396,14 @@
at_object_creation() - only called once, when object is first created.
Object customizations go here.
+ at_object_post_creation() - only called once, when object is first created.
+ Additional setup involving e.g. prototype-set attributes can go here.
at_object_delete() - called just before deleting an object. If returning
False, deletion is aborted. Note that all objects
inside a deleted object are automatically moved
to their <home>, they don't need to be removed here.
-
+ at_object_post_spawn() - called when object is spawned from a prototype or updated
+ by the spawner to apply prototype changes.
at_init() - called whenever typeclass is cached from memory,
at least once every server restart/reload
at_first_save()
@@ -2016,9 +2019,9 @@
self.init_evennia_properties()
if hasattr(self, "_createdict"):
- # this will only be set if the utils.create function
- # was used to create the object. We want the create
- # call's kwargs to override the values set by hooks.
+ # this will be set if the object was created by the utils.create function
+ # or the spawner. We want these kwargs to override the values set by
+ # the initial hooks.
cdict = self._createdict
updates = []
if not cdict.get("key"):
@@ -2061,6 +2064,9 @@
self.nattributes.add(key, value)
del self._createdict
+
+ # run the post-setup hook
+ self.at_object_post_creation()
self.basetype_posthook_setup()
@@ -2116,6 +2122,15 @@
Called once, when this object is first created. This is the
normal hook to overload for most object types.
+ """
+ pass
+
+
[docs] def at_object_post_creation(self):
+
"""
+
Called once, when this object is first created and after any attributes, tags, etc.
+
that were passed to the `create_object` function or defined in a prototype have been
+
applied.
+
"""
pass
@@ -2128,6 +2143,16 @@
"""
return True
+[docs] def at_object_post_spawn(self, prototype=None):
+
"""
+
Called when this object is spawned or updated from a prototype, after all other
+
hooks have been run.
+
+
Keyword Args:
+
prototype (dict): The prototype that was used to spawn or update this object.
+
"""
+
pass
+
[docs] def at_init(self):
"""
This is always called whenever this object is initiated --
diff --git a/docs/latest/_modules/evennia/prototypes/spawner.html b/docs/latest/_modules/evennia/prototypes/spawner.html
index c700fab2e5..ae9d8e03b8 100644
--- a/docs/latest/_modules/evennia/prototypes/spawner.html
+++ b/docs/latest/_modules/evennia/prototypes/spawner.html
@@ -895,6 +895,8 @@
if do_save:
changed += 1
obj.save()
+
if spawn_hook := getattr(obj, "at_object_post_spawn", None):
+
spawn_hook(prototype=prototype)
return changed
@@ -961,6 +963,9 @@
for code in objparam[7]:
if code:
exec(code, {}, {"evennia": evennia, "obj": obj})
+ # run the spawned hook
+ if spawn_hook := getattr(obj, "at_object_post_spawn", None):
+ spawn_hook()
objs.append(obj)
return objs
diff --git a/docs/latest/_sources/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Django-queries.md.txt b/docs/latest/_sources/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Django-queries.md.txt
index d13c631cc8..dae9d32da6 100644
--- a/docs/latest/_sources/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Django-queries.md.txt
+++ b/docs/latest/_sources/Howtos/Beginner-Tutorial/Part1/Beginner-Tutorial-Django-queries.md.txt
@@ -14,7 +14,7 @@ But sometimes you need to be more specific:
- You want to find all `Characters` ...
- ... who are in Rooms tagged as `moonlit` ...
-- ... _and_ who has the Attribute `lycantrophy` with a level higher than 2 ...
+- ... _and_ who has the Attribute `lycanthropy` with a level equal to 2 ...
- ... because they should immediately transform to werewolves!
In principle you could achieve this with the existing search functions combined with a lot of loops
@@ -159,7 +159,7 @@ of this lesson.
Firstly, we make ourselves and our current location match the criteria, so we can test:
> py here.tags.add("moonlit")
- > py me.db.lycantrophy = 3
+ > py me.db.lycanthropy = 2
This is an example of a more complex query. We'll consider it an example of what is
possible.
@@ -174,7 +174,7 @@ will_transform = (
Character.objects
.filter(
db_location__db_tags__db_key__iexact="moonlit",
- db_attributes__db_key="lycantrophy",
+ db_attributes__db_key="lycanthropy",
db_attributes__db_value__eq=2
)
)
@@ -189,10 +189,10 @@ Don't confuse database fields with [Attributes](../../../Components/Attributes.m
- ... and on that location, we get the value of `db_tags` (this is a _many-to-many_ database field
that we can treat like an object for this purpose; it references all Tags on the location)
- ... and from those `Tags`, we looking for `Tags` whose `db_key` is "monlit" (non-case sensitive).
- - **Line 7**: ... We also want only Characters with `Attributes` whose `db_key` is exactly `"lycantrophy"`
+ - **Line 7**: ... We also want only Characters with `Attributes` whose `db_key` is exactly `"lycanthropy"`
- **Line 8** :... at the same time as the `Attribute`'s `db_value` is exactly 2.
-Running this query makes our newly lycantrophic Character appear in `will_transform` so we know to transform it. Success!
+Running this query makes our newly lycanthropic Character appear in `will_transform` so we know to transform it. Success!
```{important}
You can't query for an Attribute `db_value` quite as freely as other data-types. This is because Attributes can store any Python entity and is actually stored as _strings_ on the database side. So while you can use `__eq=2` in the above example, you will not be able to `__gt=2` or `__lt=2` because these operations don't make sense for strings. See [Attributes](../../../Components/Attributes.md#querying-by-attribute) for more information on dealing with Attributes.
@@ -201,7 +201,7 @@ You can't query for an Attribute `db_value` quite as freely as other data-types.
## Queries with OR or NOT
All examples so far used `AND` relations. The arguments to `.filter` are added together with `AND`
-("we want tag room to be "monlit" _and_ lycantrhopy be > 2").
+("we want tag room to be "monlit" _and_ lycanthropy be > 2").
For queries using `OR` and `NOT` we need Django's [Q object](https://docs.djangoproject.com/en/4.1/topics/db/queries/#complex-lookups-with-q-objects). It is imported from Django directly:
@@ -228,7 +228,7 @@ works like `NOT`.
Would get all Characters that are either named "Dalton" _or_ which is _not_ in prison. The result is a mix
of Daltons and non-prisoners.
-Let us expand our original werewolf query. Not only do we want to find all Characters in a moonlit room with a certain level of `lycanthrophy` - we decide that if they have been _newly bitten_, they should also turn, _regardless_ of their lycantrophy level (more dramatic that way!).
+Let us expand our original werewolf query. Not only do we want to find all Characters in a moonlit room with a certain level of `lycanthropy` - we decide that if they have been _newly bitten_, they should also turn, _regardless_ of their lycanthropy level (more dramatic that way!).
Let's say that getting bitten means that you'll get assigned a Tag `recently_bitten`.
@@ -242,7 +242,7 @@ will_transform = (
.filter(
Q(db_location__db_tags__db_key__iexact="moonlit")
& (
- Q(db_attributes__db_key="lycantrophy",
+ Q(db_attributes__db_key="lycanthropy",
db_attributes__db_value__eq=2)
| Q(db_tags__db_key__iexact="recently_bitten")
))
@@ -256,12 +256,12 @@ That's quite compact. It may be easier to see what's going on if written this wa
from django.db.models import Q
q_moonlit = Q(db_location__db_tags__db_key__iexact="moonlit")
-q_lycantropic = Q(db_attributes__db_key="lycantrophy", db_attributes__db_value__eq=2)
+q_lycanthropic = Q(db_attributes__db_key="lycanthropy", db_attributes__db_value__eq=2)
q_recently_bitten = Q(db_tags__db_key__iexact="recently_bitten")
will_transform = (
Character.objects
- .filter(q_moonlit & (q_lycantropic | q_recently_bitten))
+ .filter(q_moonlit & (q_lycanthropic | q_recently_bitten))
.distinct()
)
```
@@ -276,7 +276,7 @@ the same object with different relations.
```
This reads as "Find all Characters in a moonlit room that either has the
-Attribute `lycantrophy` higher than two, _or_ which has the Tag
+Attribute `lycanthropy` equal to two, _or_ which has the Tag
`recently_bitten`". With an OR-query like this it's possible to find the same
Character via different paths, so we add `.distinct()` at the end. This makes
sure that there is only one instance of each Character in the result.
@@ -406,4 +406,4 @@ in a format like the following:
## Conclusions
-We have covered a lot of ground in this lesson and covered several more complex topics. Knowing how to query using Django is a powerful skill to have.
\ No newline at end of file
+We have covered a lot of ground in this lesson and covered several more complex topics. Knowing how to query using Django is a powerful skill to have.
diff --git a/docs/latest/api/evennia.commands.default.batchprocess.html b/docs/latest/api/evennia.commands.default.batchprocess.html
index 5a7b88c2de..9b80e97757 100644
--- a/docs/latest/api/evennia.commands.default.batchprocess.html
+++ b/docs/latest/api/evennia.commands.default.batchprocess.html
@@ -152,7 +152,7 @@ skipping, reloading etc.
-
-
aliases = ['batchcmd', 'batchcommand']
+aliases = ['batchcommand', 'batchcmd']
@@ -183,7 +183,7 @@ skipping, reloading etc.
-
-
search_index_entry = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}
+search_index_entry = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}
diff --git a/docs/latest/api/evennia.commands.default.building.html b/docs/latest/api/evennia.commands.default.building.html
index 9ddbe44d79..dc16e826a9 100644
--- a/docs/latest/api/evennia.commands.default.building.html
+++ b/docs/latest/api/evennia.commands.default.building.html
@@ -647,7 +647,7 @@ You can specify the /force switch to bypass this confirmation.
-
-
aliases = ['@delete', '@del']
+aliases = ['@del', '@delete']
@@ -688,7 +688,7 @@ You can specify the /force switch to bypass this confirmation.
-
-
search_index_entry = {'aliases': '@delete @del', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy delete del', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}
+search_index_entry = {'aliases': '@del @delete', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy del delete', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}
@@ -1601,7 +1601,7 @@ If object is not specified, the current location is examined.
-
-
aliases = ['@ex', '@exam']
+aliases = ['@exam', '@ex']
@@ -1874,7 +1874,7 @@ the cases, see the module doc.
-
-
search_index_entry = {'aliases': '@ex @exam', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine ex exam', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}
+search_index_entry = {'aliases': '@exam @ex', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine exam ex', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}
diff --git a/docs/latest/api/evennia.commands.default.general.html b/docs/latest/api/evennia.commands.default.general.html
index 9dbcff8fa3..f5258ebf9f 100644
--- a/docs/latest/api/evennia.commands.default.general.html
+++ b/docs/latest/api/evennia.commands.default.general.html
@@ -337,7 +337,7 @@ inv
-
-
aliases = ['inv', 'i']
+aliases = ['i', 'inv']
@@ -368,7 +368,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 '}
@@ -611,7 +611,7 @@ placing it in their inventory.
-
-
aliases = ['"', "'"]
+aliases = ["'", '"']
@@ -642,7 +642,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 '}
@@ -722,7 +722,7 @@ automatically begin with your name.
-
-
aliases = ['emote', ':']
+aliases = [':', 'emote']
@@ -763,7 +763,7 @@ space.
-
-
search_index_entry = {'aliases': 'emote :', 'category': 'general', 'key': 'pose', 'no_prefix': ' emote :', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}
+search_index_entry = {'aliases': ': emote', 'category': 'general', 'key': 'pose', 'no_prefix': ' : emote', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}
@@ -786,7 +786,7 @@ which permission groups you are a member of.
-
-
aliases = ['groups', 'hierarchy']
+aliases = ['hierarchy', 'groups']
@@ -817,7 +817,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/latest/api/evennia.commands.default.system.html b/docs/latest/api/evennia.commands.default.system.html
index d02b7cfcc2..196b1c1736 100644
--- a/docs/latest/api/evennia.commands.default.system.html
+++ b/docs/latest/api/evennia.commands.default.system.html
@@ -697,7 +697,7 @@ See |luhttps://ww
-
-
aliases = ['@task', '@delays']
+aliases = ['@delays', '@task']
@@ -743,7 +743,7 @@ to all the variables defined therein.
-
-
search_index_entry = {'aliases': '@task @delays', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
+search_index_entry = {'aliases': '@delays @task', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
diff --git a/docs/latest/api/evennia.commands.default.tests.html b/docs/latest/api/evennia.commands.default.tests.html
index 673394d68d..6fd7e8194f 100644
--- a/docs/latest/api/evennia.commands.default.tests.html
+++ b/docs/latest/api/evennia.commands.default.tests.html
@@ -980,7 +980,7 @@ main test suite started with
Test the batch processor.
-
-
red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmpf7czyky3/e01f79acc2eee43166ab6d445a967b08a46316dd/evennia/contrib/tutorials/red_button/red_button.py'>
+red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmp87z5xhe8/24ff5094a15fa4460bc0dba9a356e2eb76da71fa/evennia/contrib/tutorials/red_button/red_button.py'>
diff --git a/docs/latest/api/evennia.commands.default.unloggedin.html b/docs/latest/api/evennia.commands.default.unloggedin.html
index 39b2c714a3..5114eeee77 100644
--- a/docs/latest/api/evennia.commands.default.unloggedin.html
+++ b/docs/latest/api/evennia.commands.default.unloggedin.html
@@ -136,7 +136,7 @@ connect “account name” “pass word”
-
-
aliases = ['conn', 'co', 'con']
+aliases = ['co', 'con', 'conn']
@@ -171,7 +171,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
+search_index_entry = {'aliases': '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 '}
@@ -256,7 +256,7 @@ version is a bit more complicated.
-
-
aliases = ['q', 'qu']
+aliases = ['qu', 'q']
@@ -282,7 +282,7 @@ version is a bit more complicated.
-
-
search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
+search_index_entry = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
diff --git a/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html b/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html
index b72c64e927..17aeb762b6 100644
--- a/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html
+++ b/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html
@@ -153,7 +153,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.
-
-
aliases = ['conn', 'co', 'con']
+aliases = ['co', 'con', 'conn']
@@ -183,7 +183,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}
+search_index_entry = {'aliases': '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 '}
@@ -266,7 +266,7 @@ version is a bit more complicated.
-
-
aliases = ['q', 'qu']
+aliases = ['qu', 'q']
@@ -292,7 +292,7 @@ version is a bit more complicated.
-
-
search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
+search_index_entry = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
diff --git a/docs/latest/api/evennia.contrib.base_systems.ingame_python.commands.html b/docs/latest/api/evennia.contrib.base_systems.ingame_python.commands.html
index c003ff99f6..111f869f23 100644
--- a/docs/latest/api/evennia.contrib.base_systems.ingame_python.commands.html
+++ b/docs/latest/api/evennia.contrib.base_systems.ingame_python.commands.html
@@ -130,7 +130,7 @@
-
-
aliases = ['@calls', '@callback', '@callbacks']
+aliases = ['@callbacks', '@calls', '@callback']
@@ -211,7 +211,7 @@ on user permission.
-
-
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 '}
+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/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html b/docs/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html
index bd4b17fe50..75a50b07eb 100644
--- a/docs/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html
+++ b/docs/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html
@@ -225,7 +225,7 @@ the operation will be general or on the room.
-
-
aliases = ['chicken out', 'q', 'abort', 'quit']
+aliases = ['abort', 'q', 'quit', 'chicken out']
@@ -249,7 +249,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'chicken out q abort quit', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out q abort quit', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}
+search_index_entry = {'aliases': 'abort q quit chicken out', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' abort q quit chicken out', '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 '}
@@ -385,7 +385,7 @@ shout
-
-
aliases = ['shout', 'whisper', ';']
+aliases = [';', 'shout', 'whisper']
@@ -414,7 +414,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 '}
@@ -504,7 +504,7 @@ looks and what actions is available.
-
-
aliases = ['unfocus', 'ex', 'examine', 'e']
+aliases = ['e', 'ex', 'unfocus', 'examine']
@@ -533,7 +533,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'unfocus ex examine e', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' unfocus ex examine e', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}
+search_index_entry = {'aliases': '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 '}
@@ -595,7 +595,7 @@ set in self.parse())
-
-
aliases = ['i', 'give', 'inv', 'inventory']
+aliases = ['i', 'give', 'inventory', 'inv']
@@ -619,7 +619,7 @@ set in self.parse())
-
-
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 '}
+search_index_entry = {'aliases': 'i give inventory inv', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' i give inventory inv', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}
@@ -640,7 +640,7 @@ set in self.parse())
-
-
aliases = ['@open', '@dig']
+aliases = ['@dig', '@open']
@@ -663,7 +663,7 @@ to all the variables defined therein.
-
-
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 '}
+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 '}
diff --git a/docs/latest/api/evennia.contrib.game_systems.achievements.achievements.html b/docs/latest/api/evennia.contrib.game_systems.achievements.achievements.html
index 3ddd51ff94..cbe051aa3d 100644
--- a/docs/latest/api/evennia.contrib.game_systems.achievements.achievements.html
+++ b/docs/latest/api/evennia.contrib.game_systems.achievements.achievements.html
@@ -289,7 +289,7 @@ achievements/progress rats
-
-
aliases = ['achieve', 'achievement', 'achieves']
+aliases = ['achievement', 'achieve', 'achieves']
@@ -337,7 +337,7 @@ to all the variables defined therein.
-
-
search_index_entry = {'aliases': 'achieve achievement achieves', 'category': 'general', 'key': 'achievements', 'no_prefix': ' achieve achievement achieves', 'tags': '', 'text': '\n view achievements\n\n Usage:\n achievements[/switches] [args]\n\n Switches:\n all View all achievements, including locked ones.\n completed View achievements you\'ve completed.\n progress View achievements you have partially completed\n\n Check your achievement statuses or browse the list. Providing a command argument\n will search all your currently unlocked achievements for matches, and the switches\n will filter the list to something other than "all unlocked". Combining a command\n argument with a switch will search only in that list.\n\n Examples:\n achievements apples\n achievements/all\n achievements/progress rats\n '}
+search_index_entry = {'aliases': 'achievement achieve achieves', 'category': 'general', 'key': 'achievements', 'no_prefix': ' achievement achieve achieves', 'tags': '', 'text': '\n view achievements\n\n Usage:\n achievements[/switches] [args]\n\n Switches:\n all View all achievements, including locked ones.\n completed View achievements you\'ve completed.\n progress View achievements you have partially completed\n\n Check your achievement statuses or browse the list. Providing a command argument\n will search all your currently unlocked achievements for matches, and the switches\n will filter the list to something other than "all unlocked". Combining a command\n argument with a switch will search only in that list.\n\n Examples:\n achievements apples\n achievements/all\n achievements/progress rats\n '}
diff --git a/docs/latest/api/evennia.contrib.game_systems.clothing.clothing.html b/docs/latest/api/evennia.contrib.game_systems.clothing.clothing.html
index 158896c484..8c8be515bb 100644
--- a/docs/latest/api/evennia.contrib.game_systems.clothing.clothing.html
+++ b/docs/latest/api/evennia.contrib.game_systems.clothing.clothing.html
@@ -636,7 +636,7 @@ inv
-
-
aliases = ['inv', 'i']
+aliases = ['i', 'inv']
@@ -667,7 +667,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/latest/api/evennia.contrib.grid.xyzgrid.commands.html b/docs/latest/api/evennia.contrib.grid.xyzgrid.commands.html
index f6516a49a8..fd3910210f 100644
--- a/docs/latest/api/evennia.contrib.grid.xyzgrid.commands.html
+++ b/docs/latest/api/evennia.contrib.grid.xyzgrid.commands.html
@@ -436,7 +436,7 @@ there is no room above/below you, your movement will fail.
-
-
aliases = ['dive', 'fly']
+aliases = ['fly', 'dive']
@@ -459,7 +459,7 @@ to all the variables defined therein.
-
-
search_index_entry = {'aliases': 'dive fly', 'category': 'general', 'key': 'fly or dive', 'no_prefix': ' dive fly', 'tags': '', 'text': '\n Fly or Dive up and down.\n\n Usage:\n fly\n dive\n\n Will fly up one room or dive down one room at your current position. If\n there is no room above/below you, your movement will fail.\n\n '}
+search_index_entry = {'aliases': 'fly dive', 'category': 'general', 'key': 'fly or dive', 'no_prefix': ' fly dive', 'tags': '', 'text': '\n Fly or Dive up and down.\n\n Usage:\n fly\n dive\n\n Will fly up one room or dive down one room at your current position. If\n there is no room above/below you, your movement will fail.\n\n '}
diff --git a/docs/latest/api/evennia.contrib.rpg.rpsystem.rpsystem.html b/docs/latest/api/evennia.contrib.rpg.rpsystem.rpsystem.html
index 97a20164de..e7d57657fb 100644
--- a/docs/latest/api/evennia.contrib.rpg.rpsystem.rpsystem.html
+++ b/docs/latest/api/evennia.contrib.rpg.rpsystem.rpsystem.html
@@ -736,7 +736,7 @@ commands the caller can use.
-
-
aliases = ['"', "'"]
+aliases = ["'", '"']
@@ -767,7 +767,7 @@ commands the caller can use.
-
-
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/latest/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html b/docs/latest/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html
index 5749a8d5e1..269a797481 100644
--- a/docs/latest/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html
+++ b/docs/latest/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html
@@ -480,7 +480,7 @@ turn of combat, performing everyone’s actions in random order.
-
-
aliases = ['turnbased combat', 'hit']
+aliases = ['hit', 'turnbased combat']
@@ -526,7 +526,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/latest/api/evennia.contrib.tutorials.evadventure.commands.html b/docs/latest/api/evennia.contrib.tutorials.evadventure.commands.html
index 18e51861b5..6e54a30a6b 100644
--- a/docs/latest/api/evennia.contrib.tutorials.evadventure.commands.html
+++ b/docs/latest/api/evennia.contrib.tutorials.evadventure.commands.html
@@ -206,7 +206,7 @@ self.args).
-
-
aliases = ['inv', 'i']
+aliases = ['i', 'inv']
@@ -230,7 +230,7 @@ set in self.parse())
-
-
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 '}
+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 '}
diff --git a/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html b/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html
index dd4d2e080d..73073e13ef 100644
--- a/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html
+++ b/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html
@@ -266,7 +266,7 @@ check if the lid is open or closed.
-
-
aliases = ['break lid', 'smash', 'smash lid']
+aliases = ['smash lid', 'smash', 'break lid']
@@ -293,7 +293,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 '}
+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 '}
@@ -520,7 +520,7 @@ be mutually exclusive.
-
-
aliases = ['feel', 'listen', 'ex', 'examine', 'get', 'l']
+aliases = ['listen', 'l', 'get', 'feel', 'ex', 'examine']
@@ -546,7 +546,7 @@ be mutually exclusive.
-
-
search_index_entry = {'aliases': 'feel listen ex examine get l', 'category': 'general', 'key': 'look', 'no_prefix': ' feel listen ex examine get 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 "}
+search_index_entry = {'aliases': 'listen l get feel ex examine', 'category': 'general', 'key': 'look', 'no_prefix': ' listen l get feel ex examine', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}
diff --git a/docs/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html
index ff392ff9b1..6821126a23 100644
--- a/docs/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html
+++ b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html
@@ -439,7 +439,7 @@ of the object. We overload it with our own version.
-
-
aliases = ['burn', 'light']
+aliases = ['light', 'burn']
@@ -466,7 +466,7 @@ to sit on a “lightable” object, we operate only on self.obj.
-
-
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 '}
+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 '}
@@ -570,7 +570,7 @@ shift green root up/down
-
-
aliases = ['shiftroot', 'push', 'move', 'pull']
+aliases = ['push', 'move', 'pull', 'shiftroot']
@@ -606,7 +606,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'shiftroot push move pull', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' shiftroot push move pull', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}
+search_index_entry = {'aliases': 'push move pull shiftroot', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push move pull 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 '}
@@ -623,7 +623,7 @@ yellow/green - horizontal roots
-
-
aliases = ['press button', 'push button', 'button']
+aliases = ['press button', 'button', 'push button']
@@ -649,7 +649,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'press button push button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' press button push button button', 'tags': '', 'text': '\n Presses a button.\n '}
+search_index_entry = {'aliases': 'press button button push button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' press button button push button', 'tags': '', 'text': '\n Presses a button.\n '}
@@ -793,7 +793,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
aliases = ['pierce', 'bash', 'hit', 'slash', 'kill', 'chop', 'fight', 'parry', 'stab', 'thrust', 'defend']
+aliases = ['slash', 'kill', 'parry', 'thrust', 'stab', 'defend', 'pierce', 'hit', 'bash', 'fight', 'chop']
@@ -819,7 +819,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
search_index_entry = {'aliases': 'pierce bash hit slash kill chop fight parry stab thrust defend', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' pierce bash hit slash kill chop fight parry stab thrust 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': 'slash kill parry thrust stab defend pierce hit bash fight chop', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' slash kill parry thrust stab defend pierce hit bash fight chop', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}
diff --git a/docs/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html
index 0667892635..e47a52299b 100644
--- a/docs/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html
+++ b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html
@@ -982,7 +982,7 @@ to find something.
-
-
aliases = ['feel', 'feel around', 'fiddle', 'search', 'l']
+aliases = ['l', 'search', 'fiddle', 'feel around', 'feel']
@@ -1010,7 +1010,7 @@ random chance of eventually finding a light source.
-
-
search_index_entry = {'aliases': 'feel feel around fiddle search l', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel feel around fiddle 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': 'l search fiddle feel around feel', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l search fiddle feel around 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/latest/api/evennia.contrib.utils.git_integration.git_integration.html b/docs/latest/api/evennia.contrib.utils.git_integration.git_integration.html
index a98a156025..6ccd59c9a2 100644
--- a/docs/latest/api/evennia.contrib.utils.git_integration.git_integration.html
+++ b/docs/latest/api/evennia.contrib.utils.git_integration.git_integration.html
@@ -222,7 +222,7 @@ git evennia pull - Pull the latest evennia code.
-
-
directory = '/tmp/tmpf7czyky3/e01f79acc2eee43166ab6d445a967b08a46316dd/evennia'
+directory = '/tmp/tmp87z5xhe8/24ff5094a15fa4460bc0dba9a356e2eb76da71fa/evennia'
@@ -283,7 +283,7 @@ git pull - Pull the latest code from your current branch.
-
-
directory = '/tmp/tmpf7czyky3/e01f79acc2eee43166ab6d445a967b08a46316dd/evennia/game_template'
+directory = '/tmp/tmp87z5xhe8/24ff5094a15fa4460bc0dba9a356e2eb76da71fa/evennia/game_template'
diff --git a/docs/latest/api/evennia.objects.objects.html b/docs/latest/api/evennia.objects.objects.html
index e6346cf310..e820e71176 100644
--- a/docs/latest/api/evennia.objects.objects.html
+++ b/docs/latest/api/evennia.objects.objects.html
@@ -354,10 +354,14 @@ return_apperance(looker, **<
- at_object_creation() - only called once, when object is first created.
Object customizations go here.
+- at_object_post_creation() - only called once, when object is first created.
Additional setup involving e.g. prototype-set attributes can go here.
+
- at_object_delete() - called just before deleting an object. If returning
False, deletion is aborted. Note that all objects
inside a deleted object are automatically moved
to their <home>, they don’t need to be removed here.
+- at_object_post_spawn() - called when object is spawned from a prototype or updated
by the spawner to apply prototype changes.
+
- at_init() - called whenever typeclass is cached from memory,
at least once every server restart/reload
@@ -1469,6 +1473,14 @@ their exit-cmdsets.
normal hook to overload for most object types.
+
+-
+
at_object_post_creation()[source]
+Called once, when this object is first created and after any attributes, tags, etc.
+that were passed to the create_object function or defined in a prototype have been
+applied.
+
+
-
at_object_delete()[source]
@@ -1477,6 +1489,18 @@ delete()d from the database. If this method returns False,
deletion is aborted.
+
+-
+
at_object_post_spawn(prototype=None)[source]
+Called when this object is spawned or updated from a prototype, after all other
+hooks have been run.
+
+- Keyword Arguments
+prototype (dict) – The prototype that was used to spawn or update this object.
+
+
+
+
-
at_init()[source]
diff --git a/docs/latest/api/evennia.utils.eveditor.html b/docs/latest/api/evennia.utils.eveditor.html
index 32cbc10791..bedd18a2be 100644
--- a/docs/latest/api/evennia.utils.eveditor.html
+++ b/docs/latest/api/evennia.utils.eveditor.html
@@ -356,7 +356,7 @@ indentation.
-
-
aliases = [':u', ':>', ':dd', ':s', ':wq', '::', ':i', ':w', ':I', ':r', ':fi', ':UU', ':::', ':', ':dw', ':echo', ':fd', ':q', ':S', ':x', ':A', ':p', ':=', ':j', ':h', ':<', ':!', ':y', ':f', ':q!', ':DD', ':uu']
+aliases = [':s', ':q!', ':A', ':u', ':w', ':echo', ':x', ':y', ':>', ':S', ':wq', ':p', '::', ':uu', ':r', ':=', ':DD', ':i', ':h', ':!', ':I', ':fd', ':fi', ':dd', ':dw', ':j', ':::', ':<', ':UU', ':', ':q', ':f']
@@ -384,7 +384,7 @@ efficient presentation.
-
-
search_index_entry = {'aliases': ':u :> :dd :s :wq :: :i :w :I :r :fi :UU ::: : :dw :echo :fd :q :S :x :A :p := :j :h :< :! :y :f :q! :DD :uu', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :u :> :dd :s :wq :: :i :w :I :r :fi :UU ::: : :dw :echo :fd :q :S :x :A :p := :j :h :< :! :y :f :q! :DD :uu', 'tags': '', 'text': '\n Commands for the editor\n '}
+search_index_entry = {'aliases': ':s :q! :A :u :w :echo :x :y :> :S :wq :p :: :uu :r := :DD :i :h :! :I :fd :fi :dd :dw :j ::: :< :UU : :q :f', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :s :q! :A :u :w :echo :x :y :> :S :wq :p :: :uu :r := :DD :i :h :! :I :fd :fi :dd :dw :j ::: :< :UU : :q :f', 'tags': '', 'text': '\n Commands for the editor\n '}
diff --git a/docs/latest/api/evennia.utils.evmenu.html b/docs/latest/api/evennia.utils.evmenu.html
index 56ba2c5d34..0898a4ee61 100644
--- a/docs/latest/api/evennia.utils.evmenu.html
+++ b/docs/latest/api/evennia.utils.evmenu.html
@@ -955,7 +955,7 @@ single question.
+aliases = ['n', 'yes', '__nomatch_command', 'y', 'abort', 'no', 'a']
@@ -981,7 +981,7 @@ single question.
+search_index_entry = {'aliases': 'n yes __nomatch_command y abort no a', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n yes __nomatch_command y abort no a', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
diff --git a/docs/latest/api/evennia.utils.evmore.html b/docs/latest/api/evennia.utils.evmore.html
index ab2400d885..84b4574176 100644
--- a/docs/latest/api/evennia.utils.evmore.html
+++ b/docs/latest/api/evennia.utils.evmore.html
@@ -151,7 +151,7 @@ the caller.msg() construct every time the page is updated.
-
-
aliases = ['a', 'quit', 'end', 'previous', 'abort', 'next', 'e', 't', 'q', 'p', 'n', 'top']
+aliases = ['p', 'end', 'n', 'q', 'quit', 'next', 'e', 'abort', 't', 'previous', 'a', 'top']
@@ -177,7 +177,7 @@ the caller.msg() construct every time the page is updated.
-
-
search_index_entry = {'aliases': 'a quit end previous abort next e t q p n top', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' a quit end previous abort next e t q p n top', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
+search_index_entry = {'aliases': 'p end n q quit next e abort t previous a top', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' p end n q quit next e abort t previous a top', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
diff --git a/docs/latest/genindex.html b/docs/latest/genindex.html
index 083a5c40be..c94a164392 100644
--- a/docs/latest/genindex.html
+++ b/docs/latest/genindex.html
@@ -1627,10 +1627,10 @@
appearance_template (evennia.objects.objects.DefaultObject attribute)
-
- |
+
at_object_post_copy() (evennia.objects.objects.DefaultObject method)
+
+ at_object_post_creation() (evennia.objects.objects.DefaultObject method)
+
+ at_object_post_spawn() (evennia.objects.objects.DefaultObject method)
at_object_receive() (evennia.contrib.full_systems.evscaperoom.room.EvscapeRoom method)
diff --git a/docs/latest/objects.inv b/docs/latest/objects.inv
index 5ea0a4535ba89331e63b6f6f26fa846d29ea4887..9f8af8ce84a2077f5963f2cf5e0bedd66f702f0c 100644
GIT binary patch
delta 85944
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 |