From 201cf966293cb3bec52651d695ca19efbec48f06 Mon Sep 17 00:00:00 2001 From: erikn Date: Sat, 12 Apr 2025 23:17:43 +0200 Subject: [PATCH] Fixed time reporting, added /mm --- MosswartMassacre/MainView.cs | 20 +++- MosswartMassacre/PluginCore.cs | 117 +++++++++++++++----- MosswartMassacre/Properties/AssemblyInfo.cs | 4 +- MosswartMassacre/ViewXML/mainView.xml | 2 +- 4 files changed, 109 insertions(+), 34 deletions(-) diff --git a/MosswartMassacre/MainView.cs b/MosswartMassacre/MainView.cs index 8a98ed1..063e7f7 100644 --- a/MosswartMassacre/MainView.cs +++ b/MosswartMassacre/MainView.cs @@ -13,7 +13,6 @@ namespace MosswartMassacre private static IStaticText lblRareCount; private static IButton btnRestart; private static IButton btnToggleRareMeta; - private static bool rareMetaEnabled = true; public static void ViewInit() { @@ -67,7 +66,15 @@ namespace MosswartMassacre public static void UpdateElapsedTime(TimeSpan elapsed) { - lblElapsedTime.Text = $"Elapsed Time: {elapsed:hh\\:mm\\:ss}"; + int days = elapsed.Days; + int hours = elapsed.Hours; + int minutes = elapsed.Minutes; + int seconds = elapsed.Seconds; + + if (days > 0) + lblElapsedTime.Text = $"Time: {days}d {hours:D2}:{minutes:D2}:{seconds:D2}"; + else + lblElapsedTime.Text = $"Time: {hours:D2}:{minutes:D2}:{seconds:D2}"; } public static void UpdateRareCount(int rareCount) { @@ -79,10 +86,11 @@ namespace MosswartMassacre } private static void OnToggleRareMetaClick(object sender, EventArgs e) { - rareMetaEnabled = !rareMetaEnabled; - btnToggleRareMeta.Text = rareMetaEnabled ? "Meta: ON" : "Meta: OFF"; - PluginCore.rareMetaEnabled = rareMetaEnabled; // Share toggle with PluginCore - PluginCore.WriteToChat($"[Debug] rareMetaEnabled is now: {rareMetaEnabled}"); + PluginCore.ToggleRareMeta(); + } + public static void SetRareMetaToggleState(bool enabled) + { + btnToggleRareMeta.Text = enabled ? "Meta: ON" : "Meta: OFF"; } } } diff --git a/MosswartMassacre/PluginCore.cs b/MosswartMassacre/PluginCore.cs index aa2d4af..e2e96cc 100644 --- a/MosswartMassacre/PluginCore.cs +++ b/MosswartMassacre/PluginCore.cs @@ -19,7 +19,7 @@ namespace MosswartMassacre internal static double killsPerHour = 0; internal static DateTime statsStartTime = DateTime.Now; internal static Timer updateTimer; - internal static bool rareMetaEnabled = true; + public static bool RareMetaEnabled { get; private set; } = true; private static Queue rareMessageQueue = new Queue(); private static DateTime _lastSent = DateTime.MinValue; private static readonly Queue _chatQueue = new Queue(); @@ -33,6 +33,7 @@ namespace MosswartMassacre // Subscribe to chat message event CoreManager.Current.ChatBoxMessage += new EventHandler(OnChatText); + CoreManager.Current.CommandLineText += OnChatCommand; // Initialize the timer updateTimer = new Timer(1000); // Update every second @@ -56,6 +57,7 @@ namespace MosswartMassacre // Unsubscribe from chat message event CoreManager.Current.ChatBoxMessage -= new EventHandler(OnChatText); + CoreManager.Current.CommandLineText -= OnChatCommand; // Stop and dispose of the timer if (updateTimer != null) @@ -94,36 +96,36 @@ namespace MosswartMassacre rareCount++; MainView.UpdateRareCount(rareCount); - if (rareMetaEnabled) + if (RareMetaEnabled) { Decal_DispatchOnChatCommand("/vt setmetastate loot_rare"); } DelayedCommandManager.AddDelayedCommand($"/a {rareText}", 3000); } - if (e.Text.EndsWith("!testrare\"")) - { - string simulatedText = $"{CoreManager.Current.CharacterFilter.Name} has discovered the Ancient Pickle!"; - - if (IsRareDiscoveryMessage(simulatedText, out string simulatedRareText)) - { - rareCount++; - MainView.UpdateRareCount(rareCount); - - if (rareMetaEnabled) - { - Decal_DispatchOnChatCommand("/vt setmetastate loot_rare"); - } - - DelayedCommandManager.AddDelayedCommand($"/a {simulatedRareText}", 3000); - } - else - { - WriteToChat("[Test] Simulated rare message didn't match the regex."); - } - - return; - } + // if (e.Text.EndsWith("!testrare\"")) + // { + // string simulatedText = $"{CoreManager.Current.CharacterFilter.Name} has discovered the Ancient Pickle!"; + // + // if (IsRareDiscoveryMessage(simulatedText, out string simulatedRareText)) + // { + // rareCount++; + // MainView.UpdateRareCount(rareCount); + // + // if (RareMetaEnabled) + // { + // Decal_DispatchOnChatCommand("/vt setmetastate loot_rare"); + // } + // + // DelayedCommandManager.AddDelayedCommand($"/a {simulatedRareText}", 3000); + // } + // else + // { + // WriteToChat("[Test] Simulated rare message didn't match the regex."); + // } + // + // return; + // } if (e.Color == 18 && e.Text.EndsWith("!report\"")) { TimeSpan elapsed = DateTime.Now - statsStartTime; @@ -137,6 +139,21 @@ namespace MosswartMassacre WriteToChat("Error processing chat message: " + ex.Message); } } + private void OnChatCommand(object sender, ChatParserInterceptEventArgs e) + { + try + { + if (e.Text.StartsWith("/mm", StringComparison.OrdinalIgnoreCase)) + { + e.Eat = true; // Prevent the message from showing in chat + HandleMmCommand(e.Text); + } + } + catch (Exception ex) + { + PluginCore.WriteToChat($"[Error] Failed to process /mm command: {ex.Message}"); + } + } private void UpdateStats(object sender, ElapsedEventArgs e) { @@ -249,6 +266,12 @@ namespace MosswartMassacre MainView.UpdateKillStats(totalKills, killsPer5Min, killsPerHour); MainView.UpdateRareCount(rareCount); } + public static void ToggleRareMeta() + { + RareMetaEnabled = !RareMetaEnabled; + MainView.SetRareMetaToggleState(RareMetaEnabled); + } + [DllImport("Decal.dll")] private static extern int DispatchOnChatCommand(ref IntPtr str, [MarshalAs(UnmanagedType.U4)] int target); @@ -271,6 +294,50 @@ namespace MosswartMassacre if (!Decal_DispatchOnChatCommand(cmd)) CoreManager.Current.Actions.InvokeChatParser(cmd); } + private void HandleMmCommand(string text) + { + // Remove the /mm prefix and trim extra whitespace + string[] args = text.Substring(3).Trim().Split(' '); + + if (args.Length == 0 || string.IsNullOrEmpty(args[0])) + { + WriteToChat("Usage: /mm . Try /mm help"); + return; + } + + string subCommand = args[0].ToLower(); + + switch (subCommand) + { + case "help": + WriteToChat("Mosswart Massacre Commands:"); + WriteToChat("/mm report - Show current stats"); + WriteToChat("/mm reset - Reset all counters"); + WriteToChat("/mm meta - Toggle rare meta state"); + break; + + case "report": + TimeSpan elapsed = DateTime.Now - statsStartTime; + string reportMessage = $"Total Kills: {totalKills}, Kills per Hour: {killsPerHour:F2}, Elapsed Time: {elapsed:dd\\.hh\\:mm\\:ss}, Rares Found: {rareCount}"; + WriteToChat(reportMessage); + break; + + case "reset": + RestartStats(); + break; + + case "meta": + RareMetaEnabled = !RareMetaEnabled; + WriteToChat($"Rare meta state is now {(RareMetaEnabled ? "ON" : "OFF")}"); + MainView.SetRareMetaToggleState(RareMetaEnabled); // <-- sync the UI + break; + + default: + WriteToChat($"Unknown /mm command: {subCommand}. Try /mm help"); + break; + } + } + } } diff --git a/MosswartMassacre/Properties/AssemblyInfo.cs b/MosswartMassacre/Properties/AssemblyInfo.cs index 3a7c682..44e8cd1 100644 --- a/MosswartMassacre/Properties/AssemblyInfo.cs +++ b/MosswartMassacre/Properties/AssemblyInfo.cs @@ -26,5 +26,5 @@ using System.Runtime.InteropServices; // Minor Version // Build Number // Revision -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("1.0.0.1")] +[assembly: AssemblyFileVersion("1.0.0.1")] \ No newline at end of file diff --git a/MosswartMassacre/ViewXML/mainView.xml b/MosswartMassacre/ViewXML/mainView.xml index 78e6865..f5161ca 100644 --- a/MosswartMassacre/ViewXML/mainView.xml +++ b/MosswartMassacre/ViewXML/mainView.xml @@ -4,7 +4,7 @@ - +