Создание контента
Создание элементов игры
Почти все, что создается для игры - сами абилки, оружие, тэги и прочее, создаются в папке /content.
Внутри вы увидите множество файлов, которые называются по классам, которые они подразумевают. Например, в tags.py нужно заполнять тэги, а в blueprints.py блюпринты. Используйте здравый смысл.
Все, что от вас требуется - это создавать инстансы питонических классов, добавляя .save() на конце (хоть есть и исключения).
from properties.part import Part
from content.tags import head, organic_bodypart, arm_bodypart_tag
Part(uid="human_torso", display_name="Торс", hp=100, tags=[organic_bodypart], deadly=True).save()
Part(uid="human_head", display_name="Голова", hp=21, tags=[organic_bodypart, head], deadly=True).save()
Part(uid="human_arm", display_name="Рука", tags=[arm_bodypart_tag], hp=50).save()
Part(uid="human_leg", display_name="Нога", hp=50).save()
Вот пример, как создаются части тела. Тут нет ничего сверхъестественного или необычного. Вы можете присвоить классам переменную, чтобы можно было обращаться с ней из других файлов.
from properties.status import Status
import content.tags as tags
hot = Status(
uid="hot",
display_name="Тепло",
description="Вам тепло!",
duration=3,
override_by_name=False,
unique_by_tag="anti_thermal",
tags=[tags.thermal_status],
can_concat=False,
)
Где надо .save(), а где нет?
Везде, кроме статусов и их деривативов (Откровения, Травмы). Они не являются Document, а являются EmbeddedDocument. В их случае вы лишь создаете "шаблон".
Как вызывать сущности в коде
Если это Document, то есть вы его сейвите, можно либо присвоить переменную, либо вытащить его по какому-либо полю из БД. Синтаксис тут обычный для mongoengine, например, чтобы вытащить Holdable с uid "big_gun", нужно сделать что-то такое:
В данном случае .first() позволяет нам получить первый элемент полученного в резуьтате использования .objects() инстанса класса QuerySet. Поскольку мы использовали поиск по айдишнику, мы точно знаем, что он один, поэтому смело пользуется методом .first(); все аргументы в .objects() это, по сути, аргументы поиска в базе данных. Подробнее лучше смотреть в оригинальной документации.
Если это статус то для вас есть специальный словари all_statuses, all_traumas и all_revelations, они лежат соотв-но в properties/status.py.
Но это достаточно костыльный способ, проще всего присвоить переменную, поэтому лучше сразу ее назначать, когда вы создаете статус.