public void DisableAPI() { // Some calls assuring the Disable() API is accessible and working. SkyrimMod sourceMod = new SkyrimMod(Utility.PluginModKey, SkyrimRelease.SkyrimSE); FormKey key = sourceMod.GetNextFormKey(); PlacedObject placedObject = new PlacedObject(key, SkyrimRelease.SkyrimSE); // Simplistic Disable access and verification. PlacedObject disabledObj = placedObject; disabledObj.Disable(); //_testOutputHelper.WriteLine($"{disabledPlacedObject.MajorRecordFlagsRaw}"); Assert.True(EnumExt.HasFlag(disabledObj.MajorRecordFlagsRaw, Constants.InitiallyDisabled)); MajorRecord majorRecord = placedObject; majorRecord.Disable(); Assert.True(EnumExt.HasFlag(majorRecord.MajorRecordFlagsRaw, Constants.InitiallyDisabled)); IMajorRecordCommon interfaceRecord = placedObject; interfaceRecord.Disable(); Assert.True(EnumExt.HasFlag(interfaceRecord.MajorRecordFlagsRaw, Constants.InitiallyDisabled)); IPlaced interfacePlaced = placedObject; interfacePlaced.Disable(); Assert.True(EnumExt.HasFlag(interfacePlaced.MajorRecordFlagsRaw, Constants.InitiallyDisabled)); // Sanity test both API are invokable under Placed context. PlacedTrap placedTrap = new PlacedTrap(key, SkyrimRelease.SkyrimSE); placedTrap.Disable(IPlaced.DisableType.DisableWithoutZOffset); interfacePlaced = placedTrap; interfacePlaced.Disable(IPlaced.DisableType.JustInitiallyDisabled); IPlaced abstractPlaced = placedTrap; abstractPlaced.Disable(); abstractPlaced.Disable(IPlaced.DisableType.SafeDisable); //Try any other object other than Placed (invoke MajorRecord.Disable() and see if it works) var armor = new Armor(key, SkyrimRelease.SkyrimSE); armor.Disable(); Assert.True(EnumExt.HasFlag(armor.MajorRecordFlagsRaw, Constants.InitiallyDisabled)); }
/// <summary> /// Allows to easily disable placed records. Specify <paramref name="disableType"/> to further designate /// how the record should be disabled. /// </summary> /// <param name="placed">IPlaced object to disable</param> /// <param name="disableType">How the record should be disabled</param> /// <returns>Returns true if the disable operation has succeeded, false otherwise.</returns> public static bool Disable(this IPlaced placed, DisableType disableType) { if (placed.IsDeleted) { return(false); } if (placed.Placement != null && disableType == DisableType.SafeDisable) { placed.Placement.Position = new P3Float(placed.Placement.Position.X, placed.Placement.Position.Y, -30000); } if (placed.EnableParent != null && disableType != DisableType.JustInitiallyDisabled) { placed.EnableParent.Flags = EnableParent.Flag.SetEnableStateToOppositeOfParent; placed.EnableParent.Reference.SetTo(Constants.Player.Cast <ILinkedReferenceGetter>()); } placed.MajorRecordFlagsRaw = EnumExt.SetFlag(placed.MajorRecordFlagsRaw, (int)SkyrimMajorRecordFlag.InitiallyDisabled, true); return(true); }
/// <summary> /// Disables the placed object using standard undelete and disable procedure. This will flag the record <br/> /// as Initially Disabled, set the Enable Parent to be opposite of the Player and set the Z-Offset to /// -30000. /// </summary> /// <returns>True if the disable was successful.</returns> public static bool Disable(this IPlaced placed) { return(placed.Disable(DisableType.SafeDisable)); }