Команда Emplace
Команда emplace принимает некоторое перечисление и многократно выполняет командный блок, предоставляя при этом специальные переменные, доступные только для чтения и локальные для этого командного блока. Предоставляемые переменные зависят от входного типа, хотя само фактическое значение всегда доступно через переменную $value. В частности, если ей передать сущности, она определит локальные переменные, дающие доступ к некоторым свойствам этой сущности, включая:
- Координаты сущности на карте
$wx,$wy - Прототип сущности
$proto - Имя сущности
$name - Описание сущности
$desc - Приостановлена ли сущность
$pausedАналогично,ICommonSessionпредоставит привязанную к сессии сущность$ent, имя пользователя$nameиNetUserIdчерез$userid.
Например, эта простая команда просто вернёт y-координаты всех сущностей:
entities emplace { var $wy }
В общем, команда emplace полезна, если вы хотите использовать свойства сущностей в качестве аргументов для какой-либо другой команды Toolshed.
Команда Do
Команда do похожа на команду emplace. Она принимает некоторое перечисление и строку команды, а затем пытается многократно вычислить эту строку команды (как если бы она была введена в консоль), возможно, после выполнения некоторых замен строк.
Команда do в основном существует для обратной совместимости с командами, не относящимися к Toolshed, которые не поддерживают переменные Toolshed. Например, на момент написания команда say не является командой Toolshed. Так что если бы вы захотели заставить своего персонажа произнести позиции всех мобов, вам пришлось бы использовать команду do:
entities with MobState do "say $WX $WY"
Возможные замены строк отличаются от переменных, доступных в блоке emplace. В частности, текущее значение обозначается $SELF, а не $value. Когда передаётся сущность, выполняются следующие замены строк:
$IDзаменяется на текущий EntityUid.$PIDзаменяется на EntityUid, привязанный к выполняющему игроку.$WX,$WYзаменяются на координаты сущности на карте.$LX,$LYзаменяются на локальные координаты сущности.