Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of Impermanence v1.0.3
Impermanence.dll
Decompiled a year 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; } } }