Contributions¶
-The evennia/contrib/ folder holds Game-specific tools, systems and utilities created by the community. This gathers -longer-form documentation associated with particular contribs.
+Contrib modules¶
+Contribs are found in evennia/contrib/ and are optional game-specific code-snippets +or even full systems you can use for your game. They are contributed by the Evennia community and +released under the same license as Evennia itself. Each contrib has its own installation instructions. +Bugs are reported to the Evennia issue tracker as usual.
+Character-related¶
+Contribs related to characters and character displays.
+CharGen¶
+Griatch 2011
+A simple Character creator for OOC mode. Meant as a starting point for a more fleshed-out system.
+Clothing¶
+FlutterSprite 2017
+A layered clothing system with slots for different types of garments auto-showing in description.
+Multidescer¶
+Griatch 2016
+Advanced descriptions combined from many separate description components, inspired by MUSH.
++
Rooms, movement and grid¶
+Contribs modifying locations, movement or helping to creating rooms.
+Extended Room¶
+Griatch 2012
+An expanded Room typeclass with multiple descriptions for time and season as well as details.
+Map Builder¶
+CloudKeeper 2016
+Build a game area based on a 2D “graphical” unicode map. Supports asymmetric exits.
+ +Slow exit¶
+Griatch 2014
+Custom Exit class that takes different time to pass depending on if you are walking/running etc.
+Wilderness¶
+titeuf87 2017
+Make infinitely large wilderness areas with dynamically created locations.
+ ++
Roleplaying and rules¶
+Contribs supporting roleplay and in-game roleplaying actions.
+Barter system¶
+Griatch 2012
+A safe and effective barter-system for any game. Allows safe trading of any goods (including coin).
+Crafting¶
+Crafting¶
+Griatch 2020
A full, extendable crafting system.
- @@ -58,39 +130,190 @@ longer-form documentation associated with particular contribs.
RP System¶
+Griatch 2015
+Full director-style emoting system replacing names with sdescs/recogs. Supports wearing masks.
+RP Language¶
+Griatch 2015
+Dynamic obfuscation of emotes when speaking unfamiliar languages. Also obfuscates whispers.
+Turnbattle¶
+FlutterSprite 2017
+A turn-based combat engine meant as a start to build from. Has attack/disengage and turn timeouts, +and includes optional expansions for equipment and combat movement, magic and ranged combat.
++
Building and server systems¶
+Building menu¶
+vincent-lg 2018
+An @edit command for modifying objects using a generated menu. Customizable for different games.
Field Fill¶
+FlutterSprite 2018
+A simple system for creating an EvMenu that presents a player with a highly customizable fillable form
+In-Game-Python¶
+In-Game-Python¶
+Vincent Le Geoff 2017
Allow Builders to add Python-scripted events to their objects (OBS-not for untrusted users!)
Maps¶
-Solutions for generating and displaying maps in-game.
- -The tutorial-world¶
-The Evennia single-player sole quest. Made to be analyzed to learn.
- -Menu-builder¶
+Menu-builder¶
A tool for building using an in-game menu instead of the normal build commands. Meant to be expanded for the needs of your game.
+Tree Select¶
+FlutterSprite 2017
+A simple system for creating a branching EvMenu with selection options sourced from a single +multi-line string.
++
Snippets and config¶
+Contribs meant to be used as part of other code, or as replacements for default settings.
+ +Custom gametime¶
+Griatch, vlgeoff 2017
+Implements Evennia’s gametime module but for custom game world-specific calendars.
+Logins¶
+Email login¶
+Griatch 2012
+A variant of the standard login system that requires an email to login rather then just name+password.
+Menu login¶
+Griatch 2011, 2019, Vincent-lg 2016
+A login system using menus asking for name/password rather than giving them as one command.
+Random String Generator¶
+Vincent Le Goff 2017
+Simple pseudo-random generator of strings with rules, avoiding repetitions.
++
Examples¶
+Contribs not meant to be used as-is, but just as examples to learn from.
+GenderSub¶
+Griatch 2015
+Simple example (only) of storing gender on a character and access it in an emote with a custom marker.
+The tutorial-world¶
+Griatch 2011, 2015
+The Evennia single-player sole quest. Made to be analyzed to learn.
+ ++
Full game systems¶
+Full game-dir replacement systems.
+Ainneve¶
+Evennia community 2015-?
+This is a community attempt to make an Evennia ‘example game’ using good practices. It is also a good +place to jump in if you want to help in another project rather than run it alone. Development of this +has stalled a bit so we are looking for enthusiastic people to lead the charge.
+-
+
- +
Original discussion thread (external link)
+
Arxcode¶
+Tehom 2019
+Open source code release of the popular Evennia-based Arx, after the reckoning. +This is a fantasy game with a focus on roleplay and code-supported political intrigue. This code-release +is maintained by Tehom in its own repository so bug reports should be directed there.
+-
+
- +
- +
Arxcode installation help - this may not always be fully up-to-date with +latest Evennia. Report your findings!
+
Evscaperoom¶
+Griatch 2019
+A full engine for making multiplayer ‘escape-rooms’ completely in code. +This is based on the 2019 MUD Game jam winner Evscaperoom.
+-
+
contrib/evscaperoom - game engine to make your own escape rooms.
+https://demo.evennia.com - a full installation of the original game can +be played by entering the evscaperoom exit in the first Limbo room.
+https://github.com/Griatch/evscaperoom - the original game’s source code (warning for spoilers if you +want to solve the puzzles and mystery yourself).
+
Table of Contents
-
-
- Contributions
-
+
- Contrib modules
- Evennia 1.0-dev » -
- Contributions +
- Contrib modules
Navigation
@@ -32,10 +32,10 @@ next |Contributions
+ title="previous chapter">Contrib modules
Next topic
evennia.contrib.crafting.crafting
@@ -351,10 +351,10 @@ from this rather than the more opinionated next |
- previous |
Evennia 1.0-dev »
- Contributions »
+ Contrib modules »
Crafting system contrib
develop branch
diff --git a/docs/1.0-dev/Contribs/Dialogues-in-events.html b/docs/1.0-dev/Contribs/Dialogues-in-events.html
index 72acb86bce..a98d727caa 100644
--- a/docs/1.0-dev/Contribs/Dialogues-in-events.html
+++ b/docs/1.0-dev/Contribs/Dialogues-in-events.html
@@ -35,7 +35,7 @@
previous |
Evennia 1.0-dev »
- Contributions »
+ Contrib modules »
Dialogues in events
develop branch
@@ -359,7 +359,7 @@ events).
previous |
Evennia 1.0-dev »
- Contributions »
+ Contrib modules »
Dialogues in events
develop branch
diff --git a/docs/1.0-dev/Contribs/Dynamic-In-Game-Map.html b/docs/1.0-dev/Contribs/Dynamic-In-Game-Map.html
index a3660170d8..a088e7a294 100644
--- a/docs/1.0-dev/Contribs/Dynamic-In-Game-Map.html
+++ b/docs/1.0-dev/Contribs/Dynamic-In-Game-Map.html
@@ -35,7 +35,7 @@
previous |
Evennia 1.0-dev »
- Contributions »
+ Contrib modules »
Dynamic In Game Map
develop branch
@@ -833,7 +833,7 @@ also look into up/down directions and figure out how to display that in a good w
previous |
Evennia 1.0-dev »
- Contributions »
+ Contrib modules »
Dynamic In Game Map
develop branch
diff --git a/docs/1.0-dev/Contribs/Static-In-Game-Map.html b/docs/1.0-dev/Contribs/Static-In-Game-Map.html
index 32056d30cd..3e4973ffed 100644
--- a/docs/1.0-dev/Contribs/Static-In-Game-Map.html
+++ b/docs/1.0-dev/Contribs/Static-In-Game-Map.html
@@ -35,7 +35,7 @@
previous |
Evennia 1.0-dev »
- Contributions »
+ Contrib modules »
Static In Game Map
develop branch
@@ -716,7 +716,7 @@ Tutorial), previous |
Evennia 1.0-dev »
- Contributions »
+ Contrib modules »
Static In Game Map
develop branch
diff --git a/docs/1.0-dev/Evennia-Introduction.html b/docs/1.0-dev/Evennia-Introduction.html
index ba0a535872..78f345089b 100644
--- a/docs/1.0-dev/Evennia-Introduction.html
+++ b/docs/1.0-dev/Evennia-Introduction.html
@@ -60,95 +60,38 @@ massively-multiplayer game (contribs you can use for your game
+would you want something to build from.
Using the full power of Python throughout the server offers some distinct advantages. All your
coding, from object definitions and custom commands to AI scripts and economic systems is done in
normal Python modules rather than some ad-hoc scripting language. The fact that you script the game
in the same high-level language that you code it in allows for very powerful and custom game
implementations indeed.
-The server ships with a default set of player commands that are similar to the MUX command set. We
-do not aim specifically to be a MUX server, but we had to pick some default to go with (see
-this for more about our original motivations). It’s easy to remove or add commands, or
-to have the command syntax mimic other systems, like Diku, LP, MOO and so on. Or why not create a
-new and better command system of your own design.
+Out of the box, Evennia gives you a ‘talker’-type of game; you can walk around, chat, build rooms and objects,
+do basic roleplaying and administration. The server ships with a default set of player commands that are
+similar to the MUX command set. We do not aim specifically to be a MUX server, but we had to pick some
+default to go with (see this for more about our original motivations). It’s easy to
+remove or add commands, or to have the command syntax mimic other systems, like Diku, LP, MOO and so on.
+Or why not create a new and better command system of your own design.
Can I test it somewhere?¶
-Evennia’s demo server can be found at demo.evennia.com. If you prefer to
-connect to the demo via your own telnet client you can do so at silvren.com, port 4280.
+Evennia’s demo server can be found at https://demo.evennia.com. If you prefer to
+connect to the demo via your telnet client you can do so at demo.evennia.com, port 4000.
Once you installed Evennia yourself it comes with its own tutorial - this shows off some of the
possibilities and gives you a small single-player quest to play. The tutorial takes only one
single in-game command to install as explained here.
-
-Brief summary of features¶
-
-Technical¶
-
-Game development is done by the server importing your normal Python modules. Specific server
-features are implemented by overloading hooks that the engine calls appropriately.
-All game entities are simply Python classes that handle database negotiations behind the scenes
-without you needing to worry.
-Command sets are stored on individual objects (including characters) to offer unique functionality
-and object-specific commands. Sets can be updated and modified on the fly to expand/limit player
-input options during play.
-Scripts are used to offer asynchronous/timed execution abilities. Scripts can also be persistent.
-There are easy mechanisms to thread particularly long-running processes and built-in ways to start
-“tickers” for games that wants them.
-In-game communication channels are modular and can be modified to any functionality, including
-mailing systems and full logging of all messages.
-Server can be fully rebooted/reloaded without users disconnecting.
-An Account can freely connect/disconnect from game-objects, offering an easy way to implement
-multi-character systems and puppeting.
-Each Account can optionally control multiple Characters/Objects at the same time using the same
-login information.
-Spawning of individual objects via a prototypes-like system.
-Tagging can be used to implement zones and object groupings.
-All source code is extensively documented.
-Unit-testing suite, including tests of default commands and plugins.
-
-
-
-Default content¶
-
-Basic classes for Objects, Characters, Rooms and Exits
-Basic login system, using the Account’s login name as their in-game Character’s name for
-simplicity
-“MUX-like” command set with administration, building, puppeting, channels and social commands
-In-game Tutorial
-Contributions folder with working, but optional, code such as alternative login, menus, character
-generation and more
-
-
-
-Standards/Protocols supported¶
-
-TCP/websocket HTML5 browser web client, with ajax/comet fallback for older browsers
-Telnet and Telnet + SSL with mud-specific extensions (MCCP,
-MSSP, TTYPE,
-MSDP,
-GMCP,
-MXP links)
-ANSI and xterm256 colours
-SSH
-HTTP - Website served by in-built webserver and connected to same database as game.
-IRC - external IRC channels can be connected to in-game chat channels
-RSS feeds can be echoed to in-game channels (things like Twitter can easily be added)
-Several different databases supported (SQLite3, MySQL, PostgreSQL, …)
-
-For more extensive feature information, see the Evennia Component overview.
-
-
What you need to know to work with Evennia¶
Assuming you have Evennia working (see the quick start instructions) and have
@@ -165,12 +108,13 @@ very basic game indeed if you are not willing to do at least some codin
I know basic Python, or I am willing to learn¶
Evennia’s source code is extensively documented and is viewable
-online. We also have a comprehensive online
+online. We also have a comprehensive online
manual with lots of examples. But while Python is
considered a very easy programming language to get into, you do have a learning curve to climb if
-you are new to programming. You should probably sit down
-with a Python beginner’s tutorial (there are plenty of them on
-the web if you look around) so you at least know what you are seeing. See also our link
+you are new to programming. Evennia’s Starting-tutorial has a basic introduction
+to Python but you should probably also sit down
+with a full Python beginner’s tutorial at some point (there are plenty of them on
+the web if you look around). See also our link
page for some reading suggestions. To efficiently code your dream game in
Evennia you don’t need to be a Python guru, but you do need to be able to read example code
containing at least these basic Python features:
@@ -207,8 +151,7 @@ presence (a website and a mud web client) to play around with …
Where to from here?¶
From here you can continue browsing the [online documentation](online documentation) to
find more info about Evennia. Or you can jump into the Tutorials and get your hands
-dirty with code right away. You can also read the developer’s dev
-blog for many tidbits and snippets about Evennia’s development and
+dirty with code right away. You can also read the lead developer’s dev blog for many tidbits and snippets about Evennia’s development and
structure.
Some more hints:
@@ -254,12 +197,6 @@ your own game, you will end up with a small (very small) game that you can build
- Evennia Introduction
- Can I test it somewhere?
-- Brief summary of features
-
- What you need to know to work with Evennia
- I don’t know (or don’t want to do) any programming - I just want to run a game!
- I know basic Python, or I am willing to learn
diff --git a/docs/1.0-dev/_sources/Contribs/Contrib-Overview.md.txt b/docs/1.0-dev/_sources/Contribs/Contrib-Overview.md.txt
index d8bde10abb..77a78fcf29 100644
--- a/docs/1.0-dev/_sources/Contribs/Contrib-Overview.md.txt
+++ b/docs/1.0-dev/_sources/Contribs/Contrib-Overview.md.txt
@@ -1,42 +1,303 @@
-# Contributions
+# Contrib modules
-The [evennia/contrib/](api:evennia.contrib) folder holds Game-specific tools, systems and utilities created by the community. This gathers
-longer-form documentation associated with particular contribs.
+Contribs are found in [evennia/contrib/](api:evennia.contrib) and are optional game-specific code-snippets
+or even full systems you can use for your game. They are contributed by the Evennia community and
+released under the same license as Evennia itself. Each contrib has its own installation instructions.
+Bugs are reported to the Evennia [issue tracker](github:issue) as usual.
+
+## Character-related
+
+Contribs related to characters and character displays.
+
+### CharGen
+
+*Griatch 2011*
+
+A simple Character creator for OOC mode. Meant as a starting point for a more fleshed-out system.
+
+### Clothing
+
+*FlutterSprite 2017*
+
+A layered clothing system with slots for different types of garments auto-showing in description.
+
+### Health Bar
+
+*Tim Ashley Jenkins 2017*
+
+Tool to create colorful bars/meters.
+
+### Multidescer
+
+*Griatch 2016*
+
+Advanced descriptions combined from many separate description components, inspired by MUSH.
+
+---
+
+## Rooms, movement and grid
+
+Contribs modifying locations, movement or helping to creating rooms.
+
+### Extended Room
+
+*Griatch 2012*
+
+An expanded Room typeclass with multiple descriptions for time and season as well as details.
+
+### Map Builder
+
+*CloudKeeper 2016*
+
+Build a game area based on a 2D "graphical" unicode map. Supports asymmetric exits.
+
+- [Static in-game map](./Static-In-Game-Map)
+
+### Simple Door
+
+*Griatch 2014*
+
+Example of an exit that can be opened and closed from both sides.
+
+### Slow exit
+
+*Griatch 2014*
+
+Custom Exit class that takes different time to pass depending on if you are walking/running etc.
+
+### Wilderness
+
+*titeuf87 2017*
+
+Make infinitely large wilderness areas with dynamically created locations.
+
+- [Dynamic in-game map](./Dynamic-In-Game-Map)
+
+----
+
+## Roleplaying and rules
+
+Contribs supporting roleplay and in-game roleplaying actions.
+
+### Barter system
+
+*Griatch 2012*
+
+A safe and effective barter-system for any game. Allows safe trading of any goods (including coin).
+
+### Crafting
+
+*Griatch 2020*
-## Crafting
A full, extendable crafting system.
- [Crafting overview](./Crafting)
- [Crafting API documentation](api:evennia.contrib.crafting.crafting)
- [Example of a sword crafting tree](api:evennia.contrib.crafting.example_recipes)
-## In-Game-Python
+### Dice
+
+*Griatch 2012*
+
+A fully featured dice rolling system.
+
+### Mail
+
+*grungies1138 2016*
+
+An in-game mail system for communication.
+
+### Puzzles
+
+*Hendher 2019*
+
+Combine objects to create new items, adventure-game style
+
+### RP System
+
+*Griatch 2015*
+
+Full director-style emoting system replacing names with sdescs/recogs. Supports wearing masks.
+
+### RP Language
+
+*Griatch 2015*
+
+Dynamic obfuscation of emotes when speaking unfamiliar languages. Also obfuscates whispers.
+
+### Turnbattle
+
+*FlutterSprite 2017*
+
+A turn-based combat engine meant as a start to build from. Has attack/disengage and turn timeouts,
+and includes optional expansions for equipment and combat movement, magic and ranged combat.
+
+----
+
+## Building and server systems
+
+### Building menu
+
+*vincent-lg 2018*
+
+An `@edit` command for modifying objects using a generated menu. Customizable for different games.
+
+### Field Fill
+
+*FlutterSprite 2018*
+
+A simple system for creating an EvMenu that presents a player with a highly customizable fillable form
+
+### In-Game-Python
+
+*Vincent Le Geoff 2017*
Allow Builders to add Python-scripted events to their objects (OBS-not for untrusted users!)
- [A voice-operated elevator using events](./A-voice-operated-elevator-using-events)
- [Dialogues using events](./Dialogues-in-events)
-## Maps
-
-Solutions for generating and displaying maps in-game.
-
-- [Dynamic in-game map](./Dynamic-In-Game-Map)
-- [Static in-game map](./Static-In-Game-Map)
-
-## The tutorial-world
-
-The Evennia single-player sole quest. Made to be analyzed to learn.
-
-- [The tutorial world introduction](../Howto/Starting/Part1/Tutorial-World-Introduction)
-
-## Menu-builder
+### Menu-builder
A tool for building using an in-game menu instead of the normal build commands. Meant to
be expanded for the needs of your game.
- [Building Menus](./Building-menus)
+### Security/Auditing
+
+*Johhny 2018*
+
+Log server input/output for debug/security.
+
+### Tree Select
+
+*FlutterSprite 2017*
+
+A simple system for creating a branching EvMenu with selection options sourced from a single
+multi-line string.
+
+---
+
+## Snippets and config
+
+Contribs meant to be used as part of other code, or as replacements for default settings.
+
+### Color-markups
+
+*Griatch, 2017*
+
+Alternative in-game color markups.
+
+### Custom gametime
+
+*Griatch, vlgeoff 2017*
+
+Implements Evennia's gametime module but for custom game world-specific calendars.
+
+### Logins
+
+#### Email login
+
+*Griatch 2012*
+
+A variant of the standard login system that requires an email to login rather then just name+password.
+
+#### Menu login
+
+*Griatch 2011, 2019, Vincent-lg 2016*
+
+A login system using menus asking for name/password rather than giving them as one command.
+
+### Random String Generator
+
+*Vincent Le Goff 2017*
+
+Simple pseudo-random generator of strings with rules, avoiding repetitions.
+
+### UnixCommand
+
+*Vincent Le Geoff 2017*
+
+Add commands with UNIX-style syntax.
+
+----
+
+## Examples
+
+Contribs not meant to be used as-is, but just as examples to learn from.
+
+### GenderSub
+
+*Griatch 2015*
+
+Simple example (only) of storing gender on a character and access it in an emote with a custom marker.
+
+### Talking NPC
+
+*Griatch 2011*
+
+A talking NPC object that offers a menu-driven conversation tree.
+
+### Tutorial examples
+
+*Griatch 2011, 2015*
+
+A folder of basic example objects, commands and scripts.
+
+### The tutorial-world
+
+*Griatch 2011, 2015*
+
+The Evennia single-player sole quest. Made to be analyzed to learn.
+
+- [The tutorial world introduction](../Howto/Starting/Part1/Tutorial-World-Introduction)
+
+----
+
+## Full game systems
+
+Full game-dir replacement systems.
+
+### Ainneve
+
+*Evennia community 2015-?*
+
+This is a community attempt to make an Evennia 'example game' using good practices. It is also a good
+place to jump in if you want to help in another project rather than run it alone. Development of this
+has stalled a bit so we are looking for enthusiastic people to lead the charge.
+
+- [evennia/ainneve repository](https://github.com/evennia/ainneve)
+- [Original discussion thread](https://groups.google.com/g/evennia/c/48PMDirb7go/m/Z9EAuvXZn7UJ) (external link)
+
+### Arxcode
+
+*Tehom 2019*
+
+Open source code release of the popular Evennia-based [Arx, after the reckoning](https://play.arxgame.org/).
+This is a fantasy game with a focus on roleplay and code-supported political intrigue. This code-release
+is maintained by Tehom in its own repository so bug reports should be directed there.
+
+- [Arxcode repository on github](https://github.com/Arx-Game/arxcode)
+- [Arxcode issue tracker](https://github.com/Arx-Game/arxcode/issues)
+- [Arxcode installation help](./Arxcode-installing-help) - this may not always be fully up-to-date with
+ latest Evennia. Report your findings!
+
+### Evscaperoom
+
+*Griatch 2019*
+
+A full engine for making multiplayer 'escape-rooms' completely in code.
+This is based on the 2019 MUD Game jam winner *Evscaperoom*.
+
+- [contrib/evscaperoom](api:evennia.contrib.evscaperoom) - game engine to make your own escape rooms.
+- [https://demo.evennia.com](https://demo.evennia.com) - a full installation of the original game can
+ be played by entering the *evscaperoom* exit in the first Limbo room.
+- https://github.com/Griatch/evscaperoom - the original game's source code (warning for spoilers if you
+ want to solve the puzzles and mystery yourself).
+
+
+
```toctree::
:hidden:
@@ -51,4 +312,4 @@ be expanded for the needs of your game.
../Howto/Starting/Part1/Tutorial-World-Introduction
./Building-menus
-```
\ No newline at end of file
+```
diff --git a/docs/1.0-dev/_sources/Evennia-Introduction.md.txt b/docs/1.0-dev/_sources/Evennia-Introduction.md.txt
index befa4eac80..4fa45a7e3a 100644
--- a/docs/1.0-dev/_sources/Evennia-Introduction.md.txt
+++ b/docs/1.0-dev/_sources/Evennia-Introduction.md.txt
@@ -13,13 +13,12 @@ might just be starting to think about it, or you might have lugged around that *
your mind for years ... you know *just* how good it would be, if you could only make it come to
reality. We know how you feel. That is, after all, why Evennia came to be.
-Evennia is in principle a MUD-building system: a bare-bones Python codebase and server intended to
+Evennia is a MU\*-building system: a bare-bones Python codebase and server intended to
be highly extendable for any style of game. "Bare-bones" in this context means that we try to impose
-as few game-specific things on you as possible. So whereas we for convenience offer basic building
+as few game-specific things on you as possible. For convenience offer basic building
blocks like objects, characters, rooms, default commands for building and administration etc, we
don't prescribe any combat rules, mob AI, races, skills, character classes or other things that will
-be different from game to game anyway. It is possible that we will offer some such systems as
-contributions in the future, but these will in that case all be optional.
+be different from game to game anyway.
What we *do* however, is to provide a solid foundation for all the boring database, networking, and
behind-the-scenes administration stuff that all online games need whether they like it or not.
@@ -27,80 +26,31 @@ Evennia is *fully persistent*, that means things you drop on the ground somewher
there a dozen server reboots later. Through Django we support a large variety of different database
systems (a database is created for you automatically if you use the defaults).
+We also include a growing list of *optional* [contribs](Contribs/Contrib-Overview) you can use for your game
+would you want something to build from.
+
Using the full power of Python throughout the server offers some distinct advantages. All your
coding, from object definitions and custom commands to AI scripts and economic systems is done in
normal Python modules rather than some ad-hoc scripting language. The fact that you script the game
in the same high-level language that you code it in allows for very powerful and custom game
implementations indeed.
-The server ships with a default set of player commands that are similar to the MUX command set. We
-*do not* aim specifically to be a MUX server, but we had to pick some default to go with (see
-[this](Concepts/Soft-Code) for more about our original motivations). It's easy to remove or add commands, or
-to have the command syntax mimic other systems, like Diku, LP, MOO and so on. Or why not create a
-new and better command system of your own design.
+Out of the box, Evennia gives you a 'talker'-type of game; you can walk around, chat, build rooms and objects,
+do basic roleplaying and administration. The server ships with a default set of player commands that are
+similar to the MUX command set. We *do not* aim specifically to be a MUX server, but we had to pick some
+default to go with (see [this](Concepts/Soft-Code) for more about our original motivations). It's easy to
+remove or add commands, or to have the command syntax mimic other systems, like Diku, LP, MOO and so on.
+Or why not create a new and better command system of your own design.
## Can I test it somewhere?
-Evennia's demo server can be found at [demo.evennia.com](http://demo.evennia.com). If you prefer to
-connect to the demo via your own telnet client you can do so at `silvren.com`, port `4280`.
+Evennia's demo server can be found at [https://demo.evennia.com](https://demo.evennia.com). If you prefer to
+connect to the demo via your telnet client you can do so at `demo.evennia.com`, port `4000`.
Once you installed Evennia yourself it comes with its own tutorial - this shows off some of the
possibilities _and_ gives you a small single-player quest to play. The tutorial takes only one
single in-game command to install as explained [here](Howto/Starting/Part1/Tutorial-World-Introduction).
-## Brief summary of features
-
-### Technical
-
-- Game development is done by the server importing your normal Python modules. Specific server
-features are implemented by overloading hooks that the engine calls appropriately.
-- All game entities are simply Python classes that handle database negotiations behind the scenes
-without you needing to worry.
-- Command sets are stored on individual objects (including characters) to offer unique functionality
-and object-specific commands. Sets can be updated and modified on the fly to expand/limit player
-input options during play.
-- Scripts are used to offer asynchronous/timed execution abilities. Scripts can also be persistent.
-There are easy mechanisms to thread particularly long-running processes and built-in ways to start
-"tickers" for games that wants them.
-- In-game communication channels are modular and can be modified to any functionality, including
-mailing systems and full logging of all messages.
-- Server can be fully rebooted/reloaded without users disconnecting.
-- An Account can freely connect/disconnect from game-objects, offering an easy way to implement
-multi-character systems and puppeting.
-- Each Account can optionally control multiple Characters/Objects at the same time using the same
-login information.
-- Spawning of individual objects via a prototypes-like system.
-- Tagging can be used to implement zones and object groupings.
-- All source code is extensively documented.
-- Unit-testing suite, including tests of default commands and plugins.
-
-### Default content
-
-- Basic classes for Objects, Characters, Rooms and Exits
-- Basic login system, using the Account's login name as their in-game Character's name for
-simplicity
-- "MUX-like" command set with administration, building, puppeting, channels and social commands
-- In-game Tutorial
-- Contributions folder with working, but optional, code such as alternative login, menus, character
-generation and more
-
-### Standards/Protocols supported
-
-- TCP/websocket HTML5 browser web client, with ajax/comet fallback for older browsers
-- Telnet and Telnet + SSL with mud-specific extensions ([MCCP](http://tintin.sourceforge.net/mccp/),
-[MSSP](http://tintin.sourceforge.net/mssp/), [TTYPE](http://tintin.sourceforge.net/mtts/),
-[MSDP](http://tintin.sourceforge.net/msdp/),
-[GMCP](https://www.ironrealms.com/rapture/manual/files/FeatGMCP-txt.html),
-[MXP](https://www.zuggsoft.com/zmud/mxp.htm) links)
-- ANSI and xterm256 colours
-- SSH
-- HTTP - Website served by in-built webserver and connected to same database as game.
-- IRC - external IRC channels can be connected to in-game chat channels
-- RSS feeds can be echoed to in-game channels (things like Twitter can easily be added)
-- Several different databases supported (SQLite3, MySQL, PostgreSQL, ...)
-
-For more extensive feature information, see the [Evennia Component overview](Components/Components-Overview).
-
## What you need to know to work with Evennia
Assuming you have Evennia working (see the [quick start instructions](Setup/Setup-Quickstart)) and have
@@ -119,11 +69,12 @@ very basic game indeed if you are not willing to do at least *some* coding.
Evennia's source code is extensively documented and is [viewable
online](https://github.com/evennia/evennia). We also have a comprehensive [online
-manual](https://github.com/evennia/evennia/wiki) with lots of examples. But while Python is
+manual](https://evennia.com/docs) with lots of examples. But while Python is
considered a very easy programming language to get into, you do have a learning curve to climb if
-you are new to programming. You should probably sit down
-with a Python beginner's [tutorial](http://docs.python.org/tutorial/) (there are plenty of them on
-the web if you look around) so you at least know what you are seeing. See also our [link
+you are new to programming. Evennia's [Starting-tutorial](Howto/Starting/Part1/Starting-Part1) has a [basic introduction
+to Python](Howto/Starting/Part1/Python-basic-introduction) but you should probably also sit down
+with a full Python beginner's tutorial at some point (there are plenty of them on
+the web if you look around). See also our [link
page](Links#wiki-litterature) for some reading suggestions. To efficiently code your dream game in
Evennia you don't need to be a Python guru, but you do need to be able to read example code
containing at least these basic Python features:
@@ -161,8 +112,7 @@ presence (a website and a mud web client) to play around with ...
From here you can continue browsing the [online documentation]([online documentation](index:Evennia-documentation)) to
find more info about Evennia. Or you can jump into the [Tutorials](Howto/Howto-Overview) and get your hands
-dirty with code right away. You can also read the developer's [dev
-blog](https://evennia.blogspot.com/) for many tidbits and snippets about Evennia's development and
+dirty with code right away. You can also read the lead developer's [dev blog](https://evennia.blogspot.com/) for many tidbits and snippets about Evennia's development and
structure.
Some more hints:
diff --git a/docs/1.0-dev/api/evennia.commands.default.account.html b/docs/1.0-dev/api/evennia.commands.default.account.html
index 2f2a4b0884..e76e44aa65 100644
--- a/docs/1.0-dev/api/evennia.commands.default.account.html
+++ b/docs/1.0-dev/api/evennia.commands.default.account.html
@@ -70,7 +70,7 @@ method. Otherwise all text will be returned to all connected sessions.
@@ -101,7 +101,7 @@ method. Otherwise all text will be returned to all connected sessions.
-
-
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}¶
+search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.commands.default.batchprocess.html b/docs/1.0-dev/api/evennia.commands.default.batchprocess.html
index 7896b15640..6f296f3c25 100644
--- a/docs/1.0-dev/api/evennia.commands.default.batchprocess.html
+++ b/docs/1.0-dev/api/evennia.commands.default.batchprocess.html
@@ -75,7 +75,7 @@ skipping, reloading etc.
@@ -106,7 +106,7 @@ skipping, reloading etc.
-
-
search_index_entry = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}¶
+search_index_entry = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}¶
diff --git a/docs/1.0-dev/api/evennia.commands.default.building.html b/docs/1.0-dev/api/evennia.commands.default.building.html
index e7b5cbab90..0cb14f5744 100644
--- a/docs/1.0-dev/api/evennia.commands.default.building.html
+++ b/docs/1.0-dev/api/evennia.commands.default.building.html
@@ -529,7 +529,7 @@ You can specify the /force switch to bypass this confirmation.
@@ -570,7 +570,7 @@ You can specify the /force switch to bypass this confirmation.
-
-
search_index_entry = {'aliases': 'delete del', 'category': 'building', 'key': 'destroy', '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', '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 '}¶
@@ -1268,7 +1268,7 @@ server settings.
@@ -1299,7 +1299,7 @@ server settings.
-
-
search_index_entry = {'aliases': 'parent type update swap', 'category': 'building', 'key': 'typeclass', '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 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.\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 swap parent type', 'category': 'building', 'key': 'typeclass', '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 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.\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 "}¶
@@ -1452,7 +1452,7 @@ If object is not specified, the current location is examined.
@@ -1549,7 +1549,7 @@ non-persistent data stored on object
-
-
search_index_entry = {'aliases': 'exam ex', 'category': 'building', 'key': 'examine', '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\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': 'ex exam', 'category': 'building', 'key': 'examine', '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\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/1.0-dev/api/evennia.commands.default.comms.html b/docs/1.0-dev/api/evennia.commands.default.comms.html
index 1cd37cc11c..c8a3f939f5 100644
--- a/docs/1.0-dev/api/evennia.commands.default.comms.html
+++ b/docs/1.0-dev/api/evennia.commands.default.comms.html
@@ -234,7 +234,7 @@ Use addcom/delcom to join and leave channels
-
-
aliases = ['all channels', 'clist', 'comlist', 'chanlist', 'channellist']¶
+aliases = ['channellist', 'all channels', 'comlist', 'clist', 'chanlist']¶
@@ -265,7 +265,7 @@ Use addcom/delcom to join and leave channels
-
-
search_index_entry = {'aliases': 'all channels clist comlist chanlist channellist', 'category': 'comms', 'key': 'channels', 'tags': '', 'text': "\n list all channels available to you\n\n Usage:\n channels\n clist\n comlist\n\n Lists all channels available to you, whether you listen to them or not.\n Use 'comlist' to only view your current channel subscriptions.\n Use addcom/delcom to join and leave channels\n "}¶
+search_index_entry = {'aliases': 'channellist all channels comlist clist chanlist', 'category': 'comms', 'key': 'channels', 'tags': '', 'text': "\n list all channels available to you\n\n Usage:\n channels\n clist\n comlist\n\n Lists all channels available to you, whether you listen to them or not.\n Use 'comlist' to only view your current channel subscriptions.\n Use addcom/delcom to join and leave channels\n "}¶
diff --git a/docs/1.0-dev/api/evennia.commands.default.general.html b/docs/1.0-dev/api/evennia.commands.default.general.html
index 1c984433be..2ef098ae9f 100644
--- a/docs/1.0-dev/api/evennia.commands.default.general.html
+++ b/docs/1.0-dev/api/evennia.commands.default.general.html
@@ -112,7 +112,7 @@ look *<account&g
@@ -143,7 +143,7 @@ look *<account&g
-
-
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶
+search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶
@@ -205,7 +205,7 @@ for everyone to use, you need build privileges and the alias command.
@@ -237,7 +237,7 @@ for everyone to use, you need build privileges and the alias command.
-
-
search_index_entry = {'aliases': 'nicks nickname', 'category': 'general', 'key': 'nick', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}¶
+search_index_entry = {'aliases': 'nickname nicks', 'category': 'general', 'key': 'nick', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}¶
@@ -535,7 +535,7 @@ placing it in their inventory.
@@ -561,7 +561,7 @@ placing it in their inventory.
-
-
search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', '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', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
@@ -641,7 +641,7 @@ automatically begin with your name.
@@ -677,7 +677,7 @@ space.
-
-
search_index_entry = {'aliases': ': emote', 'category': 'general', 'key': 'pose', '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', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}¶
diff --git a/docs/1.0-dev/api/evennia.commands.default.system.html b/docs/1.0-dev/api/evennia.commands.default.system.html
index 246f3a5ef3..be514b8edb 100644
--- a/docs/1.0-dev/api/evennia.commands.default.system.html
+++ b/docs/1.0-dev/api/evennia.commands.default.system.html
@@ -374,7 +374,7 @@ given, <nr> defaults to 10.
-
-
aliases = ['listobjs', 'listobjects', 'db', 'stats']¶
+aliases = ['stats', 'listobjects', 'listobjs', 'db']¶
@@ -400,7 +400,7 @@ given, <nr> defaults to 10.
-
-
search_index_entry = {'aliases': 'listobjs listobjects db stats', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [<nr>]\n\n Gives statictics on objects in database as well as\n a list of <nr> latest objects in database. If not\n given, <nr> defaults to 10.\n '}¶
+search_index_entry = {'aliases': 'stats listobjects listobjs db', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [<nr>]\n\n Gives statictics on objects in database as well as\n a list of <nr> latest objects in database. If not\n given, <nr> defaults to 10.\n '}¶
@@ -601,7 +601,7 @@ the released memory will instead be re-used by the program.
@@ -632,7 +632,7 @@ the released memory will instead be re-used by the program.
-
-
search_index_entry = {'aliases': 'serverload serverprocess', 'category': 'system', 'key': 'server', 'tags': '', 'text': "\n show server load and memory statistics\n\n Usage:\n server[/mem]\n\n Switches:\n mem - return only a string of the current memory usage\n flushmem - flush the idmapper cache\n\n This command shows server load statistics and dynamic memory\n usage. It also allows to flush the cache of accessed database\n objects.\n\n Some Important statistics in the table:\n\n |wServer load|n is an average of processor usage. It's usually\n between 0 (no usage) and 1 (100% usage), but may also be\n temporarily higher if your computer has multiple CPU cores.\n\n The |wResident/Virtual memory|n displays the total memory used by\n the server process.\n\n Evennia |wcaches|n all retrieved database entities when they are\n loaded by use of the idmapper functionality. This allows Evennia\n to maintain the same instances of an entity and allowing\n non-persistent storage schemes. The total amount of cached objects\n are displayed plus a breakdown of database object types.\n\n The |wflushmem|n switch allows to flush the object cache. Please\n note that due to how Python's memory management works, releasing\n caches may not show you a lower Residual/Virtual memory footprint,\n the released memory will instead be re-used by the program.\n\n "}¶
+search_index_entry = {'aliases': 'serverprocess serverload', 'category': 'system', 'key': 'server', 'tags': '', 'text': "\n show server load and memory statistics\n\n Usage:\n server[/mem]\n\n Switches:\n mem - return only a string of the current memory usage\n flushmem - flush the idmapper cache\n\n This command shows server load statistics and dynamic memory\n usage. It also allows to flush the cache of accessed database\n objects.\n\n Some Important statistics in the table:\n\n |wServer load|n is an average of processor usage. It's usually\n between 0 (no usage) and 1 (100% usage), but may also be\n temporarily higher if your computer has multiple CPU cores.\n\n The |wResident/Virtual memory|n displays the total memory used by\n the server process.\n\n Evennia |wcaches|n all retrieved database entities when they are\n loaded by use of the idmapper functionality. This allows Evennia\n to maintain the same instances of an entity and allowing\n non-persistent storage schemes. The total amount of cached objects\n are displayed plus a breakdown of database object types.\n\n The |wflushmem|n switch allows to flush the object cache. Please\n note that due to how Python's memory management works, releasing\n caches may not show you a lower Residual/Virtual memory footprint,\n the released memory will instead be re-used by the program.\n\n "}¶
diff --git a/docs/1.0-dev/api/evennia.commands.default.unloggedin.html b/docs/1.0-dev/api/evennia.commands.default.unloggedin.html
index f811e6d55d..6197be8ce9 100644
--- a/docs/1.0-dev/api/evennia.commands.default.unloggedin.html
+++ b/docs/1.0-dev/api/evennia.commands.default.unloggedin.html
@@ -59,7 +59,7 @@ connect “account name” “pass word”
@@ -94,7 +94,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
+search_index_entry = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', '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 '}¶
@@ -223,7 +223,7 @@ All it does is display the connect screen.
@@ -249,7 +249,7 @@ All it does is display the connect screen.
-
-
search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶
+search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶
@@ -272,7 +272,7 @@ for simplicity. It shows a pane of info.
@@ -298,7 +298,7 @@ for simplicity. It shows a pane of info.
-
-
search_index_entry = {'aliases': 'h ?', 'category': 'general', 'key': 'help', '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', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.barter.html b/docs/1.0-dev/api/evennia.contrib.barter.html
index 64a9b8b42b..2393eb29a3 100644
--- a/docs/1.0-dev/api/evennia.contrib.barter.html
+++ b/docs/1.0-dev/api/evennia.contrib.barter.html
@@ -681,7 +681,7 @@ try to influence the other part in the deal.
@@ -707,7 +707,7 @@ try to influence the other part in the deal.
-
-
search_index_entry = {'aliases': 'offers deal', 'category': 'trading', 'key': 'status', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶
+search_index_entry = {'aliases': 'deal offers', 'category': 'trading', 'key': 'status', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.chargen.html b/docs/1.0-dev/api/evennia.contrib.chargen.html
index da4c23977f..377728c2cf 100644
--- a/docs/1.0-dev/api/evennia.contrib.chargen.html
+++ b/docs/1.0-dev/api/evennia.contrib.chargen.html
@@ -77,7 +77,7 @@ at them with this command.
@@ -109,7 +109,7 @@ that is checked by the @ic command directly.
-
-
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n ooc look\n\n Usage:\n look\n look <character>\n\n This is an OOC version of the look command. Since an Account doesn\'t\n have an in-game existence, there is no concept of location or\n "self".\n\n If any characters are available for you to control, you may look\n at them with this command.\n '}¶
+search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n ooc look\n\n Usage:\n look\n look <character>\n\n This is an OOC version of the look command. Since an Account doesn\'t\n have an in-game existence, there is no concept of location or\n "self".\n\n If any characters are available for you to control, you may look\n at them with this command.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.crafting.crafting.html b/docs/1.0-dev/api/evennia.contrib.crafting.crafting.html
index 0869f5abfa..bc1e7719f0 100644
--- a/docs/1.0-dev/api/evennia.contrib.crafting.crafting.html
+++ b/docs/1.0-dev/api/evennia.contrib.crafting.crafting.html
@@ -35,7 +35,7 @@
previous |
- Evennia 1.0-dev »
- - Contributions »
+ - Contrib modules »
- evennia.contrib.crafting.crafting
develop branch
@@ -888,7 +888,7 @@ the crafting_tool_err_msg if available.
previous |
- Evennia 1.0-dev »
- - Contributions »
+ - Contrib modules »
- evennia.contrib.crafting.crafting
develop branch
diff --git a/docs/1.0-dev/api/evennia.contrib.crafting.example_recipes.html b/docs/1.0-dev/api/evennia.contrib.crafting.example_recipes.html
index 9655671726..735dfd1db9 100644
--- a/docs/1.0-dev/api/evennia.contrib.crafting.example_recipes.html
+++ b/docs/1.0-dev/api/evennia.contrib.crafting.example_recipes.html
@@ -35,7 +35,7 @@
previous |
- Evennia 1.0-dev »
- - Contributions »
+ - Contrib modules »
- evennia.contrib.crafting.example_recipes
develop branch
@@ -453,7 +453,7 @@ strips for better grip.
previous |
- Evennia 1.0-dev »
- - Contributions »
+ - Contrib modules »
- evennia.contrib.crafting.example_recipes
develop branch
diff --git a/docs/1.0-dev/api/evennia.contrib.email_login.html b/docs/1.0-dev/api/evennia.contrib.email_login.html
index 0ad8f49a6c..a9961411fb 100644
--- a/docs/1.0-dev/api/evennia.contrib.email_login.html
+++ b/docs/1.0-dev/api/evennia.contrib.email_login.html
@@ -74,7 +74,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.
@@ -104,7 +104,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶
+search_index_entry = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', '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 '}¶
@@ -226,7 +226,7 @@ All it does is display the connect screen.
@@ -252,7 +252,7 @@ All it does is display the connect screen.
-
-
search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶
+search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶
@@ -270,7 +270,7 @@ for simplicity. It shows a pane of info.
@@ -296,7 +296,7 @@ for simplicity. It shows a pane of info.
-
-
search_index_entry = {'aliases': 'h ?', 'category': 'general', 'key': 'help', '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', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.evscaperoom.commands.html b/docs/1.0-dev/api/evennia.contrib.evscaperoom.commands.html
index c70e4f8df5..58c9a5de88 100644
--- a/docs/1.0-dev/api/evennia.contrib.evscaperoom.commands.html
+++ b/docs/1.0-dev/api/evennia.contrib.evscaperoom.commands.html
@@ -147,7 +147,7 @@ the operation will be general or on the room.
@@ -171,7 +171,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'q chicken out quit abort', 'category': 'evscaperoom', 'key': 'give up', '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 chicken out abort q', 'category': 'evscaperoom', 'key': 'give up', '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 '}¶
@@ -192,7 +192,7 @@ set in self.parse())
@@ -226,7 +226,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'l ls', 'category': 'evscaperoom', 'key': 'look', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}¶
+search_index_entry = {'aliases': 'ls l', 'category': 'evscaperoom', 'key': 'look', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}¶
@@ -307,7 +307,7 @@ shout
@@ -336,7 +336,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'shout whisper ;', 'category': 'general', 'key': 'say', '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', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶
@@ -364,7 +364,7 @@ emote /me points to /box and /lever.
@@ -403,7 +403,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'pose :', 'category': 'general', 'key': 'emote', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use "..." to enact speech.\n\n Usage:\n emote <emote>\n :<emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}¶
+search_index_entry = {'aliases': ': pose', 'category': 'general', 'key': 'emote', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use "..." to enact speech.\n\n Usage:\n emote <emote>\n :<emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}¶
@@ -426,7 +426,7 @@ looks and what actions is available.
@@ -455,7 +455,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'unfocus e examine ex', 'category': 'evscaperoom', 'key': 'focus', '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 examine unfocus', 'category': 'evscaperoom', 'key': 'focus', '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 '}¶
@@ -517,7 +517,7 @@ set in self.parse())
@@ -541,7 +541,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'inv i give inventory', 'category': 'evscaperoom', 'key': 'get', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
+search_index_entry = {'aliases': 'inventory give inv i', 'category': 'evscaperoom', 'key': 'get', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.extended_room.html b/docs/1.0-dev/api/evennia.contrib.extended_room.html
index 26607493c5..347620a3d9 100644
--- a/docs/1.0-dev/api/evennia.contrib.extended_room.html
+++ b/docs/1.0-dev/api/evennia.contrib.extended_room.html
@@ -276,7 +276,7 @@ look *<account&g
@@ -296,7 +296,7 @@ look *<account&g
-
-
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}¶
+search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.ingame_python.commands.html b/docs/1.0-dev/api/evennia.contrib.ingame_python.commands.html
index 5b1a86c441..6fc536d31d 100644
--- a/docs/1.0-dev/api/evennia.contrib.ingame_python.commands.html
+++ b/docs/1.0-dev/api/evennia.contrib.ingame_python.commands.html
@@ -52,7 +52,7 @@
@@ -133,7 +133,7 @@ on user permission.
-
-
search_index_entry = {'aliases': '@callbacks @calls @callback', 'category': 'building', 'key': '@call', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶
+search_index_entry = {'aliases': '@callback @calls @callbacks', 'category': 'building', 'key': '@call', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.rpsystem.html b/docs/1.0-dev/api/evennia.contrib.rpsystem.html
index 1771efdc24..bed49388d0 100644
--- a/docs/1.0-dev/api/evennia.contrib.rpsystem.html
+++ b/docs/1.0-dev/api/evennia.contrib.rpsystem.html
@@ -636,7 +636,7 @@ a different language.
@@ -662,7 +662,7 @@ a different language.
-
-
search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', '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', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
@@ -801,7 +801,7 @@ Using the command without arguments will list all current recogs.
@@ -828,7 +828,7 @@ Using the command without arguments will list all current recogs.
-
-
search_index_entry = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶
+search_index_entry = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', '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/1.0-dev/api/evennia.contrib.turnbattle.tb_basic.html b/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_basic.html
index 3036af05f2..962e234dd3 100644
--- a/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_basic.html
+++ b/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_basic.html
@@ -570,7 +570,7 @@ if there are still any actions you can take.
@@ -591,7 +591,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_equip.html b/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_equip.html
index 8d77c7a650..fe2436b076 100644
--- a/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_equip.html
+++ b/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_equip.html
@@ -687,7 +687,7 @@ if there are still any actions you can take.
@@ -708,7 +708,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_items.html b/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_items.html
index d8e69f2e05..6318b86756 100644
--- a/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_items.html
+++ b/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_items.html
@@ -721,7 +721,7 @@ if there are still any actions you can take.
@@ -742,7 +742,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_magic.html b/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_magic.html
index df519a3190..399dfdab39 100644
--- a/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_magic.html
+++ b/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_magic.html
@@ -593,7 +593,7 @@ if there are still any actions you can take.
@@ -614,7 +614,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_range.html b/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_range.html
index 7301d5deea..6824fd9a27 100644
--- a/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_range.html
+++ b/docs/1.0-dev/api/evennia.contrib.turnbattle.tb_range.html
@@ -1020,7 +1020,7 @@ if there are still any actions you can take.
@@ -1041,7 +1041,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.tutorial_examples.cmdset_red_button.html b/docs/1.0-dev/api/evennia.contrib.tutorial_examples.cmdset_red_button.html
index a143f8ed10..887769e7f9 100644
--- a/docs/1.0-dev/api/evennia.contrib.tutorial_examples.cmdset_red_button.html
+++ b/docs/1.0-dev/api/evennia.contrib.tutorial_examples.cmdset_red_button.html
@@ -163,7 +163,7 @@ lid-state respectively.
@@ -190,7 +190,7 @@ of causing the lamp to break.
-
-
search_index_entry = {'aliases': 'smash break lid smash lid', 'category': 'general', 'key': 'smash glass', 'tags': '', 'text': '\n smash glass\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n '}¶
+search_index_entry = {'aliases': 'smash smash lid break lid', 'category': 'general', 'key': 'smash glass', 'tags': '', 'text': '\n smash glass\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n '}¶
@@ -307,7 +307,7 @@ of causing the lamp to break.
-
-
aliases = ['get', 'listen', 'feel', 'examine', 'ex', 'l']¶
+aliases = ['l', 'examine', 'feel', 'ex', 'listen', 'get']¶
@@ -333,7 +333,7 @@ of causing the lamp to break.
-
-
search_index_entry = {'aliases': 'get listen feel examine ex l', 'category': 'general', 'key': 'look', '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': 'l examine feel ex listen get', 'category': 'general', 'key': 'look', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.tutorial_world.objects.html b/docs/1.0-dev/api/evennia.contrib.tutorial_world.objects.html
index ce19c37e9e..0b4621c614 100644
--- a/docs/1.0-dev/api/evennia.contrib.tutorial_world.objects.html
+++ b/docs/1.0-dev/api/evennia.contrib.tutorial_world.objects.html
@@ -361,7 +361,7 @@ of the object. We overload it with our own version.
@@ -388,7 +388,7 @@ to sit on a “lightable” object, we operate only on self.obj.
-
-
search_index_entry = {'aliases': 'light burn', 'category': 'tutorialworld', 'key': 'on', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}¶
+search_index_entry = {'aliases': 'burn light', 'category': 'tutorialworld', 'key': 'on', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}¶
@@ -492,7 +492,7 @@ shift green root up/down
@@ -528,7 +528,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'shiftroot move pull push', 'category': 'tutorialworld', 'key': 'shift', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}¶
+search_index_entry = {'aliases': 'move pull shiftroot push', 'category': 'tutorialworld', 'key': 'shift', '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 '}¶
@@ -545,7 +545,7 @@ yellow/green - horizontal roots
-
-
aliases = ['press button', 'button', 'push button']¶
+aliases = ['button', 'press button', 'push button']¶
@@ -571,7 +571,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'press button button push button', 'category': 'tutorialworld', 'key': 'press', 'tags': '', 'text': '\n Presses a button.\n '}¶
+search_index_entry = {'aliases': 'button press button push button', 'category': 'tutorialworld', 'key': 'press', 'tags': '', 'text': '\n Presses a button.\n '}¶
@@ -715,7 +715,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
aliases = ['stab', 'hit', 'fight', 'kill', 'defend', 'thrust', 'chop', 'bash', 'pierce', 'parry', 'slash']¶
+aliases = ['hit', 'pierce', 'defend', 'bash', 'kill', 'chop', 'fight', 'thrust', 'parry', 'slash', 'stab']¶
@@ -741,7 +741,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
search_index_entry = {'aliases': 'stab hit fight kill defend thrust chop bash pierce parry slash', 'category': 'tutorialworld', 'key': 'attack', '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': 'hit pierce defend bash kill chop fight thrust parry slash stab', 'category': 'tutorialworld', 'key': 'attack', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶
diff --git a/docs/1.0-dev/api/evennia.contrib.tutorial_world.rooms.html b/docs/1.0-dev/api/evennia.contrib.tutorial_world.rooms.html
index 48d21650fc..a8b3caf762 100644
--- a/docs/1.0-dev/api/evennia.contrib.tutorial_world.rooms.html
+++ b/docs/1.0-dev/api/evennia.contrib.tutorial_world.rooms.html
@@ -184,7 +184,7 @@ code except for adding in the details.
@@ -199,7 +199,7 @@ code except for adding in the details.
-
-
search_index_entry = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}¶
+search_index_entry = {'aliases': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}¶
@@ -713,7 +713,7 @@ if they fall off the bridge.
@@ -739,7 +739,7 @@ if they fall off the bridge.
-
-
search_index_entry = {'aliases': 'h ?', 'category': 'tutorial world', 'key': 'help', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}¶
+search_index_entry = {'aliases': '? h', 'category': 'tutorial world', 'key': 'help', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}¶
@@ -865,7 +865,7 @@ to find something.
-
-
aliases = ['feel', 'l', 'fiddle', 'feel around', 'search']¶
+aliases = ['l', 'fiddle', 'search', 'feel', 'feel around']¶
@@ -893,7 +893,7 @@ random chance of eventually finding a light source.
-
-
search_index_entry = {'aliases': 'feel l fiddle feel around search', 'category': 'tutorialworld', 'key': 'look', '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 fiddle search feel feel around', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}¶
diff --git a/docs/1.0-dev/api/evennia.utils.eveditor.html b/docs/1.0-dev/api/evennia.utils.eveditor.html
index 69d9446eda..881f03a88f 100644
--- a/docs/1.0-dev/api/evennia.utils.eveditor.html
+++ b/docs/1.0-dev/api/evennia.utils.eveditor.html
@@ -274,7 +274,7 @@ indentation.
-
-
aliases = [':fd', ':', ':dd', ':f', '::', ':wq', ':DD', ':x', ':uu', ':::', ':>', ':u', ':dw', ':!', ':=', ':j', ':echo', ':S', ':p', ':fi', ':I', ':q!', ':h', ':y', ':s', ':A', ':UU', ':w', ':r', ':i', ':q', ':<']¶
+aliases = [':fi', ':dd', ':uu', ':echo', ':UU', ':f', ':y', ':q!', ':<', ':x', ':fd', ':q', ':p', ':=', ':wq', ':h', ':u', ':I', '::', ':A', ':', ':>', ':S', ':s', ':!', ':w', ':::', ':DD', ':r', ':i', ':dw', ':j']¶
@@ -302,7 +302,7 @@ efficient presentation.
-
-
search_index_entry = {'aliases': ':fd : :dd :f :: :wq :DD :x :uu ::: :> :u :dw :! := :j :echo :S :p :fi :I :q! :h :y :s :A :UU :w :r :i :q :<', 'category': 'general', 'key': ':editor_command_group', 'tags': '', 'text': '\n Commands for the editor\n '}¶
+search_index_entry = {'aliases': ':fi :dd :uu :echo :UU :f :y :q! :< :x :fd :q :p := :wq :h :u :I :: :A : :> :S :s :! :w ::: :DD :r :i :dw :j', 'category': 'general', 'key': ':editor_command_group', 'tags': '', 'text': '\n Commands for the editor\n '}¶
diff --git a/docs/1.0-dev/api/evennia.utils.evmore.html b/docs/1.0-dev/api/evennia.utils.evmore.html
index 1d7c406eab..dc5e1c6320 100644
--- a/docs/1.0-dev/api/evennia.utils.evmore.html
+++ b/docs/1.0-dev/api/evennia.utils.evmore.html
@@ -75,7 +75,7 @@ the caller.msg() construct every time the page is updated.
-
-
aliases = ['a', 'top', 'q', 'abort', 'n', 'end', 'next', 't', 'e', 'back', 'quit', 'b']¶
+aliases = ['q', 'a', 't', 'abort', 'top', 'quit', 'b', 'next', 'n', 'back', 'end', 'e']¶
@@ -101,7 +101,7 @@ the caller.msg() construct every time the page is updated.
-
-
search_index_entry = {'aliases': 'a top q abort n end next t e back quit b', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Manipulate the text paging\n '}¶
+search_index_entry = {'aliases': 'q a t abort top quit b next n back end e', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Manipulate the text paging\n '}¶
diff --git a/docs/1.0-dev/objects.inv b/docs/1.0-dev/objects.inv
index 67a13d44212fa8ced27c448d24daba19b2a93455..53ad848c7ca3c8ecc03a506ff8b34b115eca4b02 100644
GIT binary patch
delta 38690
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
delta 38059
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