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 True Steelsoul v1.0.0
true steelsoul plugin.dll
Decompiled 6 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.Logging; using GlobalEnums; using HarmonyLib; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("true steelsoul plugin")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+572600529536d8801ee565268e068b7efe6c7098")] [assembly: AssemblyProduct("true steelsoul plugin")] [assembly: AssemblyTitle("True_Steelsoul")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/Lordloss90/silksong plugin")] [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 BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace silksong_plugin { [BepInPlugin("io.github.lordloss90.true_steelsoul", "True Steelsoul", "1.0.0")] public class True_Steelsoul : BaseUnityPlugin { public const string ID = "io.github.lordloss90.true_steelsoul"; private static ManualLogSource logger; private static float battleTimer; private const float battleTime = 10f; private const int healthThreshold = 3; public const string Id = "io.github.lordloss90.true_steelsoul"; public static string Name => "True Steelsoul"; public static string Version => "1.0.0"; private void Awake() { ((BaseUnityPlugin)this).Logger.LogInfo((object)("Plugin " + Name + " (io.github.lordloss90.true_steelsoul) has loaded!")); logger = ((BaseUnityPlugin)this).Logger; Harmony.CreateAndPatchAll(typeof(True_Steelsoul), (string)null); } [HarmonyPrefix] [HarmonyPatch(typeof(UIManager), "GoToReturnMenuPrompt")] private static bool GoToReturnMenuPrefix() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 if ((int)HeroController.instance.playerData.permadeathMode == 1) { return IsPauseOrQuitAllowed(); } return true; } [HarmonyPostfix] [HarmonyPatch(typeof(GameManager), "PauseGameToggle")] private static void PauseGamePostfix() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) if ((int)HeroController.instance.playerData.permadeathMode == 1) { Text component = ((Component)((Component)UIManager.instance.UICanvas).transform.Find("NewPauseMenuScreen/Container/Controls/ExitButton/Menu Button Text")).GetComponent<Text>(); if (IsPauseOrQuitAllowed()) { ((Graphic)component).CrossFadeColor(new Color(1f, 1f, 1f, 1f), 0f, true, true); } else { ((Graphic)component).CrossFadeColor(new Color(0.4f, 0.4f, 0.4f, 1f), 0f, true, true); } } } [HarmonyPostfix] [HarmonyPatch(typeof(PlayerData), "TakeHealth")] private static void TakeHealthPostfix() { battleTimer = Time.time; } private static bool IsPauseOrQuitAllowed() { bool result = true; if (Time.time <= battleTimer + 10f) { result = false; } if (PlayerData.instance.health <= 3) { result = false; } return result; } [HarmonyPrefix] [HarmonyPatch(typeof(GameManager), "OnApplicationQuit")] private static bool ApplicationQuitPrefix() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 if ((int)HeroController.instance.playerData.permadeathMode == 1 && !IsPauseOrQuitAllowed()) { KillCurrentSaveFile(); } return true; } private static void KillCurrentSaveFile() { //IL_000c: 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_004e: Expected O, but got Unknown HeroController.instance.playerData.permadeathMode = (PermadeathModes)2; GameManager instance = GameManager.instance; logger.LogInfo((object)("kill save file in slot " + instance.profileID + " on quitting")); SaveGameData val = new SaveGameData(instance.playerData, instance.sceneData); val.playerData.UpdateDate(); string text = SaveDataUtility.SerializeSaveData<SaveGameData>(val, (Action<JsonSerializer>)null); Platform.Current.WriteSaveSlot(instance.profileID, instance.GetBytesForSaveJson(text), (Action<bool>)null); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }