レコードをなくす方法が2つあります。DeletedとDisabledです。
主にセルに配置しているオブジェクトにたいして使います。
ちなみに、自作のプラグインでレコードを作成したものの、あとから不要になったので消したいという場合はRemoveです。
バニラのマスタープラグインや他のプラグインのパッチを作成して、あるレコードをなくしたいという場合の話になります。
クラッシュログ
FROSTにてトミーがDeletedになっているのですが、屋外でコンバットゾーンに近づくだけで確定でCTDしてしまいました。
何十周とプレイしていて初めてのことでしたので、タイミングによってこうなるようです。
Unhandled exception "EXCEPTION_ACCESS_VIOLATION" at 0x7FF752C089A3 Fallout4.exe+03F89A3 REGISTERS: RAX 0x0 (size_t) RCX 0x7FF7580E0B00 (void* -> Fallout4.exe+58D0B00) RDX 0x2074D (size_t) RBX 0x2AEC63FE3C0 (Actor*) Object Reference: None File: "FROST.esp" Flags: 0x00000420 Form ID: 0x0002074D Form Type: 65 RSP 0xAFCFA2FA40 (void*) RBP 0x2AF5C0332C0 (BGSLocation*) File: "Fallout4.esm" Flags: 0x00000009 Form ID: 0x0001905B Form Type: 107 Full Name: "コンバットゾーン" RSI 0x2AEC63FE3C0 (Actor*) Object Reference: None File: "FROST.esp" Flags: 0x00000420 Form ID: 0x0002074D Form Type: 65 RDI 0x2AEC63FE3C0 (Actor*) Object Reference: None File: "FROST.esp" Flags: 0x00000420 Form ID: 0x0002074D Form Type: 65
Deleted
レコードをなかったことにするフラグです。どうやらゲーム起動時のロードで無視されるようです。
無視されるのでゲーム内に存在しないことになりますが、他のプラグインが操作しようとするとCTDしてしまうことがあるようです。
Disabled
レコードを無効にするフラグです。無効になっているだけなので、ゲーム内で有効にすれば使えるようになります。
ある場所でスクリプト沸きさせるActorをDisabled状態で待機させておくとか、建物を追加するので邪魔なバニラのオブジェクトをなくしたい時などに使います。
こちらはレコード自体は存在しているので、他のプラグインが操作しようとしても、成功するかは別にして、CTDにはならないようです。
DeletedをDisabledに変更するxEdit用スクリプト
{ Change "Deleted" flag to "Initially Disabled". } unit UserScript; function Process(e: IInterface): integer; begin if Signature(e) <> 'REFR' then Exit; if GetElementNativeValues(e, 'Record Header\Record Flags\Deleted') = '0' then Exit; AddMessage( IntToHex(FixedFormID(e), 8) ); SetElementNativeValues(e, 'Record Header\Record Flags\Deleted', '0'); SetElementNativeValues(e, 'Record Header\Record Flags\Initially Disabled', '1'); end; end.