qstbak/Questionable/Questionable.Controller.Utils/PartyWatchDog.cs
2026-08-17 20:27:25 +10:00

306 lines
14 KiB
C#

using System;
using System.Runtime.CompilerServices;
using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Client.Game;
using FFXIVClientStructs.FFXIV.Client.Game.Group;
using LLib.GameData;
using Microsoft.Extensions.Logging;
using Questionable.Data;
using Questionable.Model.Questing;
namespace Questionable.Controller.Utils;
internal sealed class PartyWatchdog : IDisposable
{
private readonly QuestController _questController;
private readonly Configuration _configuration;
private readonly TerritoryData _territoryData;
private readonly IClientState _clientState;
private readonly IChatGui _chatGui;
private readonly ILogger<PartyWatchdog> _logger;
private uint? _uncheckedTerritoryId;
public PartyWatchdog(QuestController questController, Configuration configuration, TerritoryData territoryData, IClientState clientState, IChatGui chatGui, ILogger<PartyWatchdog> logger)
{
_questController = questController;
_configuration = configuration;
_territoryData = territoryData;
_clientState = clientState;
_chatGui = chatGui;
_logger = logger;
_202E_202B_202C_200E_206F_202C_200D_206C_206A_206D_206D_206B_206C_206C_206B_206E_202D_200C_206B_202A_202C_206B_206C_200E_206E_202E_202D_200D_200D_206B_200C_206E_202A_206D_200C_200B_202D_200E_206D_200C_202E(_clientState, (Action<uint>)TerritoryChanged);
}
[MethodImpl(MethodImplOptions.NoInlining)]
private unsafe void TerritoryChanged(uint newTerritoryId)
{
int num = ((!_configuration.Advanced.DisablePartyWatchdog) ? 546819972 : 546819975);
while (true)
{
int num2 = num;
int num3 = 546819973;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
DefaultInterpolatedStringHandler defaultInterpolatedStringHandler;
switch (num5 - (num6 + num6))
{
case 5:
return;
case 1:
switch ((ETerritoryIntendedUse)GameMain.Instance()->CurrentTerritoryIntendedUseId)
{
case ETerritoryIntendedUse.MordionGaol:
case ETerritoryIntendedUse.Frontline:
case ETerritoryIntendedUse.LordOfVerminion:
case ETerritoryIntendedUse.ExploratoryMissions:
case ETerritoryIntendedUse.CrystallineConflict:
case ETerritoryIntendedUse.DeepDungeon:
case ETerritoryIntendedUse.TreasureMapInstance:
case ETerritoryIntendedUse.TripleTriadBattlehall:
case ETerritoryIntendedUse.CrystallineConflictCustomMatch:
case ETerritoryIntendedUse.DiademHuntingGrounds:
case ETerritoryIntendedUse.RivalWings:
case ETerritoryIntendedUse.Eureka:
case ETerritoryIntendedUse.LeapOfFaith:
case ETerritoryIntendedUse.OceanFishing:
case ETerritoryIntendedUse.Diadem:
case ETerritoryIntendedUse.Bozja:
case ETerritoryIntendedUse.TripleTriadOpenTournament:
case ETerritoryIntendedUse.TripleTriadInvitationalParlor:
case ETerritoryIntendedUse.DelubrumReginae:
case ETerritoryIntendedUse.DelubrumReginaeSavage:
case ETerritoryIntendedUse.Blunderville:
goto IL_0168;
case ETerritoryIntendedUse.Dungeon:
case ETerritoryIntendedUse.VariantDungeon:
case ETerritoryIntendedUse.AllianceRaid:
case ETerritoryIntendedUse.Trial:
case ETerritoryIntendedUse.Raid1:
case ETerritoryIntendedUse.Raid2:
case ETerritoryIntendedUse.Seasonal:
case ETerritoryIntendedUse.TheCalamityRetold:
case ETerritoryIntendedUse.CriterionDungeon:
case ETerritoryIntendedUse.CriterionDungeonSavage:
goto IL_01aa;
case ETerritoryIntendedUse.OpeningArea:
case ETerritoryIntendedUse.BeforeTrialDung:
case ETerritoryIntendedUse.PreEwOverworldQuestBattle:
case ETerritoryIntendedUse.Unknown11:
case ETerritoryIntendedUse.WaitingRoom:
case ETerritoryIntendedUse.HousingOutdoor:
case ETerritoryIntendedUse.HousingIndoor:
case ETerritoryIntendedUse.SoloOverworldInstances:
case ETerritoryIntendedUse.ChocoboSquareOld:
case ETerritoryIntendedUse.ChocoboRacing:
case ETerritoryIntendedUse.Firmament:
case ETerritoryIntendedUse.SanctumOfTheTwelve:
case ETerritoryIntendedUse.GoldSaucer:
case ETerritoryIntendedUse.OriginalStepsOfFaith:
case ETerritoryIntendedUse.HallOfTheNovice:
case ETerritoryIntendedUse.SoloDuty:
case ETerritoryIntendedUse.GrandCompanyBarracks:
case ETerritoryIntendedUse.SeasonalInstancedArea:
case ETerritoryIntendedUse.ChaoticRaid:
case ETerritoryIntendedUse.Unknown40:
case ETerritoryIntendedUse.Unknown42:
case ETerritoryIntendedUse.MaskedCarnival:
case ETerritoryIntendedUse.IslandSanctuary:
case ETerritoryIntendedUse.EndwalkerMsqSoloOverworld:
case ETerritoryIntendedUse.Unknown55:
case ETerritoryIntendedUse.Elysion:
return;
}
num = 546819968;
break;
case 3:
goto IL_0168;
case 6:
goto IL_01aa;
case 2:
return;
case 0:
num = 546819975;
break;
case 4:
return;
IL_01aa:
_uncheckedTerritoryId = newTerritoryId;
_200E_202E_200F_200B_202B_206B_206D_206B_206F_206B_202B_200E_206E_202D_202B_200E_200B_206A_206F_202E_206C_206D_202B_200F_206A_206D_206C_200F_202A_202B_200E_202B_202A_200F_206A_200D_202C_202C_206B_202E((ILogger)_logger, global::_003CModule_003E._200B_206B_206B_200E_200B_206A_206D_206B_206E_200F_206A_206F_206E_202B_200F_206C_202B_206D_206E_200F_200C_200E_206F_200D_200F_200B_202B_202B_202B_202B_206D_202C_206A_206D_200B_206E_200D_206A_206F_200F_202E<string>(-863360954), new object[1] { newTerritoryId });
num = 546819969;
break;
IL_0168:
defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(27, 1);
defaultInterpolatedStringHandler.AppendLiteral(global::_003CModule_003E._202A_206B_206D_200C_206B_200E_200E_202A_200B_202E_206A_206F_206A_206B_200E_200D_200F_206D_206E_206A_206F_200C_206C_202C_202A_206E_202C_200B_206E_202A_206E_202B_206B_202E_202E_206A_206D_206D_202C_200F_202E<string>(-1856891210));
defaultInterpolatedStringHandler.AppendFormatted(newTerritoryId);
defaultInterpolatedStringHandler.AppendLiteral(global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(1735737295));
StopIfRunning(defaultInterpolatedStringHandler.ToStringAndClear());
return;
}
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
public unsafe void Update()
{
int num = ((!_configuration.Advanced.DisablePartyWatchdog) ? 783719390 : 783719389);
GroupManager* ptr = default(GroupManager*);
while (true)
{
int num2 = num;
int num3 = 783719387;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 9:
ptr = GroupManager.Instance();
num = ((ptr != null) ? 783719391 : 783719387);
break;
case 6:
return;
case 10:
_200E_202E_200F_200B_202B_206B_206D_206B_206F_206B_202B_200E_206E_202D_202B_200E_200B_206A_206F_202E_206C_206D_202B_200F_206A_206D_206C_200F_202A_202B_200E_202B_202A_200F_206A_200D_202C_202C_206B_202E((ILogger)_logger, global::_003CModule_003E._202E_206C_200F_206B_206A_202A_202C_206F_200C_206C_202B_206B_206D_206D_206D_202D_206E_202E_206C_206E_206D_202C_206F_200D_202D_202E_206A_206D_202A_206A_202B_200D_200C_206D_202B_200B_200D_200C_206E_206B_202E<string>(-762149952), Array.Empty<object>());
num = 783719379;
break;
case 0:
return;
case 7:
num = ((GameMain.Instance()->TerritoryLoadState != 2) ? 783719385 : 783719378);
break;
case 1:
StopIfRunning(global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(1306739522));
num = 783719379;
break;
case 11:
num = 783719389;
break;
case 3:
num = (IsDutyConfiguredForParty(_uncheckedTerritoryId.Value) ? 783719377 : 783719386);
break;
case 4:
{
byte memberCount = ptr->MainGroup.MemberCount;
bool isAlliance = ptr->MainGroup.IsAlliance;
_200E_202E_200F_200B_202B_206B_206D_206B_206F_206B_202B_200E_206E_202D_202B_200E_200B_206A_206F_202E_206C_206D_202B_200F_206A_206D_206C_200F_202A_202B_200E_202B_202A_200F_206A_200D_202C_202C_206B_202E((ILogger)_logger, global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E<string>(189353374), new object[3] { _uncheckedTerritoryId, memberCount, isAlliance });
bool num5 = memberCount > 1;
num3 = (isAlliance ? 1 : 0);
num4 = (num5 ? 1 : 0);
num = (((num4 & num3) + (num4 ^ num3) == 0) ? 783719379 : 783719384);
break;
}
case 5:
num = ((_uncheckedTerritoryId != _206B_202D_200B_200D_200B_202E_206B_200F_200C_206C_200B_202A_202E_206C_206B_200E_206A_202E_200D_200E_202B_200C_202E_200B_206D_206E_200C_200E_200B_206B_200D_206B_200E_200D_202A_206D_206E_200C_206C_206B_202E(_clientState)) ? 783719385 : 783719388);
break;
case 2:
return;
case 8:
_uncheckedTerritoryId = null;
num = 783719385;
break;
}
}
}
private bool IsDutyConfiguredForParty(uint territoryId)
{
uint cfcId;
int num = (_territoryData.TryGetContentFinderConditionIdForTerritory(territoryId, out cfcId) ? 309783297 : 309783299);
EDutyMode value = default(EDutyMode);
while (true)
{
int num2 = num;
int num3 = 309783298;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 4:
return value == EDutyMode.UnsyncParty;
case 3:
num = ((!_configuration.Duties.DutyModeOverrides.TryGetValue(cfcId, out value)) ? 309783296 : 309783302);
break;
case 2:
return _configuration.Duties.DefaultDutyMode == EDutyMode.UnsyncParty;
case 0:
num = 309783299;
break;
case 1:
return false;
}
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
private void StopIfRunning(string reason)
{
int num = (_questController.IsRunning ? 1851860853 : 1851860852);
while (true)
{
int num2 = num;
int num3 = 1851860854;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 0:
num = 1851860852;
break;
case 2:
num = ((_questController.AutomationType == QuestController.EAutomationType.Manual) ? 1851860855 : 1851860853);
break;
case 3:
_202C_202D_206F_200F_206F_200C_202B_200B_206D_200F_202C_200C_206B_202D_200C_200F_206F_200D_202E_206C_206F_202A_202E_200D_200C_202C_200C_202B_202B_206E_202E_202E_200C_200C_202D_202D_206B_206B_206D_200D_202E(_chatGui, _202E_202A_206C_206D_202C_202A_200B_200E_206B_200C_202A_206E_202B_206A_200D_206B_206D_206F_206F_202A_206C_202E_200D_200F_206E_200D_206B_200D_202C_200E_206F_206C_200D_206C_206B_200B_206C_200B_200E_202A_202E(global::_003CModule_003E._206C_202A_206D_206A_206E_202A_202B_206F_206D_200F_202D_200F_202D_206A_202C_202B_206D_206A_200E_200E_202D_202D_200D_200C_200D_200D_206D_206E_202A_200F_206E_206C_206D_206A_206D_202B_200F_200D_206E_200C_202E<string>(523838362), reason, global::_003CModule_003E._202A_206B_206D_200C_206B_200E_200E_202A_200B_202E_206A_206F_206A_206B_200E_200D_200F_206D_206E_206A_206F_200C_206C_202C_202A_206E_202C_200B_206E_202A_206E_202B_206B_202E_202E_206A_206D_206D_202C_200F_202E<string>(677123386)), global::_003CModule_003E._202A_206B_206D_200C_206B_200E_200E_202A_200B_202E_206A_206F_206A_206B_200E_200D_200F_206D_206E_206A_206F_200C_206C_202C_202A_206E_202C_200B_206E_202A_206E_202B_206B_202E_202E_206A_206D_206D_202C_200F_202E<string>(467221712), (ushort?)(ushort)576);
_questController.Stop(reason);
num = 1851860855;
break;
case 1:
return;
}
}
}
public void Dispose()
{
_200E_206B_206A_200F_202A_200E_206D_202E_206B_206C_202A_206A_206C_200F_206F_206F_206C_206D_206F_200F_206A_206C_206A_206E_202A_202E_206C_206B_202E_206C_200F_206F_200E_202B_202C_202A_200E_206B_206E_202A_202E(_clientState, (Action<uint>)TerritoryChanged);
}
void IDisposable.Dispose()
{
//ILSpy generated this explicit interface implementation from .override directive in Dispose
this.Dispose();
}
static void _202E_202B_202C_200E_206F_202C_200D_206C_206A_206D_206D_206B_206C_206C_206B_206E_202D_200C_206B_202A_202C_206B_206C_200E_206E_202E_202D_200D_200D_206B_200C_206E_202A_206D_200C_200B_202D_200E_206D_200C_202E(IClientState P_0, Action<uint> P_1)
{
P_0.TerritoryChanged += P_1;
}
static void _200E_202E_200F_200B_202B_206B_206D_206B_206F_206B_202B_200E_206E_202D_202B_200E_200B_206A_206F_202E_206C_206D_202B_200F_206A_206D_206C_200F_202A_202B_200E_202B_202A_200F_206A_200D_202C_202C_206B_202E(ILogger P_0, string P_1, object[] P_2)
{
P_0.LogDebug(P_1, P_2);
}
static uint _206B_202D_200B_200D_200B_202E_206B_200F_200C_206C_200B_202A_202E_206C_206B_200E_206A_202E_200D_200E_202B_200C_202E_200B_206D_206E_200C_200E_200B_206B_200D_206B_200E_200D_202A_206D_206E_200C_206C_206B_202E(IClientState P_0)
{
return P_0.TerritoryType;
}
static string _202E_202A_206C_206D_202C_202A_200B_200E_206B_200C_202A_206E_202B_206A_200D_206B_206D_206F_206F_202A_206C_202E_200D_200F_206E_200D_206B_200D_202C_200E_206F_206C_200D_206C_206B_200B_206C_200B_200E_202A_202E(string P_0, string P_1, string P_2)
{
return P_0 + P_1 + P_2;
}
static void _202C_202D_206F_200F_206F_200C_202B_200B_206D_200F_202C_200C_206B_202D_200C_200F_206F_200D_202E_206C_206F_202A_202E_200D_200C_202C_200C_202B_202B_206E_202E_202E_200C_200C_202D_202D_206B_206B_206D_200D_202E(IChatGui P_0, string P_1, string P_2, ushort? P_3)
{
P_0.PrintError(P_1, P_2, P_3);
}
static void _200E_206B_206A_200F_202A_200E_206D_202E_206B_206C_202A_206A_206C_200F_206F_206F_206C_206D_206F_200F_206A_206C_206A_206E_202A_202E_206C_206B_202E_206C_200F_206F_200E_202B_202C_202A_200E_206B_206E_202A_202E(IClientState P_0, Action<uint> P_1)
{
P_0.TerritoryChanged -= P_1;
}
}