Decompiled source of ReplaceSkillIcons v1.0.0

ReplaceSkillIcons.dll

Decompiled 8 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using JetBrains.Annotations;
using Microsoft.CodeAnalysis;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("ReplaceSkillIcons")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ReplaceSkillIcons")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("B8DEEF05-EC39-4886-88F9-1B405FA1A525")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace ReplaceSkillIcons
{
	[BepInPlugin("kg.ReplaceSkillIcons", "ReplaceSkillIcons", "1.0.0")]
	public class ReplaceSkillIcons : BaseUnityPlugin
	{
		[HarmonyPatch]
		private static class SkillsDialog_Setup_Patch
		{
			[UsedImplicitly]
			private static IEnumerable<MethodInfo> TargetMethods()
			{
				yield return AccessTools.Method(typeof(SkillsDialog), "Setup", (Type[])null, (Type[])null);
				yield return AccessTools.Method(typeof(Skills), "CheatRaiseSkill", new Type[3]
				{
					typeof(string),
					typeof(float),
					typeof(bool)
				}, (Type[])null);
				yield return AccessTools.Method(typeof(Skills), "RaiseSkill", new Type[2]
				{
					typeof(SkillType),
					typeof(float)
				}, (Type[])null);
			}

			[UsedImplicitly]
			private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> code)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_0033: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Expected O, but got Unknown
				CodeMatcher val = new CodeMatcher(code, (ILGenerator)null);
				FieldInfo fieldInfo = AccessTools.Field(typeof(SkillDef), "m_icon");
				val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1]
				{
					new CodeMatch((OpCode?)OpCodes.Ldfld, (object)fieldInfo, (string)null)
				});
				if (val.IsInvalid)
				{
					return val.Instructions();
				}
				val.Set(OpCodes.Call, (object)AccessTools.Method(typeof(ReplaceSkillIcons), "TryOverrideSkillIcon", (Type[])null, (Type[])null));
				return val.Instructions();
			}
		}

		private const string GUID = "kg.ReplaceSkillIcons";

		private const string NAME = "ReplaceSkillIcons";

		private const string VERSION = "1.0.0";

		private static readonly Dictionary<int, Sprite> _skillIcons = new Dictionary<int, Sprite>();

		private void Awake()
		{
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Expected O, but got Unknown
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			string path = Path.Combine(Paths.ConfigPath, "ReplaceSkillIcons");
			if (!Directory.Exists(path))
			{
				Directory.CreateDirectory(path);
			}
			string[] files = Directory.GetFiles(path);
			foreach (string text in files)
			{
				if (text.EndsWith(".png"))
				{
					string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(text);
					Texture2D val = new Texture2D(2, 2);
					ImageConversion.LoadImage(val, File.ReadAllBytes(text));
					Sprite value = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), Vector2.zero);
					SkillType result;
					int key = ((!Enum.TryParse<SkillType>(fileNameWithoutExtension, ignoreCase: true, out result)) ? Math.Abs(StringExtensionMethods.GetStableHashCode(fileNameWithoutExtension)) : ((int)result));
					_skillIcons[key] = value;
				}
			}
			new Harmony("kg.ReplaceSkillIcons").PatchAll();
		}

		public static Sprite TryOverrideSkillIcon(SkillDef skill)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected I4, but got Unknown
			if (!_skillIcons.TryGetValue((int)skill.m_skill, out var value))
			{
				return skill.m_icon;
			}
			return value;
		}
	}
}