From 2e157884a4a7166087a3dcb3578ced8f445fd968 Mon Sep 17 00:00:00 2001 From: Jukkales Date: Fri, 12 Apr 2024 20:50:21 +0200 Subject: [PATCH] v1.2.0.0 farm mode and commands --- HoardFarm/HoardFarm.cs | 40 ++++++++++++++++++++--- HoardFarm/HoardFarm.csproj | 2 +- HoardFarm/Model/Configuration.cs | 1 + HoardFarm/Service/HoardFarmService.cs | 23 +++++++++----- HoardFarm/Windows/MainWindow.cs | 46 ++++++++++++++++++++++++++- 5 files changed, 97 insertions(+), 15 deletions(-) diff --git a/HoardFarm/HoardFarm.cs b/HoardFarm/HoardFarm.cs index 03f3ea5..8be5a5c 100644 --- a/HoardFarm/HoardFarm.cs +++ b/HoardFarm/HoardFarm.cs @@ -48,14 +48,20 @@ public HoardFarm(DalamudPluginInterface? pluginInterface) Achievements = achievementService; PluginInterface.UiBuilder.Draw += DrawUI; - PluginInterface.UiBuilder.OpenMainUi += ShowMainWindow; + PluginInterface.UiBuilder.OpenMainUi += () => OnCommand(); PluginInterface.UiBuilder.OpenConfigUi += ShowConfigWindow; Framework.Update += FrameworkUpdate; PluginService.TaskManager = new TaskManager(); - EzCmd.Add("/hoardfarm", (_, _) => ShowMainWindow() ,"Open the Hoard Farm window."); + EzCmd.Add("/hoardfarm", (_, args) => OnCommand(args) , + "Opens the Hoard Farm window.\n" + + "/hoardfarm config | c → Open the config window.\n" + + "/hoardfarm enable | e → Enable farming mode.\n" + + "/hoardfarm disable | d → Disable farming mode.\n" + + "/hoardfarm toggle | t → Toggle farming mode.\n" + ); CultureInfo.DefaultThreadCurrentUICulture = ClientState.ClientLanguage switch { @@ -80,6 +86,7 @@ public void Dispose() achievementService.Dispose(); Framework.Update -= FrameworkUpdate; + ECommonsMain.Dispose(); } private void DrawUI() @@ -87,10 +94,33 @@ private void DrawUI() WindowSystem.Draw(); } - public void ShowMainWindow() + public void OnCommand(string? args = null) { - Achievements.UpdateProgress(); - mainWindow.IsOpen = true; + args = args?.Trim().ToLower() ?? ""; + + switch (args) + { + case "c": + case "config": + ShowConfigWindow(); + return; + case "e": + case "enable": + HoardService.HoardMode = true; + return; + case "d": + case "disable": + HoardService.HoardMode = false; + return; + case "t": + case "toggle": + HoardService.HoardMode = !HoardService.HoardMode; + return; + default: + Achievements.UpdateProgress(); + mainWindow.IsOpen = true; + break; + } } public void ShowConfigWindow() diff --git a/HoardFarm/HoardFarm.csproj b/HoardFarm/HoardFarm.csproj index 01d4bf8..8bef81d 100644 --- a/HoardFarm/HoardFarm.csproj +++ b/HoardFarm/HoardFarm.csproj @@ -2,7 +2,7 @@ Jukkales - 1.1.1.0 + 1.2.0.0 HoardFarm Dalamud Plugin https://github.com/Jukkales/HoardFarm diff --git a/HoardFarm/Model/Configuration.cs b/HoardFarm/Model/Configuration.cs index b73951e..3c652b2 100644 --- a/HoardFarm/Model/Configuration.cs +++ b/HoardFarm/Model/Configuration.cs @@ -9,6 +9,7 @@ public class Configuration : IPluginConfiguration public int Version { get; set; } = 1; public int HoardModeSave { get; set; } + public int HoardFarmMode { get; set; } public int StopAfter { get; set; } = 50; public int StopAfterMode { get; set; } = 1; public int OverallRuns { get; set; } diff --git a/HoardFarm/Service/HoardFarmService.cs b/HoardFarm/Service/HoardFarmService.cs index 2298b16..df5e963 100644 --- a/HoardFarm/Service/HoardFarmService.cs +++ b/HoardFarm/Service/HoardFarmService.cs @@ -207,6 +207,11 @@ private void OnTimerUpdate(object? sender, ElapsedEventArgs e) } else { + if (Config.HoardFarmMode == 1) + { + LeaveDuty(); + return; + } if (!hoardFound) { Enqueue(new UsePomanderTask(Pomander.Concealment), "Use Concealment"); @@ -217,24 +222,26 @@ private void OnTimerUpdate(object? sender, ElapsedEventArgs e) if (hoardFound) { - HoardModeStatus = "Leaving"; - SessionRuns++; - Config.OverallRuns++; - Enqueue(new LeaveDutyTask(), "Leave Duty"); + LeaveDuty(); } } else { - HoardModeStatus = "Leaving"; - SessionRuns++; - Config.OverallRuns++; - Enqueue(new LeaveDutyTask(), "Leave Duty"); + LeaveDuty(); } } } } } + private void LeaveDuty() + { + HoardModeStatus = "Leaving"; + SessionRuns++; + Config.OverallRuns++; + Enqueue(new LeaveDutyTask(), "Leave Duty"); + } + private void FindHoardPosition() { if (hoardPosition == Vector3.Zero && diff --git a/HoardFarm/Windows/MainWindow.cs b/HoardFarm/Windows/MainWindow.cs index ed9df55..3bd9dfd 100644 --- a/HoardFarm/Windows/MainWindow.cs +++ b/HoardFarm/Windows/MainWindow.cs @@ -10,7 +10,7 @@ namespace HoardFarm.Windows; -public class MainWindow() : Window("Hoard Farm", ImGuiWindowFlags.AlwaysAutoResize), IDisposable +public class MainWindow() : Window($"Hoard Farm {P.GetType().Assembly.GetName().Version}###HoardFarm", ImGuiWindowFlags.AlwaysAutoResize), IDisposable { private readonly Configuration conf = Config; @@ -56,6 +56,7 @@ public override void Draw() } ImGui.Separator(); + ImGui.BeginGroup(); ImGui.Text("Savegame:"); ImGui.Indent(15); var save = conf.HoardModeSave; @@ -70,6 +71,49 @@ public override void Draw() Config.Save(); } ImGui.Unindent(15); + ImGui.EndGroup(); + + ImGui.SameLine(170); + + ImGui.BeginGroup(); + ImGui.Text("Farm Mode:"); + ImGui.Indent(15); + var farmMode = conf.HoardFarmMode; + if (ImGui.RadioButton("Efficiency", ref farmMode, 0)) + { + conf.HoardFarmMode = farmMode; + Config.Save(); + } + ImGui.SameLine(); + ImGui.PushFont(UiBuilder.IconFont); + ImGui.Text(FontAwesomeIcon.QuestionCircle.ToIconString()); + ImGui.PopFont(); + if (ImGui.IsItemHovered()) + { + ImGui.SetTooltip("Efficiency mode will search and try to find every hoard.\n" + + ">20%% of the hoards are unreachable from start.\n" + + "It will take some seconds to find it.\n" + + "This mode is still recommended."); + } + + if(ImGui.RadioButton("Time", ref farmMode, 1)) + { + conf.HoardFarmMode = farmMode; + Config.Save(); + } + ImGui.SameLine(); + ImGui.PushFont(UiBuilder.IconFont); + ImGui.Text(FontAwesomeIcon.QuestionCircle.ToIconString()); + ImGui.PopFont(); + if (ImGui.IsItemHovered()) + { + ImGui.SetTooltip("Time mode will NOT search for hoards.\n" + + "It instantly leaves if the hoard is unreachable. \n" + + "Faster runs but you will miss a lot of hoards (and a bit safer)"); + } + ImGui.Unindent(15); + ImGui.EndGroup(); + ImGui.Separator(); ImGui.Text("Statistics:");