Updated for client version 0.14.1.2.29197

This commit is contained in:
IgorEisberg 2024-04-02 10:56:51 +03:00 committed by IcyClawz
parent e4c0280a09
commit ab9ca14b93
19 changed files with 43 additions and 50 deletions

View File

@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<AssemblyName>IcyClawz.CustomInteractions.Prepatch</AssemblyName>
<Version>1.3.1</Version>
<Version>1.4.0</Version>
<RootNamespace>IcyClawz.CustomInteractions</RootNamespace>
<LangVersion>latest</LangVersion>
</PropertyGroup>

View File

@ -10,8 +10,7 @@ public static class Prepatch
public static void Patch(AssemblyDefinition assembly)
{
TypeDefinition type = assembly.MainModule.GetType("GClass2816"); // DynamicInteraction
type.IsSealed = false;
TypeDefinition type = assembly.MainModule.GetType("DynamicInteractionClass");
FieldDefinition field = type.Fields.SingleOrDefault(c => c.Name is "action_0");
field.IsFamily = true;
field.IsInitOnly = false;

View File

@ -1,3 +1,4 @@
using Comfort.Common;
using EFT.InventoryLogic;
using EFT.UI;
using JetBrains.Annotations;
@ -8,8 +9,7 @@ using System.Linq;
using System.Reflection;
using UnityEngine;
using DynamicInteraction = GClass2816;
using EmptyInteractions = GClass2817<System.Enum>;
using EmptyInteractionsAbstractClass = GClass3039;
namespace IcyClawz.CustomInteractions;
@ -34,7 +34,7 @@ public static class CustomInteractionsManager
public class CustomInteraction()
{
internal readonly CustomInteractionImpl Impl = new();
internal readonly CustomInteractionImpl Impl = new(UnityEngine.Random.Range(0, int.MaxValue).ToString("x4"));
public Func<string> Caption { get => Impl.Caption; set => Impl.Caption = value; }
public Func<Sprite> Icon { get => Impl.Icon; set => Impl.Icon = value; }
@ -44,8 +44,7 @@ public class CustomInteraction()
public Func<string> Error { get => Impl.Error; set => Impl.Error = value; }
}
internal sealed class CustomInteractionImpl()
: DynamicInteraction(UnityEngine.Random.Range(0, int.MaxValue).ToString("x4"))
internal sealed class CustomInteractionImpl(string id) : DynamicInteractionClass(id, id)
{
public Func<string> Caption { get; set; }
public new Func<Sprite> Icon { get; set; }
@ -71,32 +70,27 @@ public abstract class CustomSubInteractions(ItemUiContext uiContext)
public void AddRange(IEnumerable<CustomInteraction> interactions) => interactions.ExecuteForEach(Impl.AddCustomInteraction);
public void Remove(CustomInteraction interaction) => Impl.RemoveCustomInteraction(interaction);
public void RemoveRange(IEnumerable<CustomInteraction> interactions) => interactions.ExecuteForEach(Impl.RemoveCustomInteraction);
public void CallRedraw() => Impl.CallRedraw();
public void CallRedraw(string templateId) => Impl.CallRedraw(templateId);
}
internal sealed class CustomSubInteractionsImpl(ItemUiContext uiContext)
: EmptyInteractions(uiContext)
internal sealed class CustomSubInteractionsImpl(ItemUiContext uiContext) : EmptyInteractionsAbstractClass(uiContext)
{
public IEnumerable<CustomInteractionImpl> CustomInteractions => DynamicInteractions.OfType<CustomInteractionImpl>();
public bool ExaminationRequiredInternal { get; set; } = true;
public override bool ExaminationRequired => ExaminationRequiredInternal;
public override bool HasIcons => CustomInteractions.Any(interaction => interaction.Icon is not null);
public void CallRedraw() => itemUiContext_0.RedrawContextMenus(null);
}
internal static class AbstractInteractionsExtensions
{
private static Dictionary<string, DynamicInteraction> GetDynamicInteractions<T>(this GClass2817<T> instance) where T : Enum =>
typeof(GClass2817<T>).GetField("dictionary_1", BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(instance) as Dictionary<string, DynamicInteraction>;
private static Dictionary<string, DynamicInteractionClass> GetDynamicInteractions<T>(this ItemInfoInteractionsAbstractClass<T> instance) where T : struct, Enum =>
typeof(ItemInfoInteractionsAbstractClass<T>).GetField("dictionary_0", BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(instance) as Dictionary<string, DynamicInteractionClass>;
public static void AddCustomInteraction<T>(this GClass2817<T> instance, CustomInteraction interaction) where T : Enum =>
public static void AddCustomInteraction<T>(this ItemInfoInteractionsAbstractClass<T> instance, CustomInteraction interaction) where T : struct, Enum =>
instance.GetDynamicInteractions()[interaction.Impl.Key] = interaction.Impl;
public static void RemoveCustomInteraction<T>(this GClass2817<T> instance, CustomInteraction interaction) where T : Enum =>
public static void RemoveCustomInteraction<T>(this ItemInfoInteractionsAbstractClass<T> instance, CustomInteraction interaction) where T : struct, Enum =>
instance.GetDynamicInteractions().Remove(interaction.Impl.Key);
}
@ -121,7 +115,7 @@ internal static class InteractionButtonsContainerExtensions
CurrentButtonField.SetValue(instance, button);
private static readonly MethodInfo CreateButtonMethod =
typeof(InteractionButtonsContainer).GetMethod("method_1", BindingFlags.NonPublic | BindingFlags.Instance);
typeof(InteractionButtonsContainer).GetMethod("method_1", BindingFlags.Public | BindingFlags.Instance);
private static SimpleContextMenuButton CreateButton(this InteractionButtonsContainer instance,
string key, string caption, SimpleContextMenuButton template, RectTransform container,
@ -132,13 +126,13 @@ internal static class InteractionButtonsContainerExtensions
]);
private static readonly MethodInfo CloseSubMenuMethod =
typeof(InteractionButtonsContainer).GetMethod("method_4", BindingFlags.NonPublic | BindingFlags.Instance);
typeof(InteractionButtonsContainer).GetMethod("method_4", BindingFlags.Public | BindingFlags.Instance);
private static void CloseSubMenu(this InteractionButtonsContainer instance) =>
CloseSubMenuMethod.Invoke(instance, null);
private static readonly MethodInfo AddButtonMethod =
typeof(InteractionButtonsContainer).GetMethod("method_5", BindingFlags.NonPublic | BindingFlags.Instance);
typeof(InteractionButtonsContainer).GetMethod("method_5", BindingFlags.Public | BindingFlags.Instance);
private static void AddButton(this InteractionButtonsContainer instance, SimpleContextMenuButton button) =>
AddButtonMethod.Invoke(instance, [button]);
@ -173,7 +167,7 @@ internal static class InteractionButtonsContainerExtensions
false
);
button.SetButtonInteraction(
(isInteractive, impl.Error?.Invoke() ?? "")
isInteractive ? SuccessfulResult.New : new FailedResult(impl.Error?.Invoke() ?? "", 0)
);
instance.AddButton(button);
}

View File

@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<AssemblyName>IcyClawz.CustomInteractions</AssemblyName>
<Version>1.3.1</Version>
<Version>1.4.0</Version>
<RootNamespace>IcyClawz.CustomInteractions</RootNamespace>
<LangVersion>latest</LangVersion>
</PropertyGroup>
@ -18,6 +18,9 @@
<Reference Include="BepInEx">
<HintPath>..\Shared\BepInEx.dll</HintPath>
</Reference>
<Reference Include="Comfort">
<HintPath>..\Shared\Comfort.dll</HintPath>
</Reference>
<Reference Include="Sirenix.Serialization">
<HintPath>..\Shared\Sirenix.Serialization.dll</HintPath>
</Reference>

View File

@ -4,13 +4,9 @@ using EFT.UI;
using System.Linq;
using System.Reflection;
using DynamicInteraction = GClass2816;
using ItemContext = GClass2623;
using ItemInfoInteractions = GClass2817<EFT.InventoryLogic.EItemInfoButton>;
namespace IcyClawz.CustomInteractions;
[BepInPlugin("com.IcyClawz.CustomInteractions", "IcyClawz.CustomInteractions", "1.3.1")]
[BepInPlugin("com.IcyClawz.CustomInteractions", "IcyClawz.CustomInteractions", "1.4.0")]
public class Plugin : BaseUnityPlugin
{
private void Awake()
@ -26,7 +22,8 @@ internal class ItemUiContextPatch : ModulePatch
typeof(ItemUiContext).GetMethod("GetItemContextInteractions", BindingFlags.Public | BindingFlags.Instance);
[PatchPostfix]
private static void Postfix(ref ItemInfoInteractions __result, ref ItemUiContext __instance, ItemContext itemContext)
private static void Postfix(ref ItemInfoInteractionsAbstractClass<EFT.InventoryLogic.EItemInfoButton> __result,
ref ItemUiContext __instance, ItemContextClass itemContext)
{
foreach (var provider in CustomInteractionsManager.Providers.OfType<IItemCustomInteractionsProvider>())
{
@ -42,10 +39,10 @@ internal class ItemUiContextPatch : ModulePatch
internal class InteractionButtonsContainerPatch : ModulePatch
{
protected override MethodBase GetTargetMethod() =>
typeof(InteractionButtonsContainer).GetMethod("method_3", BindingFlags.NonPublic | BindingFlags.Instance);
typeof(InteractionButtonsContainer).GetMethod("method_3", BindingFlags.Public | BindingFlags.Instance);
[PatchPrefix]
private static bool Prefix(ref InteractionButtonsContainer __instance, DynamicInteraction interaction)
private static bool Prefix(ref InteractionButtonsContainer __instance, DynamicInteractionClass interaction)
{
if (interaction is CustomInteractionImpl impl)
{

View File

@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<AssemblyName>IcyClawz.ItemAttributeFix</AssemblyName>
<Version>1.2.0</Version>
<Version>1.3.0</Version>
<RootNamespace>IcyClawz.ItemAttributeFix</RootNamespace>
<LangVersion>latest</LangVersion>
</PropertyGroup>

View File

@ -5,7 +5,7 @@ using System.Reflection;
namespace IcyClawz.ItemAttributeFix;
[BepInPlugin("com.IcyClawz.ItemAttributeFix", "IcyClawz.ItemAttributeFix", "1.2.0")]
[BepInPlugin("com.IcyClawz.ItemAttributeFix", "IcyClawz.ItemAttributeFix", "1.3.0")]
public class Plugin : BaseUnityPlugin
{
private void Awake() =>

View File

@ -8,8 +8,8 @@ using System.Linq;
using System.Reflection;
using UnityEngine;
using ILightTemplate = GInterface246;
using ResourceCache = GClass1977;
using ILightTemplate = GInterface295;
using GlobalEvents = GClass3019;
namespace IcyClawz.ItemContextMenuExt;
@ -60,12 +60,12 @@ internal sealed class CustomInteractionsProvider : IItemCustomInteractionsProvid
yield return new()
{
Caption = () => (lightComponent.IsActive ? "TurnOff" : "TurnOn").Localized(),
Icon = () => ResourceCache.Pop<Sprite>(IconsPrefix + (lightComponent.IsActive ? "TurnOff" : "TurnOn")),
Icon = () => CacheResourcesPopAbstractClass.Pop<Sprite>(IconsPrefix + (lightComponent.IsActive ? "TurnOff" : "TurnOn")),
Action = () =>
{
Singleton<GUISounds>.Instance.PlayUISound(EUISoundType.MenuContextMenu);
ComponentUtils.SetLightState(lightComponent, !lightComponent.IsActive, lightComponent.SelectedMode);
uiContext.RedrawContextMenus([item.TemplateId]);
GlobalEvents.RequestGlobalRedraw();
}
};
// Switch mode

View File

@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<AssemblyName>IcyClawz.ItemContextMenuExt</AssemblyName>
<Version>1.2.1</Version>
<Version>1.4.0</Version>
<RootNamespace>IcyClawz.ItemContextMenuExt</RootNamespace>
<LangVersion>latest</LangVersion>
</PropertyGroup>

View File

@ -3,7 +3,7 @@ using IcyClawz.CustomInteractions;
namespace IcyClawz.ItemContextMenuExt;
[BepInPlugin("com.IcyClawz.ItemContextMenuExt", "IcyClawz.ItemContextMenuExt", "1.2.1")]
[BepInPlugin("com.IcyClawz.ItemContextMenuExt", "IcyClawz.ItemContextMenuExt", "1.4.0")]
[BepInDependency("com.IcyClawz.CustomInteractions")]
public class Plugin : BaseUnityPlugin
{

View File

@ -8,7 +8,7 @@ using System.Linq;
using System.Reflection;
using UnityEngine;
using CurrencyUtil = GClass2334;
using CurrencyUtil = GClass2517;
namespace IcyClawz.ItemSellPrice;

View File

@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<AssemblyName>IcyClawz.ItemSellPrice</AssemblyName>
<Version>1.2.1</Version>
<Version>1.3.0</Version>
<RootNamespace>IcyClawz.ItemSellPrice</RootNamespace>
<LangVersion>latest</LangVersion>
</PropertyGroup>

View File

@ -5,7 +5,7 @@ using System.Reflection;
namespace IcyClawz.ItemSellPrice;
[BepInPlugin("com.IcyClawz.ItemSellPrice", "IcyClawz.ItemSellPrice", "1.2.1")]
[BepInPlugin("com.IcyClawz.ItemSellPrice", "IcyClawz.ItemSellPrice", "1.3.0")]
public class Plugin : BaseUnityPlugin
{
private void Awake()

View File

@ -7,7 +7,7 @@ using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using InGameStatus = GClass1716;
using InGameStatus = GClass1849;
namespace IcyClawz.MagazineInspector;

View File

@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<AssemblyName>IcyClawz.MagazineInspector</AssemblyName>
<Version>1.2.1</Version>
<Version>1.3.0</Version>
<RootNamespace>IcyClawz.MagazineInspector</RootNamespace>
<LangVersion>latest</LangVersion>
</PropertyGroup>

View File

@ -4,7 +4,7 @@ using System.Reflection;
namespace IcyClawz.MagazineInspector;
[BepInPlugin("com.IcyClawz.MagazineInspector", "IcyClawz.MagazineInspector", "1.2.1")]
[BepInPlugin("com.IcyClawz.MagazineInspector", "IcyClawz.MagazineInspector", "1.3.0")]
public class Plugin : BaseUnityPlugin
{
private void Awake() =>

View File

@ -39,7 +39,7 @@ internal sealed class ConfigurationManagerAttributes
/// Custom setting editor (OnGUI code that replaces the default editor provided by ConfigurationManager).
/// See below for a deeper explanation. Using a custom drawer will cause many of the other fields to do nothing.
/// </summary>
public System.Action<BepInEx.Configuration.ConfigEntryBase> CustomDrawer;
public System.Action<ConfigEntryBase> CustomDrawer;
/// <summary>
/// Show this setting in the settings screen at all? If false, don't show.

View File

@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<AssemblyName>IcyClawz.MunitionsExpert</AssemblyName>
<Version>1.2.1</Version>
<Version>1.3.0</Version>
<RootNamespace>IcyClawz.MunitionsExpert</RootNamespace>
<LangVersion>latest</LangVersion>
</PropertyGroup>

View File

@ -13,7 +13,7 @@ using UnityEngine.UI;
namespace IcyClawz.MunitionsExpert;
[BepInPlugin("com.IcyClawz.MunitionsExpert", "IcyClawz.MunitionsExpert", "1.2.1")]
[BepInPlugin("com.IcyClawz.MunitionsExpert", "IcyClawz.MunitionsExpert", "1.3.0")]
public class Plugin : BaseUnityPlugin
{
private static ConfigEntry<bool> ColorizeSwitch { get; set; }
@ -82,7 +82,7 @@ internal class ItemViewPatch : ModulePatch
typeof(ItemView).GetField("BackgroundColor", BindingFlags.NonPublic | BindingFlags.Instance);
protected override MethodBase GetTargetMethod() =>
typeof(ItemView).GetMethod("UpdateColor", BindingFlags.NonPublic | BindingFlags.Instance);
typeof(ItemView).GetMethod("UpdateColor", BindingFlags.Public | BindingFlags.Instance);
[PatchPrefix]
private static void PatchPrefix(ref ItemView __instance)