Add XYZgrid contrib api files, prepare for merge
This commit is contained in:
parent
a140c68247
commit
5df73d5045
21 changed files with 247 additions and 106 deletions
|
|
@ -72,6 +72,8 @@ Up requirements to Django 3.2+
|
||||||
- Make `help` index output clickable for webclient/clients with MXP (PR by davewiththenicehat)
|
- Make `help` index output clickable for webclient/clients with MXP (PR by davewiththenicehat)
|
||||||
- Custom `evennia` launcher commands (e.g. `evennia mycmd foo bar`). Add new commands as callables
|
- Custom `evennia` launcher commands (e.g. `evennia mycmd foo bar`). Add new commands as callables
|
||||||
accepting `*args`, as `settings.EXTRA_LAUNCHER_COMMANDS = {'mycmd': 'path.to.callable', ...}`.
|
accepting `*args`, as `settings.EXTRA_LAUNCHER_COMMANDS = {'mycmd': 'path.to.callable', ...}`.
|
||||||
|
- New `XYZGrid` contrib, adding x,y,z grid coordinates with in-game map and
|
||||||
|
pathfinding. Controlled outside of the game via custom evennia launcher command.
|
||||||
|
|
||||||
### Evennia 0.9.5 (2019-2020)
|
### Evennia 0.9.5 (2019-2020)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,33 @@
|
||||||
# Contrib modules
|
# Contrib modules
|
||||||
|
|
||||||
Contribs are found in [evennia/contrib/](api:evennia.contrib) and are optional game-specific code-snippets
|
Contribs are found in [evennia/contrib/](api:evennia.contrib) and are optional game-specific code-snippets
|
||||||
or even full systems you can use for your game. They are contributed by the Evennia community and
|
or even full systems you can use for your game. They are contributed by the Evennia community and
|
||||||
released under the same license as Evennia itself. Each contrib has its own installation instructions.
|
released under the same license as Evennia itself. Each contrib has its own installation instructions.
|
||||||
Bugs are reported to the Evennia [issue tracker](github:issue) as usual.
|
Bugs are reported to the Evennia [issue tracker](github:issue) as usual.
|
||||||
|
|
||||||
## Character-related
|
## Character-related
|
||||||
|
|
||||||
Contribs related to characters and character displays.
|
Contribs related to characters and character displays.
|
||||||
|
|
||||||
### CharGen
|
### CharGen
|
||||||
|
|
||||||
*Griatch 2011*
|
*Griatch 2011*
|
||||||
|
|
||||||
A simple Character creator for OOC mode. Meant as a starting point for a more fleshed-out system.
|
A simple Character creator for OOC mode. Meant as a starting point for a more fleshed-out system.
|
||||||
|
|
||||||
### Clothing
|
### Clothing
|
||||||
|
|
||||||
*FlutterSprite 2017*
|
*FlutterSprite 2017*
|
||||||
|
|
||||||
A layered clothing system with slots for different types of garments auto-showing in description.
|
A layered clothing system with slots for different types of garments auto-showing in description.
|
||||||
|
|
||||||
### Health Bar
|
### Health Bar
|
||||||
|
|
||||||
*Tim Ashley Jenkins 2017*
|
*Tim Ashley Jenkins 2017*
|
||||||
|
|
||||||
Tool to create colorful bars/meters.
|
Tool to create colorful bars/meters.
|
||||||
|
|
||||||
### Multidescer
|
### Multidescer
|
||||||
|
|
||||||
*Griatch 2016*
|
*Griatch 2016*
|
||||||
|
|
||||||
|
|
@ -39,13 +39,22 @@ Advanced descriptions combined from many separate description components, inspir
|
||||||
|
|
||||||
Contribs modifying locations, movement or helping to creating rooms.
|
Contribs modifying locations, movement or helping to creating rooms.
|
||||||
|
|
||||||
### Extended Room
|
### XYZGrid
|
||||||
|
|
||||||
|
*Griatch 2021*
|
||||||
|
|
||||||
|
Adds an XYZgrid to Evennia, with map-display and pathfinding. Created via map
|
||||||
|
strings and maintained outside of the game via Evennia launch commands.
|
||||||
|
|
||||||
|
- [XYZGrid documentation](./XYZGrid)
|
||||||
|
|
||||||
|
### Extended Room
|
||||||
|
|
||||||
*Griatch 2012*
|
*Griatch 2012*
|
||||||
|
|
||||||
An expanded Room typeclass with multiple descriptions for time and season as well as details.
|
An expanded Room typeclass with multiple descriptions for time and season as well as details.
|
||||||
|
|
||||||
### Map Builder
|
### Map Builder
|
||||||
|
|
||||||
*CloudKeeper 2016*
|
*CloudKeeper 2016*
|
||||||
|
|
||||||
|
|
@ -53,19 +62,19 @@ Build a game area based on a 2D "graphical" unicode map. Supports asymmetric exi
|
||||||
|
|
||||||
- [Static in-game map](./Static-In-Game-Map)
|
- [Static in-game map](./Static-In-Game-Map)
|
||||||
|
|
||||||
### Simple Door
|
### Simple Door
|
||||||
|
|
||||||
*Griatch 2014*
|
*Griatch 2014*
|
||||||
|
|
||||||
Example of an exit that can be opened and closed from both sides.
|
Example of an exit that can be opened and closed from both sides.
|
||||||
|
|
||||||
### Slow exit
|
### Slow exit
|
||||||
|
|
||||||
*Griatch 2014*
|
*Griatch 2014*
|
||||||
|
|
||||||
Custom Exit class that takes different time to pass depending on if you are walking/running etc.
|
Custom Exit class that takes different time to pass depending on if you are walking/running etc.
|
||||||
|
|
||||||
### Wilderness
|
### Wilderness
|
||||||
|
|
||||||
*titeuf87 2017*
|
*titeuf87 2017*
|
||||||
|
|
||||||
|
|
@ -79,7 +88,7 @@ Make infinitely large wilderness areas with dynamically created locations.
|
||||||
|
|
||||||
Contribs supporting roleplay and in-game roleplaying actions.
|
Contribs supporting roleplay and in-game roleplaying actions.
|
||||||
|
|
||||||
### Barter system
|
### Barter system
|
||||||
|
|
||||||
*Griatch 2012*
|
*Griatch 2012*
|
||||||
|
|
||||||
|
|
@ -95,25 +104,25 @@ A full, extendable crafting system.
|
||||||
- [Crafting API documentation](api:evennia.contrib.crafting.crafting)
|
- [Crafting API documentation](api:evennia.contrib.crafting.crafting)
|
||||||
- [Example of a sword crafting tree](api:evennia.contrib.crafting.example_recipes)
|
- [Example of a sword crafting tree](api:evennia.contrib.crafting.example_recipes)
|
||||||
|
|
||||||
### Dice
|
### Dice
|
||||||
|
|
||||||
*Griatch 2012*
|
*Griatch 2012*
|
||||||
|
|
||||||
A fully featured dice rolling system.
|
A fully featured dice rolling system.
|
||||||
|
|
||||||
### Mail
|
### Mail
|
||||||
|
|
||||||
*grungies1138 2016*
|
*grungies1138 2016*
|
||||||
|
|
||||||
An in-game mail system for communication.
|
An in-game mail system for communication.
|
||||||
|
|
||||||
### Puzzles
|
### Puzzles
|
||||||
|
|
||||||
*Hendher 2019*
|
*Hendher 2019*
|
||||||
|
|
||||||
Combine objects to create new items, adventure-game style
|
Combine objects to create new items, adventure-game style
|
||||||
|
|
||||||
### RP System
|
### RP System
|
||||||
|
|
||||||
*Griatch 2015*
|
*Griatch 2015*
|
||||||
|
|
||||||
|
|
@ -125,7 +134,7 @@ Full director-style emoting system replacing names with sdescs/recogs. Supports
|
||||||
|
|
||||||
Dynamic obfuscation of emotes when speaking unfamiliar languages. Also obfuscates whispers.
|
Dynamic obfuscation of emotes when speaking unfamiliar languages. Also obfuscates whispers.
|
||||||
|
|
||||||
### Turnbattle
|
### Turnbattle
|
||||||
|
|
||||||
*FlutterSprite 2017*
|
*FlutterSprite 2017*
|
||||||
|
|
||||||
|
|
@ -142,7 +151,7 @@ and includes optional expansions for equipment and combat movement, magic and ra
|
||||||
|
|
||||||
An `@edit` command for modifying objects using a generated menu. Customizable for different games.
|
An `@edit` command for modifying objects using a generated menu. Customizable for different games.
|
||||||
|
|
||||||
### Field Fill
|
### Field Fill
|
||||||
|
|
||||||
*FlutterSprite 2018*
|
*FlutterSprite 2018*
|
||||||
|
|
||||||
|
|
@ -159,18 +168,18 @@ Allow Builders to add Python-scripted events to their objects (OBS-not for untru
|
||||||
|
|
||||||
### Menu-builder
|
### Menu-builder
|
||||||
|
|
||||||
A tool for building using an in-game menu instead of the normal build commands. Meant to
|
A tool for building using an in-game menu instead of the normal build commands. Meant to
|
||||||
be expanded for the needs of your game.
|
be expanded for the needs of your game.
|
||||||
|
|
||||||
- [Building Menus](./Building-menus)
|
- [Building Menus](./Building-menus)
|
||||||
|
|
||||||
### Security/Auditing
|
### Security/Auditing
|
||||||
|
|
||||||
*Johhny 2018*
|
*Johhny 2018*
|
||||||
|
|
||||||
Log server input/output for debug/security.
|
Log server input/output for debug/security.
|
||||||
|
|
||||||
### Tree Select
|
### Tree Select
|
||||||
|
|
||||||
*FlutterSprite 2017*
|
*FlutterSprite 2017*
|
||||||
|
|
||||||
|
|
@ -183,13 +192,13 @@ multi-line string.
|
||||||
|
|
||||||
Contribs meant to be used as part of other code, or as replacements for default settings.
|
Contribs meant to be used as part of other code, or as replacements for default settings.
|
||||||
|
|
||||||
### Color-markups
|
### Color-markups
|
||||||
|
|
||||||
*Griatch, 2017*
|
*Griatch, 2017*
|
||||||
|
|
||||||
Alternative in-game color markups.
|
Alternative in-game color markups.
|
||||||
|
|
||||||
### Custom gametime
|
### Custom gametime
|
||||||
|
|
||||||
*Griatch, vlgeoff 2017*
|
*Griatch, vlgeoff 2017*
|
||||||
|
|
||||||
|
|
@ -203,19 +212,19 @@ Implements Evennia's gametime module but for custom game world-specific calendar
|
||||||
|
|
||||||
A variant of the standard login system that requires an email to login rather then just name+password.
|
A variant of the standard login system that requires an email to login rather then just name+password.
|
||||||
|
|
||||||
#### Menu login
|
#### Menu login
|
||||||
|
|
||||||
*Griatch 2011, 2019, Vincent-lg 2016*
|
*Griatch 2011, 2019, Vincent-lg 2016*
|
||||||
|
|
||||||
A login system using menus asking for name/password rather than giving them as one command.
|
A login system using menus asking for name/password rather than giving them as one command.
|
||||||
|
|
||||||
### Random String Generator
|
### Random String Generator
|
||||||
|
|
||||||
*Vincent Le Goff 2017*
|
*Vincent Le Goff 2017*
|
||||||
|
|
||||||
Simple pseudo-random generator of strings with rules, avoiding repetitions.
|
Simple pseudo-random generator of strings with rules, avoiding repetitions.
|
||||||
|
|
||||||
### UnixCommand
|
### UnixCommand
|
||||||
|
|
||||||
*Vincent Le Geoff 2017*
|
*Vincent Le Geoff 2017*
|
||||||
|
|
||||||
|
|
@ -227,19 +236,19 @@ Add commands with UNIX-style syntax.
|
||||||
|
|
||||||
Contribs not meant to be used as-is, but just as examples to learn from.
|
Contribs not meant to be used as-is, but just as examples to learn from.
|
||||||
|
|
||||||
### GenderSub
|
### GenderSub
|
||||||
|
|
||||||
*Griatch 2015*
|
*Griatch 2015*
|
||||||
|
|
||||||
Simple example (only) of storing gender on a character and access it in an emote with a custom marker.
|
Simple example (only) of storing gender on a character and access it in an emote with a custom marker.
|
||||||
|
|
||||||
### Talking NPC
|
### Talking NPC
|
||||||
|
|
||||||
*Griatch 2011*
|
*Griatch 2011*
|
||||||
|
|
||||||
A talking NPC object that offers a menu-driven conversation tree.
|
A talking NPC object that offers a menu-driven conversation tree.
|
||||||
|
|
||||||
### Tutorial examples
|
### Tutorial examples
|
||||||
|
|
||||||
*Griatch 2011, 2015*
|
*Griatch 2011, 2015*
|
||||||
|
|
||||||
|
|
@ -259,12 +268,12 @@ The Evennia single-player sole quest. Made to be analyzed to learn.
|
||||||
|
|
||||||
Full game-dir replacement systems.
|
Full game-dir replacement systems.
|
||||||
|
|
||||||
### Ainneve
|
### Ainneve
|
||||||
|
|
||||||
*Evennia community 2015-?*
|
*Evennia community 2015-?*
|
||||||
|
|
||||||
This is a community attempt to make an Evennia 'example game' using good practices. It is also a good
|
This is a community attempt to make an Evennia 'example game' using good practices. It is also a good
|
||||||
place to jump in if you want to help in another project rather than run it alone. Development of this
|
place to jump in if you want to help in another project rather than run it alone. Development of this
|
||||||
has stalled a bit so we are looking for enthusiastic people to lead the charge.
|
has stalled a bit so we are looking for enthusiastic people to lead the charge.
|
||||||
|
|
||||||
- [evennia/ainneve repository](https://github.com/evennia/ainneve)
|
- [evennia/ainneve repository](https://github.com/evennia/ainneve)
|
||||||
|
|
@ -274,26 +283,26 @@ has stalled a bit so we are looking for enthusiastic people to lead the charge.
|
||||||
|
|
||||||
*Tehom 2019*
|
*Tehom 2019*
|
||||||
|
|
||||||
Open source code release of the popular Evennia-based [Arx, after the reckoning](https://play.arxgame.org/).
|
Open source code release of the popular Evennia-based [Arx, after the reckoning](https://play.arxgame.org/).
|
||||||
This is a fantasy game with a focus on roleplay and code-supported political intrigue. This code-release
|
This is a fantasy game with a focus on roleplay and code-supported political intrigue. This code-release
|
||||||
is maintained by Tehom in its own repository so bug reports should be directed there.
|
is maintained by Tehom in its own repository so bug reports should be directed there.
|
||||||
|
|
||||||
- [Arxcode repository on github](https://github.com/Arx-Game/arxcode)
|
- [Arxcode repository on github](https://github.com/Arx-Game/arxcode)
|
||||||
- [Arxcode issue tracker](https://github.com/Arx-Game/arxcode/issues)
|
- [Arxcode issue tracker](https://github.com/Arx-Game/arxcode/issues)
|
||||||
- [Arxcode installation help](./Arxcode-installing-help) - this may not always be fully up-to-date with
|
- [Arxcode installation help](./Arxcode-installing-help) - this may not always be fully up-to-date with
|
||||||
latest Evennia. Report your findings!
|
latest Evennia. Report your findings!
|
||||||
|
|
||||||
### Evscaperoom
|
### Evscaperoom
|
||||||
|
|
||||||
*Griatch 2019*
|
*Griatch 2019*
|
||||||
|
|
||||||
A full engine for making multiplayer 'escape-rooms' completely in code.
|
A full engine for making multiplayer 'escape-rooms' completely in code.
|
||||||
This is based on the 2019 MUD Game jam winner *Evscaperoom*.
|
This is based on the 2019 MUD Game jam winner *Evscaperoom*.
|
||||||
|
|
||||||
- [contrib/evscaperoom](api:evennia.contrib.evscaperoom) - game engine to make your own escape rooms.
|
- [contrib/evscaperoom](api:evennia.contrib.evscaperoom) - game engine to make your own escape rooms.
|
||||||
- [https://demo.evennia.com](https://demo.evennia.com) - a full installation of the original game can
|
- [https://demo.evennia.com](https://demo.evennia.com) - a full installation of the original game can
|
||||||
be played by entering the *evscaperoom* exit in the first Limbo room.
|
be played by entering the *evscaperoom* exit in the first Limbo room.
|
||||||
- https://github.com/Griatch/evscaperoom - the original game's source code (warning for spoilers if you
|
- https://github.com/Griatch/evscaperoom - the original game's source code (warning for spoilers if you
|
||||||
want to solve the puzzles and mystery yourself).
|
want to solve the puzzles and mystery yourself).
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -303,7 +312,7 @@ This is based on the 2019 MUD Game jam winner *Evscaperoom*.
|
||||||
:hidden:
|
:hidden:
|
||||||
|
|
||||||
./Crafting
|
./Crafting
|
||||||
../api/evennia.contrib.crafting.crafting
|
../api/evennia.contrib.crafting.crafting
|
||||||
../api/evennia.contrib.crafting.example_recipes
|
../api/evennia.contrib.crafting.example_recipes
|
||||||
./A-voice-operated-elevator-using-events
|
./A-voice-operated-elevator-using-events
|
||||||
./Dialogues-in-events
|
./Dialogues-in-events
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# XYZGrid contribution
|
# XYZGrid contrib
|
||||||
|
|
||||||
```versionadded:: 1.0
|
```versionadded:: 1.0
|
||||||
```
|
```
|
||||||
|
|
@ -7,8 +7,10 @@ This optional contrib adds a 'coordinate grid' to Evennia. It allows for
|
||||||
defining the grid as simple ascii maps that are then spawned into rooms that are
|
defining the grid as simple ascii maps that are then spawned into rooms that are
|
||||||
aware of their X, Y, Z coordinates. The system includes shortest-path
|
aware of their X, Y, Z coordinates. The system includes shortest-path
|
||||||
pathfinding, auto-stepping and in-game map visualization (with visibility
|
pathfinding, auto-stepping and in-game map visualization (with visibility
|
||||||
range).
|
range). Grid-management is done outside of the game using a new evennia-launcher
|
||||||
|
option.
|
||||||
|
|
||||||
|
<script id="asciicast-Zz36JuVAiPF0fSUR09Ii7lcxc" src="https://asciinema.org/a/Zz36JuVAiPF0fSUR09Ii7lcxc.js" async></script>
|
||||||
|
|
||||||
```
|
```
|
||||||
#-#-#-# #
|
#-#-#-# #
|
||||||
|
|
@ -36,8 +38,6 @@ Exits: northeast and east
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
1. Import and add the `evennia.contrib.commands.XYZGridCmdSet` to the
|
1. Import and add the `evennia.contrib.commands.XYZGridCmdSet` to the
|
||||||
|
|
@ -406,10 +406,10 @@ optional, and any symbol not explicitly given in your legend will fall back to
|
||||||
its value in the default legend found in
|
its value in the default legend found in
|
||||||
`evennia.contrib.xyzgrid.xymap_legend`).
|
`evennia.contrib.xyzgrid.xymap_legend`).
|
||||||
|
|
||||||
- [MapNode](api:evennia.contrib.xyzgrid.xymap_legend#MapNode) is the base
|
- [MapNode](api:evennia.contrib.xyzgrid.xymap_legend#evennia.contrib.xyzgrid.xymap_legend.MapNode)
|
||||||
class for all nodes.
|
is the base class for all nodes.
|
||||||
- [MapLink](api:evennia.contrib.xyzgrid.xymap_legend#MapLink) is the base
|
- [MapLink](api:evennia.contrib.xyzgrid.xymap_legend#evennia.contrib.xyzgrid.xymap_legend.MapLink)
|
||||||
class for all links.
|
is the base class for all links.
|
||||||
|
|
||||||
As the _Map String_ is parsed, each found symbol is looked up in the legend and
|
As the _Map String_ is parsed, each found symbol is looked up in the legend and
|
||||||
initialized into the corresponding MapNode/Link instance.
|
initialized into the corresponding MapNode/Link instance.
|
||||||
|
|
@ -421,7 +421,7 @@ with a full set of map elements that use these properties in various ways
|
||||||
(described in the next section).
|
(described in the next section).
|
||||||
|
|
||||||
Some useful properties of the
|
Some useful properties of the
|
||||||
[MapNode](api:evennia.contrib.xyzgrid.xymap_legend#MapNode)
|
[MapNode](api:evennia.contrib.xyzgrid.xymap_legend#evennia.contrib.xyzgrid.xymap_legend.MapNode)
|
||||||
class (see class doc for hook methods):
|
class (see class doc for hook methods):
|
||||||
|
|
||||||
- `symbol` (str) - The character to parse from the map into this node. By default this
|
- `symbol` (str) - The character to parse from the map into this node. By default this
|
||||||
|
|
@ -449,7 +449,7 @@ class (see class doc for hook methods):
|
||||||
useful for various reasons, mostly map-transitions).
|
useful for various reasons, mostly map-transitions).
|
||||||
|
|
||||||
Some useful properties of the
|
Some useful properties of the
|
||||||
[MapLink](api:evennia.contrib.xyzgrid.xymap_legend#MapLink)
|
[MapLink](api:evennia.contrib.xyzgrid.xymap_legend#evennia.contrib.xyzgrid.xymap_legend.MapLink)
|
||||||
class (see class doc for hook methods):
|
class (see class doc for hook methods):
|
||||||
|
|
||||||
- `symbol` (str) - The character to parse from the map into this node. This must
|
- `symbol` (str) - The character to parse from the map into this node. This must
|
||||||
|
|
@ -1207,11 +1207,50 @@ Useful (extra) properties on `XYZRoom`, `XYZExit`:
|
||||||
`XYZRoom`, to display the map. The `options` given in `XYMAP_DATA` will appear
|
`XYZRoom`, to display the map. The `options` given in `XYMAP_DATA` will appear
|
||||||
as `**kwargs` to this method and if you override this you can customize the
|
as `**kwargs` to this method and if you override this you can customize the
|
||||||
map display in depth.
|
map display in depth.
|
||||||
|
- `xyz_destination` (only for `XYZExits`) - this gives the xyz-coordinate of
|
||||||
|
the exit's destination.
|
||||||
|
|
||||||
To use your own overridden version of `XYZRoom/Exit`, you need to override
|
The coordinates are stored as [Tags](../Components/Tags) where both rooms and exits tag
|
||||||
the prototype used to spawn rooms on the grid. You can modify the base prototype
|
categories `room_x_coordinate`, `room_y_coordinate` and `room_z_coordinate`
|
||||||
parents in settings (see the [Extending the base prototypes](#extending-the-base-prototypes)
|
while exits use the same in addition to tags for their destination, with tag
|
||||||
section above).
|
categories `exit_dest_x_coordinate`, `exit_dest_y_coordinate` and
|
||||||
|
`exit_dest_z_coordinate`.
|
||||||
|
|
||||||
|
The make it easier to query the database by coordinates, each typeclass offers
|
||||||
|
custom manager methods. The filter methods allow for `'*'` as a wildcard.
|
||||||
|
|
||||||
|
```python
|
||||||
|
|
||||||
|
# find a list of all rooms in map foo
|
||||||
|
rooms = XYZRoom.objects.filter_xyz(('*', '*', 'foo'))
|
||||||
|
|
||||||
|
# find list of all rooms with name "Tunnel" on map foo
|
||||||
|
rooms = XYZRoom.objects.filter_xyz(('*', '*', 'foo'), db_key="Tunnel")
|
||||||
|
|
||||||
|
# find all rooms in the first column of map footer
|
||||||
|
rooms = XYZRoom.objects.filter_xyz((0, '*', 'foo'))
|
||||||
|
|
||||||
|
# find exactly one room at given coordinate (no wildcards allowed)
|
||||||
|
room = XYZRoom.objects.get_xyz((13, 2, foo))
|
||||||
|
|
||||||
|
# find all exits in a given room
|
||||||
|
exits = XYZExit.objects.filter_xyz((10, 4, foo))
|
||||||
|
|
||||||
|
# find all exits pointing to a specific destination (from all maps)
|
||||||
|
exits = XYZExit.objects.filter_xyz_exit(xyz_destination=(13,5,'bar'))
|
||||||
|
|
||||||
|
# find exits from a room to anywhere on another map
|
||||||
|
exits = XYZExit.objects.filter_xyz_exit(xyz=(1, 5, 'foo'), xyz_destination=('*', '*', 'bar'))
|
||||||
|
|
||||||
|
# find exactly one exit to specific destination (no wildcards allowed)
|
||||||
|
exit = XYZExit.objects.get_xyz_exit(xyz=(0, 12, 'foo'), xyz_destination=(5, 2, 'foo'))
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
You can customize the XYZRoom/Exit by having the grid spawn your own subclasses
|
||||||
|
of them. To do this you need to override the prototype used to spawn rooms on
|
||||||
|
the grid. Easiest is to modify the base prototype-parents in settings (see the
|
||||||
|
[Extending the base prototypes](#extending-the-base-prototypes) section above).
|
||||||
|
|
||||||
## Working with the grid
|
## Working with the grid
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,3 +52,4 @@ evennia.contrib
|
||||||
evennia.contrib.turnbattle
|
evennia.contrib.turnbattle
|
||||||
evennia.contrib.tutorial_examples
|
evennia.contrib.tutorial_examples
|
||||||
evennia.contrib.tutorial_world
|
evennia.contrib.tutorial_world
|
||||||
|
evennia.contrib.xyzgrid
|
||||||
|
|
|
||||||
7
docs/source/api/evennia.contrib.xyzgrid.commands.rst
Normal file
7
docs/source/api/evennia.contrib.xyzgrid.commands.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
evennia.contrib.xyzgrid.commands
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
.. automodule:: evennia.contrib.xyzgrid.commands
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
7
docs/source/api/evennia.contrib.xyzgrid.example.rst
Normal file
7
docs/source/api/evennia.contrib.xyzgrid.example.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
evennia.contrib.xyzgrid.example
|
||||||
|
======================================
|
||||||
|
|
||||||
|
.. automodule:: evennia.contrib.xyzgrid.example
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
7
docs/source/api/evennia.contrib.xyzgrid.launchcmd.rst
Normal file
7
docs/source/api/evennia.contrib.xyzgrid.launchcmd.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
evennia.contrib.xyzgrid.launchcmd
|
||||||
|
========================================
|
||||||
|
|
||||||
|
.. automodule:: evennia.contrib.xyzgrid.launchcmd
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
7
docs/source/api/evennia.contrib.xyzgrid.prototypes.rst
Normal file
7
docs/source/api/evennia.contrib.xyzgrid.prototypes.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
evennia.contrib.xyzgrid.prototypes
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
.. automodule:: evennia.contrib.xyzgrid.prototypes
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
23
docs/source/api/evennia.contrib.xyzgrid.rst
Normal file
23
docs/source/api/evennia.contrib.xyzgrid.rst
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
evennia.contrib.xyzgrid
|
||||||
|
===============================
|
||||||
|
|
||||||
|
.. automodule:: evennia.contrib.xyzgrid
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 6
|
||||||
|
|
||||||
|
evennia.contrib.xyzgrid.commands
|
||||||
|
evennia.contrib.xyzgrid.example
|
||||||
|
evennia.contrib.xyzgrid.launchcmd
|
||||||
|
evennia.contrib.xyzgrid.prototypes
|
||||||
|
evennia.contrib.xyzgrid.tests
|
||||||
|
evennia.contrib.xyzgrid.utils
|
||||||
|
evennia.contrib.xyzgrid.xymap
|
||||||
|
evennia.contrib.xyzgrid.xymap_legend
|
||||||
|
evennia.contrib.xyzgrid.xyzgrid
|
||||||
|
evennia.contrib.xyzgrid.xyzroom
|
||||||
7
docs/source/api/evennia.contrib.xyzgrid.tests.rst
Normal file
7
docs/source/api/evennia.contrib.xyzgrid.tests.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
evennia.contrib.xyzgrid.tests
|
||||||
|
====================================
|
||||||
|
|
||||||
|
.. automodule:: evennia.contrib.xyzgrid.tests
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
7
docs/source/api/evennia.contrib.xyzgrid.utils.rst
Normal file
7
docs/source/api/evennia.contrib.xyzgrid.utils.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
evennia.contrib.xyzgrid.utils
|
||||||
|
====================================
|
||||||
|
|
||||||
|
.. automodule:: evennia.contrib.xyzgrid.utils
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
7
docs/source/api/evennia.contrib.xyzgrid.xymap.rst
Normal file
7
docs/source/api/evennia.contrib.xyzgrid.xymap.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
evennia.contrib.xyzgrid.xymap
|
||||||
|
====================================
|
||||||
|
|
||||||
|
.. automodule:: evennia.contrib.xyzgrid.xymap
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
7
docs/source/api/evennia.contrib.xyzgrid.xymap_legend.rst
Normal file
7
docs/source/api/evennia.contrib.xyzgrid.xymap_legend.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
evennia.contrib.xyzgrid.xymap\_legend
|
||||||
|
============================================
|
||||||
|
|
||||||
|
.. automodule:: evennia.contrib.xyzgrid.xymap_legend
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
7
docs/source/api/evennia.contrib.xyzgrid.xyzgrid.rst
Normal file
7
docs/source/api/evennia.contrib.xyzgrid.xyzgrid.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
evennia.contrib.xyzgrid.xyzgrid
|
||||||
|
======================================
|
||||||
|
|
||||||
|
.. automodule:: evennia.contrib.xyzgrid.xyzgrid
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
7
docs/source/api/evennia.contrib.xyzgrid.xyzroom.rst
Normal file
7
docs/source/api/evennia.contrib.xyzgrid.xyzroom.rst
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
evennia.contrib.xyzgrid.xyzroom
|
||||||
|
======================================
|
||||||
|
|
||||||
|
.. automodule:: evennia.contrib.xyzgrid.xyzroom
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:show-inheritance:
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
# Toc
|
# Toc
|
||||||
|
- [API root](api/evennia-api.rst)
|
||||||
- [Coding/Coding Introduction](Coding/Coding-Introduction)
|
- [Coding/Coding Introduction](Coding/Coding-Introduction)
|
||||||
- [Coding/Coding Overview](Coding/Coding-Overview)
|
- [Coding/Coding Overview](Coding/Coding-Overview)
|
||||||
- [Coding/Continuous Integration](Coding/Continuous-Integration)
|
- [Coding/Continuous Integration](Coding/Continuous-Integration)
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ from evennia.utils import ansi
|
||||||
from evennia.contrib.xyzgrid.xyzgrid import get_xyzgrid
|
from evennia.contrib.xyzgrid.xyzgrid import get_xyzgrid
|
||||||
|
|
||||||
_HELP_SHORT = """
|
_HELP_SHORT = """
|
||||||
evennia xyzgrid help|list|init|add|spawn|initpath|delete [<options>]
|
evennia xyzgrid help | list | init | add | spawn | initpath | delete [<options>]
|
||||||
Manages the XYZ grid. Use 'xyzgrid help <option>' for documentation.
|
Manages the XYZ grid. Use 'xyzgrid help <option>' for documentation.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_HELP_HELP = """
|
_HELP_HELP = """
|
||||||
|
|
@ -198,40 +198,40 @@ def _option_list(*suboptions):
|
||||||
print(ansi.parse_ansi(str(xymap)))
|
print(ansi.parse_ansi(str(xymap)))
|
||||||
return
|
return
|
||||||
|
|
||||||
for zcoord in suboptions:
|
zcoord = " ".join(suboptions)
|
||||||
xymap = xyzgrid.get_map(zcoord)
|
xymap = xyzgrid.get_map(zcoord)
|
||||||
if not xymap:
|
if not xymap:
|
||||||
print(f"No XYMap with Z='{zcoord}' was found on grid.")
|
print(f"No XYMap with Z='{zcoord}' was found on grid.")
|
||||||
|
else:
|
||||||
|
nrooms = xyzgrid.get_room(('*', '*', zcoord)).count()
|
||||||
|
nnodes = len(xymap.node_index_map)
|
||||||
|
print("\n" + str(repr(xymap)) + ":\n")
|
||||||
|
checkwarning = True
|
||||||
|
if not nrooms:
|
||||||
|
print(f"{nrooms} / {nnodes} rooms are spawned.")
|
||||||
|
checkwarning = False
|
||||||
|
elif nrooms < nnodes:
|
||||||
|
print(f"{nrooms} / {nnodes} rooms are spawned\n"
|
||||||
|
"Note: Transitional nodes are *not* spawned (they just point \n"
|
||||||
|
"to another map), so the 'missing room(s)' may just be from such nodes.")
|
||||||
|
elif nrooms > nnodes:
|
||||||
|
print(f"{nrooms} / {nnodes} rooms are spawned\n"
|
||||||
|
"Note: Maybe some rooms were removed from map. Run 'spawn' to re-sync.")
|
||||||
else:
|
else:
|
||||||
nrooms = xyzgrid.get_room(('*', '*', zcoord)).count()
|
print(f"{nrooms} / {nnodes} rooms are spawned\n")
|
||||||
nnodes = len(xymap.node_index_map)
|
|
||||||
print("\n" + str(repr(xymap)) + ":\n")
|
|
||||||
checkwarning = True
|
|
||||||
if not nrooms:
|
|
||||||
print(f"{nrooms} / {nnodes} rooms are spawned.")
|
|
||||||
checkwarning = False
|
|
||||||
elif nrooms < nnodes:
|
|
||||||
print(f"{nrooms} / {nnodes} rooms are spawned\n"
|
|
||||||
"Note: Transitional nodes are *not* spawned (they just point \n"
|
|
||||||
"to another map), so the 'missing room(s)' may just be from such nodes.")
|
|
||||||
elif nrooms > nnodes:
|
|
||||||
print(f"{nrooms} / {nnodes} rooms are spawned\n"
|
|
||||||
"Note: Maybe some rooms were removed from map. Run 'spawn' to re-sync.")
|
|
||||||
else:
|
|
||||||
print(f"{nrooms} / {nnodes} rooms are spawned\n")
|
|
||||||
|
|
||||||
if checkwarning:
|
if checkwarning:
|
||||||
print("Note: This check is not complete; it does not consider changed map "
|
print("Note: This check is not complete; it does not consider changed map "
|
||||||
"topology\nlike relocated nodes/rooms and new/removed links/exits - this "
|
"topology\nlike relocated nodes/rooms and new/removed links/exits - this "
|
||||||
"is calculated only during a spawn.")
|
"is calculated only during a spawn.")
|
||||||
print("\nDisplayed map (as appearing in-game):\n\n" + ansi.parse_ansi(str(xymap)))
|
print("\nDisplayed map (as appearing in-game):\n\n" + ansi.parse_ansi(str(xymap)))
|
||||||
print("\nRaw map string (including axes and invisible nodes/links):\n"
|
print("\nRaw map string (including axes and invisible nodes/links):\n"
|
||||||
+ str(xymap.mapstring))
|
+ str(xymap.mapstring))
|
||||||
print(f"\nCustom map options: {xymap.options}\n")
|
print(f"\nCustom map options: {xymap.options}\n")
|
||||||
legend = []
|
legend = []
|
||||||
for key, node_or_link in xymap.legend.items():
|
for key, node_or_link in xymap.legend.items():
|
||||||
legend.append(f"{key} - {node_or_link.__doc__.strip()}")
|
legend.append(f"{key} - {node_or_link.__doc__.strip()}")
|
||||||
print("Legend (all elements may not be present on map):\n " + "\n ".join(legend))
|
print("Legend (all elements may not be present on map):\n " + "\n ".join(legend))
|
||||||
|
|
||||||
|
|
||||||
def _option_init(*suboptions):
|
def _option_init(*suboptions):
|
||||||
|
|
@ -401,8 +401,8 @@ def xyzcommand(*args):
|
||||||
_option_init(*suboptions)
|
_option_init(*suboptions)
|
||||||
elif option == 'add':
|
elif option == 'add':
|
||||||
_option_add(*suboptions)
|
_option_add(*suboptions)
|
||||||
elif option == 'build':
|
elif option == 'spawn':
|
||||||
_option_build(*suboptions)
|
_option_spawn(*suboptions)
|
||||||
elif option == 'initpath':
|
elif option == 'initpath':
|
||||||
_option_initpath(*suboptions)
|
_option_initpath(*suboptions)
|
||||||
elif option == 'delete':
|
elif option == 'delete':
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
"""
|
"""
|
||||||
# Map legend comhponents
|
# Map legend components
|
||||||
|
|
||||||
Each map-legend component is either a 'mapnode' - something that represents and actual in-game
|
Each map-legend component is either a 'mapnode' - something that represents and actual in-game
|
||||||
location (usually a room) or a 'maplink' - something connecting nodes together. The start of a link
|
location (usually a room) or a 'maplink' - something connecting nodes together. The start of a link
|
||||||
usually shows as an Exit, but the length of the link has no in-game equivalent.
|
usually shows as an Exit, but the length of the link has no in-game equivalent.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -105,12 +105,6 @@ class XYZGrid(DefaultScript):
|
||||||
kwargs['db_key'] = name
|
kwargs['db_key'] = name
|
||||||
return XYZExit.objects.filter_xyz_exit(xyz=xyz, **kwargs)
|
return XYZExit.objects.filter_xyz_exit(xyz=xyz, **kwargs)
|
||||||
|
|
||||||
def build_diff(zcoord):
|
|
||||||
"""
|
|
||||||
Find out which rooms are built/not built and if some should be deleted. This
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
def maps_from_module(self, module_path):
|
def maps_from_module(self, module_path):
|
||||||
"""
|
"""
|
||||||
Load map data from module. The loader will look for a dict XYMAP_DATA or a list of
|
Load map data from module. The loader will look for a dict XYMAP_DATA or a list of
|
||||||
|
|
|
||||||
|
|
@ -81,8 +81,8 @@ class XYZManager(ObjectManager):
|
||||||
XYRoom: A single room instance found at the combination of x, y and z given.
|
XYRoom: A single room instance found at the combination of x, y and z given.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
DoesNotExist: If no matching query was found.
|
XYZRoom.DoesNotExist: If no matching query was found.
|
||||||
MultipleObjectsReturned: If more than one match was found (which should not
|
XYZRoom.MultipleObjectsReturned: If more than one match was found (which should not
|
||||||
possible with a unique combination of x,y,z).
|
possible with a unique combination of x,y,z).
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
@ -189,8 +189,8 @@ class XYZExitManager(XYZManager):
|
||||||
XYZExit: A single exit instance found at the combination of x, y and xgiven.
|
XYZExit: A single exit instance found at the combination of x, y and xgiven.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
DoesNotExist: If no matching query was found.
|
XYZExit.DoesNotExist: If no matching query was found.
|
||||||
MultipleObjectsReturned: If more than one match was found (which should not
|
XYZExit.MultipleObjectsReturned: If more than one match was found (which should not
|
||||||
be possible with a unique combination of x,y,x).
|
be possible with a unique combination of x,y,x).
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
|
||||||
|
|
@ -206,6 +206,7 @@ class ServerSession(_BASE_SESSION_CLASS):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
flags = self.protocol_flags
|
flags = self.protocol_flags
|
||||||
|
print("session flags:", flags)
|
||||||
width = flags.get("SCREENWIDTH", {}).get(0, settings.CLIENT_DEFAULT_WIDTH)
|
width = flags.get("SCREENWIDTH", {}).get(0, settings.CLIENT_DEFAULT_WIDTH)
|
||||||
height = flags.get("SCREENHEIGHT", {}).get(0, settings.CLIENT_DEFAULT_HEIGHT)
|
height = flags.get("SCREENHEIGHT", {}).get(0, settings.CLIENT_DEFAULT_HEIGHT)
|
||||||
return width, height
|
return width, height
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue