Update for post-ARR quest battles v4.20
authorLiza Carvelli <liza@carvel.li>
Sat, 22 Feb 2025 23:50:15 +0000 (00:50 +0100)
committerLiza Carvelli <liza@carvel.li>
Sat, 22 Feb 2025 23:54:28 +0000 (00:54 +0100)
Directory.Build.targets
QuestPathGenerator/RoslynElements/SinglePlayerDutyOptionsExtensions.cs
QuestPaths/2.x - A Realm Reborn/MSQ-2/E3-2.3/1460_Brave New Companions.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/E6-2.55/4591_The Steps of Faith.json
QuestPaths/3.x - Heavensward/Class Quests/WAR/586_Duty and the Beast.json
QuestPaths/3.x - Heavensward/MSQ/A2-Raubahn/1601_Keeping the Flame Alive.json
Questionable/Controller/Utils/PartyWatchDog.cs
Questionable/Windows/ConfigComponents/SinglePlayerDutyConfigComponent.cs

index 8071589..028e926 100644 (file)
@@ -1,5 +1,5 @@
 <Project>
     <PropertyGroup Condition="$(MSBuildProjectName) != 'GatheringPathRenderer'">
-        <Version>4.19</Version>
+        <Version>4.20</Version>
     </PropertyGroup>
 </Project>
index 7a54531..d37a85a 100644 (file)
@@ -21,8 +21,7 @@ internal static class SinglePlayerDutyOptionsExtensions
                             Assignment(nameof(SinglePlayerDutyOptions.Enabled),
                                     dutyOptions.Enabled, emptyOptions.Enabled)
                                 .AsSyntaxNodeOrToken(),
-                            Assignment(nameof(SinglePlayerDutyOptions.Notes),
-                                    dutyOptions.Notes, emptyOptions.Notes)
+                            AssignmentList(nameof(SinglePlayerDutyOptions.Notes), dutyOptions.Notes)
                                 .AsSyntaxNodeOrToken(),
                             Assignment(nameof(SinglePlayerDutyOptions.Index),
                                     dutyOptions.Index, emptyOptions.Index)
index d202097..86eb280 100644 (file)
             2
           ]
         },
+        {
+          "Position": {
+            "X": 86.662384,
+            "Y": 28.34813,
+            "Z": -627.5218
+          },
+          "TerritoryId": 156,
+          "InteractionType": "WalkTo",
+          "Fly": true,
+          "SkipConditions": {
+            "StepIf": {
+              "CompletionQuestVariablesFlags": [
+                null,
+                null,
+                null,
+                null,
+                null,
+                32
+              ]
+            }
+          }
+        },
         {
           "DataId": 1009143,
           "Position": {
           },
           "TerritoryId": 156,
           "InteractionType": "Interact",
-          "Fly": true,
           "$": "1 112  0 0  0 2 -> 2 96  0 0  0 34",
           "CompletionQuestVariablesFlags": [
             null,
index eb05bca..90686f3 100644 (file)
             "Z": -328.66406
           },
           "TerritoryId": 155,
-          "InteractionType": "SinglePlayerDuty"
+          "InteractionType": "SinglePlayerDuty",
+          "SinglePlayerDutyOptions": {
+            "Enabled": false,
+            "TestedBossModVersion": 292,
+            "Notes": [
+              "WIP: Needs to be re-tested",
+              "AI doesn't move after starting the instance, so enemies won't be triggered",
+              "(First Barrier) If the player is too far south, after being stunned by Vishap's roar, AI doesn't move out of the AOE and dies to the Cauterize"
+            ]
+          }
         }
       ]
     },
index a883ac6..7112086 100644 (file)
           },
           "TerritoryId": 155,
           "InteractionType": "SinglePlayerDuty",
+          "SinglePlayerDutyOptions": {
+            "Enabled": true,
+            "TestedBossModVersion": 292
+          },
           "Fly": true
         }
       ]
index 2ab1b1a..1fc5d83 100644 (file)
           "InteractionType": "SinglePlayerDuty",
           "SinglePlayerDutyOptions": {
             "Enabled": true,
-            "TestedBossModVersion": 292
+            "TestedBossModVersion": 292,
+            "Notes": [
+              "Will not move into melee range to kill the gate; Alphinaud will kill it after a while"
+            ]
           }
         }
       ]
index 9e7a0cc..c443954 100644 (file)
@@ -81,8 +81,10 @@ internal sealed class PartyWatchDog : IDisposable
                 return;
 
             byte memberCount = groupManager->MainGroup.MemberCount;
-            _logger.LogDebug("Terrritory {TerritoryId} with {MemberCount} members", _uncheckedTeritoryId, memberCount);
-            if (memberCount > 1)
+            bool isInAlliance = groupManager->MainGroup.IsAlliance;
+            _logger.LogDebug("Territory {TerritoryId} with {MemberCount} members, alliance: {IsInAlliance}",
+                _uncheckedTeritoryId, memberCount, isInAlliance);
+            if (memberCount > 1 || isInAlliance)
                 StopIfRunning("Other party members present");
 
             _uncheckedTeritoryId = null;
index 18f7012..c51de1e 100644 (file)
@@ -271,7 +271,7 @@ internal sealed class SinglePlayerDutyConfigComponent : ConfigComponent
                 ImGui.BulletText("Will always use BossMod for combat (ignoring the configured combat module).");
                 ImGui.BulletText("Only a small subset of quest battles have been tested - most of which are in the MSQ.");
                 ImGui.BulletText("When retrying a failed battle, it will always start at 'Normal' difficulty.");
-                ImGui.BulletText("Please don't enable this option when using a BossMod fork (such as Reborn);\nwith the combat changes, it is unlikely to be compatible.");
+                ImGui.BulletText("Please don't enable this option when using a BossMod fork (such as Reborn);\nwith the missing combat module configuration, it is unlikely to be compatible.");
             }
 
 #if false