qstbak/LLib/LLib.GameData/ConditionHelper.cs
2026-08-17 20:29:32 +10:00

84 lines
2.4 KiB
C#

using Dalamud.Game.ClientState.Conditions;
using Dalamud.Plugin.Services;
namespace LLib.GameData;
public static class ConditionHelper
{
public static bool IsBoundByDuty(ICondition condition)
{
if (!condition[ConditionFlag.BoundByDuty] && !condition[ConditionFlag.BoundByDuty56])
{
return condition[ConditionFlag.BoundByDuty95];
}
return true;
}
public static bool IsInCombat(ICondition condition)
{
return condition[ConditionFlag.InCombat];
}
public static bool IsInCutscene(ICondition condition)
{
if (!condition[ConditionFlag.OccupiedInCutSceneEvent] && !condition[ConditionFlag.WatchingCutscene])
{
return condition[ConditionFlag.WatchingCutscene78];
}
return true;
}
public static bool IsBetweenAreas(ICondition condition)
{
if (!condition[ConditionFlag.BetweenAreas])
{
return condition[ConditionFlag.BetweenAreas51];
}
return true;
}
public static bool IsCrafting(ICondition condition)
{
if (!condition[ConditionFlag.Crafting] && !condition[ConditionFlag.PreparingToCraft])
{
return condition[ConditionFlag.ExecutingCraftingAction];
}
return true;
}
public static bool IsGathering(ICondition condition)
{
if (!condition[ConditionFlag.Gathering])
{
return condition[ConditionFlag.ExecutingGatheringAction];
}
return true;
}
public static bool IsOccupied(ICondition condition)
{
if (!condition[ConditionFlag.Occupied] && !condition[ConditionFlag.Occupied30] && !condition[ConditionFlag.Occupied33] && !condition[ConditionFlag.Occupied38])
{
return condition[ConditionFlag.Occupied39];
}
return true;
}
public static bool IsLockedIn(ICondition condition)
{
if (!IsBoundByDuty(condition) && !IsInCutscene(condition) && !IsBetweenAreas(condition) && !IsOccupied(condition) && !condition[ConditionFlag.Unconscious] && !condition[ConditionFlag.Jumping])
{
return condition[ConditionFlag.Jumping61];
}
return true;
}
public static bool IsUnavailable(ICondition condition)
{
if (!IsLockedIn(condition) && !IsCrafting(condition) && !IsGathering(condition) && !condition[ConditionFlag.Mounted] && !condition[ConditionFlag.Mounting] && !condition[ConditionFlag.Mounting71] && !condition[ConditionFlag.ChocoboRacing] && !condition[ConditionFlag.PlayingLordOfVerminion] && !condition[ConditionFlag.Performing] && !condition[ConditionFlag.UsingFashionAccessory])
{
return condition[ConditionFlag.InFlight];
}
return true;
}
}