diff --git a/docs/pylib/create_toctree.py b/docs/pylib/create_toctree.py index 8e80cc4d01..55347c83bf 100644 --- a/docs/pylib/create_toctree.py +++ b/docs/pylib/create_toctree.py @@ -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.") diff --git a/docs/source/Coding/Continuous-Integration.md b/docs/source/Coding/Continuous-Integration.md index 79eac730d4..ea82aa6299 100644 --- a/docs/source/Coding/Continuous-Integration.md +++ b/docs/source/Coding/Continuous-Integration.md @@ -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 diff --git a/docs/source/Coding/Directory-Overview.md b/docs/source/Coding/Directory-Overview.md index 7cf5ec979a..b74328cfba 100644 --- a/docs/source/Coding/Directory-Overview.md +++ b/docs/source/Coding/Directory-Overview.md @@ -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. \ No newline at end of file diff --git a/docs/source/Coding/Profiling.md b/docs/source/Coding/Profiling.md index 6e7948600f..d1800e1831 100644 --- a/docs/source/Coding/Profiling.md +++ b/docs/source/Coding/Profiling.md @@ -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 diff --git a/docs/source/Coding/Quirks.md b/docs/source/Coding/Quirks.md index 0016599b44..59735c1ff9 100644 --- a/docs/source/Coding/Quirks.md +++ b/docs/source/Coding/Quirks.md @@ -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 diff --git a/docs/source/Coding/Unit-Testing.md b/docs/source/Coding/Unit-Testing.md index e031a742d3..f04c5dbf6f 100644 --- a/docs/source/Coding/Unit-Testing.md +++ b/docs/source/Coding/Unit-Testing.md @@ -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 diff --git a/docs/source/Coding/Updating-Your-Game.md b/docs/source/Coding/Updating-Your-Game.md index c067b4365c..4d3138be8f 100644 --- a/docs/source/Coding/Updating-Your-Game.md +++ b/docs/source/Coding/Updating-Your-Game.md @@ -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 diff --git a/docs/source/Coding/Version-Control.md b/docs/source/Coding/Version-Control.md index 2d595df6dc..e22c5344f6 100644 --- a/docs/source/Coding/Version-Control.md +++ b/docs/source/Coding/Version-Control.md @@ -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 diff --git a/docs/source/Component/Accounts.md b/docs/source/Component/Accounts.md index b1ed4052f8..00336924d7 100644 --- a/docs/source/Component/Accounts.md +++ b/docs/source/Component/Accounts.md @@ -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 diff --git a/docs/source/Component/Attributes.md b/docs/source/Component/Attributes.md index df33d47a28..28b8b187e4 100644 --- a/docs/source/Component/Attributes.md +++ b/docs/source/Component/Attributes.md @@ -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 diff --git a/docs/source/Component/Batch-Code-Processor.md b/docs/source/Component/Batch-Code-Processor.md index 36788dccb8..8b8adb81bf 100644 --- a/docs/source/Component/Batch-Code-Processor.md +++ b/docs/source/Component/Batch-Code-Processor.md @@ -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. diff --git a/docs/source/Component/Batch-Command-Processor.md b/docs/source/Component/Batch-Command-Processor.md index 0d6f2c9911..af4876d715 100644 --- a/docs/source/Component/Batch-Command-Processor.md +++ b/docs/source/Component/Batch-Command-Processor.md @@ -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 ... diff --git a/docs/source/Component/Batch-Processors.md b/docs/source/Component/Batch-Processors.md index 80f5e86355..0f78e31257 100644 --- a/docs/source/Component/Batch-Processors.md +++ b/docs/source/Component/Batch-Processors.md @@ -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 diff --git a/docs/source/Component/Bootstrap-Components-and-Utilities.md b/docs/source/Component/Bootstrap-Components-and-Utilities.md index 93e7fc458e..c6e54c9caf 100644 --- a/docs/source/Component/Bootstrap-Components-and-Utilities.md +++ b/docs/source/Component/Bootstrap-Components-and-Utilities.md @@ -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) \ No newline at end of file +over [the web character gen tutorial.](../Howto/Web-Character-Generation) \ No newline at end of file diff --git a/docs/source/Component/Coding-Utils.md b/docs/source/Component/Coding-Utils.md index a7dab3aa49..7bfefe5bd7 100644 --- a/docs/source/Component/Coding-Utils.md +++ b/docs/source/Component/Coding-Utils.md @@ -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) diff --git a/docs/source/Component/Command-Sets.md b/docs/source/Component/Command-Sets.md index 0f7d4de0a7..7041b28452 100644 --- a/docs/source/Component/Command-Sets.md +++ b/docs/source/Component/Command-Sets.md @@ -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. diff --git a/docs/source/Component/Commands.md b/docs/source/Component/Commands.md index e76aec5427..747ec2e558 100644 --- a/docs/source/Component/Commands.md +++ b/docs/source/Component/Commands.md @@ -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:`. Locks is a +- `locks` (string) - a [lock definition](Locks), usually on the form `cmd:`. 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 diff --git a/docs/source/Component/Communications.md b/docs/source/Component/Communications.md index d4014bba46..159e67f149 100644 --- a/docs/source/Component/Communications.md +++ b/docs/source/Component/Communications.md @@ -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`. \ No newline at end of file diff --git a/docs/source/Component/Connection-Screen.md b/docs/source/Component/Connection-Screen.md index 7f9881a412..430f7417ed 100644 --- a/docs/source/Component/Connection-Screen.md +++ b/docs/source/Component/Connection-Screen.md @@ -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. \ No newline at end of file diff --git a/docs/source/Component/Default-Command-Help.md b/docs/source/Component/Default-Command-Help.md index 31943add96..61f7b04a73 100644 --- a/docs/source/Component/Default-Command-Help.md +++ b/docs/source/Component/Default-Command-Help.md @@ -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 *''* of class `` 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). diff --git a/docs/source/Component/EvMenu.md b/docs/source/Component/EvMenu.md index ca5f2069b7..7fb0d67904 100644 --- a/docs/source/Component/EvMenu.md +++ b/docs/source/Component/EvMenu.md @@ -33,7 +33,7 @@ said functions, like `{"nodename": , ...}` ## 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 ` 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 diff --git a/docs/source/Component/EvMore.md b/docs/source/Component/EvMore.md index 75301f8b6c..6c10a3ba71 100644 --- a/docs/source/Component/EvMore.md +++ b/docs/source/Component/EvMore.md @@ -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: diff --git a/docs/source/Component/Help-System.md b/docs/source/Component/Help-System.md index d40babb78a..55afd61729 100644 --- a/docs/source/Component/Help-System.md +++ b/docs/source/Component/Help-System.md @@ -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)`. diff --git a/docs/source/Component/Inputfuncs.md b/docs/source/Component/Inputfuncs.md index 4fff08942d..c3c7df6ae3 100644 --- a/docs/source/Component/Inputfuncs.md +++ b/docs/source/Component/Inputfuncs.md @@ -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. diff --git a/docs/source/Component/Locks.md b/docs/source/Component/Locks.md index a59fd28fb6..189a0e88aa 100644 --- a/docs/source/Component/Locks.md +++ b/docs/source/Component/Locks.md @@ -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. diff --git a/docs/source/Component/MonitorHandler.md b/docs/source/Component/MonitorHandler.md index b5067fdf74..635392aca6 100644 --- a/docs/source/Component/MonitorHandler.md +++ b/docs/source/Component/MonitorHandler.md @@ -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 diff --git a/docs/source/Component/Nicks.md b/docs/source/Component/Nicks.md index 176bab3f4b..b4992b38ea 100644 --- a/docs/source/Component/Nicks.md +++ b/docs/source/Component/Nicks.md @@ -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 diff --git a/docs/source/Component/Objects.md b/docs/source/Component/Objects.md index 4fc62d52d7..92b09b23bb 100644 --- a/docs/source/Component/Objects.md +++ b/docs/source/Component/Objects.md @@ -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 diff --git a/docs/source/Component/Portal-And-Server.md b/docs/source/Component/Portal-And-Server.md index 533065eaf0..e4cc99f6ec 100644 --- a/docs/source/Component/Portal-And-Server.md +++ b/docs/source/Component/Portal-And-Server.md @@ -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 diff --git a/docs/source/Component/Scripts.md b/docs/source/Component/Scripts.md index 04229a6c87..4ef2668141 100644 --- a/docs/source/Component/Scripts.md +++ b/docs/source/Component/Scripts.md @@ -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. diff --git a/docs/source/Component/Server-Conf.md b/docs/source/Component/Server-Conf.md index 07f6e1472d..e5d163c7b6 100644 --- a/docs/source/Component/Server-Conf.md +++ b/docs/source/Component/Server-Conf.md @@ -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 diff --git a/docs/source/Component/Sessions.md b/docs/source/Component/Sessions.md index 3be9a11cb9..a61fe0408f 100644 --- a/docs/source/Component/Sessions.md +++ b/docs/source/Component/Sessions.md @@ -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 diff --git a/docs/source/Component/Signals.md b/docs/source/Component/Signals.md index 9be4759667..4f76acbfb4 100644 --- a/docs/source/Component/Signals.md +++ b/docs/source/Component/Signals.md @@ -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 diff --git a/docs/source/Component/Spawner-and-Prototypes.md b/docs/source/Component/Spawner-and-Prototypes.md index 9dc346775d..b8e8f27205 100644 --- a/docs/source/Component/Spawner-and-Prototypes.md +++ b/docs/source/Component/Spawner-and-Prototypes.md @@ -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_` - 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. diff --git a/docs/source/Component/Tags.md b/docs/source/Component/Tags.md index e263000add..c02353d9b8 100644 --- a/docs/source/Component/Tags.md +++ b/docs/source/Component/Tags.md @@ -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). \ No newline at end of file +is found in the [Zone tutorial](../Concept/Zones). \ No newline at end of file diff --git a/docs/source/Component/TickerHandler.md b/docs/source/Component/TickerHandler.md index 5cbe49c084..3a25b88f31 100644 --- a/docs/source/Component/TickerHandler.md +++ b/docs/source/Component/TickerHandler.md @@ -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 diff --git a/docs/source/Component/Typeclasses.md b/docs/source/Component/Typeclasses.md index bd319217bc..82bda08d03 100644 --- a/docs/source/Component/Typeclasses.md +++ b/docs/source/Component/Typeclasses.md @@ -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. diff --git a/docs/source/Concept/Async-Process.md b/docs/source/Concept/Async-Process.md index cb323aab50..97acf2f02c 100644 --- a/docs/source/Concept/Async-Process.md +++ b/docs/source/Concept/Async-Process.md @@ -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: diff --git a/docs/source/Concept/Banning.md b/docs/source/Concept/Banning.md index 276a19f59b..f24b9fba55 100644 --- a/docs/source/Concept/Banning.md +++ b/docs/source/Concept/Banning.md @@ -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. diff --git a/docs/source/Concept/Building-Permissions.md b/docs/source/Concept/Building-Permissions.md index 1063206e82..4bfed6b9fd 100644 --- a/docs/source/Concept/Building-Permissions.md +++ b/docs/source/Concept/Building-Permissions.md @@ -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 diff --git a/docs/source/Concept/Command-System.md b/docs/source/Concept/Command-System.md index 2a6a6d1cbc..30134d3a40 100644 --- a/docs/source/Concept/Command-System.md +++ b/docs/source/Concept/Command-System.md @@ -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) \ No newline at end of file +- [Default Command Help](../Component/Default-Command-Help) +- [Adding Command Tutorial](../Howto/Starting/Adding-Command-Tutorial) \ No newline at end of file diff --git a/docs/source/Concept/Custom-Protocols.md b/docs/source/Concept/Custom-Protocols.md index 0d3e0a38cd..33cfbbe6dd 100644 --- a/docs/source/Concept/Custom-Protocols.md +++ b/docs/source/Concept/Custom-Protocols.md @@ -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 diff --git a/docs/source/Concept/Guest-Logins.md b/docs/source/Concept/Guest-Logins.md index 6a06bd95fb..c29a90b3ad 100644 --- a/docs/source/Concept/Guest-Logins.md +++ b/docs/source/Concept/Guest-Logins.md @@ -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). diff --git a/docs/source/Concept/Internationalization.md b/docs/source/Concept/Internationalization.md index cf3176852b..e6216328c8 100644 --- a/docs/source/Concept/Internationalization.md +++ b/docs/source/Concept/Internationalization.md @@ -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: diff --git a/docs/source/Concept/Messagepath.md b/docs/source/Concept/Messagepath.md index c550a9ab17..6fe43498d6 100644 --- a/docs/source/Concept/Messagepath.md +++ b/docs/source/Concept/Messagepath.md @@ -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. diff --git a/docs/source/Concept/New-Models.md b/docs/source/Concept/New-Models.md index b69768ea8a..9f030ec718 100644 --- a/docs/source/Concept/New-Models.md +++ b/docs/source/Concept/New-Models.md @@ -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. diff --git a/docs/source/Concept/OOB.md b/docs/source/Concept/OOB.md index 19039a1d7f..d5c0162c9d 100644 --- a/docs/source/Concept/OOB.md +++ b/docs/source/Concept/OOB.md @@ -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 diff --git a/docs/source/Concept/Soft-Code.md b/docs/source/Concept/Soft-Code.md index 6b1e7cf52c..cce6973cb9 100644 --- a/docs/source/Concept/Soft-Code.md +++ b/docs/source/Concept/Soft-Code.md @@ -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. \ No newline at end of file diff --git a/docs/source/Concept/TextTags.md b/docs/source/Concept/TextTags.md index e56d357fee..23becf7754 100644 --- a/docs/source/Concept/TextTags.md +++ b/docs/source/Concept/TextTags.md @@ -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 diff --git a/docs/source/Concept/Web-Features.md b/docs/source/Concept/Web-Features.md index 56e0f5492a..6d50ff3221 100644 --- a/docs/source/Concept/Web-Features.md +++ b/docs/source/Concept/Web-Features.md @@ -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 diff --git a/docs/source/Concept/Zones.md b/docs/source/Concept/Zones.md index ccea07360e..e9b18b4358 100644 --- a/docs/source/Concept/Zones.md +++ b/docs/source/Concept/Zones.md @@ -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 diff --git a/docs/source/Contrib/A-voice-operated-elevator-using-events.md b/docs/source/Contrib/A-voice-operated-elevator-using-events.md index 9f8526b727..6b2d77f06a 100644 --- a/docs/source/Contrib/A-voice-operated-elevator-using-events.md +++ b/docs/source/Contrib/A-voice-operated-elevator-using-events.md @@ -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) \ No newline at end of file +- Previous tutorial: [Adding dialogues in events](Dialogues-in-events) \ No newline at end of file diff --git a/docs/source/Contrib/Dynamic-In-Game-Map.md b/docs/source/Contrib/Dynamic-In-Game-Map.md index 359b62be50..c6d75289ed 100644 --- a/docs/source/Contrib/Dynamic-In-Game-Map.md +++ b/docs/source/Contrib/Dynamic-In-Game-Map.md @@ -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) diff --git a/docs/source/Contrib/Static-In-Game-Map.md b/docs/source/Contrib/Static-In-Game-Map.md index b5c19b5ca5..975d19f502 100644 --- a/docs/source/Contrib/Static-In-Game-Map.md +++ b/docs/source/Contrib/Static-In-Game-Map.md @@ -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). \ No newline at end of file diff --git a/docs/source/Contrib/Tutorial-World-Introduction.md b/docs/source/Contrib/Tutorial-World-Introduction.md index 10311bf4a5..21eec7416f 100644 --- a/docs/source/Contrib/Tutorial-World-Introduction.md +++ b/docs/source/Contrib/Tutorial-World-Introduction.md @@ -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 diff --git a/docs/source/Evennia-Introduction.md b/docs/source/Evennia-Introduction.md index 53596cd3b5..6975dd2850 100644 --- a/docs/source/Evennia-Introduction.md +++ b/docs/source/Evennia-Introduction.md @@ -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. \ No newline at end of file diff --git a/docs/source/Glossary.md b/docs/source/Glossary.md index fcac3d01c7..1d170e90c3 100644 --- a/docs/source/Glossary.md +++ b/docs/source/Glossary.md @@ -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- diff --git a/docs/source/Howto/Add-a-wiki-on-your-website.md b/docs/source/Howto/Add-a-wiki-on-your-website.md index b53e5e38f7..2c3a9ac840 100644 --- a/docs/source/Howto/Add-a-wiki-on-your-website.md +++ b/docs/source/Howto/Add-a-wiki-on-your-website.md @@ -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. diff --git a/docs/source/Howto/Building-a-mech-tutorial.md b/docs/source/Howto/Building-a-mech-tutorial.md index f835934ac7..e29b096c35 100644 --- a/docs/source/Howto/Building-a-mech-tutorial.md +++ b/docs/source/Howto/Building-a-mech-tutorial.md @@ -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 !", 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 diff --git a/docs/source/Howto/Coding-FAQ.md b/docs/source/Howto/Coding-FAQ.md index 2f9c3837e6..3b706fb12c 100644 --- a/docs/source/Howto/Coding-FAQ.md +++ b/docs/source/Howto/Coding-FAQ.md @@ -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 diff --git a/docs/source/Howto/Command-Cooldown.md b/docs/source/Howto/Command-Cooldown.md index c2a40e02ba..0e60b15369 100644 --- a/docs/source/Howto/Command-Cooldown.md +++ b/docs/source/Howto/Command-Cooldown.md @@ -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 diff --git a/docs/source/Howto/Command-Duration.md b/docs/source/Howto/Command-Duration.md index ed7bbe17e2..33d856e919 100644 --- a/docs/source/Howto/Command-Duration.md +++ b/docs/source/Howto/Command-Duration.md @@ -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 diff --git a/docs/source/Howto/Command-Prompt.md b/docs/source/Howto/Command-Prompt.md index 4e868db82e..4a04da4146 100644 --- a/docs/source/Howto/Command-Prompt.md +++ b/docs/source/Howto/Command-Prompt.md @@ -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. diff --git a/docs/source/Howto/Coordinates.md b/docs/source/Howto/Coordinates.md index 896379d1ae..d46ff14096 100644 --- a/docs/source/Howto/Coordinates.md +++ b/docs/source/Howto/Coordinates.md @@ -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? diff --git a/docs/source/Howto/Customize-channels.md b/docs/source/Howto/Customize-channels.md index c65a9e1487..e1d100704d 100644 --- a/docs/source/Howto/Customize-channels.md +++ b/docs/source/Howto/Customize-channels.md @@ -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 diff --git a/docs/source/Howto/Default-Exit-Errors.md b/docs/source/Howto/Default-Exit-Errors.md index 4d657d5607..44857da895 100644 --- a/docs/source/Howto/Default-Exit-Errors.md +++ b/docs/source/Howto/Default-Exit-Errors.md @@ -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. diff --git a/docs/source/Howto/Evennia-for-MUSH-Users.md b/docs/source/Howto/Evennia-for-MUSH-Users.md index 9dd10f6bdd..fb4121798e 100644 --- a/docs/source/Howto/Evennia-for-MUSH-Users.md +++ b/docs/source/Howto/Evennia-for-MUSH-Users.md @@ -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. diff --git a/docs/source/Howto/Evennia-for-roleplaying-sessions.md b/docs/source/Howto/Evennia-for-roleplaying-sessions.md index 5aa401b175..483591b9d6 100644 --- a/docs/source/Howto/Evennia-for-roleplaying-sessions.md +++ b/docs/source/Howto/Evennia-for-roleplaying-sessions.md @@ -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. diff --git a/docs/source/Howto/Game-Planning.md b/docs/source/Howto/Game-Planning.md index 35a71d5415..a17a3829ed 100644 --- a/docs/source/Howto/Game-Planning.md +++ b/docs/source/Howto/Game-Planning.md @@ -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)! diff --git a/docs/source/Howto/Gametime-Tutorial.md b/docs/source/Howto/Gametime-Tutorial.md index 73dfd82c40..696dfd321a 100644 --- a/docs/source/Howto/Gametime-Tutorial.md +++ b/docs/source/Howto/Gametime-Tutorial.md @@ -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. diff --git a/docs/source/Howto/Implementing-a-game-rule-system.md b/docs/source/Howto/Implementing-a-game-rule-system.md index 6922882286..855051aae3 100644 --- a/docs/source/Howto/Implementing-a-game-rule-system.md +++ b/docs/source/Howto/Implementing-a-game-rule-system.md @@ -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 diff --git a/docs/source/Howto/Manually-Configuring-Color.md b/docs/source/Howto/Manually-Configuring-Color.md index 20bbcbdc74..b0ab57d78d 100644 --- a/docs/source/Howto/Manually-Configuring-Color.md +++ b/docs/source/Howto/Manually-Configuring-Color.md @@ -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. diff --git a/docs/source/Howto/NPC-shop-Tutorial.md b/docs/source/Howto/NPC-shop-Tutorial.md index 10aa6f5abc..476568f504 100644 --- a/docs/source/Howto/NPC-shop-Tutorial.md +++ b/docs/source/Howto/NPC-shop-Tutorial.md @@ -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 `"-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 `-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. \ No newline at end of file diff --git a/docs/source/Howto/Tutorial-Aggressive-NPCs.md b/docs/source/Howto/Tutorial-Aggressive-NPCs.md index 3acea27967..2a88bc9adf 100644 --- a/docs/source/Howto/Tutorial-Aggressive-NPCs.md +++ b/docs/source/Howto/Tutorial-Aggressive-NPCs.md @@ -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 diff --git a/docs/source/Howto/Tutorial-NPCs-listening.md b/docs/source/Howto/Tutorial-NPCs-listening.md index 4a36f37204..9f67a14edd 100644 --- a/docs/source/Howto/Tutorial-NPCs-listening.md +++ b/docs/source/Howto/Tutorial-NPCs-listening.md @@ -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. diff --git a/docs/source/Howto/Tutorial-Tweeting-Game-Stats.md b/docs/source/Howto/Tutorial-Tweeting-Game-Stats.md index a85f725cb5..4b5d6af8e8 100644 --- a/docs/source/Howto/Tutorial-Tweeting-Game-Stats.md +++ b/docs/source/Howto/Tutorial-Tweeting-Game-Stats.md @@ -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 diff --git a/docs/source/Howto/Tutorial-Vehicles.md b/docs/source/Howto/Tutorial-Vehicles.md index c894ede3f4..dbe6c9fa7c 100644 --- a/docs/source/Howto/Tutorial-Vehicles.md +++ b/docs/source/Howto/Tutorial-Vehicles.md @@ -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! \ No newline at end of file diff --git a/docs/source/Howto/Understanding-Color-Tags.md b/docs/source/Howto/Understanding-Color-Tags.md index e9f80840e0..4b218b89e3 100644 --- a/docs/source/Howto/Understanding-Color-Tags.md +++ b/docs/source/Howto/Understanding-Color-Tags.md @@ -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 diff --git a/docs/source/Howto/Weather-Tutorial.md b/docs/source/Howto/Weather-Tutorial.md index ad8832acb6..5c1c715c1a 100644 --- a/docs/source/Howto/Weather-Tutorial.md +++ b/docs/source/Howto/Weather-Tutorial.md @@ -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. diff --git a/docs/source/Howto/Web-Character-Generation.md b/docs/source/Howto/Web-Character-Generation.md index d10de244c9..d1878a0c58 100644 --- a/docs/source/Howto/Web-Character-Generation.md +++ b/docs/source/Howto/Web-Character-Generation.md @@ -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) diff --git a/docs/source/Setup/Arxcode-installing-help.md b/docs/source/Setup/Arxcode-installing-help.md index 9ea12282ff..97ef2918ed 100644 --- a/docs/source/Setup/Arxcode-installing-help.md +++ b/docs/source/Setup/Arxcode-installing-help.md @@ -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). diff --git a/docs/source/Setup/Getting-Started.md b/docs/source/Setup/Getting-Started.md index 96671169cc..5663ff6830 100644 --- a/docs/source/Setup/Getting-Started.md +++ b/docs/source/Setup/Getting-Started.md @@ -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! diff --git a/docs/source/Setup/How-to-connect-Evennia-to-Twitter.md b/docs/source/Setup/How-to-connect-Evennia-to-Twitter.md index 53a90a7008..26b7e3a810 100644 --- a/docs/source/Setup/How-to-connect-Evennia-to-Twitter.md +++ b/docs/source/Setup/How-to-connect-Evennia-to-Twitter.md @@ -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. \ No newline at end of file diff --git a/docs/source/Setup/IRC.md b/docs/source/Setup/IRC.md index ea4dd7cee5..be1204b081 100644 --- a/docs/source/Setup/IRC.md +++ b/docs/source/Setup/IRC.md @@ -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). diff --git a/docs/source/Setup/Installing-on-Android.md b/docs/source/Setup/Installing-on-Android.md index 39569be634..e8edb2fca1 100644 --- a/docs/source/Setup/Installing-on-Android.md +++ b/docs/source/Setup/Installing-on-Android.md @@ -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 diff --git a/docs/source/Setup/Online-Setup.md b/docs/source/Setup/Online-Setup.md index dec5ac97ed..0438ea1fb1 100644 --- a/docs/source/Setup/Online-Setup.md +++ b/docs/source/Setup/Online-Setup.md @@ -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. diff --git a/docs/source/Setup/RSS.md b/docs/source/Setup/RSS.md index aa757d0fd3..35a3d867bb 100644 --- a/docs/source/Setup/RSS.md +++ b/docs/source/Setup/RSS.md @@ -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. \ No newline at end of file +same channels as [IRC](IRC) to have the feed echo to external chat channels as well. \ No newline at end of file diff --git a/docs/source/Setup/Running-Evennia-in-Docker.md b/docs/source/Setup/Running-Evennia-in-Docker.md index d91c701d9f..2e46401daa 100644 --- a/docs/source/Setup/Running-Evennia-in-Docker.md +++ b/docs/source/Setup/Running-Evennia-in-Docker.md @@ -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 diff --git a/docs/source/Setup/Security.md b/docs/source/Setup/Security.md index 10ba69b200..d72d41a2cf 100644 --- a/docs/source/Setup/Security.md +++ b/docs/source/Setup/Security.md @@ -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 diff --git a/docs/source/Setup/Start-Stop-Reload.md b/docs/source/Setup/Start-Stop-Reload.md index d6fdb87ef3..071355d785 100644 --- a/docs/source/Setup/Start-Stop-Reload.md +++ b/docs/source/Setup/Start-Stop-Reload.md @@ -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. diff --git a/docs/source/toc.md b/docs/source/toc.md index 912780ad27..37a051a21c 100644 --- a/docs/source/toc.md +++ b/docs/source/toc.md @@ -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)