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 Resonance Field Generator v1.3.1
RFGPlugin.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.IO; 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 HarmonyLib; using On.RoR2; using On.RoR2.Items; using On.RoR2.UI; using R2API; using R2API.Utils; using RoR2; using RoR2.UI; using UnityEngine; using UnityEngine.AddressableAssets; [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.0", FrameworkDisplayName = "")] [assembly: AssemblyCompany("RFGPlugin")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("RFGPlugin")] [assembly: AssemblyTitle("RFGPlugin")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace RFGPlugin; internal static class Log { internal static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void LogDebug(object data) { _logSource.LogDebug(data); } internal static void LogError(object data) { _logSource.LogError(data); } internal static void LogFatal(object data) { _logSource.LogFatal(data); } internal static void LogInfo(object data) { _logSource.LogInfo(data); } internal static void LogMessage(object data) { _logSource.LogMessage(data); } internal static void LogWarning(object data) { _logSource.LogWarning(data); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("nobleRadical.RFGPlugin", "RFGPlugin", "1.3.1")] [R2APISubmoduleDependency(new string[] { "ItemAPI", "LanguageAPI", "RecalculateStatsAPI" })] public class RFGPlugin : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_Init <>9__14_0; public static StatHookEventHandler <>9__14_1; public static hook_Heal <>9__14_2; internal void <Awake>b__14_0(orig_Init orig) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) Pair val = default(Pair); val.itemDef1 = Items.PersonalShield; val.itemDef2 = myItemDef; Pair val2 = val; ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem] = CollectionExtensions.AddToArray<Pair>(ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem], val2); orig.Invoke(); } internal void <Awake>b__14_1(CharacterBody self, StatHookEventArgs args) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)self.inventory != (Object)null) { int itemCount = self.inventory.GetItemCount(myItemDef.itemIndex); float maxHealth = self.maxHealth; float maxShield = self.maxShield; float num = 0f; float num2 = 0f; num2 = 0.08f * (float)itemCount * maxHealth; num = 0.04f * (float)itemCount * maxHealth; if (maxHealth - num < 1f) { num = maxHealth - 1f; } args.baseHealthAdd += 0f - num; args.baseShieldAdd += num2; } } internal float <Awake>b__14_2(orig_Heal orig, HealthComponent self, float amt, ProcChainMask proc, bool nonRegen) { //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)self.body != (Object)null) { CharacterBody componentInParent = ((Component)self).GetComponentInParent<CharacterBody>(); if ((Object)(object)componentInParent.inventory != (Object)null) { int itemCount = componentInParent.inventory.GetItemCount(myItemDef.itemIndex); bool flag = componentInParent.inventory.GetItemCount(Items.ShieldOnly.itemIndex) > 0; if (itemCount > 0 && nonRegen) { componentInParent.outOfDangerStopwatch += HealFactor.Value * amt; } if (flag & componentInParent.outOfDanger) { self.CallCmdRechargeShieldFull(); } } } orig.Invoke(self, amt, proc, nonRegen); return 0f; } } public const string PluginGUID = "nobleRadical.RFGPlugin"; public const string PluginAuthor = "nobleRadical"; public const string PluginName = "RFGPlugin"; public const string PluginVersion = "1.3.1"; private static ItemDef myItemDef; private Color purple = Color32.op_Implicit(new Color32((byte)135, (byte)0, byte.MaxValue, byte.MaxValue)); public static PluginInfo PInfo { get; private set; } public static ConfigEntry<float> HealFactor { get; set; } public void Awake() { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Expected O, but got Unknown //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Expected O, but got Unknown //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Expected O, but got Unknown //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Expected O, but got Unknown //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Expected O, but got Unknown //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Expected O, but got Unknown //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Expected O, but got Unknown //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Expected O, but got Unknown Log.Init(((BaseUnityPlugin)this).Logger); PInfo = ((BaseUnityPlugin)this).Info; HealFactor = ((BaseUnityPlugin)this).Config.Bind<float>("base", "Healing Factor", 0.1f, "The amount that shield recharge delay is decreased for every health point healed."); myItemDef = ScriptableObject.CreateInstance<ItemDef>(); ((Object)myItemDef).name = "RFG"; myItemDef.nameToken = "RFG_NAME"; myItemDef.pickupToken = "RFG_PICKUP"; myItemDef.descriptionToken = "RFG_DESC"; myItemDef.loreToken = "RFG_LORE"; myItemDef.deprecatedTier = (ItemTier)6; myItemDef.tags = (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 }; Assets.Init(); Log.LogInfo(string.Join(", ", Assets.mainBundle.GetAllAssetNames())); myItemDef.pickupIconSprite = Assets.mainBundle.LoadAsset<Sprite>("Assets/texVoidShieldIconSmol.png"); myItemDef.pickupModelPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/PersonalShield/PickupShieldGenerator.prefab").WaitForCompletion(); myItemDef.canRemove = true; myItemDef.hidden = false; AddTokens(); ItemDisplayRuleDict val = new ItemDisplayRuleDict((ItemDisplayRule[])null); ItemAPI.Add(new CustomItem(myItemDef, val)); object obj = <>c.<>9__14_0; if (obj == null) { hook_Init val2 = delegate(orig_Init orig) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) Pair val5 = default(Pair); val5.itemDef1 = Items.PersonalShield; val5.itemDef2 = myItemDef; Pair val6 = val5; ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem] = CollectionExtensions.AddToArray<Pair>(ItemCatalog.itemRelationships[ItemRelationshipTypes.ContagiousItem], val6); orig.Invoke(); }; <>c.<>9__14_0 = val2; obj = (object)val2; } ContagiousItemManager.Init += (hook_Init)obj; object obj2 = <>c.<>9__14_1; if (obj2 == null) { StatHookEventHandler val3 = delegate(CharacterBody self, StatHookEventArgs args) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)self.inventory != (Object)null) { int itemCount2 = self.inventory.GetItemCount(myItemDef.itemIndex); float maxHealth = self.maxHealth; float maxShield = self.maxShield; float num = 0f; float num2 = 0f; num2 = 0.08f * (float)itemCount2 * maxHealth; num = 0.04f * (float)itemCount2 * maxHealth; if (maxHealth - num < 1f) { num = maxHealth - 1f; } args.baseHealthAdd += 0f - num; args.baseShieldAdd += num2; } }; <>c.<>9__14_1 = val3; obj2 = (object)val3; } RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj2; object obj3 = <>c.<>9__14_2; if (obj3 == null) { hook_Heal val4 = delegate(orig_Heal orig, HealthComponent self, float amt, ProcChainMask proc, bool nonRegen) { //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)self.body != (Object)null) { CharacterBody componentInParent = ((Component)self).GetComponentInParent<CharacterBody>(); if ((Object)(object)componentInParent.inventory != (Object)null) { int itemCount = componentInParent.inventory.GetItemCount(myItemDef.itemIndex); bool flag = componentInParent.inventory.GetItemCount(Items.ShieldOnly.itemIndex) > 0; if (itemCount > 0 && nonRegen) { componentInParent.outOfDangerStopwatch += HealFactor.Value * amt; } if (flag & componentInParent.outOfDanger) { self.CallCmdRechargeShieldFull(); } } } orig.Invoke(self, amt, proc, nonRegen); return 0f; }; <>c.<>9__14_2 = val4; obj3 = (object)val4; } HealthComponent.Heal += (hook_Heal)obj3; HealthBar.UpdateBarInfos += new hook_UpdateBarInfos(HealthBar_UpdateBarInfos); HealthBar.OnEnable += new hook_OnEnable(HealthBar_OnEnable); HealthBar.OnInventoryChanged += new hook_OnInventoryChanged(HealthBar_OnInventoryChanged); Log.LogInfo("Awake done."); } private void HealthBar_OnInventoryChanged(orig_OnInventoryChanged orig, HealthBar self) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); int itemCount = self.source.body.inventory.GetItemCount(myItemDef); if (itemCount > 0) { self.barInfoCollection.shieldBarInfo.color = purple; } } private void HealthBar_OnEnable(orig_OnEnable orig, HealthBar self) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); int itemCount = self.source.body.inventory.GetItemCount(myItemDef); if (itemCount > 0) { self.barInfoCollection.shieldBarInfo.color = purple; } } private void HealthBar_UpdateBarInfos(orig_UpdateBarInfos orig, HealthBar self) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) bool flag = ((self.barInfoCollection.shieldBarInfo.color == purple) ? true : false); orig.Invoke(self); if (flag) { self.barInfoCollection.shieldBarInfo.color = purple; } } private void AddTokens() { LanguageAPI.Add("RFG_NAME", "Resonance Field Generator"); LanguageAPI.Add("RFG_PICKUP", "Trade health for a <style=cIsHealing>Regenerating Shield</style>. Recharge faster by healing. <style=cIsVoid>Corrupts all Personal Shield Generators.</style>"); LanguageAPI.Add("RFG_DESC", $"Trade <style=cIsHealing>4%</style> <style=cStack>(+4% per stack)</style> health for <style=cIsHealing>8%</style> <style=cStack>(+8% per stack)</style> <style=cIsHealing>Regenerating Shield</style>. Each health point healed <style=cArtifact>Decreases recharge delay</style> by {HealFactor.Value} seconds. If Transcendence is active, healing while recharging shield fully recharges it. <style=cIsVoid>Corrupts all Personal Shield Generators.</style>"); LanguageAPI.Add("RFG_LORE", "It's interesting to see how the void...\r\n\r\ninnovates...\r\n\r\non human designs.\r\n\r\n-Lost Journal, recovered from Petrichor V"); } } public static class Assets { public static AssetBundle mainBundle; public const string bundleName = "shieldbundle"; public static string AssetBundlePath => Path.Combine(RFGPlugin.PInfo.Location, "..", "shieldbundle"); public static void Init() { mainBundle = AssetBundle.LoadFromFile(AssetBundlePath); Log.LogInfo("RFG Assets Initialized."); } }