diff --git a/ContextMenus/RepairInteractions.cs b/ContextMenus/RepairInteractions.cs index ffe84f2..26f8e8b 100644 --- a/ContextMenus/RepairInteractions.cs +++ b/ContextMenus/RepairInteractions.cs @@ -41,10 +41,11 @@ namespace UIFixes { text = string.Format("{0}", repairer.LocalizedName); } - else if (repairer is GClass803 repairKit) + else if (R.RepairKit.Type.IsInstanceOfType(repairer)) { + var repairKit = new R.RepairKit(repairer); float pointsLeft = repairKit.GetRepairPoints(); - double amount = repairStrategy.GetRepairPrice(repairAmount, repairKit); + double amount = repairStrategy.GetRepairPrice(repairAmount, repairKit.Value); string costColor = amount > pointsLeft ? "#FF0000" : "#ADB8BC"; text = string.Format("{0} ({2} {3})", repairer.LocalizedName, costColor, Math.Round(amount, 2).ToString(CultureInfo.InvariantCulture), "RP".Localized()); @@ -96,14 +97,21 @@ namespace UIFixes float repairAmount = GetClampedRepairAmount(repairStrategy); - if (repairer is GClass803 repairKit) + if (R.RepairKit.Type.IsInstanceOfType(repairer)) { + var repairKit = new R.RepairKit(repairer); float pointsLeft = repairKit.GetRepairPoints(); - double amount = repairStrategy.GetRepairPrice(repairAmount, repairKit); + double amount = repairStrategy.GetRepairPrice(repairAmount, repairKit.Value); if (amount > pointsLeft) { return new FailedResult(ERepairStatusWarning.NotEnoughRepairPoints.ToString()); } + + // This check is only for repair kits + if (repairStrategy.IsNoCorrespondingArea()) + { + return new FailedResult(ERepairStatusWarning.NoCorrespondingArea.ToString()); + } } else { @@ -126,11 +134,6 @@ namespace UIFixes return new FailedResult(ERepairStatusWarning.BrokenItem.ToString()); }*/ - if (repairStrategy.IsNoCorrespondingArea()) - { - return new FailedResult(ERepairStatusWarning.NoCorrespondingArea.ToString()); - } - return SuccessfulResult.New; } diff --git a/R.cs b/R.cs index 2def81d..d123b54 100644 --- a/R.cs +++ b/R.cs @@ -54,6 +54,7 @@ namespace UIFixes GridWindow.InitTypes(); GridSortPanel.InitTypes(); RepairStrategy.InitTypes(); + RepairKit.InitTypes(); ContextMenuHelper.InitTypes(); RagfairNewOfferItemView.InitTypes(); TradingTableGridView.InitTypes(); @@ -597,9 +598,9 @@ namespace UIFixes public static void InitTypes() { - Type = PatchConstants.EftTypes.Single(t => t.IsInterface && t.GetMethod("HowMuchRepairScoresCanAccept") != null); - ArmorStrategyType = PatchConstants.EftTypes.Single(t => t.IsClass && Type.IsAssignableFrom(t) && t.GetField("repairableComponent_0", BindingFlags.Instance | BindingFlags.NonPublic) == null); - DefaultStrategyType = PatchConstants.EftTypes.Single(t => Type.IsAssignableFrom(t) && t.GetField("repairableComponent_0", BindingFlags.Instance | BindingFlags.NonPublic) != null); + Type = PatchConstants.EftTypes.Single(t => t.IsInterface && t.GetMethod("HowMuchRepairScoresCanAccept") != null); // GInterface34 + ArmorStrategyType = PatchConstants.EftTypes.Single(t => t.IsClass && Type.IsAssignableFrom(t) && t.GetField("repairableComponent_0", BindingFlags.Instance | BindingFlags.NonPublic) == null); // GClass805 + DefaultStrategyType = PatchConstants.EftTypes.Single(t => Type.IsAssignableFrom(t) && t.GetField("repairableComponent_0", BindingFlags.Instance | BindingFlags.NonPublic) != null); // GClass804 RepairersProperty = AccessTools.Property(Type, "Repairers"); CurrentRepairerProperty = AccessTools.Property(Type, "CurrentRepairer"); HowMuchRepairScoresCanAcceptMethod = AccessTools.Method(Type, "HowMuchRepairScoresCanAccept"); @@ -640,6 +641,20 @@ namespace UIFixes public bool IsNoCorrespondingArea() => (bool)IsNoCorrespondingAreaMethod.Invoke(Value, []); } + public class RepairKit(object value) : Wrapper(value) + { + public static Type Type { get; private set; } + private static MethodInfo GetRepairPointsMethod; + + public static void InitTypes() + { + Type = R.RepairStrategy.Type.GetMethod("GetRepairPrice").GetParameters()[1].ParameterType; // GClass803 + GetRepairPointsMethod = AccessTools.Method(Type, "GetRepairPoints"); + } + + public float GetRepairPoints() => (float)GetRepairPointsMethod.Invoke(Value, []); + + } public class ContextMenuHelper(object value) : Wrapper(value) { public static Type Type { get; private set; }