Decompiled source of MountainCount v0.2.2

plugins/MountainCount/MountainCount.dll

Decompiled 2 months ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using ExtraChallengeShrines;
using ExtraChallengeShrines.Interactables;
using HG;
using IL.RoR2;
using Microsoft.CodeAnalysis;
using MonoMod.Cil;
using On.RoR2;
using R2API;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("MountainCount")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("Mod for Risk of Rain 2")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+f64c7df5bb36979dda8402b2d24ed75ae42e6d1c")]
[assembly: AssemblyProduct("MountainCount")]
[assembly: AssemblyTitle("MountainCount")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
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;
		}
	}
}
namespace System.Diagnostics.CodeAnalysis
{
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class MemberNotNullAttribute : Attribute
	{
		public string[] Members { get; }

		public MemberNotNullAttribute(string member)
		{
			Members = new string[1] { member };
		}

		public MemberNotNullAttribute(params string[] members)
		{
			Members = members;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class MemberNotNullWhenAttribute : Attribute
	{
		public bool ReturnValue { get; }

		public string[] Members { get; }

		public MemberNotNullWhenAttribute(bool returnValue, string member)
		{
			ReturnValue = returnValue;
			Members = new string[1] { member };
		}

		public MemberNotNullWhenAttribute(bool returnValue, params string[] members)
		{
			ReturnValue = returnValue;
			Members = members;
		}
	}
}
namespace MountainCount
{
	public class Assets
	{
		public abstract class ShrineReferenceBase
		{
			public abstract string SayCountToken { get; }

			public abstract string AppendToken { get; }

			public string SayCountExpandedToken => SayCountToken + "_EXPANDED";

			[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
			public abstract int GetCount();

			[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
			public abstract void GetCountExpanded(out object value1, out object value2, out object value3);

			public abstract void ModifyShrineUseToken(ref SubjectFormatChatMessage subjectFormatChatMessage);

			[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
			public virtual void AppendInfo()
			{
				MountainCountPlugin.Append(Language.GetStringFormatted(AppendToken, new object[1] { GetCount() }));
			}

			public virtual void SayCount()
			{
				if (Object.op_Implicit((Object)(object)TeleporterInteraction.instance))
				{
					if (Config.cfgExpandedInfo.Value)
					{
						SayCountExpanded();
					}
					else
					{
						SayCountLimited();
					}
				}
			}

			[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
			public virtual void SayCountLimited()
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				//IL_0006: Expected O, but got Unknown
				SimpleChatMessage val = new SimpleChatMessage();
				val.baseToken = SayCountToken;
				val.paramTokens = new string[1] { GetCount().ToString() };
				Chat.SendBroadcastChat((ChatMessageBase)(object)val);
			}

			[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
			public abstract void SayCountExpanded();
		}

		public class ShrineMountain : ShrineReferenceBase
		{
			public override string SayCountToken => "MOUNTAINCOUNT_SAYAMOUNT_MOUNTAIN";

			public override string AppendToken => "MOUNTAINCOUNT_SAYAMOUNT_MOUNTAIN_COMBINED";

			public override int GetCount()
			{
				if (Object.op_Implicit((Object)(object)TeleporterInteraction.instance))
				{
					return TeleporterInteraction.instance.shrineBonusStacks;
				}
				return 0;
			}

			public override void GetCountExpanded(out object expectedLimitedValue, out object expandedValue1, out object expandedValue2)
			{
				expectedLimitedValue = GetCount();
				expandedValue1 = (int)expectedLimitedValue + 1;
				if ((int)expectedLimitedValue == 0)
				{
					expandedValue1 = 0;
				}
				expandedValue2 = -1;
			}

			public override void ModifyShrineUseToken(ref SubjectFormatChatMessage subjectFormatChatMessage)
			{
				((SubjectChatMessage)subjectFormatChatMessage).baseToken = "MOUNTAINCOUNT_SHRINE_BOSS_USE_MESSAGE";
				subjectFormatChatMessage.paramTokens = new string[1] { GetCount().ToString() };
			}

			public override void SayCountExpanded()
			{
				//IL_000c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0012: Expected O, but got Unknown
				GetCountExpanded(out var value, out var value2, out var _);
				SimpleChatMessage val = new SimpleChatMessage();
				val.baseToken = base.SayCountExpandedToken;
				val.paramTokens = new string[2]
				{
					value.ToString(),
					value2.ToString()
				};
				Chat.SendBroadcastChat((ChatMessageBase)(object)val);
			}
		}

		public static int GetStackingLinear(int baseValue, int stackValue, int count)
		{
			if (count == 0)
			{
				return 0;
			}
			return baseValue + stackValue * (count - 1);
		}
	}
	public static class Config
	{
		public static ConfigEntry<string> cfgPrintOnTeleporterEnd;

		public static ConfigEntry<bool> cfgEditLanguage;

		public static ConfigEntry<bool> cfgAddChatMessage;

		public static ConfigEntry<bool> cfgExpandedInfo;

		public static void Initialize(ConfigFile Config)
		{
			cfgPrintOnTeleporterEnd = Config.Bind<string>("", "Message On Teleporter Completion", "xtotal?", "If true, then this chat message will be sent to the server by the server. Recommended usage is x? or xtotal?");
			cfgEditLanguage = Config.Bind<bool>("", "Edit Language", true, "Modifies boss shrine usage text to show the current amount.");
			cfgAddChatMessage = Config.Bind<bool>("", "Add Command", true, "If true, adds a chat message.\n'x?' will show the amount.");
			cfgExpandedInfo = Config.Bind<bool>("", "Expanded Information", true, "If true, then the query messages will be changed based on the info needed.\nExample: Mountain info will also show the amount of items each person gets.");
			cfgPrintOnTeleporterEnd.SettingChanged += CfgPrintOnTeleporterEnd_SettingChanged;
			cfgAddChatMessage.SettingChanged += CfgAddChatMessage_SettingChanged;
			cfgAddChatMessage.SettingChanged += CfgAddChatMessage_SettingChanged;
		}

		public static void CfgAddChatMessage_SettingChanged(object sender, EventArgs e)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Expected O, but got Unknown
			Chat.SendBroadcastChat_ChatMessageBase -= new hook_SendBroadcastChat_ChatMessageBase(MountainCountPlugin.Chat_SendBroadcastChat_ChatMessageBase);
			if (cfgAddChatMessage.Value || cfgEditLanguage.Value)
			{
				Chat.SendBroadcastChat_ChatMessageBase += new hook_SendBroadcastChat_ChatMessageBase(MountainCountPlugin.Chat_SendBroadcastChat_ChatMessageBase);
			}
		}

		public static void CfgPrintOnTeleporterEnd_SettingChanged(object sender, EventArgs e)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Expected O, but got Unknown
			BossGroup.DropRewards -= new hook_DropRewards(MountainCountPlugin.BossGroup_DropRewards);
			if (!Utility.IsNullOrWhiteSpace(cfgPrintOnTeleporterEnd.Value))
			{
				BossGroup.DropRewards += new hook_DropRewards(MountainCountPlugin.BossGroup_DropRewards);
			}
		}
	}
	public static class ModSupport
	{
		public static class MC_ExtraChallengeShrines
		{
			public abstract class ExtraChallengeShrinesShrineReferenceBase : Assets.ShrineReferenceBase
			{
				private ExtraChallengeShrinesTeleporterComponent _teleporterComponent;

				public ExtraChallengeShrinesTeleporterComponent TeleporterComponent
				{
					get
					{
						if (!modloaded_ExtraChallengeShrines)
						{
							MountainCountPlugin._logger.LogWarning((object)"ExtraChallengeShrinesShrineReferenceBase.ExtraChallengeShrinesTeleporterComponent is loaded despite extra challenge shrines not being loaded. Some things may break!!");
						}
						ExtraChallengeShrinesTeleporterComponent teleporterComponent = default(ExtraChallengeShrinesTeleporterComponent);
						if (!Object.op_Implicit((Object)(object)_teleporterComponent) && Object.op_Implicit((Object)(object)TeleporterInteraction.instance) && ((Component)TeleporterInteraction.instance).TryGetComponent<ExtraChallengeShrinesTeleporterComponent>(ref teleporterComponent))
						{
							_teleporterComponent = teleporterComponent;
						}
						return _teleporterComponent;
					}
					set
					{
						_teleporterComponent = value;
					}
				}
			}

			public class ShrineCrown : ExtraChallengeShrinesShrineReferenceBase
			{
				public override string SayCountToken => "MOUNTAINCOUNT_EXTRACHALLENGESHRINES_SAYAMOUNT_CROWN";

				public override string AppendToken => "MOUNTAINCOUNT_EXTRACHALLENGESHRINES_SAYAMOUNT_CROWN_COMBINED";

				public override int GetCount()
				{
					if (Object.op_Implicit((Object)(object)base.TeleporterComponent))
					{
						return base.TeleporterComponent.crownShrineStacks;
					}
					return 0;
				}

				public override void GetCountExpanded(out object getCount, out object total, out object _)
				{
					int value = ShrineCrown.redDrops.Value;
					int value2 = ShrineCrown.redDropsPerStack.Value;
					getCount = GetCount();
					total = Assets.GetStackingLinear(value, value2, (int)getCount);
					_ = null;
				}

				public override void ModifyShrineUseToken(ref SubjectFormatChatMessage subjectFormatChatMessage)
				{
					((SubjectChatMessage)subjectFormatChatMessage).baseToken = "MOUNTAINCOUNT_EXTRACHALLENGESHRINES_SHRINE_CROWN_USE_MESSAGE";
					subjectFormatChatMessage.paramTokens = new string[1] { GetCount().ToString() };
				}

				public override void SayCountExpanded()
				{
					//IL_000c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0012: Expected O, but got Unknown
					GetCountExpanded(out var value, out var value2, out var _);
					SimpleChatMessage val = new SimpleChatMessage();
					val.baseToken = base.SayCountExpandedToken;
					val.paramTokens = new string[2]
					{
						value.ToString(),
						value2.ToString()
					};
					Chat.SendBroadcastChat((ChatMessageBase)(object)val);
				}
			}

			public class ShrineRock : ExtraChallengeShrinesShrineReferenceBase
			{
				public override string SayCountToken => "MOUNTAINCOUNT_EXTRACHALLENGESHRINES_SAYAMOUNT_ROCK";

				public override string AppendToken => "MOUNTAINCOUNT_EXTRACHALLENGESHRINES_SAYAMOUNT_ROCK_COMBINED";

				public override int GetCount()
				{
					if (Object.op_Implicit((Object)(object)base.TeleporterComponent))
					{
						return base.TeleporterComponent.rockShrineStacks;
					}
					return -1;
				}

				public override void GetCountExpanded(out object useCount, out object totalValue, out object _)
				{
					useCount = GetCount();
					int value = ShrineRock.extraDrops.Value;
					int value2 = ShrineRock.extraDropsPerStack.Value;
					totalValue = Assets.GetStackingLinear(value, value2, (int)useCount);
					_ = null;
				}

				public override void ModifyShrineUseToken(ref SubjectFormatChatMessage subjectFormatChatMessage)
				{
					((SubjectChatMessage)subjectFormatChatMessage).baseToken = "MOUNTAINCOUNT_EXTRACHALLENGESHRINES_SHRINE_ROCK_USE_MESSAGE";
					subjectFormatChatMessage.paramTokens = new string[1] { GetCount().ToString() };
				}

				public override void SayCountExpanded()
				{
					//IL_000c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0012: Expected O, but got Unknown
					GetCountExpanded(out var value, out var value2, out var _);
					SimpleChatMessage val = new SimpleChatMessage();
					val.baseToken = base.SayCountExpandedToken;
					val.paramTokens = new string[2]
					{
						value.ToString(),
						value2.ToString()
					};
					Chat.SendBroadcastChat((ChatMessageBase)(object)val);
				}
			}

			public class ShrineEye : ExtraChallengeShrinesShrineReferenceBase
			{
				public override string SayCountToken => "MOUNTAINCOUNT_EXTRACHALLENGESHRINES_SAYAMOUNT_EYE";

				public override string AppendToken => "MOUNTAINCOUNT_EXTRACHALLENGESHRINES_SAYAMOUNT_EYE_COMBINED";

				public override int GetCount()
				{
					if (Object.op_Implicit((Object)(object)base.TeleporterComponent))
					{
						return base.TeleporterComponent.eyeShrineStacks;
					}
					return -1;
				}

				public override void GetCountExpanded(out object chanceString, out object _, out object __)
				{
					float bossDropChance = base.TeleporterComponent.bossGroup.bossDropChance;
					chanceString = ((int)bossDropChance).ToString("##.0%");
					_ = null;
					__ = null;
				}

				public string GetSelectedBossName()
				{
					//IL_0013: Unknown result type (might be due to invalid IL or missing references)
					//IL_0019: Invalid comparison between Unknown and I4
					//IL_0021: Unknown result type (might be due to invalid IL or missing references)
					if (Object.op_Implicit((Object)(object)base.TeleporterComponent) && (int)base.TeleporterComponent.eyeSelectedBody != -1)
					{
						CharacterBody bodyPrefabBodyComponent = BodyCatalog.GetBodyPrefabBodyComponent(base.TeleporterComponent.eyeSelectedBody);
						if (!Object.op_Implicit((Object)(object)bodyPrefabBodyComponent))
						{
							return string.Empty;
						}
						return Language.GetString(bodyPrefabBodyComponent.baseNameToken);
					}
					return string.Empty;
				}

				public override void AppendInfo()
				{
					MountainCountPlugin.Append(Language.GetStringFormatted(AppendToken, new object[2]
					{
						GetCount(),
						GetSelectedBossName()
					}));
				}

				public override void SayCountLimited()
				{
					//IL_0000: Unknown result type (might be due to invalid IL or missing references)
					//IL_0006: Expected O, but got Unknown
					SimpleChatMessage val = new SimpleChatMessage();
					val.baseToken = SayCountToken;
					val.paramTokens = new string[2]
					{
						GetCount().ToString(),
						GetSelectedBossName()
					};
					Chat.SendBroadcastChat((ChatMessageBase)(object)val);
				}

				public override void SayCountExpanded()
				{
					//IL_000c: Unknown result type (might be due to invalid IL or missing references)
					//IL_0012: Expected O, but got Unknown
					GetCountExpanded(out var value, out var _, out var _);
					SimpleChatMessage val = new SimpleChatMessage();
					val.baseToken = base.SayCountExpandedToken;
					val.paramTokens = new string[3]
					{
						GetCount().ToString(),
						GetSelectedBossName(),
						value.ToString()
					};
					Chat.SendBroadcastChat((ChatMessageBase)(object)val);
				}

				public override void ModifyShrineUseToken(ref SubjectFormatChatMessage subjectFormatChatMessage)
				{
					((SubjectChatMessage)subjectFormatChatMessage).baseToken = "MOUNTAINCOUNT_EXTRACHALLENGESHRINES_SHRINE_EYE_USE_MESSAGE";
					subjectFormatChatMessage.paramTokens = new string[2]
					{
						GetCount().ToString(),
						GetSelectedBossName()
					};
				}
			}

			public static AssetBundle ecs_AssetBundle;

			public static ShrineCrown shrineCrown;

			public static ShrineRock shrineRock;

			public static ShrineEye shrineEye;

			[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
			public static void Initialize()
			{
				ecs_AssetBundle = ExtraChallengeShrinesPlugin.AssetBundle;
				shrineCrown = new ShrineCrown();
				shrineRock = new ShrineRock();
				shrineEye = new ShrineEye();
			}
		}

		public static class MC_RiskOfOptions
		{
			[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
			public static void Initialize()
			{
				//IL_0019: Unknown result type (might be due to invalid IL or missing references)
				//IL_0023: Expected O, but got Unknown
				//IL_0028: Unknown result type (might be due to invalid IL or missing references)
				//IL_0032: Expected O, but got Unknown
				//IL_0037: Unknown result type (might be due to invalid IL or missing references)
				//IL_0041: Expected O, but got Unknown
				//IL_0048: Unknown result type (might be due to invalid IL or missing references)
				//IL_0052: Expected O, but got Unknown
				ModSettingsManager.SetModDescription("Announces the amount of teleporter shrines used.", "com.DestroyedClone.MountainCount", "Mountain Count");
				ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(Config.cfgPrintOnTeleporterEnd));
				ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Config.cfgEditLanguage));
				ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Config.cfgAddChatMessage));
				RoR2Application.OnLoad += new Manipulator(RoR2Application_OnLoad);
			}

			private static void RoR2Application_OnLoad(ILContext il)
			{
				//IL_0005: Unknown result type (might be due to invalid IL or missing references)
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				//IL_001a: Expected O, but got Unknown
				//IL_0015: Unknown result type (might be due to invalid IL or missing references)
				//IL_001f: Expected O, but got Unknown
				ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(Config.cfgExpandedInfo, new CheckBoxConfig
				{
					description = GetExpandedInfoDescription()
				}));
			}

			[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
			public static string GetExpandedInfoDescription()
			{
				StringBuilder stringBuilder = StringBuilderPool.RentStringBuilder();
				AppendResolvedTokenAddExtension(MountainCountPlugin.shrineMountain.SayCountToken);
				if (modloaded_ExtraChallengeShrines)
				{
					AppendResolvedTokenAddExtension(MC_ExtraChallengeShrines.shrineCrown.SayCountToken);
					AppendResolvedTokenAddExtension(MC_ExtraChallengeShrines.shrineEye.SayCountToken);
					AppendResolvedTokenAddExtension(MC_ExtraChallengeShrines.shrineRock.SayCountToken);
				}
				string result = stringBuilder.ToString();
				StringBuilderPool.ReturnStringBuilder(stringBuilder);
				return result;
				void AppendResolvedTokenAddExtension(string text)
				{
					stringBuilder.AppendLine(Language.GetString("DEFAULT_SKIN") + ": " + Language.GetString(text));
					stringBuilder.AppendLine(Language.GetString("NEW_UNLOCKABLE") + ": " + Language.GetString(text + "_EXPANDED"));
				}
			}
		}

		public static bool IsAnyModLoaded;

		public static bool modloaded_ExtraChallengeShrines;

		public static bool modloaded_RiskOfOptions;

		public static void Initialize()
		{
			modloaded_ExtraChallengeShrines = IsModLoaded("com.themysticsword.extrachallengeshrines");
			modloaded_RiskOfOptions = IsModLoaded("com.rune580.riskofoptions");
			if (modloaded_ExtraChallengeShrines)
			{
				MC_ExtraChallengeShrines.Initialize();
			}
			if (modloaded_RiskOfOptions)
			{
				MC_RiskOfOptions.Initialize();
			}
			static bool IsModLoaded(string key)
			{
				bool flag = Chainloader.PluginInfos.ContainsKey(key);
				IsAnyModLoaded |= flag;
				return flag;
			}
		}
	}
	[BepInPlugin("com.DestroyedClone.MountainCount", "MountainCount", "0.2.2")]
	[BepInDependency("com.bepis.r2api", "5.0.10")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	public class MountainCountPlugin : BaseUnityPlugin
	{
		public static Assets.ShrineMountain shrineMountain;

		public static StringBuilder ModStringBuilder;

		public static ManualLogSource _logger;

		public void Start()
		{
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Expected O, but got Unknown
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Expected O, but got Unknown
			shrineMountain = new Assets.ShrineMountain();
			ModStringBuilder = new StringBuilder();
			_logger = ((BaseUnityPlugin)this).Logger;
			Config.Initialize(((BaseUnityPlugin)this).Config);
			if (!Utility.IsNullOrWhiteSpace(Config.cfgPrintOnTeleporterEnd.Value))
			{
				BossGroup.DropRewards += new hook_DropRewards(BossGroup_DropRewards);
			}
			if (Config.cfgAddChatMessage.Value || Config.cfgEditLanguage.Value)
			{
				Chat.SendBroadcastChat_ChatMessageBase += new hook_SendBroadcastChat_ChatMessageBase(Chat_SendBroadcastChat_ChatMessageBase);
			}
			Language.onCurrentLanguageChanged += AutoGenerateLanguageTokens;
			ModSupport.Initialize();
		}

		private void AutoGenerateLanguageTokens()
		{
			Add("SHRINE_BOSS_USE_MESSAGE");
			Add("EXTRACHALLENGESHRINES_SHRINE_CROWN_USE_MESSAGE");
			Add("EXTRACHALLENGESHRINES_SHRINE_ROCK_USE_MESSAGE");
			Add("EXTRACHALLENGESHRINES_SHRINE_EYE_USE_MESSAGE", " (x{1}|{2})");
			static void Add(string originalToken, string appendingString = " (x{1})")
			{
				LanguageAPI.Add("MOUNTAINCOUNT_" + originalToken, Language.GetString(originalToken, Language.currentLanguage.name) + appendingString, Language.currentLanguage.name);
				LanguageAPI.Add("MOUNTAINCOUNT_" + originalToken + "_2P", Language.GetString(originalToken + "_2P", Language.currentLanguage.name) + appendingString, Language.currentLanguage.name);
			}
		}

		public static void Chat_SendBroadcastChat_ChatMessageBase(orig_SendBroadcastChat_ChatMessageBase orig, ChatMessageBase message)
		{
			if (Config.cfgEditLanguage.Value)
			{
				SubjectFormatChatMessage subjectFormatChatMessage = (SubjectFormatChatMessage)(object)((message is SubjectFormatChatMessage) ? message : null);
				if (subjectFormatChatMessage != null)
				{
					switch (((SubjectChatMessage)subjectFormatChatMessage).baseToken)
					{
					case "SHRINE_BOSS_USE_MESSAGE":
						shrineMountain.ModifyShrineUseToken(ref subjectFormatChatMessage);
						break;
					case "EXTRACHALLENGESHRINES_SHRINE_CROWN_USE_MESSAGE":
						ModSupport.MC_ExtraChallengeShrines.shrineCrown.ModifyShrineUseToken(ref subjectFormatChatMessage);
						break;
					case "EXTRACHALLENGESHRINES_SHRINE_ROCK_USE_MESSAGE":
						ModSupport.MC_ExtraChallengeShrines.shrineRock.ModifyShrineUseToken(ref subjectFormatChatMessage);
						break;
					case "EXTRACHALLENGESHRINES_SHRINE_EYE_USE_MESSAGE":
						ModSupport.MC_ExtraChallengeShrines.shrineEye.ModifyShrineUseToken(ref subjectFormatChatMessage);
						break;
					}
				}
			}
			bool flag = false;
			bool flag2 = false;
			bool flag3 = false;
			bool flag4 = false;
			bool flag5 = false;
			bool flag6 = false;
			if (Config.cfgAddChatMessage.Value)
			{
				UserChatMessage val = (UserChatMessage)(object)((message is UserChatMessage) ? message : null);
				if (val != null)
				{
					switch (val.text.ToLower())
					{
					case "x ?":
					case "x?":
						if (ModSupport.modloaded_ExtraChallengeShrines)
						{
							flag5 = true;
						}
						else
						{
							flag = true;
						}
						break;
					case "xm?":
					case "xmtn?":
					case "xГоры?":
						flag = true;
						break;
					case "xsky?":
					case "xНеба?":
						flag2 = true;
						break;
					case "xЗемли?":
					case "xearth?":
						flag3 = true;
						break;
					case "xwind?":
					case "xВетра?":
						flag4 = true;
						break;
					case "xtotal?":
					case "xdc?":
					case "xdr?":
						flag6 = true;
						break;
					}
				}
			}
			orig.Invoke(message);
			if (!Object.op_Implicit((Object)(object)Run.instance))
			{
				return;
			}
			SetupStringBuilder();
			if (flag5)
			{
				shrineMountain.AppendInfo();
				if (ModSupport.modloaded_ExtraChallengeShrines)
				{
					ModSupport.MC_ExtraChallengeShrines.shrineCrown?.AppendInfo();
					ModSupport.MC_ExtraChallengeShrines.shrineEye?.AppendInfo();
					ModSupport.MC_ExtraChallengeShrines.shrineRock?.AppendInfo();
				}
			}
			else
			{
				if (flag)
				{
					shrineMountain.SayCount();
				}
				if (ModSupport.modloaded_ExtraChallengeShrines)
				{
					if (flag2)
					{
						ModSupport.MC_ExtraChallengeShrines.shrineCrown.SayCount();
					}
					if (flag3)
					{
						ModSupport.MC_ExtraChallengeShrines.shrineRock.SayCount();
					}
					if (flag4)
					{
						ModSupport.MC_ExtraChallengeShrines.shrineEye.SayCount();
					}
				}
				if (flag6)
				{
					SetupStringBuilder();
					int num = 1;
					num += shrineMountain.GetCount();
					if (ModSupport.modloaded_ExtraChallengeShrines)
					{
						ModSupport.MC_ExtraChallengeShrines.shrineCrown.GetCountExpanded(out var value, out var value2, out var value3);
						int num2 = (int)value2;
						num += num2;
						ModSupport.MC_ExtraChallengeShrines.shrineRock.GetCountExpanded(out value3, out var value4, out value);
						num += (int)value4;
					}
					Append(Language.GetStringFormatted("MOUNTAINCOUNT_SAYAMOUNT_EXPECTEDPERPERSON", new object[1] { num }));
				}
			}
			SayStringBuilder();
		}

		public static void SetupStringBuilder()
		{
			ModStringBuilder.Clear();
		}

		public static void Append(object line)
		{
			ModStringBuilder.Append("|" + line);
		}

		public static void SayStringBuilder()
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			string text = ModStringBuilder.ToString();
			if (!Utility.IsNullOrWhiteSpace(text))
			{
				Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
				{
					baseToken = text
				});
			}
		}

		public static void BossGroup_DropRewards(orig_DropRewards orig, BossGroup self)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Expected O, but got Unknown
			orig.Invoke(self);
			TeleporterInteraction instance = TeleporterInteraction.instance;
			if (Object.op_Implicit((Object)(object)instance) && (Object)(object)self == (Object)(object)instance.bossGroup)
			{
				Chat.SendBroadcastChat((ChatMessageBase)new UserChatMessage
				{
					text = Config.cfgPrintOnTeleporterEnd.Value
				});
			}
		}
	}
}