scsi и View Variables) для RobustToolbox, функционирующий как консоль разработки игры. Чтобы использовать Toolshed, откройте отладочную консоль или используйте отладочную консоль в devwindow.
Toolshed — это pipeline shell, и основной способ выполнения сложных действий — композиция команд. Вы можете просто написать несколько команд одну за другой, и, пока они совместимы, их входные данные будут последовательно передаваться друг другу. Для тех, кто знаком с оболочками вроде bash, это обычно делается с помощью явного символа pipe |. Однако в Toolshed оператор pipe является опциональным.
Например, возьмём следующий command run:
entities, with и count. Вместе они образуют command run, набор последовательных команд. В данном случае их совместный эффект — возврат общего количества сущностей, имеющих ItemComponent.
Subcommands
Некоторые команды сгруппированы в «команду» с «подкомандами». Это просто наборы связанных команд, имена которых состоят из двух частей, разделённых двоеточием: имени команды и имени подкоманды. Например, есть команды для добавления, удаления, обеспечения и проверки компонентов, и все они сгруппированы как часть команды «comp»:comp:getcomp:hascomp:addcomp:rmcomp:ensure
Help
Командаhelp может использоваться для отображения описания и общих сигнатур команд. Например:
- Имя и тип входного аргумента pipe. Здесь это часть
<input (IEnumerable<T>)> →. Опускается, если нет pipe-входа. - Сама команда, с любыми префиксами и аргументами. Поскольку у команды count нет аргументов, здесь это просто
count. - Тип вывода, который может быть передан в другие команды через pipe. Здесь это часть
→ Int32. Опускается, если команда ничего не возвращает.
<Name (Type)>, где имя и тип аргумента берутся из метода C#, связанного с этой командой. Если аргумент команды опционален, используются квадратные скобки (т.е. [Name (Type)]). Некоторые команды также принимают бесконечно повторяемые аргументы, которые обозначаются многоточием (т.е. [Name (Type)]...). Такие аргументы всегда будут последними, и это означает, что команду нужно завершить явным pipe |, если вы хотите передать вывод команды в другую команду.
Для более сложного примера давайте рассмотрим команду with, которая использовалась в предыдущем разделе. Она может принимать либо сущность, либо прототип сущности, поэтому у неё есть несколько реализаций. Она также требует один аргумент и поддерживает префиксы:
with можно дать опциональный префикс «not», чтобы инвертировать её поведение. Итак, если бы мы хотели получить количество всех сущностей, не имеющих компонента item, мы могли бы использовать entities not with Item count. Если команда поддерживает префиксы, на странице help должно быть об этом сказано.
Имена аргументов
Имя аргумента в синтаксисе команды также может помочь разрешить некоторые неоднозначности относительно порядка, в котором аргументы должны быть указаны. Например, командаtp:to телепортирует одну сущность к другой. Если вы не уверены, является ли целевая сущность входом pipe или первым аргументом, вы можете проверить имя аргумента, выводимое командой help.
Explain
Вы можете использовать командуexplain для получения информации о потоке command run. Настоятельно рекомендуется explain command runs, которые вы не понимаете, чтобы получить представление об их потоке. Она разобьёт любой допустимый command run на составляющие команды и для каждой команды предоставит:
- Краткое описание команды
- Конкретные типы ввода и вывода в контексте данного command run
- Сигнатуру команды, включая имя и тип всех разобранных аргументов.
IEnumerable<EntityUid>, в отличие от примера help, где использовался обобщённый тип (IEnumerable<T>). Команда explain будет показывать только тип и синтаксис для конкретной реализации команды, которая соответствует объясняемому command run.
Распространённые команды
В этом разделе кратко описаны некоторые простые команды, которые часто используются для построения более сложных command runs. Они могут использоваться в документации при приведении примеров использования других команд. Описание некоторых других часто используемых команд см. в разделе commands. Примеры объединения команд Toolshed см. в toolshed examples.Константы
Эти команды часто используются в начале command run для предоставления начального значения, которое передаётся в другие команды через pipe:i, возвращает целое число. Пример:i 2.f, возвращает число с плавающей точкой. Пример:f 2.1.b, возвращает bool. Пример:b true.s, возвращает строку. Пример:s "foo".ent, возвращает EntityUid. Пример:ent 123.fpi,dpiвозвращает Pi, в одинарной или двойной точности.
Математика
Toolshed поддерживает множество видов математических операций, включая, но не ограничиваясь:- Простые операции:
+,-,\*,/,% - Распространённые функции:
sin,abs,min,pow,ceil - Векторные операции (например, умножение списка на число):
+/,-/,\*/,//,%/ - Побитовые операции:
&,^,bitor,~,&~^~,bitornot(обратите внимание, что|— это явный символ pipe, поэтому он не используется для команд побитового ИЛИ)
Диапазоны и последовательности
Есть несколько команд, полезных для создания списков/последовательностей или управления ими:countвозвращает общее количество элементов в последовательностиtoиспользуется для создания диапазона чисел. Пример:i 3 to 5возвращает[3,4,5]iotaиспользуется для создания диапазона чисел до определённого значения. Пример:i 3 iotaвозвращает[1, 2, 3].repповторяет входное значение. Пример:i 5 rep 3возвращает[5, 5, 5].appendдобавляет число в конец последовательности.joinобъединяет две последовательности (или строки). Также может использоваться для добавления одного элемента в начало.firstвыбирает первый элемент в последовательностиtakeберёт первые N элементов в последовательностиselectслучайным образом выбирает N элементов или процент элементов из последовательности
Терминаторы
Разбор аргументов команды может быть прерван с помощью явного символа pipe| или символа терминатора ;. Первое в первую очередь полезно, если команда имеет опциональные или повторяемые аргументы, или чтобы сделать некоторые команды более читаемыми и понятными. Второе полезно в основном тем, что отбрасывает выходное значение pipe, что можно использовать для объединения иначе несовместимых команд. Например:
; приведённая выше команда не будет разобрана, так как команда i не принимает никаких значений через pipe.
Ошибки и недопустимые команды
Прежде чем Toolshed попытается выполнить command run, он должен сначала успешно его разобрать. Если ему не удаётся разобрать команду, он должен попытаться вывести полезное сообщение об ошибке, указывающее на конкретную часть команды, которую Toolshed не смог разобрать. Обратите внимание, что командаexplain работает только с допустимым command run и не может быть использована для выяснения того, почему command run не работает.
Toolshed часто выводит длинные stacktrace при неправильном использовании команды. Но обычно в консоли есть более понятное сообщение об ошибке над stacktrace, хотя, возможно, придётся прокрутить вверх, чтобы его увидеть.
with, которая ожидает на входе EntityUid или Prototype. Если мы вместо этого передадим ей целое число, она сообщит нам, что нет команды with, принимающей этот тип:
Поиск команд
Вы можете использовать командуcmd:list для получения списка всех команд. Затем вы можете объединить её с командой search для поиска по этому списку. Например:
types:consumers. Например, ent 1 types:consumers выведет все типы, которые могут принимать EntityUid. Обратите внимание, что команда types:consumers в настоящее время несколько несовершенна, особенно в отношении методов C#, использующих обобщённые ограничения. Например, она часто ошибочно сообщает, что различные математические команды принимают любой тип, хотя на самом деле они принимают только числа.