diff --git a/PropUndoButton/Main.cs b/PropUndoButton/Main.cs index 33c3b0b..8a98e48 100644 --- a/PropUndoButton/Main.cs +++ b/PropUndoButton/Main.cs @@ -37,10 +37,14 @@ public class PropUndoButton : MelonMod public override void OnInitializeMelon() { - HarmonyInstance.Patch( // delete all props in reverse order for redo + HarmonyInstance.Patch( // delete my props in reverse order for redo typeof(CVRSyncHelper).GetMethod(nameof(CVRSyncHelper.DeleteMyProps)), prefix: new HarmonyLib.HarmonyMethod(typeof(PropUndoButton).GetMethod(nameof(OnDeleteMyProps), BindingFlags.NonPublic | BindingFlags.Static)) ); + HarmonyInstance.Patch( // delete all props in reverse order for redo + typeof(CVRSyncHelper).GetMethod(nameof(CVRSyncHelper.DeleteAllProps)), + prefix: new HarmonyLib.HarmonyMethod(typeof(PropUndoButton).GetMethod(nameof(OnDeleteAllProps), BindingFlags.NonPublic | BindingFlags.Static)) + ); HarmonyInstance.Patch( // prop spawn sfx typeof(CVRSyncHelper).GetMethod(nameof(CVRSyncHelper.SpawnProp)), postfix: new HarmonyLib.HarmonyMethod(typeof(PropUndoButton).GetMethod(nameof(OnSpawnProp), BindingFlags.NonPublic | BindingFlags.Static)) @@ -172,6 +176,27 @@ public class PropUndoButton : MelonMod return false; } + // delete in reverse order for undo to work as expected + private static bool OnDeleteAllProps() + { + if (!EntryEnabled.Value) return true; + + CVRSyncHelper.PropData[] propsList = CVRSyncHelper.Props.ToArray(); + if (propsList.Length == 0) + { + PlayAudioModule(sfx_warn); + return false; + } + + for (int i = propsList.Length - 1; i >= 0; i--) + { + CVRSyncHelper.PropData propData = propsList[i]; + SafeDeleteProp(propData); + } + + return false; + } + private static void UndoProp() { var propData = GetLatestPropByOwnerId();