Some mods may be broken due to the recent Alloyed Collective update.
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."); } }