Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Armor v1.0.0
Armor.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Character_Stats; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("headclef")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+9cf62794bccb16b250c398cb330231300c8d7a7b")] [assembly: AssemblyProduct("Armor")] [assembly: AssemblyTitle("Armor")] [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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 Armor { [BepInPlugin("headclef.Armor", "Armor", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Armor : BaseUnityPlugin { private const string PluginGuid = "headclef.Armor"; private const string PluginName = "Armor"; private const string PluginVersion = "1.0.0"; internal static ConfigEntry<bool> EnableArmor; internal static ConfigEntry<float> ReductionPerLevel; internal static ConfigEntry<float> MaxReduction; internal static Armor Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown //IL_0054: Expected O, but got Unknown Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; BindConfiguration(); if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); } private void OnDestroy() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void BindConfiguration() { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected O, but got Unknown //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown EnableArmor = ((BaseUnityPlugin)this).Config.Bind<bool>("Damage Reduction", "Enable", true, "Enable damage reduction based on Health + Strength stats."); ReductionPerLevel = ((BaseUnityPlugin)this).Config.Bind<float>("Damage Reduction", "Reduction Per Combined Level", 0.02f, new ConfigDescription("Damage reduction percentage per combined level of Health + Strength. E.g. 0.02 = 2% per level. At combined 10: 20% reduction.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.005f, 0.1f), Array.Empty<object>())); MaxReduction = ((BaseUnityPlugin)this).Config.Bind<float>("Damage Reduction", "Max Reduction", 0.5f, new ConfigDescription("Maximum damage reduction cap (percentage). 0.50 = 50% max reduction.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 0.9f), Array.Empty<object>())); } } } namespace Armor.Patches { [HarmonyPatch] internal static class DamageReductionPatch { [HarmonyPatch(typeof(PlayerHealth), "Hurt")] [HarmonyPrefix] private static void Hurt_Prefix(PlayerHealth __instance, ref int _damage) { if (!Armor.EnableArmor.Value || _damage <= 0 || !Character_Stats.AreStatsReady) { return; } try { PlayerAvatar playerAvatar = __instance.playerAvatar; if ((Object)(object)playerAvatar == (Object)null) { return; } string text = SemiFunc.PlayerGetSteamID(playerAvatar); string localSteamId = Character_Stats.GetLocalSteamId(); if (localSteamId != null && !(text != localSteamId)) { int upgradeLevel = Character_Stats.GetUpgradeLevel(text, "Health"); int upgradeLevel2 = Character_Stats.GetUpgradeLevel(text, "Strength"); int num = upgradeLevel + upgradeLevel2; if (num > 0) { float value = Armor.ReductionPerLevel.Value; float value2 = Armor.MaxReduction.Value; float val = (float)num * value; val = Math.Min(val, value2); int num2 = _damage; float num3 = 1f - val; _damage = Math.Max(Mathf.RoundToInt((float)num2 * num3), 1); Armor.Logger.LogDebug((object)($"Armor: {num2} -> {_damage} dmg " + $"({val:P0} reduction, " + $"Health: {upgradeLevel}, Strength: {upgradeLevel2}, combined: {num})")); } } } catch (Exception ex) { Armor.Logger.LogError((object)("DamageReduction exception: " + ex.Message)); } } } }