Ccылка на оригинал:
Removing "Placeatme Objects" (TES CS Wiki)
Cсылка на перевод:
Удаление PlaceAtMe-объектов (Rumor Wiki)
автор: GuidoBot
перевод: Eugene (OSFM team)
редактирование: Garin (OSFM team)
Удаление "Placeatme-объектов"
Статья посвящена вопросу удаления объектов, размещенных в игре с помощью команды Placeatme в виде 3D-объекта. Метод Disable удаляет объекты, пока игрока нет в той же ячейке, но они сохраняются (и перезагружаются), когда игрок возвращается, даже если вы об этом не знаете.
В этом первом примере предполагается, что объект был расположен в игровом мире только что, т.е. просто, чтобы быть использованным как маркер для цели или что-либо подобное.
Пример №1 ; создание
set placerRef to player.PlaceAtMe MyPlacer 1 50 0
; ...
; разрушение
placerRef.Activate player
placerRef.RemoveMe
Вариант, при котором Activate будет следовать непосредственно за RemoveMe, будет работать, но так не запустится ни один привязанный скрипт.
Как установлено в CS Wiki, нужна гарантия, что произойдет фреймовый щелчок. Фактически это не так уж и необходимо – вы можете достичь того же эффекта, используя другой скрипт, осуществляющий RemoveMe для этой цели – чтобы заставить текущий скрипт вернуться.
В следующих примерах, тот же эффект будет работать для заскриптованных объектов.
В
примере №2 эффект разделен между создающим и целевым объектом.
scn MyPlacerScript
Begin GameMode
if GetContainer
RemoveMe
endif
End
Чтобы использовать\разрушить объект:
; создание
set placerRef to player.PlaceAtMe MyPlacer 1 50 0
; ...
; разрушение
placerRef.Activate player
Вот более оригинальный вариант, но у вас могут появиться дополнительные вопросы.
В
примере №3 требуется некоторая доработка созданного объекта:
short stage
Begin GameMode
if GetDisabled
if stage == 0
Activate player
set stage to 1
else
RemoveMe
endif
endif
End
Ориентировочно это может быть полезно, когда уже задействована масса PlaceAtMe-объектов. Поэтому следующий скрипт используется, чтобы использовать\разрушить эти объекты:
; создание
set placerRef to player.PlaceAtMe 1 50 0
; ...
; разрушение
placerRef.Disable
Приведенные примеры помогут вам поэкспериментировать самостоятельно, чтобы понять, как все это работает. Возможно, что для более длинных скриптов может понадобиться дополнительная доработка, особенно если вы используете stackable-объекты.