mirror of
https://github.com/evennia/evennia.git
synced 2026-03-16 21:06:30 +01:00
Relinked with correct relative links
This commit is contained in:
parent
3e8017a874
commit
061dfbffaa
91 changed files with 633 additions and 631 deletions
|
|
@ -128,7 +128,7 @@ def create_toctree():
|
|||
with open(path, 'w') as fil:
|
||||
fil.write(outtxt)
|
||||
count += 1
|
||||
print(f" ----- Auto-relinked links in {path.name} ------")
|
||||
print(f" -- Auto-relinked links in {path.name}")
|
||||
|
||||
if count > 0:
|
||||
print(f"Auto-corrected links in {count} documents.")
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ Among those you will need:
|
|||
* A Continuous Integration Environment.
|
||||
* I recommend [TeamCity](https://www.jetbrains.com/teamcity/) which has an in-depth [Setup
|
||||
Guide](https://confluence.jetbrains.com/display/TCD8/Installing+and+Configuring+the+TeamCity+Server)
|
||||
* [Source Control](Coding/Version-Control)
|
||||
* [Source Control](Version-Control)
|
||||
* This could be Git or SVN or any other available SC.
|
||||
|
||||
## Linux TeamCity Setup
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ assume it's called `mygame`. Apart from the `server/` subfolder within, you coul
|
|||
folder if you preferred a different code structure for your game.
|
||||
|
||||
- `mygame/`
|
||||
- `commands/` - Overload default [Commands](Component/Commands) or add your own Commands/[Command
|
||||
- `commands/` - Overload default [Commands](../Component/Commands) or add your own Commands/[Command
|
||||
sets](Command-Sets) here.
|
||||
- `server`/ - The structure of this folder should not change since Evennia expects it.
|
||||
- [`conf/`](https://github.com/evennia/evennia/tree/master/evennia/game_template/server) - All
|
||||
|
|
@ -19,7 +19,7 @@ server configuration files sits here. The most important file is `settings.py`.
|
|||
- `typeclasses/` - this folder contains empty templates for overloading default game entities of
|
||||
Evennia. Evennia will automatically use the changes in those templates for the game entities it
|
||||
creates.
|
||||
- `web/` - This holds the [Web features](Concept/Web-Features) of your game.
|
||||
- `web/` - This holds the [Web features](../Concept/Web-Features) of your game.
|
||||
- `world/` - this is a "miscellaneous" folder holding everything related to the world you are
|
||||
building, such as build scripts and rules modules that don't fit with one of the other folders.
|
||||
|
||||
|
|
@ -30,18 +30,18 @@ top level of it contains Python package specific stuff such as a readme file, `s
|
|||
also has two subfolders`bin/` and `evennia/` (again).
|
||||
|
||||
The `bin/` directory holds OS-specific binaries that will be used when installing Evennia with `pip`
|
||||
as per the [Getting started](Setup/Getting-Started) instructions. The library itself is in the `evennia`
|
||||
as per the [Getting started](../Setup/Getting-Started) instructions. The library itself is in the `evennia`
|
||||
subfolder. From your code you will access this subfolder simply by `import evennia`.
|
||||
|
||||
- evennia
|
||||
- [`__init__.py`](Evennia-API) - The "flat API" of Evennia resides here.
|
||||
- [`commands/`](Commands) - The command parser and handler.
|
||||
- `default/` - The [default commands](Component/Default-Command-Help) and cmdsets.
|
||||
- `default/` - The [default commands](../Component/Default-Command-Help) and cmdsets.
|
||||
- [`comms/`](Communications) - Systems for communicating in-game.
|
||||
- `contrib/` - Optional plugins too game-specific for core Evennia.
|
||||
- `game_template/` - Copied to become the "game directory" when using `evennia --init`.
|
||||
- [`help/`](Help-System) - Handles the storage and creation of help entries.
|
||||
- `locale/` - Language files ([i18n](Concept/Internationalization)).
|
||||
- `locale/` - Language files ([i18n](../Concept/Internationalization)).
|
||||
- [`locks/`](Locks) - Lock system for restricting access to in-game entities.
|
||||
- [`objects/`](Objects) - In-game entities (all types of items and Characters).
|
||||
- [`prototypes/`](Spawner-and-Prototypes) - Object Prototype/spawning system and OLC menu
|
||||
|
|
@ -62,7 +62,7 @@ required by Python so as to be able to find and import modules in other director
|
|||
run Evennia at least once you will find that there will also be `.pyc` files appearing, these are
|
||||
pre-compiled binary versions of the `.py` files to speed up execution.
|
||||
|
||||
The root of the `evennia` folder has an `__init__.py` file containing the "[flat API](Coding/Evennia-API)".
|
||||
The root of the `evennia` folder has an `__init__.py` file containing the "[flat API](../Evennia-API)".
|
||||
This holds shortcuts to various subfolders in the evennia library. It is provided to make it easier
|
||||
to find things; it allows you to just import `evennia` and access things from that rather than
|
||||
having to import from their actual locations inside the source tree.
|
||||
|
|
@ -52,7 +52,7 @@ profiler through the launcher:
|
|||
|
||||
This will start Evennia with the Server component running (in daemon mode) under cProfile. You could
|
||||
instead try `--profile` with the `portal` argument to profile the Portal (you would then need to
|
||||
[start the Server separately](Setup/Start-Stop-Reload)).
|
||||
[start the Server separately](../Setup/Start-Stop-Reload)).
|
||||
|
||||
Please note that while the profiler is running, your process will use a lot more memory than usual.
|
||||
Memory usage is even likely to climb over time. So don't leave it running perpetually but monitor it
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ update the database you'd need to explicitly re-assign the updated data to the `
|
|||
|
||||
### Commands are matched by name *or* alias
|
||||
|
||||
When merging [command sets](Component/Commands) it's important to remember that command objects are identified
|
||||
When merging [command sets](../Component/Commands) it's important to remember that command objects are identified
|
||||
*both* by key *or* alias. So if you have a command with a key `look` and an alias `ls`, introducing
|
||||
another command with a key `ls` will be assumed by the system to be *identical* to the first one.
|
||||
This usually means merging cmdsets will overload one of them depending on priority. Whereas this is
|
||||
|
|
@ -110,7 +110,7 @@ Try to avoid doing so.
|
|||
distributions (notably Ubuntu 16.04 LTS). Zope is a dependency of Twisted. The error manifests in
|
||||
the server not starting with an error that `zope.interface` is not found even though `pip list`
|
||||
shows it's installed. The reason is a missing empty `__init__.py` file at the root of the zope
|
||||
package. If the virtualenv is named "evenv" as suggested in the [Getting Started](Setup/Getting-Started)
|
||||
package. If the virtualenv is named "evenv" as suggested in the [Getting Started](../Setup/Getting-Started)
|
||||
instructions, use the following command to fix it:
|
||||
|
||||
```shell
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ class in the same module to get access to the command-specific utilities mention
|
|||
### Unit testing contribs with custom models
|
||||
|
||||
A special case is if you were to create a contribution to go to the `evennia/contrib` folder that
|
||||
uses its [own database models](Concept/New-Models). The problem with this is that Evennia (and Django) will
|
||||
uses its [own database models](../Concept/New-Models). The problem with this is that Evennia (and Django) will
|
||||
only recognize models in `settings.INSTALLED_APPS`. If a user wants to use your contrib, they will
|
||||
be required to add your models to their settings file. But since contribs are optional you cannot
|
||||
add the model to Evennia's central `settings_default.py` file - this would always create your
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
|
||||
Fortunately, it's extremely easy to keep your Evennia server up-to-date. If you haven't already, see
|
||||
the [Getting Started guide](Setup/Getting-Started) and get everything running.
|
||||
the [Getting Started guide](../Setup/Getting-Started) and get everything running.
|
||||
|
||||
### Updating with the latest Evennia code changes
|
||||
|
||||
|
|
@ -72,13 +72,13 @@ When the database schema changes, you just go to your game folder and run
|
|||
evennia migrate
|
||||
|
||||
> Hint: If the `evennia` command is not found, you most likely need to activate your
|
||||
[virtualenv](Glossary#virtualenv).
|
||||
[virtualenv](../Glossary#virtualenv).
|
||||
|
||||
## Resetting your database
|
||||
|
||||
Should you ever want to start over completely from scratch, there is no need to re-download Evennia
|
||||
or anything like that. You just need to clear your database. Once you are done, you just rebuild it
|
||||
from scratch as described in [step 2](Setup/Getting-Started#step-2-setting-up-your-game) of the [Getting
|
||||
from scratch as described in [step 2](../Setup/Getting-Started#step-2-setting-up-your-game) of the [Getting
|
||||
Started guide](Getting-Started).
|
||||
|
||||
First stop a running server with
|
||||
|
|
|
|||
|
|
@ -324,7 +324,7 @@ developer mailing list or IRC chat to see beforehand if your feature is deemed s
|
|||
as a core feature in the engine. When it comes to bug-fixes, other developers may also have good
|
||||
input on how to go about resolving the issue.
|
||||
|
||||
To contribute you need to have [forked Evennia](Coding/Version-Control#forking-evennia) first. As described
|
||||
To contribute you need to have [forked Evennia](Version-Control#forking-evennia) first. As described
|
||||
above you should do your modification in a separate local branch (not in the master branch). This
|
||||
branch is what you then present to us (as a *Pull request*, PR, see below). We can then merge your
|
||||
change into the upstream master and you then do `git pull` to update master usual. Now that the
|
||||
|
|
|
|||
|
|
@ -1,27 +1,27 @@
|
|||
# Accounts
|
||||
|
||||
|
||||
All *users* (real people) that starts a game [Session](Component/Sessions) on Evennia are doing so through an
|
||||
All *users* (real people) that starts a game [Session](Sessions) on Evennia are doing so through an
|
||||
object called *Account*. The Account object has no in-game representation, it represents a unique
|
||||
game account. In order to actually get on the game the Account must *puppet* an [Object](Component/Objects)
|
||||
(normally a [Character](Component/Objects#Character)).
|
||||
game account. In order to actually get on the game the Account must *puppet* an [Object](Objects)
|
||||
(normally a [Character](Objects#Character)).
|
||||
|
||||
Exactly how many Sessions can interact with an Account and its Puppets at once is determined by
|
||||
Evennia's [MULTISESSION_MODE](Component/Sessions#Multisession-mode) setting.
|
||||
Evennia's [MULTISESSION_MODE](Sessions#Multisession-mode) setting.
|
||||
|
||||
Apart from storing login information and other account-specific data, the Account object is what is
|
||||
chatting on [Channels](Component/Communications). It is also a good place to store [Permissions](Component/Locks) to be
|
||||
chatting on [Channels](Communications). It is also a good place to store [Permissions](Locks) to be
|
||||
consistent between different in-game characters as well as configuration options. The Account
|
||||
object also has its own [CmdSet](Component/Command-Sets), the `AccountCmdSet`.
|
||||
object also has its own [CmdSet](Command-Sets), the `AccountCmdSet`.
|
||||
|
||||
Logged into default evennia, you can use the `ooc` command to leave your current
|
||||
[character](Component/Objects) and go into OOC mode. You are quite limited in this mode, basically it works
|
||||
[character](Objects) and go into OOC mode. You are quite limited in this mode, basically it works
|
||||
like a simple chat program. It acts as a staging area for switching between Characters (if your
|
||||
game supports that) or as a safety mode if your Character gets deleted. Use `ic` to attempt to
|
||||
(re)puppet a Character.
|
||||
|
||||
Note that the Account object can have, and often does have, a different set of
|
||||
[Permissions](Component/Locks#Permissions) from the Character they control. Normally you should put your
|
||||
[Permissions](Locks#Permissions) from the Character they control. Normally you should put your
|
||||
permissions on the Account level - this will overrule permissions set on the Character level. For
|
||||
the permissions of the Character to come into play the default `quell` command can be used. This
|
||||
allows for exploring the game using a different permission set (but you can't escalate your
|
||||
|
|
@ -76,7 +76,7 @@ You should now see the Attributes on yourself.
|
|||
|
||||
## Properties on Accounts
|
||||
|
||||
Beyond those properties assigned to all typeclassed objects (see [Typeclasses](Component/Typeclasses)), the
|
||||
Beyond those properties assigned to all typeclassed objects (see [Typeclasses](Typeclasses)), the
|
||||
Account also has the following custom properties:
|
||||
|
||||
- `user` - a unique link to a `User` Django object, representing the logged-in user.
|
||||
|
|
@ -91,11 +91,11 @@ as
|
|||
- `is_superuser` (bool: True/False) - if this account is a superuser.
|
||||
|
||||
Special handlers:
|
||||
- `cmdset` - This holds all the current [Commands](Component/Commands) of this Account. By default these are
|
||||
- `cmdset` - This holds all the current [Commands](Commands) of this Account. By default these are
|
||||
the commands found in the cmdset defined by `settings.CMDSET_ACCOUNT`.
|
||||
- `nicks` - This stores and handles [Nicks](Component/Nicks), in the same way as nicks it works on Objects.
|
||||
- `nicks` - This stores and handles [Nicks](Nicks), in the same way as nicks it works on Objects.
|
||||
For Accounts, nicks are primarily used to store custom aliases for
|
||||
[Channels](Component/Communications#Channels).
|
||||
[Channels](Communications#Channels).
|
||||
|
||||
Selection of special methods (see `evennia.DefaultAccount` for details):
|
||||
- `get_puppet` - get a currently puppeted object connected to the Account and a given session id, if
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ can give correct subsequent commands. If you are writing a combat system, you mi
|
|||
combattant's next roll get easier dependent on if their opponent failed. Your characters will
|
||||
probably need to store roleplaying-attributes like strength and agility. And so on.
|
||||
|
||||
[Typeclassed](Component/Typeclasses) game entities ([Accounts](Component/Accounts), [Objects](Component/Objects),
|
||||
[Scripts](Component/Scripts) and [Channels](Component/Communications)) always have *Attributes* associated with them.
|
||||
[Typeclassed](Typeclasses) game entities ([Accounts](Accounts), [Objects](Objects),
|
||||
[Scripts](Scripts) and [Channels](Communications)) always have *Attributes* associated with them.
|
||||
Attributes are used to store any type of data 'on' such entities. This is different from storing
|
||||
data in properties already defined on entities (such as `key` or `location`) - these have very
|
||||
specific names and require very specific types of data (for example you couldn't assign a python
|
||||
|
|
@ -16,12 +16,12 @@ specific names and require very specific types of data (for example you couldn't
|
|||
want to assign arbitrary data to arbitrary names.
|
||||
|
||||
**Attributes are _not_ secure by default and any player may be able to change them unless you
|
||||
[prevent this behavior](Component/Attributes#locking-and-checking-attributes).**
|
||||
[prevent this behavior](Attributes#locking-and-checking-attributes).**
|
||||
|
||||
## The .db and .ndb shortcuts
|
||||
|
||||
To save persistent data on a Typeclassed object you normally use the `db` (DataBase) operator. Let's
|
||||
try to save some data to a *Rose* (an [Object](Component/Objects)):
|
||||
try to save some data to a *Rose* (an [Object](Objects)):
|
||||
|
||||
```python
|
||||
# saving
|
||||
|
|
@ -87,13 +87,13 @@ The handlers have normal access methods that allow you to manage and retrieve `A
|
|||
returned, but the method takes keywords for returning the Attribute object itself. By supplying an
|
||||
`accessing_object` to the call one can also make sure to check permissions before modifying
|
||||
anything.
|
||||
- `add(...)` - this adds a new Attribute to the object. An optional [lockstring](Component/Locks) can be
|
||||
- `add(...)` - this adds a new Attribute to the object. An optional [lockstring](Locks) can be
|
||||
supplied here to restrict future access and also the call itself may be checked against locks.
|
||||
- `remove(...)` - Remove the given Attribute. This can optionally be made to check for permission
|
||||
before performing the deletion. - `clear(...)` - removes all Attributes from object.
|
||||
- `all(...)` - returns all Attributes (of the given category) attached to this object.
|
||||
|
||||
See [this section](Component/Attributes#locking-and-checking-attributes) for more about locking down Attribute
|
||||
See [this section](Attributes#locking-and-checking-attributes) for more about locking down Attribute
|
||||
access and editing. The `Nattribute` offers no concept of access control.
|
||||
|
||||
Some examples:
|
||||
|
|
@ -118,23 +118,23 @@ An Attribute object is stored in the database. It has the following properties:
|
|||
to `attrname`.
|
||||
- `value` - this is the value of the Attribute. This value can be anything which can be pickled -
|
||||
objects, lists, numbers or what have you (see
|
||||
[this section](Component/Attributes#What_types_of_data_can_I_save_in_an_Attribute) for more info). In the
|
||||
[this section](Attributes#What_types_of_data_can_I_save_in_an_Attribute) for more info). In the
|
||||
example
|
||||
`obj.db.attrname = value`, the `value` is stored here.
|
||||
- `category` - this is an optional property that is set to None for most Attributes. Setting this
|
||||
allows to use Attributes for different functionality. This is usually not needed unless you want
|
||||
to use Attributes for very different functionality ([Nicks](Component/Nicks) is an example of using
|
||||
to use Attributes for very different functionality ([Nicks](Nicks) is an example of using
|
||||
Attributes
|
||||
in this way). To modify this property you need to use the [Attribute
|
||||
Handler](Attributes#The_Attribute_Handler).
|
||||
- `strvalue` - this is a separate value field that only accepts strings. This severely limits the
|
||||
data possible to store, but allows for easier database lookups. This property is usually not used
|
||||
except when re-using Attributes for some other purpose ([Nicks](Component/Nicks) use it). It is only
|
||||
accessible via the [Attribute Handler](Component/Attributes#The_Attribute_Handler).
|
||||
except when re-using Attributes for some other purpose ([Nicks](Nicks) use it). It is only
|
||||
accessible via the [Attribute Handler](Attributes#The_Attribute_Handler).
|
||||
|
||||
There are also two special properties:
|
||||
|
||||
- `attrtype` - this is used internally by Evennia to separate [Nicks](Component/Nicks), from Attributes (Nicks
|
||||
- `attrtype` - this is used internally by Evennia to separate [Nicks](Nicks), from Attributes (Nicks
|
||||
use Attributes behind the scenes).
|
||||
- `model` - this is a *natural-key* describing the model this Attribute is attached to. This is on
|
||||
the form *appname.modelclass*, like `objects.objectdb`. It is used by the Attribute and
|
||||
|
|
@ -162,7 +162,7 @@ default
|
|||
during heavy loads.
|
||||
- A more valid reason for using non-persistent data is if you *want* to lose your state when logging
|
||||
off. Maybe you are storing throw-away data that are re-initialized at server startup. Maybe you
|
||||
are implementing some caching of your own. Or maybe you are testing a buggy [Script](Component/Scripts) that
|
||||
are implementing some caching of your own. Or maybe you are testing a buggy [Script](Scripts) that
|
||||
does potentially harmful stuff to your character object. With non-persistent storage you can be
|
||||
sure
|
||||
that whatever is messed up, it's nothing a server reboot can't clear up.
|
||||
|
|
@ -192,7 +192,7 @@ not a big deal. But if you are accessing the Attribute as part of some big loop
|
|||
amount of reads/writes you should first extract it to a temporary variable, operate on *that* and
|
||||
then save the result back to the Attribute. If you are storing a more complex structure like a
|
||||
`dict` or a `list` you should make sure to "disconnect" it from the database before looping over it,
|
||||
as mentioned in the [Retrieving Mutable Objects](Component/Attributes#retrieving-mutable-objects) section
|
||||
as mentioned in the [Retrieving Mutable Objects](Attributes#retrieving-mutable-objects) section
|
||||
below.
|
||||
|
||||
### Storing single objects
|
||||
|
|
@ -248,7 +248,7 @@ containing dicts, etc.
|
|||
Since you can use any combination of the above iterables, this is generally not much of a
|
||||
limitation.
|
||||
|
||||
Any entity listed in the [Single object](Component/Attributes#Storing-Single-Objects) section above can be
|
||||
Any entity listed in the [Single object](Attributes#Storing-Single-Objects) section above can be
|
||||
stored in the iterable.
|
||||
|
||||
> As mentioned in the previous section, database entities (aka typeclasses) are not possible to
|
||||
|
|
@ -355,7 +355,7 @@ already disconnected from the database from the onset.
|
|||
Attributes are normally not locked down by default, but you can easily change that for individual
|
||||
Attributes (like those that may be game-sensitive in games with user-level building).
|
||||
|
||||
First you need to set a *lock string* on your Attribute. Lock strings are specified [Locks](Component/Locks).
|
||||
First you need to set a *lock string* on your Attribute. Lock strings are specified [Locks](Locks).
|
||||
The relevant lock types are
|
||||
|
||||
- `attrread` - limits who may read the value of the Attribute
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Batch Code Processor
|
||||
|
||||
|
||||
For an introduction and motivation to using batch processors, see [here](Component/Batch-Processors). This
|
||||
For an introduction and motivation to using batch processors, see [here](Batch-Processors). This
|
||||
page describes the Batch-*code* processor. The Batch-*command* one is covered [here](Batch-Command-
|
||||
Processor).
|
||||
|
||||
|
|
@ -192,7 +192,7 @@ connect that room with a room you built in the current block. There are two ways
|
|||
|
||||
- Perform a database search for the name of the room you created (since you cannot know in advance
|
||||
which dbref it got assigned). The problem is that a name may not be unique (you may have a lot of "A
|
||||
dark forest" rooms). There is an easy way to handle this though - use [Tags](Component/Tags) or *Aliases*. You
|
||||
dark forest" rooms). There is an easy way to handle this though - use [Tags](Tags) or *Aliases*. You
|
||||
can assign any number of tags and/or aliases to any object. Make sure that one of those tags or
|
||||
aliases is unique to the room (like "room56") and you will henceforth be able to always uniquely
|
||||
search and find it later.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Batch Command Processor
|
||||
|
||||
|
||||
For an introduction and motivation to using batch processors, see [here](Component/Batch-Processors). This
|
||||
For an introduction and motivation to using batch processors, see [here](Batch-Processors). This
|
||||
page describes the Batch-*command* processor. The Batch-*code* one is covered [here](Batch-Code-
|
||||
Processor).
|
||||
|
||||
|
|
@ -152,7 +152,7 @@ when creating the file, so that you can 'walk' (or teleport) to the right places
|
|||
This also means there are several pitfalls when designing and adding certain types of objects. Here
|
||||
are some examples:
|
||||
|
||||
- *Rooms that change your [Command Set](Component/Command-Sets)*: Imagine that you build a 'dark' room, which
|
||||
- *Rooms that change your [Command Set](Command-Sets)*: Imagine that you build a 'dark' room, which
|
||||
severely limits the cmdsets of those entering it (maybe you have to find the light switch to
|
||||
proceed). In your batch script you would create this room, then teleport to it - and promptly be
|
||||
shifted into the dark state where none of your normal build commands work ...
|
||||
|
|
|
|||
|
|
@ -35,8 +35,8 @@ just list in-game commands in a text file. The code-processor on the other hand
|
|||
powerful but also more complex - it lets you use Evennia's API to code your world in full-fledged
|
||||
Python code.
|
||||
|
||||
- The [Batch Command Processor](Component/Batch-Command-Processor)
|
||||
- The [Batch Code Processor](Component/Batch-Code-Processor)
|
||||
- The [Batch Command Processor](Batch-Command-Processor)
|
||||
- The [Batch Code Processor](Batch-Code-Processor)
|
||||
|
||||
If you plan to use international characters in your batchfiles you are wise to read about *file
|
||||
encodings* below.
|
||||
|
|
@ -73,7 +73,7 @@ need to add the editor's encoding to Evennia's `ENCODINGS` list. If you are unsu
|
|||
file with lots of non-ASCII letters in the editor of your choice, then import to make sure it works
|
||||
as it should.
|
||||
|
||||
More help with encodings can be found in the entry [Text Encodings](Concept/Text-Encodings) and also in the
|
||||
More help with encodings can be found in the entry [Text Encodings](../Concept/Text-Encodings) and also in the
|
||||
Wikipedia article [here](http://en.wikipedia.org/wiki/Text_encodings).
|
||||
|
||||
**A footnote for the batch-code processor**: Just because *Evennia* can parse your file and your
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
Bootstrap provides many utilities and components you can use when customizing Evennia's web
|
||||
presence. We'll go over a few examples here that you might find useful.
|
||||
> Please take a look at either [the basic web tutorial](Howto/StartingTutorial/Add-a-simple-new-web-page) or [the web
|
||||
> Please take a look at either [the basic web tutorial](../Howto/Starting/Add-a-simple-new-web-page) or [the web
|
||||
character view tutorial](Web-Character-View-Tutorial)
|
||||
> to get a feel for how to add pages to Evennia's website to test these examples.
|
||||
|
||||
|
|
@ -79,4 +79,4 @@ width of the page - Evennia's base site uses the former.
|
|||
### Forms
|
||||
[Forms](https://getbootstrap.com/docs/4.0/components/forms/) are highly customizable with Bootstrap.
|
||||
For a more in-depth look at how to use forms and their styles in your own Evennia site, please read
|
||||
over [the web character gen tutorial.](Howto/Web-Character-Generation)
|
||||
over [the web character gen tutorial.](../Howto/Web-Character-Generation)
|
||||
|
|
@ -181,13 +181,13 @@ number of seconds. This is a very light wrapper over a Twisted
|
|||
non-persistently, which means that if the server is `@reload`ed before the delay is over, the
|
||||
callback will never run (the server forgets it). If setting `persistent` to True, the delay will be
|
||||
stored in the database and survive a `@reload` - but for this to work it is susceptible to the same
|
||||
limitations incurred when saving to an [Attribute](Component/Attributes).
|
||||
limitations incurred when saving to an [Attribute](Attributes).
|
||||
|
||||
The `deferred` return object can usually be ignored, but calling its `.cancel()` method will abort
|
||||
the delay prematurely.
|
||||
|
||||
`utils.delay` is the lightest form of delayed call in Evennia. For other way to create time-bound
|
||||
tasks, see the [TickerHandler](Component/TickerHandler) and [Scripts](Component/Scripts).
|
||||
tasks, see the [TickerHandler](TickerHandler) and [Scripts](Scripts).
|
||||
|
||||
> Note that many delayed effects can be achieved without any need for an active timer. For example
|
||||
if you have a trait that should recover a point every 5 seconds you might just need its value when
|
||||
|
|
@ -203,7 +203,7 @@ classes, instances or python-paths-to-classes.
|
|||
|
||||
Note that Python code should usually work with [duck
|
||||
typing](http://en.wikipedia.org/wiki/Duck_typing). But in Evennia's case it can sometimes be useful
|
||||
to check if an object inherits from a given [Typeclass](Component/Typeclasses) as a way of identification. Say
|
||||
to check if an object inherits from a given [Typeclass](Typeclasses) as a way of identification. Say
|
||||
for example that we have a typeclass *Animal*. This has a subclass *Felines* which in turn has a
|
||||
subclass *HouseCat*. Maybe there are a bunch of other animal types too, like horses and dogs. Using
|
||||
`inherits_from` will allow you to check for all animals in one go:
|
||||
|
|
@ -274,7 +274,7 @@ need to send byte-data over the wire, `to_str` is the only one you'll need.
|
|||
The difference from Python's in-built `str()` and `bytes()` operators are that
|
||||
the Evennia ones makes use of the `ENCODINGS` setting and will try very hard to
|
||||
never raise a traceback but instead echo errors through logging. See
|
||||
[here](Concept/Text-Encodings) for more info.
|
||||
[here](../Concept/Text-Encodings) for more info.
|
||||
|
||||
### Ansi Coloring Tools
|
||||
- [evennia.ansi](api:evennia.utils.ansi)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Command Sets
|
||||
|
||||
|
||||
Command Sets are intimately linked with [Commands](Component/Commands) and you should be familiar with
|
||||
Command Sets are intimately linked with [Commands](Commands) and you should be familiar with
|
||||
Commands before reading this page. The two pages were split for ease of reading.
|
||||
|
||||
A *Command Set* (often referred to as a CmdSet or cmdset) is the basic unit for storing one or more
|
||||
|
|
@ -11,7 +11,7 @@ classes in a command set is the way to make commands available to use in your ga
|
|||
When storing a CmdSet on an object, you will make the commands in that command set available to the
|
||||
object. An example is the default command set stored on new Characters. This command set contains
|
||||
all the useful commands, from `look` and `inventory` to `@dig` and `@reload`
|
||||
([permissions](Component/Locks#Permissions) then limit which players may use them, but that's a separate
|
||||
([permissions](Locks#Permissions) then limit which players may use them, but that's a separate
|
||||
topic).
|
||||
|
||||
When an account enters a command, cmdsets from the Account, Character, its location, and elsewhere
|
||||
|
|
@ -26,7 +26,7 @@ on. The tutorial world included with Evennia showcases a dark room that replaces
|
|||
commands with its own versions because the Character cannot see.
|
||||
|
||||
If you want a quick start into defining your first commands and using them with command sets, you
|
||||
can head over to the [Adding Command Tutorial](Howto/StartingTutorial/Adding-Command-Tutorial) which steps through things
|
||||
can head over to the [Adding Command Tutorial](../Howto/Starting/Adding-Command-Tutorial) which steps through things
|
||||
without the explanations.
|
||||
|
||||
## Defining Command Sets
|
||||
|
|
@ -112,11 +112,11 @@ back even if all other cmdsets fail or are removed. It is always persistent and
|
|||
by `cmdset.delete()`. To remove a default cmdset you must explicitly call `cmdset.remove_default()`.
|
||||
|
||||
Command sets are often added to an object in its `at_object_creation` method. For more examples of
|
||||
adding commands, read the [Step by step tutorial](Howto/StartingTutorial/Adding-Command-Tutorial). Generally you can
|
||||
adding commands, read the [Step by step tutorial](../Howto/Starting/Adding-Command-Tutorial). Generally you can
|
||||
customize which command sets are added to your objects by using `self.cmdset.add()` or
|
||||
`self.cmdset.add_default()`.
|
||||
|
||||
> Important: Commands are identified uniquely by key *or* alias (see [Commands](Component/Commands)). If any
|
||||
> Important: Commands are identified uniquely by key *or* alias (see [Commands](Commands)). If any
|
||||
overlap exists, two commands are considered identical. Adding a Command to a command set that
|
||||
already has an identical command will *replace* the previous command. This is very important. You
|
||||
must take this behavior into account when attempting to overload any default Evennia commands with
|
||||
|
|
@ -127,7 +127,7 @@ new one that has a matching alias.
|
|||
|
||||
There are several extra flags that you can set on CmdSets in order to modify how they work. All are
|
||||
optional and will be set to defaults otherwise. Since many of these relate to *merging* cmdsets,
|
||||
you might want to read the [Adding and Merging Command Sets](Component/Command-Sets#adding-and-merging-
|
||||
you might want to read the [Adding and Merging Command Sets](Command-Sets#adding-and-merging-
|
||||
command-sets) section for some of these to make sense.
|
||||
|
||||
- `key` (string) - an identifier for the cmdset. This is optional, but should be unique. It is used
|
||||
|
|
@ -195,15 +195,15 @@ priority determines what is used.
|
|||
|
||||
## Command Sets Searched
|
||||
|
||||
When a user issues a command, it is matched against the [merged](Component/Command-Sets#adding-and-merging-
|
||||
When a user issues a command, it is matched against the [merged](Command-Sets#adding-and-merging-
|
||||
command-sets) command sets available to the player at the moment. Which those are may change at any
|
||||
time (such as when the player walks into the room with the `Window` object described earlier).
|
||||
|
||||
The currently valid command sets are collected from the following sources:
|
||||
|
||||
- The cmdsets stored on the currently active [Session](Component/Sessions). Default is the empty
|
||||
- The cmdsets stored on the currently active [Session](Sessions). Default is the empty
|
||||
`SessionCmdSet` with merge priority `-20`.
|
||||
- The cmdsets defined on the [Account](Component/Accounts). Default is the AccountCmdSet with merge priority
|
||||
- The cmdsets defined on the [Account](Accounts). Default is the AccountCmdSet with merge priority
|
||||
`-10`.
|
||||
- All cmdsets on the Character/Object (assuming the Account is currently puppeting such a
|
||||
Character/Object). Merge priority `0`.
|
||||
|
|
@ -215,14 +215,14 @@ included if `no_objs` option is active in the merge stack.
|
|||
`no_objs` option is active in the merge stack.
|
||||
- The cmdsets of Exits in the location. Merge priority `+101`. Will not be included if `no_exits`
|
||||
*or* `no_objs` option is active in the merge stack.
|
||||
- The [channel](Component/Communications) cmdset containing commands for posting to all channels the account
|
||||
- The [channel](Communications) cmdset containing commands for posting to all channels the account
|
||||
or character is currently connected to. Merge priority `+101`. Will not be included if `no_channels`
|
||||
option is active in the merge stack.
|
||||
|
||||
Note that an object does not *have* to share its commands with its surroundings. A Character's
|
||||
cmdsets should not be shared for example, or all other Characters would get multi-match errors just
|
||||
by being in the same room. The ability of an object to share its cmdsets is managed by its `call`
|
||||
[lock](Component/Locks). For example, [Character objects](Component/Objects) defaults to `call:false()` so that any
|
||||
[lock](Locks). For example, [Character objects](Objects) defaults to `call:false()` so that any
|
||||
cmdsets on them can only be accessed by themselves, not by other objects around them. Another
|
||||
example might be to lock an object with `call:inside()` to only make their commands available to
|
||||
objects inside them, or `cmd:holds()` to make their commands available only if they are held.
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
# Commands
|
||||
|
||||
|
||||
Commands are intimately linked to [Command Sets](Component/Command-Sets) and you need to read that page too to
|
||||
Commands are intimately linked to [Command Sets](Command-Sets) and you need to read that page too to
|
||||
be familiar with how the command system works. The two pages were split for easy reading.
|
||||
|
||||
The basic way for users to communicate with the game is through *Commands*. These can be commands
|
||||
directly related to the game world such as *look*, *get*, *drop* and so on, or administrative
|
||||
commands such as *examine* or *@dig*.
|
||||
|
||||
The [default commands](Component/Default-Command-Help) coming with Evennia are 'MUX-like' in that they use @
|
||||
The [default commands](Default-Command-Help) coming with Evennia are 'MUX-like' in that they use @
|
||||
for admin commands, support things like switches, syntax with the '=' symbol etc, but there is
|
||||
nothing that prevents you from implementing a completely different command scheme for your game. You
|
||||
can find the default commands in `evennia/commands/default`. You should not edit these directly -
|
||||
|
|
@ -28,7 +28,7 @@ object in various ways. Consider a "Tree" object with a cmdset defining the comm
|
|||
*chop down*. Or a "Clock" with a cmdset containing the single command *check time*.
|
||||
|
||||
This page goes into full detail about how to use Commands. To fully use them you must also read the
|
||||
page detailing [Command Sets](Component/Command-Sets). There is also a step-by-step [Adding Command
|
||||
page detailing [Command Sets](Command-Sets). There is also a step-by-step [Adding Command
|
||||
Tutorial](Adding-Command-Tutorial) that will get you started quickly without the extra explanations.
|
||||
|
||||
## Defining Commands
|
||||
|
|
@ -80,15 +80,15 @@ In Evennia there are three types of objects that may call the command. It is im
|
|||
of this since this will also assign appropriate `caller`, `session`, `sessid` and `account`
|
||||
properties on the command body at runtime. Most often the calling type is `Session`.
|
||||
|
||||
* A [Session](Component/Sessions). This is by far the most common case when a user is entering a command in
|
||||
* A [Session](Sessions). This is by far the most common case when a user is entering a command in
|
||||
their client.
|
||||
* `caller` - this is set to the puppeted [Object](Component/Objects) if such an object exists. If no
|
||||
* `caller` - this is set to the puppeted [Object](Objects) if such an object exists. If no
|
||||
puppet is found, `caller` is set equal to `account`. Only if an Account is not found either (such as
|
||||
before being logged in) will this be set to the Session object itself.
|
||||
* `session` - a reference to the [Session](Component/Sessions) object itself.
|
||||
* `session` - a reference to the [Session](Sessions) object itself.
|
||||
* `sessid` - `sessid.id`, a unique integer identifier of the session.
|
||||
* `account` - the [Account](Component/Accounts) object connected to this Session. None if not logged in.
|
||||
* An [Account](Component/Accounts). This only happens if `account.execute_cmd()` was used. No Session
|
||||
* `account` - the [Account](Accounts) object connected to this Session. None if not logged in.
|
||||
* An [Account](Accounts). This only happens if `account.execute_cmd()` was used. No Session
|
||||
information can be obtained in this case.
|
||||
* `caller` - this is set to the puppeted Object if such an object can be determined (without
|
||||
Session info this can only be determined in `MULTISESSION_MODE=0` or `1`). If no puppet is found,
|
||||
|
|
@ -96,7 +96,7 @@ this is equal to `account`.
|
|||
* `session` - `None*`
|
||||
* `sessid` - `None*`
|
||||
* `account` - Set to the Account object.
|
||||
* An [Object](Component/Objects). This only happens if `object.execute_cmd()` was used (for example by an
|
||||
* An [Object](Objects). This only happens if `object.execute_cmd()` was used (for example by an
|
||||
NPC).
|
||||
* `caller` - This is set to the calling Object in question.
|
||||
* `session` - `None*`
|
||||
|
|
@ -119,10 +119,10 @@ it the following properties:
|
|||
- `caller` - The character BigGuy, in this example. This is a reference to the object executing the
|
||||
command. The value of this depends on what type of object is calling the command; see the previous
|
||||
section.
|
||||
- `session` - the [Session](Component/Sessions) Bob uses to connect to the game and control BigGuy (see also
|
||||
- `session` - the [Session](Sessions) Bob uses to connect to the game and control BigGuy (see also
|
||||
previous section).
|
||||
- `sessid` - the unique id of `self.session`, for quick lookup.
|
||||
- `account` - the [Account](Component/Accounts) Bob (see previous section).
|
||||
- `account` - the [Account](Accounts) Bob (see previous section).
|
||||
- `cmdstring` - the matched key for the command. This would be *look* in our example.
|
||||
- `args` - this is the rest of the string, except the command name. So if the string entered was
|
||||
*look at sword*, `args` would be " *at sword*". Note the space kept - Evennia would correctly
|
||||
|
|
@ -130,7 +130,7 @@ interpret `lookat sword` too. This is useful for things like `/switches` that sh
|
|||
In the `MuxCommand` class used for default commands, this space is stripped. Also see the
|
||||
`arg_regex` property if you want to enforce a space to make `lookat sword` give a command-not-found
|
||||
error.
|
||||
- `obj` - the game [Object](Component/Objects) on which this command is defined. This need not be the caller,
|
||||
- `obj` - the game [Object](Objects) on which this command is defined. This need not be the caller,
|
||||
but since `look` is a common (default) command, this is probably defined directly on *BigGuy* - so
|
||||
`obj` will point to BigGuy. Otherwise `obj` could be an Account or any interactive object with
|
||||
commands defined on it, like in the example of the "check time" command defined on a "Clock" object.
|
||||
|
|
@ -168,7 +168,7 @@ key can consist of more than one word, like "press button" or "pull left lever".
|
|||
either matches. This is important for merging cmdsets described below.
|
||||
- `aliases` (optional list) - a list of alternate names for the command (`["glance", "see", "l"]`).
|
||||
Same name rules as for `key` applies.
|
||||
- `locks` (string) - a [lock definition](Component/Locks), usually on the form `cmd:<lockfuncs>`. Locks is a
|
||||
- `locks` (string) - a [lock definition](Locks), usually on the form `cmd:<lockfuncs>`. Locks is a
|
||||
rather big topic, so until you learn more about locks, stick to giving the lockstring `"cmd:all()"`
|
||||
to make the command available to everyone (if you don't provide a lock string, this will be assigned
|
||||
for you).
|
||||
|
|
@ -180,7 +180,7 @@ by the next command by retrieving `self.caller.ndb.last_cmd`. The next run comma
|
|||
or replace the storage.
|
||||
- `arg_regex` (optional raw string): Used to force the parser to limit itself and tell it when the
|
||||
command-name ends and arguments begin (such as requiring this to be a space or a /switch). This is
|
||||
done with a regular expression. [See the arg_regex section](Component/Commands#on-arg_regex) for the details.
|
||||
done with a regular expression. [See the arg_regex section](Commands#on-arg_regex) for the details.
|
||||
- `auto_help` (optional boolean). Defaults to `True`. This allows for turning off the [auto-help
|
||||
system](Help-System#command-auto-help-system) on a per-command basis. This could be useful if you
|
||||
either want to write your help entries manually or hide the existence of a command from `help`'s
|
||||
|
|
@ -218,7 +218,7 @@ from this method will be returned from the execution as a Twisted Deferred.
|
|||
|
||||
Finally, you should always make an informative [doc
|
||||
string](http://www.python.org/dev/peps/pep-0257/#what-is-a-docstring) (`__doc__`) at the top of your
|
||||
class. This string is dynamically read by the [Help System](Component/Help-System) to create the help entry
|
||||
class. This string is dynamically read by the [Help System](Help-System) to create the help entry
|
||||
for this command. You should decide on a way to format your help and stick to that.
|
||||
|
||||
Below is how you define a simple alternative "`smile`" command:
|
||||
|
|
@ -276,7 +276,7 @@ default commands thus need to implement `parse()` at all, but can assume the
|
|||
incoming string is already split up and parsed in suitable ways by its parent.
|
||||
|
||||
Before you can actually use the command in your game, you must now store it
|
||||
within a *command set*. See the [Command Sets](Component/Command-Sets) page.
|
||||
within a *command set*. See the [Command Sets](Command-Sets) page.
|
||||
|
||||
### On arg_regex
|
||||
|
||||
|
|
@ -427,7 +427,7 @@ will show.
|
|||
|
||||
> Note again that the `yield` keyword does not store state. If the game reloads while waiting for
|
||||
the user to answer, the user will have to start over. It is not a good idea to use `yield` for
|
||||
important or complex choices, a persistent [EvMenu](Component/EvMenu) might be more appropriate in this case.
|
||||
important or complex choices, a persistent [EvMenu](EvMenu) might be more appropriate in this case.
|
||||
|
||||
## System commands
|
||||
|
||||
|
|
@ -457,7 +457,7 @@ display the "Huh?" error message.
|
|||
matches.
|
||||
- User is not allowed to execute the command (`syscmdkeys.CMD_NOPERM`) - Default is to display the
|
||||
"Huh?" error message.
|
||||
- Channel (`syscmdkeys.CMD_CHANNEL`) - This is a [Channel](Component/Communications) name of a channel you are
|
||||
- Channel (`syscmdkeys.CMD_CHANNEL`) - This is a [Channel](Communications) name of a channel you are
|
||||
subscribing to - Default is to relay the command's argument to that channel. Such commands are
|
||||
created by the Comm system on the fly depending on your subscriptions.
|
||||
- New session connection (`syscmdkeys.CMD_LOGINSTART`). This command name should be put in the
|
||||
|
|
@ -484,7 +484,7 @@ work.
|
|||
|
||||
Normally Commands are created as fixed classes and used without modification. There are however
|
||||
situations when the exact key, alias or other properties is not possible (or impractical) to pre-
|
||||
code ([Exits](Component/Commands#Exits) is an example of this).
|
||||
code ([Exits](Commands#Exits) is an example of this).
|
||||
|
||||
To create a command with a dynamic call signature, first define the command body normally in a class
|
||||
(set your `key`, `aliases` to default values), then use the following call (assuming the command
|
||||
|
|
@ -508,10 +508,10 @@ make your command completely customized at run-time.
|
|||
|
||||
*Note: This is an advanced topic.*
|
||||
|
||||
Exits are examples of the use of a [Dynamic Command](Component/Commands#Dynamic_Commands).
|
||||
Exits are examples of the use of a [Dynamic Command](Commands#Dynamic_Commands).
|
||||
|
||||
The functionality of [Exit](Component/Objects) objects in Evennia is not hard-coded in the engine. Instead
|
||||
Exits are normal [typeclassed](Component/Typeclasses) objects that auto-create a [CmdSet](Component/Commands#CmdSets) on
|
||||
The functionality of [Exit](Objects) objects in Evennia is not hard-coded in the engine. Instead
|
||||
Exits are normal [typeclassed](Typeclasses) objects that auto-create a [CmdSet](Commands#CmdSets) on
|
||||
themselves when they load. This cmdset has a single dynamically created Command with the same
|
||||
properties (key, aliases and locks) as the Exit object itself. When entering the name of the exit,
|
||||
this dynamic exit-command is triggered and (after access checks) moves the Character to the exit's
|
||||
|
|
@ -609,9 +609,9 @@ cmdset, ignore.
|
|||
- CmdSets defined on the current account, if caller is a puppeted object.
|
||||
- CmdSets defined on the Session itself.
|
||||
- The active CmdSets of eventual objects in the same location (if any). This includes commands
|
||||
on [Exits](Component/Objects#Exits).
|
||||
on [Exits](Objects#Exits).
|
||||
- Sets of dynamically created *System commands* representing available
|
||||
[Communications](Component/Communications#Channels).
|
||||
[Communications](Communications#Channels).
|
||||
7. All CmdSets *of the same priority* are merged together in groups. Grouping avoids order-
|
||||
dependent issues of merging multiple same-prio sets onto lower ones.
|
||||
8. All the grouped CmdSets are *merged* in reverse priority into one combined CmdSet according to
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ mimics the API of a `Msg` but has no connection to the database.
|
|||
## Msg
|
||||
|
||||
The `Msg` object is the basic unit of communication in Evennia. A message works a little like an
|
||||
e-mail; it always has a sender (a [Account](Component/Accounts)) and one or more recipients. The recipients
|
||||
e-mail; it always has a sender (a [Account](Accounts)) and one or more recipients. The recipients
|
||||
may be either other Accounts, or a *Channel* (see below). You can mix recipients to send the message
|
||||
to both Channels and Accounts if you like.
|
||||
|
||||
|
|
@ -22,16 +22,16 @@ have 'mailboxes' with the messages they want to keep.
|
|||
|
||||
### Properties defined on `Msg`
|
||||
|
||||
- `senders` - this is a reference to one or many [Account](Component/Accounts) or [Objects](Component/Objects) (normally
|
||||
- `senders` - this is a reference to one or many [Account](Accounts) or [Objects](Objects) (normally
|
||||
*Characters*) sending the message. This could also be an *External Connection* such as a message
|
||||
coming in over IRC/IMC2 (see below). There is usually only one sender, but the types can also be
|
||||
mixed in any combination.
|
||||
- `receivers` - a list of target [Accounts](Component/Accounts), [Objects](Component/Objects) (usually *Characters*) or
|
||||
- `receivers` - a list of target [Accounts](Accounts), [Objects](Objects) (usually *Characters*) or
|
||||
*Channels* to send the message to. The types of receivers can be mixed in any combination.
|
||||
- `header` - this is a text field for storing a title or header for the message.
|
||||
- `message` - the actual text being sent.
|
||||
- `date_sent` - when message was sent (auto-created).
|
||||
- `locks` - a [lock definition](Component/Locks).
|
||||
- `locks` - a [lock definition](Locks).
|
||||
- `hide_from` - this can optionally hold a list of objects, accounts or channels to hide this `Msg`
|
||||
from. This relationship is stored in the database primarily for optimization reasons, allowing for
|
||||
quickly post-filter out messages not intended for a given target. There is no in-game methods for
|
||||
|
|
@ -48,16 +48,16 @@ system expecting a `Msg` but when you don't actually want to save anything.
|
|||
|
||||
## Channels
|
||||
|
||||
Channels are [Typeclassed](Component/Typeclasses) entities, which mean they can be easily extended and their
|
||||
Channels are [Typeclassed](Typeclasses) entities, which mean they can be easily extended and their
|
||||
functionality modified. To change which channel typeclass Evennia uses, change
|
||||
settings.BASE_CHANNEL_TYPECLASS.
|
||||
|
||||
Channels act as generic distributors of messages. Think of them as "switch boards" redistributing
|
||||
`Msg` or `TempMsg` objects. Internally they hold a list of "listening" objects and any `Msg` (or
|
||||
`TempMsg`) sent to the channel will be distributed out to all channel listeners. Channels have
|
||||
[Locks](Component/Locks) to limit who may listen and/or send messages through them.
|
||||
[Locks](Locks) to limit who may listen and/or send messages through them.
|
||||
|
||||
The *sending* of text to a channel is handled by a dynamically created [Command](Component/Commands) that
|
||||
The *sending* of text to a channel is handled by a dynamically created [Command](Commands) that
|
||||
always have the same name as the channel. This is created for each channel by the global
|
||||
`ChannelHandler`. The Channel command is added to the Account's cmdset and normal command locks are
|
||||
used to determine which channels are possible to write to. When subscribing to a channel, you can
|
||||
|
|
@ -109,5 +109,5 @@ for channel communication (since the default ChannelCommand instead logs to a fi
|
|||
- `aliases` - alternative native names for channels
|
||||
- `desc` - optional description of channel (seen in listings)
|
||||
- `keep_log` (bool) - if the channel should store messages (default)
|
||||
- `locks` - A [lock definition](Component/Locks). Channels normally use the access_types `send, control` and
|
||||
- `locks` - A [lock definition](Locks). Channels normally use the access_types `send, control` and
|
||||
`listen`.
|
||||
|
|
@ -20,7 +20,7 @@ Effective, but not very exciting. You will most likely want to change this to be
|
|||
your game. This is simple:
|
||||
|
||||
1. Edit `mygame/server/conf/connection_screens.py`.
|
||||
1. [Reload](Setup/Start-Stop-Reload) Evennia.
|
||||
1. [Reload](../Setup/Start-Stop-Reload) Evennia.
|
||||
|
||||
Evennia will look into this module and locate all *globally defined strings* in it. These strings
|
||||
are used as the text in your connection screen and are shown to the user at startup. If more than
|
||||
|
|
@ -29,8 +29,8 @@ available.
|
|||
|
||||
### Commands available at the Connection Screen
|
||||
|
||||
You can also customize the [Commands](Component/Commands) available to use while the connection screen is
|
||||
You can also customize the [Commands](Commands) available to use while the connection screen is
|
||||
shown (`connect`, `create` etc). These commands are a bit special since when the screen is running
|
||||
the account is not yet logged in. A command is made available at the login screen by adding them to
|
||||
`UnloggedinCmdSet` in `mygame/commands/default_cmdset.py`. See [Commands](Component/Commands) and the
|
||||
`UnloggedinCmdSet` in `mygame/commands/default_cmdset.py`. See [Commands](Commands) and the
|
||||
tutorial section on how to add new commands to a default command set.
|
||||
|
|
@ -5,8 +5,8 @@
|
|||
[issue tracker](https://github.com/evennia/evennia/issues).*
|
||||
|
||||
The full set of default Evennia commands currently contains 92 commands in 9 source
|
||||
files. Our policy for adding default commands is outlined [here](Concept/Using-MUX-as-a-Standard). More
|
||||
information about how commands work can be found in the documentation for [Commands](Component/Commands).
|
||||
files. Our policy for adding default commands is outlined [here](../Concept/Using-MUX-as-a-Standard). More
|
||||
information about how commands work can be found in the documentation for [Commands](Commands).
|
||||
|
||||
|
||||
|
||||
|
|
@ -14,125 +14,125 @@ information about how commands work can be found in the documentation for [Comma
|
|||
|
||||
- [`__unloggedin_look_command`](https://github.com/evennia/evennia/wiki/Default-Command-
|
||||
Help#wiki-`--unloggedin-look-command`-cmdunconnectedlook) - look when in unlogged-in state
|
||||
- [about](Component/Default-Command-Help#wiki-about-cmdabout) - show Evennia info
|
||||
- [access](Component/Default-Command-Help#wiki-access-cmdaccess) - show your current game access
|
||||
- [addcom](Component/Default-Command-Help#wiki-addcom-cmdaddcom) - add a channel alias and/or subscribe to a
|
||||
- [about](Default-Command-Help#wiki-about-cmdabout) - show Evennia info
|
||||
- [access](Default-Command-Help#wiki-access-cmdaccess) - show your current game access
|
||||
- [addcom](Default-Command-Help#wiki-addcom-cmdaddcom) - add a channel alias and/or subscribe to a
|
||||
channel
|
||||
- [alias](Component/Default-Command-Help#wiki-alias-cmdsetobjalias) - adding permanent aliases for object
|
||||
- [allcom](Component/Default-Command-Help#wiki-allcom-cmdallcom) - perform admin operations on all channels
|
||||
- [ban](Component/Default-Command-Help#wiki-ban-cmdban) - ban an account from the server
|
||||
- [batchcode](Component/Default-Command-Help#wiki-batchcode-cmdbatchcode) - build from batch-code file
|
||||
- [batchcommands](Component/Default-Command-Help#wiki-batchcommands-cmdbatchcommands) - build from batch-
|
||||
- [alias](Default-Command-Help#wiki-alias-cmdsetobjalias) - adding permanent aliases for object
|
||||
- [allcom](Default-Command-Help#wiki-allcom-cmdallcom) - perform admin operations on all channels
|
||||
- [ban](Default-Command-Help#wiki-ban-cmdban) - ban an account from the server
|
||||
- [batchcode](Default-Command-Help#wiki-batchcode-cmdbatchcode) - build from batch-code file
|
||||
- [batchcommands](Default-Command-Help#wiki-batchcommands-cmdbatchcommands) - build from batch-
|
||||
command file
|
||||
- [boot](Component/Default-Command-Help#wiki-boot-cmdboot) - kick an account from the server.
|
||||
- [cboot](Component/Default-Command-Help#wiki-cboot-cmdcboot) - kick an account from a channel you control
|
||||
- [ccreate](Component/Default-Command-Help#wiki-ccreate-cmdchannelcreate) - create a new channel
|
||||
- [cdesc](Component/Default-Command-Help#wiki-cdesc-cmdcdesc) - describe a channel you control
|
||||
- [cdestroy](Component/Default-Command-Help#wiki-cdestroy-cmdcdestroy) - destroy a channel you created
|
||||
- [cemit](Component/Default-Command-Help#wiki-cemit-cmdcemit) - send an admin message to a channel you control
|
||||
- [channels](Component/Default-Command-Help#wiki-channels-cmdchannels) - list all channels available to you
|
||||
- [charcreate](Component/Default-Command-Help#wiki-charcreate-cmdcharcreate) - create a new character
|
||||
- [chardelete](Component/Default-Command-Help#wiki-chardelete-cmdchardelete) - delete a character - this
|
||||
- [boot](Default-Command-Help#wiki-boot-cmdboot) - kick an account from the server.
|
||||
- [cboot](Default-Command-Help#wiki-cboot-cmdcboot) - kick an account from a channel you control
|
||||
- [ccreate](Default-Command-Help#wiki-ccreate-cmdchannelcreate) - create a new channel
|
||||
- [cdesc](Default-Command-Help#wiki-cdesc-cmdcdesc) - describe a channel you control
|
||||
- [cdestroy](Default-Command-Help#wiki-cdestroy-cmdcdestroy) - destroy a channel you created
|
||||
- [cemit](Default-Command-Help#wiki-cemit-cmdcemit) - send an admin message to a channel you control
|
||||
- [channels](Default-Command-Help#wiki-channels-cmdchannels) - list all channels available to you
|
||||
- [charcreate](Default-Command-Help#wiki-charcreate-cmdcharcreate) - create a new character
|
||||
- [chardelete](Default-Command-Help#wiki-chardelete-cmdchardelete) - delete a character - this
|
||||
cannot be undone!
|
||||
- [clock](Component/Default-Command-Help#wiki-clock-cmdclock) - change channel locks of a channel you control
|
||||
- [cmdsets](Component/Default-Command-Help#wiki-cmdsets-cmdlistcmdsets) - list command sets defined on an
|
||||
- [clock](Default-Command-Help#wiki-clock-cmdclock) - change channel locks of a channel you control
|
||||
- [cmdsets](Default-Command-Help#wiki-cmdsets-cmdlistcmdsets) - list command sets defined on an
|
||||
object
|
||||
- [color](Component/Default-Command-Help#wiki-color-cmdcolortest) - testing which colors your client support
|
||||
- [command](Component/Default-Command-Help#wiki-command-objmanipcommand) - This is a parent class for some of
|
||||
- [color](Default-Command-Help#wiki-color-cmdcolortest) - testing which colors your client support
|
||||
- [command](Default-Command-Help#wiki-command-objmanipcommand) - This is a parent class for some of
|
||||
the defining objmanip commands
|
||||
- [connect](Component/Default-Command-Help#wiki-connect-cmdunconnectedconnect) - connect to the game
|
||||
- [copy](Component/Default-Command-Help#wiki-copy-cmdcopy) - copy an object and its properties
|
||||
- [cpattr](Component/Default-Command-Help#wiki-cpattr-cmdcpattr) - copy attributes between objects
|
||||
- [create](Component/Default-Command-Help#wiki-create-cmdunconnectedcreate) - create a new account account
|
||||
- [create](Component/Default-Command-Help#wiki-create-cmdcreate) - create new objects
|
||||
- [cwho](Component/Default-Command-Help#wiki-cwho-cmdcwho) - show who is listening to a channel
|
||||
- [delcom](Component/Default-Command-Help#wiki-delcom-cmddelcom) - remove a channel alias and/or unsubscribe
|
||||
- [connect](Default-Command-Help#wiki-connect-cmdunconnectedconnect) - connect to the game
|
||||
- [copy](Default-Command-Help#wiki-copy-cmdcopy) - copy an object and its properties
|
||||
- [cpattr](Default-Command-Help#wiki-cpattr-cmdcpattr) - copy attributes between objects
|
||||
- [create](Default-Command-Help#wiki-create-cmdunconnectedcreate) - create a new account account
|
||||
- [create](Default-Command-Help#wiki-create-cmdcreate) - create new objects
|
||||
- [cwho](Default-Command-Help#wiki-cwho-cmdcwho) - show who is listening to a channel
|
||||
- [delcom](Default-Command-Help#wiki-delcom-cmddelcom) - remove a channel alias and/or unsubscribe
|
||||
from channel
|
||||
- [desc](Component/Default-Command-Help#wiki-desc-cmddesc) - describe an object or the current room.
|
||||
- [destroy](Component/Default-Command-Help#wiki-destroy-cmddestroy) - permanently delete objects
|
||||
- [dig](Component/Default-Command-Help#wiki-dig-cmddig) - build new rooms and connect them to the current
|
||||
- [desc](Default-Command-Help#wiki-desc-cmddesc) - describe an object or the current room.
|
||||
- [destroy](Default-Command-Help#wiki-destroy-cmddestroy) - permanently delete objects
|
||||
- [dig](Default-Command-Help#wiki-dig-cmddig) - build new rooms and connect them to the current
|
||||
location
|
||||
- [drop](Component/Default-Command-Help#wiki-drop-cmddrop) - drop something
|
||||
- [emit](Component/Default-Command-Help#wiki-emit-cmdemit) - admin command for emitting message to multiple
|
||||
- [drop](Default-Command-Help#wiki-drop-cmddrop) - drop something
|
||||
- [emit](Default-Command-Help#wiki-emit-cmdemit) - admin command for emitting message to multiple
|
||||
objects
|
||||
- [examine](Component/Default-Command-Help#wiki-examine-cmdexamine) - get detailed information about an object
|
||||
- [find](Component/Default-Command-Help#wiki-find-cmdfind) - search the database for objects
|
||||
- [force](Component/Default-Command-Help#wiki-force-cmdforce) - forces an object to execute a command
|
||||
- [get](Component/Default-Command-Help#wiki-get-cmdget) - pick up something
|
||||
- [give](Component/Default-Command-Help#wiki-give-cmdgive) - give away something to someone
|
||||
- [help](Component/Default-Command-Help#wiki-help-cmdunconnectedhelp) - get help when in unconnected-in state
|
||||
- [help](Component/Default-Command-Help#wiki-help-cmdhelp) - View help or a list of topics
|
||||
- [home](Component/Default-Command-Help#wiki-home-cmdhome) - move to your character's home location
|
||||
- [ic](Component/Default-Command-Help#wiki-ic-cmdic) - control an object you have permission to puppet
|
||||
- [inventory](Component/Default-Command-Help#wiki-inventory-cmdinventory) - view inventory
|
||||
- [irc2chan](Component/Default-Command-Help#wiki-irc2chan-cmdirc2chan) - Link an evennia channel to an
|
||||
- [examine](Default-Command-Help#wiki-examine-cmdexamine) - get detailed information about an object
|
||||
- [find](Default-Command-Help#wiki-find-cmdfind) - search the database for objects
|
||||
- [force](Default-Command-Help#wiki-force-cmdforce) - forces an object to execute a command
|
||||
- [get](Default-Command-Help#wiki-get-cmdget) - pick up something
|
||||
- [give](Default-Command-Help#wiki-give-cmdgive) - give away something to someone
|
||||
- [help](Default-Command-Help#wiki-help-cmdunconnectedhelp) - get help when in unconnected-in state
|
||||
- [help](Default-Command-Help#wiki-help-cmdhelp) - View help or a list of topics
|
||||
- [home](Default-Command-Help#wiki-home-cmdhome) - move to your character's home location
|
||||
- [ic](Default-Command-Help#wiki-ic-cmdic) - control an object you have permission to puppet
|
||||
- [inventory](Default-Command-Help#wiki-inventory-cmdinventory) - view inventory
|
||||
- [irc2chan](Default-Command-Help#wiki-irc2chan-cmdirc2chan) - Link an evennia channel to an
|
||||
external IRC channel
|
||||
- [link](Component/Default-Command-Help#wiki-link-cmdlink) - link existing rooms together with exits
|
||||
- [lock](Component/Default-Command-Help#wiki-lock-cmdlock) - assign a lock definition to an object
|
||||
- [look](Component/Default-Command-Help#wiki-look-cmdlook) - look at location or object
|
||||
- [look](Component/Default-Command-Help#wiki-look-cmdooclook) - look while out-of-character
|
||||
- [mvattr](Component/Default-Command-Help#wiki-mvattr-cmdmvattr) - move attributes between objects
|
||||
- [name](Component/Default-Command-Help#wiki-name-cmdname) - change the name and/or aliases of an object
|
||||
- [nick](Component/Default-Command-Help#wiki-nick-cmdnick) - define a personal alias/nick by defining a string
|
||||
- [link](Default-Command-Help#wiki-link-cmdlink) - link existing rooms together with exits
|
||||
- [lock](Default-Command-Help#wiki-lock-cmdlock) - assign a lock definition to an object
|
||||
- [look](Default-Command-Help#wiki-look-cmdlook) - look at location or object
|
||||
- [look](Default-Command-Help#wiki-look-cmdooclook) - look while out-of-character
|
||||
- [mvattr](Default-Command-Help#wiki-mvattr-cmdmvattr) - move attributes between objects
|
||||
- [name](Default-Command-Help#wiki-name-cmdname) - change the name and/or aliases of an object
|
||||
- [nick](Default-Command-Help#wiki-nick-cmdnick) - define a personal alias/nick by defining a string
|
||||
to
|
||||
- [objects](Component/Default-Command-Help#wiki-objects-cmdobjects) - statistics on objects in the database
|
||||
- [ooc](Component/Default-Command-Help#wiki-ooc-cmdooc) - stop puppeting and go ooc
|
||||
- [open](Component/Default-Command-Help#wiki-open-cmdopen) - open a new exit from the current room
|
||||
- [option](Component/Default-Command-Help#wiki-option-cmdoption) - Set an account option
|
||||
- [page](Component/Default-Command-Help#wiki-page-cmdpage) - send a private message to another account
|
||||
- [password](Component/Default-Command-Help#wiki-password-cmdpassword) - change your password
|
||||
- [perm](Component/Default-Command-Help#wiki-perm-cmdperm) - set the permissions of an account/object
|
||||
- [pose](Component/Default-Command-Help#wiki-pose-cmdpose) - strike a pose
|
||||
- [py](Component/Default-Command-Help#wiki-py-cmdpy) - execute a snippet of python code
|
||||
- [quell](Component/Default-Command-Help#wiki-quell-cmdquell) - use character's permissions instead of
|
||||
- [objects](Default-Command-Help#wiki-objects-cmdobjects) - statistics on objects in the database
|
||||
- [ooc](Default-Command-Help#wiki-ooc-cmdooc) - stop puppeting and go ooc
|
||||
- [open](Default-Command-Help#wiki-open-cmdopen) - open a new exit from the current room
|
||||
- [option](Default-Command-Help#wiki-option-cmdoption) - Set an account option
|
||||
- [page](Default-Command-Help#wiki-page-cmdpage) - send a private message to another account
|
||||
- [password](Default-Command-Help#wiki-password-cmdpassword) - change your password
|
||||
- [perm](Default-Command-Help#wiki-perm-cmdperm) - set the permissions of an account/object
|
||||
- [pose](Default-Command-Help#wiki-pose-cmdpose) - strike a pose
|
||||
- [py](Default-Command-Help#wiki-py-cmdpy) - execute a snippet of python code
|
||||
- [quell](Default-Command-Help#wiki-quell-cmdquell) - use character's permissions instead of
|
||||
account's
|
||||
- [quit](Component/Default-Command-Help#wiki-quit-cmdunconnectedquit) - quit when in unlogged-in state
|
||||
- [quit](Component/Default-Command-Help#wiki-quit-cmdquit) - quit the game
|
||||
- [reload](Component/Default-Command-Help#wiki-reload-cmdreload) - reload the server
|
||||
- [reset](Component/Default-Command-Help#wiki-reset-cmdreset) - reset and reboot the server
|
||||
- [rss2chan](Component/Default-Command-Help#wiki-rss2chan-cmdrss2chan) - link an evennia channel to an
|
||||
- [quit](Default-Command-Help#wiki-quit-cmdunconnectedquit) - quit when in unlogged-in state
|
||||
- [quit](Default-Command-Help#wiki-quit-cmdquit) - quit the game
|
||||
- [reload](Default-Command-Help#wiki-reload-cmdreload) - reload the server
|
||||
- [reset](Default-Command-Help#wiki-reset-cmdreset) - reset and reboot the server
|
||||
- [rss2chan](Default-Command-Help#wiki-rss2chan-cmdrss2chan) - link an evennia channel to an
|
||||
external RSS feed
|
||||
- [say](Component/Default-Command-Help#wiki-say-cmdsay) - speak as your character
|
||||
- [script](Component/Default-Command-Help#wiki-script-cmdscript) - attach a script to an object
|
||||
- [scripts](Component/Default-Command-Help#wiki-scripts-cmdscripts) - list and manage all running scripts
|
||||
- [server](Component/Default-Command-Help#wiki-server-cmdserverload) - show server load and memory statistics
|
||||
- [service](Component/Default-Command-Help#wiki-service-cmdservice) - manage system services
|
||||
- [sessions](Component/Default-Command-Help#wiki-sessions-cmdsessions) - check your connected session(s)
|
||||
- [set](Component/Default-Command-Help#wiki-set-cmdsetattribute) - set attribute on an object or account
|
||||
- [setdesc](Component/Default-Command-Help#wiki-setdesc-cmdsetdesc) - describe yourself
|
||||
- [sethelp](Component/Default-Command-Help#wiki-sethelp-cmdsethelp) - Edit the help database.
|
||||
- [sethome](Component/Default-Command-Help#wiki-sethome-cmdsethome) - set an object's home location
|
||||
- [shutdown](Component/Default-Command-Help#wiki-shutdown-cmdshutdown) - stop the server completely
|
||||
- [spawn](Component/Default-Command-Help#wiki-spawn-cmdspawn) - spawn objects from prototype
|
||||
- [style](Component/Default-Command-Help#wiki-style-cmdstyle) - In-game style options
|
||||
- [tag](Component/Default-Command-Help#wiki-tag-cmdtag) - handles the tags of an object
|
||||
- [tel](Component/Default-Command-Help#wiki-tel-cmdteleport) - teleport object to another location
|
||||
- [time](Component/Default-Command-Help#wiki-time-cmdtime) - show server time statistics
|
||||
- [tunnel](Component/Default-Command-Help#wiki-tunnel-cmdtunnel) - create new rooms in cardinal directions
|
||||
- [say](Default-Command-Help#wiki-say-cmdsay) - speak as your character
|
||||
- [script](Default-Command-Help#wiki-script-cmdscript) - attach a script to an object
|
||||
- [scripts](Default-Command-Help#wiki-scripts-cmdscripts) - list and manage all running scripts
|
||||
- [server](Default-Command-Help#wiki-server-cmdserverload) - show server load and memory statistics
|
||||
- [service](Default-Command-Help#wiki-service-cmdservice) - manage system services
|
||||
- [sessions](Default-Command-Help#wiki-sessions-cmdsessions) - check your connected session(s)
|
||||
- [set](Default-Command-Help#wiki-set-cmdsetattribute) - set attribute on an object or account
|
||||
- [setdesc](Default-Command-Help#wiki-setdesc-cmdsetdesc) - describe yourself
|
||||
- [sethelp](Default-Command-Help#wiki-sethelp-cmdsethelp) - Edit the help database.
|
||||
- [sethome](Default-Command-Help#wiki-sethome-cmdsethome) - set an object's home location
|
||||
- [shutdown](Default-Command-Help#wiki-shutdown-cmdshutdown) - stop the server completely
|
||||
- [spawn](Default-Command-Help#wiki-spawn-cmdspawn) - spawn objects from prototype
|
||||
- [style](Default-Command-Help#wiki-style-cmdstyle) - In-game style options
|
||||
- [tag](Default-Command-Help#wiki-tag-cmdtag) - handles the tags of an object
|
||||
- [tel](Default-Command-Help#wiki-tel-cmdteleport) - teleport object to another location
|
||||
- [time](Default-Command-Help#wiki-time-cmdtime) - show server time statistics
|
||||
- [tunnel](Default-Command-Help#wiki-tunnel-cmdtunnel) - create new rooms in cardinal directions
|
||||
only
|
||||
- [typeclass](Component/Default-Command-Help#wiki-typeclass-cmdtypeclass) - set or change an object's
|
||||
- [typeclass](Default-Command-Help#wiki-typeclass-cmdtypeclass) - set or change an object's
|
||||
typeclass
|
||||
- [unban](Component/Default-Command-Help#wiki-unban-cmdunban) - remove a ban from an account
|
||||
- [unlink](Component/Default-Command-Help#wiki-unlink-cmdunlink) - remove exit-connections between rooms
|
||||
- [userpassword](Component/Default-Command-Help#wiki-userpassword-cmdnewpassword) - change the password of an
|
||||
- [unban](Default-Command-Help#wiki-unban-cmdunban) - remove a ban from an account
|
||||
- [unlink](Default-Command-Help#wiki-unlink-cmdunlink) - remove exit-connections between rooms
|
||||
- [userpassword](Default-Command-Help#wiki-userpassword-cmdnewpassword) - change the password of an
|
||||
account
|
||||
- [wall](Component/Default-Command-Help#wiki-wall-cmdwall) - make an announcement to all
|
||||
- [whisper](Component/Default-Command-Help#wiki-whisper-cmdwhisper) - Speak privately as your character to
|
||||
- [wall](Default-Command-Help#wiki-wall-cmdwall) - make an announcement to all
|
||||
- [whisper](Default-Command-Help#wiki-whisper-cmdwhisper) - Speak privately as your character to
|
||||
another
|
||||
- [who](Component/Default-Command-Help#wiki-who-cmdwho) - list who is currently online
|
||||
- [wipe](Component/Default-Command-Help#wiki-wipe-cmdwipe) - clear all attributes from an object
|
||||
- [who](Default-Command-Help#wiki-who-cmdwho) - list who is currently online
|
||||
- [wipe](Default-Command-Help#wiki-wipe-cmdwipe) - clear all attributes from an object
|
||||
|
||||
## A-Z by source file
|
||||
|
||||
- [account.py](Component/Default-Command-Help#accountpy)
|
||||
- [admin.py](Component/Default-Command-Help#adminpy)
|
||||
- [batchprocess.py](Component/Default-Command-Help#batchprocesspy)
|
||||
- [building.py](Component/Default-Command-Help#buildingpy)
|
||||
- [comms.py](Component/Default-Command-Help#commspy)
|
||||
- [general.py](Component/Default-Command-Help#generalpy)
|
||||
- [help.py](Component/Default-Command-Help#helppy)
|
||||
- [system.py](Component/Default-Command-Help#systempy)
|
||||
- [unloggedin.py](Component/Default-Command-Help#unloggedinpy)
|
||||
- [account.py](Default-Command-Help#accountpy)
|
||||
- [admin.py](Default-Command-Help#adminpy)
|
||||
- [batchprocess.py](Default-Command-Help#batchprocesspy)
|
||||
- [building.py](Default-Command-Help#buildingpy)
|
||||
- [comms.py](Default-Command-Help#commspy)
|
||||
- [general.py](Default-Command-Help#generalpy)
|
||||
- [help.py](Default-Command-Help#helppy)
|
||||
- [system.py](Default-Command-Help#systempy)
|
||||
- [unloggedin.py](Default-Command-Help#unloggedinpy)
|
||||
|
||||
## Command details
|
||||
|
||||
|
|
@ -160,7 +160,7 @@ source](https://github.com/evennia/evennia/tree/master/evennia/commands/default/
|
|||
```
|
||||
- **key:** *charcreate*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:pperm(Player)"*
|
||||
- **[locks](Locks):** *"cmd:pperm(Player)"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdCharCreate` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -179,7 +179,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *chardelete*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:pperm(Player)"*
|
||||
- **[locks](Locks):** *"cmd:pperm(Player)"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdCharDelete` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -202,7 +202,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *color*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdColorTest` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -229,7 +229,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *ic*
|
||||
- **aliases:** *puppet*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdIC` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -248,7 +248,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *look*
|
||||
- **aliases:** *l*, *ls*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdOOCLook` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -269,7 +269,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *ooc*
|
||||
- **aliases:** *unpuppet*
|
||||
- **[locks](Component/Locks):** *"cmd:pperm(Player)"*
|
||||
- **[locks](Locks):** *"cmd:pperm(Player)"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdOOC` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -294,7 +294,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *option*
|
||||
- **aliases:** *options*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdOption` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -313,7 +313,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *password*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:pperm(Player)"*
|
||||
- **[locks](Locks):** *"cmd:pperm(Player)"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdPassword` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -339,7 +339,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *quell*
|
||||
- **aliases:** *unquell*
|
||||
- **[locks](Component/Locks):** *"cmd:pperm(Player)"*
|
||||
- **[locks](Locks):** *"cmd:pperm(Player)"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdQuell` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -362,7 +362,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *quit*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdQuit` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -381,7 +381,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *sessions*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdSessions` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -402,7 +402,7 @@ Belongs to command set *'DefaultSession'* of class `SessionCmdSet` in
|
|||
```
|
||||
- **key:** *style*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdStyle` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -423,7 +423,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *who*
|
||||
- **aliases:** *doing*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdWho` in
|
||||
[account.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/account.py).
|
||||
|
|
@ -471,7 +471,7 @@ source](https://github.com/evennia/evennia/tree/master/evennia/commands/default/
|
|||
```
|
||||
- **key:** *ban*
|
||||
- **aliases:** *bans*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(ban) or perm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:perm(ban) or perm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"Admin"*
|
||||
- **Source:** class `CmdBan` in
|
||||
[admin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/admin.py).
|
||||
|
|
@ -495,7 +495,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *boot*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(boot) or perm(Admin)"*
|
||||
- **[locks](Locks):** *"cmd:perm(boot) or perm(Admin)"*
|
||||
- **[`help_category`](Help-System):** *"Admin"*
|
||||
- **Source:** class `CmdBoot` in
|
||||
[admin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/admin.py).
|
||||
|
|
@ -525,7 +525,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *emit*
|
||||
- **aliases:** *remit*, *pemit*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(emit) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(emit) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Admin"*
|
||||
- **Source:** class `CmdEmit` in
|
||||
[admin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/admin.py).
|
||||
|
|
@ -545,7 +545,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *force*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(spawn) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(spawn) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdForce` in
|
||||
[admin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/admin.py).
|
||||
|
|
@ -570,7 +570,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *perm*
|
||||
- **aliases:** *setperm*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(perm) or perm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:perm(perm) or perm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"Admin"*
|
||||
- **Source:** class `CmdPerm` in
|
||||
[admin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/admin.py).
|
||||
|
|
@ -592,7 +592,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *unban*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(unban) or perm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:perm(unban) or perm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"Admin"*
|
||||
- **Source:** class `CmdUnban` in
|
||||
[admin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/admin.py).
|
||||
|
|
@ -611,7 +611,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *userpassword*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(newpassword) or perm(Admin)"*
|
||||
- **[locks](Locks):** *"cmd:perm(newpassword) or perm(Admin)"*
|
||||
- **[`help_category`](Help-System):** *"Admin"*
|
||||
- **Source:** class `CmdNewPassword` in
|
||||
[admin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/admin.py).
|
||||
|
|
@ -631,7 +631,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *wall*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(wall) or perm(Admin)"*
|
||||
- **[locks](Locks):** *"cmd:perm(wall) or perm(Admin)"*
|
||||
- **[`help_category`](Help-System):** *"Admin"*
|
||||
- **Source:** class `CmdWall` in
|
||||
[admin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/admin.py).
|
||||
|
|
@ -665,7 +665,7 @@ source](https://github.com/evennia/evennia/tree/master/evennia/commands/default/
|
|||
```
|
||||
- **key:** *batchcode*
|
||||
- **aliases:** *batchcodes*
|
||||
- **[locks](Component/Locks):** *"cmd:superuser()"*
|
||||
- **[locks](Locks):** *"cmd:superuser()"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdBatchCode` in
|
||||
[batchprocess.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/batchprocess.py).
|
||||
|
|
@ -689,7 +689,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *batchcommands*
|
||||
- **aliases:** *batchcmd*, *batchcommand*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(batchcommands) or perm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:perm(batchcommands) or perm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdBatchCommands` in
|
||||
[batchprocess.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/batchprocess.py).
|
||||
|
|
@ -727,7 +727,7 @@ source](https://github.com/evennia/evennia/tree/master/evennia/commands/default/
|
|||
```
|
||||
- **key:** *alias*
|
||||
- **aliases:** *setobjalias*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(setobjalias) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(setobjalias) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdSetObjAlias` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -747,7 +747,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *cmdsets*
|
||||
- **aliases:** *listcmsets*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(listcmdsets) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(listcmdsets) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdListCmdSets` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -776,7 +776,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *command*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `ObjManipCommand` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -802,7 +802,7 @@ Belongs to command set *'<Unknown>'* of class `<Unknown>` in
|
|||
```
|
||||
- **key:** *copy*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(copy) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(copy) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdCopy` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -834,7 +834,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *cpattr*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(cpattr) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(cpattr) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdCpAttr` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -866,7 +866,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *create*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(create) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(create) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdCreate` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -889,7 +889,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *desc*
|
||||
- **aliases:** *describe*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(desc) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(desc) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdDesc` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -920,7 +920,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *destroy*
|
||||
- **aliases:** *del*, *delete*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(destroy) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(destroy) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdDestroy` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -953,7 +953,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *dig*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(dig) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(dig) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdDig` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -981,7 +981,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *examine*
|
||||
- **aliases:** *exam*, *ex*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(examine) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(examine) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdExamine` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1013,7 +1013,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *find*
|
||||
- **aliases:** *locate*, *search*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(find) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(find) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdFind` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1043,7 +1043,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *link*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(link) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(link) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdLink` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1084,7 +1084,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *lock*
|
||||
- **aliases:** *locks*
|
||||
- **[locks](Component/Locks):** *"cmd: perm(locks) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd: perm(locks) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdLock` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1110,7 +1110,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *mvattr*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(mvattr) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(mvattr) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdMvAttr` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1130,7 +1130,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *name*
|
||||
- **aliases:** *rename*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(rename) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(rename) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdName` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1154,7 +1154,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *open*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(open) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(open) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdOpen` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1183,7 +1183,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *script*
|
||||
- **aliases:** *addscript*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(script) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(script) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdScript` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1232,7 +1232,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *set*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(set) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(set) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdSetAttribute` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1257,7 +1257,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *sethome*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(sethome) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(sethome) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdSetHome` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1329,7 +1329,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *spawn*
|
||||
- **aliases:** *olc*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(spawn) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(spawn) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdSpawn` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1360,7 +1360,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *tag*
|
||||
- **aliases:** *tags*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(tag) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(tag) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdTag` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1397,7 +1397,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *tel*
|
||||
- **aliases:** *teleport*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(teleport) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(teleport) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdTeleport` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1433,7 +1433,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *tunnel*
|
||||
- **aliases:** *tun*
|
||||
- **[locks](Component/Locks):** *"cmd: perm(tunnel) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd: perm(tunnel) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdTunnel` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1490,7 +1490,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *typeclass*
|
||||
- **aliases:** *swap*, *parent*, *type*, *update*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(typeclass) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(typeclass) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdTypeclass` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1510,7 +1510,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *unlink*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(unlink) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(unlink) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdUnLink` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1534,7 +1534,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *wipe*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(wipe) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(wipe) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdWipe` in
|
||||
[building.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/building.py).
|
||||
|
|
@ -1562,7 +1562,7 @@ source](https://github.com/evennia/evennia/tree/master/evennia/commands/default/
|
|||
```
|
||||
- **key:** *addcom*
|
||||
- **aliases:** *aliaschan*, *chanalias*
|
||||
- **[locks](Component/Locks):** *"cmd:not pperm(channel_banned)"*
|
||||
- **[locks](Locks):** *"cmd:not pperm(channel_banned)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdAddCom` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1585,7 +1585,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *allcom*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd: not pperm(channel_banned)"*
|
||||
- **[locks](Locks):** *"cmd: not pperm(channel_banned)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdAllCom` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1607,7 +1607,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *cboot*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd: not pperm(channel_banned)"*
|
||||
- **[locks](Locks):** *"cmd: not pperm(channel_banned)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdCBoot` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1626,7 +1626,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *ccreate*
|
||||
- **aliases:** *channelcreate*
|
||||
- **[locks](Component/Locks):** *"cmd:not pperm(channel_banned) and pperm(Player)"*
|
||||
- **[locks](Locks):** *"cmd:not pperm(channel_banned) and pperm(Player)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdChannelCreate` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1646,7 +1646,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *cdesc*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:not pperm(channel_banned)"*
|
||||
- **[locks](Locks):** *"cmd:not pperm(channel_banned)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdCdesc` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1665,7 +1665,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *cdestroy*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd: not pperm(channel_banned)"*
|
||||
- **[locks](Locks):** *"cmd: not pperm(channel_banned)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdCdestroy` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1690,7 +1690,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *cemit*
|
||||
- **aliases:** *cmsg*
|
||||
- **[locks](Component/Locks):** *"cmd: not pperm(channel_banned) and pperm(Player)"*
|
||||
- **[locks](Locks):** *"cmd: not pperm(channel_banned) and pperm(Player)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdCemit` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1713,7 +1713,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *channels*
|
||||
- **aliases:** *chanlist*, *channellist*, *clist*, *comlist*, *all channels*
|
||||
- **[locks](Component/Locks):** *"cmd: not pperm(channel_banned)"*
|
||||
- **[locks](Locks):** *"cmd: not pperm(channel_banned)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdChannels` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1733,7 +1733,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *clock*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:not pperm(channel_banned)"*
|
||||
- **[locks](Locks):** *"cmd:not pperm(channel_banned)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdClock` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1752,7 +1752,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *cwho*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd: not pperm(channel_banned)"*
|
||||
- **[locks](Locks):** *"cmd: not pperm(channel_banned)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdCWho` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1775,7 +1775,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *delcom*
|
||||
- **aliases:** *delaliaschan*, *delchanalias*
|
||||
- **[locks](Component/Locks):** *"cmd:not perm(channel_banned)"*
|
||||
- **[locks](Locks):** *"cmd:not perm(channel_banned)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdDelCom` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1815,7 +1815,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *irc2chan*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:serversetting(IRC_ENABLED) and pperm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:serversetting(IRC_ENABLED) and pperm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdIRC2Chan` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1841,7 +1841,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *page*
|
||||
- **aliases:** *tell*
|
||||
- **[locks](Component/Locks):** *"cmd:not pperm(page_banned)"*
|
||||
- **[locks](Locks):** *"cmd:not pperm(page_banned)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdPage` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1875,7 +1875,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *rss2chan*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:serversetting(RSS_ENABLED) and pperm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:serversetting(RSS_ENABLED) and pperm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"Comms"*
|
||||
- **Source:** class `CmdRSS2Chan` in
|
||||
[comms.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/comms.py).
|
||||
|
|
@ -1901,7 +1901,7 @@ source](https://github.com/evennia/evennia/tree/master/evennia/commands/default/
|
|||
```
|
||||
- **key:** *access*
|
||||
- **aliases:** *groups*, *hierarchy*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdAccess` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -1921,7 +1921,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *drop*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdDrop` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -1941,7 +1941,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *get*
|
||||
- **aliases:** *grab*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdGet` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -1961,7 +1961,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *give*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdGive` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -1980,7 +1980,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *home*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(home) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(home) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdHome` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -2000,7 +2000,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *inventory*
|
||||
- **aliases:** *i*, *inv*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdInventory` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -2021,7 +2021,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *look*
|
||||
- **aliases:** *l*, *ls*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdLook` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -2072,7 +2072,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *nick*
|
||||
- **aliases:** *nicks*, *nickname*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdNick` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -2098,7 +2098,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *pose*
|
||||
- **aliases:** *:*, *emote*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdPose` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -2117,7 +2117,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *say*
|
||||
- **aliases:** *'*, *"*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdSay` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -2138,7 +2138,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *setdesc*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdSetDesc` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -2159,7 +2159,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *whisper*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdWhisper` in
|
||||
[general.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/general.py).
|
||||
|
|
@ -2187,7 +2187,7 @@ source](https://github.com/evennia/evennia/tree/master/evennia/commands/default/
|
|||
```
|
||||
- **key:** *help*
|
||||
- **aliases:** *?*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdHelp` in
|
||||
[help.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/help.py).
|
||||
|
|
@ -2222,7 +2222,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *sethelp*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(Helper)"*
|
||||
- **[locks](Locks):** *"cmd:perm(Helper)"*
|
||||
- **[`help_category`](Help-System):** *"Building"*
|
||||
- **Source:** class `CmdSetHelp` in
|
||||
[help.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/help.py).
|
||||
|
|
@ -2247,7 +2247,7 @@ source](https://github.com/evennia/evennia/tree/master/evennia/commands/default/
|
|||
```
|
||||
- **key:** *about*
|
||||
- **aliases:** *version*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"System"*
|
||||
- **Source:** class `CmdAbout` in
|
||||
[system.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/system.py).
|
||||
|
|
@ -2268,7 +2268,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *objects*
|
||||
- **aliases:** *db*, *listobjs*, *stats*, *listobjects*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(listobjects) or perm(Builder)"*
|
||||
- **[locks](Locks):** *"cmd:perm(listobjects) or perm(Builder)"*
|
||||
- **[`help_category`](Help-System):** *"System"*
|
||||
- **Source:** class `CmdObjects` in
|
||||
[system.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/system.py).
|
||||
|
|
@ -2324,7 +2324,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *py*
|
||||
- **aliases:** *!*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(py) or perm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:perm(py) or perm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"System"*
|
||||
- **Source:** class `CmdPy` in
|
||||
[system.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/system.py).
|
||||
|
|
@ -2345,7 +2345,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *reload*
|
||||
- **aliases:** *restart*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(reload) or perm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:perm(reload) or perm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"System"*
|
||||
- **Source:** class `CmdReload` in
|
||||
[system.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/system.py).
|
||||
|
|
@ -2374,7 +2374,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *reset*
|
||||
- **aliases:** *reboot*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(reload) or perm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:perm(reload) or perm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"System"*
|
||||
- **Source:** class `CmdReset` in
|
||||
[system.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/system.py).
|
||||
|
|
@ -2405,7 +2405,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *scripts*
|
||||
- **aliases:** *globalscript*, *listscripts*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(listscripts) or perm(Admin)"*
|
||||
- **[locks](Locks):** *"cmd:perm(listscripts) or perm(Admin)"*
|
||||
- **[`help_category`](Help-System):** *"System"*
|
||||
- **Source:** class `CmdScripts` in
|
||||
[system.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/system.py).
|
||||
|
|
@ -2450,7 +2450,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *server*
|
||||
- **aliases:** *serverprocess*, *serverload*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(list) or perm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:perm(list) or perm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"System"*
|
||||
- **Source:** class `CmdServerLoad` in
|
||||
[system.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/system.py).
|
||||
|
|
@ -2479,7 +2479,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *service*
|
||||
- **aliases:** *services*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(service) or perm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:perm(service) or perm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"System"*
|
||||
- **Source:** class `CmdService` in
|
||||
[system.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/system.py).
|
||||
|
|
@ -2498,7 +2498,7 @@ Belongs to command set *'DefaultCharacter'* of class `CharacterCmdSet` in
|
|||
```
|
||||
- **key:** *shutdown*
|
||||
- **aliases:**
|
||||
- **[locks](Component/Locks):** *"cmd:perm(shutdown) or perm(Developer)"*
|
||||
- **[locks](Locks):** *"cmd:perm(shutdown) or perm(Developer)"*
|
||||
- **[`help_category`](Help-System):** *"System"*
|
||||
- **Source:** class `CmdShutdown` in
|
||||
[system.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/system.py).
|
||||
|
|
@ -2518,7 +2518,7 @@ Belongs to command set *'DefaultAccount'* of class `AccountCmdSet` in
|
|||
```
|
||||
- **key:** *time*
|
||||
- **aliases:** *uptime*
|
||||
- **[locks](Component/Locks):** *"cmd:perm(time) or perm(Player)"*
|
||||
- **[locks](Locks):** *"cmd:perm(time) or perm(Player)"*
|
||||
- **[`help_category`](Help-System):** *"System"*
|
||||
- **Source:** class `CmdTime` in
|
||||
[system.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/system.py).
|
||||
|
|
@ -2546,7 +2546,7 @@ source](https://github.com/evennia/evennia/tree/master/evennia/commands/default/
|
|||
```
|
||||
- **key:** *__unloggedin_look_command*
|
||||
- **aliases:** *l*, *look*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdUnconnectedLook` in
|
||||
[unloggedin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/unloggedin.py).
|
||||
|
|
@ -2570,7 +2570,7 @@ server in specific situations.*
|
|||
```
|
||||
- **key:** *connect*
|
||||
- **aliases:** *con*, *conn*, *co*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdUnconnectedConnect` in
|
||||
[unloggedin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/unloggedin.py).
|
||||
|
|
@ -2592,7 +2592,7 @@ Belongs to command set *'DefaultUnloggedin'* of class `UnloggedinCmdSet` in
|
|||
```
|
||||
- **key:** *create*
|
||||
- **aliases:** *cre*, *cr*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdUnconnectedCreate` in
|
||||
[unloggedin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/unloggedin.py).
|
||||
|
|
@ -2612,7 +2612,7 @@ Belongs to command set *'DefaultUnloggedin'* of class `UnloggedinCmdSet` in
|
|||
```
|
||||
- **key:** *help*
|
||||
- **aliases:** *?*, *h*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdUnconnectedHelp` in
|
||||
[unloggedin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/unloggedin.py).
|
||||
|
|
@ -2633,7 +2633,7 @@ Belongs to command set *'DefaultUnloggedin'* of class `UnloggedinCmdSet` in
|
|||
```
|
||||
- **key:** *quit*
|
||||
- **aliases:** *qu*, *q*
|
||||
- **[locks](Component/Locks):** *"cmd:all()"*
|
||||
- **[locks](Locks):** *"cmd:all()"*
|
||||
- **[`help_category`](Help-System):** *"General"*
|
||||
- **Source:** class `CmdUnconnectedQuit` in
|
||||
[unloggedin.py](https://github.com/evennia/evennia/tree/master/evennia/commands/default/unloggedin.py).
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ said functions, like `{"nodename": <function>, ...}`
|
|||
## Launching the menu
|
||||
|
||||
Initializing the menu is done using a call to the `evennia.utils.evmenu.EvMenu` class. This is the
|
||||
most common way to do so - from inside a [Command](Component/Commands):
|
||||
most common way to do so - from inside a [Command](Commands):
|
||||
|
||||
```python
|
||||
# in, for example gamedir/commands/command.py
|
||||
|
|
@ -70,7 +70,7 @@ EvMenu(caller, menu_data,
|
|||
```
|
||||
|
||||
- `caller` (Object or Account): is a reference to the object using the menu. This object will get a
|
||||
new [CmdSet](Component/Command-Sets) assigned to it, for handling the menu.
|
||||
new [CmdSet](Command-Sets) assigned to it, for handling the menu.
|
||||
- `menu_data` (str, module or dict): is a module or python path to a module where the global-level
|
||||
functions will each be considered to be a menu node. Their names in the module will be the names
|
||||
by which they are referred to in the module. Importantly, function names starting with an
|
||||
|
|
@ -107,7 +107,7 @@ after
|
|||
- `startnode_input` (str or (str, dict) tuple): Pass an input text or a input text + kwargs to the
|
||||
start node as if it was entered on a fictional previous node. This can be very useful in order to
|
||||
start a menu differently depending on the Command's arguments in which it was initialized.
|
||||
- `session` (Session): Useful when calling the menu from an [Account](Component/Accounts) in
|
||||
- `session` (Session): Useful when calling the menu from an [Account](Accounts) in
|
||||
`MULTISESSION_MODDE` higher than 2, to make sure only the right Session sees the menu output.
|
||||
- `debug` (bool): If set, the `menudebug` command will be made available in the menu. Use it to
|
||||
list the current state of the menu and use `menudebug <variable>` to inspect a specific state
|
||||
|
|
@ -428,16 +428,16 @@ See `evennia/utils/evmenu.py` for the details of their default implementations.
|
|||
|
||||
## Examples:
|
||||
|
||||
- **[Simple branching menu](Component/EvMenu#example-simple-branching-menu)** - choose from options
|
||||
- **[Dynamic goto](Component/EvMenu#example-dynamic-goto)** - jumping to different nodes based on response
|
||||
- **[Set caller properties](Component/EvMenu#example-set-caller-properties)** - a menu that changes things
|
||||
- **[Getting arbitrary input](Component/EvMenu#example-get-arbitrary-input)** - entering text
|
||||
- **[Storing data between nodes](Component/EvMenu#example-storing-data-between-nodes)** - keeping states and
|
||||
- **[Simple branching menu](EvMenu#example-simple-branching-menu)** - choose from options
|
||||
- **[Dynamic goto](EvMenu#example-dynamic-goto)** - jumping to different nodes based on response
|
||||
- **[Set caller properties](EvMenu#example-set-caller-properties)** - a menu that changes things
|
||||
- **[Getting arbitrary input](EvMenu#example-get-arbitrary-input)** - entering text
|
||||
- **[Storing data between nodes](EvMenu#example-storing-data-between-nodes)** - keeping states and
|
||||
information while in the menu
|
||||
- **[Repeating the same node](Component/EvMenu#example-repeating-the-same-node)** - validating within the node
|
||||
- **[Repeating the same node](EvMenu#example-repeating-the-same-node)** - validating within the node
|
||||
before moving to the next
|
||||
- **[Full Menu](Component/EvMenu#example-full-menu):** a complete example
|
||||
- **[Yes/No prompt](Component/EvMenu#example-yesno-prompt)** - entering text with limited possible responses
|
||||
- **[Full Menu](EvMenu#example-full-menu):** a complete example
|
||||
- **[Yes/No prompt](EvMenu#example-yesno-prompt)** - entering text with limited possible responses
|
||||
(this is *not* using EvMenu but the conceptually similar yet technically unrelated `get_input`
|
||||
helper function accessed as `evennia.utils.evmenu.get_input`).
|
||||
|
||||
|
|
@ -507,7 +507,7 @@ def enter_guild:
|
|||
|
||||
This simple callable goto will analyse what happens depending on who the `caller` is. The
|
||||
`enter_guild` node will give you a choice of what to say to the guard. If you try to enter, you will
|
||||
end up in different nodes depending on (in this example) if you have the right [Tag](Component/Tags) set on
|
||||
end up in different nodes depending on (in this example) if you have the right [Tag](Tags) set on
|
||||
yourself or not. Note that since we don't include any 'key's in the option dictionary, you will just
|
||||
get to pick between numbers.
|
||||
|
||||
|
|
@ -805,7 +805,7 @@ function - for example you can't use other Python keywords like `if` inside the
|
|||
|
||||
Unless you are dealing with a relatively simple dynamic menu, defining menus with lambda's is
|
||||
probably more work than it's worth: You can create dynamic menus by instead making each node
|
||||
function more clever. See the [NPC shop tutorial](Howto/NPC-shop-Tutorial) for an example of this.
|
||||
function more clever. See the [NPC shop tutorial](../Howto/NPC-shop-Tutorial) for an example of this.
|
||||
|
||||
|
||||
## Ask for simple input
|
||||
|
|
@ -993,8 +993,8 @@ auto-created by the `list_node` decorator.
|
|||
|
||||
## Assorted notes
|
||||
|
||||
The EvMenu is implemented using [Commands](Component/Commands). When you start a new EvMenu, the user of the
|
||||
menu will be assigned a [CmdSet](Component/Command-Sets) with the commands they need to navigate the menu.
|
||||
The EvMenu is implemented using [Commands](Commands). When you start a new EvMenu, the user of the
|
||||
menu will be assigned a [CmdSet](Command-Sets) with the commands they need to navigate the menu.
|
||||
This means that if you were to, from inside the menu, assign a new command set to the caller, *you
|
||||
may override the Menu Cmdset and kill the menu*. If you want to assign cmdsets to the caller as part
|
||||
of the menu, you should store the cmdset on `caller.ndb._menutree` and wait to actually assign it
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ from evennia.utils import evmore
|
|||
|
||||
evmore.msg(receiver, long_text)
|
||||
```
|
||||
Where receiver is an [Object](Component/Objects) or a [Account](Component/Accounts). If the text is longer than the
|
||||
Where receiver is an [Object](Objects) or a [Account](Accounts). If the text is longer than the
|
||||
client's screen height (as determined by the NAWS handshake or by `settings.CLIENT_DEFAULT_HEIGHT`)
|
||||
the pager will show up, something like this:
|
||||
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ entries together for people to more easily find them. See the `help` command in-
|
|||
default categories. If you don't specify the category, "General" is assumed.
|
||||
|
||||
If you don't want your command to be picked up by the auto-help system at all (like if you want to
|
||||
write its docs manually using the info in the next section or you use a [cmdset](Component/Command-Sets) that
|
||||
write its docs manually using the info in the next section or you use a [cmdset](Command-Sets) that
|
||||
has its own help functionality) you can explicitly set `auto_help` class property to `False` in your
|
||||
command definition.
|
||||
|
||||
|
|
@ -89,7 +89,7 @@ looking for help. The topic can contain spaces and also partial matches will be
|
|||
- The *help category*. Examples are *Administration*, *Building*, *Comms* or *General*. This is an
|
||||
overall grouping of similar help topics, used by the engine to give a better overview.
|
||||
- The *text* - the help text itself, of any length.
|
||||
- locks - a [lock definition](Component/Locks). This can be used to limit access to this help entry, maybe
|
||||
- locks - a [lock definition](Locks). This can be used to limit access to this help entry, maybe
|
||||
because it's staff-only or otherwise meant to be restricted. Help commands check for `access_type`s
|
||||
`view` and `edit`. An example of a lock string would be `view:perm(Builders)`.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Inputfuncs
|
||||
|
||||
|
||||
An *inputfunc* is an Evennia function that handles a particular input (an [inputcommand](Concept/OOB)) from
|
||||
An *inputfunc* is an Evennia function that handles a particular input (an [inputcommand](../Concept/OOB)) from
|
||||
the client. The inputfunc is the last destination for the inputcommand along the [ingoing message
|
||||
path](Messagepath#the-ingoing-message-path). The inputcommand always has the form `(commandname,
|
||||
(args), {kwargs})` and Evennia will use this to try to find and call an inputfunc on the form
|
||||
|
|
@ -42,7 +42,7 @@ Evennia defines a few default inputfuncs to handle the common cases. These are d
|
|||
|
||||
This is the most common of inputcommands, and the only one supported by every traditional mud. The
|
||||
argument is usually what the user sent from their command line. Since all text input from the user
|
||||
like this is considered a [Command](Component/Commands), this inputfunc will do things like nick-replacement
|
||||
like this is considered a [Command](Commands), this inputfunc will do things like nick-replacement
|
||||
and then pass on the input to the central Commandhandler.
|
||||
|
||||
### echo
|
||||
|
|
@ -134,7 +134,7 @@ to expand. By default the following values can be retrieved:
|
|||
accepted names if given an unfamiliar callback name.
|
||||
|
||||
This will tell evennia to repeatedly call a named function at a given interval. Behind the scenes
|
||||
this will set up a [Ticker](Component/TickerHandler). Only previously acceptable functions are possible to
|
||||
this will set up a [Ticker](TickerHandler). Only previously acceptable functions are possible to
|
||||
repeat-call in this way, you'll need to overload this inputfunc to add the ones you want to offer.
|
||||
By default only two example functions are allowed, "test1" and "test2", which will just echo a text
|
||||
back at the given interval. Stop the repeat by sending `"stop": True` (note that you must include
|
||||
|
|
@ -155,7 +155,7 @@ This is a convenience wrapper for sending "stop" to the `repeat` inputfunc.
|
|||
|
||||
This sets up on-object monitoring of Attributes or database fields. Whenever the field or Attribute
|
||||
changes in any way, the outputcommand will be sent. This is using the
|
||||
[MonitorHandler](Component/MonitorHandler) behind the scenes. Pass the "stop" key to stop monitoring. Note
|
||||
[MonitorHandler](MonitorHandler) behind the scenes. Pass the "stop" key to stop monitoring. Note
|
||||
that you must supply the name also when stopping to let the system know which monitor should be
|
||||
cancelled.
|
||||
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
|
||||
For most games it is a good idea to restrict what people can do. In Evennia such restrictions are
|
||||
applied and checked by something called *locks*. All Evennia entities ([Commands](Component/Commands),
|
||||
[Objects](Component/Objects), [Scripts](Component/Scripts), [Accounts](Component/Accounts), [Help System](Component/Help-System),
|
||||
[messages](Component/Communications#Msg) and [channels](Component/Communications#Channels)) are accessed through locks.
|
||||
applied and checked by something called *locks*. All Evennia entities ([Commands](Commands),
|
||||
[Objects](Objects), [Scripts](Scripts), [Accounts](Accounts), [Help System](Help-System),
|
||||
[messages](Communications#Msg) and [channels](Communications#Channels)) are accessed through locks.
|
||||
|
||||
A lock can be thought of as an "access rule" restricting a particular use of an Evennia entity.
|
||||
Whenever another entity wants that kind of access the lock will analyze that entity in different
|
||||
|
|
@ -92,9 +92,9 @@ the default command set) actually checks for, as in the example of `delete` abov
|
|||
|
||||
Below are the access_types checked by the default commandset.
|
||||
|
||||
- [Commands](Component/Commands)
|
||||
- [Commands](Commands)
|
||||
- `cmd` - this defines who may call this command at all.
|
||||
- [Objects](Component/Objects):
|
||||
- [Objects](Objects):
|
||||
- `control` - who is the "owner" of the object. Can set locks, delete it etc. Defaults to the
|
||||
creator of the object.
|
||||
- `call` - who may call Object-commands stored on this Object except for the Object itself. By
|
||||
|
|
@ -109,26 +109,26 @@ something like `call:false()`.
|
|||
- `get`- who may pick up the object and carry it around.
|
||||
- `puppet` - who may "become" this object and control it as their "character".
|
||||
- `attrcreate` - who may create new attributes on the object (default True)
|
||||
- [Characters](Component/Objects#Characters):
|
||||
- [Characters](Objects#Characters):
|
||||
- Same as for Objects
|
||||
- [Exits](Component/Objects#Exits):
|
||||
- [Exits](Objects#Exits):
|
||||
- Same as for Objects
|
||||
- `traverse` - who may pass the exit.
|
||||
- [Accounts](Component/Accounts):
|
||||
- [Accounts](Accounts):
|
||||
- `examine` - who may examine the account's properties.
|
||||
- `delete` - who may delete the account.
|
||||
- `edit` - who may edit the account's attributes and properties.
|
||||
- `msg` - who may send messages to the account.
|
||||
- `boot` - who may boot the account.
|
||||
- [Attributes](Component/Attributes): (only checked by `obj.secure_attr`)
|
||||
- [Attributes](Attributes): (only checked by `obj.secure_attr`)
|
||||
- `attrread` - see/access attribute
|
||||
- `attredit` - change/delete attribute
|
||||
- [Channels](Component/Communications#Channels):
|
||||
- [Channels](Communications#Channels):
|
||||
- `control` - who is administrating the channel. This means the ability to delete the channel,
|
||||
boot listeners etc.
|
||||
- `send` - who may send to the channel.
|
||||
- `listen` - who may subscribe and listen to the channel.
|
||||
- [HelpEntry](Component/Help-System):
|
||||
- [HelpEntry](Help-System):
|
||||
- `examine` - who may view this help entry (usually everyone)
|
||||
- `edit` - who may edit this help entry.
|
||||
|
||||
|
|
@ -214,10 +214,10 @@ Some useful default lockfuncs (see `src/locks/lockfuncs.py` for more):
|
|||
- `false()/none()/superuser()` - give access to none. Superusers bypass the check entirely and are
|
||||
thus the only ones who will pass this check.
|
||||
- `perm(perm)` - this tries to match a given `permission` property, on an Account firsthand, on a
|
||||
Character second. See [below](Component/Locks#permissions).
|
||||
Character second. See [below](Locks#permissions).
|
||||
- `perm_above(perm)` - like `perm` but requires a "higher" permission level than the one given.
|
||||
- `id(num)/dbref(num)` - checks so the access_object has a certain dbref/id.
|
||||
- `attr(attrname)` - checks if a certain [Attribute](Component/Attributes) exists on accessing_object.
|
||||
- `attr(attrname)` - checks if a certain [Attribute](Attributes) exists on accessing_object.
|
||||
- `attr(attrname, value)` - checks so an attribute exists on accessing_object *and* has the given
|
||||
value.
|
||||
- `attr_gt(attrname, value)` - checks so accessing_object has a value larger (`>`) than the given
|
||||
|
|
@ -250,7 +250,7 @@ a Lock lookup.
|
|||
## Default locks
|
||||
|
||||
Evennia sets up a few basic locks on all new objects and accounts (if we didn't, noone would have
|
||||
any access to anything from the start). This is all defined in the root [Typeclasses](Component/Typeclasses)
|
||||
any access to anything from the start). This is all defined in the root [Typeclasses](Typeclasses)
|
||||
of the respective entity, in the hook method `basetype_setup()` (which you usually don't want to
|
||||
edit unless you want to change how basic stuff like rooms and exits store their internal variables).
|
||||
This is called once, before `at_object_creation`, so just put them in the latter method on your
|
||||
|
|
@ -261,7 +261,7 @@ control and delete the object.
|
|||
# Permissions
|
||||
|
||||
> This section covers the underlying code use of permissions. If you just want to learn how to
|
||||
practically assign permissions in-game, refer to the [Building Permissions](Concept/Building-Permissions)
|
||||
practically assign permissions in-game, refer to the [Building Permissions](../Concept/Building-Permissions)
|
||||
page, which details how you use the `perm` command.
|
||||
|
||||
A *permission* is simply a list of text strings stored in the handler `permissions` on `Objects`
|
||||
|
|
@ -316,7 +316,7 @@ a particular permission in the hierarchy will *also* grant access to those with
|
|||
access. So if you have the permission "Admin" you will also pass a lock defined as `perm(Builder)`
|
||||
or any of those levels below "Admin".
|
||||
|
||||
When doing an access check from an [Object](Component/Objects) or Character, the `perm()` lock function will
|
||||
When doing an access check from an [Object](Objects) or Character, the `perm()` lock function will
|
||||
always first use the permissions of any Account connected to that Object before checking for
|
||||
permissions on the Object. In the case of hierarchical permissions (Admins, Builders etc), the
|
||||
Account permission will always be used (this stops an Account from escalating their permission by
|
||||
|
|
@ -330,14 +330,14 @@ Here is how you use `perm` to give an account more permissions:
|
|||
perm/account/del Tommy = Builders # remove it again
|
||||
|
||||
Note the use of the `/account` switch. It means you assign the permission to the
|
||||
[Accounts](Component/Accounts) Tommy instead of any [Character](Component/Objects) that also happens to be named
|
||||
[Accounts](Accounts) Tommy instead of any [Character](Objects) that also happens to be named
|
||||
"Tommy".
|
||||
|
||||
Putting permissions on the *Account* guarantees that they are kept, *regardless* of which Character
|
||||
they are currently puppeting. This is especially important to remember when assigning permissions
|
||||
from the *hierarchy tree* - as mentioned above, an Account's permissions will overrule that of its
|
||||
character. So to be sure to avoid confusion you should generally put hierarchy permissions on the
|
||||
Account, not on their Characters (but see also [quelling](Component/Locks#Quelling)).
|
||||
Account, not on their Characters (but see also [quelling](Locks#Quelling)).
|
||||
|
||||
Below is an example of an object without any connected account
|
||||
|
||||
|
|
@ -417,7 +417,7 @@ whereas only Admins and the creator may delete it. Everyone can pick it up.
|
|||
|
||||
## A complete example of setting locks on an object
|
||||
|
||||
Assume we have two objects - one is ourselves (not superuser) and the other is an [Object](Component/Objects)
|
||||
Assume we have two objects - one is ourselves (not superuser) and the other is an [Object](Objects)
|
||||
called `box`.
|
||||
|
||||
> create/drop box
|
||||
|
|
@ -443,7 +443,7 @@ This is defined in `evennia/commands/default/general.py`. In its code we find th
|
|||
```
|
||||
|
||||
So the `get` command looks for a lock with the type *get* (not so surprising). It also looks for an
|
||||
[Attribute](Component/Attributes) on the checked object called _get_err_msg_ in order to return a customized
|
||||
[Attribute](Attributes) on the checked object called _get_err_msg_ in order to return a customized
|
||||
error message. Sounds good! Let's start by setting that on the box:
|
||||
|
||||
> set box/get_err_msg = You are not strong enough to lift this box.
|
||||
|
|
|
|||
|
|
@ -23,10 +23,10 @@ MONITOR_HANDLER.add(obj, fieldname, callback,
|
|||
|
||||
```
|
||||
|
||||
- `obj` ([Typeclassed](Component/Typeclasses) entity) - the object to monitor. Since this must be
|
||||
typeclassed, it means you can't monitor changes on [Sessions](Component/Sessions) with the monitorhandler, for
|
||||
- `obj` ([Typeclassed](Typeclasses) entity) - the object to monitor. Since this must be
|
||||
typeclassed, it means you can't monitor changes on [Sessions](Sessions) with the monitorhandler, for
|
||||
example.
|
||||
- `fieldname` (str) - the name of a field or [Attribute](Component/Attributes) on `obj`. If you want to
|
||||
- `fieldname` (str) - the name of a field or [Attribute](Attributes) on `obj`. If you want to
|
||||
monitor a database field you must specify its full name, including the starting `db_` (like
|
||||
`db_key`, `db_location` etc). Any names not starting with `db_` are instead assumed to be the names
|
||||
of Attributes. This difference matters, since the MonitorHandler will automatically know to watch
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Nicks
|
||||
|
||||
|
||||
*Nicks*, short for *Nicknames* is a system allowing an object (usually a [Account](Component/Accounts)) to
|
||||
*Nicks*, short for *Nicknames* is a system allowing an object (usually a [Account](Accounts)) to
|
||||
assign custom replacement names for other game entities.
|
||||
|
||||
Nicks are not to be confused with *Aliases*. Setting an Alias on a game entity actually changes an
|
||||
|
|
@ -75,7 +75,7 @@ You can also use [shell-type wildcards](http://www.linfo.org/wildcard.html):
|
|||
## Coding with nicks
|
||||
|
||||
Nicks are stored as the `Nick` database model and are referred from the normal Evennia
|
||||
[object](Component/Objects) through the `nicks` property - this is known as the *NickHandler*. The NickHandler
|
||||
[object](Objects) through the `nicks` property - this is known as the *NickHandler*. The NickHandler
|
||||
offers effective error checking, searches and conversion.
|
||||
|
||||
```python
|
||||
|
|
@ -101,12 +101,12 @@ offers effective error checking, searches and conversion.
|
|||
In a command definition you can reach the nick handler through `self.caller.nicks`. See the `nick`
|
||||
command in `evennia/commands/default/general.py` for more examples.
|
||||
|
||||
As a last note, The Evennia [channel](Component/Communications) alias systems are using nicks with the
|
||||
As a last note, The Evennia [channel](Communications) alias systems are using nicks with the
|
||||
`nick_type="channel"` in order to allow users to create their own custom aliases to channels.
|
||||
|
||||
# Advanced note
|
||||
|
||||
Internally, nicks are [Attributes](Component/Attributes) saved with the `db_attrype` set to "nick" (normal
|
||||
Internally, nicks are [Attributes](Attributes) saved with the `db_attrype` set to "nick" (normal
|
||||
Attributes has this set to `None`).
|
||||
|
||||
The nick stores the replacement data in the Attribute.db_value field as a tuple with four fields
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
All in-game objects in Evennia, be it characters, chairs, monsters, rooms or hand grenades are
|
||||
represented by an Evennia *Object*. Objects form the core of Evennia and is probably what you'll
|
||||
spend most time working with. Objects are [Typeclassed](Component/Typeclasses) entities.
|
||||
spend most time working with. Objects are [Typeclassed](Typeclasses) entities.
|
||||
|
||||
## How to create your own object types
|
||||
|
||||
|
|
@ -48,17 +48,17 @@ thing yourself in code:
|
|||
call manually you have to give the full path to the class. The `create.create_object` function is
|
||||
powerful and should be used for all coded object creating (so this is what you use when defining
|
||||
your own building commands). Check out the `ev.create_*` functions for how to build other entities
|
||||
like [Scripts](Component/Scripts)).
|
||||
like [Scripts](Scripts)).
|
||||
|
||||
This particular Rose class doesn't really do much, all it does it make sure the attribute
|
||||
`desc`(which is what the `look` command looks for) is pre-set, which is pretty pointless since you
|
||||
will usually want to change this at build time (using the `@desc` command or using the
|
||||
[Spawner](Component/Spawner-and-Prototypes)). The `Object` typeclass offers many more hooks that is available
|
||||
[Spawner](Spawner-and-Prototypes)). The `Object` typeclass offers many more hooks that is available
|
||||
to use though - see next section.
|
||||
|
||||
## Properties and functions on Objects
|
||||
|
||||
Beyond the properties assigned to all [typeclassed](Component/Typeclasses) objects (see that page for a list
|
||||
Beyond the properties assigned to all [typeclassed](Typeclasses) objects (see that page for a list
|
||||
of those), the Object also has the following custom properties:
|
||||
|
||||
- `aliases` - a handler that allows you to add and remove aliases from this object. Use
|
||||
|
|
@ -67,12 +67,12 @@ of those), the Object also has the following custom properties:
|
|||
- `home` is a backup location. The main motivation is to have a safe place to move the object to if
|
||||
its `location` is destroyed. All objects should usually have a home location for safety.
|
||||
- `destination` - this holds a reference to another object this object links to in some way. Its
|
||||
main use is for [Exits](Component/Objects#Exits), it's otherwise usually unset.
|
||||
- `nicks` - as opposed to aliases, a [Nick](Component/Nicks) holds a convenient nickname replacement for a
|
||||
main use is for [Exits](Objects#Exits), it's otherwise usually unset.
|
||||
- `nicks` - as opposed to aliases, a [Nick](Nicks) holds a convenient nickname replacement for a
|
||||
real name, word or sequence, only valid for this object. This mainly makes sense if the Object is
|
||||
used as a game character - it can then store briefer shorts, example so as to quickly reference game
|
||||
commands or other characters. Use nicks.add(alias, realname) to add a new one.
|
||||
- `account` - this holds a reference to a connected [Account](Component/Accounts) controlling this object (if
|
||||
- `account` - this holds a reference to a connected [Account](Accounts) controlling this object (if
|
||||
any). Note that this is set also if the controlling account is *not* currently online - to test if
|
||||
an account is online, use the `has_account` property instead.
|
||||
- `sessions` - if `account` field is set *and the account is online*, this is a list of all active
|
||||
|
|
@ -87,9 +87,9 @@ object set as their `location`).
|
|||
|
||||
The last two properties are special:
|
||||
|
||||
- `cmdset` - this is a handler that stores all [command sets](Component/Commands#Command_Sets) defined on the
|
||||
- `cmdset` - this is a handler that stores all [command sets](Commands#Command_Sets) defined on the
|
||||
object (if any).
|
||||
- `scripts` - this is a handler that manages [Scripts](Component/Scripts) attached to the object (if any).
|
||||
- `scripts` - this is a handler that manages [Scripts](Scripts) attached to the object (if any).
|
||||
|
||||
The Object also has a host of useful utility functions. See the function headers in
|
||||
`src/objects/objects.py` for their arguments and more details.
|
||||
|
|
@ -104,7 +104,7 @@ on).
|
|||
- `execute_cmd()` - Lets the object execute the given string as if it was given on the command line.
|
||||
- `move_to` - perform a full move of this object to a new location. This is the main move method
|
||||
and will call all relevant hooks, do all checks etc.
|
||||
- `clear_exits()` - will delete all [Exits](Component/Objects#Exits) to *and* from this object.
|
||||
- `clear_exits()` - will delete all [Exits](Objects#Exits) to *and* from this object.
|
||||
- `clear_contents()` - this will not delete anything, but rather move all contents (except Exits) to
|
||||
their designated `Home` locations.
|
||||
- `delete()` - deletes this object, first calling `clear_exits()` and
|
||||
|
|
@ -126,10 +126,10 @@ practice they are all pretty similar to the base Object.
|
|||
|
||||
### Characters
|
||||
|
||||
Characters are objects controlled by [Accounts](Component/Accounts). When a new Account
|
||||
Characters are objects controlled by [Accounts](Accounts). When a new Account
|
||||
logs in to Evennia for the first time, a new `Character` object is created and
|
||||
the Account object is assigned to the `account` attribute. A `Character` object
|
||||
must have a [Default Commandset](Component/Commands#Command_Sets) set on itself at
|
||||
must have a [Default Commandset](Commands#Command_Sets) set on itself at
|
||||
creation, or the account will not be able to issue any commands! If you just
|
||||
inherit your own class from `evennia.DefaultCharacter` and make sure to use
|
||||
`super()` to call the parent methods you should be fine. In
|
||||
|
|
@ -150,21 +150,21 @@ you to modify.
|
|||
*in* might be an exit, as well as *door*, *portal* or *jump out the window*. An exit has two things
|
||||
that separate them from other objects. Firstly, their *destination* property is set and points to a
|
||||
valid object. This fact makes it easy and fast to locate exits in the database. Secondly, exits
|
||||
define a special [Transit Command](Component/Commands) on themselves when they are created. This command is
|
||||
define a special [Transit Command](Commands) on themselves when they are created. This command is
|
||||
named the same as the exit object and will, when called, handle the practicalities of moving the
|
||||
character to the Exits's *destination* - this allows you to just enter the name of the exit on its
|
||||
own to move around, just as you would expect.
|
||||
|
||||
The exit functionality is all defined on the Exit typeclass, so you could in principle completely
|
||||
change how exits work in your game (it's not recommended though, unless you really know what you are
|
||||
doing). Exits are [locked](Component/Locks) using an access_type called *traverse* and also make use of a few
|
||||
doing). Exits are [locked](Locks) using an access_type called *traverse* and also make use of a few
|
||||
hook methods for giving feedback if the traversal fails. See `evennia.DefaultExit` for more info.
|
||||
In `mygame/typeclasses/exits.py` there is an empty `Exit` class for you to modify.
|
||||
|
||||
The process of traversing an exit is as follows:
|
||||
|
||||
1. The traversing `obj` sends a command that matches the Exit-command name on the Exit object. The
|
||||
[cmdhandler](Component/Commands) detects this and triggers the command defined on the Exit. Traversal always
|
||||
[cmdhandler](Commands) detects this and triggers the command defined on the Exit. Traversal always
|
||||
involves the "source" (the current location) and the `destination` (this is stored on the Exit
|
||||
object).
|
||||
1. The Exit command checks the `traverse` lock on the Exit object
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
|
||||
Evennia consists of two processes, known as *Portal* and *Server*. They can be controlled from
|
||||
inside the game or from the command line as described [here](Setup/Start-Stop-Reload).
|
||||
inside the game or from the command line as described [here](../Setup/Start-Stop-Reload).
|
||||
|
||||
If you are new to the concept, the main purpose of separating the two is to have accounts connect to
|
||||
the Portal but keep the MUD running on the Server. This way one can restart/reload the game (the
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
|
||||
*Scripts* are the out-of-character siblings to the in-character
|
||||
[Objects](Component/Objects). Scripts are so flexible that the "Script" is a bit limiting
|
||||
[Objects](Objects). Scripts are so flexible that the "Script" is a bit limiting
|
||||
- we had to pick something to name them after all. Other possible names
|
||||
(depending on what you'd use them for) would be `OOBObjects`,
|
||||
`StorageContainers` or `TimerObjects`.
|
||||
|
|
@ -14,7 +14,7 @@ Scripts can be used for many different things in Evennia:
|
|||
- They can work as timers and tickers - anything that may change with Time. But
|
||||
they can also have no time dependence at all. Note though that if all you want
|
||||
is just to have an object method called repeatedly, you should consider using
|
||||
the [TickerHandler](Component/TickerHandler) which is more limited but is specialized on
|
||||
the [TickerHandler](TickerHandler) which is more limited but is specialized on
|
||||
just this task.
|
||||
- They can describe State changes. A Script is an excellent platform for
|
||||
hosting a persistent, but unique system handler. For example, a Script could be
|
||||
|
|
@ -22,11 +22,11 @@ used as the base to track the state of a turn-based combat system. Since
|
|||
Scripts can also operate on a timer they can also update themselves regularly
|
||||
to perform various actions.
|
||||
- They can act as data stores for storing game data persistently in the database
|
||||
(thanks to its ability to have [Attributes](Component/Attributes)).
|
||||
(thanks to its ability to have [Attributes](Attributes)).
|
||||
- They can be used as OOC stores for sharing data between groups of objects, for
|
||||
example for tracking the turns in a turn-based combat system or barter exchange.
|
||||
|
||||
Scripts are [Typeclassed](Component/Typeclasses) entities and are manipulated in a similar
|
||||
Scripts are [Typeclassed](Typeclasses) entities and are manipulated in a similar
|
||||
way to how it works for other such Evennia entities:
|
||||
|
||||
```python
|
||||
|
|
@ -41,7 +41,7 @@ list_of_myscript = evennia.search_script("myscript")
|
|||
## Defining new Scripts
|
||||
|
||||
A Script is defined as a class and is created in the same way as other
|
||||
[typeclassed](Component/Typeclasses) entities. The class has several properties
|
||||
[typeclassed](Typeclasses) entities. The class has several properties
|
||||
to control the timer-component of the scripts. These are all _optional_ -
|
||||
leaving them out will just create a Script with no timer components (useful to act as
|
||||
a database store or to hold a persistent game system, for example).
|
||||
|
|
@ -104,7 +104,7 @@ If we put this script on a room, it will randomly report some weather
|
|||
to everyone in the room every 5 minutes.
|
||||
|
||||
To activate it, just add it to the script handler (`scripts`) on an
|
||||
[Room](Component/Objects). That object becomes `self.obj` in the example above. Here we
|
||||
[Room](Objects). That object becomes `self.obj` in the example above. Here we
|
||||
put it on a room called `myroom`:
|
||||
|
||||
```
|
||||
|
|
@ -144,7 +144,7 @@ command in-game.
|
|||
## Properties and functions defined on Scripts
|
||||
|
||||
A Script has all the properties of a typeclassed object, such as `db` and `ndb`(see
|
||||
[Typeclasses](Component/Typeclasses)). Setting `key` is useful in order to manage scripts (delete them by name
|
||||
[Typeclasses](Typeclasses)). Setting `key` is useful in order to manage scripts (delete them by name
|
||||
etc). These are usually set up in the Script's typeclass, but can also be assigned on the fly as
|
||||
keyword arguments to `evennia.create_script`.
|
||||
|
||||
|
|
@ -164,7 +164,7 @@ after the reload is complete).
|
|||
|
||||
There is one special property:
|
||||
|
||||
- `obj` - the [Object](Component/Objects) this script is attached to (if any). You should not need to set
|
||||
- `obj` - the [Object](Objects) this script is attached to (if any). You should not need to set
|
||||
this manually. If you add the script to the Object with `myobj.scripts.add(myscriptpath)` or give
|
||||
`myobj` as an argument to the `utils.create.create_script` function, the `obj` property will be set
|
||||
to `myobj` for you.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ ways to customize the server and expand it with your own plugins.
|
|||
|
||||
The "Settings" file referenced throughout the documentation is the file
|
||||
`mygame/server/conf/settings.py`. This is automatically created on the first run of `evennia --init`
|
||||
(see the [Getting Started](Setup/Getting-Started) page).
|
||||
(see the [Getting Started](../Setup/Getting-Started) page).
|
||||
|
||||
Your new `settings.py` is relatively bare out of the box. Evennia's core settings file is actually
|
||||
[evennia/settings_default.py](https://github.com/evennia/evennia/blob/master/evennia/settings_default.py)
|
||||
|
|
@ -66,15 +66,15 @@ other things that must run in your game but which has no database persistence.
|
|||
- `connection_screens.py` - all global string variables in this module are interpreted by Evennia as
|
||||
a greeting screen to show when an Account first connects. If more than one string variable is
|
||||
present in the module a random one will be picked.
|
||||
- `inlinefuncs.py` - this is where you can define custom [Inline functions](Concept/TextTags#inlinefuncs).
|
||||
- `inputfuncs.py` - this is where you define custom [Input functions](Component/Inputfuncs) to handle data
|
||||
- `inlinefuncs.py` - this is where you can define custom [Inline functions](../Concept/TextTags#inlinefuncs).
|
||||
- `inputfuncs.py` - this is where you define custom [Input functions](Inputfuncs) to handle data
|
||||
from the client.
|
||||
- `lockfuncs.py` - this is one of many possible modules to hold your own "safe" *lock functions* to
|
||||
make available to Evennia's [Locks](Component/Locks).
|
||||
make available to Evennia's [Locks](Locks).
|
||||
- `mssp.py` - this holds meta information about your game. It is used by MUD search engines (which
|
||||
you often have to register with) in order to display what kind of game you are running along with
|
||||
statistics such as number of online accounts and online status.
|
||||
- `oobfuncs.py` - in here you can define custom [OOB functions](Concept/OOB).
|
||||
- `oobfuncs.py` - in here you can define custom [OOB functions](../Concept/OOB).
|
||||
- `portal_services_plugin.py` - this allows for adding your own custom services/protocols to the
|
||||
Portal. It must define one particular function that will be called by Evennia at startup. There can
|
||||
be any number of service plugin modules, all will be imported and used if defined. More info can be
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@ An Evennia *Session* represents one single established connection to the server.
|
|||
Evennia session, it is possible for a person to connect multiple times, for example using different
|
||||
clients in multiple windows. Each such connection is represented by a session object.
|
||||
|
||||
A session object has its own [cmdset](Component/Command-Sets), usually the "unloggedin" cmdset. This is what
|
||||
A session object has its own [cmdset](Command-Sets), usually the "unloggedin" cmdset. This is what
|
||||
is used to show the login screen and to handle commands to create a new account (or
|
||||
[Account](Component/Accounts) in evennia lingo) read initial help and to log into the game with an existing
|
||||
[Account](Accounts) in evennia lingo) read initial help and to log into the game with an existing
|
||||
account. A session object can either be "logged in" or not. Logged in means that the user has
|
||||
authenticated. When this happens the session is associated with an Account object (which is what
|
||||
holds account-centric stuff). The account can then in turn puppet any number of objects/characters.
|
||||
|
||||
> Warning: A Session is not *persistent* - it is not a [Typeclass](Component/Typeclasses) and has no
|
||||
> Warning: A Session is not *persistent* - it is not a [Typeclass](Typeclasses) and has no
|
||||
connection to the database. The Session will go away when a user disconnects and you will lose any
|
||||
custom data on it if the server reloads. The `.db` handler on Sessions is there to present a uniform
|
||||
API (so you can assume `.db` exists even if you don't know if you receive an Object or a Session),
|
||||
|
|
@ -26,13 +26,13 @@ Here are some important properties available on (Server-)Sessions
|
|||
- `sessid` - The unique session-id. This is an integer starting from 1.
|
||||
- `address` - The connected client's address. Different protocols give different information here.
|
||||
- `logged_in` - `True` if the user authenticated to this session.
|
||||
- `account` - The [Account](Component/Accounts) this Session is attached to. If not logged in yet, this is
|
||||
- `account` - The [Account](Accounts) this Session is attached to. If not logged in yet, this is
|
||||
`None`.
|
||||
- `puppet` - The [Character/Object](Component/Objects) currently puppeted by this Account/Session combo. If
|
||||
- `puppet` - The [Character/Object](Objects) currently puppeted by this Account/Session combo. If
|
||||
not logged in or in OOC mode, this is `None`.
|
||||
- `ndb` - The [Non-persistent Attribute](Component/Attributes) handler.
|
||||
- `ndb` - The [Non-persistent Attribute](Attributes) handler.
|
||||
- `db` - As noted above, Sessions don't have regular Attributes. This is an alias to `ndb`.
|
||||
- `cmdset` - The Session's [CmdSetHandler](Component/Command-Sets)
|
||||
- `cmdset` - The Session's [CmdSetHandler](Command-Sets)
|
||||
|
||||
Session statistics are mainly used internally by Evennia.
|
||||
|
||||
|
|
@ -99,7 +99,7 @@ transparently detect which session was triggering the command (if any) and redir
|
|||
`command.msg()` is often the safest bet.
|
||||
|
||||
You can get the `session` in two main ways:
|
||||
* [Accounts](Component/Accounts) and [Objects](Component/Objects) (including Characters) have a `sessions` property.
|
||||
* [Accounts](Accounts) and [Objects](Objects) (including Characters) have a `sessions` property.
|
||||
This is a *handler* that tracks all Sessions attached to or puppeting them. Use e.g.
|
||||
`accounts.sessions.get()` to get a list of Sessions attached to that entity.
|
||||
* A Command instance has a `session` property that always points back to the Session that triggered
|
||||
|
|
@ -132,7 +132,7 @@ changes carefully.
|
|||
|
||||
*Note: This is considered an advanced topic. You don't need to know this on a first read-through.*
|
||||
|
||||
Evennia is split into two parts, the [Portal and the Server](Component/Portal-And-Server). Each side tracks
|
||||
Evennia is split into two parts, the [Portal and the Server](Portal-And-Server). Each side tracks
|
||||
its own Sessions, syncing them to each other.
|
||||
|
||||
The "Session" we normally refer to is actually the `ServerSession`. Its counter-part on the Portal
|
||||
|
|
@ -172,7 +172,7 @@ server reboot (assuming the Portal is not stopped at the same time, obviously).
|
|||
Both the Portal and Server each have a *sessionhandler* to manage the connections. These handlers
|
||||
are global entities contain all methods for relaying data across the AMP bridge. All types of
|
||||
Sessions hold a reference to their respective Sessionhandler (the property is called
|
||||
`sessionhandler`) so they can relay data. See [protocols](Concept/Custom-Protocols) for more info
|
||||
`sessionhandler`) so they can relay data. See [protocols](../Concept/Custom-Protocols) for more info
|
||||
on building new protocols.
|
||||
|
||||
To get all Sessions in the game (i.e. all currently connected clients), you access the server-side
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ be extracted from the `**kwargs` dict in the signal handler.
|
|||
used way for users to themselves create accounts during login. It passes and extra kwarg `ip` with
|
||||
the client IP of the connecting account.
|
||||
- `SIGNAL_ACCOUNT_POST_LOGIN` - this will always fire when the account has authenticated. Sends
|
||||
extra kwarg `session` with the new [Session](Component/Sessions) object involved.
|
||||
extra kwarg `session` with the new [Session](Sessions) object involved.
|
||||
- `SIGNAL_ACCCOUNT_POST_FIRST_LOGIN` - this fires just before `SIGNAL_ACCOUNT_POST_LOGIN` but only
|
||||
if
|
||||
this is the *first* connection done (that is, if there are no previous sessions connected). Also
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
|
||||
The *spawner* is a system for defining and creating individual objects from a base template called a
|
||||
*prototype*. It is only designed for use with in-game [Objects](Component/Objects), not any other type of
|
||||
*prototype*. It is only designed for use with in-game [Objects](Objects), not any other type of
|
||||
entity.
|
||||
|
||||
The normal way to create a custom object in Evennia is to make a [Typeclass](Component/Typeclasses). If you
|
||||
The normal way to create a custom object in Evennia is to make a [Typeclass](Typeclasses). If you
|
||||
haven't read up on Typeclasses yet, think of them as normal Python classes that save to the database
|
||||
behind the scenes. Say you wanted to create a "Goblin" enemy. A common way to do this would be to
|
||||
first create a `Mobile` typeclass that holds everything common to mobiles in the game, like generic
|
||||
|
|
@ -105,12 +105,12 @@ instead.
|
|||
exist.
|
||||
- `destination` - a valid `#dbref`. Only used by exits.
|
||||
- `permissions` - list of permission strings, like `["Accounts", "may_use_red_door"]`
|
||||
- `locks` - a [lock-string](Component/Locks) like `"edit:all();control:perm(Builder)"`
|
||||
- `locks` - a [lock-string](Locks) like `"edit:all();control:perm(Builder)"`
|
||||
- `aliases` - list of strings for use as aliases
|
||||
- `tags` - list [Tags](Component/Tags). These are given as tuples `(tag, category, data)`.
|
||||
- `attrs` - list of [Attributes](Component/Attributes). These are given as tuples `(attrname, value,
|
||||
- `tags` - list [Tags](Tags). These are given as tuples `(tag, category, data)`.
|
||||
- `attrs` - list of [Attributes](Attributes). These are given as tuples `(attrname, value,
|
||||
category, lockstring)`
|
||||
- Any other keywords are interpreted as non-category [Attributes](Component/Attributes) and their values.
|
||||
- Any other keywords are interpreted as non-category [Attributes](Attributes) and their values.
|
||||
This is
|
||||
convenient for simple Attributes - use `attrs` for full control of Attributes.
|
||||
|
||||
|
|
@ -119,7 +119,7 @@ Deprecated as of Evennia 0.8:
|
|||
- `ndb_<name>` - sets the value of a non-persistent attribute (`"ndb_"` is stripped from the name).
|
||||
This is simply not useful in a prototype and is deprecated.
|
||||
- `exec` - This accepts a code snippet or a list of code snippets to run. This should not be used -
|
||||
use callables or [$protfuncs](Component/Spawner-and-Prototypes#protfuncs) instead (see below).
|
||||
use callables or [$protfuncs](Spawner-and-Prototypes#protfuncs) instead (see below).
|
||||
|
||||
### Prototype values
|
||||
|
||||
|
|
@ -161,7 +161,7 @@ that you embed in strings and that has a `$` in front, like
|
|||
```
|
||||
At execution time, the place of the protfunc will be replaced with the result of that protfunc being
|
||||
called (this is always a string). A protfunc works in much the same way as an
|
||||
[InlineFunc](Concept/TextTags#inline-functions) - they are actually
|
||||
[InlineFunc](../Concept/TextTags#inline-functions) - they are actually
|
||||
parsed using the same parser - except protfuncs are run every time the prototype is used to spawn a
|
||||
new object (whereas an inlinefunc is called when a text is returned to the user).
|
||||
|
||||
|
|
@ -233,7 +233,7 @@ A prototype can be defined and stored in two ways, either in the database or as
|
|||
|
||||
### Database prototypes
|
||||
|
||||
Stored as [Scripts](Component/Scripts) in the database. These are sometimes referred to as *database-
|
||||
Stored as [Scripts](Scripts) in the database. These are sometimes referred to as *database-
|
||||
prototypes* This is the only way for in-game builders to modify and add prototypes. They have the
|
||||
advantage of being easily modifiable and sharable between builders but you need to work with them
|
||||
using in-game tools.
|
||||
|
|
|
|||
|
|
@ -10,11 +10,11 @@ currently dead.
|
|||
*Tags* are short text labels that you attach to objects so as to easily be able to retrieve and
|
||||
group them. An Evennia entity can be tagged with any number of Tags. On the database side, Tag
|
||||
entities are *shared* between all objects with that tag. This makes them very efficient but also
|
||||
fundamentally different from [Attributes](Component/Attributes), each of which always belongs to one *single*
|
||||
fundamentally different from [Attributes](Attributes), each of which always belongs to one *single*
|
||||
object.
|
||||
|
||||
In Evennia, Tags are technically also used to implement `Aliases` (alternative names for objects)
|
||||
and `Permissions` (simple strings for [Locks](Component/Locks) to check for).
|
||||
and `Permissions` (simple strings for [Locks](Locks) to check for).
|
||||
|
||||
|
||||
## Properties of Tags (and Aliases and Permissions)
|
||||
|
|
@ -26,7 +26,7 @@ unique key + category combination.
|
|||
|
||||
When Tags are assigned to game entities, these entities are actually sharing the same Tag. This
|
||||
means that Tags are not suitable for storing information about a single object - use an
|
||||
[Attribute](Component/Attributes) for this instead. Tags are a lot more limited than Attributes but this also
|
||||
[Attribute](Attributes) for this instead. Tags are a lot more limited than Attributes but this also
|
||||
makes them very quick to lookup in the database - this is the whole point.
|
||||
|
||||
Tags have the following properties, stored in the database:
|
||||
|
|
@ -52,8 +52,8 @@ free up the *category* property for any use you desire.
|
|||
|
||||
## Adding/Removing Tags
|
||||
|
||||
You can tag any *typeclassed* object, namely [Objects](Component/Objects), [Accounts](Component/Accounts),
|
||||
[Scripts](Component/Scripts) and [Channels](Component/Communications). General tags are added by the *Taghandler*. The
|
||||
You can tag any *typeclassed* object, namely [Objects](Objects), [Accounts](Accounts),
|
||||
[Scripts](Scripts) and [Channels](Communications). General tags are added by the *Taghandler*. The
|
||||
tag handler is accessed as a property `tags` on the relevant entity:
|
||||
|
||||
```python
|
||||
|
|
@ -135,7 +135,7 @@ objs = evennia.search_tag(category="bar")
|
|||
|
||||
|
||||
|
||||
There is also an in-game command that deals with assigning and using ([Object-](Component/Objects)) tags:
|
||||
There is also an in-game command that deals with assigning and using ([Object-](Objects)) tags:
|
||||
|
||||
@tag/search furniture
|
||||
|
||||
|
|
@ -166,4 +166,4 @@ That said, tag categories can be useful if you build some game system that uses
|
|||
use tag categories to make sure to separate tags created with this system from any other tags
|
||||
created elsewhere. You can then supply custom search methods that *only* find objects tagged with
|
||||
tags of that category. An example of this
|
||||
is found in the [Zone tutorial](Concept/Zones).
|
||||
is found in the [Zone tutorial](../Concept/Zones).
|
||||
|
|
@ -11,7 +11,7 @@ hard-coded to rely on the concept of the global 'tick'. Evennia has no such noti
|
|||
use tickers is very much up to the need of your game and which requirements you have. The "ticker
|
||||
recipe" is just one way of cranking the wheels.
|
||||
|
||||
The most fine-grained way to manage the flow of time is of course to use [Scripts](Component/Scripts). Many
|
||||
The most fine-grained way to manage the flow of time is of course to use [Scripts](Scripts). Many
|
||||
types of operations (weather being the classic example) are however done on multiple objects in the
|
||||
same way at regular intervals, and for this, storing separate Scripts on each object is inefficient.
|
||||
The way to do this is to use a ticker with a "subscription model" - let objects sign up to be
|
||||
|
|
@ -98,13 +98,13 @@ The `callable` can be on any form as long as it accepts the arguments you give t
|
|||
|
||||
> Note that everything you supply to the TickerHandler will need to be pickled at some point to be
|
||||
saved into the database. Most of the time the handler will correctly store things like database
|
||||
objects, but the same restrictions as for [Attributes](Component/Attributes) apply to what the TickerHandler
|
||||
objects, but the same restrictions as for [Attributes](Attributes) apply to what the TickerHandler
|
||||
may store.
|
||||
|
||||
When testing, you can stop all tickers in the entire game with `tickerhandler.clear()`. You can also
|
||||
view the currently subscribed objects with `tickerhandler.all()`.
|
||||
|
||||
See the [Weather Tutorial](Howto/Weather-Tutorial) for an example of using the TickerHandler.
|
||||
See the [Weather Tutorial](../Howto/Weather-Tutorial) for an example of using the TickerHandler.
|
||||
|
||||
### When *not* to use TickerHandler
|
||||
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@
|
|||
different game entities as Python classes, without having to modify the database schema for every
|
||||
new type.
|
||||
|
||||
In Evennia the most important game entities, [Accounts](Component/Accounts), [Objects](Component/Objects),
|
||||
[Scripts](Component/Scripts) and [Channels](Component/Communications#Channels) are all Python classes inheriting, at
|
||||
In Evennia the most important game entities, [Accounts](Accounts), [Objects](Objects),
|
||||
[Scripts](Scripts) and [Channels](Communications#Channels) are all Python classes inheriting, at
|
||||
varying distance, from `evennia.typeclasses.models.TypedObject`. In the documentation we refer to
|
||||
these objects as being "typeclassed" or even "being a typeclass".
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ important limitations. This is why we don't simply call them "classes" but "type
|
|||
|
||||
1. A typeclass can save itself to the database. This means that some properties (actually not that
|
||||
many) on the class actually represents database fields and can only hold very specific data types.
|
||||
This is detailed [below](Component/Typeclasses#about-typeclass-properties).
|
||||
This is detailed [below](Typeclasses#about-typeclass-properties).
|
||||
1. Due to its connection to the database, the typeclass' name must be *unique* across the _entire_
|
||||
server namespace. That is, there must never be two same-named classes defined anywhere. So the below
|
||||
code would give an error (since `DefaultObject` is now globally found both in this module and in the
|
||||
|
|
@ -129,8 +129,8 @@ argument; this can both be the actual class or the python path to the typeclass
|
|||
game directory. So if your `Furniture` typeclass sits in `mygame/typeclasses/furniture.py`, you
|
||||
could point to it as `typeclasses.furniture.Furniture`. Since Evennia will itself look in
|
||||
`mygame/typeclasses`, you can shorten this even further to just `furniture.Furniture`. The create-
|
||||
functions take a lot of extra keywords allowing you to set things like [Attributes](Component/Attributes) and
|
||||
[Tags](Component/Tags) all in one go. These keywords don't use the `db_*` prefix. This will also automatically
|
||||
functions take a lot of extra keywords allowing you to set things like [Attributes](Attributes) and
|
||||
[Tags](Tags) all in one go. These keywords don't use the `db_*` prefix. This will also automatically
|
||||
save the new instance to the database, so you don't need to call `save()` explicitly.
|
||||
|
||||
### About typeclass properties
|
||||
|
|
@ -178,23 +178,23 @@ returns the string form "#id".
|
|||
|
||||
The typeclassed entity has several common handlers:
|
||||
|
||||
- `tags` - the [TagHandler](Component/Tags) that handles tagging. Use `tags.add()` , `tags.get()` etc.
|
||||
- `locks` - the [LockHandler](Component/Locks) that manages access restrictions. Use `locks.add()`,
|
||||
- `tags` - the [TagHandler](Tags) that handles tagging. Use `tags.add()` , `tags.get()` etc.
|
||||
- `locks` - the [LockHandler](Locks) that manages access restrictions. Use `locks.add()`,
|
||||
`locks.get()` etc.
|
||||
- `attributes` - the [AttributeHandler](Component/Attributes) that manages Attributes on the object. Use
|
||||
- `attributes` - the [AttributeHandler](Attributes) that manages Attributes on the object. Use
|
||||
`attributes.add()`
|
||||
etc.
|
||||
- `db` (DataBase) - a shortcut property to the AttributeHandler; allowing `obj.db.attrname = value`
|
||||
- `nattributes` - the [Non-persistent AttributeHandler](Component/Attributes) for attributes not saved in the
|
||||
- `nattributes` - the [Non-persistent AttributeHandler](Attributes) for attributes not saved in the
|
||||
database.
|
||||
- `ndb` (NotDataBase) - a shortcut property to the Non-peristent AttributeHandler. Allows
|
||||
`obj.ndb.attrname = value`
|
||||
|
||||
|
||||
Each of the typeclassed entities then extend this list with their own properties. Go to the
|
||||
respective pages for [Objects](Component/Objects), [Scripts](Component/Scripts), [Accounts](Component/Accounts) and
|
||||
[Channels](Component/Communications) for more info. It's also recommended that you explore the available
|
||||
entities using [Evennia's flat API](Coding/Evennia-API) to explore which properties and methods they have
|
||||
respective pages for [Objects](Objects), [Scripts](Scripts), [Accounts](Accounts) and
|
||||
[Channels](Communications) for more info. It's also recommended that you explore the available
|
||||
entities using [Evennia's flat API](../Evennia-API) to explore which properties and methods they have
|
||||
available.
|
||||
|
||||
### Overloading hooks
|
||||
|
|
@ -207,7 +207,7 @@ are the `at_login` hook of Accounts and the `at_repeat` hook of Scripts.
|
|||
### Querying for typeclasses
|
||||
|
||||
Most of the time you search for objects in the database by using convenience methods like the
|
||||
`caller.search()` of [Commands](Component/Commands) or the search functions like `evennia.search_objects`.
|
||||
`caller.search()` of [Commands](Commands) or the search functions like `evennia.search_objects`.
|
||||
|
||||
You can however also query for them directly using [Django's query
|
||||
language](https://docs.djangoproject.com/en/1.7/topics/db/queries/). This makes use of a _database
|
||||
|
|
@ -251,7 +251,7 @@ If you already have created instances of Typeclasses, you can modify the *Python
|
|||
due to how Python inheritance works your changes will automatically be applied to all children once
|
||||
you have reloaded the server.
|
||||
|
||||
However, database-saved data, like `db_*` fields, [Attributes](Component/Attributes), [Tags](Component/Tags) etc, are
|
||||
However, database-saved data, like `db_*` fields, [Attributes](Attributes), [Tags](Tags) etc, are
|
||||
not themselves embedded into the class and will *not* be updated automatically. This you need to
|
||||
manage yourself, by searching for all relevant objects and updating or adding the data:
|
||||
|
||||
|
|
@ -325,7 +325,7 @@ Technically, typeclasses are [Django proxy
|
|||
models](https://docs.djangoproject.com/en/1.7/topics/db/models/#proxy-models). The only database
|
||||
models that are "real" in the typeclass system (that is, are represented by actual tables in the
|
||||
database) are `AccountDB`, `ObjectDB`, `ScriptDB` and `ChannelDB` (there are also
|
||||
[Attributes](Component/Attributes) and [Tags](Component/Tags) but they are not typeclasses themselves). All the
|
||||
[Attributes](Attributes) and [Tags](Tags) but they are not typeclasses themselves). All the
|
||||
subclasses of them are "proxies", extending them with Python code without actually modifying the
|
||||
database layout.
|
||||
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ line quite pointless for processing any data from the function. Instead one has
|
|||
- `at_err_kwargs` - an optional dictionary that will be fed as keyword arguments to the `at_err`
|
||||
errback.
|
||||
|
||||
An example of making an asynchronous call from inside a [Command](Component/Commands) definition:
|
||||
An example of making an asynchronous call from inside a [Command](../Component/Commands) definition:
|
||||
|
||||
```python
|
||||
from evennia import utils, Command
|
||||
|
|
@ -139,7 +139,7 @@ sleep.
|
|||
```
|
||||
|
||||
This will delay the execution of the callback for 10 seconds. This function is explored much more in
|
||||
the [Command Duration Tutorial](Howto/Command-Duration).
|
||||
the [Command Duration Tutorial](../Howto/Command-Duration).
|
||||
|
||||
You can also try the following snippet just see how it works:
|
||||
|
||||
|
|
|
|||
|
|
@ -114,14 +114,14 @@ is not what you want in this case.
|
|||
|
||||
- **cboot mychannel = thomas** -- Boot a subscriber from a channel you control
|
||||
- **clock mychannel = control:perm(Admin);listen:all();send:all()** -- Fine control of access to
|
||||
your channel using [lock definitions](Component/Locks).
|
||||
your channel using [lock definitions](../Component/Locks).
|
||||
|
||||
Locking a specific command (like `page`) is accomplished like so:
|
||||
1. Examine the source of the command. [The default `page` command class](
|
||||
https://github.com/evennia/evennia/blob/master/evennia/commands/default/comms.py#L686) has the lock
|
||||
string **"cmd:not pperm(page_banned)"**. This means that unless the player has the 'permission'
|
||||
"page_banned" they can use this command. You can assign any lock string to allow finer customization
|
||||
in your commands. You might look for the value of an [Attribute](Component/Attributes) or [Tag](Component/Tags), your
|
||||
in your commands. You might look for the value of an [Attribute](../Component/Attributes) or [Tag](../Component/Tags), your
|
||||
current location etc.
|
||||
2. **perm/account thomas = page_banned** -- Give the account the 'permission' which causes (in this
|
||||
case) the lock to fail.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
|
||||
*OBS: This gives only a brief introduction to the access system. Locks and permissions are fully
|
||||
detailed* [here](Component/Locks).
|
||||
detailed* [here](../Component/Locks).
|
||||
|
||||
## The super user
|
||||
|
||||
|
|
@ -17,7 +17,7 @@ but one superuser.
|
|||
|
||||
Whereas permissions can be used for anything, those put in `settings.PERMISSION_HIERARCHY` will have
|
||||
a ranking relative each other as well. We refer to these types of permissions as *hierarchical
|
||||
permissions*. When building locks to check these permissions, the `perm()` [lock function](Component/Locks) is
|
||||
permissions*. When building locks to check these permissions, the `perm()` [lock function](../Component/Locks) is
|
||||
used. By default Evennia creates the following hierarchy (spelled exactly like this):
|
||||
|
||||
1. **Developers** basically have the same access as superusers except that they do *not* sidestep
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
# Command System
|
||||
|
||||
- [Commands](Component/Commands)
|
||||
- [Command Sets](Component/Command-Sets)
|
||||
- [Command Auto-help](Component/Help-System#command-auto-help-system)
|
||||
- [Commands](../Component/Commands)
|
||||
- [Command Sets](../Component/Command-Sets)
|
||||
- [Command Auto-help](../Component/Help-System#command-auto-help-system)
|
||||
|
||||
See also:
|
||||
- [Default Command Help](Component/Default-Command-Help)
|
||||
- [Adding Command Tutorial](Howto/StartingTutorial/Adding-Command-Tutorial)
|
||||
- [Default Command Help](../Component/Default-Command-Help)
|
||||
- [Adding Command Tutorial](../Howto/Starting/Adding-Command-Tutorial)
|
||||
|
|
@ -5,9 +5,9 @@
|
|||
their own custom client protocol.*
|
||||
|
||||
|
||||
A [PortalSession](Component/Sessions#Portal-and-Server-Sessions) is the basic data object representing an
|
||||
A [PortalSession](../Component/Sessions#Portal-and-Server-Sessions) is the basic data object representing an
|
||||
external
|
||||
connection to the Evennia [Portal](Component/Portal-And-Server) -- usually a human player running a mud client
|
||||
connection to the Evennia [Portal](../Component/Portal-And-Server) -- usually a human player running a mud client
|
||||
of some kind. The way they connect (the language the player's client and Evennia use to talk to
|
||||
each other) is called the connection *Protocol*. The most common such protocol for MUD:s is the
|
||||
*Telnet* protocol. All Portal Sessions are stored and managed by the Portal's *sessionhandler*.
|
||||
|
|
@ -27,7 +27,7 @@ You <->
|
|||
InputFunc
|
||||
```
|
||||
|
||||
(See the [Message Path](Concept/Messagepath) for the bigger picture of how data flows through Evennia). The
|
||||
(See the [Message Path](Messagepath) for the bigger picture of how data flows through Evennia). The
|
||||
parts that needs to be customized to make your own custom protocol is the `Protocol + PortalSession`
|
||||
(which translates between data coming in/out over the wire to/from Evennia internal representation)
|
||||
as well as the `InputFunc` (which handles incoming data).
|
||||
|
|
@ -219,11 +219,11 @@ in our case means sending "foo" across the network.
|
|||
### Receiving data
|
||||
|
||||
Just because the protocol is there, does not mean Evennia knows what to do with it. An
|
||||
[Inputfunc](Component/Inputfuncs) must exist to receive it. In the case of the `text` input exemplified above,
|
||||
[Inputfunc](../Component/Inputfuncs) must exist to receive it. In the case of the `text` input exemplified above,
|
||||
Evennia alredy handles this input - it will parse it as a Command name followed by its inputs. So
|
||||
handle that you need to simply add a cmdset with commands on your receiving Session (and/or the
|
||||
Object/Character it is puppeting). If not you may need to add your own Inputfunc (see the
|
||||
[Inputfunc](Component/Inputfuncs) page for how to do this.
|
||||
[Inputfunc](../Component/Inputfuncs) page for how to do this.
|
||||
|
||||
These might not be as clear-cut in all protocols, but the principle is there. These four basic
|
||||
components - however they are accessed - links to the *Portal Session*, which is the actual common
|
||||
|
|
|
|||
|
|
@ -10,16 +10,16 @@ Guest accounts are turned off by default. To activate, add this to your `game/se
|
|||
GUEST_ENABLED = True
|
||||
|
||||
Henceforth users can use `connect guest` (in the default command set) to login with a guest account.
|
||||
You may need to change your [Connection Screen](Component/Connection-Screen) to inform them of this
|
||||
You may need to change your [Connection Screen](../Component/Connection-Screen) to inform them of this
|
||||
possibility. Guest accounts work differently from normal accounts - they are automatically *deleted*
|
||||
whenever the user logs off or the server resets (but not during a reload). They are literally re-
|
||||
usable throw-away accounts.
|
||||
|
||||
You can add a few more variables to your `settings.py` file to customize your guests:
|
||||
|
||||
- `BASE_GUEST_TYPECLASS` - the python-path to the default [typeclass](Component/Typeclasses) for guests.
|
||||
- `BASE_GUEST_TYPECLASS` - the python-path to the default [typeclass](../Component/Typeclasses) for guests.
|
||||
Defaults to `"typeclasses.accounts.Guest"`.
|
||||
- `PERMISSION_GUEST_DEFAULT` - [permission level](Component/Locks) for guest accounts. Defaults to `"Guests"`,
|
||||
- `PERMISSION_GUEST_DEFAULT` - [permission level](../Component/Locks) for guest accounts. Defaults to `"Guests"`,
|
||||
which is the lowest permission level in the hierarchy.
|
||||
- `GUEST_START_LOCATION` - the `#dbref` to the starting location newly logged-in guests should
|
||||
appear at. Defaults to `"#2` (Limbo).
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ Alternatively you might have the language but find the translation bad ... You a
|
|||
improve the situation!
|
||||
|
||||
To start a new translation you need to first have cloned the Evennia repositry with GIT and
|
||||
activated a python virtualenv as described on the [Getting Started](Setup/Getting-Started) page. You now
|
||||
activated a python virtualenv as described on the [Getting Started](../Setup/Getting-Started) page. You now
|
||||
need to `cd` to the `evennia/` directory. This is *not* your created game folder but the main
|
||||
Evennia library folder. If you see a folder `locale/` then you are in the right place. From here you
|
||||
run:
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ The client sends data to Evennia in two ways.
|
|||
- When first connecting, the client can send data to the server about its
|
||||
capabilities. This is things like "I support xterm256 but not unicode" and is
|
||||
mainly used when a Telnet client connects. This is called a "handshake" and
|
||||
will generally set some flags on the [Portal Session](Component/Portal-And-Server) that
|
||||
will generally set some flags on the [Portal Session](../Component/Portal-And-Server) that
|
||||
are later synced to the Server Session. Since this is not something the player
|
||||
controls, we'll not explore this further here.
|
||||
- The client can send an *inputcommand* to the server. Traditionally this only
|
||||
|
|
@ -34,7 +34,7 @@ The client sends data to Evennia in two ways.
|
|||
the client may send commands based on a timer or some trigger.
|
||||
|
||||
Exactly how the inputcommand looks when it travels from the client to Evennia
|
||||
depends on the [Protocol](Concept/Custom-Protocols) used:
|
||||
depends on the [Protocol](Custom-Protocols) used:
|
||||
- Telnet: A string. If GMCP or MSDP OOB protocols are used, this string will
|
||||
be formatted in a special way, but it's still a raw string. If Telnet SSL is
|
||||
active, the string will be encrypted.
|
||||
|
|
@ -73,7 +73,7 @@ it belongs. This is then sent over the AMP connection.
|
|||
### ServerSessionHandler (ingoing)
|
||||
|
||||
On the Server side, the AMP unpickles the data and associates the session id with the server-side
|
||||
[Session](Component/Sessions). Data and Session are passed to the server-side `SessionHandler.data_in`. This
|
||||
[Session](../Component/Sessions). Data and Session are passed to the server-side `SessionHandler.data_in`. This
|
||||
in turn calls `ServerSession.data_in()`
|
||||
|
||||
### ServerSession (ingoing)
|
||||
|
|
@ -101,7 +101,7 @@ not found, an error will be raised.
|
|||
|
||||
### Inputfunc
|
||||
|
||||
The [Inputfunc](Component/Inputfuncs) must be on the form `func(session, *args, **kwargs)`. An exception is
|
||||
The [Inputfunc](../Component/Inputfuncs) must be on the form `func(session, *args, **kwargs)`. An exception is
|
||||
the `default` inputfunc which has form `default(session, cmdname, *args, **kwargs)`, where `cmdname`
|
||||
is the un-matched inputcommand string.
|
||||
|
||||
|
|
@ -175,7 +175,7 @@ In the *ServerSessionhandler*, the keywords from the `msg` method are collated i
|
|||
This will intelligently convert different input to the same form. So `msg("Hello")` will end up as
|
||||
an outputcommand `("text", ("Hello",), {})`.
|
||||
|
||||
This is also the point where [Inlinefuncs](Concept/TextTags#inline-functions) are parsed, depending on the
|
||||
This is also the point where [Inlinefuncs](TextTags#inline-functions) are parsed, depending on the
|
||||
session to receive the data. Said data is pickled together with the Session id then sent over the
|
||||
AMP bridge.
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ sufficient for most use cases. But if you aim to build a large stand-alone syste
|
|||
your storage requirements into those may be more complex than you bargain for. Examples may be to
|
||||
store guild data for guild members to be able to change, tracking the flow of money across a game-
|
||||
wide economic system or implement other custom game systems that requires the storage of custom data
|
||||
in a quickly accessible way. Whereas [Tags](Component/Tags) or [Scripts](Component/Scripts) can handle many situations,
|
||||
in a quickly accessible way. Whereas [Tags](../Component/Tags) or [Scripts](../Component/Scripts) can handle many situations,
|
||||
sometimes things may be easier to handle by adding your own database model.
|
||||
|
||||
## Overview of database tables
|
||||
|
|
@ -81,7 +81,7 @@ you put `myapp` and don't forget the comma at the end of the tuple):
|
|||
evennia migrate
|
||||
|
||||
This will add your new database table to the database. If you have put your game under version
|
||||
control (if not, [you should](Coding/Version-Control)), don't forget to `git add myapp/*` to add all items
|
||||
control (if not, [you should](../Coding/Version-Control)), don't forget to `git add myapp/*` to add all items
|
||||
to version control.
|
||||
|
||||
## Defining your models
|
||||
|
|
@ -113,7 +113,7 @@ We create four fields: two character fields of limited length and one text field
|
|||
maximum length. Finally we create a field containing the current time of us creating this object.
|
||||
|
||||
> The `db_date_created` field, with exactly this name, is *required* if you want to be able to store
|
||||
instances of your custom model in an Evennia [Attribute](Component/Attributes). It will automatically be set
|
||||
instances of your custom model in an Evennia [Attribute](../Component/Attributes). It will automatically be set
|
||||
upon creation and can after that not be changed. Having this field will allow you to do e.g.
|
||||
`obj.db.myinstance = mydatastore`. If you know you'll never store your model instances in Attributes
|
||||
the `db_date_created` field is optional.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ window pane.
|
|||
## Briefly on input/outputcommands
|
||||
|
||||
Inside Evennia, all server-client communication happens in the same way (so plain text is also an
|
||||
'OOB message' as far as Evennia is concerned). The message follows the [Message Path](Concept/Messagepath).
|
||||
'OOB message' as far as Evennia is concerned). The message follows the [Message Path](Messagepath).
|
||||
You should read up on that if you are unfamiliar with it. As the message travels along the path it
|
||||
has a standardized internal form: a tuple with a string, a tuple and a dict:
|
||||
|
||||
|
|
@ -16,9 +16,9 @@ has a standardized internal form: a tuple with a string, a tuple and a dict:
|
|||
|
||||
This is often referred to as an *inputcommand* or *outputcommand*, depending on the direction it's
|
||||
traveling. The end point for an inputcommand, (the 'Evennia-end' of the message path) is a matching
|
||||
[Inputfunc](Component/Inputfuncs). This function is called as `cmdname(session, *args, **kwargs)` where
|
||||
[Inputfunc](../Component/Inputfuncs). This function is called as `cmdname(session, *args, **kwargs)` where
|
||||
`session` is the Session-source of the command. Inputfuncs can easily be added by the developer to
|
||||
support/map client commands to actions inside Evennia (see the [inputfunc](Component/Inputfuncs) page for more
|
||||
support/map client commands to actions inside Evennia (see the [inputfunc](../Component/Inputfuncs) page for more
|
||||
details).
|
||||
|
||||
When a message is outgoing (at the 'Client-end' of the message path) the outputcommand is handled by
|
||||
|
|
@ -26,7 +26,7 @@ a matching *Outputfunc*. This is responsible for converting the internal Evennia
|
|||
form suitable to send over the wire to the Client. Outputfuncs are hard-coded. Which is chosen and
|
||||
how it processes the outgoing data depends on the nature of the client it's connected to. The only
|
||||
time one would want to add new outputfuncs is as part of developing support for a new Evennia
|
||||
[Protocol](Concept/Custom-Protocols).
|
||||
[Protocol](Custom-Protocols).
|
||||
|
||||
## Sending and receiving an OOB message
|
||||
|
||||
|
|
@ -59,7 +59,7 @@ drop any other types of outputfuncs.
|
|||
you turn off telnet completely and only rely on the webclient, you should never rely on non-`text`
|
||||
OOB messages always reaching all targets.
|
||||
|
||||
[Inputfuncs](Component/Inputfuncs) lists the default inputfuncs available to handle incoming OOB messages. To
|
||||
[Inputfuncs](../Component/Inputfuncs) lists the default inputfuncs available to handle incoming OOB messages. To
|
||||
accept more you need to add more inputfuncs (see that page for more info).
|
||||
|
||||
## Supported OOB protocols
|
||||
|
|
|
|||
|
|
@ -90,5 +90,5 @@ Adding advanced and flexible building commands to your game is easy and will pro
|
|||
satisfy most creative builders. However, if you really, *really* want to offer online coding, there
|
||||
is of course nothing stopping you from adding that to Evennia, no matter our recommendations. You
|
||||
could even re-implement MUX' softcode in Python should you be very ambitious. The
|
||||
[in-game-python](Contrib/Dialogues-in-events) is an optional
|
||||
[in-game-python](../Contrib/Dialogues-in-events) is an optional
|
||||
pseudo-softcode plugin aimed at developers wanting to script their game from inside it.
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
This documentation details the various text tags supported by Evennia, namely *colours*, *command
|
||||
links* and *inline functions*.
|
||||
|
||||
There is also an [Understanding Color Tags](Howto/Understanding-Color-Tags) tutorial which expands on the
|
||||
There is also an [Understanding Color Tags](../Howto/Understanding-Color-Tags) tutorial which expands on the
|
||||
use of ANSI color tags and the pitfalls of mixing ANSI and Xterms256 color tags in the same context.
|
||||
|
||||
## Coloured text
|
||||
|
|
@ -23,7 +23,7 @@ equipment by people who are blind or have otherwise diminished eyesight.
|
|||
|
||||
So a good rule of thumb is to use colour to enhance your game but don't *rely* on it to display
|
||||
critical information. If you are coding the game, you can add functionality to let users disable
|
||||
colours as they please, as described [here](Howto/Manually-Configuring-Color).
|
||||
colours as they please, as described [here](../Howto/Manually-Configuring-Color).
|
||||
|
||||
To see which colours your client support, use the default `@color` command. This will list all
|
||||
available colours for ANSI and Xterm256 along with the codes you use for them. You can find a list
|
||||
|
|
@ -37,7 +37,7 @@ available in all but the most ancient mud clients. The ANSI colours are **r**ed,
|
|||
first letter except for black which is abbreviated with the letter **x**. In ANSI there are "bright"
|
||||
and "normal" (darker) versions of each color, adding up to a total of 16 colours to use for
|
||||
foreground text. There are also 8 "background" colours. These have no bright alternative in ANSI
|
||||
(but Evennia uses the [Xterm256](Concept/TextTags#xterm256-colours) extension behind the scenes to offer
|
||||
(but Evennia uses the [Xterm256](TextTags#xterm256-colours) extension behind the scenes to offer
|
||||
them anyway).
|
||||
|
||||
To colour your text you put special tags in it. Evennia will parse these and convert them to the
|
||||
|
|
@ -76,7 +76,7 @@ set bright/normal explicitly. Technically, `|h|!G` is identical to `|g`.
|
|||
|
||||
> Note: The ANSI standard does not actually support bright backgrounds like `|[r` - the standard
|
||||
only supports "normal" intensity backgrounds. To get around this Evennia instead implements these
|
||||
as [Xterm256 colours](Concept/TextTags#xterm256-colours) behind the scenes. If the client does not support
|
||||
as [Xterm256 colours](TextTags#xterm256-colours) behind the scenes. If the client does not support
|
||||
Xterm256 the ANSI colors will be used instead and there will be no visible difference between using
|
||||
upper- and lower-case background tags.
|
||||
|
||||
|
|
@ -269,7 +269,7 @@ errors if desired).
|
|||
Note that whereas the function should accept `**kwargs`, keyword inputs are *not* usable in the call
|
||||
to the inlinefunction. The `kwargs` part is instead intended for Evennia to be able to supply extra
|
||||
information. Currently Evennia sends a single keyword to every inline function and that is
|
||||
`session`, which holds the [serversession](Component/Sessions) this text is targeted at. Through the session
|
||||
`session`, which holds the [serversession](../Component/Sessions) this text is targeted at. Through the session
|
||||
object, a lot of dynamic possibilities are opened up for your inline functions.
|
||||
|
||||
The `settings.INLINEFUNC_MODULES` configuration option is a list that decides which modules should
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ Example: To override or modify `evennia/web/website/template/website/index.html`
|
|||
add/modify `mygame/web/template_overrides/website/index.html`.
|
||||
|
||||
The detailed description on how to customize the website is best described in tutorial form. See the
|
||||
[Web Tutorial](Howto/StartingTutorial/Web-Tutorial) for more information.
|
||||
[Web Tutorial](../Howto/Starting/Web-Tutorial) for more information.
|
||||
|
||||
### Overloading Django views
|
||||
|
||||
|
|
@ -103,7 +103,7 @@ you will also log all requests in `mygame/server/logs/http_requests.log`.
|
|||
|
||||
Evennia comes with a MUD client accessible from a normal web browser. During
|
||||
development you can try it at `http://localhost:4001/webclient`.
|
||||
[See the Webclient page](Component/Webclient) for more details.
|
||||
[See the Webclient page](../Component/Webclient) for more details.
|
||||
|
||||
|
||||
## The Django 'Admin' Page
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ Many MUD codebases hardcode zones as part of the engine and database. Evennia d
|
|||
distinction due to the fact that rooms themselves are meant to be customized to any level anyway.
|
||||
Below is a suggestion for how to implement zones in Evennia.
|
||||
|
||||
All objects in Evennia can hold any number of [Tags](Component/Tags). Tags are short labels that you attach to
|
||||
All objects in Evennia can hold any number of [Tags](../Component/Tags). Tags are short labels that you attach to
|
||||
objects. They make it very easy to retrieve groups of objects. An object can have any number of
|
||||
different tags. So let's attach the relevant tag to our forest:
|
||||
|
||||
|
|
@ -47,7 +47,7 @@ Henceforth you can then easily retrieve only objects with a given tag:
|
|||
|
||||
The tagging or aliasing systems above don't instill any sort of functional difference between a
|
||||
magical forest room and a normal one - they are just arbitrary ways to mark objects for quick
|
||||
retrieval later. Any functional differences must be expressed using [Typeclasses](Component/Typeclasses).
|
||||
retrieval later. Any functional differences must be expressed using [Typeclasses](../Component/Typeclasses).
|
||||
|
||||
Of course, an alternative way to implement zones themselves is to have all rooms/objects in a zone
|
||||
inherit from a given typeclass parent - and then limit your searches to objects inheriting from that
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# A voice operated elevator using events
|
||||
|
||||
|
||||
- Previous tutorial: [Adding dialogues in events](Contrib/Dialogues-in-events)
|
||||
- Previous tutorial: [Adding dialogues in events](Dialogues-in-events)
|
||||
|
||||
This tutorial will walk you through the steps to create a voice-operated elevator, using the [in-
|
||||
game Python
|
||||
|
|
@ -97,7 +97,7 @@ things to decorate it a bit.
|
|||
But what we want now is to be able to say "1", "2" or "3" and have the elevator move in that
|
||||
direction.
|
||||
|
||||
If you have read [the previous tutorial about adding dialogues in events](Contrib/Dialogues-in-events), you
|
||||
If you have read [the previous tutorial about adding dialogues in events](Dialogues-in-events), you
|
||||
may remember what we need to do. If not, here's a summary: we need to run some code when somebody
|
||||
speaks in the room. So we need to create a callback (the callback will contain our lines of code).
|
||||
We just need to know on which event this should be set. You can enter `call here` to see the
|
||||
|
|
@ -433,4 +433,4 @@ to consider adding the code in the source itself. Another possibility is to cal
|
|||
with the expected behavior, which makes porting code very easy. This side of chained events will be
|
||||
shown in the next tutorial.
|
||||
|
||||
- Previous tutorial: [Adding dialogues in events](Contrib/Dialogues-in-events)
|
||||
- Previous tutorial: [Adding dialogues in events](Dialogues-in-events)
|
||||
|
|
@ -20,7 +20,7 @@ world to be 'logically' impossible with rooms looping to themselves or exits lea
|
|||
side of the map. Exits can also be named anything, from "jumping out the window" to "into the fifth
|
||||
dimension". This tutorial assumes you can only move in the cardinal directions (N, E, S and W).
|
||||
2. Rooms must be connected and linked together for the map to be generated correctly. Vanilla
|
||||
Evennia comes with a admin command [@tunnel](Component/Default-Command-Help#tunnel-cmdtunnel) that allows a
|
||||
Evennia comes with a admin command [@tunnel](../Component/Default-Command-Help#tunnel-cmdtunnel) that allows a
|
||||
user to create rooms in the cardinal directions, but additional work is needed to assure that rooms
|
||||
are connected. For example, if you `@tunnel east` and then immediately do `@tunnel west` you'll find
|
||||
that you have created two completely stand-alone rooms. So care is needed if you want to create a
|
||||
|
|
@ -361,7 +361,7 @@ looping rooms that will show on your in-game map.
|
|||
|
||||
The above example will display the map above the room description. You could also use an
|
||||
[EvTable](github:evennia.utils.evtable) to place description and map next to each other. Some other
|
||||
things you can do is to have a [Command](Component/Commands) that displays with a larger radius, maybe with a
|
||||
things you can do is to have a [Command](../Component/Commands) that displays with a larger radius, maybe with a
|
||||
legend and other features.
|
||||
|
||||
Below is the whole `map.py` for your reference. You need to update your `Room` typeclass (see above)
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@
|
|||
## Introduction
|
||||
|
||||
This tutorial describes the creation of an in-game map display based on a pre-drawn map. It also
|
||||
details how to use the [Batch code processor](Component/Batch-Code-Processor) for advanced building. There is
|
||||
also the [Dynamic in-game map tutorial](Contrib/Dynamic-In-Game-Map) that works in the opposite direction,
|
||||
details how to use the [Batch code processor](../Component/Batch-Code-Processor) for advanced building. There is
|
||||
also the [Dynamic in-game map tutorial](Dynamic-In-Game-Map) that works in the opposite direction,
|
||||
by generating a map from an existing grid of rooms.
|
||||
|
||||
Evennia does not require its rooms to be positioned in a "logical" way. Your exits could be named
|
||||
|
|
@ -41,7 +41,7 @@ map we designed before.
|
|||
```
|
||||
|
||||
We will henceforth assume your game folder is name named `mygame` and that you haven't modified the
|
||||
default commands. We will also not be using [Colors](Concept/TextTags#colored-text) for our map since they
|
||||
default commands. We will also not be using [Colors](../Concept/TextTags#colored-text) for our map since they
|
||||
don't show in the documentation wiki.
|
||||
|
||||
## Planning the Map
|
||||
|
|
@ -83,23 +83,23 @@ planning at this stage can solve many problems before they happen.
|
|||
In this section we will try to create an actual "map" object that an account can pick up and look
|
||||
at.
|
||||
|
||||
Evennia offers a range of [default commands](Component/Default-Command-Help) for [creating objects and rooms
|
||||
Evennia offers a range of [default commands](../Component/Default-Command-Help) for [creating objects and rooms
|
||||
in-game](Building-Quickstart). While readily accessible, these commands are made to do very
|
||||
specific, restricted things and will thus not offer as much flexibility to experiment (for an
|
||||
advanced exception see [in-line functions](Concept/TextTags#new-inlinefuncs)). Additionally, entering long
|
||||
advanced exception see [in-line functions](../Concept/TextTags#new-inlinefuncs)). Additionally, entering long
|
||||
descriptions and properties over and over in the game client can become tedious; especially when
|
||||
testing and you may want to delete and recreate things over and over.
|
||||
|
||||
To overcome this, Evennia offers [batch processors](Component/Batch-Processors) that work as input-files
|
||||
To overcome this, Evennia offers [batch processors](../Component/Batch-Processors) that work as input-files
|
||||
created out-of-game. In this tutorial we'll be using the more powerful of the two available batch
|
||||
processors, the [Batch Code Processor ](Component/Batch-Code-Processor), called with the `@batchcode` command.
|
||||
processors, the [Batch Code Processor ](../Component/Batch-Code-Processor), called with the `@batchcode` command.
|
||||
This is a very powerful tool. It allows you to craft Python files to act as blueprints of your
|
||||
entire game world. These files have access to use Evennia's Python API directly. Batchcode allows
|
||||
for easy editing and creation in whatever text editor you prefer, avoiding having to manually build
|
||||
the world line-by-line inside the game.
|
||||
|
||||
> Important warning: `@batchcode`'s power is only rivaled by the `@py` command. Batchcode is so
|
||||
powerful it should be reserved only for the [superuser](Concept/Building-Permissions). Think carefully
|
||||
powerful it should be reserved only for the [superuser](../Concept/Building-Permissions). Think carefully
|
||||
before you let others (such as `Developer`- level staff) run `@batchcode` on their own - make sure
|
||||
you are okay with them running *arbitrary Python code* on your server.
|
||||
|
||||
|
|
@ -413,5 +413,5 @@ easily new game defining features can be added to Evennia.
|
|||
|
||||
You can easily build from this tutorial by expanding the map and creating more rooms to explore. Why
|
||||
not add more features to your game by trying other tutorials: [Add weather to your world](Weather-
|
||||
Tutorial), [fill your world with NPC's](Howto/Tutorial-Aggressive-NPCs) or [implement a combat
|
||||
Tutorial), [fill your world with NPC's](../Howto/Tutorial-Aggressive-NPCs) or [implement a combat
|
||||
system](Turn-based-Combat-System).
|
||||
|
|
@ -29,10 +29,10 @@ Some features exemplified by the tutorial world:
|
|||
## Install
|
||||
|
||||
The tutorial world consists of a few modules in `evennia/contrib/tutorial_world/` containing custom
|
||||
[Typeclasses](Component/Typeclasses) for [rooms and objects](Component/Objects) and associated [Commands](Component/Commands).
|
||||
[Typeclasses](../Component/Typeclasses) for [rooms and objects](../Component/Objects) and associated [Commands](../Component/Commands).
|
||||
|
||||
These reusable bits and pieces are then put together into a functioning game area ("world" is maybe
|
||||
too big a word for such a small zone) using a [batch script](Component/Batch-Processors) called `build.ev`. To
|
||||
too big a word for such a small zone) using a [batch script](../Component/Batch-Processors) called `build.ev`. To
|
||||
install, log into the server as the superuser (user #1) and run:
|
||||
|
||||
@batchcommand tutorial_world.build
|
||||
|
|
|
|||
|
|
@ -178,6 +178,6 @@ be searched from the same place for discussion topics you are interested in.
|
|||
2. Read the [Game Planning](Howto/Game-Planning) wiki page. It gives some ideas for your work flow and the
|
||||
state of mind you should aim for - including cutting down the scope of your game for its first
|
||||
release.
|
||||
3. Do the [Tutorial for basic MUSH-like game](Howto/StartingTutorial/Tutorial-for-basic-MUSH-like-game) carefully from
|
||||
3. Do the [Tutorial for basic MUSH-like game](Howto/Starting/Tutorial-for-basic-MUSH-like-game) carefully from
|
||||
beginning to end and try to understand what does what. Even if you are not interested in a MUSH for
|
||||
your own game, you will end up with a small (very small) game that you can build or learn from.
|
||||
|
|
@ -99,7 +99,7 @@ There is usually no need to know the details of Django's database handling in or
|
|||
it will handle most of the complexity for you under the hood using what we call
|
||||
[typeclasses](Glossary#typeclass). But should you need the power of Django you can always get it.
|
||||
Most commonly people want to use "raw" Django when doing more advanced/custom database queries than
|
||||
offered by Evennia's [default search functions](Howto/StartingTutorial/Tutorial-Searching-For-Objects). One will then need
|
||||
offered by Evennia's [default search functions](Howto/Starting/Tutorial-Searching-For-Objects). One will then need
|
||||
to read about Django's _querysets_. Querysets are Python method calls on a special form that lets
|
||||
you build complex queries. They get converted into optimized SQL queries under the hood, suitable
|
||||
for your current database. [Here is our tutorial/explanation of Django queries](Tutorial-Searching-
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
|
||||
**Before doing this tutorial you will probably want to read the intro in
|
||||
[Basic Web tutorial](Howto/StartingTutorial/Web-Tutorial).** Reading the three first parts of the
|
||||
[Basic Web tutorial](Starting/Web-Tutorial).** Reading the three first parts of the
|
||||
[Django tutorial](https://docs.djangoproject.com/en/1.9/intro/tutorial01/) might help as well.
|
||||
|
||||
This tutorial will provide a step-by-step process to installing a wiki on your website.
|
||||
|
|
|
|||
|
|
@ -28,9 +28,9 @@ Before we continue, let’s make a brief detour. Evennia is very flexible about
|
|||
more flexible about using and adding commands to those objects. Here are some ground rules well
|
||||
worth remembering for the remainder of this article:
|
||||
|
||||
- The [Account](Component/Accounts) represents the real person logging in and has no game-world existence.
|
||||
- Any [Object](Component/Objects) can be puppeted by an Account (with proper permissions).
|
||||
- [Characters](Component/Objects#characters), [Rooms](Component/Objects#rooms), and [Exits](Component/Objects#exits) are just
|
||||
- The [Account](../Component/Accounts) represents the real person logging in and has no game-world existence.
|
||||
- Any [Object](../Component/Objects) can be puppeted by an Account (with proper permissions).
|
||||
- [Characters](../Component/Objects#characters), [Rooms](../Component/Objects#rooms), and [Exits](../Component/Objects#exits) are just
|
||||
children of normal Objects.
|
||||
- Any Object can be inside another (except if it creates a loop).
|
||||
- Any Object can store custom sets of commands on it. Those commands can:
|
||||
|
|
@ -120,7 +120,7 @@ about the missiles being fired and has different `key` and `aliases`. We leave
|
|||
that up to you to create as an exercise. You could have it print "WOOSH! The
|
||||
mech launches missiles against <target>!", for example.
|
||||
|
||||
Now we shove our commands into a command set. A [Command Set](Component/Command-Sets) (CmdSet) is a container
|
||||
Now we shove our commands into a command set. A [Command Set](../Component/Command-Sets) (CmdSet) is a container
|
||||
holding any number of commands. The command set is what we will store on the mech.
|
||||
|
||||
```python
|
||||
|
|
@ -173,7 +173,7 @@ This is great for testing. The way we added it, the MechCmdSet will even go away
|
|||
server. Now we want to make the mech an actual object “type” so we can create mechs without those
|
||||
extra steps. For this we need to create a new Typeclass.
|
||||
|
||||
A [Typeclass](Component/Typeclasses) is a near-normal Python class that stores its existence to the database
|
||||
A [Typeclass](../Component/Typeclasses) is a near-normal Python class that stores its existence to the database
|
||||
behind the scenes. A Typeclass is created in a normal Python source file:
|
||||
|
||||
```python
|
||||
|
|
|
|||
|
|
@ -7,28 +7,28 @@ exists before answering - maybe you can clarify that answer rather than to make
|
|||
|
||||
## Table of Contents
|
||||
|
||||
- [Removing default commands](Howto/Coding-FAQ#removing-default-commands)
|
||||
- [Preventing character from moving based on a condition](Howto/Coding-FAQ#preventing-character-from-
|
||||
- [Removing default commands](Coding-FAQ#removing-default-commands)
|
||||
- [Preventing character from moving based on a condition](Coding-FAQ#preventing-character-from-
|
||||
moving-based-on-a-condition)
|
||||
- [Reference initiating object in an EvMenu command](Howto/Coding-FAQ#reference-initiating-object-in-an-
|
||||
- [Reference initiating object in an EvMenu command](Coding-FAQ#reference-initiating-object-in-an-
|
||||
evmenu-command)
|
||||
- [Adding color to default Evennia Channels](Howto/Coding-FAQ#adding-color-to-default-evennia-channels)
|
||||
- [Selectively turn off commands in a room](Howto/Coding-FAQ#selectively-turn-off-commands-in-a-room)
|
||||
- [Select Command based on a condition](Howto/Coding-FAQ#select-command-based-on-a-condition)
|
||||
- [Automatically updating code when reloading](Howto/Coding-FAQ#automatically-updating-code-when-
|
||||
- [Adding color to default Evennia Channels](Coding-FAQ#adding-color-to-default-evennia-channels)
|
||||
- [Selectively turn off commands in a room](Coding-FAQ#selectively-turn-off-commands-in-a-room)
|
||||
- [Select Command based on a condition](Coding-FAQ#select-command-based-on-a-condition)
|
||||
- [Automatically updating code when reloading](Coding-FAQ#automatically-updating-code-when-
|
||||
reloading)
|
||||
- [Changing all exit messages](Howto/Coding-FAQ#changing-all-exit-messages)
|
||||
- [Add parsing with the "to" delimiter](Howto/Coding-FAQ#add-parsing-with-the-to-delimiter)
|
||||
- [Store last used session IP address](Howto/Coding-FAQ#store-last-used-session-ip-address)
|
||||
- [Use wide characters with EvTable](Howto/Coding-FAQ#non-latin-characters-in-evtable)
|
||||
- [Changing all exit messages](Coding-FAQ#changing-all-exit-messages)
|
||||
- [Add parsing with the "to" delimiter](Coding-FAQ#add-parsing-with-the-to-delimiter)
|
||||
- [Store last used session IP address](Coding-FAQ#store-last-used-session-ip-address)
|
||||
- [Use wide characters with EvTable](Coding-FAQ#non-latin-characters-in-evtable)
|
||||
|
||||
## Removing default commands
|
||||
**Q:** How does one *remove* (not replace) e.g. the default `get` [Command](Component/Commands) from the
|
||||
Character [Command Set](Component/Command-Sets)?
|
||||
**Q:** How does one *remove* (not replace) e.g. the default `get` [Command](../Component/Commands) from the
|
||||
Character [Command Set](../Component/Command-Sets)?
|
||||
|
||||
**A:** Go to `mygame/commands/default_cmdsets.py`. Find the `CharacterCmdSet` class. It has one
|
||||
method named `at_cmdset_creation`. At the end of that method, add the following line:
|
||||
`self.remove(default_cmds.CmdGet())`. See the [Adding Commands Tutorial](Howto/StartingTutorial/Adding-Command-Tutorial)
|
||||
`self.remove(default_cmds.CmdGet())`. See the [Adding Commands Tutorial](Starting/Adding-Command-Tutorial)
|
||||
for more info.
|
||||
|
||||
## Preventing character from moving based on a condition
|
||||
|
|
@ -36,7 +36,7 @@ for more info.
|
|||
combat, immobilized, etc.)
|
||||
|
||||
**A:** The `at_before_move` hook is called by Evennia just before performing any move. If it returns
|
||||
`False`, the move is aborted. Let's say we want to check for an [Attribute](Component/Attributes) `cantmove`.
|
||||
`False`, the move is aborted. Let's say we want to check for an [Attribute](../Component/Attributes) `cantmove`.
|
||||
Add the following code to the `Character` class:
|
||||
|
||||
```python
|
||||
|
|
@ -52,7 +52,7 @@ def at_before_move(self, destination):
|
|||
**Q:** An object has a Command on it starts up an EvMenu instance. How do I capture a reference to
|
||||
that object for use in the menu?
|
||||
|
||||
**A:** When an [EvMenu](Component/EvMenu) is started, the menu object is stored as `caller.ndb._menutree`.
|
||||
**A:** When an [EvMenu](../Component/EvMenu) is started, the menu object is stored as `caller.ndb._menutree`.
|
||||
This is a good place to store menu-specific things since it will clean itself up when the menu
|
||||
closes. When initiating the menu, any additional keywords you give will be available for you as
|
||||
properties on this menu object:
|
||||
|
|
@ -101,7 +101,7 @@ CHANNEL_COLORS`.
|
|||
**Q:** I want certain commands to turn off in a given room. They should still work normally for
|
||||
staff.
|
||||
|
||||
**A:** This is done using a custom cmdset on a room [locked with the 'call' lock type](Component/Locks). Only
|
||||
**A:** This is done using a custom cmdset on a room [locked with the 'call' lock type](../Component/Locks). Only
|
||||
if this lock is passed will the commands on the room be made available to an object inside it. Here
|
||||
is an example of a room where certain commands are disabled for non-staff:
|
||||
|
||||
|
|
@ -142,7 +142,7 @@ superusers).
|
|||
command to only be available on a full moon, from midnight to three in-game time.
|
||||
|
||||
**A:** This is easiest accomplished by putting the "werewolf" command on the Character as normal,
|
||||
but to [lock](Component/Locks) it with the "cmd" type lock. Only if the "cmd" lock type is passed will the
|
||||
but to [lock](../Component/Locks) it with the "cmd" type lock. Only if the "cmd" lock type is passed will the
|
||||
command be available.
|
||||
|
||||
```python
|
||||
|
|
@ -157,7 +157,7 @@ class CmdWerewolf(Command):
|
|||
def func(self):
|
||||
# ...
|
||||
```
|
||||
Add this to the [default cmdset as usual](Howto/StartingTutorial/Adding-Command-Tutorial). The `is_full_moon` [lock
|
||||
Add this to the [default cmdset as usual](Starting/Adding-Command-Tutorial). The `is_full_moon` [lock
|
||||
function](Locks#lock-functions) does not yet exist. We must create that:
|
||||
|
||||
```python
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ database, you need to use the caster for the storage.
|
|||
self.caller.db.firestorm_lastcast = now
|
||||
```
|
||||
|
||||
Since we are storing as an [Attribute](Component/Attributes), we need to identify the
|
||||
Since we are storing as an [Attribute](../Component/Attributes), we need to identify the
|
||||
variable as `firestorm_lastcast` so we are sure we get the right one (we'll
|
||||
likely have other skills with cooldowns after all). But this method of
|
||||
using cooldowns also has the advantage of working *between* commands - you can
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
|
||||
Before reading this tutorial, if you haven't done so already, you might want to
|
||||
read [the documentation on commands](Component/Commands) to get a basic understanding of
|
||||
read [the documentation on commands](../Component/Commands) to get a basic understanding of
|
||||
how commands work in Evennia.
|
||||
|
||||
In some types of games a command should not start and finish immediately.
|
||||
|
|
@ -40,7 +40,7 @@ class CmdTest(Command):
|
|||
> Important: The `yield` functionality will *only* work in the `func` method of
|
||||
> Commands. It only works because Evennia has especially
|
||||
> catered for it in Commands. If you want the same functionality elsewhere you
|
||||
> must use the [interactive decorator](Concept/Async-Process#The-@interactive-decorator).
|
||||
> must use the [interactive decorator](../Concept/Async-Process#The-@interactive-decorator).
|
||||
|
||||
The important line is the `yield 10`. It tells Evennia to "pause" the command
|
||||
and to wait for 10 seconds to execute the rest. If you add this command and
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ You can combine the sending of normal text with the sending (updating of the pro
|
|||
self.msg("This is a text", prompt="This is a prompt")
|
||||
```
|
||||
|
||||
You can update the prompt on demand, this is normally done using [OOB](Concept/OOB)-tracking of the relevant
|
||||
You can update the prompt on demand, this is normally done using [OOB](../Concept/OOB)-tracking of the relevant
|
||||
Attributes (like the character's health). You could also make sure that attacking commands update
|
||||
the prompt when they cause a change in health, for example.
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ instance.
|
|||
## Coordinates as tags
|
||||
|
||||
The first concept might be the most surprising at first glance: we will create coordinates as
|
||||
[tags](Component/Tags).
|
||||
[tags](../Component/Tags).
|
||||
|
||||
> Why not attributes, wouldn't that be easier?
|
||||
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ Evennia is smart enough to understand that when we type `+something`, `+` is the
|
|||
`something` is the command argument. This will, of course, fail if you have a command beginning by
|
||||
`+` conflicting with the `CmdConnect` key.
|
||||
4. We have altered some class attributes, like `auto_help`. If you want to know what they do and
|
||||
why they have changed here, you can check the [documentation on commands](Component/Commands).
|
||||
why they have changed here, you can check the [documentation on commands](../Component/Commands).
|
||||
5. In the command body, we begin by extracting the channel name. Remember that this name should be
|
||||
in the command arguments (that is, in `self.args`). Following the same example, if a player enters
|
||||
`+something`, `self.args` should contain `"something"`. We use `search_channel` to see if this
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
|
||||
Evennia allows for exits to have any name. The command "kitchen" is a valid exit name as well as
|
||||
"jump out the window" or "north". An exit actually consists of two parts: an [Exit Object](Component/Objects)
|
||||
and an [Exit Command](Component/Commands) stored on said exit object. The command has the same key and aliases
|
||||
"jump out the window" or "north". An exit actually consists of two parts: an [Exit Object](../Component/Objects)
|
||||
and an [Exit Command](../Component/Commands) stored on said exit object. The command has the same key and aliases
|
||||
as the object, which is why you can see the exit in the room and just write its name to traverse it.
|
||||
|
||||
If you try to enter the name of a non-existing exit, it is thus the same as trying a non-exising
|
||||
|
|
@ -24,7 +24,7 @@ error message just told us that we couldn't go there.
|
|||
|
||||
## Adding default error commands
|
||||
|
||||
To solve this you need to be aware of how to [write and add new commands](Howto/StartingTutorial/Adding-Command-Tutorial).
|
||||
To solve this you need to be aware of how to [write and add new commands](Starting/Adding-Command-Tutorial).
|
||||
What you need to do is to create new commands for all directions you want to support in your game.
|
||||
In this example all we'll do is echo an error message, but you could certainly consider more
|
||||
advanced uses. You add these commands to the default command set. Here is an example of such a set
|
||||
|
|
@ -90,7 +90,7 @@ commands:
|
|||
You cannot move east.
|
||||
|
||||
Further expansions by the exit system (including manipulating the way the Exit command itself is
|
||||
created) can be done by modifying the [Exit typeclass](Component/Typeclasses) directly.
|
||||
created) can be done by modifying the [Exit typeclass](../Component/Typeclasses) directly.
|
||||
|
||||
## Additional Comments
|
||||
|
||||
|
|
@ -109,7 +109,7 @@ So why didn't we create a single error command above? Something like this:
|
|||
The anwer is that this would *not* work and understanding why is important in order to not be
|
||||
confused when working with commands and command sets.
|
||||
|
||||
The reason it doesn't work is because Evennia's [command system](Component/Commands) compares commands *both*
|
||||
The reason it doesn't work is because Evennia's [command system](../Component/Commands) compares commands *both*
|
||||
by `key` and by `aliases`. If *either* of those match, the two commands are considered *identical*
|
||||
as far as cmdset merging system is concerned.
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ to use. So the *Player* usually operates by making use of the tools prepared for
|
|||
|
||||
For a *Player*, collaborating on a game need not be too different between MUSH and Evennia. The
|
||||
building and description of the game world can still happen mostly in-game using build commands,
|
||||
using text tags and [inline functions](Concept/TextTags#inline-functions) to prettify and customize the
|
||||
using text tags and [inline functions](../Concept/TextTags#inline-functions) to prettify and customize the
|
||||
experience. Evennia offers external ways to build a world but those are optional. There is also
|
||||
nothing *in principle* stopping a Developer from offering a softcode-like language to Players if
|
||||
that is deemed necessary.
|
||||
|
|
@ -204,7 +204,7 @@ developer changing the underlying Python code.
|
|||
## Next steps
|
||||
|
||||
If you are a *Developer* and are interested in making a more MUSH-like Evennia game, a good start is
|
||||
to look into the Evennia [Tutorial for a first MUSH-like game](Howto/StartingTutorial/Tutorial-for-basic-MUSH-like-game).
|
||||
to look into the Evennia [Tutorial for a first MUSH-like game](Starting/Tutorial-for-basic-MUSH-like-game).
|
||||
That steps through building a simple little game from scratch and helps to acquaint you with the
|
||||
various corners of Evennia. There is also the [Tutorial for running roleplaying sessions](Evennia-
|
||||
for-roleplaying-sessions) that can be of interest.
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ to show your renewed GM status to the other accounts.
|
|||
|
||||
### The permission hierarchy
|
||||
|
||||
Evennia has the following [permission hierarchy](Concept/Building-Permissions#assigning-permissions) out of
|
||||
Evennia has the following [permission hierarchy](../Concept/Building-Permissions#assigning-permissions) out of
|
||||
the box: *Players, Helpers, Builders, Admins* and finally *Developers*. We could change these but
|
||||
then we'd need to update our Default commands to use the changes. We want to keep this simple, so
|
||||
instead we map our different roles on top of this permission ladder.
|
||||
|
|
@ -60,7 +60,7 @@ everyone.
|
|||
5. `Developers`-level permission are the server administrators, the ones with the ability to
|
||||
restart/shutdown the server as well as changing the permission levels.
|
||||
|
||||
> The [superuser](Concept/Building-Permissions#the-super-user) is not part of the hierarchy and actually
|
||||
> The [superuser](../Concept/Building-Permissions#the-super-user) is not part of the hierarchy and actually
|
||||
completely bypasses it. We'll assume server admin(s) will "just" be Developers.
|
||||
|
||||
### How to grant permissions
|
||||
|
|
@ -102,7 +102,7 @@ its name will have the string`(GM)` added to the end.
|
|||
#### Character modification
|
||||
|
||||
Let's first start by customizing the Character. We recommend you browse the beginning of the
|
||||
[Account](Component/Accounts) page to make sure you know how Evennia differentiates between the OOC "Account
|
||||
[Account](../Component/Accounts) page to make sure you know how Evennia differentiates between the OOC "Account
|
||||
objects" (not to be confused with the `Accounts` permission, which is just a string specifying your
|
||||
access) and the IC "Character objects".
|
||||
|
||||
|
|
@ -142,7 +142,7 @@ Above, we change how the Character's name is displayed: If the account controlli
|
|||
a GM, we attach the string `(GM)` to the Character's name so everyone can tell who's the boss. If we
|
||||
ourselves are Developers or GM's we will see database ids attached to Characters names, which can
|
||||
help if doing database searches against Characters of exactly the same name. We base the "gm-
|
||||
ingness" on having an flag (an [Attribute](Component/Attributes)) named `is_gm`. We'll make sure new GM's
|
||||
ingness" on having an flag (an [Attribute](../Component/Attributes)) named `is_gm`. We'll make sure new GM's
|
||||
actually get this flag below.
|
||||
|
||||
> **Extra exercise:** This will only show the `(GM)` text on *Characters* puppeted by a GM account,
|
||||
|
|
@ -152,7 +152,7 @@ that is, it will show only to those in the same location. If we wanted it to als
|
|||
|
||||
#### New @gm/@ungm command
|
||||
|
||||
We will describe in some detail how to create and add an Evennia [command](Component/Commands) here with the
|
||||
We will describe in some detail how to create and add an Evennia [command](../Component/Commands) here with the
|
||||
hope that we don't need to be as detailed when adding commands in the future. We will build on
|
||||
Evennia's default "mux-like" commands here.
|
||||
|
||||
|
|
@ -704,7 +704,7 @@ access after the fact.
|
|||
|
||||
## Channels
|
||||
|
||||
Evennia comes with [Channels](Component/Communications#Channels) in-built and they are described fully in the
|
||||
Evennia comes with [Channels](../Component/Communications#Channels) in-built and they are described fully in the
|
||||
documentation. For brevity, here are the relevant commands for normal use:
|
||||
|
||||
* `@ccreate new_channel;alias;alias = short description` - Creates a new channel.
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ Talker-type game you *will* have to bite the bullet and code your game (or find
|
|||
do it for you).
|
||||
|
||||
Even if you won't code anything yourself, as a designer you need to at least understand the basic
|
||||
paradigms of Evennia, such as [Objects](Component/Objects), [Commands](Component/Commands) and [Scripts](Component/Scripts) and
|
||||
paradigms of Evennia, such as [Objects](../Component/Objects), [Commands](../Component/Commands) and [Scripts](../Component/Scripts) and
|
||||
how they hang together. We recommend you go through the [Tutorial World](Tutorial-World-
|
||||
Introduction) in detail (as well as glancing at its code) to get at least a feel for what is
|
||||
involved behind the scenes. You could also look through the tutorial for [building a game from
|
||||
|
|
@ -144,7 +144,7 @@ The earlier you revise problems, the easier they will be to fix.
|
|||
|
||||
A good idea is to host your code online (publicly or privately) using version control. Not only will
|
||||
this make it easy for multiple coders to collaborate (and have a bug-tracker etc), it also means
|
||||
your work is backed up at all times. The [Version Control](Coding/Version-Control) tutorial has
|
||||
your work is backed up at all times. The [Version Control](../Coding/Version-Control) tutorial has
|
||||
instructions for setting up a sane developer environment with proper version control.
|
||||
|
||||
### "Tech Demo" Building
|
||||
|
|
@ -199,7 +199,7 @@ flag and let people try it! Call upon your alpha-players to try everything - the
|
|||
to break your game in ways that you never could have imagined. In Alpha you might be best off to
|
||||
focus on inviting friends and maybe other MUD developers, people who you can pester to give proper
|
||||
feedback and bug reports (there *will* be bugs, there is no way around it). Follow the quick
|
||||
instructions for [Online Setup](Setup/Online-Setup) to make your game visible online. If you hadn't
|
||||
instructions for [Online Setup](../Setup/Online-Setup) to make your game visible online. If you hadn't
|
||||
already, make sure to put up your game on the [Evennia game index](http://games.evennia.com/) so
|
||||
people know it's in the works (actually, even pre-alpha games are allowed in the index so don't be
|
||||
shy)!
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ time, and assuming a standard calendar (see below for the same feature with a cu
|
|||
instance, it can be used to have a specific message every (in-game) day at 6:00 AM showing how the
|
||||
sun rises.
|
||||
|
||||
The function `schedule()` should be used here. It will create a [script](Component/Scripts) with some
|
||||
The function `schedule()` should be used here. It will create a [script](../Component/Scripts) with some
|
||||
additional features to make sure the script is always executed when the game time matches the given
|
||||
parameters.
|
||||
|
||||
|
|
|
|||
|
|
@ -45,12 +45,12 @@ makes it easier to change and update things in one place later.
|
|||
values for Health, a list of skills etc, store those things on the Character - don't store how to
|
||||
roll or change them.
|
||||
- Next is to determine just how you want to store things on your Objects and Characters. You can
|
||||
choose to either store things as individual [Attributes](Component/Attributes), like `character.db.STR=34` and
|
||||
choose to either store things as individual [Attributes](../Component/Attributes), like `character.db.STR=34` and
|
||||
`character.db.Hunting_skill=20`. But you could also use some custom storage method, like a
|
||||
dictionary `character.db.skills = {"Hunting":34, "Fishing":20, ...}`. A much more fancy solution is
|
||||
to look at the Ainneve [Trait
|
||||
handler](https://github.com/evennia/ainneve/blob/master/world/traits.py). Finally you could even go
|
||||
with a [custom django model](Concept/New-Models). Which is the better depends on your game and the
|
||||
with a [custom django model](../Concept/New-Models). Which is the better depends on your game and the
|
||||
complexity of your system.
|
||||
- Make a clear [API](http://en.wikipedia.org/wiki/Application_programming_interface) into your
|
||||
rules. That is, make methods/functions that you feed with, say, your Character and which skill you
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ This is a small tutorial for customizing your character objects, using the examp
|
|||
turn on and off ANSI color parsing as an example. `@options NOCOLOR=True` will now do what this
|
||||
tutorial shows, but the tutorial subject can be applied to other toggles you may want, as well.
|
||||
|
||||
In the Building guide's [Colors](Concept/TextTags#coloured-text) page you can learn how to add color to your
|
||||
In the Building guide's [Colors](../Concept/TextTags#coloured-text) page you can learn how to add color to your
|
||||
game by using special markup. Colors enhance the gaming experience, but not all users want color.
|
||||
Examples would be users working from clients that don't support color, or people with various seeing
|
||||
disabilities that rely on screen readers to play your game. Also, whereas Evennia normally
|
||||
|
|
@ -26,7 +26,7 @@ configuration system for your characters. This is the basic sequence:
|
|||
Create a new module in `mygame/typeclasses` named, for example, `mycharacter.py`. Alternatively you
|
||||
can simply add a new class to 'mygamegame/typeclasses/characters.py'.
|
||||
|
||||
In your new module(or characters.py), create a new [Typeclass](Component/Typeclasses) inheriting from
|
||||
In your new module(or characters.py), create a new [Typeclass](../Component/Typeclasses) inheriting from
|
||||
`evennia.DefaultCharacter`. We will also import `evennia.utils.ansi`, which we will use later.
|
||||
|
||||
```python
|
||||
|
|
@ -39,7 +39,7 @@ In your new module(or characters.py), create a new [Typeclass](Component/Typecla
|
|||
self.db.config_color = True
|
||||
```
|
||||
|
||||
Above we set a simple config value as an [Attribute](Component/Attributes).
|
||||
Above we set a simple config value as an [Attribute](../Component/Attributes).
|
||||
|
||||
Let's make sure that new characters are created of this type. Edit your
|
||||
`mygame/server/conf/settings.py` file and add/change `BASE_CHARACTER_TYPECLASS` to point to your new
|
||||
|
|
@ -158,7 +158,7 @@ class CharacterCmdSet(default_cmds.CharacterCmdSet):
|
|||
|
||||
## More colors
|
||||
|
||||
Apart from ANSI colors, Evennia also supports **Xterm256** colors (See [Colors](Concept/TextTags#colored-
|
||||
Apart from ANSI colors, Evennia also supports **Xterm256** colors (See [Colors](../Concept/TextTags#colored-
|
||||
text)). The `msg()` method supports the `xterm256` keyword for manually activating/deactiving
|
||||
xterm256. It should be easy to expand the above example to allow players to customize xterm256
|
||||
regardless of if Evennia thinks their client supports it or not.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# NPC shop Tutorial
|
||||
|
||||
This tutorial will describe how to make an NPC-run shop. We will make use of the [EvMenu](Component/EvMenu)
|
||||
This tutorial will describe how to make an NPC-run shop. We will make use of the [EvMenu](../Component/EvMenu)
|
||||
system to present shoppers with a menu where they can buy things from the store's stock.
|
||||
|
||||
Our shop extends over two rooms - a "front" room open to the shop's customers and a locked "store
|
||||
|
|
@ -23,7 +23,7 @@ deducted and the goods transferred from the store room to the inventory of the c
|
|||
|
||||
We want to show a menu to the customer where they can list, examine and buy items in the store. This
|
||||
menu should change depending on what is currently for sale. Evennia's *EvMenu* utility will manage
|
||||
the menu for us. It's a good idea to [read up on EvMenu](Component/EvMenu) if you are not familiar with it.
|
||||
the menu for us. It's a good idea to [read up on EvMenu](../Component/EvMenu) if you are not familiar with it.
|
||||
|
||||
#### Designing the menu
|
||||
|
||||
|
|
@ -167,7 +167,7 @@ of the customer.
|
|||
#### The command to start the menu
|
||||
|
||||
We could *in principle* launch the shopping menu the moment a customer steps into our shop room, but
|
||||
this would probably be considered pretty annoying. It's better to create a [Command](Component/Commands) for
|
||||
this would probably be considered pretty annoying. It's better to create a [Command](../Component/Commands) for
|
||||
customers to explicitly wanting to shop around.
|
||||
|
||||
```python
|
||||
|
|
@ -200,7 +200,7 @@ class CmdBuy(Command):
|
|||
This will launch the menu. The `EvMenu` instance is initialized with the path to this very module -
|
||||
since the only global functions available in this module are our menu nodes, this will work fine
|
||||
(you could also have put those in a separate module). We now just need to put this command in a
|
||||
[CmdSet](Component/Command-Sets) so we can add it correctly to the game:
|
||||
[CmdSet](../Component/Command-Sets) so we can add it correctly to the game:
|
||||
|
||||
```python
|
||||
from evennia import CmdSet
|
||||
|
|
@ -219,7 +219,7 @@ There are really only two things that separate our shop from any other Room:
|
|||
the shop.
|
||||
|
||||
For testing we could easily add these features manually to a room using `@py` or other admin
|
||||
commands. Just to show how it can be done we'll instead make a custom [Typeclass](Component/Typeclasses) for
|
||||
commands. Just to show how it can be done we'll instead make a custom [Typeclass](../Component/Typeclasses) for
|
||||
the shop room and make a small command that builders can use to build both the shop and the
|
||||
storeroom at once.
|
||||
|
||||
|
|
@ -295,12 +295,12 @@ class CmdBuildShop(Command):
|
|||
Our typeclass is simple and so is our `buildshop` command. The command (which is for Builders only)
|
||||
just takes the name of the shop and builds the front room and a store room to go with it (always
|
||||
named `"<shopname>-storage"`. It connects the rooms with a two-way exit. You need to add
|
||||
`CmdBuildShop` [to the default cmdset](Howto/StartingTutorial/Adding-Command-Tutorial#step-2-adding-the-command-to-a-
|
||||
`CmdBuildShop` [to the default cmdset](Starting/Adding-Command-Tutorial#step-2-adding-the-command-to-a-
|
||||
default-cmdset) before you can use it. Once having created the shop you can now `@teleport` to it or
|
||||
`@open` a new exit to it. You could also easily expand the above command to automatically create
|
||||
exits to and from the new shop from your current location.
|
||||
|
||||
To avoid customers walking in and stealing everything, we create a [Lock](Component/Locks) on the storage
|
||||
To avoid customers walking in and stealing everything, we create a [Lock](../Component/Locks) on the storage
|
||||
door. It's a simple lock that requires the one entering to carry an object named
|
||||
`<shopname>-storekey`. We even create such a key object and drop it in the shop for the new shop
|
||||
keeper to pick up.
|
||||
|
|
@ -328,7 +328,7 @@ would then be gone and the counter be wrong - the shop would pass us the next it
|
|||
|
||||
Fixing these issues are left as an exercise.
|
||||
|
||||
If you want to keep the shop fully NPC-run you could add a [Script](Component/Scripts) to restock the shop's
|
||||
If you want to keep the shop fully NPC-run you could add a [Script](../Component/Scripts) to restock the shop's
|
||||
store room regularly. This shop example could also easily be owned by a human Player (run for them
|
||||
by a hired NPC) - the shop owner would get the key to the store room and be responsible for keeping
|
||||
it well stocked.
|
||||
|
|
@ -5,17 +5,17 @@ This tutorial shows the implementation of an NPC object that responds to charact
|
|||
location. In this example the NPC has the option to respond aggressively or not, but any actions
|
||||
could be triggered this way.
|
||||
|
||||
One could imagine using a [Script](Component/Scripts) that is constantly checking for newcomers. This would be
|
||||
One could imagine using a [Script](../Component/Scripts) that is constantly checking for newcomers. This would be
|
||||
highly inefficient (most of the time its check would fail). Instead we handle this on-demand by
|
||||
using a couple of existing object hooks to inform the NPC that a Character has entered.
|
||||
|
||||
It is assumed that you already know how to create custom room and character typeclasses, please see
|
||||
the [Basic Game tutorial](Howto/StartingTutorial/Tutorial-for-basic-MUSH-like-game) if you haven't already done this.
|
||||
the [Basic Game tutorial](Starting/Tutorial-for-basic-MUSH-like-game) if you haven't already done this.
|
||||
|
||||
What we will need is the following:
|
||||
|
||||
- An NPC typeclass that can react when someone enters.
|
||||
- A custom [Room](Component/Objects#rooms) typeclass that can tell the NPC that someone entered.
|
||||
- A custom [Room](../Component/Objects#rooms) typeclass that can tell the NPC that someone entered.
|
||||
- We will also tweak our default `Character` typeclass a little.
|
||||
|
||||
To begin with, we need to create an NPC typeclass. Create a new file inside of your typeclasses
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ their location. In this example the NPC parrots what is said, but any actions co
|
|||
this way.
|
||||
|
||||
It is assumed that you already know how to create custom room and character typeclasses, please see
|
||||
the [Basic Game tutorial](Howto/StartingTutorial/Tutorial-for-basic-MUSH-like-game) if you haven't already done this.
|
||||
the [Basic Game tutorial](Starting/Tutorial-for-basic-MUSH-like-game) if you haven't already done this.
|
||||
|
||||
What we will need is simply a new NPC typeclass that can react when someone speaks.
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
|
||||
This tutorial will create a simple script that will send a tweet to your already configured twitter
|
||||
account. Please see: [How to connect Evennia to Twitter](Setup/How-to-connect-Evennia-to-Twitter) if you
|
||||
account. Please see: [How to connect Evennia to Twitter](../Setup/How-to-connect-Evennia-to-Twitter) if you
|
||||
haven't already done so.
|
||||
|
||||
The script could be expanded to cover a variety of statistics you might wish to tweet about
|
||||
|
|
@ -89,7 +89,7 @@ randomly choosing between these outputs.
|
|||
1. Shows the number of Player Characters, Rooms and Other/Objects
|
||||
2. Shows the number of prototypes currently in the game and then selects 3 random keys to show
|
||||
|
||||
[Scripts Information](Component/Scripts) will show you how to add it as a Global script, however, for testing
|
||||
[Scripts Information](../Component/Scripts) will show you how to add it as a Global script, however, for testing
|
||||
it may be useful to start/stop it quickly from within the game. Assuming that you create the file
|
||||
as `mygame/typeclasses/tweet_stats.py` it can be started by using the following command
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ and back (assuming we created it in limbo).
|
|||
|
||||
Using the `@tel`command like shown above is obviously not what we want. `@tel` is an admin command
|
||||
and normal players will thus never be able to enter the train! It is also not really a good idea to
|
||||
use [Exits](Component/Objects#exits) to get in and out of the train - Exits are (at least by default) objects
|
||||
use [Exits](../Component/Objects#exits) to get in and out of the train - Exits are (at least by default) objects
|
||||
too. They point to a specific destination. If we put an Exit in this room leading inside the train
|
||||
it would stay here when the train moved away (still leading into the train like a magic portal!). In
|
||||
the same way, if we put an Exit object inside the train, it would always point back to this room,
|
||||
|
|
@ -58,7 +58,7 @@ regardless of where the Train has moved. Now, one *could* define custom Exit typ
|
|||
the train or change their destination in the right way - but this seems to be a pretty cumbersome
|
||||
solution.
|
||||
|
||||
What we will do instead is to create some new [commands](Component/Commands): one for entering the train and
|
||||
What we will do instead is to create some new [commands](../Component/Commands): one for entering the train and
|
||||
another for leaving it again. These will be stored *on the train object* and will thus be made
|
||||
available to whomever is either inside it or in the same room as the train.
|
||||
|
||||
|
|
@ -122,7 +122,7 @@ documentation.
|
|||
These commands are work in a pretty straightforward way: `CmdEnterTrain` moves the location of the
|
||||
player to inside the train and `CmdLeaveTrain` does the opposite: it moves the player back to the
|
||||
current location of the train (back outside to its current location). We stacked them in a
|
||||
[cmdset](Component/Command-Sets) `CmdSetTrain` so they can be used.
|
||||
[cmdset](../Component/Command-Sets) `CmdSetTrain` so they can be used.
|
||||
|
||||
To make the commands work we need to add this cmdset to our train typeclass:
|
||||
|
||||
|
|
@ -159,7 +159,7 @@ As seen above, when this hook is called on our train, our new cmdset will be loa
|
|||
If you have played around a bit, you've probably figured out that you can use `leave train` when
|
||||
outside the train and `enter train` when inside. This doesn't make any sense ... so let's go ahead
|
||||
and fix that. We need to tell Evennia that you can not enter the train when you're already inside
|
||||
or leave the train when you're outside. One solution to this is [locks](Component/Locks): we will lock down
|
||||
or leave the train when you're outside. One solution to this is [locks](../Component/Locks): we will lock down
|
||||
the commands so that they can only be called if the player is at the correct location.
|
||||
|
||||
Right now commands defaults to the lock `cmd:all()`. The `cmd` lock type in combination with the
|
||||
|
|
@ -322,7 +322,7 @@ If we wanted full control of the train we could now just add a command to step i
|
|||
when desired. We want the train to move on its own though, without us having to force it by manually
|
||||
calling the `goto_next_room` method.
|
||||
|
||||
To do this we will create two [scripts](Component/Scripts): one script that runs when the train has stopped at
|
||||
To do this we will create two [scripts](../Component/Scripts): one script that runs when the train has stopped at
|
||||
a station and is responsible for starting the train again after a while. The other script will take
|
||||
care of the driving.
|
||||
|
||||
|
|
@ -416,7 +416,7 @@ enter/exit commands check so the train is not moving before allowing the caller
|
|||
* Have train conductor commands that can override the automatic start/stop.
|
||||
* Allow for in-between stops between the start- and end station
|
||||
* Have a rail road track instead of hard-coding the rooms in the train object. This could for
|
||||
example be a custom [Exit](Component/Objects#exits) only traversable by trains. The train will follow the
|
||||
example be a custom [Exit](../Component/Objects#exits) only traversable by trains. The train will follow the
|
||||
track. Some track segments can split to lead to two different rooms and a player can switch the
|
||||
direction to which room it goes.
|
||||
* Create another kind of vehicle!
|
||||
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
This tutorial aims at dispelling confusions regarding the use of color tags within Evennia.
|
||||
|
||||
Correct understanding of this topic requires having read the [TextTags](Concept/TextTags) page and learned
|
||||
Correct understanding of this topic requires having read the [TextTags](../Concept/TextTags) page and learned
|
||||
Evennia's color tags. Here we'll explain by examples the reasons behind the unexpected (or
|
||||
apparently incoherent) behaviors of some color tags, as mentioned _en passant_ in the
|
||||
[TextTags](Concept/TextTags) page.
|
||||
[TextTags](../Concept/TextTags) page.
|
||||
|
||||
|
||||
All you'll need for this tutorial is access to a running instance of Evennia via a color-enabled
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ individually track the time, they instead subscribe to be called by a global tic
|
|||
keeping. Not only does this centralize and organize much of the code in one place, it also has less
|
||||
computing overhead.
|
||||
|
||||
Evennia offers the [TickerHandler](Component/TickerHandler) specifically for using the subscription model. We
|
||||
Evennia offers the [TickerHandler](../Component/TickerHandler) specifically for using the subscription model. We
|
||||
will use it for our weather system.
|
||||
|
||||
We will assume you know how to make your own Typeclasses. If not see one of the beginning tutorials.
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ and *templates* (how the web page should be structured).
|
|||
|
||||
Models are created in `mygame/web/chargen/models.py`.
|
||||
|
||||
A [Django database model](Concept/New-Models) is a Python class that describes the database storage of the
|
||||
A [Django database model](../Concept/New-Models) is a Python class that describes the database storage of the
|
||||
data you want to manage. Any data you choose to store is stored in the same database as the game and
|
||||
you have access to all the game's objects here.
|
||||
|
||||
|
|
@ -262,9 +262,9 @@ create_object function to properly process the permissions.
|
|||
|
||||
Most importantly, the following attributes must be set on the created character object:
|
||||
|
||||
* Evennia [permissions](Component/Locks#permissions) (copied from the `AccountDB`).
|
||||
* The right `puppet` [locks](Component/Locks) so the Account can actually play as this Character later.
|
||||
* The relevant Character [typeclass](Component/Typeclasses)
|
||||
* Evennia [permissions](../Component/Locks#permissions) (copied from the `AccountDB`).
|
||||
* The right `puppet` [locks](../Component/Locks) so the Account can actually play as this Character later.
|
||||
* The relevant Character [typeclass](../Component/Typeclasses)
|
||||
* Character name (key)
|
||||
* The Character's home room location (`#2` by default)
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ to pick ideas or even get a starting game to build on. These instructions are ba
|
|||
released as of *Aug 12, 2018*.
|
||||
|
||||
If you are not familiar with what Evennia is, you can read
|
||||
[an introduction here](Evennia-Introduction).
|
||||
[an introduction here](../Evennia-Introduction).
|
||||
|
||||
It's not too hard to run Arx from the sources (of course you'll start with an empty database) but
|
||||
since part of Arx has grown organically, it doesn't follow standard Evennia paradigms everywhere.
|
||||
|
|
@ -32,7 +32,7 @@ important if referring to newer Evennia documentation.
|
|||
If you are new to Evennia it's *highly* recommended that you run through the
|
||||
instructions in full - including initializing and starting a new empty game and connecting to it.
|
||||
That way you can be sure Evennia works correctly as a base line. If you have trouble, make sure to
|
||||
read the [Troubleshooting instructions](Setup/Getting-Started#troubleshooting) for your
|
||||
read the [Troubleshooting instructions](Getting-Started#troubleshooting) for your
|
||||
operating system. You can also drop into our
|
||||
[forums](https://groups.google.com/forum/#%21forum/evennia), join `#evennia` on `irc.freenode.net`
|
||||
or chat from the linked [Discord Server](https://discord.gg/NecFePw).
|
||||
|
|
|
|||
|
|
@ -7,15 +7,15 @@ This will help you download, install and start Evennia for the first time.
|
|||
> test out Evennia. Apart from downloading and updating you don't even need an
|
||||
> internet connection until you feel ready to share your game with the world.
|
||||
|
||||
- [Quick Start](Setup/Getting-Started#quick-start)
|
||||
- [Requirements](Setup/Getting-Started#requirements)
|
||||
- [Linux Install](Setup/Getting-Started#linux-install)
|
||||
- [Mac Install](Setup/Getting-Started#mac-install)
|
||||
- [Windows Install](Setup/Getting-Started#windows-install)
|
||||
- [Running in Docker](Setup/Running-Evennia-in-Docker)
|
||||
- [Where to Go Next](Setup/Getting-Started#where-to-go-next)
|
||||
- [Troubleshooting](Setup/Getting-Started#troubleshooting)
|
||||
- [Glossary of terms](Glossary)
|
||||
- [Quick Start](Getting-Started#quick-start)
|
||||
- [Requirements](Getting-Started#requirements)
|
||||
- [Linux Install](Getting-Started#linux-install)
|
||||
- [Mac Install](Getting-Started#mac-install)
|
||||
- [Windows Install](Getting-Started#windows-install)
|
||||
- [Running in Docker](Running-Evennia-in-Docker)
|
||||
- [Where to Go Next](Getting-Started#where-to-go-next)
|
||||
- [Troubleshooting](Getting-Started#troubleshooting)
|
||||
- [Glossary of terms](../Glossary)
|
||||
|
||||
## Quick Start
|
||||
|
||||
|
|
@ -37,7 +37,7 @@ Evennia should now be running and you can connect to it by pointing a web browse
|
|||
`http://localhost:4001` or a MUD telnet client to `localhost:4000` (use `127.0.0.1` if your OS does
|
||||
not recognize `localhost`).
|
||||
|
||||
We also release [Docker images](Setup/Running-Evennia-in-Docker)
|
||||
We also release [Docker images](Running-Evennia-in-Docker)
|
||||
based on `master` and `develop` branches.
|
||||
|
||||
## Requirements
|
||||
|
|
@ -68,10 +68,10 @@ Twisted packages
|
|||
## Linux Install
|
||||
|
||||
If you run into any issues during the installation and first start, please
|
||||
check out [Linux Troubleshooting](Setup/Getting-Started#linux-troubleshooting).
|
||||
check out [Linux Troubleshooting](Getting-Started#linux-troubleshooting).
|
||||
|
||||
For Debian-derived systems (like Ubuntu, Mint etc), start a terminal and
|
||||
install the [dependencies](Setup/Getting-Started#requirements):
|
||||
install the [dependencies](Getting-Started#requirements):
|
||||
|
||||
```
|
||||
sudo apt-get update
|
||||
|
|
@ -142,8 +142,8 @@ folders) and run
|
|||
pip install -e evennia
|
||||
```
|
||||
|
||||
For more info about `pip`, see the [Glossary entry on pip](Glossary#pip). If
|
||||
install failed with any issues, see [Linux Troubleshooting](Setup/Getting-Started#linux-troubleshooting).
|
||||
For more info about `pip`, see the [Glossary entry on pip](../Glossary#pip). If
|
||||
install failed with any issues, see [Linux Troubleshooting](Getting-Started#linux-troubleshooting).
|
||||
|
||||
Next we'll start our new game, here called "mygame". This will create yet
|
||||
another new folder where you will be creating your new game:
|
||||
|
|
@ -160,8 +160,8 @@ Your final folder structure should look like this:
|
|||
mygame/
|
||||
```
|
||||
|
||||
You can [configure Evennia](Component/Server-Conf#settings-file) extensively, for example
|
||||
to use a [different database](Setup/Choosing-An-SQL-Server). For now we'll just stick
|
||||
You can [configure Evennia](../Component/Server-Conf#settings-file) extensively, for example
|
||||
to use a [different database](Choosing-An-SQL-Server). For now we'll just stick
|
||||
to the defaults though.
|
||||
|
||||
```
|
||||
|
|
@ -175,7 +175,7 @@ evennia start # (create a superuser when asked. Email is optional.)
|
|||
|
||||
Your game should now be running! Open a web browser at `http://localhost:4001`
|
||||
or point a telnet client to `localhost:4000` and log in with the user you
|
||||
created. Check out [where to go next](Setup/Getting-Started#where-to-go-next).
|
||||
created. Check out [where to go next](Getting-Started#where-to-go-next).
|
||||
|
||||
|
||||
## Mac Install
|
||||
|
|
@ -184,7 +184,7 @@ The Evennia server is a terminal program. Open the terminal e.g. from
|
|||
*Applications->Utilities->Terminal*. [Here is an introduction to the Mac
|
||||
terminal](http://blog.teamtreehouse.com/introduction-to-the-mac-os-x-command-line)
|
||||
if you are unsure how it works. If you run into any issues during the
|
||||
installation, please check out [Mac Troubleshooting](Setup/Getting-Started#mac-troubleshooting).
|
||||
installation, please check out [Mac Troubleshooting](Getting-Started#mac-troubleshooting).
|
||||
|
||||
* Python should already be installed but you must make sure it's a high enough version.
|
||||
([This](http://docs.python-guide.org/en/latest/starting/install/osx/) discusses
|
||||
|
|
@ -215,7 +215,7 @@ A new folder `evennia` will appear containing the Evennia library. This only
|
|||
contains the source code though, it is not *installed* yet. To isolate the
|
||||
Evennia install and its dependencies from the rest of the system, it is good
|
||||
Python practice to install into a _virtualenv_. If you are unsure about what a
|
||||
virtualenv is and why it's useful, see the [Glossary entry on virtualenv](Glossary#virtualenv).
|
||||
virtualenv is and why it's useful, see the [Glossary entry on virtualenv](../Glossary#virtualenv).
|
||||
|
||||
Run `python -V` to check which Python your system defaults to.
|
||||
|
||||
|
|
@ -253,8 +253,8 @@ pip install --upgrade setuptools # Ditto concerning Mac issues.
|
|||
pip install -e evennia
|
||||
```
|
||||
|
||||
For more info about `pip`, see the [Glossary entry on pip](Glossary#pip). If
|
||||
install failed with any issues, see [Mac Troubleshooting](Setup/Getting-Started#mac-troubleshooting).
|
||||
For more info about `pip`, see the [Glossary entry on pip](../Glossary#pip). If
|
||||
install failed with any issues, see [Mac Troubleshooting](Getting-Started#mac-troubleshooting).
|
||||
|
||||
Next we'll start our new game. We'll call it "mygame" here. This creates a new
|
||||
folder where you will be creating your new game:
|
||||
|
|
@ -272,8 +272,8 @@ Your final folder structure should look like this:
|
|||
mygame/
|
||||
```
|
||||
|
||||
You can [configure Evennia](Component/Server-Conf#settings-file) extensively, for example
|
||||
to use a [different database](Setup/Choosing-An-SQL-Server). We'll go with the
|
||||
You can [configure Evennia](../Component/Server-Conf#settings-file) extensively, for example
|
||||
to use a [different database](Choosing-An-SQL-Server). We'll go with the
|
||||
defaults here.
|
||||
|
||||
```
|
||||
|
|
@ -287,13 +287,13 @@ evennia start # (create a superuser when asked. Email is optional.)
|
|||
|
||||
Your game should now be running! Open a web browser at `http://localhost:4001`
|
||||
or point a telnet client to `localhost:4000` and log in with the user you
|
||||
created. Check out [where to go next](Setup/Getting-Started#where-to-go-next).
|
||||
created. Check out [where to go next](Getting-Started#where-to-go-next).
|
||||
|
||||
|
||||
## Windows Install
|
||||
|
||||
If you run into any issues during the installation, please check out
|
||||
[Windows Troubleshooting](Setup/Getting-Started#windows-troubleshooting).
|
||||
[Windows Troubleshooting](Getting-Started#windows-troubleshooting).
|
||||
|
||||
> If you are running Windows10, consider using the Windows Subsystem for Linux
|
||||
> ([WSL](https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux)) instead.
|
||||
|
|
@ -348,7 +348,7 @@ A new folder `evennia` will appear containing the Evennia library. This only
|
|||
contains the source code though, it is not *installed* yet. To isolate the
|
||||
Evennia install and its dependencies from the rest of the system, it is good
|
||||
Python practice to install into a _virtualenv_. If you are unsure about what a
|
||||
virtualenv is and why it's useful, see the [Glossary entry on virtualenv](Glossary#virtualenv).
|
||||
virtualenv is and why it's useful, see the [Glossary entry on virtualenv](../Glossary#virtualenv).
|
||||
|
||||
In your console, try `python -V` to see which version of Python your system
|
||||
defaults to.
|
||||
|
|
@ -393,8 +393,8 @@ folders when you use the `dir` command) and run
|
|||
```
|
||||
pip install -e evennia
|
||||
```
|
||||
For more info about `pip`, see the [Glossary entry on pip](Glossary#pip). If
|
||||
the install failed with any issues, see [Windows Troubleshooting](Setup/Getting-Started#windows-
|
||||
For more info about `pip`, see the [Glossary entry on pip](../Glossary#pip). If
|
||||
the install failed with any issues, see [Windows Troubleshooting](Getting-Started#windows-
|
||||
troubleshooting).
|
||||
Next we'll start our new game, we'll call it "mygame" here. This creates a new folder where you will
|
||||
be
|
||||
|
|
@ -413,8 +413,8 @@ path\to\muddev
|
|||
mygame\
|
||||
```
|
||||
|
||||
You can [configure Evennia](Component/Server-Conf#settings-file) extensively, for example
|
||||
to use a [different database](Setup/Choosing-An-SQL-Server). We'll go with the
|
||||
You can [configure Evennia](../Component/Server-Conf#settings-file) extensively, for example
|
||||
to use a [different database](Choosing-An-SQL-Server). We'll go with the
|
||||
defaults here.
|
||||
|
||||
```
|
||||
|
|
@ -428,7 +428,7 @@ evennia start # (create a superuser when asked. Email is optional.)
|
|||
|
||||
Your game should now be running! Open a web browser at `http://localhost:4001`
|
||||
or point a telnet client to `localhost:4000` and log in with the user you
|
||||
created. Check out [where to go next](Setup/Getting-Started#where-to-go-next).
|
||||
created. Check out [where to go next](Getting-Started#where-to-go-next).
|
||||
|
||||
|
||||
## Where to Go Next
|
||||
|
|
@ -438,7 +438,7 @@ logged in, stand in the `Limbo` room and run
|
|||
|
||||
@batchcommand tutorial_world.build
|
||||
|
||||
to build [Evennia's tutorial world](Contrib/Tutorial-World-Introduction) - it's a small solo quest to
|
||||
to build [Evennia's tutorial world](../Contrib/Tutorial-World-Introduction) - it's a small solo quest to
|
||||
explore. Only run the instructed `@batchcommand` once. You'll get a lot of text scrolling by as the
|
||||
tutorial is built. Once done, the `tutorial` exit will have appeared out of Limbo - just write
|
||||
`tutorial` to enter it.
|
||||
|
|
@ -463,7 +463,7 @@ forums](https://groups.google.com/forum/#%21forum/evennia). You can also join th
|
|||
Server](https://discord.gg/NecFePw).
|
||||
|
||||
Finally, if you are itching to help out or support Evennia (awesome!) have an
|
||||
issue to report or a feature to request, [see here](How-To-Get-And-Give-Help).
|
||||
issue to report or a feature to request, [see here](../How-To-Get-And-Give-Help).
|
||||
|
||||
Enjoy your stay!
|
||||
|
||||
|
|
|
|||
|
|
@ -29,8 +29,8 @@ pip install python-twitter
|
|||
## A basic tweet command
|
||||
|
||||
Evennia doesn't have a `tweet` command out of the box so you need to write your own little
|
||||
[Command](Component/Commands) in order to tweet. If you are unsure about how commands work and how to add
|
||||
them, it can be an idea to go through the [Adding a Command Tutorial](Howto/StartingTutorial/Adding-Command-Tutorial)
|
||||
[Command](../Component/Commands) in order to tweet. If you are unsure about how commands work and how to add
|
||||
them, it can be an idea to go through the [Adding a Command Tutorial](../Howto/Starting/Adding-Command-Tutorial)
|
||||
before continuing.
|
||||
|
||||
You can create the command in a separate command module (something like `mygame/commands/tweet.py`)
|
||||
|
|
@ -89,7 +89,7 @@ Be sure to substitute your own actual API/Access keys and secrets in the appropr
|
|||
|
||||
We default to limiting tweet access to players with `Developers`-level access *or* to those players
|
||||
that have the permission "tweet" (allow individual characters to tweet with `@perm/player playername
|
||||
= tweet`). You may change the [lock](Component/Locks) as you feel is appropriate. Change the overall
|
||||
= tweet`). You may change the [lock](../Component/Locks) as you feel is appropriate. Change the overall
|
||||
permission to `Players` if you want everyone to be able to tweet.
|
||||
|
||||
Now add this command to your default command set (e.g in `mygame/commands/defalt_cmdsets.py`") and
|
||||
|
|
@ -106,5 +106,5 @@ This shows only a basic tweet setup, other things to do could be:
|
|||
* Echo your tweets to an in-game channel
|
||||
|
||||
Rather than using an explicit command you can set up a Script to send automatic tweets, for example
|
||||
to post updated game stats. See the [Tweeting Game Stats tutorial](Howto/Tutorial-Tweeting-Game-Stats) for
|
||||
to post updated game stats. See the [Tweeting Game Stats tutorial](../Howto/Tutorial-Tweeting-Game-Stats) for
|
||||
help.
|
||||
|
|
@ -7,7 +7,7 @@ Discord](https://discord.gg/NecFePw), which is mirrored to IRC._
|
|||
|
||||
[IRC (Internet Relay Chat)](http://en.wikipedia.org/wiki/Internet_Relay_Chat) is a long standing
|
||||
chat protocol used by many open-source projects for communicating in real time. By connecting one of
|
||||
Evennia's [Channels](Component/Communications) to an IRC channel you can communicate also with people not on
|
||||
Evennia's [Channels](../Component/Communications) to an IRC channel you can communicate also with people not on
|
||||
an mud themselves. You can also use IRC if you are only running your Evennia MUD locally on your
|
||||
computer (your game doesn't need to be open to the public)! All you need is an internet connection.
|
||||
For IRC operation you also need [twisted.words](http://twistedmatrix.com/trac/wiki/TwistedWords).
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ Install the latest Evennia in a way that lets you edit the source
|
|||
|
||||
This step will possibly take quite a while - we are downloading Evennia and are then installing it,
|
||||
building all of the requirements for Evennia to run. If you run into trouble on this step, please
|
||||
see [Troubleshooting](Setup/Installing-on-Android#troubleshooting).
|
||||
see [Troubleshooting](Installing-on-Android#troubleshooting).
|
||||
|
||||
You can go to the dir where Evennia is installed with `cd $VIRTUAL_ENV/src/evennia`. `git grep
|
||||
(something)` can be handy, as can `git diff`
|
||||
|
|
@ -120,7 +120,7 @@ $ cd ~ && source evenv/bin/activate
|
|||
(evenv) $ evennia start
|
||||
```
|
||||
|
||||
You may wish to look at the [Linux Instructions](Setup/Getting-Started#linux-install) for more.
|
||||
You may wish to look at the [Linux Instructions](Getting-Started#linux-install) for more.
|
||||
|
||||
## Caveats
|
||||
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ web services you are running through this router though.
|
|||
|
||||
You can connect Evennia to the Internet without any changes to your settings. The default settings
|
||||
are easy to use but are not necessarily the safest. You can customize your online presence in your
|
||||
[settings file](Component/Server-Conf#settings-file). To have Evennia recognize changed port settings you have
|
||||
[settings file](../Component/Server-Conf#settings-file). To have Evennia recognize changed port settings you have
|
||||
to do a full `evennia reboot` to also restart the Portal and not just the Server component.
|
||||
|
||||
Below is an example of a simple set of settings, mostly using the defaults. Evennia will require
|
||||
|
|
@ -202,7 +202,7 @@ To register, stand in your game dir, run
|
|||
|
||||
evennia connections
|
||||
|
||||
and follow the instructions. See the [Game index page](Setup/Evennia-Game-Index) for more details.
|
||||
and follow the instructions. See the [Game index page](Evennia-Game-Index) for more details.
|
||||
|
||||
## SSL
|
||||
|
||||
|
|
@ -249,7 +249,7 @@ also be based on your hosting choice. In a controlled/cPanel environment, you wi
|
|||
to use DNS verification.
|
||||
|
||||
## Relevant SSL Proxy Setup Information
|
||||
- [Apache webserver configuration](Setup/Apache-Config) (optional)
|
||||
- [Apache webserver configuration](Apache-Config) (optional)
|
||||
- [HAProxy Config](HAProxy-Config-(Optional))
|
||||
|
||||
## Hosting locally or remotely?
|
||||
|
|
@ -283,7 +283,7 @@ main internet connection terminated as a consequence.
|
|||
|
||||
#### Setting up your own machine as a server
|
||||
|
||||
[The first section](Setup/Online-Setup#connecting-from-the-outside) of this page describes how to do this
|
||||
[The first section](Online-Setup#connecting-from-the-outside) of this page describes how to do this
|
||||
and allow users to connect to the IP address of your machine/router.
|
||||
|
||||
A complication with using a specific IP address like this is that your home IP might not remain the
|
||||
|
|
@ -344,7 +344,7 @@ game stays online. Many services guarantee a certain level of up-time and also d
|
|||
for you. Make sure to check, some offer lower rates in exchange for you yourself being fully
|
||||
responsible for your data/backups.
|
||||
- Usually offers a fixed domain name, so no need to mess with IP addresses.
|
||||
- May have the ability to easily deploy [docker](Setup/Running-Evennia-in-Docker) versions of evennia
|
||||
- May have the ability to easily deploy [docker](Running-Evennia-in-Docker) versions of evennia
|
||||
and/or your game.
|
||||
|
||||
**Disadvantages**
|
||||
|
|
@ -362,7 +362,7 @@ Docker) to deploy your game to the remote server; it will likely ease installati
|
|||
Docker images may be a little confusing if you are completely new to them though.
|
||||
|
||||
If not using docker, and assuming you know how to connect to your account over ssh/PuTTy, you should
|
||||
be able to follow the [Getting Started](Setup/Getting-Started) instructions normally. You only need Python
|
||||
be able to follow the [Getting Started](Getting-Started) instructions normally. You only need Python
|
||||
and GIT pre-installed; these should both be available on any servers (if not you should be able to
|
||||
easily ask for them to be installed). On a VPS or Cloud service you can install them yourself as
|
||||
needed.
|
||||
|
|
|
|||
|
|
@ -44,4 +44,4 @@ switch:
|
|||
@rss2chan/delete rss = https://github.com/evennia/evennia/commits/master.atom
|
||||
|
||||
You can connect any number of RSS feeds to a channel this way. You could also connect them to the
|
||||
same channels as [IRC](Setup/IRC) to have the feed echo to external chat channels as well.
|
||||
same channels as [IRC](IRC) to have the feed echo to external chat channels as well.
|
||||
|
|
@ -34,7 +34,7 @@ evennia|docker /usr/src/game $
|
|||
This is a normal shell prompt. We are in the `/usr/src/game` location inside the docker container.
|
||||
If you had anything in the folder you started from, you should see it here (with `ls`) since we
|
||||
mounted the current directory to `usr/src/game` (with `-v` above). You have the `evennia` command
|
||||
available and can now proceed to create a new game as per the [Getting Started](Setup/Getting-Started)
|
||||
available and can now proceed to create a new game as per the [Getting Started](Getting-Started)
|
||||
instructions (you can skip the virtualenv and install 'globally' in the container though).
|
||||
|
||||
You can run Evennia from inside this container if you want to, it's like you are root in a little
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ Now the only ports open will be your administrative ssh port (whichever you chos
|
|||
4000-4001.
|
||||
|
||||
### Use an external webserver
|
||||
Though not officially supported, there are some benefits to [deploying a webserver](Setup/Apache-Config)
|
||||
Though not officially supported, there are some benefits to [deploying a webserver](Apache-Config)
|
||||
to handle/proxy traffic to your Evennia instance.
|
||||
|
||||
For example, Evennia's game engine and webservice are tightly integrated. If you bring your game
|
||||
|
|
|
|||
|
|
@ -3,10 +3,10 @@
|
|||
|
||||
You control Evennia from your game folder (we refer to it as `mygame/` here), using the `evennia`
|
||||
program. If the `evennia` program is not available on the command line you must first install
|
||||
Evennia as described in the [Getting Started](Setup/Getting-Started) page.
|
||||
Evennia as described in the [Getting Started](Getting-Started) page.
|
||||
|
||||
> Hint: If you ever try the `evennia` command and get an error complaining that the command is not
|
||||
available, make sure your [virtualenv](Glossary#virtualenv) is active.
|
||||
available, make sure your [virtualenv](../Glossary#virtualenv) is active.
|
||||
|
||||
Below are described the various management options. Run
|
||||
|
||||
|
|
@ -20,7 +20,7 @@ to give you a menu with options.
|
|||
|
||||
## Starting Evennia
|
||||
|
||||
Evennia consists of two components, the Evennia [Server and Portal](Component/Portal-And-Server). Briefly,
|
||||
Evennia consists of two components, the Evennia [Server and Portal](../Component/Portal-And-Server). Briefly,
|
||||
the *Server* is what is running the mud. It handles all game-specific things but doesn't care
|
||||
exactly how players connect, only that they have. The *Portal* is a gateway to which players
|
||||
connect. It knows everything about telnet, ssh, webclient protocols etc but very little about the
|
||||
|
|
@ -67,7 +67,7 @@ reboots. Since they are connected to the *Portal*, their connections are not los
|
|||
|
||||
|
||||
Reloading is as close to a "warm reboot" you can get. It reinitializes all code of Evennia, but
|
||||
doesn't kill "persistent" [Scripts](Component/Scripts). It also calls `at_server_reload()` hooks on all
|
||||
doesn't kill "persistent" [Scripts](../Component/Scripts). It also calls `at_server_reload()` hooks on all
|
||||
objects so you
|
||||
can save eventual temporary properties you want.
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
- [Coding/Continuous Integration](Coding/Continuous-Integration)
|
||||
- [Coding/Debugging](Coding/Debugging)
|
||||
- [Coding/Directory Overview](Coding/Directory-Overview)
|
||||
- [Coding/Evennia API](Coding/Evennia-API)
|
||||
- [Coding/Flat API](Coding/Flat-API)
|
||||
- [Coding/Profiling](Coding/Profiling)
|
||||
- [Coding/Quirks](Coding/Quirks)
|
||||
- [Coding/Setting up PyCharm](Coding/Setting-up-PyCharm)
|
||||
|
|
@ -67,6 +67,7 @@
|
|||
- [Contrib/Tutorial World Introduction](Contrib/Tutorial-World-Introduction)
|
||||
- [Contributing](Contributing)
|
||||
- [Contributing Docs](Contributing-Docs)
|
||||
- [Evennia API](Evennia-API)
|
||||
- [Evennia Introduction](Evennia-Introduction)
|
||||
- [Glossary](Glossary)
|
||||
- [How To Get And Give Help](How-To-Get-And-Give-Help)
|
||||
|
|
@ -90,20 +91,21 @@
|
|||
- [Howto/Manually Configuring Color](Howto/Manually-Configuring-Color)
|
||||
- [Howto/Mass and weight for objects](Howto/Mass-and-weight-for-objects)
|
||||
- [Howto/NPC shop Tutorial](Howto/NPC-shop-Tutorial)
|
||||
- [Howto/StartingTutorial/Add a simple new web page](Howto/StartingTutorial/Add-a-simple-new-web-page)
|
||||
- [Howto/StartingTutorial/Adding Command Tutorial](Howto/StartingTutorial/Adding-Command-Tutorial)
|
||||
- [Howto/StartingTutorial/Adding Object Typeclass Tutorial](Howto/StartingTutorial/Adding-Object-Typeclass-Tutorial)
|
||||
- [Howto/StartingTutorial/Building Quickstart](Howto/StartingTutorial/Building-Quickstart)
|
||||
- [Howto/StartingTutorial/Coding Introduction](Howto/StartingTutorial/Coding-Introduction)
|
||||
- [Howto/StartingTutorial/Execute Python Code](Howto/StartingTutorial/Execute-Python-Code)
|
||||
- [Howto/StartingTutorial/First Steps Coding](Howto/StartingTutorial/First-Steps-Coding)
|
||||
- [Howto/StartingTutorial/Parsing command arguments, theory and best practices](Howto/StartingTutorial/Parsing-command-arguments,-theory-and-best-practices)
|
||||
- [Howto/StartingTutorial/Python basic introduction](Howto/StartingTutorial/Python-basic-introduction)
|
||||
- [Howto/StartingTutorial/Python basic tutorial part two](Howto/StartingTutorial/Python-basic-tutorial-part-two)
|
||||
- [Howto/StartingTutorial/Turn based Combat System](Howto/StartingTutorial/Turn-based-Combat-System)
|
||||
- [Howto/StartingTutorial/Tutorial Searching For Objects](Howto/StartingTutorial/Tutorial-Searching-For-Objects)
|
||||
- [Howto/StartingTutorial/Tutorial for basic MUSH like game](Howto/StartingTutorial/Tutorial-for-basic-MUSH-like-game)
|
||||
- [Howto/StartingTutorial/Web Tutorial](Howto/StartingTutorial/Web-Tutorial)
|
||||
- [Howto/Starting/Add a simple new web page](Howto/Starting/Add-a-simple-new-web-page)
|
||||
- [Howto/Starting/Adding Command Tutorial](Howto/Starting/Adding-Command-Tutorial)
|
||||
- [Howto/Starting/Adding Object Typeclass Tutorial](Howto/Starting/Adding-Object-Typeclass-Tutorial)
|
||||
- [Howto/Starting/Building Quickstart](Howto/Starting/Building-Quickstart)
|
||||
- [Howto/Starting/Coding Introduction](Howto/Starting/Coding-Introduction)
|
||||
- [Howto/Starting/Execute Python Code](Howto/Starting/Execute-Python-Code)
|
||||
- [Howto/Starting/First Steps Coding](Howto/Starting/First-Steps-Coding)
|
||||
- [Howto/Starting/Parsing command arguments, theory and best practices](Howto/Starting/Parsing-command-arguments,-theory-and-best-practices)
|
||||
- [Howto/Starting/Python basic introduction](Howto/Starting/Python-basic-introduction)
|
||||
- [Howto/Starting/Python basic tutorial part two](Howto/Starting/Python-basic-tutorial-part-two)
|
||||
- [Howto/Starting/Starting Introduction](Howto/Starting/Starting-Introduction)
|
||||
- [Howto/Starting/Turn based Combat System](Howto/Starting/Turn-based-Combat-System)
|
||||
- [Howto/Starting/Tutorial Searching For Objects](Howto/Starting/Tutorial-Searching-For-Objects)
|
||||
- [Howto/Starting/Tutorial for basic MUSH like game](Howto/Starting/Tutorial-for-basic-MUSH-like-game)
|
||||
- [Howto/Starting/Web Tutorial](Howto/Starting/Web-Tutorial)
|
||||
- [Howto/Tutorial Aggressive NPCs](Howto/Tutorial-Aggressive-NPCs)
|
||||
- [Howto/Tutorial NPCs listening](Howto/Tutorial-NPCs-listening)
|
||||
- [Howto/Tutorial Tweeting Game Stats](Howto/Tutorial-Tweeting-Game-Stats)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue