Removing references to generated class ids, sometimes painfully

This commit is contained in:
Tyfon
2024-04-20 01:52:48 -07:00
parent 703f38563d
commit 5e7a71769e
2 changed files with 15 additions and 9 deletions

View File

@@ -1,6 +1,7 @@
using Aki.Reflection.Patching;
using EFT.UI;
using System;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
@@ -22,8 +23,8 @@ namespace UIFixes
{
protected override MethodBase GetTargetMethod()
{
Type type = typeof(EditBuildScreen.GClass3126);
return type.GetMethod("CloseScreenInterruption", BindingFlags.Public | BindingFlags.Instance);
Type type = typeof(EditBuildScreen).GetNestedTypes().Single(x => x.GetMethod("CloseScreenInterruption") != null); // EditBuildScreen.GClass3126
return type.GetMethod("CloseScreenInterruption");
}
[PatchPrefix]
@@ -38,7 +39,7 @@ namespace UIFixes
protected override MethodBase GetTargetMethod()
{
Type type = typeof(EditBuildScreen);
return type.GetMethod("method_35", BindingFlags.Public | BindingFlags.Instance);
return type.GetMethod("method_35");
}
[PatchPrefix]

View File

@@ -8,30 +8,35 @@ using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using EFT.InputSystem;
using Aki.Reflection.Utils;
namespace UIFixes
{
public class WeaponBindingPatch : ModulePatch
{
private static Type ControlSettingsClass;
private static MethodInfo GetKeyNameMethod;
protected override MethodBase GetTargetMethod()
{
Type type = typeof(GClass960);
return type.GetMethod("GetBoundItemNames", BindingFlags.Public | BindingFlags.Instance);
ControlSettingsClass = PatchConstants.EftTypes.Single(x => x.GetMethod("GetBoundItemNames") != null); // GClass960
GetKeyNameMethod = ControlSettingsClass.GetMethod("GetKeyName");
return ControlSettingsClass.GetMethod("GetBoundItemNames", BindingFlags.Public | BindingFlags.Instance);
}
[PatchPostfix]
private static void Postfix(GClass960 __instance, EBoundItem boundItem, ref string __result)
private static void Postfix(object __instance, EBoundItem boundItem, ref string __result)
{
switch(boundItem)
{
case EBoundItem.Item1:
__result = __instance.GetKeyName(EGameKey.SecondaryWeapon);
__result = GetKeyNameMethod.Invoke(__instance, [EGameKey.SecondaryWeapon]) as string; //__instance.GetKeyName(EGameKey.SecondaryWeapon);
break;
case EBoundItem.Item2:
__result = __instance.GetKeyName(EGameKey.PrimaryWeaponFirst);
__result = GetKeyNameMethod.Invoke(__instance, [EGameKey.PrimaryWeaponFirst]) as string; //__instance.GetKeyName(EGameKey.PrimaryWeaponFirst);
break;
case EBoundItem.Item3:
__result = __instance.GetKeyName(EGameKey.PrimaryWeaponSecond);
__result = GetKeyNameMethod.Invoke(__instance, [EGameKey.PrimaryWeaponSecond]) as string; //__instance.GetKeyName(EGameKey.PrimaryWeaponSecond);
break;
}
}