1
0
Fork 0
forked from aly/qstbak
qstbak/LLib/LLib.GameData/GameStateHelper.cs
2026-08-17 20:27:25 +10:00

470 lines
20 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Runtime.CompilerServices;
using Dalamud.Game.ClientState.Conditions;
using Dalamud.Game.ClientState.Objects.SubKinds;
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Client.Game;
using FFXIVClientStructs.FFXIV.Client.Game.Character;
using FFXIVClientStructs.FFXIV.Component.GUI;
using LLib.GameUI;
using Lumina.Excel.Sheets;
using Microsoft.Extensions.Logging;
namespace LLib.GameData;
public sealed class GameStateHelper
{
private readonly IDataManager _dataManager;
private readonly IClientState _clientState;
private readonly ICondition _condition;
private readonly IObjectTable _objectTable;
private readonly IGameGui _gameGui;
private readonly ILogger<GameStateHelper> _logger;
private readonly ReadOnlyDictionary<uint, uint> _territoryToAetherCurrentCompFlgSet;
public GameStateHelper(IDataManager dataManager, IClientState clientState, ICondition condition, IObjectTable objectTable, IGameGui gameGui, ILogger<GameStateHelper> logger)
{
_dataManager = dataManager;
_clientState = clientState;
_condition = condition;
_objectTable = objectTable;
_gameGui = gameGui;
_logger = logger;
_territoryToAetherCurrentCompFlgSet = (from x in dataManager.GetExcelSheet<TerritoryType>()
where x.RowId != 0
where x.AetherCurrentCompFlgSet.RowId != 0
select x).ToDictionary((TerritoryType x) => x.RowId, (TerritoryType x) => x.AetherCurrentCompFlgSet.RowId).AsReadOnly();
}
public bool IsFlyingUnlocked(uint territoryId)
{
uint value;
int num = ((!_territoryToAetherCurrentCompFlgSet.TryGetValue(territoryId, out value)) ? 403824667 : 403824666);
while (true)
{
int num2 = num;
int num3 = 403824667;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 2:
goto IL_004e;
case 0:
return false;
case 1:
return PlayerStateHelper.IsAetherCurrentZoneComplete(value);
}
continue;
IL_004e:
num = 403824666;
}
}
public bool IsFlyingUnlockedInCurrentZone()
{
return IsFlyingUnlocked(_206E_200D_200F_206A_202B_200B_206B_206B_200E_200D_202A_206A_200D_206F_200E_200E_200E_206D_202A_206E_206C_200F_200D_206A_200D_200F_200E_206D_206E_206B_200E_200F_202E_200E_202C_200C_202A_206E_200F_206E_202E(_clientState));
}
public unsafe ushort? GetMountId()
{
IPlayerCharacter playerCharacter = _200F_206D_206D_202B_202B_200E_200D_200F_200C_202C_200E_202A_200E_202A_206D_202D_206D_200E_202B_200E_202C_202A_200D_206D_202E_202E_202A_202D_206D_206B_206A_202D_202D_200D_202C_206C_206B_200F_202B_202B_202E(_objectTable);
int num = ((playerCharacter != null) ? 1199000575 : 1199000574);
BattleChara* ptr = default(BattleChara*);
while (true)
{
int num2 = num;
int num3 = 1199000570;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 1:
num = ((ptr->Mount.MountId != 0) ? 1199000568 : 1199000569);
break;
case 4:
return null;
case 5:
ptr = (BattleChara*)_202B_206A_206C_202B_206B_202C_202C_206B_206F_206E_206D_206F_202E_200B_206D_202E_206A_206A_206A_200C_206E_200B_206C_200C_200D_206D_202C_206E_206D_202E_200B_202B_206C_202A_202E_206A_202E_206B_202E_202B_202E((IGameObject)playerCharacter);
num = ((ptr == null) ? 1199000569 : 1199000571);
break;
case 3:
return null;
case 2:
return ptr->Mount.MountId;
case 0:
num = 1199000574;
break;
}
}
}
public unsafe bool HasStatusPreventingMount()
{
int num = ((!_202D_206E_206A_206C_206E_202D_200B_200D_200B_202E_200B_206E_200E_200D_200B_200E_202C_206F_206A_206C_202C_202B_200D_206E_202A_202D_202C_202D_200B_200F_200E_206E_200F_206E_206C_202A_206A_202D_202C_202E(_condition, ConditionFlag.Swimming)) ? (-1891317293) : (-1891317282));
IPlayerCharacter playerCharacter = default(IPlayerCharacter);
StatusManager* statusManager = default(StatusManager*);
while (true)
{
int num2 = num;
int num3 = -1891317286;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 8:
return false;
case 4:
num = (IsFlyingUnlockedInCurrentZone() ? (-1891317293) : (-1891317288));
break;
case 7:
{
BattleChara* ptr = (BattleChara*)_202B_206A_206C_202B_206B_202C_202C_206B_206F_206E_206D_206F_202E_200B_206D_202E_206A_206A_206A_200C_206E_200B_206C_200C_200D_206D_202C_206E_206D_202E_200B_202B_206C_202A_202E_206A_202E_206B_202E_202B_202E((IGameObject)playerCharacter);
statusManager = ptr->GetStatusManager();
num = (statusManager->HasStatus(1151u) ? (-1891317287) : (-1891317296));
break;
}
case 5:
num = -1891317282;
break;
case 9:
num = (PlayerStateHelper.IsAnyMountUnlocked() ? (-1891317286) : (-1891317285));
break;
case 10:
num = ((!statusManager->HasStatus(1945u)) ? (-1891317284) : (-1891317287));
break;
case 6:
return HasStatusPreventingMountOrSprint();
case 3:
return true;
case 1:
return true;
case 0:
playerCharacter = _200F_206D_206D_202B_202B_200E_200D_200F_200C_202C_200E_202A_200E_202A_206D_202D_206D_200E_202B_200E_202C_202A_200D_206D_202E_202E_202A_202D_206D_206B_206A_202D_202D_200D_202C_206C_206B_200F_202B_202B_202E(_objectTable);
num = ((playerCharacter != null) ? (-1891317283) : (-1891317294));
break;
case 2:
return true;
}
}
}
public bool HasStatusPreventingSprint()
{
return HasStatusPreventingMountOrSprint();
}
[MethodImpl(MethodImplOptions.NoInlining)]
public unsafe bool Mount(uint preferredMountId = 0u)
{
int num = ((!_202D_206E_206A_206C_206E_202D_200B_200D_200B_202E_200B_206E_200E_200D_200B_200E_202C_206F_206A_206C_202C_202B_200D_206E_202A_202D_202C_202D_200B_200F_200E_206E_200F_206E_206C_202A_206A_202D_202C_202E(_condition, ConditionFlag.Mounted)) ? (-2056897107) : (-2056897108));
while (true)
{
int num2 = num;
int num3 = -2056897114;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 13:
num = -2056897108;
break;
case 9:
num = ((ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 9u, 3758096384uL, checkRecastActive: true, checkCastingActive: true, null) != 0) ? (-2056897118) : (-2056897113));
break;
case 3:
return false;
case 8:
num = ((!PlayerStateHelper.IsMountUnlocked(preferredMountId)) ? (-2056897105) : (-2056897116));
break;
case 4:
return false;
case 7:
_202D_202E_206F_202A_206D_206A_206B_200C_202A_200D_206B_202C_202C_202C_206E_202E_206F_202E_200B_206C_206E_202A_206A_202D_200F_206B_200D_202D_206D_200F_202D_202C_206E_206D_200D_202B_202B_200C_202D_206A_202E((ILogger)_logger, global::_003CModule_003E._206E_202B_206C_202A_202A_200E_202B_202B_206D_200B_200C_206B_200B_206D_202E_202D_206C_202B_200B_206A_202D_206C_202A_200F_202D_200C_200B_200B_200B_200D_202C_206E_206D_202E_200C_206B_206A_206D_202D_202C_202E<string>(-1476715702), new object[1] { preferredMountId });
num = ((!ActionManager.Instance()->UseAction(ActionType.Mount, preferredMountId, 3758096384uL, 0u, ActionManager.UseActionMode.None, 0u, null)) ? (-2056897115) : (-2056897117));
break;
case 6:
_200B_206F_202B_202C_200E_206D_206A_202A_202C_200B_202B_206D_206F_200D_206D_206A_206A_202E_200F_202C_200E_202E_200C_202E_206D_202C_200D_206E_200B_200E_206B_202C_200B_200E_206F_202E_202D_206C_202D_202E((ILogger)_logger, global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E<string>(1773045698), Array.Empty<object>());
return true;
case 10:
return true;
case 1:
_202D_202E_206F_202A_206D_206A_206B_200C_202A_200D_206B_202C_202C_202C_206E_202E_206F_202E_200B_206C_206E_202A_206A_202D_200F_206B_200D_202D_206D_200F_202D_202C_206E_206D_200D_202B_202B_200C_202D_206A_202E((ILogger)_logger, global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E<string>(-1930041306), Array.Empty<object>());
num = ((!ActionManager.Instance()->UseAction(ActionType.GeneralAction, 9u, 3758096384uL, 0u, ActionManager.UseActionMode.None, 0u, null)) ? (-2056897118) : (-2056897120));
break;
case 2:
num = ((ActionManager.Instance()->GetActionStatus(ActionType.Mount, preferredMountId, 3758096384uL, checkRecastActive: true, checkCastingActive: true, null) != 0) ? (-2056897115) : (-2056897119));
break;
case 5:
_200B_206F_202B_202C_200E_206D_206A_202A_202C_200B_202B_206D_206F_200D_206D_206A_206A_202E_200F_202C_200E_202E_200C_202E_206D_202C_200D_206E_200B_200E_206B_202C_200B_200E_206F_202E_202D_206C_202D_202E((ILogger)_logger, global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E<string>(-297265243), new object[1] { preferredMountId });
return true;
case 11:
num = ((!HasStatusPreventingMount()) ? (-2056897114) : (-2056897110));
break;
case 0:
num = ((preferredMountId == 0) ? (-2056897105) : (-2056897106));
break;
case 12:
_202D_202E_206F_202A_206D_206A_206B_200C_202A_200D_206B_202C_202C_202C_206E_202E_206F_202E_200B_206C_206E_202A_206A_202D_200F_206B_200D_202D_206D_200F_202D_202C_206E_206D_200D_202B_202B_200C_202D_206A_202E((ILogger)_logger, global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E<string>(-1799024315), Array.Empty<object>());
return false;
}
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
public unsafe bool Unmount()
{
int num = (_202D_206E_206A_206C_206E_202D_200B_200D_200B_202E_200B_206E_200E_200D_200B_200E_202C_206F_206A_206C_202C_202B_200D_206E_202A_202D_202C_202D_200B_200F_200E_206E_200F_206E_206C_202A_206A_202D_202C_202E(_condition, ConditionFlag.Mounted) ? (-837931161) : (-837931166));
while (true)
{
int num2 = num;
int num3 = -837931167;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 2:
num = -837931166;
break;
case 3:
return true;
case 1:
_202D_202E_206F_202A_206D_206A_206B_200C_202A_200D_206B_202C_202C_202C_206E_202E_206F_202E_200B_206C_206E_202A_206A_202D_200F_206B_200D_202D_206D_200F_202D_202C_206E_206D_200D_202B_202B_200C_202D_206A_202E((ILogger)_logger, global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E<string>(-714588632), Array.Empty<object>());
return false;
case 0:
_202D_202E_206F_202A_206D_206A_206B_200C_202A_200D_206B_202C_202C_202C_206E_202E_206F_202E_200B_206C_206E_202A_206A_202D_200F_206B_200D_202D_206D_200F_202D_202C_206E_206D_200D_202B_202B_200C_202D_206A_202E((ILogger)_logger, global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E<string>(-1741093506), Array.Empty<object>());
num = ((!ActionManager.Instance()->UseAction(ActionType.GeneralAction, 23u, 3758096384uL, 0u, ActionManager.UseActionMode.None, 0u, null)) ? (-837931163) : (-837931164));
break;
case 6:
num = ((ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 23u, 3758096384uL, checkRecastActive: true, checkCastingActive: true, null) == 0) ? (-837931167) : (-837931168));
break;
case 5:
_200B_206F_202B_202C_200E_206D_206A_202A_202C_200B_202B_206D_206F_200D_206D_206A_206A_202E_200F_202C_200E_202E_200C_202E_206D_202C_200D_206E_200B_200E_206B_202C_200B_200E_206F_202E_202D_206C_202D_202E((ILogger)_logger, global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E<string>(-97506348), Array.Empty<object>());
return true;
case 4:
return false;
}
}
}
public unsafe int? GetFreeInventorySlots()
{
InventoryManager* ptr = InventoryManager.Instance();
int num = ((ptr != null) ? (-1831709052) : (-1831709042));
int num7 = default(int);
int num8 = default(int);
InventoryType inventoryType = default(InventoryType);
InventoryContainer* inventoryContainer = default(InventoryContainer*);
InventoryItem* inventorySlot = default(InventoryItem*);
while (true)
{
int num2 = num;
int num3 = -1831709050;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 1:
{
int num10 = num7;
num3 = 1;
num4 = num10;
int num11 = num4 ^ num3;
int num12 = num4 & num3;
num7 = num11 + (num12 + num12);
num = -1831709055;
break;
}
case 7:
{
int num9 = num8;
num3 = 1;
num4 = num9;
num8 = (num4 | num3) + (num4 & num3);
num = -1831709054;
break;
}
case 12:
num = ((inventoryType <= InventoryType.Inventory4) ? (-1831709053) : (-1831709050));
break;
case 11:
num8 = 0;
num = -1831709054;
break;
case 8:
return null;
case 0:
return num7;
case 13:
num = -1831709042;
break;
case 3:
return null;
case 5:
inventoryContainer = ptr->GetInventoryContainer(inventoryType);
num = ((inventoryContainer != null) ? (-1831709043) : (-1831709051));
break;
case 10:
num = ((inventorySlot->ItemId != 0) ? (-1831709055) : (-1831709049));
break;
case 4:
num = ((num8 < inventoryContainer->Size) ? (-1831709056) : (-1831709041));
break;
case 6:
inventorySlot = inventoryContainer->GetInventorySlot(num8);
num = ((inventorySlot == null) ? (-1831709049) : (-1831709044));
break;
case 2:
num7 = 0;
inventoryType = InventoryType.Inventory1;
num = -1831709046;
break;
case 9:
inventoryType++;
num = -1831709046;
break;
}
}
}
public uint GetItemLevel(uint itemId)
{
return _dataManager.GetExcelSheet<Item>().GetRowOrDefault(itemId)?.LevelItem.RowId ?? 0;
}
[MethodImpl(MethodImplOptions.NoInlining)]
public unsafe bool IsLoadingScreenVisible()
{
AtkUnitBase* addonPtr;
int num = ((!_gameGui.TryGetAddonByName<AtkUnitBase>(global::_003CModule_003E._200E_206F_206C_206C_200E_202A_206D_206B_200B_202D_202B_200F_200F_206B_206C_206F_202D_206F_206A_202D_206A_200B_200B_202B_202D_202C_200F_200D_202E_200E_200D_202A_202B_206F_202E_200E_200B_206B_200E_202E_202E<string>(108265439), out addonPtr)) ? (-1210184014) : (-1210184015));
while (true)
{
int num2 = num;
int num3 = -1210184006;
int num4 = num2;
switch ((num4 | num3) - (num4 & num3))
{
case 10:
return true;
case 4:
num = ((!LAddon.IsAddonReady(addonPtr)) ? (-1210184004) : (-1210184003));
break;
case 0:
num = ((!LAddon.IsAddonReady(addonPtr)) ? (-1210184008) : (-1210184013));
break;
case 6:
return false;
case 5:
return true;
case 3:
num = -1210184015;
break;
case 8:
num = ((!_gameGui.TryGetAddonByName<AtkUnitBase>(global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E<string>(-342678724), out addonPtr)) ? (-1210184008) : (-1210184006));
break;
case 9:
num = ((!addonPtr->IsVisible) ? (-1210184008) : (-1210184016));
break;
case 2:
num = ((!_gameGui.TryGetAddonByName<AtkUnitBase>(global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E<string>(190562947), out addonPtr)) ? (-1210184004) : (-1210184002));
break;
case 11:
num = ((!LAddon.IsAddonReady(addonPtr)) ? (-1210184014) : (-1210184005));
break;
case 7:
num = ((!addonPtr->IsVisible) ? (-1210184004) : (-1210184010));
break;
case 12:
return true;
case 1:
num = ((!addonPtr->IsVisible) ? (-1210184014) : (-1210184001));
break;
}
}
}
private unsafe bool HasStatusPreventingMountOrSprint()
{
IPlayerCharacter playerCharacter = _200F_206D_206D_202B_202B_200E_200D_200F_200C_202C_200E_202A_200E_202A_206D_202D_206D_200E_202B_200E_202C_202A_200D_206D_202E_202E_202A_202D_206D_206B_206A_202D_202D_200D_202C_206C_206B_200F_202B_202B_202E(_objectTable);
int num = ((playerCharacter != null) ? 509350324 : 509350327);
StatusManager* statusManager = default(StatusManager*);
while (true)
{
int num2 = num;
int num3 = 509350321;
int num4 = num2;
int num5 = num4 + num3;
int num6 = num4 & num3;
switch (num5 - (num6 + num6))
{
case 0:
num = (statusManager->HasStatus(404u) ? 509350322 : 509350323);
break;
case 1:
return statusManager->HasStatus(2730u);
case 7:
num = (statusManager->HasStatus(2729u) ? 509350322 : 509350320);
break;
case 4:
num = 509350327;
break;
case 6:
return false;
case 2:
num = (statusManager->HasStatus(416u) ? 509350322 : 509350326);
break;
case 5:
{
BattleChara* ptr = (BattleChara*)_202B_206A_206C_202B_206B_202C_202C_206B_206F_206E_206D_206F_202E_200B_206D_202E_206A_206A_206A_200C_206E_200B_206C_200C_200D_206D_202C_206E_206D_202E_200B_202B_206C_202A_202E_206A_202E_206B_202E_202B_202E((IGameObject)playerCharacter);
statusManager = ptr->GetStatusManager();
num = (statusManager->HasStatus(565u) ? 509350322 : 509350321);
break;
}
case 3:
return true;
}
}
}
static uint _206E_200D_200F_206A_202B_200B_206B_206B_200E_200D_202A_206A_200D_206F_200E_200E_200E_206D_202A_206E_206C_200F_200D_206A_200D_200F_200E_206D_206E_206B_200E_200F_202E_200E_202C_200C_202A_206E_200F_206E_202E(IClientState P_0)
{
return P_0.TerritoryType;
}
static IPlayerCharacter _200F_206D_206D_202B_202B_200E_200D_200F_200C_202C_200E_202A_200E_202A_206D_202D_206D_200E_202B_200E_202C_202A_200D_206D_202E_202E_202A_202D_206D_206B_206A_202D_202D_200D_202C_206C_206B_200F_202B_202B_202E(IObjectTable P_0)
{
return P_0.LocalPlayer;
}
static nint _202B_206A_206C_202B_206B_202C_202C_206B_206F_206E_206D_206F_202E_200B_206D_202E_206A_206A_206A_200C_206E_200B_206C_200C_200D_206D_202C_206E_206D_202E_200B_202B_206C_202A_202E_206A_202E_206B_202E_202B_202E(IGameObject P_0)
{
return P_0.Address;
}
static bool _202D_206E_206A_206C_206E_202D_200B_200D_200B_202E_200B_206E_200E_200D_200B_200E_202C_206F_206A_206C_202C_202B_200D_206E_202A_202D_202C_202D_200B_200F_200E_206E_200F_206E_206C_202A_206A_202D_202C_202E(ICondition P_0, ConditionFlag P_1)
{
return P_0[P_1];
}
static void _202D_202E_206F_202A_206D_206A_206B_200C_202A_200D_206B_202C_202C_202C_206E_202E_206F_202E_200B_206C_206E_202A_206A_202D_200F_206B_200D_202D_206D_200F_202D_202C_206E_206D_200D_202B_202B_200C_202D_206A_202E(ILogger P_0, string P_1, object[] P_2)
{
P_0.LogDebug(P_1, P_2);
}
static void _200B_206F_202B_202C_200E_206D_206A_202A_202C_200B_202B_206D_206F_200D_206D_206A_206A_202E_200F_202C_200E_202E_200C_202E_206D_202C_200D_206E_200B_200E_206B_202C_200B_200E_206F_202E_202D_206C_202D_202E(ILogger P_0, string P_1, object[] P_2)
{
P_0.LogInformation(P_1, P_2);
}
}