Глупо будет применять такие конструкции для исполнения в чате. Однако в связи с тем, что среда исполнения сохраняется (у нас есть доступ к объекту в любое время) - можно использовать объекты, построенные ранее, например вызовом скрипта из файла или любого объекта, способного содержать скрипт.
Вот наброски:
Код выбирает некоторую платформу из блоков, затем разрушает ее.
Код:
Platform: {
Blocks: <ARRAY
Destroy: {
@Blocks { 0 SETBLOCK DROP } EACH
}
THIS
}
ME 5 SPHERE Platform %pl1
ME 6 SPHERE Platform %pl2
@pl1.Blocks %b1
pl1.Destroy
1 WAIT
pl2.Destroy
Platform: { ... } - это конструктор платформы. Точнее, полю "Platform" присваивается новая функция-конструктор
Blocks: <ARRAY - записать в поле Blocks текущего объекта значение из стека, преобразованное в массив
Destroy: { ... } - записать в поле Destroy функцию, которая разрушает блоки
THIS - вернуть объект (а не просто выполнить функцию)
ME 5 SPHERE Platform %pl1 - берется сфера из блоков вокруг игрока (радиус 5 блоков), затем создается объект-платформа и записывается в переменную "pl1". Т.к. поля pl1 нет у данного объекта, значение записывается в глобальную область видимости, доступную всем скриптам и языкам у данного игрока/того кто вызвал код.
ME 5 SPHERE Platform %pl2 - аналогично, платформа радиусом в 6 блоков записывается в "pl2"
@pl1.Blocks %b1 - поле "Blocks" объекта pl1 записывается в переменную b1
pl1.Destroy - вызывается метод Destroy объекта pl1 (блоки платформы уничтожаются)
1 WAIT - ждем секунду
pl2.Destroy - уничтожаем вторую платформу