mirror of
https://github.com/evennia/evennia.git
synced 2026-03-16 21:06:30 +01:00
Made several tutorial doc pages
This commit is contained in:
parent
fe9157da16
commit
39735626e1
393 changed files with 4534 additions and 170 deletions
|
|
@ -0,0 +1,354 @@
|
|||
# Player Characters
|
||||
|
||||
In the [previous lesson about rules and dice rolling](Beginner-Gutorial-Rules) we made some assumptions
|
||||
about the "Player Character" entity:
|
||||
|
||||
- It should store Abilities on itself as `character.strength`, `character.constitution` etc.
|
||||
- It should have a `.heal(amount)` method.
|
||||
|
||||
So we have some guidelines of how it should look! A Character is a database entity with values that
|
||||
should be able to be changed over time. It makes sense to base it off Evennia's
|
||||
[DefaultCharacter Typeclass](../../../Components/Typeclasses.md). The Character class is like a 'character sheet' in a tabletop
|
||||
RPG, it will hold everything relevant to that PC.
|
||||
|
||||
## Inheritance structure
|
||||
|
||||
Player Characters (PCs) are not the only "living" things in our world. We also have _NPCs_
|
||||
(like shopkeepers and other friendlies) as well as _monsters_ (mobs) that can attack us.
|
||||
|
||||
In code, there are a few ways we could structure this. If NPCs/monsters were just special cases of PCs,
|
||||
we could use a class inheritance like this:
|
||||
|
||||
```python
|
||||
from evennia import DefaultCharacter
|
||||
|
||||
class EvAdventureCharacter(DefaultCharacter):
|
||||
# stuff
|
||||
|
||||
class EvAdventureNPC(EvAdventureCharacter):
|
||||
# more stuff
|
||||
|
||||
class EvAdventureMob(EvAdventureNPC):
|
||||
# more stuff
|
||||
```
|
||||
|
||||
All code we put on the `Character` class would now be inherited to `NPC` and `Mob` automatically.
|
||||
|
||||
However, in _Knave_, NPCs and particularly monsters are _not_ using the same rules as PCs - they are
|
||||
simplified to use a Hit-Die (HD) concept. So while still character-like, NPCs should be separate from
|
||||
PCs like this:
|
||||
|
||||
```python
|
||||
from evennia import DefaultCharacter
|
||||
|
||||
class EvAdventureCharacter(DefaultCharacter):
|
||||
# stuff
|
||||
|
||||
class EvAdventureNPC(DefaultCharacter):
|
||||
# separate stuff
|
||||
|
||||
class EvAdventureMob(EvadventureNPC):
|
||||
# more separate stuff
|
||||
```
|
||||
|
||||
Nevertheless, there are some things that _should_ be common for all 'living things':
|
||||
|
||||
- All can take damage.
|
||||
- All can die.
|
||||
- All can heal
|
||||
- All can hold and lose coins
|
||||
- All can loot their fallen foes.
|
||||
- All can get looted when defeated.
|
||||
|
||||
We don't want to code this separately for every class but we no longer have a common parent
|
||||
class to put it on. So instead we'll use the concept of a _mixin_ class:
|
||||
|
||||
```python
|
||||
from evennia import DefaultCharacter
|
||||
|
||||
class LivingMixin:
|
||||
# stuff common for all living things
|
||||
|
||||
class EvAdventureCharacter(LivingMixin, DefaultCharacter):
|
||||
# stuff
|
||||
|
||||
class EvAdventureNPC(LivingMixin, DefaultCharacter):
|
||||
# stuff
|
||||
|
||||
class EvAdventureMob(LivingMixin, EvadventureNPC):
|
||||
# more stuff
|
||||
```
|
||||
|
||||
```{sidebar}
|
||||
In [evennia/contrib/tutorials/evadventure/characters.py](evennia.contrib.tutorials.evadventure.characters)
|
||||
is an example of a character class structure.
|
||||
```
|
||||
Above, the `LivingMixin` class cannot work on its own - it just 'patches' the other classes with some
|
||||
extra functionality all living things should be able to do. This is an example of
|
||||
_multiple inheritance_. It's useful to know about, but one should not over-do multiple inheritance
|
||||
since it can also get confusing to follow the code.
|
||||
|
||||
## Living mixin class
|
||||
|
||||
> Create a new module `mygame/evadventure/characters.py`
|
||||
|
||||
Let's get some useful common methods all living things should have in our game.
|
||||
|
||||
```python
|
||||
# in mygame/evadventure/characters.py
|
||||
|
||||
from .rules import dice
|
||||
|
||||
class LivingMixin:
|
||||
|
||||
# makes it easy for mobs to know to attack PCs
|
||||
is_pc = False
|
||||
|
||||
def heal(self, hp):
|
||||
"""
|
||||
Heal hp amount of health, not allowing to exceed our max hp
|
||||
|
||||
"""
|
||||
damage = self.hp_max - self.hp
|
||||
healed = min(damage, hp)
|
||||
self.hp += healed
|
||||
|
||||
self.msg("You heal for {healed} HP.")
|
||||
|
||||
def at_pay(self, amount):
|
||||
"""When paying coins, make sure to never detract more than we have"""
|
||||
amount = min(amount, self.coins)
|
||||
self.coins -= amount
|
||||
return amount
|
||||
|
||||
def at_damage(self, damage, attacker=None):
|
||||
"""Called when attacked and taking damage."""
|
||||
self.hp -= damage
|
||||
|
||||
def at_defeat(self):
|
||||
"""Called when defeated. By default this means death."""
|
||||
self.at_death()
|
||||
|
||||
def at_death(self):
|
||||
"""Called when this thing dies."""
|
||||
# this will mean different things for different living things
|
||||
pass
|
||||
|
||||
def at_do_loot(self, looted):
|
||||
"""Called when looting another entity"""
|
||||
looted.at_looted(self)
|
||||
|
||||
def at_looted(self, looter):
|
||||
"""Called when looted by another entity"""
|
||||
|
||||
# default to stealing some coins
|
||||
max_steal = dice.roll("1d10")
|
||||
stolen = self.at_pay(max_steal)
|
||||
looter.coins += stolen
|
||||
|
||||
```
|
||||
Most of these are empty since they will behave differently for characters and npcs. But having them
|
||||
in the mixin means we can expect these methods to be available for all living things.
|
||||
|
||||
|
||||
## Character class
|
||||
|
||||
We will now start making the basic Character class, based on what we need from _Knave_.
|
||||
|
||||
```python
|
||||
# in mygame/evadventure/characters.py
|
||||
|
||||
from evennia import DefaultCharacter, AttributeProperty
|
||||
from .rules import dice
|
||||
|
||||
class LivingMixin:
|
||||
# ...
|
||||
|
||||
|
||||
class EvAdventureCharacter(LivingMixin, DefaultCharacter):
|
||||
"""
|
||||
A character to use for EvAdventure.
|
||||
"""
|
||||
is_pc = True
|
||||
|
||||
strength = AttributeProperty(1)
|
||||
dexterity = AttributeProperty(1)
|
||||
constitution = AttributeProperty(1)
|
||||
intelligence = AttributeProperty(1)
|
||||
wisdom = AttributeProperty(1)
|
||||
charisma = AttributeProperty(1)
|
||||
|
||||
hp = AttributeProperty(8)
|
||||
hp_max = AttributeProperty(8)
|
||||
|
||||
level = AttributeProperty(1)
|
||||
xp = AttributeProperty(0)
|
||||
coins = AttributeProperty(0)
|
||||
|
||||
def at_defeat(self):
|
||||
"""Characters roll on the death table"""
|
||||
if self.location.allow_death:
|
||||
# this allow rooms to have non-lethal battles
|
||||
dice.roll_death(self)
|
||||
else:
|
||||
self.location.msg_contents(
|
||||
"$You() $conj(collapse) in a heap, alive but beaten.",
|
||||
from_obj=self)
|
||||
self.heal(self.hp_max)
|
||||
|
||||
def at_death(self):
|
||||
"""We rolled 'dead' on the death table."""
|
||||
self.location.msg_contents(
|
||||
"$You() collapse in a heap, embraced by death.",
|
||||
from_obj=self)
|
||||
# TODO - go back into chargen to make a new character!
|
||||
```
|
||||
|
||||
We make an assumption about our rooms here - that they have a property `.allow_death`. We need
|
||||
to make a note to actually add such a property to rooms later!
|
||||
|
||||
In our `Character` class we implement all attributes we want to simulate from the _Knave_ ruleset.
|
||||
The `AttributeProperty` is one way to add an Attribute in a field-like way; these will be accessible
|
||||
on every character in several ways:
|
||||
|
||||
- As `character.strength`
|
||||
- As `character.db.strength`
|
||||
- As `character.attributes.get("strength")`
|
||||
|
||||
See [Attributes](../../../Components/Attributes.md) for seeing how Attributes work.
|
||||
|
||||
Unlike in base _Knave_, we store `coins` as a separate Attribute rather than as items in the inventory,
|
||||
this makes it easier to handle barter and trading later.
|
||||
|
||||
We implement the Player Character versions of `at_defeat` and `at_death`. We also make use of `.heal()`
|
||||
from the `LivingMixin` class.
|
||||
|
||||
### Funcparser inlines
|
||||
|
||||
This piece of code is worth some more explanation:
|
||||
|
||||
```python
|
||||
self.location.msg_contents(
|
||||
"$You() $conj(collapse) in a heap, alive but beaten.",
|
||||
from_obj=self)
|
||||
```
|
||||
|
||||
Remember that `self` is the Character instance here. So `self.location.msg_contents` means "send a
|
||||
message to everything inside my current location". In other words, send a message to everyone
|
||||
in the same place as the character.
|
||||
|
||||
The `$You() $conj(collapse)` are [Funcparser inlines](Funcparser). These are functions that execute
|
||||
in the string. The resulting string may look different for different audiences. The `$You()` inline
|
||||
function will use `from_obj` to figure out who 'you' are and either show your name or 'You'.
|
||||
The `$conj()` (verb conjugator) will tweak the (English) verb to match.
|
||||
|
||||
- You will see: `"You collapse in a heap, alive but beaten."`
|
||||
- Others in the room will see: `"Thomas collapses in a heap, alive but beaten."`
|
||||
|
||||
Note how `$conj()` chose `collapse/collapses` to make the sentences grammatically correct.
|
||||
|
||||
### Backtracking
|
||||
|
||||
We make our first use of the `rules.dice` roller to roll on the death table! As you may recall, in the
|
||||
previous lesson, we didn't know just what to do when rolling 'dead' on this table. Now we know - we
|
||||
should be calling `at_death` on the character. So let's add that where we had TODOs before:
|
||||
|
||||
```python
|
||||
# mygame/evadventure/rules.py
|
||||
|
||||
class EvAdventureRollEngine:
|
||||
|
||||
# ...
|
||||
|
||||
def roll_death(self, character):
|
||||
ability_name = self.roll_random_table("1d8", death_table)
|
||||
|
||||
if ability_name == "dead":
|
||||
# kill the character!
|
||||
character.at_death() # <------ TODO no more
|
||||
else:
|
||||
# ...
|
||||
|
||||
if current_ability < -10:
|
||||
# kill the character!
|
||||
character.at_death() # <------- TODO no more
|
||||
else:
|
||||
# ...
|
||||
```
|
||||
|
||||
|
||||
## Unit Testing
|
||||
|
||||
> Create a new module `mygame/evadventure/tests/test_characters.py`
|
||||
|
||||
For testing, we just need to create a new EvAdventure character and check
|
||||
that calling the methods on it doesn't error out.
|
||||
|
||||
```python
|
||||
# mygame/evadventure/tests/test_characters.py
|
||||
|
||||
from evennia.utils import create
|
||||
from evennia.utils.test_resources import BaseEvenniaTest
|
||||
|
||||
from ..characters import EvAdventureCharacter
|
||||
|
||||
class TestCharacters(BaseEvenniaTest):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.character = create.create_object(EvAdventureCharacter, key="testchar")
|
||||
|
||||
def test_heal(self):
|
||||
self.character.hp = 0
|
||||
self.character.hp_max = 8
|
||||
|
||||
self.character.heal(1)
|
||||
self.assertEqual(self.character.hp, 1)
|
||||
# make sure we can't heal more than max
|
||||
self.character.heal(100)
|
||||
self.assertEqual(self.character.hp, 8)
|
||||
|
||||
def test_at_pay(self):
|
||||
self.character.coins = 100
|
||||
|
||||
result = self.character.at_pay(60)
|
||||
self.assertEqual(result, 60)
|
||||
self.assertEqual(self.character.coins, 40)
|
||||
|
||||
# can't get more coins than we have
|
||||
result = self.character.at_pay(100)
|
||||
self.assertEqual(result, 40)
|
||||
self.assertEqual(self.character.coins, 0)
|
||||
|
||||
# tests for other methods ...
|
||||
|
||||
```
|
||||
If you followed the previous lessons, these tests should look familiar. Consider adding
|
||||
tests for other methods as practice. Refer to previous lessons for details.
|
||||
|
||||
For running the tests you do:
|
||||
|
||||
evennia test --settings settings.py .evadventure.tests.test_character
|
||||
|
||||
## Summary
|
||||
|
||||
|
||||
With the `EvAdventureCharacter` class in place, we have a better understanding of how our PCs will look
|
||||
like under _Knave_.
|
||||
|
||||
For now, we only have bits and pieces and haven't been testing this code in-game. But if you want
|
||||
you can swap yourself into `EvAdventureCharacter` right now. Log into your game and run
|
||||
the command
|
||||
|
||||
type self = evadventure.characters.EvAdventureCharacter
|
||||
|
||||
If all went well, `ex self` will now show your typeclass as being `EvAdventureCharacter`.
|
||||
Check out your strength with
|
||||
|
||||
py self.strength = 3
|
||||
|
||||
```{important}
|
||||
When doing `ex self` you will _not_ see all your Abilities listed yet. That's because
|
||||
Attributes added with `AttributeProperty` are not available until they have been accessed at
|
||||
least once. So once you set (or look at) `.strength` above, `strength` will show in `examine` from
|
||||
then on.
|
||||
```
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
# Handling Equipment
|
||||
|
||||
In _Knave_, you have a certain number of inventory "slots". The amount of slots is given by `CON + 10`.
|
||||
All items (except coins) have a `size`, indicating how many slots it uses. You can't carry more items
|
||||
than you have slot-space for. Also items wielded or worn count towards the slots.
|
||||
|
||||
We still need to track what the character is using however: What weapon they have readied affects the damage
|
||||
they can do. The shield, helmet and armor they use affects their defense.
|
||||
|
||||
We have already set up the possible 'wear/wield locations' when we defined our Objects
|
||||
[in the previous lesson](Beginner-Tutorial-Objects). This is what we have in `enums.py`:
|
||||
|
||||
```python
|
||||
# mygame/evadventure/enums.py
|
||||
|
||||
# ...
|
||||
|
||||
class WieldLocation(Enum):
|
||||
|
||||
BACKPACK = "backpack"
|
||||
WEAPON_HAND = "weapon_hand"
|
||||
SHIELD_HAND = "shield_hand"
|
||||
TWO_HANDS = "two_handed_weapons"
|
||||
BODY = "body" # armor
|
||||
HEAD = "head" # helmets
|
||||
```
|
||||
|
||||
Basically, all the weapon/armor locations are exclusive - you can only have one item in each (or none).
|
||||
The BACKPACK is special - it contains any number of items (up to the maximum slot usage).
|
||||
|
||||
## EquipmentHandler
|
||||
|
||||
> Create a new module `mygame/evadventure/equipment.py`.
|
||||
|
||||
In default Evennia, everything you pick up will end up "inside" your character object (that is, have
|
||||
you as its `.location`). This is called your _inventory_ and has no limit. We will keep 'moving items into us'
|
||||
when we pick them up, but we will add more functionality using an _Equipment handler_.
|
||||
|
||||
```{sidebar}
|
||||
If you want to understand more about behind how Evennia uses handlers, there is a
|
||||
[dedicated tutorial](Tutorial-Persistent-Handler) talking about the principle.
|
||||
```
|
||||
|
||||
A handler is (for our purposes) an object that sits "on" another entity, containing functionality
|
||||
for doing one specific thing (managing equipment, in our case).
|
||||
|
||||
This is the start of our handler:
|
||||
|
||||
```python
|
||||
# in mygame/evadventure/equipment.py
|
||||
|
||||
from .enums import WieldLocation
|
||||
|
||||
class EquipmentHandler:
|
||||
save_attribute = "inventory_slots"
|
||||
|
||||
def __init__(self, obj):
|
||||
# here obj is the character we store the handler on
|
||||
self.obj = obj
|
||||
self._load()
|
||||
|
||||
def _load(self):
|
||||
"""Load our data from an Attribute on `self.obj`"""
|
||||
self.slots = self.obj.attributes.get(
|
||||
self.save_attribute,
|
||||
category="inventory",
|
||||
default={
|
||||
WieldLocation.WEAPON_HAND: None,
|
||||
WieldLocation.SHIELD_HAND: None,
|
||||
WieldLocation.TWO_HANDS: None,
|
||||
WieldLocation.BODY: None,
|
||||
WieldLocation.HEAD: None,
|
||||
WieldLocation.BACKPACK: []
|
||||
}
|
||||
)
|
||||
|
||||
def _save(self):
|
||||
"""Save our data back to the same Attribute"""
|
||||
self.obj.attributes.add(self.save_attribute, self.slots, category="inventory")
|
||||
```
|
||||
|
||||
This is a compact and functioning little handler. Before analyzing how it works, this is how
|
||||
we will add it to the Character:
|
||||
|
||||
```python
|
||||
# mygame/evadventure/characters.py
|
||||
|
||||
# ...
|
||||
|
||||
from evennia.utils.utils import lazy_property
|
||||
from .equipment import EquipmentHandler
|
||||
|
||||
# ...
|
||||
|
||||
class EvAdventureCharacter(LivingMixin, DefaultCharacter):
|
||||
|
||||
# ...
|
||||
|
||||
@lazy_property
|
||||
def equipment(self):
|
||||
return EquipmentHandler(self)
|
||||
```
|
||||
|
||||
After reloading the server, the equipment-handler will now be accessible on the character as
|
||||
|
||||
character.equipment
|
||||
|
||||
The `@lazy_property` works such that it will not load the handler until it is first accessed. When that
|
||||
happens, we start up the handler and feed it `self` (the Character itself). This is what enters `__init__`
|
||||
as `.obj` in the `EquipmentHandler` code above.
|
||||
|
||||
So we now have a handler on the character, and the handler has a back-reference to the character it sits
|
||||
on.
|
||||
|
||||
Since the handler itself is just a regular Python object, we need to use the `Character` to store
|
||||
our data - our _Knave_ slots. We must save them to the database, because we want the server to remember
|
||||
them even after reloading.
|
||||
|
||||
Using `self.obj.attributes.add()` and `.get()` we save the data to the Character in a specially named
|
||||
[Attribute](Attributes). Since we use a `category`, we are unlikely to collide with other Attributes.
|
||||
|
|
@ -0,0 +1,334 @@
|
|||
# In-game Objects and items
|
||||
|
||||
In the previous lesson we established what a 'Character' is in our game. Before we continue
|
||||
we also need to have a notion what an 'item' or 'object' is.
|
||||
|
||||
Looking at _Knave_'s item lists, we can get some ideas of what we need to track:
|
||||
|
||||
- `size` - this is how many 'slots' the item uses in the character's inventory.
|
||||
- `value` - a base value if we want to sell or buy the item.
|
||||
- `inventory_use_slot` - some items can be worn or wielded. For example, a helmet needs to be
|
||||
worn on the head and a shield in the shield hand. Some items can't be used this way at all, but
|
||||
only belong in the backpack.
|
||||
- `obj_type` - Which 'type' of item this is.
|
||||
|
||||
|
||||
## New Enums
|
||||
|
||||
We added a few enumberations for Abilities back in the [Utilities tutorial](./Beginner-Tutorial-Utilities.md).
|
||||
Before we continue, let's expand with enums for use-slots and object types.
|
||||
|
||||
```python
|
||||
# mygame/evadventure/enums.py
|
||||
|
||||
# ...
|
||||
|
||||
class WieldLocation(Enum):
|
||||
|
||||
BACKPACK = "backpack"
|
||||
WEAPON_HAND = "weapon_hand"
|
||||
SHIELD_HAND = "shield_hand"
|
||||
TWO_HANDS = "two_handed_weapons"
|
||||
BODY = "body" # armor
|
||||
HEAD = "head" # helmets
|
||||
|
||||
class ObjType(Enum):
|
||||
|
||||
WEAPON = "weapon"
|
||||
ARMOR = "armor"
|
||||
SHIELD = "shield"
|
||||
HELMET = "helmet"
|
||||
CONSUMABLE = "consumable"
|
||||
GEAR = "gear"
|
||||
MAGIC = "magic"
|
||||
QUEST = "quest"
|
||||
TREASURE = "treasure"
|
||||
```
|
||||
|
||||
Once we have these enums, we will use them for referencing things.
|
||||
|
||||
## The base object
|
||||
|
||||
> Create a new module `mygame/evadventure/objects.py`
|
||||
|
||||
```{sidebar}
|
||||
[evennia/contrib/tutorials/evadventure/objects.py](evennia.contrib.tutorials.evadventure.objects) has
|
||||
a full set of objects implemented.
|
||||
```
|
||||
<div style="clear: right;"></div>
|
||||
|
||||
We will make a base `EvAdventureObject` class off Evennia's standard `DefaultObject`. We will then add
|
||||
child classes to represent the relevant types:
|
||||
|
||||
```python
|
||||
# mygame/evadventure/objects.py
|
||||
|
||||
from evennia import AttributeProperty, DefaultObject
|
||||
from evennia.utils.utils import make_iter
|
||||
from .utils import get_obj_stats
|
||||
from .enums import WieldLocation, ObjType
|
||||
|
||||
|
||||
class EvAdventureObject(DefaultObject):
|
||||
"""
|
||||
Base for all evadventure objects.
|
||||
|
||||
"""
|
||||
inventory_use_slot = WieldLocation.BACKPACK
|
||||
size = AttributeProperty(1, autocreate=False)
|
||||
value = AttributeProperty(0, autocreate=False)
|
||||
|
||||
# this can be either a single type or a list of types (for objects able to be
|
||||
# act as multiple). This is used to tag this object during creation.
|
||||
obj_type = ObjType.GEAR
|
||||
|
||||
def at_object_creation(self):
|
||||
"""Called when this object is first created. We convert the .obj_type
|
||||
property to a database tag."""
|
||||
|
||||
for obj_type in make_iter(self.obj_type):
|
||||
self.tags.add(self.obj_type.value, category="obj_type")
|
||||
|
||||
def get_help(self):
|
||||
"""Get any help text for this item"""
|
||||
return "No help for this item"
|
||||
```
|
||||
|
||||
### Using Attributes or not
|
||||
|
||||
In theory, `size` and `value` does not change and _could_ also be just set as a regular Python
|
||||
property on the class:
|
||||
|
||||
```python
|
||||
class EvAdventureObject(DefaultObject):
|
||||
inventory_use_slot = WieldLocation.BACKPACK
|
||||
size = 1
|
||||
value = 0
|
||||
```
|
||||
|
||||
The problem with this is that if we want to make a new object of `size 3` and `value 20`, we have to
|
||||
make a new class for it. We can't change it on the fly because the change would only be in memory and
|
||||
be lost on next server reload.
|
||||
|
||||
Because we use `AttributeProperties`, we can set `size` and `value` to whatever we like when we
|
||||
create the object (or later), and the Attributes will remember our changes to that object indefinitely.
|
||||
|
||||
To make this a little more efficient, we use `autocreate=False`. Normally when you create a
|
||||
new object with defined `AttributeProperties`, a matching `Attribute` is immediately created at
|
||||
the same time. So normally, the object would be created along with two Attributes `size` and `value`.
|
||||
With `autocreate=False`, no Attribute will be created _unless the default is changed_. That is, as
|
||||
long as your object has `size=1` no database `Attribute` will be created at all. This saves time and
|
||||
resources when creating large number of objects.
|
||||
|
||||
The drawback is that since no Attribute is created you can't refer to it
|
||||
with `obj.db.size` or `obj.attributes.get("size")` _unless you change its default_. You also can't query
|
||||
the database for all objects with `size=1`, since most objects would not yet have an in-database
|
||||
`size` Attribute to search for.
|
||||
|
||||
In our case, we'll only refer to these properties as `obj.size` etc, and have no need to find
|
||||
all objects of a particular size. So we should be safe.
|
||||
|
||||
### Creating tags in `at_object_creation`
|
||||
|
||||
The `at_object_creation` is a method Evennia calls on every child of `DefaultObject` whenever it is
|
||||
first created.
|
||||
|
||||
We do a tricky thing here, converting our `.obj_type` to one or more [Tags](../../../Components/Tags.md). Tagging the
|
||||
object like this means you can later efficiently find all objects of a given type (or combination of
|
||||
types) with Evennia's search functions:
|
||||
|
||||
```python
|
||||
from .enums import ObjType
|
||||
from evennia.utils import search
|
||||
|
||||
# get all shields in the game
|
||||
all_shields = search.search_object_by_tag(ObjType.SHIELD.value, category="obj_type")
|
||||
```
|
||||
|
||||
We allow `.obj_type` to be given as a single value or a list of values. We use `make_iter` from the
|
||||
evennia utility library to make sure we don't balk at either. This means you could have a Shield that
|
||||
is also Magical, for example.
|
||||
|
||||
## Other object types
|
||||
|
||||
Some of the other object types are very simple so far.
|
||||
|
||||
```python
|
||||
# mygame/evadventure/objects.py
|
||||
|
||||
from evennia import AttributeProperty, DefaultObject
|
||||
from .enums import ObjType
|
||||
|
||||
class EvAdventureObject(DefaultObject):
|
||||
# ...
|
||||
|
||||
|
||||
class EvAdventureQuestObject(EvAdventureObject):
|
||||
"""Quest objects should usually not be possible to sell or trade."""
|
||||
obj_type = ObjType.QUEST
|
||||
|
||||
class EvAdventureTreasure(EvAdventureObject):
|
||||
"""Treasure is usually just for selling for coin"""
|
||||
obj_type = ObjType.TREASURE
|
||||
value = AttributeProperty(100, autocreate=False)
|
||||
|
||||
```
|
||||
|
||||
## Consumables
|
||||
|
||||
A 'consumable' is an item that has a certain number of 'uses'. Once fully consumed, it can't be used
|
||||
anymore. An example would be a health potion.
|
||||
|
||||
|
||||
```python
|
||||
# mygame/evadventure/objects.py
|
||||
|
||||
# ...
|
||||
|
||||
class EvAdventureConsumable(EvAdventureObject):
|
||||
"""An item that can be used up"""
|
||||
|
||||
obj_type = ObjType.CONSUMABLE
|
||||
value = AttributeProperty(0.25, autocreate=False)
|
||||
uses = AttributeProperty(1, autocreate=False)
|
||||
|
||||
def at_pre_use(self, user, *args, **kwargs):
|
||||
"""Called before using. If returning False, abort use."""
|
||||
return uses > 0
|
||||
|
||||
def at_use(self, user, *args, **kwargs):
|
||||
"""Called when using the item"""
|
||||
pass
|
||||
|
||||
def at_post_use(self. user, *args, **kwargs):
|
||||
"""Called after using the item"""
|
||||
# detract a usage, deleting the item if used up.
|
||||
self.uses -= 1
|
||||
if self.uses <= 0:
|
||||
user.msg(f"{self.key} was used up.")
|
||||
self.delete()
|
||||
```
|
||||
|
||||
What exactly each consumable does will vary - we will need to implement children of this class
|
||||
later, overriding `at_use` with different effects.
|
||||
|
||||
## Weapons
|
||||
|
||||
All weapons need properties that describe how efficient they are in battle.
|
||||
|
||||
```python
|
||||
# mygame/evadventure/objects.py
|
||||
|
||||
from .enums import WieldLocation, ObjType, Ability
|
||||
|
||||
# ...
|
||||
|
||||
class EvAdventureWeapon(EvAdventureObject):
|
||||
"""Base class for all weapons"""
|
||||
|
||||
obj_type = ObjType.WEAPON
|
||||
inventory_use_slot = AttributeProperty(WieldLocation.WEAPON_HAND, autocreate=False)
|
||||
quality = AttributeProperty(3, autocreate=False)
|
||||
|
||||
attack_type = AttibuteProperty(Ability.STR, autocreate=False)
|
||||
defend_type = AttibuteProperty(Ability.ARMOR, autocreate=False)
|
||||
|
||||
damage_roll = AttibuteProperty("1d6", autocreate=False)
|
||||
```
|
||||
|
||||
The `quality` is something we need to track in _Knave_. When getting critical failures on attacks,
|
||||
a weapon's quality will go down. When it reaches 0, it will break.
|
||||
|
||||
The attack/defend type tracks how we resolve attacks with the weapon, like `roll + STR vs ARMOR + 10`.
|
||||
|
||||
## Magic
|
||||
|
||||
In _Knave_, anyone can use magic if they are wielding a rune stone (our name for spell books) in both
|
||||
hands. You can only use a rune stone once per rest. So a rune stone is an example of a 'magical weapon'
|
||||
that is also a 'consumable' of sorts.
|
||||
|
||||
|
||||
```python
|
||||
# mygame/evadventure/objects.py
|
||||
|
||||
# ...
|
||||
class EvAdventureConsumable(EvAdventureObject):
|
||||
# ...
|
||||
|
||||
class EvAdventureWeapon(EvAdventureObject):
|
||||
# ...
|
||||
|
||||
class EvAdventureRuneStone(EvAdventureWeapon, EvAdventureConsumable):
|
||||
"""Base for all magical rune stones"""
|
||||
|
||||
obj_type = (ObjType.WEAPON, ObjType.MAGIC)
|
||||
inventory_use_slot = WieldLocation.TWO_HANDS # always two hands for magic
|
||||
quality = AttributeProperty(3, autocreate=False)
|
||||
|
||||
attack_type = AttibuteProperty(Ability.INT, autocreate=False)
|
||||
defend_type = AttibuteProperty(Ability.DEX, autocreate=False)
|
||||
|
||||
damage_roll = AttibuteProperty("1d8", autocreate=False)
|
||||
|
||||
def at_post_use(self, user, *args, **kwargs):
|
||||
"""Called after usage/spell was cast"""
|
||||
self.uses -= 1
|
||||
# we don't delete the rune stone here, but
|
||||
# it must be reset on next rest.
|
||||
|
||||
def refresh(self):
|
||||
"""Refresh the rune stone (normally after rest)"""
|
||||
self.uses = 1
|
||||
```
|
||||
|
||||
We make the rune stone a mix of weapon and consumable. Note that we don't have to add `.uses`
|
||||
again, it's inherited from `EvAdventureConsumable` parent. The `at_pre_use` and `at_use` methods
|
||||
are also inherited; we only override `at_post_use` since we don't want the runestone to be deleted
|
||||
when it runs out of uses.
|
||||
|
||||
We add a little convenience method `refresh` - we should call this when the character rests, to
|
||||
make the runestone active again.
|
||||
|
||||
Exactly what rune stones _do_ will be implemented in the `at_use` methods of subclasses to this
|
||||
base class. Since magic in _Knave_ tends to be pretty custom, it makes sense that it will lead to a lot
|
||||
of custom code.
|
||||
|
||||
|
||||
## Armor
|
||||
|
||||
Armor, shields and helmets increase the `ARMOR` stat of the character. In _Knave_, what is stored is the
|
||||
defense value of the armor (values 11-20). We will instead store the 'armor bonus' (1-10). As we know,
|
||||
defending is always `bonus + 10`, so the result will be the same - this means
|
||||
we can use `Ability.ARMOR` as any other defensive ability without worrying about a special case.
|
||||
|
||||
``
|
||||
```python
|
||||
# mygame/evadventure/objects.py
|
||||
|
||||
# ...
|
||||
|
||||
class EvAdventureAmor(EvAdventureObject):
|
||||
obj_type = ObjType.ARMOR
|
||||
inventory_use_slot = WieldLocation.BODY
|
||||
|
||||
armor = AttributeProperty(1, autocreate=False)
|
||||
quality = AttributeProperty(3, autocreate=False)
|
||||
|
||||
|
||||
class EvAdventureShield(EvAdventureArmor):
|
||||
obj_type = ObjType.SHIELD
|
||||
inventory_use_slot = WieldLocation.SHIELD_HAND
|
||||
|
||||
|
||||
class EvAdventureHelmet(EvAdventureArmor):
|
||||
obj_type = ObjType.HELMET
|
||||
inventory_use_slot = WieldLocation.HEAD
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -25,9 +25,11 @@ This is a big part. You'll be seeing a lot of code and there are plenty of lesso
|
|||
Take your time!
|
||||
|
||||
If you followed the previous parts of this tutorial you will have some notions about Python and where to
|
||||
find and make use of things in Evennia. We also have a good idea of the type of game we want.
|
||||
find and make use of things in Evennia. We also have a good idea of the type of game we will
|
||||
create.
|
||||
|
||||
Even if this is not the game-style you are interested in, following along will give you a lot
|
||||
of experience with using Evennia. This be _really_ helpful for doing your own thing later.
|
||||
of experience using Evennia and be really helpful for doing your own thing later!
|
||||
|
||||
Fully coded examples of all code we make in this part can be found in the
|
||||
[evennia/contrib/tutorials/evadventure](evennia.contrib.tutorials.evadventure) package.
|
||||
|
|
@ -39,27 +41,29 @@ Fully coded examples of all code we make in this part can be found in the
|
|||
|
||||
Beginner-Tutorial-Utilities
|
||||
Beginner-Tutorial-Rules
|
||||
Beginner-Tutorial-Chargen
|
||||
Beginner-Tutorial-Characters
|
||||
Beginner-Tuturial-Objects
|
||||
Beginner-Tutorial-Rooms
|
||||
Beginner-Tutorial-NPCs
|
||||
Beginner-Tutorial-Turnbased-Combat
|
||||
Beginner-Tutorial-Quests
|
||||
Beginner-Tutorial-Shops
|
||||
Beginner-Tutorial-Dungeon
|
||||
Beginner-Tutorial-Commands
|
||||
|
||||
|
||||
## Table of Contents
|
||||
|
||||
```{toctree}
|
||||
|
||||
Beginner-Tutorial-Utilities
|
||||
Beginner-Tutorial-Rules
|
||||
Beginner-Tutorial-Objects
|
||||
Beginner-Tutorial-Equipment
|
||||
Beginner-Tutorial-Chargen
|
||||
Beginner-Tutorial-Rooms
|
||||
Beginner-Tutorial-NPCs
|
||||
Beginner-Tutorial-Turnbased-Combat
|
||||
Beginner-Tutorial-Quests
|
||||
Beginner-Tutorial-Shops
|
||||
Beginner-Tutorial-Dungeon
|
||||
Beginner-Tutorial-Commands
|
||||
```
|
||||
|
||||
## Table of Contents
|
||||
|
||||
```{toctree}
|
||||
|
||||
Beginner-Tutorial-Utilities
|
||||
Beginner-Tutorial-Rules
|
||||
Beginner-Tutorial-Characters
|
||||
Beginner-Tutorial-Objects
|
||||
Beginner-Tutorial-Equipment
|
||||
Beginner-Tutorial-Chargen
|
||||
Beginner-Tutorial-Characters
|
||||
Beginner-Tuturial-Objects
|
||||
Beginner-Tutorial-Rooms
|
||||
Beginner-Tutorial-NPCs
|
||||
Beginner-Tutorial-Turnbased-Combat
|
||||
|
|
|
|||
|
|
@ -361,30 +361,21 @@ class EvAdventureRollEngine:
|
|||
|
||||
# ...
|
||||
|
||||
def heal(character, amount):
|
||||
"""
|
||||
Heal a certain amount of health, but not more
|
||||
than character's `hp_max`.
|
||||
|
||||
"""
|
||||
|
||||
hp = character.hp
|
||||
hp_max = character.hp_max
|
||||
|
||||
damage = hp_max - hp
|
||||
character.hp += min(damage, amount)
|
||||
|
||||
def heal_from_rest(self, character):
|
||||
"""
|
||||
A night's rest retains 1d8 + CON HP
|
||||
|
||||
"""
|
||||
con_bonus = getattr(character, Ability.CON.value, 1)
|
||||
self.heal(character, self.roll("1d8") + con_bonus)
|
||||
character.heal(self.roll("1d8") + con_bonus)
|
||||
```
|
||||
|
||||
By splitting this into two methods, we get a free convenient `heal` method we can use for healing
|
||||
also outside of sleeping.
|
||||
We make another assumption here - that `character.heal()` is a thing. We tell this function how
|
||||
much the character should heal, and it will do so, making sure to not heal more than its max
|
||||
number of HPs
|
||||
|
||||
> Knowing what is available on the character and what rule rolls we need is a bit of a chicken-and-egg
|
||||
> problem. We will make sure to implement the matching _Character_ class next lesson.
|
||||
|
||||
|
||||
### Rolling on a table
|
||||
|
|
@ -568,11 +559,71 @@ We don't yet know what 'killing the character' technically means, so we mark thi
|
|||
return to it in a later lesson. We just know that we need to do _something_ here to kill off the
|
||||
character!
|
||||
|
||||
## Testing
|
||||
|
||||
> Make a new module `mygame/evadventure/tests/test_rules.py`
|
||||
|
||||
Testing the `rules` module will also showcase some very useful tools when testing.
|
||||
|
||||
```python
|
||||
# mygame/evadventure/tests/test_rules.py
|
||||
|
||||
from unittest.mock import patch
|
||||
from evennia.utils.test_resources import BaseEvenniaTest
|
||||
from .. import rules
|
||||
|
||||
class TestEvAdventureRuleEngine(BaseEvenniaTest):
|
||||
|
||||
def setUp(self):
|
||||
"""Called before every test method"""
|
||||
super().setUp()
|
||||
self.roll_engine = rules.EvAdventureRollEngine()
|
||||
|
||||
@patch("evadventure.rules.randint")
|
||||
def test_roll(self, mock_randint):
|
||||
mock_randint.return_value = 4
|
||||
self.assertEqual(self.roll_engine.roll("1d6", 4)
|
||||
self.assertEqual(self.roll_engine.roll("2d6", 2 * 4)
|
||||
|
||||
# test of the other rule methods below ...
|
||||
```
|
||||
|
||||
As before, run the specific test with
|
||||
|
||||
evennia test --settings settings.py .evadventure.tests.test_rules
|
||||
|
||||
### Mocking and patching
|
||||
|
||||
```{sidebar}
|
||||
In [evennia/contrib/tutorials/evadventure/tests/test_rules.py](evennia.contrib.tutorials.evadventure.tests.test_rules)
|
||||
has a complete example of rule testing.
|
||||
```
|
||||
The `setUp` method is a special method of the testing class. It will be run before every
|
||||
test method. We use `super().setUp()` to make sure the parent class' version of this method
|
||||
always fire. Then we create a fresh `EvAdventureRollEngine` we can test with.
|
||||
|
||||
In our test, we import `patch` from the `unittest.mock` library. This is a very useful tool for testing.
|
||||
Normally the `randint` function we imported in `rules` will return a random value. That's very hard to
|
||||
test for, since the value will be different every test.
|
||||
|
||||
With `@patch` (this is called a _decorator_), we temporarily replace `rules.randint` with a 'mock' - a
|
||||
dummy entity. This mock is passed into the testing method. We then take this `mock_randint` and set
|
||||
`.return_value = 4` on it.
|
||||
|
||||
Adding `return_value` to the mock means that every time this mock is called, it will return 4. For the
|
||||
duration of the test we can now check with `self.assertEqual` that our `roll` method always returns a
|
||||
result as-if the random result was 4.
|
||||
|
||||
There are [many resources for understanding mock](https://realpython.com/python-mock-library/), refer to
|
||||
them for further help.
|
||||
|
||||
> The `EvAdventureRollEngine` have many methods to test. We leave this as an extra exercise!
|
||||
|
||||
## Summary
|
||||
|
||||
This concludes all the core rule mechanics of _Knave_ - the rules used during play. We noticed here
|
||||
that we are going to soon need to establish how our _Character_ actually stores data. So we will
|
||||
address that next, before we get to the character generation itself.
|
||||
address that next.
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -128,42 +128,9 @@ class Ability(Enum):
|
|||
ALLEGIANCE_FRIENDLY = "friendly"
|
||||
|
||||
|
||||
class WieldLocation(Enum):
|
||||
"""
|
||||
Wield (or wear) locations.
|
||||
|
||||
"""
|
||||
|
||||
# wield/wear location
|
||||
BACKPACK = "backpack"
|
||||
WEAPON_HAND = "weapon_hand"
|
||||
SHIELD_HAND = "shield_hand"
|
||||
TWO_HANDS = "two_handed_weapons"
|
||||
BODY = "body" # armor
|
||||
HEAD = "head" # helmets
|
||||
|
||||
|
||||
class ObjType(Enum):
|
||||
"""
|
||||
Object types.
|
||||
|
||||
"""
|
||||
|
||||
WEAPON = "weapon"
|
||||
ARMOR = "armor"
|
||||
SHIELD = "shield"
|
||||
HELMET = "helmet"
|
||||
CONSUMABLE = "consumable"
|
||||
GEAR = "gear"
|
||||
MAGIC = "magic"
|
||||
QUEST = "quest"
|
||||
TREASURE = "treasure"
|
||||
```
|
||||
|
||||
Here the `Ability` class holds basic properties of a character sheet, while `WieldLocation` tracks
|
||||
equipment and where a character would wield and wear things - since _Knave_ has these, it makes sense
|
||||
to track it. Finally we have a set of different `ObjType`s, for differentiate game items. These are
|
||||
extracted by reading the _Knave_ object lists and figuring out how they should be categorized.
|
||||
Here the `Ability` class holds basic properties of a character sheet.
|
||||
|
||||
|
||||
## Utility module
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
# Making a Persistent object Handler
|
||||
|
||||
A _handler_ is a convenient way to group functionality on an object. This allows you to logically group all actions related to that thing in one place. This tutorial expemplifies how to make your own handlers and make sure data you store in them survives a reload.
|
||||
|
||||
For example, when you do `obj.attributes.get("key")` or `obj.tags.add('tagname')` you are evoking handlers stored as `.attributes` and `tags` on the `obj`. On these handlers are methods (`get()` and `add()` in this example).
|
||||
|
||||
## Base Handler example
|
||||
|
||||
|
||||
Here is a base way to set up an on-object handler:
|
||||
|
||||
```python
|
||||
|
|
@ -110,7 +111,7 @@ class QuestHandler:
|
|||
|
||||
```
|
||||
|
||||
The handler is just a normal Python class and has no database-storage on its own. But it has a link to `.obj`, which is assumed to be a full typeclased entity, on which we can create persistent [Attributes](Components/Attributes.md) to store things however we like!
|
||||
The handler is just a normal Python class and has no database-storage on its own. But it has a link to `.obj`, which is assumed to be a full typeclased entity, on which we can create persistent [Attributes](../Components/Attributes.md) to store things however we like!
|
||||
|
||||
We make two helper methods `_load` and
|
||||
`_save` that handles local fetches and saves `storage` to an Attribute on the object. To avoid saving more than necessary, we have a property `do_save`. This we will set in `Quest` below.
|
||||
|
|
@ -160,7 +161,7 @@ class Quest:
|
|||
|
||||
The `Quest.__init__` now takes `obj` as argument, to match what we pass to it in `QuestHandler.add`. We want to monitor the changing of `current_step`, so we make it into a `property`. When we edit that value, we set the `do_save` flag on the handler, which means it will save the status to database once it has checked progress on all its quests.
|
||||
|
||||
The `__serialize__dbobjs__` and `__deserialize_dbobjs__` methods are needed because `Attributes` can't store 'hidden' database objects (the `Quest.obj` property. The methods help Evennia serialize/deserialize `Quest` propertly when the handler saves it. For more information, see [Storing Single objects](Components/Attributes.md#storing-single-objects) in the Attributes documentation.
|
||||
The `__serialize__dbobjs__` and `__deserialize_dbobjs__` methods are needed because `Attributes` can't store 'hidden' database objects (the `Quest.obj` property. The methods help Evennia serialize/deserialize `Quest` propertly when the handler saves it. For more information, see [Storing Single objects](../Components/Attributes.md#storing-single-objects) in the Attributes documentation.
|
||||
|
||||
### Tying it all together
|
||||
|
||||
7
docs/source/api/evennia-api.rst
Normal file
7
docs/source/api/evennia-api.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia
|
||||
=======
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia
|
||||
7
docs/source/api/evennia.accounts.accounts.rst
Normal file
7
docs/source/api/evennia.accounts.accounts.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.accounts.accounts module
|
||||
================================
|
||||
|
||||
.. automodule:: evennia.accounts.accounts
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.accounts.bots.rst
Normal file
7
docs/source/api/evennia.accounts.bots.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.accounts.bots module
|
||||
============================
|
||||
|
||||
.. automodule:: evennia.accounts.bots
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.accounts.manager.rst
Normal file
7
docs/source/api/evennia.accounts.manager.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.accounts.manager module
|
||||
===============================
|
||||
|
||||
.. automodule:: evennia.accounts.manager
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.accounts.models.rst
Normal file
7
docs/source/api/evennia.accounts.models.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.accounts.models module
|
||||
==============================
|
||||
|
||||
.. automodule:: evennia.accounts.models
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
17
docs/source/api/evennia.accounts.rst
Normal file
17
docs/source/api/evennia.accounts.rst
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
evennia.accounts package
|
||||
========================
|
||||
|
||||
.. automodule:: evennia.accounts
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.accounts.accounts
|
||||
evennia.accounts.bots
|
||||
evennia.accounts.manager
|
||||
evennia.accounts.models
|
||||
7
docs/source/api/evennia.commands.cmdhandler.rst
Normal file
7
docs/source/api/evennia.commands.cmdhandler.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.cmdhandler module
|
||||
==================================
|
||||
|
||||
.. automodule:: evennia.commands.cmdhandler
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.cmdparser.rst
Normal file
7
docs/source/api/evennia.commands.cmdparser.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.cmdparser module
|
||||
=================================
|
||||
|
||||
.. automodule:: evennia.commands.cmdparser
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.cmdset.rst
Normal file
7
docs/source/api/evennia.commands.cmdset.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.cmdset module
|
||||
==============================
|
||||
|
||||
.. automodule:: evennia.commands.cmdset
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.cmdsethandler.rst
Normal file
7
docs/source/api/evennia.commands.cmdsethandler.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.cmdsethandler module
|
||||
=====================================
|
||||
|
||||
.. automodule:: evennia.commands.cmdsethandler
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.command.rst
Normal file
7
docs/source/api/evennia.commands.command.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.command module
|
||||
===============================
|
||||
|
||||
.. automodule:: evennia.commands.command
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.default.account.rst
Normal file
7
docs/source/api/evennia.commands.default.account.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.account module
|
||||
=======================================
|
||||
|
||||
.. automodule:: evennia.commands.default.account
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.default.admin.rst
Normal file
7
docs/source/api/evennia.commands.default.admin.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.admin module
|
||||
=====================================
|
||||
|
||||
.. automodule:: evennia.commands.default.admin
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.batchprocess module
|
||||
============================================
|
||||
|
||||
.. automodule:: evennia.commands.default.batchprocess
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.default.building.rst
Normal file
7
docs/source/api/evennia.commands.default.building.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.building module
|
||||
========================================
|
||||
|
||||
.. automodule:: evennia.commands.default.building
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.cmdset\_account module
|
||||
===============================================
|
||||
|
||||
.. automodule:: evennia.commands.default.cmdset_account
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.cmdset\_character module
|
||||
=================================================
|
||||
|
||||
.. automodule:: evennia.commands.default.cmdset_character
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.cmdset\_session module
|
||||
===============================================
|
||||
|
||||
.. automodule:: evennia.commands.default.cmdset_session
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.cmdset\_unloggedin module
|
||||
==================================================
|
||||
|
||||
.. automodule:: evennia.commands.default.cmdset_unloggedin
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.default.comms.rst
Normal file
7
docs/source/api/evennia.commands.default.comms.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.comms module
|
||||
=====================================
|
||||
|
||||
.. automodule:: evennia.commands.default.comms
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.default.general.rst
Normal file
7
docs/source/api/evennia.commands.default.general.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.general module
|
||||
=======================================
|
||||
|
||||
.. automodule:: evennia.commands.default.general
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.default.help.rst
Normal file
7
docs/source/api/evennia.commands.default.help.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.help module
|
||||
====================================
|
||||
|
||||
.. automodule:: evennia.commands.default.help
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.default.muxcommand.rst
Normal file
7
docs/source/api/evennia.commands.default.muxcommand.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.muxcommand module
|
||||
==========================================
|
||||
|
||||
.. automodule:: evennia.commands.default.muxcommand
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
29
docs/source/api/evennia.commands.default.rst
Normal file
29
docs/source/api/evennia.commands.default.rst
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
evennia.commands.default package
|
||||
================================
|
||||
|
||||
.. automodule:: evennia.commands.default
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.commands.default.account
|
||||
evennia.commands.default.admin
|
||||
evennia.commands.default.batchprocess
|
||||
evennia.commands.default.building
|
||||
evennia.commands.default.cmdset_account
|
||||
evennia.commands.default.cmdset_character
|
||||
evennia.commands.default.cmdset_session
|
||||
evennia.commands.default.cmdset_unloggedin
|
||||
evennia.commands.default.comms
|
||||
evennia.commands.default.general
|
||||
evennia.commands.default.help
|
||||
evennia.commands.default.muxcommand
|
||||
evennia.commands.default.syscommands
|
||||
evennia.commands.default.system
|
||||
evennia.commands.default.tests
|
||||
evennia.commands.default.unloggedin
|
||||
7
docs/source/api/evennia.commands.default.syscommands.rst
Normal file
7
docs/source/api/evennia.commands.default.syscommands.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.syscommands module
|
||||
===========================================
|
||||
|
||||
.. automodule:: evennia.commands.default.syscommands
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.default.system.rst
Normal file
7
docs/source/api/evennia.commands.default.system.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.system module
|
||||
======================================
|
||||
|
||||
.. automodule:: evennia.commands.default.system
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.default.tests.rst
Normal file
7
docs/source/api/evennia.commands.default.tests.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.tests module
|
||||
=====================================
|
||||
|
||||
.. automodule:: evennia.commands.default.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.commands.default.unloggedin.rst
Normal file
7
docs/source/api/evennia.commands.default.unloggedin.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.commands.default.unloggedin module
|
||||
==========================================
|
||||
|
||||
.. automodule:: evennia.commands.default.unloggedin
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
24
docs/source/api/evennia.commands.rst
Normal file
24
docs/source/api/evennia.commands.rst
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
evennia.commands package
|
||||
========================
|
||||
|
||||
.. automodule:: evennia.commands
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.commands.cmdhandler
|
||||
evennia.commands.cmdparser
|
||||
evennia.commands.cmdset
|
||||
evennia.commands.cmdsethandler
|
||||
evennia.commands.command
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.commands.default
|
||||
7
docs/source/api/evennia.comms.comms.rst
Normal file
7
docs/source/api/evennia.comms.comms.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.comms.comms module
|
||||
==========================
|
||||
|
||||
.. automodule:: evennia.comms.comms
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.comms.managers.rst
Normal file
7
docs/source/api/evennia.comms.managers.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.comms.managers module
|
||||
=============================
|
||||
|
||||
.. automodule:: evennia.comms.managers
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/api/evennia.comms.models.rst
Normal file
7
docs/source/api/evennia.comms.models.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
evennia.comms.models module
|
||||
===========================
|
||||
|
||||
.. automodule:: evennia.comms.models
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
16
docs/source/api/evennia.comms.rst
Normal file
16
docs/source/api/evennia.comms.rst
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
evennia.comms package
|
||||
=====================
|
||||
|
||||
.. automodule:: evennia.comms
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.comms.comms
|
||||
evennia.comms.managers
|
||||
evennia.comms.models
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.awsstorage.aws\_s3\_cdn module
|
||||
============================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.awsstorage.aws_s3_cdn
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
15
docs/source/api/evennia.contrib.base_systems.awsstorage.rst
Normal file
15
docs/source/api/evennia.contrib.base_systems.awsstorage.rst
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
evennia.contrib.base\_systems.awsstorage package
|
||||
================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.awsstorage
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.base_systems.awsstorage.aws_s3_cdn
|
||||
evennia.contrib.base_systems.awsstorage.tests
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.awsstorage.tests module
|
||||
=====================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.awsstorage.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.building\_menu.building\_menu module
|
||||
==================================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.building_menu.building_menu
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
evennia.contrib.base\_systems.building\_menu package
|
||||
====================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.building_menu
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.base_systems.building_menu.building_menu
|
||||
evennia.contrib.base_systems.building_menu.tests
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.building\_menu.tests module
|
||||
=========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.building_menu.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.color\_markups.color\_markups module
|
||||
==================================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.color_markups.color_markups
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
evennia.contrib.base\_systems.color\_markups package
|
||||
====================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.color_markups
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.base_systems.color_markups.color_markups
|
||||
evennia.contrib.base_systems.color_markups.tests
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.color\_markups.tests module
|
||||
=========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.color_markups.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.components.component module
|
||||
=========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.components.component
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.components.dbfield module
|
||||
=======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.components.dbfield
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.components.holder module
|
||||
======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.components.holder
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
18
docs/source/api/evennia.contrib.base_systems.components.rst
Normal file
18
docs/source/api/evennia.contrib.base_systems.components.rst
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
evennia.contrib.base\_systems.components package
|
||||
================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.components
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.base_systems.components.component
|
||||
evennia.contrib.base_systems.components.dbfield
|
||||
evennia.contrib.base_systems.components.holder
|
||||
evennia.contrib.base_systems.components.signals
|
||||
evennia.contrib.base_systems.components.tests
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.components.signals module
|
||||
=======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.components.signals
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.components.tests module
|
||||
=====================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.components.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.custom\_gametime.custom\_gametime module
|
||||
======================================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.custom_gametime.custom_gametime
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
evennia.contrib.base\_systems.custom\_gametime package
|
||||
======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.custom_gametime
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.base_systems.custom_gametime.custom_gametime
|
||||
evennia.contrib.base_systems.custom_gametime.tests
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.custom\_gametime.tests module
|
||||
===========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.custom_gametime.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.email\_login.connection\_screens module
|
||||
=====================================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.email_login.connection_screens
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.email\_login.email\_login module
|
||||
==============================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.email_login.email_login
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
16
docs/source/api/evennia.contrib.base_systems.email_login.rst
Normal file
16
docs/source/api/evennia.contrib.base_systems.email_login.rst
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
evennia.contrib.base\_systems.email\_login package
|
||||
==================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.email_login
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.base_systems.email_login.connection_screens
|
||||
evennia.contrib.base_systems.email_login.email_login
|
||||
evennia.contrib.base_systems.email_login.tests
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.email\_login.tests module
|
||||
=======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.email_login.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.ingame\_python.callbackhandler module
|
||||
===================================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.ingame_python.callbackhandler
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.ingame\_python.commands module
|
||||
============================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.ingame_python.commands
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.ingame\_python.eventfuncs module
|
||||
==============================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.ingame_python.eventfuncs
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
evennia.contrib.base\_systems.ingame\_python package
|
||||
====================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.ingame_python
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.base_systems.ingame_python.callbackhandler
|
||||
evennia.contrib.base_systems.ingame_python.commands
|
||||
evennia.contrib.base_systems.ingame_python.eventfuncs
|
||||
evennia.contrib.base_systems.ingame_python.scripts
|
||||
evennia.contrib.base_systems.ingame_python.tests
|
||||
evennia.contrib.base_systems.ingame_python.typeclasses
|
||||
evennia.contrib.base_systems.ingame_python.utils
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.ingame\_python.scripts module
|
||||
===========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.ingame_python.scripts
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.ingame\_python.tests module
|
||||
=========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.ingame_python.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.ingame\_python.typeclasses module
|
||||
===============================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.ingame_python.typeclasses
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.ingame\_python.utils module
|
||||
=========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.ingame_python.utils
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.menu\_login.connection\_screens module
|
||||
====================================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.menu_login.connection_screens
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.menu\_login.menu\_login module
|
||||
============================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.menu_login.menu_login
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
16
docs/source/api/evennia.contrib.base_systems.menu_login.rst
Normal file
16
docs/source/api/evennia.contrib.base_systems.menu_login.rst
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
evennia.contrib.base\_systems.menu\_login package
|
||||
=================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.menu_login
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.base_systems.menu_login.connection_screens
|
||||
evennia.contrib.base_systems.menu_login.menu_login
|
||||
evennia.contrib.base_systems.menu_login.tests
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.menu\_login.tests module
|
||||
======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.menu_login.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.mux\_comms\_cmds.mux\_comms\_cmds module
|
||||
======================================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
evennia.contrib.base\_systems.mux\_comms\_cmds package
|
||||
======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.mux_comms_cmds
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds
|
||||
evennia.contrib.base_systems.mux_comms_cmds.tests
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.mux\_comms\_cmds.tests module
|
||||
===========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.mux_comms_cmds.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
22
docs/source/api/evennia.contrib.base_systems.rst
Normal file
22
docs/source/api/evennia.contrib.base_systems.rst
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
evennia.contrib.base\_systems package
|
||||
=====================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.base_systems.awsstorage
|
||||
evennia.contrib.base_systems.building_menu
|
||||
evennia.contrib.base_systems.color_markups
|
||||
evennia.contrib.base_systems.components
|
||||
evennia.contrib.base_systems.custom_gametime
|
||||
evennia.contrib.base_systems.email_login
|
||||
evennia.contrib.base_systems.ingame_python
|
||||
evennia.contrib.base_systems.menu_login
|
||||
evennia.contrib.base_systems.mux_comms_cmds
|
||||
evennia.contrib.base_systems.unixcommand
|
||||
15
docs/source/api/evennia.contrib.base_systems.unixcommand.rst
Normal file
15
docs/source/api/evennia.contrib.base_systems.unixcommand.rst
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
evennia.contrib.base\_systems.unixcommand package
|
||||
=================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.unixcommand
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.base_systems.unixcommand.tests
|
||||
evennia.contrib.base_systems.unixcommand.unixcommand
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.unixcommand.tests module
|
||||
======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.unixcommand.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.base\_systems.unixcommand.unixcommand module
|
||||
============================================================
|
||||
|
||||
.. automodule:: evennia.contrib.base_systems.unixcommand.unixcommand
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.full\_systems.evscaperoom.commands module
|
||||
=========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.full_systems.evscaperoom.commands
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.full\_systems.evscaperoom.menu module
|
||||
=====================================================
|
||||
|
||||
.. automodule:: evennia.contrib.full_systems.evscaperoom.menu
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.full\_systems.evscaperoom.objects module
|
||||
========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.full_systems.evscaperoom.objects
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.full\_systems.evscaperoom.room module
|
||||
=====================================================
|
||||
|
||||
.. automodule:: evennia.contrib.full_systems.evscaperoom.room
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
21
docs/source/api/evennia.contrib.full_systems.evscaperoom.rst
Normal file
21
docs/source/api/evennia.contrib.full_systems.evscaperoom.rst
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
evennia.contrib.full\_systems.evscaperoom package
|
||||
=================================================
|
||||
|
||||
.. automodule:: evennia.contrib.full_systems.evscaperoom
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.full_systems.evscaperoom.commands
|
||||
evennia.contrib.full_systems.evscaperoom.menu
|
||||
evennia.contrib.full_systems.evscaperoom.objects
|
||||
evennia.contrib.full_systems.evscaperoom.room
|
||||
evennia.contrib.full_systems.evscaperoom.scripts
|
||||
evennia.contrib.full_systems.evscaperoom.state
|
||||
evennia.contrib.full_systems.evscaperoom.tests
|
||||
evennia.contrib.full_systems.evscaperoom.utils
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.full\_systems.evscaperoom.scripts module
|
||||
========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.full_systems.evscaperoom.scripts
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.full\_systems.evscaperoom.state module
|
||||
======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.full_systems.evscaperoom.state
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.full\_systems.evscaperoom.tests module
|
||||
======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.full_systems.evscaperoom.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.full\_systems.evscaperoom.utils module
|
||||
======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.full_systems.evscaperoom.utils
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
13
docs/source/api/evennia.contrib.full_systems.rst
Normal file
13
docs/source/api/evennia.contrib.full_systems.rst
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
evennia.contrib.full\_systems package
|
||||
=====================================
|
||||
|
||||
.. automodule:: evennia.contrib.full_systems
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.full_systems.evscaperoom
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.game\_systems.barter.barter module
|
||||
==================================================
|
||||
|
||||
.. automodule:: evennia.contrib.game_systems.barter.barter
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
15
docs/source/api/evennia.contrib.game_systems.barter.rst
Normal file
15
docs/source/api/evennia.contrib.game_systems.barter.rst
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
evennia.contrib.game\_systems.barter package
|
||||
============================================
|
||||
|
||||
.. automodule:: evennia.contrib.game_systems.barter
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.game_systems.barter.barter
|
||||
evennia.contrib.game_systems.barter.tests
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.game\_systems.barter.tests module
|
||||
=================================================
|
||||
|
||||
.. automodule:: evennia.contrib.game_systems.barter.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.game\_systems.clothing.clothing module
|
||||
======================================================
|
||||
|
||||
.. automodule:: evennia.contrib.game_systems.clothing.clothing
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
15
docs/source/api/evennia.contrib.game_systems.clothing.rst
Normal file
15
docs/source/api/evennia.contrib.game_systems.clothing.rst
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
evennia.contrib.game\_systems.clothing package
|
||||
==============================================
|
||||
|
||||
.. automodule:: evennia.contrib.game_systems.clothing
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.game_systems.clothing.clothing
|
||||
evennia.contrib.game_systems.clothing.tests
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.game\_systems.clothing.tests module
|
||||
===================================================
|
||||
|
||||
.. automodule:: evennia.contrib.game_systems.clothing.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.game\_systems.cooldowns.cooldowns module
|
||||
========================================================
|
||||
|
||||
.. automodule:: evennia.contrib.game_systems.cooldowns.cooldowns
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
15
docs/source/api/evennia.contrib.game_systems.cooldowns.rst
Normal file
15
docs/source/api/evennia.contrib.game_systems.cooldowns.rst
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
evennia.contrib.game\_systems.cooldowns package
|
||||
===============================================
|
||||
|
||||
.. automodule:: evennia.contrib.game_systems.cooldowns
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 6
|
||||
|
||||
evennia.contrib.game_systems.cooldowns.cooldowns
|
||||
evennia.contrib.game_systems.cooldowns.tests
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
evennia.contrib.game\_systems.cooldowns.tests module
|
||||
====================================================
|
||||
|
||||
.. automodule:: evennia.contrib.game_systems.cooldowns.tests
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue