Skip to content

Commit

Permalink
Merge pull request #546 from DeviousCrypto/PvPUIChanges
Browse files Browse the repository at this point in the history
PvP Invincibillity and UI changes
  • Loading branch information
LTS-FFXIV authored Jan 9, 2025
2 parents f6fdf10 + 86c0182 commit 8b39b7f
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 34 deletions.
29 changes: 19 additions & 10 deletions RotationSolver.Basic/Configuration/Configs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ public const string
BasicParams = "BasicParams",
UiInformation = "UiInformation",
UiWindows = "UiWindows",
PvPSpecificControls = "PvPSpecificControls",
AutoActionUsage = "AutoActionUsage",
AutoActionCondition = "AutoActionCondition",
HealingActionCondition = "HealingActionCondition",
TargetConfig = "TargetConfig",
Extra = "Extra",
Expand Down Expand Up @@ -61,10 +61,6 @@ public const string
Filter = BasicAutoSwitch)]
private static readonly bool _autoOffWhenDead = true;

[ConditionBool, UI("Auto turn off when dead in PvP.",
Filter = BasicAutoSwitch)]
private static readonly bool _autoOffWhenDeadPvP = true;

[ConditionBool, UI("Auto turn off when duty completed.",
Filter = BasicAutoSwitch)]
private static readonly bool _autoOffWhenDutyCompleted = true;
Expand Down Expand Up @@ -116,10 +112,6 @@ public const string
Filter = AutoActionUsage)]
private static readonly bool _useMpPotions = false;

[JobConfig, UI("MP threshold under which to use Lucid Dreaming", Filter = AutoActionUsage)]
[Range(0, 10000, ConfigUnitType.None)]
public int LucidDreamingMpThreshold { get; set; } = 6000;

[ConditionBool, UI("Prioritize mob/object targets with attack markers",
Filter = TargetConfig)]
private static readonly bool _chooseAttackMark = true;
Expand Down Expand Up @@ -640,9 +632,26 @@ public const string
PvEFilter = JobFilterType.Tank)]
[Range(1, 8, ConfigUnitType.None, 0.05f)]
public int AutoDefenseNumber { get; set; } = 2;
#endregion

#endregion

#region PvP

[JobConfig, UI("Ignore Invincibility for PvP purposes.", Filter = PvPSpecificControls)]
private readonly bool _ignorePvPInvincibility = false;

[ConditionBool, UI("Auto turn off when dead in PvP.",
Filter = PvPSpecificControls)]
private static readonly bool _autoOffWhenDeadPvP = true;

#endregion

#region Jobs

[JobConfig, UI("MP threshold under which to use Lucid Dreaming", Filter = HealingActionCondition)]
[Range(0, 10000, ConfigUnitType.None)]
private readonly int _lucidDreamingMpThreshold = 6000;

[JobConfig, Range(0, 1, ConfigUnitType.Percent)]
private readonly float _healthAreaAbilityHot = 0.55f;

Expand Down
2 changes: 1 addition & 1 deletion RotationSolver.Basic/Helpers/ObjectHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ internal static bool IsAttackable(this IBattleChara battleChara)

foreach (var status in battleChara.StatusList)
{
if (StatusHelper.IsInvincible(status)) return false;
if (StatusHelper.IsInvincible(status) && (DataCenter.IsPvP && !Service.Config.IgnorePvPInvincibility || !DataCenter.IsPvP)) return false;
}

if (Svc.ClientState == null) return false;
Expand Down
6 changes: 6 additions & 0 deletions RotationSolver.Basic/Rotations/CustomRotation_OtherInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -639,6 +639,12 @@ protected static float GCDTime(uint gcdCount = 0, float offset = 0)
/// </summary>
[Description("Health of dying tank")]
public static float HealthForDyingTanks => Service.Config.HealthForDyingTanks;

/// <summary>
///
/// </summary>
[Description("Whether or not Invincibility should be ignored for a PvP action.")]
public static bool IgnorePvPInvincibility => Service.Config.IgnorePvPInvincibility;
#endregion

/// <summary>
Expand Down
6 changes: 6 additions & 0 deletions RotationSolver/Data/UiString.cs
Original file line number Diff line number Diff line change
Expand Up @@ -681,6 +681,12 @@ internal enum UiString

[Description("Recent Changes:")]
WelcomeWindow_Changelog,

[Description("Reorder AutoStatus Priorities")]
ConfigWindow_Auto_PrioritiesOrganizer,

[Description("PvP Specific Controls")]
ConfigWindow_Auto_PvPSpecific,
}

public static class EnumExtensions
Expand Down
10 changes: 7 additions & 3 deletions RotationSolver/UI/RotationConfigWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -800,9 +800,9 @@ private static void DrawAbout()
_aboutHeaders.Draw();
}

private void DrawAutoStatusOrderConfig()
private static void DrawAutoStatusOrderConfig()
{
ImGui.Text("Reorder AutoStatus Priorities:");
ImGui.Text(UiString.ConfigWindow_Auto_PrioritiesOrganizer.GetDescription());
ImGui.Spacing();

if (ImGui.Button("Reset to Default"))
Expand Down Expand Up @@ -2847,7 +2847,11 @@ private static unsafe void DrawTargetData()
{
var target = Svc.Targets.Target;
if (target == null) return;


ImGui.Text($"Targetting through invuln:{(target.HasStatus(true, StatusID.Guard) && (DataCenter.IsPvP && !Service.Config.IgnorePvPInvincibility || !DataCenter.IsPvP))}");
ImGui.Text($"Guarding: {target.HasStatus(true, StatusID.Guard)}");
ImGui.Text($"IsPvP: {DataCenter.IsPvP}");
ImGui.Text($"IgnorePvPInvincibility: {Service.Config.IgnorePvPInvincibility}");
ImGui.Text($"Height: {target.Struct()->Height}");
ImGui.Text($"Kind: {target.GetObjectKind()}");
ImGui.Text($"SubKind: {target.GetBattleNPCSubKind()}");
Expand Down
48 changes: 29 additions & 19 deletions RotationSolver/UI/RotationConfigWindow_Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ private static void DrawBasic()
_baseHeader?.Draw();
}

private static readonly CollapsingHeaderGroup _baseHeader = new CollapsingHeaderGroup(new()
private static readonly CollapsingHeaderGroup _baseHeader = new CollapsingHeaderGroup(new Dictionary<Func<string>, Action>
{
{ UiString.ConfigWindow_Basic_Timer.GetDescription, DrawBasicTimer },
{ UiString.ConfigWindow_Basic_AutoSwitch.GetDescription, DrawBasicAutoSwitch },
Expand Down Expand Up @@ -110,7 +110,7 @@ private static void DrawBasicTimer()
_allSearchable.DrawItems(Configs.BasicTimer);
}

private static readonly CollapsingHeaderGroup _autoSwitch = new CollapsingHeaderGroup(new()
private static readonly CollapsingHeaderGroup _autoSwitch = new CollapsingHeaderGroup(new Dictionary<Func<string>, Action>
{
{
UiString.ConfigWindow_Basic_SwitchCancelConditionSet.GetDescription,
Expand Down Expand Up @@ -259,7 +259,7 @@ private static void DrawUI()
_UIHeader?.Draw();
}

private static readonly CollapsingHeaderGroup _UIHeader = new CollapsingHeaderGroup(new()
private static readonly CollapsingHeaderGroup _UIHeader = new CollapsingHeaderGroup(new Dictionary<Func<string>, Action>
{
{
UiString.ConfigWindow_UI_Information.GetDescription,
Expand All @@ -282,39 +282,49 @@ private static void DrawUI()
private void DrawAuto()
{
ImGui.TextWrapped(UiString.ConfigWindow_Auto_Description.GetDescription());
DrawAutoStatusOrderConfig();
_autoHeader?.Draw();
}

private static readonly CollapsingHeaderGroup _autoHeader = new(new()
private static readonly CollapsingHeaderGroup _autoHeader = new(new Dictionary<Func<string>, Action>
{
{ UiString.ConfigWindow_Auto_ActionUsage.GetDescription, () =>
{
ImGui.TextWrapped(UiString.ConfigWindow_Auto_ActionUsage_Description.GetDescription());
ImGui.Separator();

_allSearchable.DrawItems(Configs.AutoActionUsage);
}
},
{ UiString.ConfigWindow_Auto_PrioritiesOrganizer.GetDescription, DrawAutoStatusOrderConfig },
{ UiString.ConfigWindow_Auto_ActionUsage.GetDescription, DrawActionUsageControl },
{ UiString.ConfigWindow_Auto_HealingCondition.GetDescription, DrawHealingActionCondition },
{ UiString.ConfigWindow_Auto_PvPSpecific.GetDescription, DrawPvPSpecificControls },
{ UiString.ConfigWindow_Auto_StateCondition.GetDescription, () => _autoState?.Draw() },
})
{
HeaderSize = HeaderSize,
};

private static void DrawPvPSpecificControls()
{
ImGui.TextWrapped(UiString.ConfigWindow_Auto_PvPSpecific.GetDescription());
ImGui.Separator();
_allSearchable.DrawItems(Configs.PvPSpecificControls);
}

/// <summary>
/// Draws the Action Usage and Control section.
/// </summary>
private static void DrawActionUsageControl()
{
ImGui.TextWrapped(UiString.ConfigWindow_Auto_ActionUsage_Description.GetDescription());
ImGui.Separator();
_allSearchable.DrawItems(Configs.AutoActionUsage);
}

/// <summary>
/// Draws the healing action condition section.
/// </summary>
private static void DrawHealingActionCondition()
{
ImGui.TextWrapped(UiString.ConfigWindow_Auto_HealingCondition_Description.GetDescription());
ImGui.Separator();

_allSearchable.DrawItems(Configs.HealingActionCondition);
}

private static readonly CollapsingHeaderGroup _autoState = new(new()
private static readonly CollapsingHeaderGroup _autoState = new(new Dictionary<Func<string>, Action>
{
{
UiString.ConfigWindow_Auto_HealAreaConditionSet.GetDescription,
Expand Down Expand Up @@ -375,8 +385,8 @@ private static void DrawTarget()
/// <summary>
/// Header group for target-related configurations.
/// </summary>
private static readonly CollapsingHeaderGroup _targetHeader = new(new()
{
private static readonly CollapsingHeaderGroup _targetHeader = new(new Dictionary<Func<string>, Action>
{
{ UiString.ConfigWindow_Target_Config.GetDescription, DrawTargetConfig },
{ UiString.ConfigWindow_List_Hostile.GetDescription, DrawTargetHostile },
{ UiString.ConfigWindow_List_TargetPriority.GetDescription, DrawTargetPriority },
Expand Down Expand Up @@ -488,8 +498,8 @@ private static void DrawExtra()
_extraHeader?.Draw();
}

private static readonly CollapsingHeaderGroup _extraHeader = new(new()
{
private static readonly CollapsingHeaderGroup _extraHeader = new(new Dictionary<Func<string>, Action>
{
{ UiString.ConfigWindow_EventItem.GetDescription, DrawEventTab },
{
UiString.ConfigWindow_Extra_Others.GetDescription,
Expand Down
2 changes: 1 addition & 1 deletion RotationSolver/Updaters/TargetUpdater.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ private static List<IBattleChara> GetAllHostileTargets()
{
if (target == null) continue;
if (!target.IsEnemy() || !target.IsTargetable) continue;
if (target.StatusList?.Any(StatusHelper.IsInvincible) == true) continue;
if (target.StatusList?.Any(StatusHelper.IsInvincible) == true && (DataCenter.IsPvP && !Service.Config.IgnorePvPInvincibility || !DataCenter.IsPvP)) continue;
if (target.HasStatus(true, StatusID.StrongOfShield) && strongOfShieldPositional != target.FindEnemyPositional()) continue;

hostileTargets.Add(target);
Expand Down

0 comments on commit 8b39b7f

Please sign in to comment.