mirror of
https://github.com/evennia/evennia.git
synced 2026-03-30 20:47:17 +02:00
commit
78971df146
26 changed files with 210 additions and 124 deletions
27
.github/ISSUE_TEMPLATE/bug-report-develop.md
vendored
Normal file
27
.github/ISSUE_TEMPLATE/bug-report-develop.md
vendored
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
---
|
||||
name: Bug report (branch-develop)
|
||||
about: Use this to report errors in the Evennia `develop` branch
|
||||
title: "[BUG - Develop] (Enter a brief description here)"
|
||||
labels: bug, branch-develop
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
#### Describe the bug
|
||||
<!--(Summarize your bug as clearly as possible here)-->
|
||||
|
||||
#### To Reproduce
|
||||
Steps to reproduce the behavior:
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4. See error
|
||||
|
||||
#### Expected behavior
|
||||
<!--(Add a clear and concise description of what you expected to happen.)-->
|
||||
|
||||
#### Develop-branch commit
|
||||
<!-- (The develop-branch commit-hash. If unsure, run `evennia -v` or get the first few lines of the `about` command in-game.) -->
|
||||
|
||||
#### Additional context
|
||||
<!--(Add with any other context about the problem, or ideas on how to solve.)-->
|
||||
8
.github/ISSUE_TEMPLATE/bug-report.md
vendored
8
.github/ISSUE_TEMPLATE/bug-report.md
vendored
|
|
@ -8,7 +8,7 @@ assignees: ''
|
|||
---
|
||||
|
||||
#### Describe the bug
|
||||
(Replace with a clear and concise description of what the bug is.)
|
||||
<!--(Write with a clear and concise description of what the bug is.)-->
|
||||
|
||||
#### To Reproduce
|
||||
Steps to reproduce the behavior:
|
||||
|
|
@ -18,10 +18,10 @@ Steps to reproduce the behavior:
|
|||
4. See error
|
||||
|
||||
#### Expected behavior
|
||||
(Replace with a clear and concise description of what you expected to happen.)
|
||||
<!--(Write a clear and concise description of what you expected to happen.)-->
|
||||
|
||||
#### Environment, Evennia version, OS etc
|
||||
(Replace with info. If unsure, run `evennia -v` or get the first few lines of the `about` command in-game.)
|
||||
<!--(Add Evennia version and ideally commit hash. If unsure, run `evennia -v` or get the first few lines of the `about` command in-game.)-->
|
||||
|
||||
#### Additional context
|
||||
(Replace with any other context about the problem, or ideas on how to solve.)
|
||||
<!--(Add with any other context about the problem, or ideas on how to solve.)-->
|
||||
|
|
|
|||
10
.github/ISSUE_TEMPLATE/documentation-issue.md
vendored
10
.github/ISSUE_TEMPLATE/documentation-issue.md
vendored
|
|
@ -7,11 +7,11 @@ assignees: ''
|
|||
|
||||
---
|
||||
|
||||
#### Existing page / new
|
||||
(Link to existing documentation page or proposed name of new page)
|
||||
#### Documentation page name and link
|
||||
<!--(Give the name and link to the documentation page that needs changes, or the proposed name of a new page)-->
|
||||
|
||||
#### Documentation issue
|
||||
(Replace with the description of what the issue is or motivate a changes/additions)
|
||||
#### Reason for issue
|
||||
<!--(Motivate why you suggest this change)-->
|
||||
|
||||
#### Suggested change
|
||||
(Enter the suggested change here)
|
||||
<!--(Enter the suggested change here)-->
|
||||
|
|
|
|||
10
.github/ISSUE_TEMPLATE/feature-request.md
vendored
10
.github/ISSUE_TEMPLATE/feature-request.md
vendored
|
|
@ -8,13 +8,13 @@ assignees: ''
|
|||
---
|
||||
|
||||
#### Is your feature request related to a problem? Please describe.
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
<!--(Optional - a concise description of what the problem is. Ex. I'm always frustrated when [...])-->
|
||||
|
||||
#### Describe the solution you'd like
|
||||
A clear and concise description of what you want to happen.
|
||||
<!--(A clear and concise description of what you want to happen after this feature is added)-->
|
||||
|
||||
#### Describe alternatives you've considered
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
#### Alternatives you've considered
|
||||
<!--(Describe any alternatives you've already considered/tried, if any)-->
|
||||
|
||||
#### Additional context
|
||||
Add any other context or screenshots about the feature request here.
|
||||
<!--(Any other info, links, images etc that can help with implementing or motivate adding this feature)-->
|
||||
|
|
|
|||
37
.github/workflows/github_action_test_suite.yml
vendored
37
.github/workflows/github_action_test_suite.yml
vendored
|
|
@ -18,7 +18,7 @@ jobs:
|
|||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
python-version: [3.7, 3.8]
|
||||
python-version: [3.7, 3.8, 3.9]
|
||||
TESTING_DB: ['sqlite3', 'postgresql', 'mysql']
|
||||
|
||||
steps:
|
||||
|
|
@ -44,7 +44,7 @@ jobs:
|
|||
mysql user: 'evennia'
|
||||
mysql password: 'password'
|
||||
|
||||
# wait for db to activage, get logs from their start
|
||||
# wait for db to activate, get logs from their start
|
||||
- name: Wait / sleep
|
||||
uses: jakejarvis/wait-action@v0.1.0
|
||||
if: ${{ matrix.TESTING_DB == 'postgresql' || matrix.TESTING_DB == 'mysql' }}
|
||||
|
|
@ -107,3 +107,36 @@ jobs:
|
|||
with:
|
||||
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
|
||||
coverage-reports: ./testing_mygame/coverage.xml
|
||||
|
||||
# docker setup and push
|
||||
-
|
||||
name: Set up QEMU
|
||||
if: matrix.TESTING_DB == 'sqlite3' && matrix.python-version == 3.7
|
||||
uses: docker/setup-qemu-action@v1
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
if: matrix.TESTING_DB == 'sqlite3' && matrix.python-version == 3.7
|
||||
uses: docker/setup-buildx-action@v1
|
||||
-
|
||||
name: Login to DockerHub
|
||||
if: matrix.TESTING_DB == 'sqlite3' && matrix.python-version == 3.7 && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
-
|
||||
name: Build and push for master
|
||||
if: matrix.TESTING_DB == 'sqlite3' && matrix.python-version == 3.7 && github.ref == 'refs/heads/master'
|
||||
id: docker_build_master
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
push: true
|
||||
tags: evennia/evennia:latest
|
||||
-
|
||||
name: Build and push for develop
|
||||
if: matrix.TESTING_DB == 'sqlite3' && matrix.python-version == 3.7 && github.ref == 'refs/heads/develop'
|
||||
id: docker_build_develop
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
push: true
|
||||
tags: evennia/evennia:develop
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ or in the chat.
|
|||
|
||||
[pep8]: http://www.python.org/dev/peps/pep-0008
|
||||
[pep8tool]: https://pypi.python.org/pypi/pep8
|
||||
[googlestyle]: http://www.sphinx-doc.org/en/stable/ext/example_google.html
|
||||
[googlestyle]: https://www.sphinx-doc.org/en/master/usage/extensions/example_google.html
|
||||
[githubmarkdown]: https://help.github.com/articles/github-flavored-markdown/
|
||||
[markdown-hilight]: https://help.github.com/articles/github-flavored-markdown/#syntax-highlighting
|
||||
[command-docstrings]: https://github.com/evennia/evennia/wiki/Using%20MUX%20As%20a%20Standard#documentation-policy
|
||||
|
|
|
|||
16
README.md
16
README.md
|
|
@ -60,22 +60,22 @@ introduction][introduction] to read.
|
|||
|
||||
To learn how to get your hands on the code base, the [Getting
|
||||
started][gettingstarted] page is the way to go. Otherwise you could
|
||||
browse the [Documentation][wiki] or why not come join the [Evennia
|
||||
browse the [Documentation][docs] or why not come join the [Evennia
|
||||
Community forum][group] or join us in our [development chat][chat].
|
||||
Welcome!
|
||||
|
||||
|
||||
[homepage]: http://www.evennia.com
|
||||
[gettingstarted]: http://github.com/evennia/evennia/wiki/Getting-Started
|
||||
[wiki]: https://github.com/evennia/evennia/wiki
|
||||
[homepage]: https://www.evennia.com
|
||||
[gettingstarted]: https://www.evennia.com/docs/latest/Getting-Started.html
|
||||
[docs]: https://www.evennia.com/docs/latest
|
||||
[screenshot]: https://user-images.githubusercontent.com/294267/30773728-ea45afb6-a076-11e7-8820-49be2168a6b8.png
|
||||
[logo]: https://github.com/evennia/evennia/blob/master/evennia/web/website/static/website/images/evennia_logo.png
|
||||
[unittestciimg]: https://github.com/evennia/evennia/workflows/test-suite/badge.svg
|
||||
[unittestcilink]: https://github.com/evennia/evennia/actions?query=workflow%3Atest-suite
|
||||
[coverimg]: https://coveralls.io/repos/github/evennia/evennia/badge.svg?branch=master
|
||||
[coverlink]: https://coveralls.io/github/evennia/evennia?branch=master
|
||||
[introduction]: https://github.com/evennia/evennia/wiki/Evennia-Introduction
|
||||
[license]: https://github.com/evennia/evennia/wiki/Licensing
|
||||
[group]: https://groups.google.com/forum/#!forum/evennia
|
||||
[chat]: http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb
|
||||
[introduction]: https://www.evennia.com/docs/latest/Evennia-Introduction.html
|
||||
[license]: https://www.evennia.com/docs/latest/Licensing.html
|
||||
[group]: https://github.com/evennia/evennia/discussions
|
||||
[chat]: https://discord.gg/AJJpcRUhtF
|
||||
[wikimudpage]: http://en.wikipedia.org/wiki/MUD
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ The live documentation is (will in the future be) available at `https://evennia.
|
|||
# Editing the docs
|
||||
|
||||
The documentation source files are `*.md` (Markdown) files found in `evennia/docs/source/`.
|
||||
Markdown files are simple text files that can be edited with a normal text editor. They primaroly use
|
||||
Markdown files are simple text files that can be edited with a normal text editor. They primarily use
|
||||
the [Markdown][commonmark] syntax. See [the syntax section below](#Editing-syntax) for more help.
|
||||
|
||||
Don't edit the files in `source/api/`. These are auto-generated and your changes
|
||||
|
|
@ -18,7 +18,7 @@ will be lost.
|
|||
|
||||
## Contributing
|
||||
|
||||
Contributing to the docs is is like [contributing to the rest of Evennia][contributing]:
|
||||
Contributing to the docs is like [contributing to the rest of Evennia][contributing]:
|
||||
Check out the branch of Evennia you want to edit the documentation for. Create your
|
||||
own work-branch, make your changes to files in `evennia/docs/source/` and make a PR for it!
|
||||
|
||||
|
|
@ -66,7 +66,7 @@ All is done in your terminal/console.
|
|||
The full documentation includes both the doc pages and the API documentation
|
||||
generated from the Evennia source. For this you must install Evennia and
|
||||
initialize a new game with a default database (you don't need to have it
|
||||
running)
|
||||
running).
|
||||
|
||||
- Follow the normal [Evennia Getting-Started instructions][getting-started]
|
||||
to install Evennia. Use a virtualenv.
|
||||
|
|
@ -79,7 +79,7 @@ repo with
|
|||
```
|
||||
|
||||
- Then `cd` into it and create a new, empty database. You don't need to start the game
|
||||
or do any further changes.
|
||||
or make any further changes.
|
||||
|
||||
```
|
||||
evennia migrate
|
||||
|
|
@ -104,7 +104,7 @@ repo with
|
|||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
- Finally, build the full documentation, including the auto-docs:
|
||||
- Finally, build the full documentation including the auto-docs:
|
||||
|
||||
```
|
||||
make local
|
||||
|
|
@ -274,7 +274,7 @@ The Evennia documentation supports some special reference shortcuts in links:
|
|||
|
||||
This will generate a link to https://github.com/evennia/evennia/issues/new/choose.
|
||||
|
||||
> For some reason these particular shortcuts gives a warning during documentation compilation. This
|
||||
> For some reason these particular shortcuts give a warning during documentation compilation. This warning
|
||||
> can be ignored.
|
||||
|
||||
## Verbatim text
|
||||
|
|
@ -304,7 +304,7 @@ Everything within these backticks will be verbatim.
|
|||
|
||||
## Code blocks
|
||||
|
||||
A special case is code examples - we want them to get code-highlighting for readability. This is done by using
|
||||
Code examples are a special case - we want them to get code-highlighting for readability. This is done by using
|
||||
the triple-backticks and specify which language we use:
|
||||
|
||||
````
|
||||
|
|
@ -318,10 +318,9 @@ def a_python_func(x):
|
|||
|
||||
## ReST blocks
|
||||
|
||||
Markdown is easy to read and use. But while it does most of what we need, there are some things it's
|
||||
not quite as expressive as it needs to be. For this we need to fall back to the [ReST][ReST] markup
|
||||
language which the documentation system uses under the hood. This is done by specifying `eval_rst` as
|
||||
the name of the `language` of a literal block:
|
||||
Markdown is easy to read and use, but it isn't as expressive as it needs to be for some things. For this we
|
||||
need to fall back to the [ReST][ReST] markup language which the documentation system uses under the hood. This is
|
||||
done by specifying `eval_rst` as the name of the `language` of a literal block:
|
||||
|
||||
````
|
||||
```eval_rst
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
# requirements for building the docs
|
||||
|
||||
sphinx==3.2.1
|
||||
sphinx-multiversion==0.2.4
|
||||
# lunr==0.5.8
|
||||
myst-parser==0.15.2
|
||||
myst-parser[linkify]==0.15.2
|
||||
|
||||
# recommonmark custom branch with evennia-specific fixes
|
||||
git+https://github.com/evennia/recommonmark.git@evennia-mods#egg=recommonmark
|
||||
# sphinx-multiversion with evennia fixes
|
||||
git+https://github.com/evennia/sphinx-multiversion.git@evennia-mods#egg=sphinx-multiversion
|
||||
|
||||
# sphinxcontrib-lunrsearch custom branch with evennia-specific fixes
|
||||
git+https://github.com/evennia/sphinxcontrib-lunrsearch.git@evennia-mods#egg=sphinxcontrib-lunrsearch
|
||||
# git+https://github.com/evennia/sphinxcontrib-lunrsearch.git@evennia-mods#egg=sphinxcontrib-lunrsearch
|
||||
|
|
|
|||
|
|
@ -14,27 +14,27 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using
|
|||
[Batch-Processor](./Batch-Processors.md)'s interactive mode.
|
||||
```
|
||||
|
||||
- [**__unloggedin_look_command** [l, look]](evennia.commands.default.unloggedin.CmdUnconnectedLook) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**__unloggedin_look_command** [look, l]](evennia.commands.default.unloggedin.CmdUnconnectedLook) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**about** [version]](evennia.commands.default.system.CmdAbout) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**access** [hierarchy, groups]](evennia.commands.default.general.CmdAccess) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**accounts** [account, listaccounts]](evennia.commands.default.system.CmdAccounts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**access** [groups, hierarchy]](evennia.commands.default.general.CmdAccess) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**accounts** [listaccounts, account]](evennia.commands.default.system.CmdAccounts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**addcom** [chanalias, aliaschan]](evennia.commands.default.comms.CmdAddCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**alias** [setobjalias]](evennia.commands.default.building.CmdSetObjAlias) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**allcom**](evennia.commands.default.comms.CmdAllCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**batchcode** [batchcodes]](evennia.commands.default.batchprocess.CmdBatchCode) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**batchcommands** [batchcmd, batchcommand]](evennia.commands.default.batchprocess.CmdBatchCommands) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**batchcommands** [batchcommand, batchcmd]](evennia.commands.default.batchprocess.CmdBatchCommands) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**cboot**](evennia.commands.default.comms.CmdCBoot) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**ccreate** [channelcreate]](evennia.commands.default.comms.CmdChannelCreate) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**cdesc**](evennia.commands.default.comms.CmdCdesc) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**cdestroy**](evennia.commands.default.comms.CmdCdestroy) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**cemit** [cmsg]](evennia.commands.default.comms.CmdCemit) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**channels** [clist, chanlist, all channels, channellist, comlist]](evennia.commands.default.comms.CmdChannels) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**channels** [channellist, clist, comlist, all channels, chanlist]](evennia.commands.default.comms.CmdChannels) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**charcreate**](evennia.commands.default.account.CmdCharCreate) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**chardelete**](evennia.commands.default.account.CmdCharDelete) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**clock**](evennia.commands.default.comms.CmdClock) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**cmdsets** [listcmsets]](evennia.commands.default.building.CmdListCmdSets) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**color**](evennia.commands.default.account.CmdColorTest) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**connect** [conn, co, con]](evennia.commands.default.unloggedin.CmdUnconnectedConnect) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**connect** [con, co, conn]](evennia.commands.default.unloggedin.CmdUnconnectedConnect) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**copy**](evennia.commands.default.building.CmdCopy) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**cpattr**](evennia.commands.default.building.CmdCpAttr) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**create**](evennia.commands.default.building.CmdCreate) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
|
|
@ -42,17 +42,17 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using
|
|||
- [**cwho**](evennia.commands.default.comms.CmdCWho) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**delcom** [delchanalias, delaliaschan]](evennia.commands.default.comms.CmdDelCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**desc** [describe]](evennia.commands.default.building.CmdDesc) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**destroy** [delete, del]](evennia.commands.default.building.CmdDestroy) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**destroy** [del, delete]](evennia.commands.default.building.CmdDestroy) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**dig**](evennia.commands.default.building.CmdDig) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**drop**](evennia.commands.default.general.CmdDrop) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**encoding** [encode]](evennia.commands.default.unloggedin.CmdUnconnectedEncoding) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**examine** [ex, exam]](evennia.commands.default.building.CmdExamine) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Building_)
|
||||
- [**examine** [exam, ex]](evennia.commands.default.building.CmdExamine) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Building_)
|
||||
- [**find** [search, locate]](evennia.commands.default.building.CmdFind) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**get** [grab]](evennia.commands.default.general.CmdGet) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**give**](evennia.commands.default.general.CmdGive) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**grapevine2chan**](evennia.commands.default.comms.CmdGrapevine2Chan) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**help** [?]](evennia.commands.default.help.CmdHelp) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**help** [h, ?]](evennia.commands.default.unloggedin.CmdUnconnectedHelp) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**help** [?, h]](evennia.commands.default.unloggedin.CmdUnconnectedHelp) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**home**](evennia.commands.default.general.CmdHome) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**ic** [puppet]](evennia.commands.default.account.CmdIC) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**info**](evennia.commands.default.unloggedin.CmdUnconnectedInfo) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
|
|
@ -61,18 +61,18 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using
|
|||
- [**ircstatus**](evennia.commands.default.comms.CmdIRCStatus) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**link**](evennia.commands.default.building.CmdLink) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**lock** [locks]](evennia.commands.default.building.CmdLock) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**look** [l, ls]](evennia.commands.default.account.CmdOOCLook) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**look** [l, ls]](evennia.commands.default.general.CmdLook) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**look** [ls, l]](evennia.commands.default.account.CmdOOCLook) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**look** [ls, l]](evennia.commands.default.general.CmdLook) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**mvattr**](evennia.commands.default.building.CmdMvAttr) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**name** [rename]](evennia.commands.default.building.CmdName) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**nick** [nickname, nicks]](evennia.commands.default.general.CmdNick) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**objects** [listobjects, db, listobjs, stats]](evennia.commands.default.system.CmdObjects) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**nick** [nicks, nickname]](evennia.commands.default.general.CmdNick) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**objects** [stats, db, listobjects, listobjs]](evennia.commands.default.system.CmdObjects) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**ooc** [unpuppet]](evennia.commands.default.account.CmdOOC) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**open**](evennia.commands.default.building.CmdOpen) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**option** [options]](evennia.commands.default.account.CmdOption) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**page** [tell]](evennia.commands.default.comms.CmdPage) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**password**](evennia.commands.default.account.CmdPassword) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**pose** [emote, :]](evennia.commands.default.general.CmdPose) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**pose** [:, emote]](evennia.commands.default.general.CmdPose) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**py** [!]](evennia.commands.default.system.CmdPy) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_)
|
||||
- [**quell** [unquell]](evennia.commands.default.account.CmdQuell) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**quit**](evennia.commands.default.account.CmdQuit) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
|
|
@ -80,11 +80,11 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using
|
|||
- [**reload** [restart]](evennia.commands.default.system.CmdReload) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_)
|
||||
- [**reset** [reboot]](evennia.commands.default.system.CmdReset) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_)
|
||||
- [**rss2chan**](evennia.commands.default.comms.CmdRSS2Chan) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**say** [', "]](evennia.commands.default.general.CmdSay) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**say** [", ']](evennia.commands.default.general.CmdSay) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**screenreader**](evennia.commands.default.unloggedin.CmdUnconnectedScreenreader) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**script** [addscript]](evennia.commands.default.building.CmdScript) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**scripts** [listscripts, globalscript]](evennia.commands.default.system.CmdScripts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**server** [serverload, serverprocess]](evennia.commands.default.system.CmdServerLoad) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**scripts** [globalscript, listscripts]](evennia.commands.default.system.CmdScripts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**server** [serverprocess, serverload]](evennia.commands.default.system.CmdServerLoad) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**service** [services]](evennia.commands.default.system.CmdService) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**sessions**](evennia.commands.default.account.CmdSessions) (cmdset: [SessionCmdSet](evennia.commands.default.cmdset_session.SessionCmdSet), help-category: _General_)
|
||||
- [**set**](evennia.commands.default.building.CmdSetAttribute) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
|
|
@ -99,7 +99,7 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using
|
|||
- [**tickers**](evennia.commands.default.system.CmdTickers) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**time** [uptime]](evennia.commands.default.system.CmdTime) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**tunnel** [tun]](evennia.commands.default.building.CmdTunnel) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**typeclass** [swap, parent, update, type]](evennia.commands.default.building.CmdTypeclass) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**typeclass** [parent, update, type, swap]](evennia.commands.default.building.CmdTypeclass) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**unlink**](evennia.commands.default.building.CmdUnLink) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**whisper**](evennia.commands.default.general.CmdWhisper) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**who** [doing]](evennia.commands.default.account.CmdWho) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# API Summary
|
||||
|
||||
[evennia](evennia) - library root
|
||||
[evennia](api/evennia.md) - library root
|
||||
- [evennia.accounts](evennia.accounts) - the out-of-character entities representing players
|
||||
- [evennia.commands](evennia.commands) - handle all inputs. Also includes default commands
|
||||
- [evennia.comms](evennia.comms) - in-game channels and messaging
|
||||
|
|
|
|||
|
|
@ -124,6 +124,8 @@ when designing a virtual multiplayer world (Raph is known for *Ultima Online* am
|
|||
- Richard Bartle *Designing Virtual Worlds* ([amazon page](http://www.amazon.com/Designing-Virtual-Worlds-Richard-Bartle/dp/0131018167)) - Essential reading for the design of any persistent game
|
||||
world, written by the co-creator of the original game *MUD*. Published in 2003 but it's still as
|
||||
relevant now as when it came out. Covers everything you need to know and then some.
|
||||
|
||||
When the rights to Designing Virtual Worlds returned to him, Richard Bartle made the PDF of his Designing Virtual Worlds freely available through his own website ([Designing Virtual Worlds](https://mud.co.uk/dvw/)). A direct link to the PDF can be found [here](https://mud.co.uk/richard/DesigningVirtualWorlds.pdf).
|
||||
- Zed A. Shaw *Learn Python the Hard way* ([homepage](https://learnpythonthehardway.org/)) - Despite
|
||||
the imposing name this book is for the absolute Python/programming beginner. One learns the language
|
||||
by gradually creating a small text game! It has been used by multiple users before moving on to
|
||||
|
|
|
|||
|
|
@ -101,11 +101,11 @@ Read on for a description of the individual settings.
|
|||
### Telnet
|
||||
|
||||
```python
|
||||
# Required. Change to whichever outgoing Telnet port(s)
|
||||
# Required. Change to whichever outgoing Telnet port(s)
|
||||
# you are allowed to use on your host.
|
||||
TELNET_PORTS = [4000]
|
||||
# Optional for security. Restrict which telnet
|
||||
# interfaces we should accept. Should be set to your
|
||||
# Optional for security. Restrict which telnet
|
||||
# interfaces we should accept. Should be set to your
|
||||
# outward-facing IP address(es). Default is ´0.0.0.0´
|
||||
# which accepts all interfaces.
|
||||
TELNET_INTERFACES = ['0.0.0.0']
|
||||
|
|
@ -115,22 +115,22 @@ The `TELNET_*` settings are the most important ones for getting a traditional ba
|
|||
IP addresses you have available depends on your server hosting solution (see the next sections).
|
||||
Some hosts will restrict which ports you are allowed you use so make sure to check.
|
||||
|
||||
### Web server
|
||||
### Web server
|
||||
|
||||
```python
|
||||
# Required. This is a list of tuples
|
||||
# Required. This is a list of tuples
|
||||
# (outgoing_port, internal_port). Only the outgoing
|
||||
# port should be open to the world!
|
||||
# port should be open to the world!
|
||||
# set outgoing port to 80 if you want to run Evennia
|
||||
# as the only web server on your machine (if available).
|
||||
WEBSERVER_PORTS = [(4001, 4005)]
|
||||
# Optional for security. Change this to the IP your
|
||||
# server can be reached at (normally the same
|
||||
# Optional for security. Change this to the IP your
|
||||
# server can be reached at (normally the same
|
||||
# as TELNET_INTERFACES)
|
||||
WEBSERVER_INTERFACES = ['0.0.0.0']
|
||||
# Optional for security. Protects against
|
||||
# man-in-the-middle attacks. Change it to your server's
|
||||
# IP address or URL when you run a production server.
|
||||
# Optional for security. Protects against
|
||||
# man-in-the-middle attacks. Change it to your server's
|
||||
# IP address or URL when you run a production server.
|
||||
ALLOWED_HOSTS = ['*']
|
||||
```
|
||||
|
||||
|
|
@ -147,14 +147,14 @@ change the outgoing port unless the default internal port is clashing with some
|
|||
```python
|
||||
# Required. Change this to the main IP address of your server.
|
||||
WEBSOCKET_CLIENT_INTERFACE = '0.0.0.0'
|
||||
# Optional and needed only if using a proxy or similar. Change
|
||||
# to the IP or address where the client can reach
|
||||
# Optional and needed only if using a proxy or similar. Change
|
||||
# to the IP or address where the client can reach
|
||||
# your server. The ws:// part is then required. If not given, the client
|
||||
# will use its host location.
|
||||
# will use its host location.
|
||||
WEBSOCKET_CLIENT_URL = ""
|
||||
# Required. Change to a free port for the websocket client to reach
|
||||
# the server on. This will be automatically appended
|
||||
# to WEBSOCKET_CLIENT_URL by the web client.
|
||||
# the server on. This will be automatically appended
|
||||
# to WEBSOCKET_CLIENT_URL by the web client.
|
||||
WEBSOCKET_CLIENT_PORT = 4002
|
||||
```
|
||||
|
||||
|
|
@ -171,15 +171,15 @@ SSL_PORTS = [4003]
|
|||
SSL_INTERFACES = ['0.0.0.0']
|
||||
# Optional public facing. Only if you allow SSH connections (off by default).
|
||||
SSH_PORTS = [4004]
|
||||
SSH_INTERFACES = ['0.0.0.0']
|
||||
SSH_INTERFACES = ['0.0.0.0']
|
||||
# Required private. You should only change this if there is a clash
|
||||
# with other services on your host. Should NOT be open to the
|
||||
# outside world.
|
||||
# with other services on your host. Should NOT be open to the
|
||||
# outside world.
|
||||
AMP_PORT = 4006
|
||||
```
|
||||
|
||||
The `AMP_PORT` is required to work, since this is the internal port linking Evennia's
|
||||
[Server and Portal](../Components/Portal-And-Server.md) components together. The other ports are encrypted ports that may be
|
||||
The `AMP_PORT` is required to work, since this is the internal port linking Evennia's
|
||||
[Server and Portal](./Portal-And-Server.md) components together. The other ports are encrypted ports that may be
|
||||
useful for custom protocols but are otherwise not used.
|
||||
|
||||
### Lockdown mode
|
||||
|
|
@ -198,9 +198,9 @@ drum up interest for your game and also shows people that Evennia is being used.
|
|||
even if you are just starting development - if you don't give any telnet/web address it will appear
|
||||
as _Not yet public_ and just be a teaser. If so, pick _pre-alpha_ as the development status.
|
||||
|
||||
To register, stand in your game dir, run
|
||||
To register, stand in your game dir, run
|
||||
|
||||
evennia connections
|
||||
evennia connections
|
||||
|
||||
and follow the instructions. See the [Game index page](./Evennia-Game-Index.md) for more details.
|
||||
|
||||
|
|
@ -384,17 +384,19 @@ Evennia users:
|
|||
|
||||
| Hosting name | Type | Lowest price | Comments |
|
||||
|---|---| ---| --- |
|
||||
| [silvren.com][1] | Shell account | Free for MU* | Private hobby provider so don't assume backups or expect immediate support. To ask for an account,connect with a MUD client to iweb.localecho.net, port 4201 and ask for "Jarin". |
|
||||
| [silvren.com][1] | Shell account | Free for MU* | Private hobby provider so don't assume backups or expect immediate support. To ask for an account,connect with a MUD client to rostdev.mushpark.com, port 4201 and ask for "Jarin". |
|
||||
| [Digital Ocean][2] | VPS | $5/month | You can get a $50 credit if you use the referral link https://m.do.co/c/8f64fec2670c - if you do, once you've had it long enough to have paid $25 we will get that as a referral bonus to help Evennia development.|
|
||||
| [Amazon Web services][3] | Cloud | ~$5/month / on-demand | Free Tier first 12 months. Regions available around the globe.|
|
||||
| [Amazon Lightsail][9] | Cloud | $5/month | Free first month. AWS's new "fixed cost" offering.|
|
||||
| [Azure App Services][12] | Cloud | Free | Provides a free tier for hobbyist. Limited regions to be deployed to under the free tier|
|
||||
| [Huawei Cloud][13] | Cloud | on demand | Similar to Amazon. Free Tier first 12 months. Limited regions to be deployed to|
|
||||
| [Genesis MUD hosting][4] | Shell account | $8/month | Dedicated MUD host with very limited memory offerings. As for 2017, runs a 13 years old Python version (2.4) so you'd need to either convince them to update or compile yourself. Note that Evennia needs *at least* the "Deluxe" package (50MB RAM) and probably *a lot* higher for a production game. This host is *not* recommended for Evennia.|
|
||||
| [Host1Plus][5] | VPS & Cloud | $4/month | $4-$8/month depending on length of sign-up period.
|
||||
| [Scaleway][6] | Cloud | €3/month / on-demand | EU based (Paris, Amsterdam). Smallest option provides 2GB RAM. |
|
||||
| [Prgmr][10] | VPS | $5/month | 1 month free with a year prepay. You likely want some experience with servers with this option as they don't have a lot of support.|
|
||||
| [Linode][11] | Cloud | $5/month / on-demand | Multiple regions. Smallest option provides 1GB RAM|
|
||||
|
||||
*Please help us expand this list.*
|
||||
*Please help us expand this list.*
|
||||
|
||||
[1]: https://silvren.com
|
||||
[2]: https://www.digitalocean.com/pricing
|
||||
|
|
@ -407,6 +409,8 @@ Evennia users:
|
|||
[9]: https://amazonlightsail.com
|
||||
[10]: https://prgmr.com/
|
||||
[11]: https://www.linode.com/
|
||||
[12]: https://azure.microsoft.com/en-us/pricing/details/app-service/windows/
|
||||
[13]: https://activity.huaweicloud.com/intl/en-us/free_packages/index.html
|
||||
|
||||
## Cloud9
|
||||
|
||||
|
|
|
|||
|
|
@ -660,7 +660,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
|
|||
typeclass (str, optional): Typeclass to use for this character. If
|
||||
not given, use settings.BASE_CHARACTER_TYPECLASS.
|
||||
permissions (list, optional): If not given, use the account's permissions.
|
||||
ip (str, optiona): The client IP creating this character. Will fall back to the
|
||||
ip (str, optional): The client IP creating this character. Will fall back to the
|
||||
one stored for the account if not given.
|
||||
kwargs (any): Other kwargs will be used in the create_call.
|
||||
Returns:
|
||||
|
|
@ -927,7 +927,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
|
|||
kwargs (any): Other keyword arguments will be added to the
|
||||
found command object instance as variables before it
|
||||
executes. This is unused by default Evennia but may be
|
||||
used to set flags and change operating paramaters for
|
||||
used to set flags and change operating parameters for
|
||||
commands at run-time.
|
||||
|
||||
"""
|
||||
|
|
@ -1307,7 +1307,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
|
|||
self._send_to_connect_channel(_("|G{key} connected|n").format(key=self.key))
|
||||
if _MULTISESSION_MODE == 0:
|
||||
# in this mode we should have only one character available. We
|
||||
# try to auto-connect to our last conneted object, if any
|
||||
# try to auto-connect to our last connected object, if any
|
||||
try:
|
||||
self.puppet_object(session, self.db._last_puppet)
|
||||
except RuntimeError:
|
||||
|
|
@ -1334,7 +1334,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
|
|||
"""
|
||||
Called by the login process if a user account is targeted correctly
|
||||
but provided with an invalid password. By default it does nothing,
|
||||
but exists to be overriden.
|
||||
but exists to be overridden.
|
||||
|
||||
Args:
|
||||
session (session): Session logging in.
|
||||
|
|
@ -1574,7 +1574,7 @@ class DefaultGuest(DefaultAccount):
|
|||
Gets or creates a Guest account object.
|
||||
|
||||
Keyword Args:
|
||||
ip (str, optional): IP address of requestor; used for ban checking,
|
||||
ip (str, optional): IP address of requester; used for ban checking,
|
||||
throttling and logging
|
||||
|
||||
Returns:
|
||||
|
|
|
|||
|
|
@ -1061,7 +1061,7 @@ class CmdTunnel(COMMAND_DEFAULT_CLASS):
|
|||
exitname, backshort = self.directions[exitshort]
|
||||
backname = self.directions[backshort][0]
|
||||
|
||||
# if we recieved a typeclass for the exit, add it to the alias(short name)
|
||||
# if we received a typeclass for the exit, add it to the alias(short name)
|
||||
if ":" in self.lhs:
|
||||
# limit to only the first : character
|
||||
exit_typeclass = ":" + self.lhs.split(":", 1)[-1]
|
||||
|
|
@ -1647,7 +1647,7 @@ class CmdSetAttribute(ObjManipCommand):
|
|||
def split_nested_attr(self, attr):
|
||||
"""
|
||||
Yields tuples of (possible attr name, nested keys on that attr).
|
||||
For performance, this is biased to the deepest match, but allows compatability
|
||||
For performance, this is biased to the deepest match, but allows compatibility
|
||||
with older attrs that might have been named with `[]`'s.
|
||||
|
||||
> list(split_nested_attr("nested['asdf'][0]"))
|
||||
|
|
@ -3491,7 +3491,7 @@ class CmdSpawn(COMMAND_DEFAULT_CLASS):
|
|||
)
|
||||
return
|
||||
try:
|
||||
# we homogenize the protoype first, to be more lenient with free-form
|
||||
# we homogenize the prototype first, to be more lenient with free-form
|
||||
protlib.validate_prototype(protlib.homogenize_prototype(prototype))
|
||||
except RuntimeError as err:
|
||||
self.caller.msg(str(err))
|
||||
|
|
|
|||
|
|
@ -1261,7 +1261,7 @@ class CmdRSS2Chan(COMMAND_DEFAULT_CLASS):
|
|||
|
||||
class CmdGrapevine2Chan(COMMAND_DEFAULT_CLASS):
|
||||
"""
|
||||
Link an Evennia channel to an exteral Grapevine channel
|
||||
Link an Evennia channel to an external Grapevine channel
|
||||
|
||||
Usage:
|
||||
grapevine2chan[/switches] <evennia_channel> = <grapevine_channel>
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ class CmdHelp(COMMAND_DEFAULT_CLASS):
|
|||
def format_help_entry(title, help_text, aliases=None, suggested=None):
|
||||
"""
|
||||
This visually formats the help entry.
|
||||
This method can be overriden to customize the way a help
|
||||
This method can be overridden to customize the way a help
|
||||
entry is displayed.
|
||||
|
||||
Args:
|
||||
|
|
|
|||
|
|
@ -181,9 +181,24 @@ class TestGeneral(CommandTest):
|
|||
rid = self.room1.id
|
||||
self.call(general.CmdLook(), "here", "Room(#{})\nroom_desc".format(rid))
|
||||
|
||||
def test_look_no_location(self):
|
||||
self.char1.location = None
|
||||
self.call(general.CmdLook(), "", "You have no location to look at!")
|
||||
|
||||
def test_look_nonexisting(self):
|
||||
self.call(general.CmdLook(), "yellow sign", "Could not find 'yellow sign'.")
|
||||
|
||||
def test_home(self):
|
||||
self.call(general.CmdHome(), "", "You are already home")
|
||||
|
||||
def test_go_home(self):
|
||||
self.call(building.CmdTeleport(), "/quiet Room2")
|
||||
self.call(general.CmdHome(), "", "There's no place like home")
|
||||
|
||||
def test_no_home(self):
|
||||
self.char1.home = None
|
||||
self.call(general.CmdHome(), "", "You have no home")
|
||||
|
||||
def test_inventory(self):
|
||||
self.call(general.CmdInventory(), "", "You are not carrying anything.")
|
||||
|
||||
|
|
@ -213,6 +228,12 @@ class TestGeneral(CommandTest):
|
|||
self.assertEqual(None, self.char1.account.nicks.get("testalias", category="account"))
|
||||
self.assertEqual("testaliasedstring3", self.char1.nicks.get("testalias", category="object"))
|
||||
|
||||
def test_nick_list(self):
|
||||
self.call(general.CmdNick(), "/list", "No nicks defined.")
|
||||
self.call(general.CmdNick(), "test1 = Hello",
|
||||
"Inputline-nick 'test1' mapped to 'Hello'.")
|
||||
self.call(general.CmdNick(), "/list", "Defined Nicks:")
|
||||
|
||||
def test_get_and_drop(self):
|
||||
self.call(general.CmdGet(), "Obj", "You pick up Obj.")
|
||||
self.call(general.CmdDrop(), "Obj", "You drop Obj.")
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# world/
|
||||
|
||||
This folder is meant as a miscellanous folder for all that other stuff
|
||||
This folder is meant as a miscellaneous folder for all that other stuff
|
||||
related to the game. Code which are not commands or typeclasses go
|
||||
here, like custom economy systems, combat code, batch-files etc.
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ Possible keywords are:
|
|||
- `prototype_key` - the name of the prototype. This is required for db-prototypes,
|
||||
for module-prototypes, the global variable name of the dict is used instead
|
||||
- `prototype_parent` - string pointing to parent prototype if any. Prototype inherits
|
||||
in a similar way as classes, with children overriding values in their partents.
|
||||
in a similar way as classes, with children overriding values in their parents.
|
||||
- `key` - string, the main object identifier.
|
||||
- `typeclass` - string, if not set, will use `settings.BASE_OBJECT_TYPECLASS`.
|
||||
- `location` - this should be a valid object or #dbref.
|
||||
|
|
@ -42,7 +42,7 @@ Possible keywords are:
|
|||
of the shorter forms, defaults are used for the rest.
|
||||
- `tags` - Tags, as a list of tuples `(tag,)`, `(tag, category)` or `(tag, category, data)`.
|
||||
- Any other keywords are interpreted as Attributes with no category or lock.
|
||||
These will internally be added to `attrs` (eqivalent to `(attrname, value)`.
|
||||
These will internally be added to `attrs` (equivalent to `(attrname, value)`.
|
||||
|
||||
See the `spawn` command and `evennia.prototypes.spawner.spawn` for more info.
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from random import randint, sample
|
|||
import mock
|
||||
import uuid
|
||||
from time import time
|
||||
from anything import Something
|
||||
from anything import Something, Anything
|
||||
from django.test.utils import override_settings
|
||||
from evennia.utils.test_resources import EvenniaTest
|
||||
from evennia.utils.tests.test_evmenu import TestEvMenu
|
||||
|
|
@ -363,7 +363,7 @@ class TestProtFuncs(EvenniaTest):
|
|||
)
|
||||
self.assertEqual(
|
||||
protlib.protfunc_parser("$right_justify( foo )", testing=True),
|
||||
("unexpected indent (<unknown>, line 1)", " foo"),
|
||||
(Anything, " foo"),
|
||||
)
|
||||
|
||||
test_prot = {"key1": "value1", "key2": 2}
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ SSHUTD = chr(7) # server shutdown
|
|||
SSYNC = chr(8) # server session sync
|
||||
SCONN = chr(11) # server portal connection (for bots)
|
||||
PCONNSYNC = chr(12) # portal post-syncing session
|
||||
PDISCONNALL = chr(13) # portal session discnnect all
|
||||
PDISCONNALL = chr(13) # portal session disconnect all
|
||||
SRELOAD = chr(14) # server reloading (have portal start a new server)
|
||||
SSTART = chr(15) # server start (portal must already be running anyway)
|
||||
PSHUTD = chr(16) # portal (+server) shutdown
|
||||
|
|
@ -679,7 +679,7 @@ class ServerSessionHandler(SessionHandler):
|
|||
Get a unique list of connected and logged-in Accounts.
|
||||
|
||||
Returns:
|
||||
accounts (list): All conected Accounts (which may be fewer than the
|
||||
accounts (list): All connected Accounts (which may be fewer than the
|
||||
amount of Sessions due to multi-playing).
|
||||
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -27,45 +27,45 @@ from django.dispatch import Signal
|
|||
# Account.create() after the Account is created. Note that this will *not* fire
|
||||
# if calling create.create_account alone, since going through the Account.create()
|
||||
# is the most expected route.
|
||||
SIGNAL_ACCOUNT_POST_CREATE = Signal(providing_args=["ip"])
|
||||
SIGNAL_ACCOUNT_POST_CREATE = Signal()
|
||||
|
||||
# The Sender is the renamed Account. This is triggered by the username setter in AccountDB.
|
||||
SIGNAL_ACCOUNT_POST_RENAME = Signal(providing_args=["old_name", "new_name"])
|
||||
SIGNAL_ACCOUNT_POST_RENAME = Signal()
|
||||
|
||||
# The Sender is the connecting Account. This is triggered when an Account connects cold;
|
||||
# that is, it had no other sessions connected.
|
||||
SIGNAL_ACCOUNT_POST_FIRST_LOGIN = Signal(providing_args=["session"])
|
||||
SIGNAL_ACCOUNT_POST_FIRST_LOGIN = Signal()
|
||||
|
||||
# The sender is the connecting Account. This is triggered whenever a session authenticates
|
||||
# to an Account regardless of existing sessions. It then firest after FIRST_LOGIN signal
|
||||
SIGNAL_ACCOUNT_POST_LOGIN = Signal(providing_args=["session"])
|
||||
SIGNAL_ACCOUNT_POST_LOGIN = Signal()
|
||||
|
||||
# The Sender is the Account attempting to authenticate. This is triggered whenever a
|
||||
# session tries to login to an Account but fails.
|
||||
SIGNAL_ACCOUNT_POST_LOGIN_FAIL = Signal(providing_args=["session"])
|
||||
SIGNAL_ACCOUNT_POST_LOGIN_FAIL = Signal()
|
||||
|
||||
# The sender is the disconnecting Account. This is triggered whenever a session disconnects
|
||||
# from the account, regardless of how many it started with or remain.
|
||||
SIGNAL_ACCOUNT_POST_LOGOUT = Signal(providing_args=["session"])
|
||||
SIGNAL_ACCOUNT_POST_LOGOUT = Signal()
|
||||
|
||||
# The sender is the Account. This is triggered when an Account's final session disconnects.
|
||||
SIGNAL_ACCOUNT_POST_LAST_LOGOUT = Signal(providing_args=["session"])
|
||||
SIGNAL_ACCOUNT_POST_LAST_LOGOUT = Signal()
|
||||
|
||||
# The sender is an Object. This is triggered when Object has been created, after all hooks.
|
||||
SIGNAL_OBJECT_POST_CREATE = Signal()
|
||||
|
||||
# The sender is the Object being puppeted. This is triggered after all puppeting hooks have
|
||||
# been called. The Object has already been puppeted by this point.
|
||||
SIGNAL_OBJECT_POST_PUPPET = Signal(providing_args=["session", "account"])
|
||||
SIGNAL_OBJECT_POST_PUPPET = Signal()
|
||||
|
||||
# The sender is the Object being released. This is triggered after all hooks are called.
|
||||
# The Object is no longer puppeted by this point.
|
||||
SIGNAL_OBJECT_POST_UNPUPPET = Signal(providing_args=["session", "account"])
|
||||
SIGNAL_OBJECT_POST_UNPUPPET = Signal()
|
||||
|
||||
# The sender is the Typed Object being renamed. This isn't necessarily an Object;
|
||||
# it could be a script. It fires whenever the value of the Typed object's 'key'
|
||||
# changes. Will need to use isinstance() or other filtering on things that use this.
|
||||
SIGNAL_TYPED_OBJECT_POST_RENAME = Signal(providing_args=["old_key", "new_key"])
|
||||
SIGNAL_TYPED_OBJECT_POST_RENAME = Signal()
|
||||
|
||||
# The sender is the created Script. This is called after the Script was first created,
|
||||
# after all hooks.
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ be out of sync with the database.
|
|||
|
||||
"""
|
||||
from functools import update_wrapper
|
||||
from collections import defaultdict, MutableSequence, MutableSet, MutableMapping
|
||||
from collections import OrderedDict, deque
|
||||
from collections import deque, OrderedDict, defaultdict
|
||||
from collections.abc import MutableSequence, MutableSet, MutableMapping
|
||||
|
||||
try:
|
||||
from pickle import dumps, loads
|
||||
|
|
@ -391,7 +391,7 @@ class _SaverDeque(_SaverMutable):
|
|||
@_save
|
||||
def rotate(self, *args):
|
||||
self._data.rotate(*args)
|
||||
|
||||
|
||||
@_save
|
||||
def remove(self, *args):
|
||||
self._data.remove(*args)
|
||||
|
|
|
|||
|
|
@ -173,7 +173,7 @@ class EvMore:
|
|||
justify (bool, optional): If set, auto-justify long lines. This must be turned
|
||||
off for fixed-width or formatted output, like tables. It's force-disabled
|
||||
if `inp` is an EvTable.
|
||||
justify_kwargs (dict, optional): Keywords for the justifiy function. Used only
|
||||
justify_kwargs (dict, optional): Keywords for the justify function. Used only
|
||||
if `justify` is True. If this is not set, default arguments will be used.
|
||||
exit_on_lastpage (bool, optional): If reaching the last page without the
|
||||
page being completely filled, exit pager immediately. If unset,
|
||||
|
|
@ -518,7 +518,7 @@ class EvMore:
|
|||
def page_formatter(self, page):
|
||||
"""
|
||||
Page formatter. Every page passes through this method. Override
|
||||
it to customize behvaior per-page. A common use is to generate a new
|
||||
it to customize behavior per-page. A common use is to generate a new
|
||||
EvTable for every page (this is more efficient than to generate one huge
|
||||
EvTable across many pages and feed it into EvMore all at once).
|
||||
|
||||
|
|
|
|||
|
|
@ -785,7 +785,7 @@ def latinify(string, default="?", pure_ascii=False):
|
|||
This is used as a last resort when normal encoding does not work.
|
||||
|
||||
Arguments:
|
||||
string (str): A string to convert to 'safe characters' convertable
|
||||
string (str): A string to convert to 'safe characters' convertible
|
||||
to an latin-1 bytestring later.
|
||||
default (str, optional): Characters resisting mapping will be replaced
|
||||
with this character or string. The intent is to apply an encode operation
|
||||
|
|
@ -1050,7 +1050,7 @@ def delay(timedelay, callback, *args, **kwargs):
|
|||
Keep in mind that persistent tasks arguments and callback should not
|
||||
use memory references.
|
||||
If persistent is set to True the delay function will return an int
|
||||
which is the task's id itended for use with TASK_HANDLER's do_task
|
||||
which is the task's id intended for use with TASK_HANDLER's do_task
|
||||
and remove methods.
|
||||
All persistent tasks whose time delays have passed will be called on server startup.
|
||||
|
||||
|
|
@ -1430,12 +1430,12 @@ def class_from_module(path, defaultpaths=None, fallback=None):
|
|||
defaultpaths (iterable, optional): If a direct import from `path` fails,
|
||||
try subsequent imports by prepending those paths to `path`.
|
||||
fallback (str): If all other attempts fail, use this path as a fallback.
|
||||
This is intended as a last-resport. In the example of Evennia
|
||||
This is intended as a last-resort. In the example of Evennia
|
||||
loading, this would be a path to a default parent class in the
|
||||
evennia repo itself.
|
||||
|
||||
Returns:
|
||||
class (Class): An uninstatiated class recovered from path.
|
||||
class (Class): An uninstantiated class recovered from path.
|
||||
|
||||
Raises:
|
||||
ImportError: If all loading failed.
|
||||
|
|
@ -1574,7 +1574,7 @@ def string_partial_matching(alternatives, inp, ret_index=True):
|
|||
Matching is made from the start of each subword in each
|
||||
alternative. Case is not important. So e.g. "bi sh sw" or just
|
||||
"big" or "shiny" or "sw" will match "Big shiny sword". Scoring is
|
||||
done to allow to separate by most common demoninator. You will get
|
||||
done to allow to separate by most common denominator. You will get
|
||||
multiple matches returned if appropriate.
|
||||
|
||||
Args:
|
||||
|
|
@ -1647,7 +1647,7 @@ def format_table(table, extra_space=1):
|
|||
::
|
||||
|
||||
ftable = format_table([[...], [...], ...])
|
||||
for ir, row in enumarate(ftable):
|
||||
for ir, row in enumerate(ftable):
|
||||
if ir == 0:
|
||||
# make first row white
|
||||
string += "\\\\n|w" + ""join(row) + "|n"
|
||||
|
|
@ -2045,7 +2045,7 @@ def get_all_typeclasses(parent=None):
|
|||
typeclasses (dict): On the form {"typeclass.path": typeclass, ...}
|
||||
|
||||
Notes:
|
||||
This will dynamicall retrieve all abstract django models inheriting at any distance
|
||||
This will dynamically retrieve all abstract django models inheriting at any distance
|
||||
from the TypedObject base (aka a Typeclass) so it will work fine with any custom
|
||||
classes being added.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue