using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Runtime.CompilerServices; using System.Text; using Dalamud.Game.ClientState.Conditions; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using LLib.Gear; using LLib.Inventory; using Microsoft.Extensions.Logging; using Questionable.Controller.Steps.Common; using Questionable.Data; using Questionable.Functions; using Questionable.Model; using Questionable.Model.Questing; namespace Questionable.Controller.Steps.Shared; internal static class RedeemRewardItems { internal sealed class Factory(QuestData questData, Configuration configuration) : ITaskFactory { public unsafe IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { int num = ((_206E_200D_206F_206B_200C_206D_200B_200F_206C_206E_200F_200E_200D_200C_202D_200F_202B_206B_206C_202A_200B_200E_206B_206F_202D_200F_202A_200F_202B_202E_206A_206E_200B_206D_206D_200F_202C_206B_206F_206A_202E(step) == EInteractionType.AcceptQuest) ? 1072934724 : 1072934722); List list = default(List); InventoryManager* ptr = default(InventoryManager*); ItemReward current = default(ItemReward); while (true) { int num2 = num; int num3 = 1072934726; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 2: list = new List(); ptr = InventoryManager.Instance(); num = ((ptr != null) ? 1072934727 : 1072934725); break; case 3: return list; case 0: num = 1072934722; break; case 4: return Array.Empty(); case 1: { bool hasFreeInventorySlot = _202C_200B_206C_200F_206B_202C_202B_202D_206B_202A_202B_206A_202E_200D_206C_206C_206C_200E_206A_200E_206E_206D_202A_206E_202B_206D_206E_200E_206B_206E_202E_202D_206C_206B_202D_202B_202C_202A_202A_206D_202E(); using (ImmutableHashSet.Enumerator enumerator = questData.RedeemableItems.GetEnumerator()) { num = -498843277; while (true) { int num7 = num; num3 = -498843280; num4 = num7; int num8 = num4 + num3; int num9 = num4 & num3; switch (num8 - (num9 + num9)) { case 6: num = -498843277; break; case 0: list.Add(new Task(current)); num = -498843277; break; case 1: current = enumerator.Current; num = ((ptr->GetInventoryItemCount(current.ItemId, isHq: false, checkEquipped: true, checkArmory: true, 0) == 0) ? (-498843277) : (-498843278)); break; case 3: num = (enumerator.MoveNext() ? (-498843279) : (-498843276)); break; case 2: num = (current.IsUnlocked() ? (-498843277) : (-498843275)); break; case 5: num = ((!PassesRedemptionFilters(current.Type, current.IsUntradable, configuration.General, hasFreeInventorySlot)) ? (-498843277) : (-498843280)); break; case 4: goto end_IL_00be; } continue; end_IL_00be: break; } } num = ((list.Count <= 0) ? 1531306428 : 1531306429); while (true) { int num10 = num; num3 = 1531306428; num4 = num10; switch ((num4 | num3) - (num4 & num3)) { case 2: num = 1531306429; break; case 0: return list; case 1: list.Insert(0, new Mount.UnmountTask()); num = 1531306428; break; } } } } } } IEnumerable ITaskFactory.CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { //ILSpy generated this explicit interface implementation from .override directive in CreateAllTasks return this.CreateAllTasks(quest, sequence, step); } static EInteractionType _206E_200D_206F_206B_200C_206D_200B_200F_206C_206E_200F_200E_200D_200C_202D_200F_202B_206B_206C_202A_200B_200E_206B_206F_202D_200F_202A_200F_202B_202E_206A_206E_200B_206D_206D_200F_202C_206B_206F_206A_202E(QuestStep P_0) { return P_0.InteractionType; } static bool _202C_200B_206C_200F_206B_202C_202B_202D_206B_202A_202B_206A_202E_200D_206C_206C_206C_200E_206A_200E_206E_206D_202A_206E_202B_206D_206E_200E_206B_206E_202E_202D_206C_206B_202D_202B_202C_202A_202A_206D_202E() { return InventoryHelper.HasFreeInventorySlot(); } } internal sealed record Task(ItemReward ItemReward) : ITask { [CompilerGenerated] private Type EqualityContract { [CompilerGenerated] get { return _202C_200B_202B_202B_202A_202D_202B_206D_200E_202D_202B_200B_202A_202C_202D_202C_200E_200F_206C_202A_206C_206E_202E_202E_200F_206F_200F_202E_200C_200F_200B_202A_206A_206D_202A_206C_202D_200B_206D_200E_202E(typeof(Task).TypeHandle); } } public int OriginalGearsetIndex { get; set; } = -1; [MethodImpl(MethodImplOptions.NoInlining)] public override string ToString() { return _202C_202E_200D_206C_200B_206E_200D_206A_200F_206D_206B_202D_200F_202D_200C_200C_202A_200F_202C_206C_200C_206E_202B_206B_200E_202A_200D_202A_200E_206A_202D_202B_206D_200C_206C_202E_200B_202B_202D_206B_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(483102337), ItemReward.Name, 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(444206578)); } [MethodImpl(MethodImplOptions.NoInlining)] [CompilerGenerated] private bool PrintMembers(StringBuilder builder) { _202D_202A_206E_202A_200D_206E_206E_202D_202A_202E_202E_206D_206F_206B_206C_206A_206E_202C_202D_200F_202D_202C_200F_200B_202E_206B_200E_206B_202A_202B_202D_202D_200F_206C_202D_206D_206B_206F_200C_200F_202E(); _202A_200F_200D_206A_206F_206F_206E_206B_202E_202D_202D_206F_200D_206C_202A_200C_206F_202B_200D_202A_202E_206B_200F_206A_206B_200E_206D_200B_206C_202C_206B_202C_200B_206F_202A_206C_202B_200C_202C_200C_202E(builder, 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(-1880324983)); _206F_202D_200E_202D_206C_200C_200D_206E_202E_202A_202E_202C_200F_202A_206D_202D_202E_206C_200F_202C_200C_202C_200D_202D_200B_206D_200D_202E_206D_202C_206A_200E_200C_202A_206D_206F_206B_200D_200B_202C_202E(builder, (object)ItemReward); _202A_200F_200D_206A_206F_206F_206E_206B_202E_202D_202D_206F_200D_206C_202A_200C_206F_202B_200D_202A_202E_206B_200F_206A_206B_200E_206D_200B_206C_202C_206B_202C_200B_206F_202A_206C_202B_200C_202C_200C_202E(builder, 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(-108687495)); _202A_200F_200D_206A_206F_206F_206E_206B_202E_202D_202D_206F_200D_206C_202A_200C_206F_202B_200D_202A_202E_206B_200F_206A_206B_200E_206D_200B_206C_202C_206B_202C_200B_206F_202A_206C_202B_200C_202C_200C_202E(builder, OriginalGearsetIndex.ToString()); return true; } [CompilerGenerated] public bool Equals(Task? other) { int num = (((object)this == other) ? (-2065789578) : (-2065789582)); while (true) { int num2 = num; int num3 = -2065789584; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 5: num = ((!EqualityComparer.Default.Equals(ItemReward, other.ItemReward)) ? (-2065789584) : (-2065789580)); break; case 2: num = (((object)other == null) ? (-2065789584) : (-2065789583)); break; case 1: num = ((!_206A_206E_206A_202A_202A_206B_202C_200D_202E_200E_200E_200C_206D_206B_206F_202B_206E_202B_202D_202C_206A_202B_200F_200F_206E_206E_200C_202A_202B_206E_202D_206C_200D_206F_206A_202B_200D_200F_200E_200D_202E(EqualityContract, other.EqualityContract)) ? (-2065789584) : (-2065789579)); break; case 3: num = -2065789582; break; case 6: return true; case 4: return EqualityComparer.Default.Equals(OriginalGearsetIndex, other.OriginalGearsetIndex); case 0: return false; } } } bool IEquatable.Equals(Task? other) { //ILSpy generated this explicit interface implementation from .override directive in Equals return this.Equals(other); } static Type _202C_200B_202B_202B_202A_202D_202B_206D_200E_202D_202B_200B_202A_202C_202D_202C_200E_200F_206C_202A_206C_206E_202E_202E_200F_206F_200F_202E_200C_200F_200B_202A_206A_206D_202A_206C_202D_200B_206D_200E_202E(RuntimeTypeHandle P_0) { return Type.GetTypeFromHandle(P_0); } static string _202C_202E_200D_206C_200B_206E_200D_206A_200F_206D_206B_202D_200F_202D_200C_200C_202A_200F_202C_206C_200C_206E_202B_206B_200E_202A_200D_202A_200E_206A_202D_202B_206D_200C_206C_202E_200B_202B_202D_206B_202E(string P_0, string P_1, string P_2) { return P_0 + P_1 + P_2; } static void _202D_202A_206E_202A_200D_206E_206E_202D_202A_202E_202E_206D_206F_206B_206C_206A_206E_202C_202D_200F_202D_202C_200F_200B_202E_206B_200E_206B_202A_202B_202D_202D_200F_206C_202D_206D_206B_206F_200C_200F_202E() { RuntimeHelpers.EnsureSufficientExecutionStack(); } static StringBuilder _202A_200F_200D_206A_206F_206F_206E_206B_202E_202D_202D_206F_200D_206C_202A_200C_206F_202B_200D_202A_202E_206B_200F_206A_206B_200E_206D_200B_206C_202C_206B_202C_200B_206F_202A_206C_202B_200C_202C_200C_202E(StringBuilder P_0, string P_1) { return P_0.Append(P_1); } static StringBuilder _206F_202D_200E_202D_206C_200C_200D_206E_202E_202A_202E_202C_200F_202A_206D_202D_202E_206C_200F_202C_200C_202C_200D_202D_200B_206D_200D_202E_206D_202C_206A_200E_200C_202A_206D_206F_206B_200D_200B_202C_202E(StringBuilder P_0, object P_1) { return P_0.Append(P_1); } static bool _206A_206E_206A_202A_202A_206B_202C_200D_202E_200E_200E_200C_206D_206B_206F_202B_206E_202B_202D_202C_206A_202B_200F_200F_206E_206E_200C_202A_202B_206E_202D_206C_200D_206F_206A_202B_200D_200F_200E_200D_202E(Type P_0, Type P_1) { return P_0 == P_1; } } internal sealed class Executor(GameFunctions gameFunctions, Configuration configuration, ICondition condition, ILogger logger) : TaskExecutor(), IStoppableTaskExecutor, ITaskExecutor { private static readonly TimeSpan MinimumCastTime = TimeSpan.FromSeconds(4L); private const long GearsetSettleDelayMs = 1000L; private const long UseItemRetryDelayMs = 1000L; private const int MaxUseItemAttempts = 5; private long _useItemAt; private long _continueAt; private int _useItemAttempts; private bool _itemUsed; protected override bool Start() { int num = ((!_202A_202A_206C_206F_202D_206F_206B_206D_206F_202C_206A_200B_200B_202A_200C_200B_206A_200E_202C_206C_200D_206A_202E_202E_206A_206C_200D_202C_202A_206B_202B_200C_206E_200B_200F_200F_206D_202B_200B_206C_202E(condition, ConditionFlag.Mounted)) ? (-129962614) : (-129962617)); long num9 = default(long); int? cofferGearsetIndex = default(int?); int valueOrDefault = default(int); int num7 = default(int); while (true) { int num2 = num; int num3 = -129962609; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 9: return false; case 7: return true; case 5: num9 = (_useItemAt = _206B_202E_206A_206A_202E_206B_200C_202C_200D_206F_200E_202E_206E_206F_200D_202C_202E_202C_206F_202C_202E_200F_200B_200D_200C_206D_200D_202D_206D_206F_200F_202E_200D_206C_202D_200F_200F_200E_206F_206D_202E()); num = ((!(base.Task.ItemReward is CofferReward)) ? (-129962616) : (-129962611)); break; case 2: cofferGearsetIndex = configuration.General.CofferGearsetIndex; num = ((!cofferGearsetIndex.HasValue) ? (-129962616) : (-129962615)); break; case 6: valueOrDefault = cofferGearsetIndex.GetValueOrDefault(); num = ((base.Task.OriginalGearsetIndex >= 0) ? (-129962619) : (-129962620)); break; case 10: num = ((_206A_206F_206D_202E_202B_206D_202E_206C_206C_206A_206A_200E_202E_200C_206C_206E_202A_200C_200C_200E_202E_200F_200F_206D_200D_206D_202B_206B_206C_206C_200D_202A_206C_200C_206D_202E_200D_202C_202C_206A_202E() == valueOrDefault) ? (-129962616) : (-129962610)); break; case 11: num7 = _206A_206F_206D_202E_202B_206D_202E_206C_206C_206A_206A_200E_202E_200C_206C_206E_202A_200C_200C_200E_202E_200F_200F_206D_200D_206D_202B_206B_206C_206C_200D_202A_206C_200C_206D_202E_200D_202C_202C_206A_202E(); num = ((num7 == valueOrDefault) ? (-129962616) : (-129962609)); break; case 8: num = ((base.Task.OriginalGearsetIndex >= 0) ? (-129962614) : (-129962618)); break; case 0: num = ((!_206F_202E_200E_200E_206E_202E_200D_202B_200B_200C_200B_200F_202D_206D_200E_200B_202B_202C_206A_200C_202A_200E_202A_206C_200C_202D_200F_206B_202E_200C_202B_202A_202A_202C_206E_200B_206F_202D_206C_200D_202E(valueOrDefault)) ? (-129962616) : (-129962613)); break; case 1: { _206F_202E_200E_200E_206E_202E_200D_202B_200B_200C_200B_200F_202D_206D_200E_200B_202B_202C_206A_200C_202A_200E_202A_206C_200C_202D_200F_206B_202E_200C_202B_202A_202A_202C_206E_200B_206F_202D_206C_200D_202E(valueOrDefault); long num12 = num9; long num10 = 1000L; long num11 = num12; long num13 = num11 ^ num10; long num14 = num11 & num10; _useItemAt = num13 + (num14 + num14); num = -129962616; break; } case 3: num = -129962617; break; case 4: { base.Task.OriginalGearsetIndex = num7; long num8 = num9; long num10 = 1000L; long num11 = num8; _useItemAt = (num11 | num10) + (num11 & num10); num = -129962616; break; } } } } [MethodImpl(MethodImplOptions.NoInlining)] public override ETaskResult Update() { long num = _206B_202E_206A_206A_202E_206B_200C_202C_200D_206F_200E_202E_206E_206F_200D_202C_202E_202C_206F_202C_202E_200F_200B_200D_200C_206D_200D_202D_206D_206F_200F_202E_200D_206C_202D_200F_200F_200E_206F_206D_202E(); int num2 = (_itemUsed ? (-1961745235) : (-1961745230)); TimeSpan timeSpan = default(TimeSpan); while (true) { int num3 = num2; int num4 = -1961745219; int num5 = num3; switch ((num5 | num4) - (num5 & num4)) { case 8: RestoreGearset(); return ETaskResult.TaskComplete; case 17: { int useItemAttempts = _useItemAttempts; num4 = 1; num5 = useItemAttempts; _useItemAttempts = (num5 | num4) + (num5 & num4); num2 = ((_useItemAttempts < 5) ? (-1961745218) : (-1961745221)); break; } case 6: _200D_206F_202C_202C_200E_200F_206C_200F_200C_202A_202E_200B_200E_206F_200B_206A_200C_202E_200D_206B_202A_206F_202E_202A_206A_206D_202C_202D_202B_202E_202A_206D_206E_202B_200B_202A_206F_202B_202E_202D_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(-96595266), new object[2] { base.Task.ItemReward.Name, _useItemAttempts }); RestoreGearset(); return ETaskResult.TaskComplete; case 15: num2 = ((num >= _useItemAt) ? (-1961745220) : (-1961745225)); break; case 11: _itemUsed = true; timeSpan = base.Task.ItemReward.CastTime; num2 = ((!(timeSpan < MinimumCastTime)) ? (-1961745232) : (-1961745217)); break; case 14: return ETaskResult.StillRunning; case 10: return ETaskResult.StillRunning; case 12: return ETaskResult.StillRunning; case 4: num2 = -1961745230; break; case 7: num2 = ((!gameFunctions.UseItem(base.Task.ItemReward.ItemId)) ? (-1961745236) : (-1961745226)); break; case 0: num2 = (HasItemInInventory(base.Task.ItemReward.ItemId) ? (-1961745222) : (-1961745228)); break; case 9: RestoreGearset(); return ETaskResult.TaskComplete; case 16: num2 = ((!_202A_202A_206C_206F_202D_206F_206B_206D_206F_202C_206A_200B_200B_202A_200C_200B_206A_200E_202C_206C_200D_206A_202E_202E_206A_206C_200D_202C_202A_206B_202B_200C_206E_200B_200F_200F_206D_202B_200B_206C_202E(condition, ConditionFlag.Casting)) ? (-1961745224) : (-1961745229)); break; case 5: num2 = ((num > _continueAt) ? (-1961745227) : (-1961745231)); break; case 1: num2 = (base.Task.ItemReward.IsUnlocked() ? (-1961745228) : (-1961745219)); break; case 3: { long num6 = 1000L; long num7 = num; _useItemAt = (num7 | num6) + (num7 & num6); return ETaskResult.StillRunning; } case 13: { long num6 = (long)timeSpan.TotalMilliseconds; long num7 = num; long num8 = (num7 | num6) + (num7 & num6); num6 = 3000L; num7 = num8; _continueAt = (num7 | num6) + (num7 & num6); return ETaskResult.StillRunning; } case 2: timeSpan = MinimumCastTime; num2 = -1961745232; break; } } } public void StopNow() { RestoreGearset(); } void IStoppableTaskExecutor.StopNow() { //ILSpy generated this explicit interface implementation from .override directive in StopNow this.StopNow(); } private void RestoreGearset() { int num = ((base.Task.OriginalGearsetIndex < 0) ? (-1242962810) : (-1242962812)); while (true) { int num2 = num; int num3 = -1242962809; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 0: num = -1242962812; break; case 2: base.Task.OriginalGearsetIndex = -1; num = -1242962810; break; case 1: return; case 3: num = ((!_206F_202E_200E_200E_206E_202E_200D_202B_200B_200C_200B_200F_202D_206D_200E_200B_202B_202C_206A_200C_202A_200E_202A_206C_200C_202D_200F_206B_202E_200C_202B_202A_202A_202C_206E_200B_206F_202D_206C_200D_202E(base.Task.OriginalGearsetIndex)) ? (-1242962810) : (-1242962811)); break; } } } private unsafe static bool HasItemInInventory(uint itemId) { InventoryManager* ptr = InventoryManager.Instance(); int num = ((ptr == null) ? 1562440275 : 1562440272); while (true) { int num2 = num; int num3 = 1562440274; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: goto IL_0049; case 2: return ptr->GetInventoryItemCount(itemId, isHq: false, checkEquipped: true, checkArmory: true, 0) > 0; case 1: return false; } continue; IL_0049: num = 1562440272; } } public override bool ShouldInterruptOnDamage() { return true; } static bool _202A_202A_206C_206F_202D_206F_206B_206D_206F_202C_206A_200B_200B_202A_200C_200B_206A_200E_202C_206C_200D_206A_202E_202E_206A_206C_200D_202C_202A_206B_202B_200C_206E_200B_200F_200F_206D_202B_200B_206C_202E(ICondition P_0, ConditionFlag P_1) { return P_0[P_1]; } static long _206B_202E_206A_206A_202E_206B_200C_202C_200D_206F_200E_202E_206E_206F_200D_202C_202E_202C_206F_202C_202E_200F_200B_200D_200C_206D_200D_202D_206D_206F_200F_202E_200D_206C_202D_200F_200F_200E_206F_206D_202E() { return Environment.TickCount64; } static int _206A_206F_206D_202E_202B_206D_202E_206C_206C_206A_206A_200E_202E_200C_206C_206E_202A_200C_200C_200E_202E_200F_200F_206D_200D_206D_202B_206B_206C_206C_200D_202A_206C_200C_206D_202E_200D_202C_202C_206A_202E() { return GearsetHelper.GetCurrentGearsetIndex(); } static bool _206F_202E_200E_200E_206E_202E_200D_202B_200B_200C_200B_200F_202D_206D_200E_200B_202B_202C_206A_200C_202A_200E_202A_206C_200C_202D_200F_206B_202E_200C_202B_202A_202A_202C_206E_200B_206F_202D_206C_200D_202E(int P_0) { return GearsetHelper.TryEquipGearset(P_0); } static void _200D_206F_202C_202C_200E_200F_206C_200F_200C_202A_202E_200B_200E_206F_200B_206A_200C_202E_200D_206B_202A_206F_202E_202A_206A_206D_202C_202D_202B_202E_202A_206D_206E_202B_200B_202A_206F_202B_202E_202D_202E(ILogger P_0, string P_1, object[] P_2) { P_0.LogWarning(P_1, P_2); } } internal static bool PassesRedemptionFilters(EItemRewardType type, bool isUntradable, Configuration.GeneralConfiguration general, bool hasFreeInventorySlot) { int num = ((!general.DisabledRewardTypes.Contains(type)) ? (-640252002) : (-640252008)); while (true) { int num2 = num; int num3 = -640252003; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 4: num = (hasFreeInventorySlot ? (-640252004) : (-640252006)); break; case 1: return true; case 0: num = (isUntradable ? (-640252011) : (-640252001)); break; case 8: num = ((type != EItemRewardType.Coffer) ? (-640252004) : (-640252007)); break; case 2: return false; case 6: num = -640252008; break; case 3: num = ((!general.SkipTradableRewards) ? (-640252011) : (-640252003)); break; case 5: return false; case 7: return false; } } } }