Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of Heart of the Collective v1.0.0
SolusHeartReward.dll
Decompiled 3 weeks agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; 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 EntityStates.SolusHeart.Death; using HG.Reflection; using IL.EntityStates.SolusHeart.Death; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.RoR2; using On.RoR2.CharacterSpeech; using R2API; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.CharacterSpeech; using RoR2.Items; using RoR2BepInExPack.GameAssetPathsBetter; using ShaderSwapper; using SolusHeartReward; 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: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("SolusHeartReward")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+e4bb00535d9a9219a05a6f5352da38832dcb3c9b")] [assembly: AssemblyProduct("SolusHeartReward")] [assembly: AssemblyTitle("SolusHeartReward")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [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; } } } public class SolusHeartRewardHelper : MonoBehaviour { public void Awake() { Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); } public void OnEnable() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown DirectorCard.IsAvailable += new hook_IsAvailable(DirectorCardOnIsAvailable); Run.Start += new hook_Start(RunOnStart); SolusVendorShrineSpeechDriver.SendReponseFromPool += new hook_SendReponseFromPool(SolusVendorShrineSpeechDriverOnSendReponseFromPool); } private void SolusVendorShrineSpeechDriverOnSendReponseFromPool(orig_SendReponseFromPool orig, SolusVendorShrineSpeechDriver self, SpeechInfo[] responsePool) { if (!global::SolusHeartReward.SolusHeartReward.silenceSPEX.Value) { orig.Invoke(self, responsePool); } } private void RunOnStart(orig_Start orig, Run self) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (Util.GetItemCountForTeam((TeamIndex)1, global::SolusHeartReward.SolusHeartReward.nullHeart.itemIndex, false, true) == 0) { Log.Debug("killed solus heart reward helper"); Object.Destroy((Object)(object)((Component)this).gameObject); } } public void OnDisable() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown DirectorCard.IsAvailable -= new hook_IsAvailable(DirectorCardOnIsAvailable); Run.Start -= new hook_Start(RunOnStart); SolusVendorShrineSpeechDriver.SendReponseFromPool -= new hook_SendReponseFromPool(SolusVendorShrineSpeechDriverOnSendReponseFromPool); } private bool DirectorCardOnIsAvailable(orig_IsAvailable orig, DirectorCard self) { if (Object.op_Implicit((Object)(object)self.spawnCard) && Object.op_Implicit((Object)(object)self.spawnCard.prefab) && IsCharacterSpawnCard(self.spawnCard)) { if (global::SolusHeartReward.SolusHeartReward.blacklistArray.Contains(((Object)self.spawnCard).name.Replace("csc", ""))) { if (global::SolusHeartReward.SolusHeartReward.logDebug.Value) { Log.Debug("disabling spawn card " + ((Object)self.spawnCard).name.Replace("csc", "")); } return false; } if (global::SolusHeartReward.SolusHeartReward.logDebug.Value) { Log.Debug("character spawn card = " + ((Object)self.spawnCard).name.Replace("csc", "")); } } return orig.Invoke(self); } private static bool IsCharacterSpawnCard(SpawnCard spawnCard) { if ((Object)(object)spawnCard == (Object)null) { return false; } CharacterMaster component = spawnCard.prefab.GetComponent<CharacterMaster>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.bodyPrefab)) { CharacterBody component2 = component.bodyPrefab.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component2)) { return true; } } return false; } } namespace SolusHeartReward { 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); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("icebro.heartofthecollective", "heartofthecollective", "1.0.0")] public class SolusHeartReward : BaseUnityPlugin { public sealed class Behavior : BaseItemBodyBehavior, IOnDamageDealtServerReceiver { [ItemDefAssociation] private static ItemDef GetItemDef() { return nullHeart; } public void OnEnable() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown ((BaseItemBodyBehavior)this).body.onInventoryChanged += BodyOnonInventoryChanged; if (!Object.op_Implicit((Object)(object)GameObject.Find("watcher"))) { GameObject val = new GameObject(); val.AddComponent<SolusHeartRewardHelper>(); Object.DontDestroyOnLoad((Object)(object)val); ((Object)val).name = "watcher"; Log.Debug("spawned solus heart reward helper"); } } private void BodyOnonInventoryChanged() { if (((BaseItemBodyBehavior)this).body.inventory.GetItemCountEffective(nullHeart) == 0) { Object.Destroy((Object)(object)GameObject.Find("watcher")); Log.Debug("killed solus heart reward helper"); } } public void OnDisable() { ((BaseItemBodyBehavior)this).body.onInventoryChanged -= BodyOnonInventoryChanged; } public void OnDamageDealtServer(DamageReport damageReport) { //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Invalid comparison between Unknown and I4 //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: 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_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Expected O, but got Unknown //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Expected O, but got Unknown if (!enableProc.Value || !Object.op_Implicit((Object)(object)damageReport.victimBody) || !Object.op_Implicit((Object)(object)damageReport.victimBody.master)) { return; } if (!useMechFlag.Value) { if (!solusFamilyBodyNames.Contains(((Object)damageReport.victimBody.master).name.Replace("(Clone)", "")) && !((Object)damageReport.victimBody.master).name.Contains("Solus") && !((Object)damageReport.victimBody.master).name.Contains("RoboBallMini") && ((Object)damageReport.victimBody.master).name != "SolusVendorMaster") { return; } } else if ((damageReport.victimBody.bodyFlags & 2) == 0) { return; } if (Util.CheckRoll((float)procChance.Value * damageReport.damageInfo.procCoefficient, damageReport.attackerBody.master)) { DamageInfo val = new DamageInfo { damage = damageReport.damageInfo.damage * (float)procDamage.Value / 100f, attacker = (Object.op_Implicit((Object)(object)damageReport.attackerBody) ? ((Component)damageReport.attackerBody).gameObject : null), inflictor = (Object.op_Implicit((Object)(object)damageReport.attackerBody) ? ((Component)damageReport.attackerBody).gameObject : null), position = damageReport.victimBody.corePosition, force = Vector3.zero, crit = damageReport.attackerBody.RollCrit(), damageColorIndex = (DamageColorIndex)13, damageType = DamageTypeCombo.op_Implicit((DamageType)0), procCoefficient = 0f }; damageReport.victimBody.healthComponent.TakeDamage(val); EffectData val2 = new EffectData { origin = damageReport.victimBody.corePosition, start = damageReport.victimBody.corePosition, rotation = Quaternion.identity, scale = damageReport.victimBody.radius }; EffectManager.SpawnEffect(impactEffectPrefab, val2, true); } } } public const string PluginGUID = "icebro.heartofthecollective"; public const string PluginAuthor = "icebro"; public const string PluginName = "heartofthecollective"; public const string PluginVersion = "1.0.0"; private static ConfigEntry<string> blacklist; public static ConfigEntry<bool> logDebug; public static ConfigEntry<bool> silenceSPEX; public static ConfigEntry<bool> enableProc; public static ConfigEntry<bool> useMechFlag; public static ConfigEntry<int> procChance; public static ConfigEntry<int> procDamage; private static ConfigEntry<string> descFormat; private static ConfigEntry<string> procFormat; public static GameObject impactEffectPrefab; public static ItemDef nullHeart; public static List<string> solusFamilyBodyNames = new List<string>(); public static string[] blacklistArray; private string assetbundledir; public void Awake() { //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: 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_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_02d1: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_0340: Unknown result type (might be due to invalid IL or missing references) //IL_0346: Expected O, but got Unknown //IL_034c: Unknown result type (might be due to invalid IL or missing references) //IL_0356: Expected O, but got Unknown //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Expected O, but got Unknown //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Expected O, but got Unknown //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) Log.Init(((BaseUnityPlugin)this).Logger); assetbundledir = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "solusheartrewardassets"); AssetBundle assetBundle = AssetBundle.LoadFromFileAsync(assetbundledir).assetBundle; ((MonoBehaviour)this).StartCoroutine(ShaderSwapper.UpgradeStubbedShadersAsync(assetBundle)); Material[] array = assetBundle.LoadAllAssets<Material>(); foreach (Material val in array) { if (((Object)val).name == "matTransparentChip") { val.shader = Addressables.LoadAssetAsync<Shader>((object)"RoR2/DLC3/TransparentTextureScrolling.shader").WaitForCompletion(); val.SetTexture("_MainTex", (Texture)(object)Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC3/texSolusWireGridBoss.tga").WaitForCompletion()); val.SetTexture("_RemapTex", (Texture)(object)Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC3/texBossWire.png").WaitForCompletion()); val.SetTexture("_ScrollTex", (Texture)(object)Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Common/TiledTextures/texDepth2.jpg").WaitForCompletion()); Log.Debug("swapped chip material shader"); } if (((Object)val).name == "matSolusHeart") { val.SetTexture("_Cloud1Tex", (Texture)(object)Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC3/Drone Tech/texNanoPistolAOE_1c.png").WaitForCompletion()); val.SetTexture("_Cloud2Tex", (Texture)(object)Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/DLC3/Drone Tech/texNanoPistolAOE_1d.png").WaitForCompletion()); val.SetTexture("_RemapTex", (Texture)(object)Addressables.LoadAssetAsync<Texture2D>((object)"RoR2/Base/Common/ColorRamps/texRampTritone3.png").WaitForCompletion()); Log.Debug("swapped solus heart reward material shader"); } } FamilyDirectorCardCategorySelection val2 = Addressables.LoadAssetAsync<FamilyDirectorCardCategorySelection>((object)"RoR2/DLC3/dccsSuperRoboBallpitFamily.asset").WaitForCompletion(); if (Object.op_Implicit((Object)(object)val2)) { Category[] categories = ((DirectorCardCategorySelection)val2).categories; foreach (Category val3 in categories) { DirectorCard[] cards = val3.cards; foreach (DirectorCard val4 in cards) { if (Object.op_Implicit((Object)(object)val4.spawnCard) && Object.op_Implicit((Object)(object)val4.spawnCard.prefab)) { solusFamilyBodyNames.Add(((Object)val4.spawnCard.prefab).name); } } } } impactEffectPrefab = assetBundle.LoadAsset<GameObject>("SolusHeartRewardImpactEffect"); ContentAddition.AddEffect(impactEffectPrefab); nullHeart = ScriptableObject.CreateInstance<ItemDef>(); ((Object)nullHeart).name = "ITEM_SOLUSHEARTREWARD_NAME"; nullHeart.nameToken = "ITEM_SOLUSHEARTREWARD_NAME"; nullHeart.pickupToken = "ITEM_SOLUSHEARTREWARD_PICKUP"; nullHeart.descriptionToken = "ITEM_SOLUSHEARTREWARD_DESC"; nullHeart.loreToken = "ITEM_SOLUSHEARTREWARD_LORE"; nullHeart._itemTierDef = Addressables.LoadAssetAsync<ItemTierDef>((object)RoR2_Base_Common.BossTierDef_asset).WaitForCompletion(); nullHeart.pickupIconSprite = assetBundle.LoadAsset<Sprite>("SolusHeartPickup"); nullHeart.pickupModelPrefab = assetBundle.LoadAsset<GameObject>("SolusHeartReward"); ItemDef obj = nullHeart; ItemTag[] array2 = new ItemTag[6]; RuntimeHelpers.InitializeArray(array2, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/); obj.tags = (ItemTag[])(object)array2; nullHeart.hidden = false; nullHeart.canRemove = true; ItemDisplayRuleDict val5 = new ItemDisplayRuleDict((ItemDisplayRule[])null); ItemAPI.Add(new CustomItem(nullHeart, val5)); Configs(); Death.OnEnter += new Manipulator(DeathOnOnEnter); BodyCatalog.SetBodyPrefabs += (hook_SetBodyPrefabs)delegate(orig_SetBodyPrefabs orig, GameObject[] prefabs) { orig.Invoke(prefabs); updateEnemyList(); }; } private void Configs() { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Expected O, but got Unknown //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Expected O, but got Unknown //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Expected O, but got Unknown //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Expected O, but got Unknown //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Expected O, but got Unknown //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Expected O, but got Unknown //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Expected O, but got Unknown //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Expected O, but got Unknown blacklist = ((BaseUnityPlugin)this).Config.Bind<string>("Solus Heart Reward", "enemy blacklist", "MinePod,ExtractorUnit,DefectiveUnit", "internal enemy body names (can be found on wiki !!( seperated by comma to disable when have solus heart reward !!!"); blacklist.SettingChanged += delegate { updateEnemyList(); }; ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(blacklist)); logDebug = ((BaseUnityPlugin)this).Config.Bind<bool>("Solus Heart Reward", "log debug", false, "log names of spawn cards that arent in enabled config when attempted to spawn !!"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(logDebug)); silenceSPEX = ((BaseUnityPlugin)this).Config.Bind<bool>("Solus Heart Reward", "silence spex !!!!", true, "makes spex silent post defeating solus heart !!"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(silenceSPEX)); enableProc = ((BaseUnityPlugin)this).Config.Bind<bool>("Solus Heart Reward", "Solus family on hit proc", true, "gives null heart a on hit chance to deal extra damage to solus family enemies !!"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(enableProc)); useMechFlag = ((BaseUnityPlugin)this).Config.Bind<bool>("Solus Heart Reward", "proc on mechanical enemies", false, "have null heart proc on any mechanical enemy instead of just solus !!! !!"); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(useMechFlag)); procChance = ((BaseUnityPlugin)this).Config.Bind<int>("Solus Heart Reward", "On hit proc chance", 25, "chance for null heart to proc against enemies !!"); IntSliderConfig val = new IntSliderConfig { formatString = "{0}%", min = 1, max = 100 }; ModSettingsManager.AddOption((BaseOption)new IntSliderOption(procChance, val)); procDamage = ((BaseUnityPlugin)this).Config.Bind<int>("Solus Heart Reward", "Null heart damage", 50, "percent of damage null heart should give extra on proc !!"); IntSliderConfig val2 = new IntSliderConfig { formatString = "{0}%", min = 1, max = 100 }; ModSettingsManager.AddOption((BaseOption)new IntSliderOption(procDamage, val2)); descFormat = ((BaseUnityPlugin)this).Config.Bind<string>("Solus Heart Reward", "description format", "Prevent <style=\"cIsUtility\">{0}</style> from spawning{1}.", "like evil version of lang file for description .,.,., {0} is the list of enemies prevented from spawning and {1} is the proc description !!!!"); ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(descFormat)); procFormat = ((BaseUnityPlugin)this).Config.Bind<string>("Solus Heart Reward", "proc format", "and gain a <style=\"cIsUtility\">{0}%</style> chance to deal <style=\"cIsDamage\">{1}%</style> TOTAL damage against {2} enemies", "like evil version of lang file for proc .,.,., {0} is the chance and {1} is the damage !!!! {2} is for if mechanical flag is used instead of solus .,,."); ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(procFormat)); } private void updateEnemyList() { blacklistArray = blacklist.Value.Replace(" ", "").Replace("body", "").Split(','); string text = ""; string[] array = blacklistArray; foreach (string text2 in array) { GameObject[] bodyPrefabs = BodyCatalog.bodyPrefabs; foreach (GameObject val in bodyPrefabs) { if (string.Equals(((Object)val).name, text2 + "Body", StringComparison.CurrentCultureIgnoreCase) && !((Object)(object)val.GetComponent<CharacterBody>() == (Object)null)) { text = text + Language.GetString(val.GetComponent<CharacterBody>().baseNameToken) + "s</style>, <style=\"cIsUtility\">"; } } } string text3 = text; text = text3.Substring(0, text3.Length - 30); int num = text.LastIndexOf(", ", StringComparison.Ordinal); if (num != -1) { text = text.Remove(num, 2).Insert(num, " and "); } string arg = "solus"; if (useMechFlag.Value) { arg = "mechanical"; } string arg2 = ""; if (enableProc.Value) { arg2 = " " + string.Format(procFormat.Value, procChance.Value, procDamage.Value, arg); } LanguageAPI.Add("ITEM_SOLUSHEARTREWARD_DESC", string.Format(descFormat.Value, text, arg2)); } private void DeathOnOnEnter(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 0), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 7) })) { val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<Death, Quaternion>>((Func<Death, Quaternion>)((Death _) => Quaternion.AngleAxis(360f / (float)(Run.instance.participatingPlayerCount + 1), Vector3.up))); val.Emit(OpCodes.Stloc_S, (byte)6); val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldloc_3); val.Emit(OpCodes.Ldloc_S, (byte)5); val.EmitDelegate<Action<Death, Vector3, Vector3>>((Action<Death, Vector3, Vector3>)delegate(Death death, Vector3 vector, Vector3 corepos) { //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) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(nullHeart.itemIndex), vector, corepos); }); val.Emit(OpCodes.Ldloc_S, (byte)6); val.Emit(OpCodes.Ldloc_S, (byte)5); val.Emit(OpCodes.Call, (MethodBase)typeof(Quaternion).GetMethod("op_Multiply", new Type[2] { typeof(Quaternion), typeof(Vector3) })); val.Emit(OpCodes.Stloc_S, (byte)5); } else { Log.Fatal("failed il hook on solus heart finale sequence death on enter !!"); } } private void Update() { } } }