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 Impermanence v1.0.3
Impermanence.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; 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 IL.RoR2; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.RoR2; using On.RoR2.UI.LogBook; using R2API; using R2API.Utils; using RoR2; using RoR2.UI; using RoR2.UI.LogBook; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; 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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Impermanence")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+bb793b838638f3dc819d44b841d1a7e0ea85fba9")] [assembly: AssemblyProduct("Impermanence")] [assembly: AssemblyTitle("Impermanence")] [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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Impermanence { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("Braquen.Impermanance", "Impermanance", "1.0.3")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class ImpermanencePlugin : BaseUnityPlugin { public const string PluginGUID = "Braquen.Impermanance"; public const string PluginAuthor = "Braquen"; public const string PluginName = "Impermanance"; public const string PluginVersion = "1.0.3"; public static PluginInfo pluginInfo; public static AssetBundle AssetBundle; public void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); pluginInfo = ((BaseUnityPlugin)this).Info; AssetBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(pluginInfo.Location), "impermanenceassetbundle")); if ((bool)ExtraItemsLunar.isEnabled) { GenericGameEvents.Init(); ExtraItemsLunar.Init(); } } } public class ExtraItemsLunar { public class ImpermanenceBehaviour : ItemBehavior { public float countdownTimer = baseTimer; public bool diedFromTimer = false; private bool bossDefeated = false; public bool countdown10Played = false; public uint countdown10ID; public HUD bodyHud; public GameObject hudPanel = null; public void Start() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown Log.Debug("ImpermanenceBehavior:Start()"); hudPanel = null; UpdateItemBasedInfo(); base.body.onInventoryChanged += Body_onInventoryChanged; Stage.onStageStartGlobal += Stage_onStageStartGlobal; BossGroup.OnDefeatedServer += new hook_OnDefeatedServer(BossGroup_onDefeatedServer); } public void Update() { //IL_0147: 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) if ((Object)(object)bodyHud == (Object)null) { foreach (HUD readOnlyInstance in HUD.readOnlyInstanceList) { if ((Object)(object)readOnlyInstance.targetBodyObject == (Object)(object)((Component)base.body).gameObject) { bodyHud = readOnlyInstance; } } } if (base.stack > 0 && !bossDefeated) { countdownTimer -= Time.deltaTime; if (diedFromTimer) { return; } SetHudCountdownEnabled(shouldEnableCountdownPanel: true); SetCountdownTime(countdownTimer); if (countdownTimer <= 10f && !countdown10Played) { countdown10Played = true; countdown10ID = Util.PlaySound("Play_UI_arenaMode_coundown_loop", ((Component)base.body).gameObject); } if (countdownTimer <= 0f) { SetCountdownTime(0.0); diedFromTimer = true; if (NetworkServer.active) { base.body.healthComponent.Suicide((GameObject)null, (GameObject)null, default(DamageTypeCombo)); } if (countdown10Played) { countdown10Played = false; AkSoundEngine.StopPlayingID(countdown10ID); } } } else { SetHudCountdownEnabled(shouldEnableCountdownPanel: false); SetTimer(baseTimer); if (countdown10Played) { countdown10Played = false; AkSoundEngine.StopPlayingID(countdown10ID); } } } public void OnDestroy() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown SetHudCountdownEnabled(shouldEnableCountdownPanel: false); if (Object.op_Implicit((Object)(object)base.body)) { base.body.onInventoryChanged -= Body_onInventoryChanged; } Stage.onStageStartGlobal -= Stage_onStageStartGlobal; BossGroup.OnDefeatedServer -= new hook_OnDefeatedServer(BossGroup_onDefeatedServer); } public void Body_onInventoryChanged() { UpdateItemBasedInfo(); } public void Stage_onStageStartGlobal(Stage stage) { UpdateItemBasedInfo(); bossDefeated = false; } public void BossGroup_onDefeatedServer(orig_OnDefeatedServer orig, BossGroup self) { if (((Object)self).name != "SuperRoboBallEncounter" && ((Object)self).name != "ShadowCloneEncounter(Clone)") { bossDefeated = true; } orig.Invoke(self); } public void UpdateItemBasedInfo() { if (Object.op_Implicit((Object)(object)base.body)) { if (base.stack < 1) { countdownTimer = baseTimer; } else { countdownTimer = Mathf.Min((float)baseTimer * Mathf.Pow(1f - timerDecreasePercent, (float)(base.stack - 1)), countdownTimer); } } } public void SetTimer(float time) { countdownTimer = time; } public int TryDoubleItem() { if (!Object.op_Implicit((Object)(object)base.body) || bossDefeated) { return 1; } float num = bonusChancePercent * (float)base.stack; int num2 = (int)MathF.Floor(num); if (Util.CheckRoll((num - (float)num2) * 100f, base.body.master)) { num2++; } return num2 + 1; } public void SetHudCountdownEnabled(bool shouldEnableCountdownPanel) { if ((Object)(object)hudPanel != (Object)null == shouldEnableCountdownPanel) { return; } if (shouldEnableCountdownPanel && (Object)(object)bodyHud != (Object)null) { Transform obj = ((Component)bodyHud).GetComponent<ChildLocator>().FindChild("TopCenterCluster"); RectTransform val = (RectTransform)(object)((obj is RectTransform) ? obj : null); if (Object.op_Implicit((Object)(object)val)) { hudPanel = Object.Instantiate<GameObject>(hudTimer, (Transform)(object)val); } } else { Object.Destroy((Object)(object)hudPanel); hudPanel = null; } } public void SetCountdownTime(double secondsRemaining) { if (!((Object)(object)hudPanel == (Object)null)) { hudPanel.GetComponent<TimerText>().seconds = secondsRemaining; } } public void OnEnable() { InstanceTracker.Add<ImpermanenceBehaviour>(this); } public void OnDisable() { InstanceTracker.Remove<ImpermanenceBehaviour>(this); } } public class ImpermanenceMultiplyItemBehaviour : MonoBehaviour { public int multiplier; } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Action <>9__8_0; public static hook_OnInventoryChanged <>9__9_0; public static hook_OnInteractionBegin <>9__9_1; public static hook_ItemDrop <>9__9_2; internal void <Init>b__8_0() { if (Object.op_Implicit((Object)(object)itemDef)) { itemDef.tier = (ItemTier)3; } } internal void <Hooks>b__9_0(orig_OnInventoryChanged orig, CharacterBody self) { self.AddItemBehavior<ImpermanenceBehaviour>(self.inventory.GetItemCount(itemDef)); orig.Invoke(self); } internal void <Hooks>b__9_1(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator) { if (!self.saleStarCompatible || !self.CanBeAffordedByInteractor(activator)) { orig.Invoke(self, activator); return; } CharacterBody component = ((Component)activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { ImpermanenceBehaviour component2 = ((Component)component).GetComponent<ImpermanenceBehaviour>(); if (!Object.op_Implicit((Object)(object)component2)) { orig.Invoke(self, activator); return; } int num = component2.TryDoubleItem(); if (num > 1) { Util.PlaySound("Play_item_proc_lowerPricedChest", ((Component)component).gameObject); ImpermanenceMultiplyItemBehaviour impermanenceMultiplyItemBehaviour = ((Component)self).gameObject.AddComponent<ImpermanenceMultiplyItemBehaviour>(); impermanenceMultiplyItemBehaviour.multiplier = num; } } orig.Invoke(self, activator); } internal void <Hooks>b__9_2(orig_ItemDrop orig, ChestBehavior self) { PurchaseInteraction component = ((Component)self).gameObject.GetComponent<PurchaseInteraction>(); if (Object.op_Implicit((Object)(object)component)) { ImpermanenceMultiplyItemBehaviour component2 = ((Component)component).GetComponent<ImpermanenceMultiplyItemBehaviour>(); if (Object.op_Implicit((Object)(object)component2)) { self.dropCount *= component2.multiplier; } } orig.Invoke(self); } internal string <.cctor>b__16_0(int i) { return "PLAYER_DEATH_QUOTE_EXTRAITEMSLUNAR_" + TextSerialization.ToStringInvariant(i); } } public static ItemDef itemDef; private static GameObject hudTimer; public static ConfigurableValue<bool> isEnabled = new ConfigurableValue<bool>("Item: Impermanence", "Enabled", defaultValue: true, "Whether or not the item is enabled.", new List<string> { "ITEM_EXTRAITEMSLUNAR_DESC" }); public static ConfigurableValue<float> baseTimer = new ConfigurableValue<float>("Item: Impermanence", "Base Time Limit", 600f, "The time limit with one stack of impermanence.", new List<string> { "ITEM_EXTRAITEMSLUNAR_DESC" }); public static ConfigurableValue<float> bonusChancePerStack = new ConfigurableValue<float>("Item: Impermanence", "Chance per Stack", 20f, "The chance of getting bonus items as a percentage.", new List<string> { "ITEM_EXTRAITEMSLUNAR_DESC" }); public static ConfigurableValue<float> timePerStack = new ConfigurableValue<float>("Item: Impermanence", "Time Decrease per Stack", 15f, "The decrease in remaining time as a percentage.", new List<string> { "ITEM_EXTRAITEMSLUNAR_DESC" }); public static float bonusChancePercent = (float)bonusChancePerStack / 100f; public static float timerDecreasePercent = (float)timePerStack / 100f; public static string[] impermanenceDeathQuoteTokens = (from i in Enumerable.Range(0, 5) select "PLAYER_DEATH_QUOTE_EXTRAITEMSLUNAR_" + TextSerialization.ToStringInvariant(i)).ToArray(); internal static void Init() { //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Expected O, but got Unknown //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"Initializing Impermanence Item"); itemDef = ScriptableObject.CreateInstance<ItemDef>(); ((Object)itemDef).name = "EXTRAITEMSLUNAR"; itemDef.nameToken = "ITEM_EXTRAITEMSLUNAR_NAME"; itemDef.pickupToken = "ITEM_EXTRAITEMSLUNAR_PICKUP"; itemDef.descriptionToken = "ITEM_EXTRAITEMSLUNAR_DESC"; itemDef.loreToken = "ITEM_EXTRAITEMSLUNAR_LORE"; itemDef.AutoPopulateTokens(); ((ResourceAvailability)(ref ItemTierCatalog.availability)).CallWhenAvailable((Action)delegate { if (Object.op_Implicit((Object)(object)itemDef)) { itemDef.tier = (ItemTier)3; } }); ItemDef obj = itemDef; ItemTag[] array = new ItemTag[4]; RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/); obj.tags = (ItemTag[])(object)array; itemDef.pickupIconSprite = ImpermanencePlugin.AssetBundle.LoadAsset<Sprite>("Assets/Items/impermanence/Icon.png"); itemDef.pickupModelPrefab = ImpermanencePlugin.AssetBundle.LoadAsset<GameObject>("Assets/Items/impermanence/Model.prefab"); ModelPanelParameters val = itemDef.pickupModelPrefab.AddComponent<ModelPanelParameters>(); val.minDistance = 5f; val.maxDistance = 10f; itemDef.canRemove = true; itemDef.hidden = false; ItemDisplayRuleDict val2 = makeDisplayRules(); ItemAPI.Add(new CustomItem(itemDef, val2)); hudTimer = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/HudCountdownPanel.prefab").WaitForCompletion(), "ImpermanenceCountdownPanel"); ((Component)hudTimer.transform.Find("Juice/Container/CountdownTitleLabel")).GetComponent<LanguageTextMeshController>().token = "IMPERMANENCE_TIMER_FLAVOUR"; Color32 val3 = default(Color32); ((Color32)(ref val3))..ctor((byte)0, (byte)157, byte.MaxValue, byte.MaxValue); ((Graphic)((Component)hudTimer.transform.Find("Juice/Container/Border")).GetComponent<Image>()).color = Color32.op_Implicit(val3); ((Graphic)((Component)hudTimer.transform.Find("Juice/Container/CountdownLabel")).GetComponent<HGTextMeshProUGUI>()).color = Color32.op_Implicit(val3); Hooks(); Debug.Log((object)"Impermanence Initialized"); } public static void Hooks() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown object obj = <>c.<>9__9_0; if (obj == null) { hook_OnInventoryChanged val = delegate(orig_OnInventoryChanged orig, CharacterBody self) { self.AddItemBehavior<ImpermanenceBehaviour>(self.inventory.GetItemCount(itemDef)); orig.Invoke(self); }; <>c.<>9__9_0 = val; obj = (object)val; } CharacterBody.OnInventoryChanged += (hook_OnInventoryChanged)obj; object obj2 = <>c.<>9__9_1; if (obj2 == null) { hook_OnInteractionBegin val2 = delegate(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator) { if (!self.saleStarCompatible || !self.CanBeAffordedByInteractor(activator)) { orig.Invoke(self, activator); } else { CharacterBody component3 = ((Component)activator).GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component3)) { ImpermanenceBehaviour component4 = ((Component)component3).GetComponent<ImpermanenceBehaviour>(); if (!Object.op_Implicit((Object)(object)component4)) { orig.Invoke(self, activator); return; } int num = component4.TryDoubleItem(); if (num > 1) { Util.PlaySound("Play_item_proc_lowerPricedChest", ((Component)component3).gameObject); ImpermanenceMultiplyItemBehaviour impermanenceMultiplyItemBehaviour = ((Component)self).gameObject.AddComponent<ImpermanenceMultiplyItemBehaviour>(); impermanenceMultiplyItemBehaviour.multiplier = num; } } orig.Invoke(self, activator); } }; <>c.<>9__9_1 = val2; obj2 = (object)val2; } PurchaseInteraction.OnInteractionBegin += (hook_OnInteractionBegin)obj2; object obj3 = <>c.<>9__9_2; if (obj3 == null) { hook_ItemDrop val3 = delegate(orig_ItemDrop orig, ChestBehavior self) { PurchaseInteraction component = ((Component)self).gameObject.GetComponent<PurchaseInteraction>(); if (Object.op_Implicit((Object)(object)component)) { ImpermanenceMultiplyItemBehaviour component2 = ((Component)component).GetComponent<ImpermanenceMultiplyItemBehaviour>(); if (Object.op_Implicit((Object)(object)component2)) { self.dropCount *= component2.multiplier; } } orig.Invoke(self); }; <>c.<>9__9_2 = val3; obj3 = (object)val3; } ChestBehavior.ItemDrop += (hook_ItemDrop)obj3; GenericGameEvents.OnPlayerCharacterDeath += GenericGameEvents_OnPlayerCharacterDeath; } public static void GenericGameEvents_OnPlayerCharacterDeath(DamageReport damageReport, ref string deathQuote) { if (Object.op_Implicit((Object)(object)damageReport.victimBody)) { ImpermanenceBehaviour component = ((Component)damageReport.victimBody).GetComponent<ImpermanenceBehaviour>(); if (Object.op_Implicit((Object)(object)component) && component.diedFromTimer) { deathQuote = impermanenceDeathQuoteTokens[Random.Range(0, impermanenceDeathQuoteTokens.Length)]; } } } public static ItemDisplayRuleDict makeDisplayRules() { //IL_000b: 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) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0163: 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_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //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_01a5: 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_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_022c: 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_0233: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02db: Unknown result type (might be due to invalid IL or missing references) //IL_030e: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Unknown result type (might be due to invalid IL or missing references) //IL_0349: Unknown result type (might be due to invalid IL or missing references) //IL_034e: Unknown result type (might be due to invalid IL or missing references) //IL_0350: Unknown result type (might be due to invalid IL or missing references) //IL_0361: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Unknown result type (might be due to invalid IL or missing references) //IL_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_03d3: Unknown result type (might be due to invalid IL or missing references) //IL_03d8: Unknown result type (might be due to invalid IL or missing references) //IL_03dd: Unknown result type (might be due to invalid IL or missing references) //IL_03df: Unknown result type (might be due to invalid IL or missing references) //IL_03f0: Unknown result type (might be due to invalid IL or missing references) //IL_03f9: Unknown result type (might be due to invalid IL or missing references) //IL_042c: Unknown result type (might be due to invalid IL or missing references) //IL_0431: Unknown result type (might be due to invalid IL or missing references) //IL_0447: Unknown result type (might be due to invalid IL or missing references) //IL_044c: Unknown result type (might be due to invalid IL or missing references) //IL_0462: Unknown result type (might be due to invalid IL or missing references) //IL_0467: Unknown result type (might be due to invalid IL or missing references) //IL_046c: Unknown result type (might be due to invalid IL or missing references) //IL_046e: Unknown result type (might be due to invalid IL or missing references) //IL_047f: Unknown result type (might be due to invalid IL or missing references) //IL_0488: Unknown result type (might be due to invalid IL or missing references) //IL_04bb: Unknown result type (might be due to invalid IL or missing references) //IL_04c0: Unknown result type (might be due to invalid IL or missing references) //IL_04d6: Unknown result type (might be due to invalid IL or missing references) //IL_04db: Unknown result type (might be due to invalid IL or missing references) //IL_04f1: Unknown result type (might be due to invalid IL or missing references) //IL_04f6: Unknown result type (might be due to invalid IL or missing references) //IL_04fb: Unknown result type (might be due to invalid IL or missing references) //IL_04fd: Unknown result type (might be due to invalid IL or missing references) //IL_050e: Unknown result type (might be due to invalid IL or missing references) //IL_0517: Unknown result type (might be due to invalid IL or missing references) //IL_054a: Unknown result type (might be due to invalid IL or missing references) //IL_054f: Unknown result type (might be due to invalid IL or missing references) //IL_0565: Unknown result type (might be due to invalid IL or missing references) //IL_056a: Unknown result type (might be due to invalid IL or missing references) //IL_0580: Unknown result type (might be due to invalid IL or missing references) //IL_0585: Unknown result type (might be due to invalid IL or missing references) //IL_058a: Unknown result type (might be due to invalid IL or missing references) //IL_058c: Unknown result type (might be due to invalid IL or missing references) //IL_059d: Unknown result type (might be due to invalid IL or missing references) //IL_05a6: Unknown result type (might be due to invalid IL or missing references) //IL_05d9: Unknown result type (might be due to invalid IL or missing references) //IL_05de: Unknown result type (might be due to invalid IL or missing references) //IL_05f4: Unknown result type (might be due to invalid IL or missing references) //IL_05f9: Unknown result type (might be due to invalid IL or missing references) //IL_060f: Unknown result type (might be due to invalid IL or missing references) //IL_0614: Unknown result type (might be due to invalid IL or missing references) //IL_0619: Unknown result type (might be due to invalid IL or missing references) //IL_061b: Unknown result type (might be due to invalid IL or missing references) //IL_062c: Unknown result type (might be due to invalid IL or missing references) //IL_0635: Unknown result type (might be due to invalid IL or missing references) //IL_0668: Unknown result type (might be due to invalid IL or missing references) //IL_066d: Unknown result type (might be due to invalid IL or missing references) //IL_0683: Unknown result type (might be due to invalid IL or missing references) //IL_0688: Unknown result type (might be due to invalid IL or missing references) //IL_069e: Unknown result type (might be due to invalid IL or missing references) //IL_06a3: Unknown result type (might be due to invalid IL or missing references) //IL_06a8: Unknown result type (might be due to invalid IL or missing references) //IL_06aa: Unknown result type (might be due to invalid IL or missing references) //IL_06bb: Unknown result type (might be due to invalid IL or missing references) //IL_06c4: Unknown result type (might be due to invalid IL or missing references) //IL_06f7: Unknown result type (might be due to invalid IL or missing references) //IL_06fc: Unknown result type (might be due to invalid IL or missing references) //IL_0712: Unknown result type (might be due to invalid IL or missing references) //IL_0717: Unknown result type (might be due to invalid IL or missing references) //IL_072d: Unknown result type (might be due to invalid IL or missing references) //IL_0732: Unknown result type (might be due to invalid IL or missing references) //IL_0737: Unknown result type (might be due to invalid IL or missing references) //IL_0739: Unknown result type (might be due to invalid IL or missing references) //IL_074a: Unknown result type (might be due to invalid IL or missing references) //IL_0753: Unknown result type (might be due to invalid IL or missing references) //IL_0786: Unknown result type (might be due to invalid IL or missing references) //IL_078b: Unknown result type (might be due to invalid IL or missing references) //IL_07a1: Unknown result type (might be due to invalid IL or missing references) //IL_07a6: Unknown result type (might be due to invalid IL or missing references) //IL_07bc: Unknown result type (might be due to invalid IL or missing references) //IL_07c1: Unknown result type (might be due to invalid IL or missing references) //IL_07c6: Unknown result type (might be due to invalid IL or missing references) //IL_07c8: Unknown result type (might be due to invalid IL or missing references) //IL_07d9: Unknown result type (might be due to invalid IL or missing references) //IL_07e2: Unknown result type (might be due to invalid IL or missing references) //IL_0815: Unknown result type (might be due to invalid IL or missing references) //IL_081a: Unknown result type (might be due to invalid IL or missing references) //IL_0830: Unknown result type (might be due to invalid IL or missing references) //IL_0835: Unknown result type (might be due to invalid IL or missing references) //IL_084b: Unknown result type (might be due to invalid IL or missing references) //IL_0850: Unknown result type (might be due to invalid IL or missing references) //IL_0855: Unknown result type (might be due to invalid IL or missing references) //IL_0857: Unknown result type (might be due to invalid IL or missing references) //IL_0868: Unknown result type (might be due to invalid IL or missing references) //IL_0871: Unknown result type (might be due to invalid IL or missing references) //IL_08a4: Unknown result type (might be due to invalid IL or missing references) //IL_08a9: Unknown result type (might be due to invalid IL or missing references) //IL_08bf: Unknown result type (might be due to invalid IL or missing references) //IL_08c4: Unknown result type (might be due to invalid IL or missing references) //IL_08da: Unknown result type (might be due to invalid IL or missing references) //IL_08df: Unknown result type (might be due to invalid IL or missing references) //IL_08e4: Unknown result type (might be due to invalid IL or missing references) //IL_08e6: Unknown result type (might be due to invalid IL or missing references) //IL_08f7: Unknown result type (might be due to invalid IL or missing references) //IL_0900: Unknown result type (might be due to invalid IL or missing references) //IL_0933: Unknown result type (might be due to invalid IL or missing references) //IL_0938: Unknown result type (might be due to invalid IL or missing references) //IL_094e: Unknown result type (might be due to invalid IL or missing references) //IL_0953: Unknown result type (might be due to invalid IL or missing references) //IL_0969: Unknown result type (might be due to invalid IL or missing references) //IL_096e: Unknown result type (might be due to invalid IL or missing references) //IL_0973: Unknown result type (might be due to invalid IL or missing references) //IL_0975: Unknown result type (might be due to invalid IL or missing references) //IL_0986: Unknown result type (might be due to invalid IL or missing references) //IL_098f: Unknown result type (might be due to invalid IL or missing references) //IL_09c2: Unknown result type (might be due to invalid IL or missing references) //IL_09c7: Unknown result type (might be due to invalid IL or missing references) //IL_09dd: Unknown result type (might be due to invalid IL or missing references) //IL_09e2: Unknown result type (might be due to invalid IL or missing references) //IL_09f8: Unknown result type (might be due to invalid IL or missing references) //IL_09fd: Unknown result type (might be due to invalid IL or missing references) //IL_0a02: Unknown result type (might be due to invalid IL or missing references) //IL_0a04: Unknown result type (might be due to invalid IL or missing references) //IL_0a0c: Unknown result type (might be due to invalid IL or missing references) //IL_0a13: Expected O, but got Unknown ItemDisplayRule[] array = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Head", localPos = new Vector3(0f, 0.43f, 0f), localAngles = new Vector3(0f, 0f, 0f), localScale = new Vector3(0.05f, 0.05f, 0.05f) } }; ItemDisplayRule[] array2 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Head", localPos = new Vector3(0f, 0.43f, 0f), localAngles = new Vector3(0f, 0f, 0f), localScale = new Vector3(0.05f, 0.05f, 0.05f) } }; ItemDisplayRule[] array3 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Head", localPos = new Vector3(0f, 0.35f, -0.09f), localAngles = new Vector3(345f, 0f, 0f), localScale = new Vector3(0.05f, 0.05f, 0.05f) } }; ItemDisplayRule[] array4 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Head", localPos = new Vector3(0f, 0.23f, 0f), localAngles = new Vector3(355f, 0f, 0f), localScale = new Vector3(0.04f, 0.04f, 0.04f) } }; ItemDisplayRule[] array5 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Head", localPos = new Vector3(-1.44f, 3.71f, 0.37f), localAngles = new Vector3(55f, 0f, 0f), localScale = new Vector3(0.2f, 0.2f, 0.2f) } }; ItemDisplayRule[] array6 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "MuzzleRight", localPos = new Vector3(-0.1725f, -0.17242f, -0.29035f), localAngles = new Vector3(315f, 270f, 180f), localScale = new Vector3(0.031f, 0.03f, 0.031f) } }; ItemDisplayRule[] array7 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Chest", localPos = new Vector3(-0.11179f, 0.33944f, -0.17685f), localAngles = new Vector3(10f, 0f, 0f), localScale = new Vector3(0.05f, 0.05f, 0.05f) } }; ItemDisplayRule[] array8 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Chest", localPos = new Vector3(0.00322f, 0.28508f, -0.22849f), localAngles = new Vector3(0f, 90f, 0f), localScale = new Vector3(0.02f, 0.02f, 0.02f) } }; ItemDisplayRule[] array9 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "FlowerBase", localPos = new Vector3(-0.66143f, 0.72885f, 0.48302f), localAngles = new Vector3(0f, 180f, 0f), localScale = new Vector3(0.05f, 0.05f, 0.05f) } }; ItemDisplayRule[] array10 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "MechBase", localPos = new Vector3(0.15849f, 0.38956f, 0.42917f), localAngles = new Vector3(0f, 180f, 0f), localScale = new Vector3(0.02f, 0.02f, 0.02f) } }; ItemDisplayRule[] array11 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "SpineChest1", localPos = new Vector3(1.61135f, 3.34974f, 5.01534f), localAngles = new Vector3(0f, 0f, 0f), localScale = new Vector3(0.2f, 0.2f, 0.2f) } }; ItemDisplayRule[] array12 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "ClavicleL", localPos = new Vector3(-0.00551f, 0.00861f, -0.13122f), localAngles = new Vector3(270f, 0f, 0f), localScale = new Vector3(0.05f, 0.05f, 0.05f) } }; ItemDisplayRule[] array13 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Backpack", localPos = new Vector3(-0.16635f, 0.43282f, 0.00679f), localAngles = new Vector3(0f, 0f, 0f), localScale = new Vector3(0.05f, 0.05f, 0.05f) } }; ItemDisplayRule[] array14 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Chest", localPos = new Vector3(-0.13114f, 0.28689f, -0.30823f), localAngles = new Vector3(290f, 0f, 0f), localScale = new Vector3(0.03f, 0.05f, 0.03f) } }; ItemDisplayRule[] array15 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Pack", localPos = new Vector3(-0.26289f, 0.1602f, -0.21764f), localAngles = new Vector3(345f, 90f, 0f), localScale = new Vector3(0.05f, 0.05f, 0.05f) } }; ItemDisplayRule[] array16 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Chest", localPos = new Vector3(-0.3189f, 0.16636f, -0.2061f), localAngles = new Vector3(0f, 0f, 90f), localScale = new Vector3(0.05f, 0.05f, 0.05f) } }; ItemDisplayRule[] array17 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Pelvis", localPos = new Vector3(0.05234f, 0.12436f, 0.11509f), localAngles = new Vector3(5f, 225f, 0f), localScale = new Vector3(0.05f, 0.05f, 0.05f) } }; ItemDisplayRule[] array18 = (ItemDisplayRule[])(object)new ItemDisplayRule[1] { new ItemDisplayRule { ruleType = (ItemDisplayRuleType)0, followerPrefab = itemDef.pickupModelPrefab, childName = "Head", localPos = new Vector3(2.87f, 6.93f, -2.89f), localAngles = new Vector3(35f, 0f, 0f), localScale = new Vector3(0.5f, 0.75f, 0.5f) } }; ItemDisplayRuleDict val = new ItemDisplayRuleDict(array); val.Add("CommandoBody", array2); val.Add("HuntressBody", array3); val.Add("Bandit2Body", array4); val.Add("ToolbotBody", array5); val.Add("EngiBody", array6); val.Add("MageBody", array7); val.Add("MercBody", array8); val.Add("TreebotBody", array9); val.Add("LoaderBody", array10); val.Add("CrocoBody", array11); val.Add("CaptainBody", array12); val.Add("RailgunnerBody", array13); val.Add("VoidSurvivorBody", array14); val.Add("SeekerBody", array15); val.Add("ChefBody", array16); val.Add("FalseSonBody", array17); val.Add("ScavBody", array18); return val; } } 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); } } public static class ConfigManager { public static class Scaling { public static ConfigFile config = new ConfigFile(Paths.ConfigPath + "\\Impermanence.cfg", true); public static string categoryName = "Impermanence Config"; public static string categoryGUID = "Braquen.Impermanance_config"; public static ConfigOptions.ConfigurableValue<bool> useCustomValues = ConfigOptions.ConfigurableValue.CreateBool(categoryGUID, categoryName, config, "! Important !", "Use Custom Config", defaultValue: false, "Set to true to enable custom configurations."); } } public class ConfigurableValue<T> : ConfigOptions.ConfigurableValue<T> { public ConfigurableValue(string section, string key, float defaultValue, string description = "", List<string> stringsToAffect = null, Action<float> onChanged = null) : base(ConfigManager.Scaling.config, section, key, (T)Convert.ChangeType(defaultValue, typeof(T)), description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, (Action<T>)null) { ConfigOptions.ConfigurableValue.CreateFloat(ConfigManager.Scaling.categoryGUID, ConfigManager.Scaling.categoryName, ConfigManager.Scaling.config, section, key, defaultValue, 0f, 1000000f, description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, onChanged); } public ConfigurableValue(string section, string key, int defaultValue, string description = "", List<string> stringsToAffect = null, Action<int> onChanged = null) : base(ConfigManager.Scaling.config, section, key, (T)Convert.ChangeType(defaultValue, typeof(T)), description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, (Action<T>)null) { ConfigOptions.ConfigurableValue.CreateInt(ConfigManager.Scaling.categoryGUID, ConfigManager.Scaling.categoryName, ConfigManager.Scaling.config, section, key, defaultValue, 0, 1000000, description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, onChanged); } public ConfigurableValue(string section, string key, bool defaultValue, string description = "", List<string> stringsToAffect = null, Action<bool> onChanged = null) : base(ConfigManager.Scaling.config, section, key, (T)Convert.ChangeType(defaultValue, typeof(T)), description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, (Action<T>)null) { ConfigOptions.ConfigurableValue.CreateBool(ConfigManager.Scaling.categoryGUID, ConfigManager.Scaling.categoryName, ConfigManager.Scaling.config, section, key, defaultValue, description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, onChanged); } public ConfigurableValue(string section, string key, string defaultValue, string description = "", List<string> stringsToAffect = null, Action<string> onChanged = null) : base(ConfigManager.Scaling.config, section, key, (T)Convert.ChangeType(defaultValue, typeof(T)), description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, (Action<T>)null) { ConfigOptions.ConfigurableValue.CreateString(ConfigManager.Scaling.categoryGUID, ConfigManager.Scaling.categoryName, ConfigManager.Scaling.config, section, key, defaultValue, description, stringsToAffect, ConfigManager.Scaling.useCustomValues.bepinexConfigEntry, restartRequired: false, onChanged); } } public static class ConfigOptions { public abstract class ConfigurableValue { public static List<ConfigurableValue> instancesList = new List<ConfigurableValue>(); public List<string> stringsToAffect = new List<string>(); public string key = ""; public string id = ""; public static ConfigurableValue<T> Create<T>(ConfigFile configFile, string section, string key, T defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<T> onChanged = null) { return new ConfigurableValue<T>(configFile, section, key, defaultValue, description, stringsToAffect, useCustomValueConfigEntry, restartRequired, onChanged); } public static ConfigurableValue<int> CreateInt(string modGUID, string modName, ConfigFile configFile, string section, string key, int defaultValue, int min = 0, int max = 1000, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<int> onChanged = null) { return Create(configFile, section, key, defaultValue, description, stringsToAffect, useCustomValueConfigEntry, restartRequired, onChanged); } public static ConfigurableValue<float> CreateFloat(string modGUID, string modName, ConfigFile configFile, string section, string key, float defaultValue, float min = 0f, float max = 1000f, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<float> onChanged = null) { return Create(configFile, section, key, defaultValue, description, stringsToAffect, useCustomValueConfigEntry, restartRequired, onChanged); } public static ConfigurableValue<bool> CreateBool(string modGUID, string modName, ConfigFile configFile, string section, string key, bool defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<bool> onChanged = null) { return Create(configFile, section, key, defaultValue, description, stringsToAffect, useCustomValueConfigEntry, restartRequired, onChanged); } public static ConfigurableValue<string> CreateString(string modGUID, string modName, ConfigFile configFile, string section, string key, string defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<string> onChanged = null) { return Create(configFile, section, key, defaultValue, description, stringsToAffect, useCustomValueConfigEntry, restartRequired, onChanged); } } public class ConfigurableValue<T> : ConfigurableValue { public ConfigEntry<T> bepinexConfigEntry; private ConfigEntry<bool> useCustomValueConfigEntry; private T defaultValue; public T Value { get { if (useCustomValueConfigEntry != null && useCustomValueConfigEntry.Value) { return bepinexConfigEntry.Value; } return defaultValue; } } public ConfigurableValue(ConfigFile configFile, string section, string key, T defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useCustomValueConfigEntry = null, bool restartRequired = false, Action<T> onChanged = null) { ConfigurableValue<T> configurableValue = this; id = Path.GetFileNameWithoutExtension(configFile.ConfigFilePath) + "." + section + "." + key; ConfigurableValue configurableValue2 = ConfigurableValue.instancesList.FirstOrDefault((ConfigurableValue x) => x.id == configurableValue.id); if (configurableValue2 != null) { ConfigurableValue<T> configurableValue3 = configurableValue2 as ConfigurableValue<T>; bepinexConfigEntry = configurableValue3.bepinexConfigEntry; this.useCustomValueConfigEntry = useCustomValueConfigEntry; } else { bepinexConfigEntry = configFile.Bind<T>(section, key, defaultValue, description); ConfigurableValue.instancesList.Add(this); } this.useCustomValueConfigEntry = useCustomValueConfigEntry; base.key = key; this.defaultValue = defaultValue; if (stringsToAffect != null) { base.stringsToAffect = stringsToAffect; } else { base.stringsToAffect = new List<string>(); } if (onChanged != null) { bepinexConfigEntry.SettingChanged += delegate { onChanged(configurableValue.bepinexConfigEntry.Value); reloadLogbook = true; }; onChanged(bepinexConfigEntry.Value); reloadLogbook = true; } } public override string ToString() { return Convert.ToString(Value, CultureInfo.InvariantCulture); } public static implicit operator T(ConfigurableValue<T> configurableValue) { return configurableValue.Value; } } [CompilerGenerated] private static class <>O { public static hook_Awake <0>__LogBookController_Awake; public static hook_GetLocalizedStringByToken <1>__Language_GetLocalizedStringByToken; } private static bool reloadLogbook; internal static void Init() { //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>__LogBookController_Awake; if (obj == null) { hook_Awake val = LogBookController_Awake; <>O.<0>__LogBookController_Awake = val; obj = (object)val; } LogBookController.Awake += (hook_Awake)obj; object obj2 = <>O.<1>__Language_GetLocalizedStringByToken; if (obj2 == null) { hook_GetLocalizedStringByToken val2 = Language_GetLocalizedStringByToken; <>O.<1>__Language_GetLocalizedStringByToken = val2; obj2 = (object)val2; } Language.GetLocalizedStringByToken += (hook_GetLocalizedStringByToken)obj2; } private static void LogBookController_Awake(orig_Awake orig, LogBookController self) { orig.Invoke(self); if (reloadLogbook) { reloadLogbook = false; LogBookController.BuildStaticData(); } } private static string Language_GetLocalizedStringByToken(orig_GetLocalizedStringByToken orig, Language self, string token) { string text = orig.Invoke(self, token); foreach (ConfigurableValue item in ConfigurableValue.instancesList.FindAll((ConfigurableValue x) => x.stringsToAffect.Contains(token))) { text = text.Replace("{" + item.key + "}", item.ToString()); } return text; } } public class GenericGameEvents { public delegate void PlayerCharacterDeathEventHandler(DamageReport damageReport, ref string deathQuote); [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Instruction, bool> <>9__5_2; public static Func<Instruction, bool> <>9__5_4; public static Func<string, DamageReport, string> <>9__5_1; public static Manipulator <>9__5_0; internal void <Init>b__5_0(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) <>c__DisplayClass5_0 CS$<>8__locals0 = new <>c__DisplayClass5_0(); ILCursor val = new ILCursor(il); CS$<>8__locals0.deathQuotePos = -1; if (val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "PLAYER_DEATH_QUOTE_VOIDDEATH"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref CS$<>8__locals0.deathQuotePos) }) && val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld<GlobalEventManager>(x, "standardDeathQuoteTokens") }) && val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, CS$<>8__locals0.deathQuotePos) })) { val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Func<string, DamageReport, string>>((Func<string, DamageReport, string>)delegate(string deathQuote, DamageReport damageReport) { if (GenericGameEvents.OnPlayerCharacterDeath != null) { GenericGameEvents.OnPlayerCharacterDeath(damageReport, ref deathQuote); } return deathQuote; }); } else { ErrorHookFailed("on player character death"); } } internal bool <Init>b__5_2(Instruction x) { return ILPatternMatchingExt.MatchLdstr(x, "PLAYER_DEATH_QUOTE_VOIDDEATH"); } internal bool <Init>b__5_4(Instruction x) { return ILPatternMatchingExt.MatchLdsfld<GlobalEventManager>(x, "standardDeathQuoteTokens"); } internal string <Init>b__5_1(string deathQuote, DamageReport damageReport) { if (GenericGameEvents.OnPlayerCharacterDeath != null) { GenericGameEvents.OnPlayerCharacterDeath(damageReport, ref deathQuote); } return deathQuote; } } [CompilerGenerated] private sealed class <>c__DisplayClass5_0 { public int deathQuotePos; internal bool <Init>b__3(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, ref deathQuotePos); } internal bool <Init>b__5(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, deathQuotePos); } } public static event PlayerCharacterDeathEventHandler OnPlayerCharacterDeath; internal static void ErrorHookFailed(string name) { Log.Error("generic game event '" + name + "' hook failed"); } internal static void Init() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown object obj = <>c.<>9__5_0; if (obj == null) { Manipulator val = delegate(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) ILCursor val2 = new ILCursor(il); int deathQuotePos = -1; if (val2.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "PLAYER_DEATH_QUOTE_VOIDDEATH"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref deathQuotePos) }) && val2.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld<GlobalEventManager>(x, "standardDeathQuoteTokens") }) && val2.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, deathQuotePos) })) { val2.Emit(OpCodes.Ldarg_1); val2.EmitDelegate<Func<string, DamageReport, string>>((Func<string, DamageReport, string>)delegate(string deathQuote, DamageReport damageReport) { if (GenericGameEvents.OnPlayerCharacterDeath != null) { GenericGameEvents.OnPlayerCharacterDeath(damageReport, ref deathQuote); } return deathQuote; }); } else { ErrorHookFailed("on player character death"); } }; <>c.<>9__5_0 = val; obj = (object)val; } GlobalEventManager.OnPlayerCharacterDeath += (Manipulator)obj; } } }