Перейти к содержимому

Выборки игроков

Нативный API возвращает коллекции всех игроков, союзников и противников. Выборки удобны, когда компоненту нужно применить несколько условий и получить один результат: ближайшего видимого противника, всех живых союзников или игроков в заданном радиусе.

import { agents } from "@killscript/sdk/client";
const visibleLivingEnemies = agents
.select(agents.enemies())
.visible()
.alive()
.toArray();

agents.select() копирует исходную коллекцию в обычную сгенерированную Lua-таблицу. Последующие фильтры изменяют только эту выборку и никогда не трогают нативную коллекцию игры.

toArray() возвращает поверхностную копию. Изменение полученного массива не влияет на выборку, которую используют first(), count() и следующие фильтры.

Вызовите agents.select() без аргумента, чтобы начать с Agents.GetAll().

То же пространство имён agents предоставляет частые нативные коллекции и на клиенте, и в Reflex:

МетодНативный результат
local()Локальный игрок или undefined
localOrSpectated()Локальный или наблюдаемый игрок, либо undefined
all()Agents.GetAll()
allies()Agents.GetAllies()
enemies()Agents.GetEnemies()
select(values?)Цепочка фильтров над собственной выборкой; по умолчанию все игроки
import { agents } from "@killscript/sdk/client";
function nearestVisibleEnemy(maxDistance: number): Agent | undefined {
const local = agents.local();
if (local === undefined) return undefined;
const origin = local.Movement.Position;
return agents
.select(agents.enemies())
.visible()
.alive()
.within(origin, maxDistance)
.nearestTo(origin);
}

Условия читаются слева направо. При отсутствии результата вернётся undefined, поэтому вызывающая функция должна обработать случай без подходящих игроков.

ОперацияРезультат
where(predicate)Оставляет игроков, подходящих пользовательскому условию
alive() / dead()Фильтрует по agent.Stats.IsAlive
visible()Оставляет игроков хотя бы с одним видимым сейчас хитбоксом
within(origin, distance)Ограничивает расстояние в мировых координатах
exclude(agent)Убирает одного игрока; undefined игнорируется
team(team)Оставляет одно нативное значение Team
first()Возвращает первый текущий результат
nearestTo(origin)Возвращает ближайший текущий результат
count()Возвращает размер выборки
toArray()Возвращает отфильтрованный обычный массив

Используйте where() для условия, которого нет среди готовых операций:

const richAliveAgents = agents
.select()
.visible()
.alive()
.where((agent) => agent.Stats.Money >= 5000)
.toArray();

Для остальных нативных коллекций используйте Игровые массивы.