BQL
Перевод BQL
BQL - язык запросов выборки игровых сущностей для использования в команде forall.
Команда forall доступна для администраторов с +QUERY и используется для выборки всех игровых сущностей, которые удовлетворяют заданным пользователем условиям. Команда выглядит так:
forall QUERY do COMMAND
Не совсем ясно, что означает "B" в BQL. Кто-то предлагал расшифровывать первую букву как "bad', "badmin" или "better"
Запросы
Запросы выбирают/отфильтровывают все игровые сущности игры по определённым заданным критериям.
Возможно задание нескольких условий для выборки. Например, взрыв всех живых существ, названных "Urist McHands":
forall alive named "Urist McHands" do invokeverb self $ID Explode
alive- фильтр, выбирающий все живые игровые сущности;named "Urist McHands"- фильтр, выбирающий все игровые сущности, названные "Urist McHands".
В любой игре очень много сущностей, поэтому помните:
- BQL по умолчанию применяется ГЛОБАЛЬНО. Каждый запрос начинается с выборки абсолютно всех сущностей. Если вам нужны сущности только определённой сетки, то используйте фильтры
ongridилиonmap. - Не все запросы выполняются одинаково быстро. Лучше всего начинать перечисление условий выборки с фильтра
with <compили любого другого фильтра, который наиболее точно находит искомое (наподобиеtagged,mindfulилиalive), так как этим фильтрам не нужно проверять каждую сущность в игре на соответствие условиям. Будьте точны: используйте фильтры так, чтобы они выбирали как можно меньшее количество сущностей. Вы же не хотите, чтобы из-за вашей попытки сделать из каждого мыла разумное существо, сервер тормознулся на несколько секунд?
Запросы движка
Данные фильтры предоставляются RobustToolbox'ом (движок, на котором сделана ss14) и доступны во всех играх, которые сделаны на нём:
notможно поставить перед любым запросом, если толькоnotне инвертировано себя само;with Xвыбирает все сущности с компонентом X;named Xвыбирает все сущности с данным именем X с помощью регулярных выражений (^и$вставлены автоматически?);- ?
parentedtoвыбирает все сущности, которые являются родительскими по отношению к данной сущности; - ?
rparentedtoвыбирает все сущности, которые являются по отношению к данной сущности, даже если косвенно; childrenвыбирает все сущности, которые являются дочерними к данной;rchildrenвыбирает все сущности, которые являются дочерними к данной рекурсивно;parentвыбирает все сущности, которые являются родительскими к данной;prototypedвыбирает все сущности, базирующиеся на данном прототипе;rprototypedвыбирает все сущности, базирующиеся на данном прототипе, даже если косвенно;selectвыбирает N случайных сущностей или N% сущностей в зависимост от данного аргумента. Не инвертируйте этот фильтр, иначе это выберет все 100%. Считайте, что это как выборка абсолютно всех сущностей, но в кол-ве N.nearвыбирает все сущности около пользователей (сущности, которые используют BQL) в данном радиусе.anchoredвыбирает все сущности, которые закреплены;ongridвыбирает все сущности на данной сетке;onmapвыбирает все сущности на данной карте;aboveвыбирает все сущности над данном типом тайла.
Запросы SS14
Это дополнительные фильтры, доступные в Space Station 14:
taggedвыбирает все сущности с данным тегом;mindfulвыбирает все сущности, за которыми в данный момент закреплён разум;aliveвыбирает все живые сущности с разумом;hasreagentвыбирает все сущности с данным реагентом внутри или где-то еще;apcpoweredвыбирает все сущности, которые в данный момент запитаны от ЛКП.
Команды
Это именно то, как происходят потрясающие вещи с выбранными сущностями. Это обычные команды из консоли, которые будут запускаться 'на каждую сущность' со следующими подстановками:
$ID- ID сущности, с которой происходят манипуляции;$NAME- название сущности, с которой производятся манипуляции;$WX,$WY- глобальные координаты X и Y сущности, с которой производятся манипуляции;$LX,$LY- локальные (относительно родителя?) координаты X и Y сущности, с которой происходят манипуляции;- ...
Примеры
- Зарядить все батареи:
forall with Battery do setbatterypercent $ID 100 - Вернуть/реанимировать всех к жизни:
forall with Mind do rejuvenate $ID - Выдать всему, кто зовётся "Walter White" lung cancer:
forall named "Walter White" do invokeverb self "Lung Cancer" - Взорвать всех и каждого (не надо это делать):
forall with Body do invokeverb $ID "Explode" - Удалить все ghost-роли:
forall with GhostTakeoverAvailable do rmcomp $ID GhostTakeoverAvailable; rmcomp $ID Mind - День полного доступа:
forall with AccessReader do rmcomp $ID AccessReader - Выставить всем игрокам форму мима:
forall with Mind prototyped MobHuman do setoutfit $ID MimeGear; rmcomp $ID Speech - Объявить минуту молчания:
forall with Humanoid do addreagent $ID chemicals MuteToxin 30