CellChanged возвращает 1 в кадре, когда игрок меняет ячейку.
Когда игрок готов покинуть ячейку, скрипт в текущей ячейке останавливается, так что эта функция исполняется, и результаты будут готовы, как только игрок вернется, а не когда он покидает ее, так как скрипт останавливается раньше, чем устанавливается CellChanged (Спасибо Klinn за это исправление).
В функции есть небольшой баг: телепортация из ячейки не переключает эту функцию (не подтверждено).
Пример: В скрипте SlaveScript, который освобождает рабов в игре, функция CellChanged работает как триггер, заставляя рабов исчезнуть — раб уходит в светлое будущее:
Begin SlaveScript
[…]
if ( slaveStatus == 3 )
if ( GetCurrentAIPackage == 3 )
AIWander 512 0 0 0 0 0 0 0 0 0 0 0
endif
if ( GetItemCount Slave_Bracer_Left > 0 )
Drop Slave_Bracer_Left 1
endif
if ( GetItemCount Slave_Bracer_Right > 0 )
Drop Slave_Bracer_Right 1
endif
if ( CellChanged == 1 )
Disable
endif
endif
end slaveScript
другой отличный пример — это скрипт Gateway Haunt.
Он всегда возвращается, когда вы этого не ждете:
Begin ResurrectHaunt
;town_Sadrith quest
;gateway_haunt resurrects until journal town_Sadrith >= 35
if ( CellChanged == 1 )
if ( gateway_haunt->GetHealth < 1 )
gateway_haunt->Resurrect
endif
endif
end ResurrectHaunt
Содержание MSFD Определяем, когда игрок покинул ячейку