Correct lineno alignment for docs; fix sidebar displays
This commit is contained in:
parent
39b4b7846b
commit
a427594f25
5 changed files with 41 additions and 42 deletions
|
|
@ -572,7 +572,7 @@ There are also two special properties:
|
||||||
Non-database attributes are not stored in the database and have no equivalence
|
Non-database attributes are not stored in the database and have no equivalence
|
||||||
to `category` nor `strvalue`, `attrtype` or `model`.
|
to `category` nor `strvalue`, `attrtype` or `model`.
|
||||||
|
|
||||||
# In-memory Attributes (NAttributes)
|
## In-memory Attributes (NAttributes)
|
||||||
|
|
||||||
_NAttributes_ (short of Non-database Attributes) mimic Attributes in most things except they
|
_NAttributes_ (short of Non-database Attributes) mimic Attributes in most things except they
|
||||||
are **non-persistent** - they will _not_ survive a server reload.
|
are **non-persistent** - they will _not_ survive a server reload.
|
||||||
|
|
|
||||||
|
|
@ -68,10 +68,6 @@ You can also use [shell-type wildcards](http://www.linfo.org/wildcard.html):
|
||||||
- [seq] - matches everything in the sequence, e.g. [xyz] will match both x, y and z
|
- [seq] - matches everything in the sequence, e.g. [xyz] will match both x, y and z
|
||||||
- [!seq] - matches everything *not* in the sequence. e.g. [!xyz] will match all but x,y z.
|
- [!seq] - matches everything *not* in the sequence. e.g. [!xyz] will match all but x,y z.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Coding with nicks
|
## Coding with nicks
|
||||||
|
|
||||||
Nicks are stored as the `Nick` database model and are referred from the normal Evennia
|
Nicks are stored as the `Nick` database model and are referred from the normal Evennia
|
||||||
|
|
@ -104,7 +100,7 @@ command in `evennia/commands/default/general.py` for more examples.
|
||||||
As a last note, The Evennia [channel](./Channels.md) alias systems are using nicks with the
|
As a last note, The Evennia [channel](./Channels.md) alias systems are using nicks with the
|
||||||
`nick_type="channel"` in order to allow users to create their own custom aliases to channels.
|
`nick_type="channel"` in order to allow users to create their own custom aliases to channels.
|
||||||
|
|
||||||
# Advanced note
|
## Advanced note
|
||||||
|
|
||||||
Internally, nicks are [Attributes](./Attributes.md) saved with the `db_attrype` set to "nick" (normal
|
Internally, nicks are [Attributes](./Attributes.md) saved with the `db_attrype` set to "nick" (normal
|
||||||
Attributes has this set to `None`).
|
Attributes has this set to `None`).
|
||||||
|
|
|
||||||
|
|
@ -111,13 +111,13 @@ new_script.delete()
|
||||||
timed_script.delete()
|
timed_script.delete()
|
||||||
```
|
```
|
||||||
|
|
||||||
# Defining new Scripts
|
## Defining new Scripts
|
||||||
|
|
||||||
A Script is defined as a class and is created in the same way as other
|
A Script is defined as a class and is created in the same way as other
|
||||||
[typeclassed](./Typeclasses.md) entities. The parent class is `evennia.DefaultScript`.
|
[typeclassed](./Typeclasses.md) entities. The parent class is `evennia.DefaultScript`.
|
||||||
|
|
||||||
|
|
||||||
## Simple storage script
|
### Simple storage script
|
||||||
|
|
||||||
In `mygame/typeclasses/scripts.py` is an empty `Script` class already set up. You
|
In `mygame/typeclasses/scripts.py` is an empty `Script` class already set up. You
|
||||||
can use this as a base for your own scripts.
|
can use this as a base for your own scripts.
|
||||||
|
|
@ -303,7 +303,7 @@ You can also attach the script as part of creating it:
|
||||||
create_script('typeclasses.weather.Weather', obj=myroom)
|
create_script('typeclasses.weather.Weather', obj=myroom)
|
||||||
```
|
```
|
||||||
|
|
||||||
# Other Script methods
|
## Other Script methods
|
||||||
|
|
||||||
A Script has all the properties of a typeclassed object, such as `db` and `ndb`(see
|
A Script has all the properties of a typeclassed object, such as `db` and `ndb`(see
|
||||||
[Typeclasses](./Typeclasses.md)). Setting `key` is useful in order to manage scripts (delete them by name
|
[Typeclasses](./Typeclasses.md)). Setting `key` is useful in order to manage scripts (delete them by name
|
||||||
|
|
@ -330,7 +330,7 @@ Typeclassed entities.
|
||||||
|
|
||||||
See also the methods involved in controlling a [Timed Script](#timed-scripts) above.
|
See also the methods involved in controlling a [Timed Script](#timed-scripts) above.
|
||||||
|
|
||||||
# The GLOBAL_SCRIPTS container
|
## The GLOBAL_SCRIPTS container
|
||||||
|
|
||||||
A Script not attached to another entity is commonly referred to as a _Global_ script since it't available
|
A Script not attached to another entity is commonly referred to as a _Global_ script since it't available
|
||||||
to access from anywhere. This means they need to be searched for in order to be used.
|
to access from anywhere. This means they need to be searched for in order to be used.
|
||||||
|
|
@ -413,7 +413,7 @@ That is, if the script is deleted, next time you get it from `GLOBAL_SCRIPTS`, E
|
||||||
information in settings to recreate it for you on the fly.
|
information in settings to recreate it for you on the fly.
|
||||||
|
|
||||||
|
|
||||||
# Hints: Dealing with Script Errors
|
## Hints: Dealing with Script Errors
|
||||||
|
|
||||||
Errors inside a timed, executing script can sometimes be rather terse or point to
|
Errors inside a timed, executing script can sometimes be rather terse or point to
|
||||||
parts of the execution mechanism that is hard to interpret. One way to make it
|
parts of the execution mechanism that is hard to interpret. One way to make it
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@ what is in it.
|
||||||
|
|
||||||
```{sidebar} Commands are not typeclassed
|
```{sidebar} Commands are not typeclassed
|
||||||
|
|
||||||
If you just came from the previous lesson, you might want to know that Commands and
|
If you just came from the previous lesson, you might want to know that Commands and
|
||||||
CommandSets are not `typeclassed`. That is, instances of them are not saved to the
|
CommandSets are not `typeclassed`. That is, instances of them are not saved to the
|
||||||
database. They are "just" normal Python classes.
|
database. They are "just" normal Python classes.
|
||||||
```
|
```
|
||||||
|
|
||||||
In Evennia, a Command is a Python _class_. If you are unsure about what a class is, review the
|
In Evennia, a Command is a Python _class_. If you are unsure about what a class is, review the
|
||||||
|
|
@ -271,7 +271,9 @@ Here, `<hitter>` would be the one using the `hit` command and `<target>` is the
|
||||||
|
|
||||||
Still in `mygame/commands/mycommands.py`, add a new class, between `CmdEcho` and `MyCmdSet`.
|
Still in `mygame/commands/mycommands.py`, add a new class, between `CmdEcho` and `MyCmdSet`.
|
||||||
|
|
||||||
```python
|
```{code-block} python
|
||||||
|
:linenos:
|
||||||
|
|
||||||
# ...
|
# ...
|
||||||
|
|
||||||
class CmdHit(Command):
|
class CmdHit(Command):
|
||||||
|
|
@ -299,30 +301,30 @@ class CmdHit(Command):
|
||||||
```
|
```
|
||||||
|
|
||||||
A lot of things to dissect here:
|
A lot of things to dissect here:
|
||||||
- **Line 4**: The normal `class` header. We inherit from `Command` which we imported at the top of this file.
|
- **Line 3**: The normal `class` header. We inherit from `Command` which we imported at the top of this file.
|
||||||
- **Lines 5**-11: The docstring and help-entry for the command. You could expand on this as much as you wanted.
|
- **Lines 4-10**: The docstring and help-entry for the command. You could expand on this as much as you wanted.
|
||||||
- **Line 12**: We want to write `hit` to use this command.
|
- **Line 11**: We want to write `hit` to use this command.
|
||||||
- **Line 15**: We strip the whitespace from the argument like before. Since we don't want to have to do
|
- **Line 14**: We strip the whitespace from the argument like before. Since we don't want to have to do
|
||||||
`self.args.strip()` over and over, we store the stripped version
|
`self.args.strip()` over and over, we store the stripped version
|
||||||
in a _local variable_ `args`. Note that we don't modify `self.args` by doing this, `self.args` will still
|
in a _local variable_ `args`. Note that we don't modify `self.args` by doing this, `self.args` will still
|
||||||
have the whitespace and is not the same as `args` in this example.
|
have the whitespace and is not the same as `args` in this example.
|
||||||
```{sidebar} if-statements
|
```{sidebar} if-statements
|
||||||
|
|
||||||
The full form of the if statement is
|
The full form of the if statement is
|
||||||
|
|
||||||
if condition:
|
if condition:
|
||||||
...
|
...
|
||||||
elif othercondition:
|
elif othercondition:
|
||||||
...
|
...
|
||||||
else:
|
else:
|
||||||
...
|
...
|
||||||
|
|
||||||
There can be any number of `elifs` to mark when different branches of the code should run. If
|
There can be any number of `elifs` to mark when different branches of the code should run. If
|
||||||
the `else` condition is given, it will run if none of the other conditions was truthy. In Python
|
the `else` condition is given, it will run if none of the other conditions was truthy. In Python
|
||||||
the `if..elif..else` structure also serves the same function as `case` in some other languages.
|
the `if..elif..else` structure also serves the same function as `case` in some other languages.
|
||||||
|
|
||||||
```
|
```
|
||||||
- **Line 16** has our first _conditional_, an `if` statement. This is written on the form `if <condition>:` and only
|
- **Line 15** has our first _conditional_, an `if` statement. This is written on the form `if <condition>:` and only
|
||||||
if that condition is 'truthy' will the indented code block under the `if` statement run. To learn what is truthy in
|
if that condition is 'truthy' will the indented code block under the `if` statement run. To learn what is truthy in
|
||||||
Python it's usually easier to learn what is "falsy":
|
Python it's usually easier to learn what is "falsy":
|
||||||
- `False` - this is a reserved boolean word in Python. The opposite is `True`.
|
- `False` - this is a reserved boolean word in Python. The opposite is `True`.
|
||||||
|
|
@ -334,12 +336,12 @@ A lot of things to dissect here:
|
||||||
|
|
||||||
Line 16's condition is `not args`. The `not` _inverses_ the result, so if `args` is the empty string (falsy), the
|
Line 16's condition is `not args`. The `not` _inverses_ the result, so if `args` is the empty string (falsy), the
|
||||||
whole conditional becomes truthy. Let's continue in the code:
|
whole conditional becomes truthy. Let's continue in the code:
|
||||||
- **Lines 17-18**: This code will only run if the `if` statement is truthy, in this case if `args` is the empty string.
|
- **Lines 16-17**: This code will only run if the `if` statement is truthy, in this case if `args` is the empty string.
|
||||||
- **Line 18**: `return` is a reserved Python word that exits `func` immediately.
|
- **Line 17**: `return` is a reserved Python word that exits `func` immediately.
|
||||||
- **Line 19**: We use `self.caller.search` to look for the target in the current location.
|
- **Line 18**: We use `self.caller.search` to look for the target in the current location.
|
||||||
- **Lines 20-21**: A feature of `.search` is that it will already inform `self.caller` if it couldn't find the target.
|
- **Lines 19-20**: A feature of `.search` is that it will already inform `self.caller` if it couldn't find the target.
|
||||||
In that case, `target` will be `None` and we should just directly `return`.
|
In that case, `target` will be `None` and we should just directly `return`.
|
||||||
- **Lines 22-23**: At this point we have a suitable target and can send our punching strings to each.
|
- **Lines 21-22**: At this point we have a suitable target and can send our punching strings to each.
|
||||||
|
|
||||||
Finally we must also add this to a CmdSet. Let's add it to `MyCmdSet` which we made persistent earlier.
|
Finally we must also add this to a CmdSet. Let's add it to `MyCmdSet` which we made persistent earlier.
|
||||||
|
|
||||||
|
|
@ -356,12 +358,12 @@ class MyCmdSet(CmdSet):
|
||||||
|
|
||||||
```{sidebar} Errors in your code
|
```{sidebar} Errors in your code
|
||||||
|
|
||||||
With longer code snippets to try, it gets more and more likely you'll
|
With longer code snippets to try, it gets more and more likely you'll
|
||||||
make an error and get a `traceback` when you reload. This will either appear
|
make an error and get a `traceback` when you reload. This will either appear
|
||||||
directly in-game or in your log (view it with `evennia -l` in a terminal).
|
directly in-game or in your log (view it with `evennia -l` in a terminal).
|
||||||
Don't panic; tracebacks are your friends - they are to be read bottom-up and usually describe
|
Don't panic; tracebacks are your friends - they are to be read bottom-up and usually describe
|
||||||
exactly where your problem is. Refer to `The Python intro <Python-basic-introduction.html>`_ for
|
exactly where your problem is. Refer to `The Python intro <Python-basic-introduction.html>`_ for
|
||||||
more hints. If you get stuck, reach out to the Evennia community for help.
|
more hints. If you get stuck, reach out to the Evennia community for help.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -668,11 +668,12 @@ span.pre {
|
||||||
}
|
}
|
||||||
|
|
||||||
td.linenos pre {
|
td.linenos pre {
|
||||||
padding: 5px 0px;
|
padding 5px, 0px;
|
||||||
border: 0;
|
border: 0;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
color: #aaa;
|
color: #aaa;
|
||||||
-webkit-box-shadow: 0px 0px 0px #fff;
|
-webkit-box-shadow: 0px 0px 0px #fff;
|
||||||
|
font-size: 1.4em;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.highlighttable {
|
table.highlighttable {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue