Hide quest window in all instanced duties by default
authorLiza Carvelli <liza@carvel.li>
Wed, 10 Jul 2024 16:54:04 +0000 (18:54 +0200)
committerLiza Carvelli <liza@carvel.li>
Wed, 10 Jul 2024 16:54:04 +0000 (18:54 +0200)
Questionable/Configuration.cs
Questionable/Data/TerritoryData.cs
Questionable/Windows/ConfigWindow.cs
Questionable/Windows/QuestWindow.cs

index eaef49365cfb3f4796326d054ed15c4c7b0265b5..15a07b8c32183a6eb7809e65256f08693e851ca6 100644 (file)
@@ -17,6 +17,7 @@ internal sealed class Configuration : IPluginConfiguration
         public bool AutoAcceptNextQuest { get; set; }
         public uint MountId { get; set; } = 71;
         public GrandCompany GrandCompany { get; set; } = GrandCompany.None;
+        public bool HideInAllInstances { get; set; } = true;
     }
 
     internal sealed class AdvancedConfiguration
index 7d3fc59e85af4c6665068cfedb427292453c2c60..fc541e778ad37976fc005effde779c55adbb578d 100644 (file)
@@ -10,7 +10,8 @@ namespace Questionable.Data;
 internal sealed class TerritoryData
 {
     private readonly ImmutableDictionary<uint, string> _territoryNames;
-    private readonly ImmutableHashSet<uint> _territoriesWithMount;
+    private readonly ImmutableHashSet<ushort> _territoriesWithMount;
+    private readonly ImmutableHashSet<ushort> _dutyTerritories;
 
     public TerritoryData(IDataManager dataManager)
     {
@@ -27,7 +28,12 @@ internal sealed class TerritoryData
 
         _territoriesWithMount = dataManager.GetExcelSheet<TerritoryType>()!
             .Where(x => x.RowId > 0 && x.Mount)
-            .Select(x => x.RowId)
+            .Select(x => (ushort)x.RowId)
+            .ToImmutableHashSet();
+
+        _dutyTerritories = dataManager.GetExcelSheet<TerritoryType>()!
+            .Where(x => x.RowId > 0 && x.ContentFinderCondition.Row != 0)
+            .Select(x => (ushort)x.RowId)
             .ToImmutableHashSet();
     }
 
@@ -43,4 +49,6 @@ internal sealed class TerritoryData
     }
 
     public bool CanUseMount(ushort territoryId) => _territoriesWithMount.Contains(territoryId);
+
+    public bool IsDutyInstance(ushort territoryId) => _dutyTerritories.Contains(territoryId);
 }
index 48ef339f38fdca2e5e5410a8605f7d320fee51e4..a24b6734e5f00712127daa3342381f9675460a20 100644 (file)
@@ -69,6 +69,13 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig
                     Save();
                 }
 
+                bool hideInAllInstances = _configuration.General.HideInAllInstances;
+                if (ImGui.Checkbox("Hide quest window in all instanced duties", ref hideInAllInstances))
+                {
+                    _configuration.General.HideInAllInstances = hideInAllInstances;
+                    Save();
+                }
+
                 ImGui.EndTabItem();
             }
 
index aef55d0b2645fc1a06c37619bf59abf3eded65e7..17f400849baa930f13d4d9ca48da6fc1bae232cc 100644 (file)
@@ -95,6 +95,9 @@ internal sealed class QuestWindow : LWindow, IPersistableWindowConfig
         if (!_clientState.IsLoggedIn || _clientState.LocalPlayer == null)
             return false;
 
+        if (_configuration.General.HideInAllInstances && _territoryData.IsDutyInstance(_clientState.TerritoryType))
+            return false;
+
         var currentQuest = _questController.CurrentQuest;
         return currentQuest == null || !currentQuest.Quest.Data.TerritoryBlacklist.Contains(_clientState.TerritoryType);
     }