Skip to content

Пояснения к API

Подробная документация в через сваггер доступна на эндпоинте /docs, так же есть альтернативная документация через /redoc

На этой страничке будут написаны неочевидные вещи, требующие пояснения.

use_ability

Это достаточно сложный метод, потому что он включает в себя ВСЕ возможные использования любых абилок.

Базовый боди метода выглядит так:

{
"source": "string",
"target": "string",
"atk_ability": "string",
"def_ability": "string",
"bodypart_target": "string",
"distance": 0
}

Вы, в принципе, можете догадаться, что эти поля значат или посмотреть их описания в Сваггере. Тут мы рассмотрим их особенности в зависимости от типа абилки:

  • source: всегда передается в неизменном виде, это всегда одиночная строка с uuid/name инициирующей абилку энтити.
  • target: это строка с uuid/name энтити. Он может быть передан в виде массива, даже в случае, если цель одна.

Самоцель

В случае, если абилка направлена на самого себя, т.е. имеет TargetType.SELF, то все равно необходимо передавать инициатора в target, то есть содержание source и target будет одинаковым. Ну или source будет "john", а target может быть ["john"], тут как угодно.

  • atk_ability: всегда передается в неизменном виде, это всегда uid атакующей абилки.
  • def_ability: передается либо null, либо строка с uid защитной абилки. Как и в случаях выше, это может быть массивом с несколькими или одним элементом.
  • target_bodypart: передается либо null, либо строка с ключом части тела в словаре parts. Так же, как и в случаях выше, может быть массивом с несколькими или одним элементом.
  • distance: передается всегда number или массив с number, в массиве может быть один элемент. Не может быть null, если расстояния нет (например, в SELF-абилках) то используйте 0.

В случае одиночных абилок, вы сами решаете, передавать массив с одним элементом или сам элемент. Никакой разницы нет. Так же, если у вас не AOE-абилка, вы можете не передавать ничего там, где должен быть null или 0. Подробнее об особенности AOE-абилок ниже.

Особенности аое-абилок

В их случае вы передаете массивы, т.е. массив целей, массив защитных абилок, массив целевых частей тела, где первый элемент в массиве целей маппится с первым элементом в массиве защитных абилок и т.д и т.п. Эти массивы всегда должны быть одинаковой длины, иначе вас ждут критические баги. Если, например, вы атакуете не-локационной абилкой трех персонажей с никами "john", "bill" и "maria", и, например, только Билл не защищается, то это должно выглядеть так:

{
"source": "developer",
"target": ["john", "bill", "maria"],
"def_ability": ["block", null, "dodge"],
"target_bodypart": [null, null, null],
"distance": [5, 8, 10]
}

Если хоть один из массивов будет другой длины, это может быть критично и вызовет нехорошие баги. Имейте это в виду.