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; }