Пояснения к 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]
}
Если хоть один из массивов будет другой длины, это может быть критично и вызовет нехорошие баги. Имейте это в виду.