Skip to content
This repository has been archived by the owner on Aug 28, 2024. It is now read-only.

Commit

Permalink
fix: add status list for esuna or invinsibility.
Browse files Browse the repository at this point in the history
  • Loading branch information
ArchiDog1998 committed Apr 25, 2023
1 parent 4fe1a02 commit e859822
Show file tree
Hide file tree
Showing 10 changed files with 336 additions and 243 deletions.
33 changes: 33 additions & 0 deletions RotationSolver.Basic/Configuration/PluginConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,39 @@ public class PluginConfiguration : IPluginConfiguration
public bool TargetFriendly = false;
public float AlphaInFill = 0.15f;

public List<uint> DangerousStatus { get; set; } = new List<uint>()
{
(uint)StatusID.Doom,
(uint)StatusID.Amnesia,
(uint)StatusID.Stun,
(uint)StatusID.Stun2,
(uint)StatusID.Sleep,
(uint)StatusID.Sleep2,
(uint)StatusID.Sleep3,
(uint)StatusID.Pacification,
(uint)StatusID.Pacification2,
(uint)StatusID.Silence,
(uint)StatusID.Slow,
(uint)StatusID.Slow2,
(uint)StatusID.Slow3,
(uint)StatusID.Slow4,
(uint)StatusID.Slow5,
(uint)StatusID.Blind,
(uint)StatusID.Blind2,
(uint)StatusID.Blind3,
(uint)StatusID.Paralysis,
(uint)StatusID.Paralysis2,
(uint)StatusID.Nightmare,
(uint)StatusID.Necrosis,
};

public List<uint> InvincibleStatus = new List<uint>()
{
(uint)StatusID.StoneSkin,
(uint)StatusID.IceSpikesInvincible,
(uint)StatusID.VortexBarrier,
};

public Dictionary<ClassJobID, float> HealingOfTimeSubtractSingles { get; set; } = new Dictionary<ClassJobID, float>();

public Dictionary<ClassJobID, float> HealingOfTimeSubtractAreas { get; set; } = new Dictionary<ClassJobID, float>();
Expand Down
37 changes: 2 additions & 35 deletions RotationSolver.Basic/Helpers/StatusHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,51 +145,18 @@ private static IEnumerable<Status> GetAllStatus(this BattleChara obj, bool isFro
|| status.SourceObject?.OwnerId == Service.Player.ObjectId : true);
}

static readonly StatusID[] invincibleStatus = new StatusID[]
{
StatusID.StoneSkin,
StatusID.IceSpikesInvincible,
StatusID.VortexBarrier,
};

public static bool IsInvincible(this Status status)
{
if (status.GameData.Icon == 15024) return true;

return invincibleStatus.Any(id => (uint)id == status.StatusId);
return Service.Config.InvincibleStatus.Any(id => (uint)id == status.StatusId);
}

static readonly StatusID[] dangerousStatus = new StatusID[]
{
StatusID.Doom,
StatusID.Amnesia,
StatusID.Stun,
StatusID.Stun2,
StatusID.Sleep,
StatusID.Sleep2,
StatusID.Sleep3,
StatusID.Pacification,
StatusID.Pacification2,
StatusID.Silence,
StatusID.Slow,
StatusID.Slow2,
StatusID.Slow3,
StatusID.Slow4,
StatusID.Slow5,
StatusID.Blind,
StatusID.Blind2,
StatusID.Blind3,
StatusID.Paralysis,
StatusID.Paralysis2,
StatusID.Nightmare,
StatusID.Necrosis,
};

public static bool IsDangerous(this Status status)
{
if (!status.CanDispel()) return false;
if (status.StackCount > 2) return true;
return dangerousStatus.Any(id => (uint)id == status.StatusId);
return Service.Config.DangerousStatus.Any(id => id == status.StatusId);
}

public static bool CanDispel(this Status status)
Expand Down
14 changes: 12 additions & 2 deletions RotationSolver/ActionSequencer/BaseStatus.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,24 @@ internal class BaseStatus : ITexture
public Status _status;
public uint IconID => _status.Icon;
public StatusID ID => (StatusID)_status.RowId;
public string Name => $"{_status.Name}[{_status.RowId}]";
public string Name => $"{_status.Name} ({_status.RowId})";

public string Description => string.Empty;

public bool IsEnabled { get; set; }

public BaseStatus(StatusID id)
: this((uint)id)
{
_status = Service.GetSheet<Status>().GetRow((uint)id);
}

public BaseStatus(uint id)
: this(Service.GetSheet<Status>().GetRow(id))
{
}

public BaseStatus(Status status)
{
_status = status;
}
}
1 change: 0 additions & 1 deletion RotationSolver/ActionSequencer/ConditionSet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ private void AddOneCondition<T>(string name) where T : ICondition
{
if (ImGui.Selectable(name))
{

Conditions.Add(Activator.CreateInstance<T>());
ImGui.CloseCurrentPopup();
}
Expand Down
2 changes: 1 addition & 1 deletion RotationSolver/ActionSequencer/TargetCondition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace RotationSolver.Timeline;
internal class TargetCondition : ICondition
{
private static BaseStatus[] _allStatus = null;
private static BaseStatus[] AllStatus
public static BaseStatus[] AllStatus
{
get
{
Expand Down
10 changes: 9 additions & 1 deletion RotationSolver/Localization/Strings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ internal partial class Strings
public string ConfigWindow_Header { get; set; } = "Rotation Solver Settings v";
public string ConfigWindow_RotationItem { get; set; } = "Rotation";
public string ConfigWindow_ParamItem { get; set; } = "Param";
public string ConfigWindow_ListItem { get; set; } = "List";
public string ConfigWindow_EventItem { get; set; } = "Event";
public string ConfigWindow_ActionItem { get; set; } = "Action";
public string ConfigWindow_ControlItem { get; set; } = "Control";
Expand Down Expand Up @@ -237,7 +238,7 @@ internal partial class Strings
public string ConfigWindow_Param_RaiseBrinkOfDeath { get; set; } = "Raise player even has Brink of Death";
public string ConfigWindow_Param_MoveAreaActionFarthest { get; set; } = "Moving Area Ability to farthest";
public string ConfigWindow_Param_MoveAreaActionFarthestDesc { get; set; } = "Move to the furthest position from character's face direction.";
public string ConfigWindow_Param_Hostile { get; set; } = "Hostile";

public string ConfigWindow_Param_HostileDesc { get; set; } = "You can set the logic of hostile target selection to allow flexibility in switching the logic of selecting hostile in battle.";
public string ConfigWindow_Param_AddHostileCondition { get; set; } = "Add selection condition";
public string ConfigWindow_Param_HostileCondition { get; set; } = "Hostile target selection condition";
Expand Down Expand Up @@ -280,6 +281,13 @@ internal partial class Strings

public string ConfigWindow_Rotation_InvalidRotation { get; set; } = "Invalid Rotation! \nPlease update to the latest version or contact to the {0}!";
public string ConfigWindow_Rotation_ResetToDefault { get; set; } = "Click to reset the rotation configuration to default!";

public string ConfigWindow_List_Description { get; set; } = "In this window, you can set the parameters about some list things.";
public string ConfigWindow_List_Hostile { get; set; } = "Hostile";

public string ConfigWindow_List_Invinsibility { get; set; } = "Invincibility";
public string ConfigWindow_List_DangerousStatus { get; set; } = "Dangerous Status";

#endregion

#region ScriptWindow
Expand Down
1 change: 0 additions & 1 deletion RotationSolver/UI/ImGuiHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,6 @@ internal static void SearchCombo<T>(string popId, string name, ref string search
if (ImGui.BeginCombo(popId, name, ImGuiComboFlags.HeightLargest))
{
SearchItems(ref searchTxt, actions, selectAction);

ImGui.EndCombo();
}
}
Expand Down
124 changes: 124 additions & 0 deletions RotationSolver/UI/RotationConfigWindow_List.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
using Lumina.Excel.GeneratedSheets;
using RotationSolver.Localization;
using RotationSolver.Timeline;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RotationSolver.UI;

internal partial class RotationConfigWindow
{
private static BaseStatus[] _allStatus = null;
public static BaseStatus[] AllStatus
{
get
{
if (_allStatus == null)
{
_allStatus = Service.GetSheet<Status>()
.Where(s => s.CanDispel)
.Select(s => new BaseStatus(s))
.ToArray();
}
return _allStatus;
}
}

private void DrawListTab()
{
ImGui.TextWrapped(LocalizationManager.RightLang.ConfigWindow_List_Description);

ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new Vector2(0f, 5f));

if (ImGui.BeginTabBar("List Items"))
{
DrawParamTabItem(LocalizationManager.RightLang.ConfigWindow_List_Hostile, DrawParamHostile);

DrawParamTabItem(LocalizationManager.RightLang.ConfigWindow_List_Invinsibility, DrawInvinsibility);

DrawParamTabItem(LocalizationManager.RightLang.ConfigWindow_List_DangerousStatus, DrawDangerousStatus);

ImGui.EndTabBar();
}
ImGui.PopStyleVar();
}

private void DrawParamHostile()
{
if (ImGui.Button(LocalizationManager.RightLang.ConfigWindow_Param_AddHostileCondition))
{
Service.Config.TargetingTypes.Add(TargetingType.Big);
}
ImGui.SameLine();
ImGuiHelper.Spacing();
ImGui.TextWrapped(LocalizationManager.RightLang.ConfigWindow_Param_HostileDesc);

for (int i = 0; i < Service.Config.TargetingTypes.Count; i++)
{
ImGui.Separator();

var names = Enum.GetNames(typeof(TargetingType));
var targingType = (int)Service.Config.TargetingTypes[i];
if (ImGui.Combo(LocalizationManager.RightLang.ConfigWindow_Param_HostileCondition + "##HostileCondition" + i.ToString(), ref targingType, names, names.Length))
{
Service.Config.TargetingTypes[i] = (TargetingType)targingType;
Service.Config.Save();
}

if (ImGui.Button(LocalizationManager.RightLang.ConfigWindow_Param_ConditionUp + "##HostileUp" + i.ToString()))
{
if (i != 0)
{
var value = Service.Config.TargetingTypes[i];
Service.Config.TargetingTypes.RemoveAt(i);
Service.Config.TargetingTypes.Insert(i - 1, value);
}
}
ImGui.SameLine();
ImGuiHelper.Spacing();
if (ImGui.Button(LocalizationManager.RightLang.ConfigWindow_Param_ConditionDown + "##HostileDown" + i.ToString()))
{
if (i < Service.Config.TargetingTypes.Count - 1)
{
var value = Service.Config.TargetingTypes[i];
Service.Config.TargetingTypes.RemoveAt(i);
Service.Config.TargetingTypes.Insert(i + 1, value);
}
}

ImGui.SameLine();
ImGuiHelper.Spacing();

if (ImGui.Button(LocalizationManager.RightLang.ConfigWindow_Param_ConditionDelete + "##HostileDelete" + i.ToString()))
{
Service.Config.TargetingTypes.RemoveAt(i);
}
}
}

private void DrawDangerousStatus()
{
if (ImGuiHelper.IconButton(FontAwesomeIcon.Plus, "AddDangerousStatus"))
{
Service.Config.DangerousStatus.Add(0);
}

for (int i = 0; i < Service.Config.DangerousStatus.Count; i++)
{
//ImGuiHelper.SearchCombo()
}
}

private void DrawInvinsibility()
{
if (ImGuiHelper.IconButton(FontAwesomeIcon.Plus, "AddInvinsibilityStatus"))
{
Service.Config.InvincibleStatus.Add(0);
}

TargetCondition.AllStatus;
}
}
Loading

0 comments on commit e859822

Please sign in to comment.