Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of PhilsBenthicPuritySwap v1.0.2
plugins/Boaphil-PhilsBenthicPuritySwap/PhilsBenthicPuritySwap.dll
Decompiled 2 years agousing System.Collections.Generic; 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.Logging; using On.RoR2; using PhilsBenthicPuritySwap.Items; using R2API; using RoR2; using RoR2.ContentManagement; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using VoidItemAPI; [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 = ".NET Standard 2.0")] [assembly: AssemblyCompany("PhilsBenthicPuritySwap")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("PhilsBenthicPuritySwap")] [assembly: AssemblyTitle("PhilsBenthicPuritySwap")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace PhilsBenthicPuritySwap { internal class Assets { public const string bundleName = "benthicpurityswap"; public static AssetBundle MainAssets { get; private set; } public static string AssetBundlePath => Path.Combine(Path.GetDirectoryName(BenthicPuritySwap.PInfo.Location), "benthicpurityswap"); public static void Init() { MainAssets = AssetBundle.LoadFromFile(AssetBundlePath); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("Boaphil.PhilsBenthicPuritySwap", "PhilsBenthicPuritySwap", "1.0.1")] public class BenthicPuritySwap : BaseUnityPlugin { public const string PluginGUID = "Boaphil.PhilsBenthicPuritySwap"; public const string PluginAuthor = "Boaphil"; public const string PluginName = "PhilsBenthicPuritySwap"; public const string PluginVersion = "1.0.1"; public static PluginInfo PInfo { get; private set; } public void Awake() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown Log.Init(((BaseUnityPlugin)this).Logger); PInfo = ((BaseUnityPlugin)this).Info; Assets.Init(); ItemCatalog.Init += new hook_Init(OnItemCatalogInit); LunarBenthic.Init(); VoidPurity.Init(); } private void OnItemCatalogInit(orig_Init orig) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) ItemDef[] itemDefs = ContentManager.itemDefs; foreach (ItemDef val in itemDefs) { if (((Object)val).name == "LunarBadLuck" || ((Object)val).name == "CloverVoid") { val._itemTierDef = null; val.deprecatedTier = (ItemTier)5; } } VoidTransformation.ModifyTransformation("CloverVoid", "Clover", (string)null, (ModificationType)1); orig.Invoke(); } } internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } } namespace PhilsBenthicPuritySwap.Items { internal class LunarBenthic { [CompilerGenerated] private static class <>O { public static hook_OnServerStageBegin <0>__OnNextStage; public static hook_OnInventoryChanged <1>__OnInventoryChanged; } public static ItemDef itemDef; private static string itemName = "CloverLunar"; private static string upperName = itemName.ToUpper(); private static Xoroshiro128Plus cloverVoidRng; public static Sprite LoadSprite() { return Assets.MainAssets.LoadAsset<Sprite>("assets/import/benthicpurityswap_icons/cloverLunar.png"); } public static GameObject LoadPrefab() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) return Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/CloverVoid/PickupCloverVoid.prefab").WaitForCompletion(); } public static ItemDef CreateItem() { //IL_0092: Unknown result type (might be due to invalid IL or missing references) ItemDef val = ScriptableObject.CreateInstance<ItemDef>(); ((Object)val).name = itemName; val.nameToken = "PHILSBENTHICPURITYSWAP_" + upperName + "_NAME"; val.pickupToken = "PHILSBENTHICPURITYSWAP_" + upperName + "_PICKUP"; val.descriptionToken = "PHILSBENTHICPURITYSWAP_" + upperName + "_DESC"; val.loreToken = "PHILSBENTHICPURITYSWAP_" + upperName + "_LORE"; val.tags = (ItemTag[])(object)new ItemTag[2] { (ItemTag)3, (ItemTag)20 }; val.deprecatedTier = (ItemTier)3; val.canRemove = true; val.hidden = false; val.pickupModelPrefab = LoadPrefab(); val.pickupIconSprite = LoadSprite(); return val; } public static ItemDisplayRuleDict CreateDisplayRules() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown return new ItemDisplayRuleDict((ItemDisplayRule[])null); } public static void AddHooks() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown object obj = <>O.<0>__OnNextStage; if (obj == null) { hook_OnServerStageBegin val = OnNextStage; <>O.<0>__OnNextStage = val; obj = (object)val; } CharacterMaster.OnServerStageBegin += (hook_OnServerStageBegin)obj; object obj2 = <>O.<1>__OnInventoryChanged; if (obj2 == null) { hook_OnInventoryChanged val2 = OnInventoryChanged; <>O.<1>__OnInventoryChanged = val2; obj2 = (object)val2; } CharacterMaster.OnInventoryChanged += (hook_OnInventoryChanged)obj2; } private static void OnInventoryChanged(orig_OnInventoryChanged orig, CharacterMaster self) { orig.Invoke(self); int itemCount; if (Object.op_Implicit((Object)(object)self.inventory) && (itemCount = self.inventory.GetItemCount(itemDef)) > 0) { self.luck -= (float)itemCount; } } private static void OnNextStage(orig_OnServerStageBegin orig, CharacterMaster self, Stage stage) { orig.Invoke(self, stage); if (Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(itemDef) > 0) { TryCloverUpgrades(self); } } private static void TryCloverUpgrades(CharacterMaster characterMaster) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Invalid comparison between Unknown and I4 //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0190: 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_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) Inventory inventory = characterMaster.inventory; if (!NetworkServer.active) { return; } if (cloverVoidRng == null) { cloverVoidRng = new Xoroshiro128Plus(Run.instance.seed); } int itemCount = inventory.GetItemCount(itemDef); List<PickupIndex> list = new List<PickupIndex>(Run.instance.availableTier2DropList); List<PickupIndex> list2 = new List<PickupIndex>(Run.instance.availableTier3DropList); List<ItemIndex> list3 = new List<ItemIndex>(inventory.itemAcquisitionOrder); Util.ShuffleList<ItemIndex>(list3, cloverVoidRng); int num = itemCount * 3; int num2 = 0; int num3 = 0; while (num2 < num && num3 < list3.Count) { ItemDef startingItemDef = ItemCatalog.GetItemDef(list3[num3]); ItemDef val = null; List<PickupIndex> list4 = null; ItemTier tier = startingItemDef.tier; ItemTier val2 = tier; if ((int)val2 != 0) { if ((int)val2 == 1) { list4 = list2; } } else { list4 = list; } if (list4 != null && list4.Count > 0) { Util.ShuffleList<PickupIndex>(list4, cloverVoidRng); list4.Sort(CompareTags); PickupIndex val3 = list4[0]; val = ItemCatalog.GetItemDef(((PickupIndex)(ref val3)).itemIndex); } if ((Object)(object)val != (Object)null) { if (inventory.GetItemCount(val.itemIndex) == 0) { list3.Add(val.itemIndex); } num2++; int itemCount2 = inventory.GetItemCount(startingItemDef.itemIndex); inventory.RemoveItem(startingItemDef.itemIndex, itemCount2); inventory.GiveItem(val.itemIndex, itemCount2); CharacterMasterNotificationQueue.SendTransformNotification(characterMaster, startingItemDef.itemIndex, val.itemIndex, (TransformationType)2); } num3++; int CompareTags(PickupIndex lhs, PickupIndex rhs) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) int num4 = 0; int num5 = 0; ItemDef val4 = ItemCatalog.GetItemDef(((PickupIndex)(ref lhs)).itemIndex); ItemDef val5 = ItemCatalog.GetItemDef(((PickupIndex)(ref rhs)).itemIndex); if (startingItemDef.ContainsTag((ItemTag)1)) { if (val4.ContainsTag((ItemTag)1)) { num4 = 1; } if (val5.ContainsTag((ItemTag)1)) { num5 = 1; } } if (startingItemDef.ContainsTag((ItemTag)2)) { if (val4.ContainsTag((ItemTag)2)) { num4 = 1; } if (val5.ContainsTag((ItemTag)2)) { num5 = 1; } } if (startingItemDef.ContainsTag((ItemTag)3)) { if (val4.ContainsTag((ItemTag)3)) { num4 = 1; } if (val5.ContainsTag((ItemTag)3)) { num5 = 1; } } return num5 - num4; } } } public static void Init() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown itemDef = CreateItem(); ItemAPI.Add(new CustomItem(itemDef, CreateDisplayRules())); Log.Debug("Created " + itemName); AddHooks(); } } internal class VoidPurity { [CompilerGenerated] private static class <>O { public static StatHookEventHandler <0>__EditStats; } public static ItemDef itemDef; private static string itemName = "VoidBadLuck"; private static string upperName = itemName.ToUpper(); public static Sprite LoadSprite() { return Assets.MainAssets.LoadAsset<Sprite>("assets/import/benthicpurityswap_icons/voidbadluck.png"); } public static GameObject LoadPrefab() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) return Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarBadLuck/PickupStarSeed.prefab").WaitForCompletion(); } public static ItemDef CreateItem() { //IL_008d: Unknown result type (might be due to invalid IL or missing references) ItemDef val = ScriptableObject.CreateInstance<ItemDef>(); ((Object)val).name = itemName; val.nameToken = "PHILSBENTHICPURITYSWAP_" + upperName + "_NAME"; val.pickupToken = "PHILSBENTHICPURITYSWAP_" + upperName + "_PICKUP"; val.descriptionToken = "PHILSBENTHICPURITYSWAP_" + upperName + "_DESC"; val.loreToken = "PHILSBENTHICPURITYSWAP_" + upperName + "_LORE"; val.tags = (ItemTag[])(object)new ItemTag[1] { (ItemTag)3 }; val.deprecatedTier = (ItemTier)8; val.canRemove = true; val.hidden = false; val.pickupModelPrefab = LoadPrefab(); val.pickupIconSprite = LoadSprite(); return val; } public static ItemDisplayRuleDict CreateDisplayRules() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown return new ItemDisplayRuleDict((ItemDisplayRule[])null); } public static void AddHooks() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown VoidTransformation.CreateTransformation(itemDef, "Clover"); object obj = <>O.<0>__EditStats; if (obj == null) { StatHookEventHandler val = EditStats; <>O.<0>__EditStats = val; obj = (object)val; } RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj; } private static void EditStats(CharacterBody sender, StatHookEventArgs args) { int itemCount; if (Object.op_Implicit((Object)(object)sender.inventory) && (itemCount = sender.inventory.GetItemCount(itemDef)) > 0) { float cooldownReductionAdd = 2f + 1f * (float)(itemCount - 1); args.cooldownReductionAdd = cooldownReductionAdd; } } public static void Init() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown itemDef = CreateItem(); ItemAPI.Add(new CustomItem(itemDef, CreateDisplayRules())); Log.Debug("Created " + itemName); AddHooks(); } } }