The BepInEx console will not appear when launching like it does for other games on Thunderstore (you can turn it back on in your BepInEx.cfg file). If your PEAK crashes on startup, add -dx12 to your launch parameters.
Decompiled source of ItemInfoDisplay v1.0.3
plugins/com.github.jkqt.ItemInfoDisplay.dll
Decompiled 2 days agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Peak.Afflictions; using TMPro; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("com.github.jkqt.ItemInfoDisplay")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.3.0")] [assembly: AssemblyInformationalVersion("1.0.3+bc7771e8d93a33f4185c17f1a1e76056a63a5277")] [assembly: AssemblyProduct("com.github.jkqt.ItemInfoDisplay")] [assembly: AssemblyTitle("ItemInfoDisplay")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.3.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace ItemInfoDisplay { [BepInPlugin("com.github.jkqt.ItemInfoDisplay", "ItemInfoDisplay", "1.0.3")] public class Plugin : BaseUnityPlugin { private static class ItemInfoDisplayUpdatePatch { [HarmonyPatch(typeof(CharacterItems), "Update")] [HarmonyPostfix] private static void ItemInfoDisplayUpdate(CharacterItems __instance) { try { if ((Object)(object)guiManager == (Object)null) { AddDisplayObject(); } else if ((Object)(object)Character.observedCharacter.data.currentItem != (Object)null) { if (hasChanged) { hasChanged = false; ProcessItemGameObject(); } else if (Mathf.Abs(Character.observedCharacter.data.sinceItemAttach - lastKnownSinceItemAttach) >= configForceUpdateTime.Value) { hasChanged = true; lastKnownSinceItemAttach = Character.observedCharacter.data.sinceItemAttach; } if (!((Component)itemInfoDisplayTextMesh).gameObject.activeSelf) { ((Component)itemInfoDisplayTextMesh).gameObject.SetActive(true); } } else if (((Component)itemInfoDisplayTextMesh).gameObject.activeSelf) { ((Component)itemInfoDisplayTextMesh).gameObject.SetActive(false); } } catch (Exception ex) { Log.LogError((object)(ex.Message + ex.StackTrace)); } } } private static class ItemInfoDisplayEquipPatch { [HarmonyPatch(typeof(CharacterItems), "Equip")] [HarmonyPostfix] private static void ItemInfoDisplayEquip(CharacterItems __instance) { try { if (Character.observedCharacter == __instance.character) { hasChanged = true; } } catch (Exception ex) { Log.LogError((object)(ex.Message + ex.StackTrace)); } } } private static class ItemInfoDisplayFinishCookingPatch { [HarmonyPatch(typeof(ItemCooking), "FinishCooking")] [HarmonyPostfix] private static void ItemInfoDisplayFinishCooking(ItemCooking __instance) { try { if (Character.observedCharacter == ((ItemComponent)__instance).item.holderCharacter) { hasChanged = true; } } catch (Exception ex) { Log.LogError((object)(ex.Message + ex.StackTrace)); } } } private static class ItemInfoDisplayReduceUsesRPCPatch { [HarmonyPatch(typeof(Action_ReduceUses), "ReduceUsesRPC")] [HarmonyPostfix] private static void ItemInfoDisplayReduceUsesRPC(Action_ReduceUses __instance) { try { if (Character.observedCharacter == ((ItemActionBase)__instance).character) { hasChanged = true; } } catch (Exception ex) { Log.LogError((object)(ex.Message + ex.StackTrace)); } } } private static GUIManager guiManager; private static TextMeshProUGUI itemInfoDisplayTextMesh; private static Dictionary<string, string> effectColors = new Dictionary<string, string>(); private static float lastKnownSinceItemAttach; private static bool hasChanged; private static ConfigEntry<float> configFontSize; private static ConfigEntry<float> configOutlineWidth; private static ConfigEntry<float> configLineSpacing; private static ConfigEntry<float> configSizeDeltaX; private static ConfigEntry<float> configForceUpdateTime; public const string Id = "com.github.jkqt.ItemInfoDisplay"; internal static ManualLogSource Log { get; private set; } = null; public static string Name => "ItemInfoDisplay"; public static string Version => "1.0.3"; private void Awake() { Log = ((BaseUnityPlugin)this).Logger; InitEffectColors(effectColors); lastKnownSinceItemAttach = 0f; hasChanged = true; configFontSize = ((BaseUnityPlugin)this).Config.Bind<float>("ItemInfoDisplay", "Font Size", 20f, "Customize the Font Size for description text."); configOutlineWidth = ((BaseUnityPlugin)this).Config.Bind<float>("ItemInfoDisplay", "Outline Width", 0.08f, "Customize the Outline Width for item description text."); configLineSpacing = ((BaseUnityPlugin)this).Config.Bind<float>("ItemInfoDisplay", "Line Spacing", -35f, "Customize the Line Spacing for item description text."); configSizeDeltaX = ((BaseUnityPlugin)this).Config.Bind<float>("ItemInfoDisplay", "Size Delta X", 550f, "Customize the horizontal length of the container for the mod. Increasing moves text left, decreasing moves text right."); configForceUpdateTime = ((BaseUnityPlugin)this).Config.Bind<float>("ItemInfoDisplay", "Force Update Time", 1f, "Customize the time in seconds until the mod forces an update for the item."); Harmony.CreateAndPatchAll(typeof(ItemInfoDisplayUpdatePatch), (string)null); Harmony.CreateAndPatchAll(typeof(ItemInfoDisplayEquipPatch), (string)null); Harmony.CreateAndPatchAll(typeof(ItemInfoDisplayFinishCookingPatch), (string)null); Harmony.CreateAndPatchAll(typeof(ItemInfoDisplayReduceUsesRPCPatch), (string)null); Log.LogInfo((object)("Plugin " + Name + " is loaded!")); } private static void ProcessItemGameObject() { //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Expected O, but got Unknown //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Expected O, but got Unknown //IL_02de: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Expected O, but got Unknown //IL_0322: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Expected O, but got Unknown //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Expected O, but got Unknown //IL_03f1: Unknown result type (might be due to invalid IL or missing references) //IL_03f8: Expected O, but got Unknown //IL_049d: Unknown result type (might be due to invalid IL or missing references) //IL_04a4: Expected O, but got Unknown //IL_04df: Unknown result type (might be due to invalid IL or missing references) //IL_04e6: Expected O, but got Unknown //IL_063c: Unknown result type (might be due to invalid IL or missing references) //IL_0643: Expected O, but got Unknown //IL_06a8: Unknown result type (might be due to invalid IL or missing references) //IL_06af: Expected O, but got Unknown //IL_070d: Unknown result type (might be due to invalid IL or missing references) //IL_0714: Expected O, but got Unknown //IL_0890: Unknown result type (might be due to invalid IL or missing references) //IL_0897: Expected O, but got Unknown //IL_056a: Unknown result type (might be due to invalid IL or missing references) //IL_056f: Unknown result type (might be due to invalid IL or missing references) //IL_0a93: Unknown result type (might be due to invalid IL or missing references) //IL_0a9a: Expected O, but got Unknown //IL_0b5d: Unknown result type (might be due to invalid IL or missing references) //IL_0b64: Expected O, but got Unknown //IL_0cae: Unknown result type (might be due to invalid IL or missing references) //IL_0cb5: Expected O, but got Unknown //IL_0d84: Unknown result type (might be due to invalid IL or missing references) //IL_0d8b: Expected O, but got Unknown //IL_0e09: Unknown result type (might be due to invalid IL or missing references) //IL_0e10: Expected O, but got Unknown //IL_0e7f: Unknown result type (might be due to invalid IL or missing references) //IL_0e86: Expected O, but got Unknown //IL_124c: Unknown result type (might be due to invalid IL or missing references) //IL_1253: Expected O, but got Unknown //IL_146e: Unknown result type (might be due to invalid IL or missing references) //IL_1475: Expected O, but got Unknown //IL_1677: Unknown result type (might be due to invalid IL or missing references) //IL_167e: Expected O, but got Unknown Item currentItem = Character.observedCharacter.data.currentItem; GameObject gameObject = ((Component)currentItem).gameObject; Component[] components = gameObject.GetComponents(typeof(Component)); bool flag = false; string text = ""; string text2 = ""; string text3 = ""; string text4 = ""; string text5 = ""; ((TMP_Text)itemInfoDisplayTextMesh).text = ""; text2 = ((Ascents.itemWeightModifier <= 0) ? (text2 + effectColors["Weight"] + ((float)currentItem.carryWeight * 2.5f).ToString("F1").Replace(".0", "") + " WEIGHT</color>") : (text2 + effectColors["Weight"] + ((float)(currentItem.carryWeight + Ascents.itemWeightModifier) * 2.5f).ToString("F1").Replace(".0", "") + " WEIGHT</color>")); if (((Object)gameObject).name.Equals("Bugle(Clone)")) { TextMeshProUGUI obj = itemInfoDisplayTextMesh; ((TMP_Text)obj).text = ((TMP_Text)obj).text + "MAKE SOME NOISE\n"; } else if (((Object)gameObject).name.Equals("Pirate Compass(Clone)")) { TextMeshProUGUI obj2 = itemInfoDisplayTextMesh; ((TMP_Text)obj2).text = ((TMP_Text)obj2).text + effectColors["Injury"] + "POINTS</color> TO THE NEAREST LUGGAGE\n"; } else if (((Object)gameObject).name.Equals("Compass(Clone)")) { TextMeshProUGUI obj3 = itemInfoDisplayTextMesh; ((TMP_Text)obj3).text = ((TMP_Text)obj3).text + effectColors["Injury"] + "POINTS</color> NORTH TO THE PEAK\n"; } else if (((Object)gameObject).name.Equals("Shell Big(Clone)")) { TextMeshProUGUI obj4 = itemInfoDisplayTextMesh; ((TMP_Text)obj4).text = ((TMP_Text)obj4).text + "TRY " + effectColors["Hunger"] + "THROWING</color> AT A COCONUT\n"; } TextMeshProUGUI val9; for (int i = 0; i < components.Length; i++) { if (((object)components[i]).GetType() == typeof(ItemUseFeedback)) { ItemUseFeedback val = (ItemUseFeedback)components[i]; if (val.useAnimation.Equals("Eat") || val.useAnimation.Equals("Drink") || val.useAnimation.Equals("Heal")) { flag = true; } } else if (((object)components[i]).GetType() == typeof(Action_Consume)) { flag = true; } else if (((object)components[i]).GetType() == typeof(Action_RestoreHunger)) { Action_RestoreHunger val2 = (Action_RestoreHunger)components[i]; text += ProcessEffect(val2.restorationAmount * -1f, "Hunger"); } else if (((object)components[i]).GetType() == typeof(Action_GiveExtraStamina)) { Action_GiveExtraStamina val3 = (Action_GiveExtraStamina)components[i]; text += ProcessEffect(val3.amount, "Extra Stamina"); } else if (((object)components[i]).GetType() == typeof(Action_InflictPoison)) { Action_InflictPoison val4 = (Action_InflictPoison)components[i]; text = text + "AFTER " + val4.delay + "s, " + ProcessEffectOverTime(val4.poisonPerSecond, 1f, val4.inflictionTime, "Poison"); } else if (((object)components[i]).GetType() == typeof(Action_ModifyStatus)) { Action_ModifyStatus val5 = (Action_ModifyStatus)components[i]; text += ProcessEffect(val5.changeAmount, ((object)(STATUSTYPE)(ref val5.statusType)).ToString()); } else if (((object)components[i]).GetType() == typeof(Action_ApplyMassAffliction)) { Action_ApplyMassAffliction val6 = (Action_ApplyMassAffliction)components[i]; text5 += "<#CCCCCC>NEARBY PLAYERS WILL RECEIVE:</color>\n"; text5 += ProcessAffliction(((Action_ApplyAffliction)val6).affliction); if (((Action_ApplyAffliction)val6).extraAfflictions.Length == 0) { continue; } for (int j = 0; j < ((Action_ApplyAffliction)val6).extraAfflictions.Length; j++) { if (text5.EndsWith('\n')) { text5 = text5.Remove(text5.Length - 1); } text5 = text5 + ",\n" + ProcessAffliction(((Action_ApplyAffliction)val6).extraAfflictions[j]); } } else if (((object)components[i]).GetType() == typeof(Action_ApplyAffliction)) { Action_ApplyAffliction val7 = (Action_ApplyAffliction)components[i]; text5 += ProcessAffliction(val7.affliction); } else if (((object)components[i]).GetType() == typeof(Action_ClearAllStatus)) { Action_ClearAllStatus val8 = (Action_ClearAllStatus)components[i]; TextMeshProUGUI obj5 = itemInfoDisplayTextMesh; ((TMP_Text)obj5).text = ((TMP_Text)obj5).text + effectColors["ItemInfoDisplayPositive"] + "CLEAR ALL STATUS</color>"; if (val8.excludeCurse) { TextMeshProUGUI obj6 = itemInfoDisplayTextMesh; ((TMP_Text)obj6).text = ((TMP_Text)obj6).text + " EXCEPT " + effectColors["Curse"] + "CURSE</color>"; } if (val8.otherExclusions.Count > 0) { foreach (STATUSTYPE otherExclusion in val8.otherExclusions) { STATUSTYPE current = otherExclusion; val9 = itemInfoDisplayTextMesh; ((TMP_Text)val9).text = ((TMP_Text)val9).text + ", " + effectColors[((object)(STATUSTYPE)(ref current)).ToString()] + ((object)(STATUSTYPE)(ref current)).ToString().ToUpper() + "</color>"; } } ((TMP_Text)itemInfoDisplayTextMesh).text = ((TMP_Text)itemInfoDisplayTextMesh).text.Replace(", <#E13542>CRAB</color>", "") + "\n"; } else if (((object)components[i]).GetType() == typeof(Action_ConsumeAndSpawn)) { Action_ConsumeAndSpawn val10 = (Action_ConsumeAndSpawn)components[i]; if (((object)val10.itemToSpawn).ToString().Contains("Peel")) { TextMeshProUGUI obj7 = itemInfoDisplayTextMesh; ((TMP_Text)obj7).text = ((TMP_Text)obj7).text + "<#CCCCCC>GAIN A PEEL WHEN EATEN</color>\n"; } } else if (((object)components[i]).GetType() == typeof(Action_ReduceUses)) { OptionableIntItemData val11 = (OptionableIntItemData)currentItem.data.data[(DataEntryKey)2]; if (val11.HasData && val11.Value > 1) { text3 = text3 + " " + val11.Value + " USES"; } } else if (((object)components[i]).GetType() == typeof(Lantern)) { Lantern val12 = (Lantern)components[i]; text5 += "<#CCCCCC>WHEN LIT, NEARBY PLAYERS RECEIVE:</color>\n"; if (((Object)gameObject).name.Equals("Lantern_Faerie(Clone)")) { StatusField component = ((Component)gameObject.transform.Find("FaerieLantern/Light/Heat")).GetComponent<StatusField>(); text5 += ProcessEffectOverTime(component.statusAmountPerSecond, 1f, val12.startingFuel, ((object)(STATUSTYPE)(ref component.statusType)).ToString()); foreach (StatusFieldStatus additionalStatus in component.additionalStatuses) { if (text5.EndsWith('\n')) { text5 = text5.Remove(text5.Length - 1); } text5 = text5 + ",\n" + ProcessEffectOverTime(additionalStatus.statusAmountPerSecond, 1f, val12.startingFuel, ((object)(STATUSTYPE)(ref additionalStatus.statusType)).ToString()); } } else if (((Object)gameObject).name.Equals("Lantern(Clone)")) { StatusField component2 = ((Component)gameObject.transform.Find("GasLantern/Light/Heat")).GetComponent<StatusField>(); text5 += ProcessEffectOverTime(component2.statusAmountPerSecond, 1f, val12.startingFuel, ((object)(STATUSTYPE)(ref component2.statusType)).ToString()); } } else if (((object)components[i]).GetType() == typeof(Action_RaycastDart)) { Action_RaycastDart val13 = (Action_RaycastDart)components[i]; flag = true; text5 += "<#CCCCCC>SHOOT A DART THAT WILL APPLY:</color>\n"; for (int k = 0; k < val13.afflictionsOnHit.Length; k++) { text5 += ProcessAffliction(val13.afflictionsOnHit[k]); if (text5.EndsWith('\n')) { text5 = text5.Remove(text5.Length - 1); } text5 += ",\n"; } if (text5.EndsWith('\n')) { text5 = text5.Remove(text5.Length - 2); } text5 += "\n"; } else if (((object)components[i]).GetType() == typeof(MagicBugle)) { TextMeshProUGUI obj8 = itemInfoDisplayTextMesh; ((TMP_Text)obj8).text = ((TMP_Text)obj8).text + "WHILE PLAYING THE BUGLE,"; } else if (((object)components[i]).GetType() == typeof(ClimbingSpikeComponent)) { TextMeshProUGUI obj9 = itemInfoDisplayTextMesh; ((TMP_Text)obj9).text = ((TMP_Text)obj9).text + "PLACE A PITON YOU CAN GRAB\nTO " + effectColors["Extra Stamina"] + "REGENERATE STAMINA</color>\n"; } else if (((object)components[i]).GetType() == typeof(Action_Flare)) { TextMeshProUGUI obj10 = itemInfoDisplayTextMesh; ((TMP_Text)obj10).text = ((TMP_Text)obj10).text + "CAN BE LIT\n"; } else if (((object)components[i]).GetType() == typeof(Backpack)) { TextMeshProUGUI obj11 = itemInfoDisplayTextMesh; ((TMP_Text)obj11).text = ((TMP_Text)obj11).text + "DROP TO PLACE ITEMS INSIDE\n"; } else if (((object)components[i]).GetType() == typeof(BananaPeel)) { TextMeshProUGUI obj12 = itemInfoDisplayTextMesh; ((TMP_Text)obj12).text = ((TMP_Text)obj12).text + effectColors["Hunger"] + "SLIP</color> WHEN STEPPED ON\n"; } else if (((object)components[i]).GetType() == typeof(Constructable)) { Constructable val14 = (Constructable)components[i]; if (((Object)val14.constructedPrefab).name.Equals("PortableStovetop_Placed")) { val9 = itemInfoDisplayTextMesh; ((TMP_Text)val9).text = ((TMP_Text)val9).text + "PLACE A " + effectColors["Injury"] + "COOKING</color> STOVE FOR " + val14.constructedPrefab.GetComponent<Campfire>().burnsFor + "s\n"; } else { TextMeshProUGUI obj13 = itemInfoDisplayTextMesh; ((TMP_Text)obj13).text = ((TMP_Text)obj13).text + "CAN BE PLACED\n"; } } else if (((object)components[i]).GetType() == typeof(RopeSpool)) { RopeSpool val15 = (RopeSpool)components[i]; if (val15.isAntiRope) { TextMeshProUGUI obj14 = itemInfoDisplayTextMesh; ((TMP_Text)obj14).text = ((TMP_Text)obj14).text + "PLACE A ROPE THAT FLOATS UP\n"; } else { TextMeshProUGUI obj15 = itemInfoDisplayTextMesh; ((TMP_Text)obj15).text = ((TMP_Text)obj15).text + "PLACE A ROPE\n"; } val9 = itemInfoDisplayTextMesh; ((TMP_Text)val9).text = ((TMP_Text)val9).text + "FROM " + (val15.minSegments / 4f).ToString("F2").Replace(".0", "") + "m LONG, UP TO " + ((float)Rope.MaxSegments / 4f).ToString("F1").Replace(".0", "") + "m LONG\n"; if (configForceUpdateTime.Value <= 1f) { text3 = text3 + " " + (val15.RopeFuel / 4f).ToString("F2").Replace(".00", "") + "m LEFT"; } } else if (((object)components[i]).GetType() == typeof(RopeShooter)) { RopeShooter val16 = (RopeShooter)components[i]; TextMeshProUGUI obj16 = itemInfoDisplayTextMesh; ((TMP_Text)obj16).text = ((TMP_Text)obj16).text + "SHOOT A ROPE ANCHOR WHICH PLACES\nA ROPE THAT "; if (((Object)val16.ropeAnchorWithRopePref).name.Equals("RopeAnchorForRopeShooterAnti")) { TextMeshProUGUI obj17 = itemInfoDisplayTextMesh; ((TMP_Text)obj17).text = ((TMP_Text)obj17).text + "FLOATS UP "; } else { TextMeshProUGUI obj18 = itemInfoDisplayTextMesh; ((TMP_Text)obj18).text = ((TMP_Text)obj18).text + "DROPS DOWN "; } TextMeshProUGUI obj19 = itemInfoDisplayTextMesh; ((TMP_Text)obj19).text = ((TMP_Text)obj19).text + (val16.maxLength / 4f).ToString("F1").Replace(".0", "") + "m\n"; } else if (((object)components[i]).GetType() == typeof(Antigrav)) { Antigrav val17 = (Antigrav)components[i]; if (val17.intensity != 0f) { text5 = text5 + effectColors["Injury"] + "WARNING:</color> <#CCCCCC>FLIES AWAY IF DROPPED</color>\n"; } } else if (((object)components[i]).GetType() == typeof(Action_Balloon)) { text5 += "CAN ATTACH TO CHARACTER\n"; } else if (((object)components[i]).GetType() == typeof(VineShooter)) { VineShooter val18 = (VineShooter)components[i]; TextMeshProUGUI obj20 = itemInfoDisplayTextMesh; ((TMP_Text)obj20).text = ((TMP_Text)obj20).text + "SHOOT A CHAIN THAT CONNECTS FROM\nYOUR POSITION TO WHERE YOU SHOOT\nUP TO " + (val18.maxLength / 1.6666666f).ToString("F1").Replace(".0", "") + "m AWAY\n"; } else if (((object)components[i]).GetType() == typeof(ShelfShroom)) { ShelfShroom val19 = (ShelfShroom)components[i]; if (((Object)val19.instantiateOnBreak).name.Equals("HealingPuffShroomSpawn")) { GameObject gameObject2 = ((Component)val19.instantiateOnBreak.transform.Find("VFX_SporeHealingExplo")).gameObject; AOE component3 = gameObject2.GetComponent<AOE>(); GameObject gameObject3 = ((Component)gameObject2.transform.Find("VFX_SporePoisonExplo")).gameObject; AOE component4 = gameObject3.GetComponent<AOE>(); AOE[] components2 = gameObject3.GetComponents<AOE>(); TimeEvent component5 = gameObject3.GetComponent<TimeEvent>(); RemoveAfterSeconds component6 = gameObject3.GetComponent<RemoveAfterSeconds>(); TextMeshProUGUI obj21 = itemInfoDisplayTextMesh; ((TMP_Text)obj21).text = ((TMP_Text)obj21).text + effectColors["Hunger"] + "THROW</color> TO RELEASE GAS THAT WILL:\n"; TextMeshProUGUI obj22 = itemInfoDisplayTextMesh; ((TMP_Text)obj22).text = ((TMP_Text)obj22).text + ProcessEffect(Mathf.Round(component3.statusAmount * 0.9f * 40f) / 40f, ((object)(STATUSTYPE)(ref component3.statusType)).ToString()); TextMeshProUGUI obj23 = itemInfoDisplayTextMesh; ((TMP_Text)obj23).text = ((TMP_Text)obj23).text + ProcessEffectOverTime(Mathf.Round(component4.statusAmount * (1f / component5.rate) * 40f) / 40f, 1f, component6.seconds, ((object)(STATUSTYPE)(ref component4.statusType)).ToString()); if (components2.Length > 1) { TextMeshProUGUI obj24 = itemInfoDisplayTextMesh; ((TMP_Text)obj24).text = ((TMP_Text)obj24).text + ProcessEffectOverTime(Mathf.Round(components2[1].statusAmount * (1f / component5.rate) * 40f) / 40f, 1f, component6.seconds + 1f, ((object)(STATUSTYPE)(ref components2[1].statusType)).ToString()); } } else if (((Object)val19.instantiateOnBreak).name.Equals("ShelfShroomSpawn")) { TextMeshProUGUI obj25 = itemInfoDisplayTextMesh; ((TMP_Text)obj25).text = ((TMP_Text)obj25).text + effectColors["Hunger"] + "THROW</color> TO DEPLOY A PLATFORM\n"; } else if (((Object)val19.instantiateOnBreak).name.Equals("BounceShroomSpawn")) { TextMeshProUGUI obj26 = itemInfoDisplayTextMesh; ((TMP_Text)obj26).text = ((TMP_Text)obj26).text + effectColors["Hunger"] + "THROW</color> TO DEPLOY A BOUNCE PAD\n"; } } else if (((object)components[i]).GetType() == typeof(ScoutEffigy)) { TextMeshProUGUI obj27 = itemInfoDisplayTextMesh; ((TMP_Text)obj27).text = ((TMP_Text)obj27).text + effectColors["Extra Stamina"] + "REVIVE</color> A DEAD PLAYER\n"; } else if (((object)components[i]).GetType() == typeof(Action_Die)) { TextMeshProUGUI obj28 = itemInfoDisplayTextMesh; ((TMP_Text)obj28).text = ((TMP_Text)obj28).text + "YOU " + effectColors["Curse"] + "DIE</color> WHEN USED\n"; } else if (((object)components[i]).GetType() == typeof(Action_SpawnGuidebookPage)) { flag = true; TextMeshProUGUI obj29 = itemInfoDisplayTextMesh; ((TMP_Text)obj29).text = ((TMP_Text)obj29).text + "CAN BE OPENED\n"; } else if (((object)components[i]).GetType() == typeof(Action_Guidebook)) { TextMeshProUGUI obj30 = itemInfoDisplayTextMesh; ((TMP_Text)obj30).text = ((TMP_Text)obj30).text + "CAN BE READ\n"; } else if (((object)components[i]).GetType() == typeof(Action_CallScoutmaster)) { TextMeshProUGUI obj31 = itemInfoDisplayTextMesh; ((TMP_Text)obj31).text = ((TMP_Text)obj31).text + effectColors["Injury"] + "BREAKS RULE 0 WHEN USED</color>\n"; } else if (((object)components[i]).GetType() == typeof(Action_MoraleBoost)) { Action_MoraleBoost val20 = (Action_MoraleBoost)components[i]; if (val20.boostRadius < 0f) { val9 = itemInfoDisplayTextMesh; ((TMP_Text)val9).text = ((TMP_Text)val9).text + effectColors["ItemInfoDisplayPositive"] + "GAIN</color> " + effectColors["Extra Stamina"] + (val20.baselineStaminaBoost * 100f).ToString("F1").Replace(".0", "") + " EXTRA STAMINA</color>\n"; } else if (val20.boostRadius > 0f) { val9 = itemInfoDisplayTextMesh; ((TMP_Text)val9).text = ((TMP_Text)val9).text + "<#CCCCCC>NEARBY PLAYERS</color>" + effectColors["ItemInfoDisplayPositive"] + " GAIN</color> " + effectColors["Extra Stamina"] + (val20.baselineStaminaBoost * 100f).ToString("F1").Replace(".0", "") + " EXTRA STAMINA</color>\n"; } } else if (((object)components[i]).GetType() == typeof(Breakable)) { TextMeshProUGUI obj32 = itemInfoDisplayTextMesh; ((TMP_Text)obj32).text = ((TMP_Text)obj32).text + effectColors["Hunger"] + "THROW</color> TO CRACK OPEN\n"; } else if (((object)components[i]).GetType() == typeof(Bonkable)) { val9 = itemInfoDisplayTextMesh; ((TMP_Text)val9).text = ((TMP_Text)val9).text + effectColors["Hunger"] + "THROW</color> AT HEAD TO " + effectColors["Injury"] + "BONK</color>\n"; } else if (((object)components[i]).GetType() == typeof(MagicBean)) { MagicBean val21 = (MagicBean)components[i]; val9 = itemInfoDisplayTextMesh; ((TMP_Text)val9).text = ((TMP_Text)val9).text + effectColors["Hunger"] + "THROW</color> TO PLANT A VINE THAT GROWS\nPERPENDICULAR TO TERRAIN UP TO\n" + (val21.plantPrefab.maxLength / 2f).ToString("F1").Replace(".0", "") + "m OR UNTIL IT HITS SOMETHING\n"; } else if (((object)components[i]).GetType() == typeof(BingBong)) { TextMeshProUGUI obj33 = itemInfoDisplayTextMesh; ((TMP_Text)obj33).text = ((TMP_Text)obj33).text + "MASCOT OF BINGBONG AIRWAYS\n"; } else if (((object)components[i]).GetType() == typeof(Action_Passport)) { TextMeshProUGUI obj34 = itemInfoDisplayTextMesh; ((TMP_Text)obj34).text = ((TMP_Text)obj34).text + "OPEN TO CUSTOMIZE CHARACTER\n"; } else if (((object)components[i]).GetType() == typeof(Actions_Binoculars)) { TextMeshProUGUI obj35 = itemInfoDisplayTextMesh; ((TMP_Text)obj35).text = ((TMP_Text)obj35).text + "USE TO LOOK FURTHER\n"; } else if (((object)components[i]).GetType() == typeof(Action_WarpToRandomPlayer)) { TextMeshProUGUI obj36 = itemInfoDisplayTextMesh; ((TMP_Text)obj36).text = ((TMP_Text)obj36).text + "WARP TO RANDOM PLAYER\n"; } else if (((object)components[i]).GetType() == typeof(Parasol)) { TextMeshProUGUI obj37 = itemInfoDisplayTextMesh; ((TMP_Text)obj37).text = ((TMP_Text)obj37).text + "OPEN TO SLOW YOUR DESCENT\n"; } else if (((object)components[i]).GetType() == typeof(Frisbee)) { TextMeshProUGUI obj38 = itemInfoDisplayTextMesh; ((TMP_Text)obj38).text = ((TMP_Text)obj38).text + effectColors["Hunger"] + "THROW</color> IT\n"; } else if (((object)components[i]).GetType() == typeof(ItemCooking)) { ItemCooking val22 = (ItemCooking)components[i]; if (val22.wreckWhenCooked && val22.timesCookedLocal >= 1) { text4 = text4 + "\n" + effectColors["Curse"] + "BROKEN FROM COOKING</color>"; } else if (val22.wreckWhenCooked) { text4 = text4 + "\n" + effectColors["Curse"] + "BREAKS IF COOKED</color>"; } else if (val22.timesCookedLocal >= 12) { text4 = text4 + " " + effectColors["Curse"] + val22.timesCookedLocal + "x COOKED\nCANNOT BE COOKED</color>"; } else if (val22.timesCookedLocal == 0) { text4 = text4 + "\n" + effectColors["Extra Stamina"] + "CAN BE COOKED</color>"; } else if (val22.timesCookedLocal == 1) { text4 = text4 + " " + effectColors["Extra Stamina"] + val22.timesCookedLocal + "x COOKED</color>\n" + effectColors["Hunger"] + "CAN BE COOKED</color>"; } else if (val22.timesCookedLocal == 2) { text4 = text4 + " " + effectColors["Hunger"] + val22.timesCookedLocal + "x COOKED</color>\n" + effectColors["Injury"] + "CAN BE COOKED</color>"; } else if (val22.timesCookedLocal == 3) { text4 = text4 + " " + effectColors["Injury"] + val22.timesCookedLocal + "x COOKED</color>\n" + effectColors["Poison"] + "CAN BE COOKED</color>"; } else if (val22.timesCookedLocal >= 4) { text4 = text4 + " " + effectColors["Poison"] + val22.timesCookedLocal + "x COOKED\nCAN BE COOKED</color>"; } } } if (text.Length > 0 && flag) { ((TMP_Text)itemInfoDisplayTextMesh).text = text + "\n" + ((TMP_Text)itemInfoDisplayTextMesh).text; } if (text5.Length > 0) { TextMeshProUGUI obj39 = itemInfoDisplayTextMesh; ((TMP_Text)obj39).text = ((TMP_Text)obj39).text + "\n" + text5; } val9 = itemInfoDisplayTextMesh; ((TMP_Text)val9).text = ((TMP_Text)val9).text + "\n" + text2 + text3 + text4; ((TMP_Text)itemInfoDisplayTextMesh).text = ((TMP_Text)itemInfoDisplayTextMesh).text.Replace("\n\n\n", "\n\n"); } private static string ProcessEffect(float amount, string effect) { string text = ""; if (amount == 0f) { return text; } if (amount > 0f) { text = ((!effect.Equals("Extra Stamina")) ? (text + effectColors["ItemInfoDisplayNegative"]) : (text + effectColors["ItemInfoDisplayPositive"])); text += "GAIN</color> "; } else if (amount < 0f) { text = ((!effect.Equals("Extra Stamina")) ? (text + effectColors["ItemInfoDisplayPositive"]) : (text + effectColors["ItemInfoDisplayNegative"])); text += "REMOVE</color> "; } return text + effectColors[effect] + (Mathf.Abs(amount) * 100f).ToString("F1").Replace(".0", "") + " " + effect.ToUpper() + "</color>\n"; } private static string ProcessEffectOverTime(float amountPerSecond, float rate, float time, string effect) { string text = ""; if (amountPerSecond == 0f || time == 0f) { return text; } if (amountPerSecond > 0f) { text = ((!effect.Equals("Extra Stamina")) ? (text + effectColors["ItemInfoDisplayNegative"]) : (text + effectColors["ItemInfoDisplayPositive"])); text += "GAIN</color> "; } else if (amountPerSecond < 0f) { text = ((!effect.Equals("Extra Stamina")) ? (text + effectColors["ItemInfoDisplayPositive"]) : (text + effectColors["ItemInfoDisplayNegative"])); text += "REMOVE</color> "; } return text + effectColors[effect] + (Mathf.Abs(amountPerSecond) * time * (1f / rate) * 100f).ToString("F1").Replace(".0", "") + " " + effect.ToUpper() + "</color> OVER " + time + "s\n"; } private static string ProcessAffliction(Affliction affliction) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Invalid comparison between Unknown and I4 //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Invalid comparison between Unknown and I4 //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Invalid comparison between Unknown and I4 //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Expected O, but got Unknown //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Invalid comparison between Unknown and I4 //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Expected O, but got Unknown //IL_0448: Unknown result type (might be due to invalid IL or missing references) //IL_044e: Invalid comparison between Unknown and I4 //IL_02b7: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Expected O, but got Unknown //IL_058b: Unknown result type (might be due to invalid IL or missing references) //IL_0592: Invalid comparison between Unknown and I4 //IL_0454: Unknown result type (might be due to invalid IL or missing references) //IL_045b: Expected O, but got Unknown //IL_068a: Unknown result type (might be due to invalid IL or missing references) //IL_0690: Invalid comparison between Unknown and I4 //IL_0598: Unknown result type (might be due to invalid IL or missing references) //IL_059f: Expected O, but got Unknown //IL_0777: Unknown result type (might be due to invalid IL or missing references) //IL_077d: Invalid comparison between Unknown and I4 //IL_0696: Unknown result type (might be due to invalid IL or missing references) //IL_069d: Expected O, but got Unknown string text = ""; if ((int)affliction.GetAfflictionType() == 2) { Affliction_FasterBoi val = (Affliction_FasterBoi)affliction; text = text + effectColors["ItemInfoDisplayPositive"] + "GAIN</color> " + (((Affliction)val).totalTime + val.climbDelay).ToString("F1").Replace(".0", "") + "s OF " + effectColors["Extra Stamina"] + Mathf.Round(val.moveSpeedMod * 100f).ToString("F1").Replace(".0", "") + "% BONUS RUN SPEED</color> OR\n" + effectColors["ItemInfoDisplayPositive"] + "GAIN</color> " + ((Affliction)val).totalTime.ToString("F1").Replace(".0", "") + "s OF " + effectColors["Extra Stamina"] + Mathf.Round(val.climbSpeedMod * 100f).ToString("F1").Replace(".0", "") + "% BONUS CLIMB SPEED</color>\nAFTERWARDS, " + effectColors["ItemInfoDisplayNegative"] + "GAIN</color> " + effectColors["Drowsy"] + (val.drowsyOnEnd * 100f).ToString("F1").Replace(".0", "") + " DROWSY</color>\n"; } else if ((int)affliction.GetAfflictionType() == 8) { Affliction_ClearAllStatus val2 = (Affliction_ClearAllStatus)affliction; text = text + effectColors["ItemInfoDisplayPositive"] + "CLEAR ALL STATUS</color>"; if (val2.excludeCurse) { text = text + " EXCEPT " + effectColors["Curse"] + "CURSE</color>"; } text += "\n"; } else if ((int)affliction.GetAfflictionType() == 10) { Affliction_AddBonusStamina val3 = (Affliction_AddBonusStamina)affliction; text = text + effectColors["ItemInfoDisplayPositive"] + "GAIN</color> " + effectColors["Extra Stamina"] + (val3.staminaAmount * 100f).ToString("F1").Replace(".0", "") + " EXTRA STAMINA</color>\n"; } else if ((int)affliction.GetAfflictionType() == 1) { Affliction_InfiniteStamina val4 = (Affliction_InfiniteStamina)affliction; text = ((!(val4.climbDelay > 0f)) ? (text + effectColors["ItemInfoDisplayPositive"] + "GAIN</color> " + ((Affliction)val4).totalTime.ToString("F1").Replace(".0", "") + "s OF " + effectColors["Extra Stamina"] + "INFINITE STAMINA\n") : (text + effectColors["ItemInfoDisplayPositive"] + "GAIN</color> " + (((Affliction)val4).totalTime + val4.climbDelay).ToString("F1").Replace(".0", "") + "s OF " + effectColors["Extra Stamina"] + "INFINITE RUN STAMINA</color> OR\n" + effectColors["ItemInfoDisplayPositive"] + "GAIN</color> " + ((Affliction)val4).totalTime.ToString("F1").Replace(".0", "") + "s OF " + effectColors["Extra Stamina"] + "INFINITE CLIMB STAMINA</color>\n")); if (val4.drowsyAffliction != null) { text = text + "AFTERWARDS, " + ProcessAffliction(val4.drowsyAffliction); } } else if ((int)affliction.GetAfflictionType() == 7) { Affliction_AdjustStatus val5 = (Affliction_AdjustStatus)affliction; if (val5.statusAmount > 0f) { text = ((!((object)val5).Equals((object?)"Extra Stamina")) ? (text + effectColors["ItemInfoDisplayNegative"]) : (text + effectColors["ItemInfoDisplayPositive"])); text += "GAIN</color> "; } else { text = ((!((object)val5).Equals((object?)"Extra Stamina")) ? (text + effectColors["ItemInfoDisplayPositive"]) : (text + effectColors["ItemInfoDisplayNegative"])); text += "REMOVE</color> "; } text = text + effectColors[((object)(STATUSTYPE)(ref val5.statusType)).ToString()] + (Mathf.Abs(val5.statusAmount) * 100f).ToString("F1").Replace(".0", "") + " " + ((object)(STATUSTYPE)(ref val5.statusType)).ToString().ToUpper() + "</color>\n"; } else if ((int)affliction.GetAfflictionType() == 11) { Affliction_AdjustDrowsyOverTime val6 = (Affliction_AdjustDrowsyOverTime)affliction; text = ((!(val6.statusPerSecond > 0f)) ? (text + effectColors["ItemInfoDisplayPositive"] + "REMOVE</color> ") : (text + effectColors["ItemInfoDisplayNegative"] + "GAIN</color> ")); text = text + effectColors["Drowsy"] + (Mathf.Round(Mathf.Abs(val6.statusPerSecond) * ((Affliction)val6).totalTime * 100f * 0.4f) / 0.4f).ToString("F1").Replace(".0", "") + " DROWSY</color> OVER " + ((Affliction)val6).totalTime.ToString("F1").Replace(".0", "") + "s\n"; } else if ((int)affliction.GetAfflictionType() == 5) { Affliction_AdjustColdOverTime val7 = (Affliction_AdjustColdOverTime)affliction; text = ((!(val7.statusPerSecond > 0f)) ? (text + effectColors["ItemInfoDisplayPositive"] + "REMOVE</color> ") : (text + effectColors["ItemInfoDisplayNegative"] + "GAIN</color> ")); text = text + effectColors["Cold"] + (Mathf.Abs(val7.statusPerSecond) * ((Affliction)val7).totalTime * 100f).ToString("F1").Replace(".0", "") + " COLD</color> OVER " + ((Affliction)val7).totalTime.ToString("F1").Replace(".0", "") + "s\n"; } else if ((int)affliction.GetAfflictionType() == 6) { text = text + effectColors["ItemInfoDisplayPositive"] + "CLEAR ALL STATUS</color>, THEN RANDOMIZE\n" + effectColors["Hunger"] + "HUNGER</color>, " + effectColors["Extra Stamina"] + "EXTRA STAMINA</color>, " + effectColors["Injury"] + "INJURY</color>,\n" + effectColors["Poison"] + "POISON</color>, " + effectColors["Cold"] + "COLD</color>, " + effectColors["Hot"] + "HEAT</color>, " + effectColors["Drowsy"] + "DROWSY</color>\n"; } return text; } private static void AddDisplayObject() { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.Find("GAME/GUIManager"); guiManager = val.GetComponent<GUIManager>(); TMP_FontAsset font = ((TMP_Text)guiManager.heroDayText).font; GameObject gameObject = ((Component)val.transform.Find("Canvas_HUD/Prompts/ItemPromptLayout")).gameObject; GameObject val2 = new GameObject("ItemInfoDisplay"); val2.transform.SetParent(gameObject.transform); itemInfoDisplayTextMesh = val2.AddComponent<TextMeshProUGUI>(); RectTransform component = val2.GetComponent<RectTransform>(); component.sizeDelta = new Vector2(configSizeDeltaX.Value, 0f); ((TMP_Text)itemInfoDisplayTextMesh).font = font; ((TMP_Text)itemInfoDisplayTextMesh).fontSize = configFontSize.Value; ((TMP_Text)itemInfoDisplayTextMesh).alignment = (TextAlignmentOptions)1025; ((TMP_Text)itemInfoDisplayTextMesh).lineSpacing = configLineSpacing.Value; ((TMP_Text)itemInfoDisplayTextMesh).text = ""; ((TMP_Text)itemInfoDisplayTextMesh).outlineWidth = configOutlineWidth.Value; } private static void InitEffectColors(Dictionary<string, string> dict) { dict.Add("Hunger", "<#FFBD16>"); dict.Add("Extra Stamina", "<#BFEC1B>"); dict.Add("Injury", "<#FF5300>"); dict.Add("Crab", "<#E13542>"); dict.Add("Poison", "<#A139FF>"); dict.Add("Cold", "<#00BCFF>"); dict.Add("Heat", "<#C80918>"); dict.Add("Hot", "<#C80918>"); dict.Add("Sleepy", "<#FF5CA4>"); dict.Add("Drowsy", "<#FF5CA4>"); dict.Add("Curse", "<#1B0043>"); dict.Add("Weight", "<#A65A1C>"); dict.Add("ItemInfoDisplayPositive", "<#DDFFDD>"); dict.Add("ItemInfoDisplayNegative", "<#FFCCCC>"); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }