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

Commit

Permalink
fix: add an offset option for melee or tank using range action.
Browse files Browse the repository at this point in the history
  • Loading branch information
ArchiDog1998 committed Mar 7, 2023
1 parent 91c3c9e commit 969d958
Show file tree
Hide file tree
Showing 14 changed files with 38 additions and 13 deletions.
4 changes: 2 additions & 2 deletions RotationSolver/Actions/BaseAction/BaseAction_Target.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ private get
set => _choiceTarget = value;
}

internal Func<IEnumerable<BattleChara>, IEnumerable<BattleChara>> FilterForTarget { private get; set; } = null;
internal Func<IEnumerable<BattleChara>, IEnumerable<BattleChara>> FilterForHostiles { private get; set; } = null;

public StatusID[] TargetStatus { get; set; } = null;

Expand Down Expand Up @@ -440,7 +440,7 @@ internal bool CanGetTarget(BattleChara target, BattleChara subTarget)

private IEnumerable<BattleChara> TargetFilterFuncEot(IEnumerable<BattleChara> tars, bool mustUse)
{
if (FilterForTarget != null) return FilterForTarget(tars);
if (FilterForHostiles != null) return FilterForHostiles(tars);
if (TargetStatus == null || !_isEot) return tars;

var dontHave = tars.Where(CheckStatus);
Expand Down
1 change: 1 addition & 0 deletions RotationSolver/Configuration/PluginConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ public class PluginConfiguration : IPluginConfiguration
public bool UseHealWhenNotAHealer = true;
public float ObjectMinRadius = 0f;
public float HealthDifference = 0.25f;
public float MeleeRangeOffset = 1;
public bool TargetFriendly = false;

public Dictionary<ClassJobID, float> HealingOfTimeSubtractSingles { get; set; } = new Dictionary<ClassJobID, float>();
Expand Down
7 changes: 5 additions & 2 deletions RotationSolver/Helpers/TargetFilter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ namespace RotationSolver.Helpers;
internal static class TargetFilter
{
#region Find one target
internal static IEnumerable<BattleChara> MeleeRangeTargetFilter(IEnumerable<BattleChara> availableCharas)
=> availableCharas.Where(t => t.DistanceToPlayer() >= 3 + Service.Configuration.MeleeRangeOffset);
internal static BattleChara DefaultChooseFriend(IEnumerable<BattleChara> availableCharas, bool mustUse)
{
if (availableCharas == null || !availableCharas.Any()) return null;
Expand Down Expand Up @@ -155,6 +157,9 @@ internal static BattleChara FindAttackedTarget(IEnumerable<BattleChara> charas,
return attachedT.OrderBy(ObjectHelper.GetHealthRatio).FirstOrDefault();
}

internal static IEnumerable<BattleChara> TankRangeTarget(IEnumerable<BattleChara> inputCharas)
=> ProvokeTarget(MeleeRangeTargetFilter(inputCharas));

/// <summary>
/// 挑衅目标
/// </summary>
Expand Down Expand Up @@ -344,8 +349,6 @@ internal static IEnumerable<T> GetObjectInRadius<T>(this IEnumerable<T> objects,
return objects.Where(o => o.DistanceToPlayer() <= radius);
}



private static IEnumerable<BattleChara> DefaultTargetingType(IEnumerable<BattleChara> charas)
{
switch (RSCommands.TargetingType)
Expand Down
4 changes: 4 additions & 0 deletions RotationSolver/Localization/Strings_Major.cs
Original file line number Diff line number Diff line change
Expand Up @@ -187,8 +187,12 @@ internal partial class Strings
public string Configwindow_Param_HealingOfTimeSubtractArea { get; set; } = "Set the HP threshold reduce with hot effect(AOE)";
public string Configwindow_Param_HealthSingleAbility { get; set; } = "Set the HP threshold for using single healing ability";
public string Configwindow_Param_HealthSingleSpell { get; set; } = "Set the HP threshold for using single healing spell";


public string Configwindow_Param_HealingOfTimeSubtractSingle { get; set; } = "Set the HP threshold reduce with hot effect(single)";
public string Configwindow_Param_HealthForDyingTank { get; set; } = "Set the HP threshold for tank to use invincibility";

public string Configwindow_Param_MeleeRangeOffset { get; set; } = "Melee Range action using offset";
public string Configwindow_Param_Target { get; set; } = "Target";
public string Configwindow_Param_RightNowTargetToHostileType { get; set; } = "Hostile target filtering condition";
public string Configwindow_Param_TargetToHostileType1 { get; set; } = "All targets can attack";
Expand Down
5 changes: 4 additions & 1 deletion RotationSolver/Rotations/Basic/DRG_Base.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,10 @@ internal abstract class DRG_Base : CustomRotation.CustomRotation
/// <summary>
/// 贯穿尖
/// </summary>
public static IBaseAction PiercingTalon { get; } = new BaseAction(ActionID.PiercingTalon);
public static IBaseAction PiercingTalon { get; } = new BaseAction(ActionID.PiercingTalon)
{
FilterForHostiles = TargetFilter.MeleeRangeTargetFilter,
};

/// <summary>
/// 死天枪
Expand Down
2 changes: 1 addition & 1 deletion RotationSolver/Rotations/Basic/DRK_Base.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ protected static bool DarkSideEndAfterGCD(uint gctCount = 0, uint abilityCount =
/// </summary>
public static IBaseAction Unmend { get; } = new BaseAction(ActionID.Unmend)
{
FilterForTarget = b => TargetFilter.ProvokeTarget(b),
FilterForHostiles = TargetFilter.TankRangeTarget,
};

/// <summary>
Expand Down
5 changes: 4 additions & 1 deletion RotationSolver/Rotations/Basic/GNB_Base.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,10 @@ internal abstract class GNB_Base : CustomRotation.CustomRotation
/// <summary>
/// 闪雷弹
/// </summary>
public static IBaseAction LightningShot { get; } = new BaseAction(ActionID.LightningShot);
public static IBaseAction LightningShot { get; } = new BaseAction(ActionID.LightningShot)
{
FilterForHostiles = TargetFilter.TankRangeTarget,
};

/// <summary>
/// 危险领域
Expand Down
5 changes: 4 additions & 1 deletion RotationSolver/Rotations/Basic/NIN_Base.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,10 @@ internal NinAction(ActionID actionID, params IBaseAction[] ninjutsus)
/// <summary>
/// 飞刀
/// </summary>
public static IBaseAction ThrowingDagger { get; } = new BaseAction(ActionID.ThrowingDagger);
public static IBaseAction ThrowingDagger { get; } = new BaseAction(ActionID.ThrowingDagger)
{
FilterForHostiles = TargetFilter.MeleeRangeTargetFilter,
};

/// <summary>
/// 夺取
Expand Down
2 changes: 1 addition & 1 deletion RotationSolver/Rotations/Basic/PLD_Base.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ internal abstract class PLD_Base : CustomRotation.CustomRotation
/// </summary>
public static IBaseAction ShieldLob { get; } = new BaseAction(ActionID.ShieldLob)
{
FilterForTarget = b => TargetFilter.ProvokeTarget(b),
FilterForHostiles = TargetFilter.TankRangeTarget,
};

/// <summary>
Expand Down
3 changes: 2 additions & 1 deletion RotationSolver/Rotations/Basic/RPR_Base.cs
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,8 @@ internal PRPAction(ActionID actionID, bool isFriendly = false, bool shouldEndSpe
/// </summary>
public static IBaseAction Harpe { get; } = new BaseAction(ActionID.Harpe)
{
ActionCheck = b => !SoulReaver
ActionCheck = b => !SoulReaver,
FilterForHostiles = TargetFilter.MeleeRangeTargetFilter,
};

/// <summary>
Expand Down
5 changes: 4 additions & 1 deletion RotationSolver/Rotations/Basic/SAM_Base.cs
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,10 @@ internal abstract class SAM_Base : CustomRotation.CustomRotation
/// <summary>
/// 燕飞
/// </summary>
public static IBaseAction Enpi { get; } = new BaseAction(ActionID.Enpi);
public static IBaseAction Enpi { get; } = new BaseAction(ActionID.Enpi)
{
FilterForHostiles = TargetFilter.MeleeRangeTargetFilter,
};

/// <summary>
/// 明镜止水
Expand Down
2 changes: 1 addition & 1 deletion RotationSolver/Rotations/Basic/WAR_Base.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ internal abstract class WAR_Base : CustomRotation.CustomRotation
/// </summary>
public static IBaseAction Tomahawk { get; } = new BaseAction(ActionID.Tomahawk)
{
FilterForTarget = b => TargetFilter.ProvokeTarget(b),
FilterForHostiles = TargetFilter.TankRangeTarget,
};

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ internal RoleAction(ActionID actionID, JobRole[] roles, bool isFriendly = false,
/// </summary>
public static IBaseAction Provoke { get; } = new RoleAction(ActionID.Provoke, new JobRole[] { JobRole.Tank }, isTimeline: true)
{
FilterForTarget = b => TargetFilter.ProvokeTarget(b),
FilterForHostiles = b => TargetFilter.ProvokeTarget(b),
};

/// <summary>
Expand Down
4 changes: 4 additions & 0 deletions RotationSolver/Windows/RotationConfigWindow_Param.cs
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,10 @@ private void DrawParamCondition()
ref Service.Configuration.HealOutOfCombat);

const float speed = 0.005f;

DrawFloatNumber(LocalizationManager.RightLang.Configwindow_Param_MeleeRangeOffset,
ref Service.Configuration.MeleeRangeOffset, 5 * speed, max: 5);

DrawFloatNumber(LocalizationManager.RightLang.Configwindow_Param_HealthDifference,
ref Service.Configuration.HealthDifference,
speed * 2, 0, 0.5f);
Expand Down

0 comments on commit 969d958

Please sign in to comment.