Decompiled source of HeyListen v1.2.1

HeyListen.dll

Decompiled 8 hours ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using ComfyLib;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Animations;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("HeyListen")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("HeyListen")]
[assembly: AssemblyCopyright("Copyright © 2022")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("eb95ade7-560b-4c07-9fcf-6e94de32fdab")]
[assembly: AssemblyFileVersion("1.2.1")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.2.1.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 HeyListen
{
	public sealed class DemisterBallControl : MonoBehaviour
	{
		public static readonly Color NoColor = new Color(-1f, -1f, -1f, -1f);

		private long _lastDataRevision;

		private float _lastBodyScale;

		private Color _lastBodyColor;

		private float _lastBodyBrightness;

		private Color _lastPointLightColor;

		private RendererSetting _demisterBallRenderer;

		private LightSetting _effectsPointLight;

		private ParticleSystemSetting _flameEffectsFlames;

		private ParticleSystemSetting _flameEffectsFlames2;

		private ParticleSystemSetting _flameEffectsFlare;

		private RendererSetting _flameEffectsEmbers;

		private RendererSetting _flameEffectsDistortion;

		private RendererSetting _flameEffectsEnergy;

		private ParticleSystemSetting _flameEffectsEnergy2;

		private RendererSetting _flameEffectsSparcs;

		public ZNetView NetView { get; private set; }

		private void Awake()
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			_lastDataRevision = -1L;
			_lastBodyScale = -1f;
			_lastBodyColor = NoColor;
			_lastBodyBrightness = -1f;
			_lastPointLightColor = NoColor;
			_demisterBallRenderer = new RendererSetting((Renderer)(object)((Component)((Component)this).transform.Find("demister_ball")).GetComponent<MeshRenderer>());
			_effectsPointLight = new LightSetting(((Component)((Component)this).transform.Find("effects/Point light")).GetComponent<Light>());
			_flameEffectsFlames = new ParticleSystemSetting(((Component)((Component)this).transform.Find("effects/flame/flames")).GetComponent<ParticleSystem>());
			_flameEffectsFlames2 = new ParticleSystemSetting(((Component)((Component)this).transform.Find("effects/flame/flames_local")).GetComponent<ParticleSystem>());
			_flameEffectsFlare = new ParticleSystemSetting(((Component)((Component)this).transform.Find("effects/flame/flare")).GetComponent<ParticleSystem>());
			_flameEffectsEmbers = new RendererSetting((Renderer)(object)((Component)((Component)this).transform.Find("effects/flame/embers")).GetComponent<ParticleSystemRenderer>());
			_flameEffectsDistortion = new RendererSetting((Renderer)(object)((Component)((Component)this).transform.Find("effects/flame/distortiion")).GetComponent<ParticleSystemRenderer>());
			_flameEffectsEnergy = new RendererSetting((Renderer)(object)((Component)((Component)this).transform.Find("effects/flame/energy")).GetComponent<ParticleSystemRenderer>());
			_flameEffectsEnergy2 = new ParticleSystemSetting(((Component)((Component)this).transform.Find("effects/flame/energy (1)")).GetComponent<ParticleSystem>());
			_flameEffectsSparcs = new RendererSetting((Renderer)(object)((Component)((Component)this).transform.Find("effects/flame/sparcs_front")).GetComponent<ParticleSystemRenderer>());
			NetView = ((Component)this).GetComponent<ZNetView>();
			if (Object.op_Implicit((Object)(object)NetView) && NetView.IsValid())
			{
				((MonoBehaviour)this).StartCoroutine(UpdateDemisterBallCoroutine());
			}
		}

		private void OnDestroy()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			((Component)this).transform.localScale = Vector3.one;
			_demisterBallRenderer.Reset();
			_effectsPointLight.Reset();
			_flameEffectsFlames.Reset();
			_flameEffectsFlames2.Reset();
			_flameEffectsFlare.Reset();
			_flameEffectsEmbers.Reset();
			_flameEffectsDistortion.Reset();
			_flameEffectsEnergy.Reset();
			_flameEffectsEnergy2.Reset();
			_flameEffectsSparcs.Reset();
		}

		private IEnumerator UpdateDemisterBallCoroutine()
		{
			WaitForSeconds waitInterval = new WaitForSeconds(2f);
			while (Object.op_Implicit((Object)(object)NetView) && NetView.IsValid())
			{
				UpdateDemisterBall();
				yield return waitInterval;
			}
		}

		public void UpdateDemisterBall(bool forceUpdate = false)
		{
			if (Object.op_Implicit((Object)(object)NetView) && NetView.IsValid() && PluginConfig.IsModEnabled.Value && (forceUpdate || _lastDataRevision < NetView.m_zdo.DataRevision))
			{
				_lastDataRevision = NetView.m_zdo.DataRevision;
				UpdateBodyScale(forceUpdate);
				UpdateBodyColor(forceUpdate);
				UpdatePointLightColor(forceUpdate);
				UpdateFlameEffects();
			}
		}

		private void UpdateBodyScale(bool forceUpdate = false)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			float @float = NetView.m_zdo.GetFloat(WispManager.DemisterBallBodyScaleHashCode, -1f);
			if (forceUpdate || @float != _lastBodyScale)
			{
				_lastBodyScale = @float;
				Vector3 val = Vector3.one * @float;
				((Component)this).transform.localScale = val;
				_flameEffectsFlames.SetScale(val);
				_flameEffectsFlames2.SetScale(val);
			}
		}

		private void UpdateBodyColor(bool forceUpdate = false)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//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_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			Color color = NetView.m_zdo.GetColor(WispManager.DemisterBallBodyColorHashCode, NoColor);
			float num = Mathf.Clamp(NetView.m_zdo.GetFloat(WispManager.DemisterBallBodyBrightnessHashCode, -1f), -1f, 2f);
			if (forceUpdate || !(color == _lastBodyColor) || num != _lastBodyBrightness)
			{
				if (num >= 0f && color != NoColor)
				{
					_demisterBallRenderer.SetColor(color);
					_demisterBallRenderer.SetEmissionColor(color * new Color(num, num, num, 1f));
				}
				else
				{
					_demisterBallRenderer.SetColor(_demisterBallRenderer.OriginalColor);
					_demisterBallRenderer.SetEmissionColor(_demisterBallRenderer.OriginalEmissionColor);
				}
				_lastBodyColor = color;
				_lastBodyBrightness = num;
			}
		}

		private void UpdatePointLightColor(bool forceUpdate)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//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_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			Color color = NetView.m_zdo.GetColor(WispManager.DemisterBallPointLightColorHashCode, NoColor);
			if (forceUpdate || !(color == _lastPointLightColor))
			{
				_effectsPointLight.SetColor((color == NoColor) ? _effectsPointLight.OriginalColor : color);
				_lastPointLightColor = color;
			}
		}

		public void UpdateFlameEffects()
		{
			//IL_0197: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: 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)
			PluginConfig.FlameEffects @int = (PluginConfig.FlameEffects)NetView.m_zdo.GetInt(WispManager.FlameEffectsEnabledHashCode, (int)PluginConfig.DefaultFlameEffects);
			_flameEffectsFlames.SetActive(@int.HasFlag(PluginConfig.FlameEffects.Flames));
			_flameEffectsFlames2.SetActive(@int.HasFlag(PluginConfig.FlameEffects.FlamesL));
			_flameEffectsFlare.SetActive(@int.HasFlag(PluginConfig.FlameEffects.Flare));
			_flameEffectsDistortion.SetActive(@int.HasFlag(PluginConfig.FlameEffects.Distortion));
			_flameEffectsEmbers.SetActive(@int.HasFlag(PluginConfig.FlameEffects.Embers));
			_flameEffectsDistortion.SetActive(@int.HasFlag(PluginConfig.FlameEffects.Distortion));
			_flameEffectsEnergy.SetActive(@int.HasFlag(PluginConfig.FlameEffects.Energy));
			_flameEffectsEnergy2.SetActive(@int.HasFlag(PluginConfig.FlameEffects.EnergyII));
			_flameEffectsSparcs.SetActive(@int.HasFlag(PluginConfig.FlameEffects.Sparcs));
			if (NetView.m_zdo.TryGetColor(WispManager.FlameEffectsColorHashCode, out var result))
			{
				_flameEffectsFlames.SetColorOverLifetimeColor(result);
				_flameEffectsFlames2.SetColorOverLifetimeColor(result);
				_flameEffectsFlare.SetStartColor(result.SetAlpha(0.1f));
				_flameEffectsEnergy2.SetStartColor(result.SetAlpha(0.1f));
			}
			else
			{
				_flameEffectsFlames.SetColorOverLifetimeColor(_flameEffectsFlames.OriginalColorOveLifetimeColor);
				_flameEffectsFlames2.SetColorOverLifetimeColor(_flameEffectsFlames2.OriginalColorOveLifetimeColor);
				_flameEffectsFlare.SetStartColor(_flameEffectsFlare.OriginalStartColor);
				_flameEffectsEnergy2.SetStartColor(_flameEffectsEnergy2.OriginalStartColor);
			}
			UpdateFlameEffectsRenderer(_flameEffectsEmbers, WispManager.FlameEffectsEmbersColorHashCode, WispManager.FlameEffectsEmbersBrightnessHashCode);
			UpdateFlameEffectsRenderer(_flameEffectsSparcs, WispManager.FlameEffectsSparcsColorHashCode, WispManager.FlameEffectsSparcsBrightnessHashCode);
		}

		private void UpdateFlameEffectsRenderer(RendererSetting rendererSetting, int colorHashCode, int brightnessHashCode)
		{
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//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)
			if (NetView.m_zdo.TryGetColor(colorHashCode, out var result) && NetView.m_zdo.TryGetFloat(brightnessHashCode, out var result2))
			{
				rendererSetting.SetColor(result).SetEmissionColor(result * new Color(result2, result2, result2, 1f));
			}
			else
			{
				rendererSetting.SetColor(rendererSetting.OriginalColor).SetEmissionColor(rendererSetting.OriginalEmissionColor);
			}
		}
	}
	public static class WispManager
	{
		public static readonly int ColorShaderId = Shader.PropertyToID("_Color");

		public static readonly int EmissionColorShaderId = Shader.PropertyToID("_EmissionColor");

		public static readonly int DemisterBallBodyScaleHashCode = StringExtensionMethods.GetStableHashCode("DemisterBallBodyScale");

		public static readonly int DemisterBallBodyColorHashCode = StringExtensionMethods.GetStableHashCode("DemisterBallBodyColor");

		public static readonly int DemisterBallBodyBrightnessHashCode = StringExtensionMethods.GetStableHashCode("DemisterBallBodyBrightness");

		public static readonly int DemisterBallPointLightColorHashCode = StringExtensionMethods.GetStableHashCode("DemisterBallPointLightColor");

		public static readonly int FlameEffectsEnabledHashCode = StringExtensionMethods.GetStableHashCode("FlameEffectsEnabled");

		public static readonly int FlameEffectsColorHashCode = StringExtensionMethods.GetStableHashCode("FlameEffectsColor");

		public static readonly int FlameEffectsEmbersColorHashCode = StringExtensionMethods.GetStableHashCode("FlameEffectsEmbersColor");

		public static readonly int FlameEffectsEmbersBrightnessHashCode = StringExtensionMethods.GetStableHashCode("FlameEffectsEmbersBrightness");

		public static readonly int FlameEffectsSparcsColorHashCode = StringExtensionMethods.GetStableHashCode("FlameEffectsSparcsColor");

		public static readonly int FlameEffectsSparcsBrightnessHashCode = StringExtensionMethods.GetStableHashCode("FlameEffectsSparcsBrightness");

		public static SE_Demister LocalPlayerDemister { get; set; }

		public static DemisterBallControl LocalPlayerDemisterBall { get; set; }

		public static ZNetView LocalPlayerDemisterBallNetView { get; set; }

		public static void SetLocalPlayerDemisterBallControl(DemisterBallControl demisterBallControl)
		{
			LocalPlayerDemisterBall = demisterBallControl;
			LocalPlayerDemisterBallNetView = demisterBallControl.NetView;
			UpdateDemisterBallControlZdo(LocalPlayerDemisterBallNetView.m_zdo);
			LocalPlayerDemisterBall.UpdateDemisterBall(forceUpdate: true);
		}

		public static void UpdatePlayerDemisterBall()
		{
			if (Object.op_Implicit((Object)(object)LocalPlayerDemisterBall) && Object.op_Implicit((Object)(object)LocalPlayerDemisterBallNetView))
			{
				UpdateDemisterBallControlZdo(LocalPlayerDemisterBallNetView.m_zdo);
				LocalPlayerDemisterBall.UpdateDemisterBall(forceUpdate: true);
			}
		}

		public static void UpdatePlayerDemisterBallFlameEffects()
		{
			if (Object.op_Implicit((Object)(object)LocalPlayerDemisterBall) && Object.op_Implicit((Object)(object)LocalPlayerDemisterBallNetView))
			{
				UpdateDemisterBallControlZdo(LocalPlayerDemisterBallNetView.m_zdo);
				LocalPlayerDemisterBall.UpdateFlameEffects();
			}
		}

		public static void UpdateUseCustomSettings()
		{
			bool flag = PluginConfig.IsModEnabled.Value && PluginConfig.DemisterBallUseCustomSettings.Value;
			DemisterBallControl demisterBallControl = default(DemisterBallControl);
			foreach (Demister instance in Demister.m_instances)
			{
				GameObject gameObject = ((Component)((Component)instance).transform.root).gameObject;
				if (!((Object)gameObject).name.StartsWith("demister_ball", StringComparison.Ordinal))
				{
					continue;
				}
				if (gameObject.TryGetComponent<DemisterBallControl>(ref demisterBallControl))
				{
					if (!flag)
					{
						Object.Destroy((Object)(object)demisterBallControl);
					}
				}
				else if (flag)
				{
					gameObject.AddComponent<DemisterBallControl>();
				}
			}
			if (flag)
			{
				LocalPlayerDemisterBall = null;
				LocalPlayerDemisterBallNetView = null;
			}
		}

		private static void UpdateDemisterBallControlZdo(ZDO zdo)
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			zdo.Set(DemisterBallBodyScaleHashCode, PluginConfig.DemisterBallBodyScale.Value);
			zdo.Set(DemisterBallBodyColorHashCode, PluginConfig.DemisterBallBodyColor.Value);
			zdo.Set(DemisterBallBodyBrightnessHashCode, PluginConfig.DemisterBallBodyBrightness.Value);
			zdo.Set(DemisterBallPointLightColorHashCode, PluginConfig.DemisterBallPointLightColor.Value);
			zdo.Set(FlameEffectsEnabledHashCode, (int)PluginConfig.DemisterBallFlameEffectsEnabled.Value, false);
			zdo.Set(FlameEffectsColorHashCode, PluginConfig.DemisterBallFlameEffectsColor.Value);
			zdo.Set(FlameEffectsEmbersColorHashCode, PluginConfig.FlameEffectsEmbersColor.Value);
			zdo.Set(FlameEffectsEmbersBrightnessHashCode, PluginConfig.FlameEffectsEmbersBrightness.Value);
			zdo.Set(FlameEffectsSparcsColorHashCode, PluginConfig.FlameEffectsSparcsColor.Value);
			zdo.Set(FlameEffectsSparcsBrightnessHashCode, PluginConfig.FlameEffectsSparcsBrightness.Value);
		}

		public static void SetupParentConstraint()
		{
			if (Object.op_Implicit((Object)(object)LocalPlayerDemister) && Object.op_Implicit((Object)(object)LocalPlayerDemister.m_ballInstance) && (Object)(object)((StatusEffect)LocalPlayerDemister).m_character == (Object)(object)Player.m_localPlayer)
			{
				ParentConstraint parentConstraint = default(ParentConstraint);
				if (!LocalPlayerDemister.m_ballInstance.TryGetComponent<ParentConstraint>(ref parentConstraint))
				{
					parentConstraint = LocalPlayerDemister.m_ballInstance.AddComponent<ParentConstraint>();
				}
				SetupParentConstraint(parentConstraint, ((StatusEffect)LocalPlayerDemister).m_character);
			}
		}

		public static void SetupParentConstraint(ParentConstraint parentConstraint, Character character)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			parentConstraint.constraintActive = PluginConfig.DemisterBallLockPosition.Value;
			ConstraintSource val;
			if (parentConstraint.sourceCount < 1)
			{
				val = default(ConstraintSource);
				parentConstraint.AddSource(val);
			}
			val = default(ConstraintSource);
			((ConstraintSource)(ref val)).sourceTransform = (Transform)(PluginConfig.DemisterBallLockTarget.Value switch
			{
				PluginConfig.LockTarget.Head => character.m_head, 
				PluginConfig.LockTarget.Eye => character.m_eye, 
				_ => ((Component)character).transform, 
			});
			((ConstraintSource)(ref val)).weight = 1f;
			ConstraintSource val2 = val;
			parentConstraint.SetSource(0, val2);
			parentConstraint.SetTranslationOffset(0, PluginConfig.DemisterBallLockOffset.Value);
		}
	}
	[BepInPlugin("redseiko.valheim.heylisten", "HeyListen", "1.2.1")]
	public sealed class HeyListen : BaseUnityPlugin
	{
		public const string PluginGuid = "redseiko.valheim.heylisten";

		public const string PluginName = "HeyListen";

		public const string PluginVersion = "1.2.1";

		private static ManualLogSource _logger;

		private void Awake()
		{
			_logger = ((BaseUnityPlugin)this).Logger;
			PluginConfig.BindConfig(((BaseUnityPlugin)this).Config);
			Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "redseiko.valheim.heylisten");
		}

		public static void LogInfo(object obj)
		{
			_logger.LogInfo((object)$"[{DateTime.Now.ToString(DateTimeFormatInfo.InvariantInfo)}] {obj}");
			Chat.m_instance.AddMessage(obj);
		}

		public static void LogError(object obj)
		{
			_logger.LogError((object)$"[{DateTime.Now.ToString(DateTimeFormatInfo.InvariantInfo)}] {obj}");
			Chat.m_instance.AddMessage(obj);
		}
	}
	[HarmonyPatch(typeof(Demister))]
	internal static class DemisterPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("Awake")]
		private static void AwakePostfix(ref Demister __instance)
		{
			if (PluginConfig.IsModEnabled.Value && PluginConfig.DemisterBallUseCustomSettings.Value)
			{
				GameObject gameObject = ((Component)((Component)__instance).transform.root).gameObject;
				DemisterBallControl demisterBallControl = default(DemisterBallControl);
				if (((Object)gameObject).name.StartsWith("demister_ball", StringComparison.InvariantCulture) && !gameObject.TryGetComponent<DemisterBallControl>(ref demisterBallControl))
				{
					gameObject.AddComponent<DemisterBallControl>();
				}
			}
		}
	}
	[HarmonyPatch(typeof(SE_Demister))]
	internal static class SEDemisterPatch
	{
		[HarmonyPostfix]
		[HarmonyPatch("Setup")]
		private static void SetupPostfix(SE_Demister __instance, Character character)
		{
			if (PluginConfig.IsModEnabled.Value && (Object)(object)character == (Object)(object)Player.m_localPlayer)
			{
				__instance.m_noiseSpeed *= Random.Range(0.8f, 1.2f);
				__instance.m_noiseDistance *= Random.Range(0.8f, 1.2f);
				__instance.m_noiseDistanceInterior *= Random.Range(0.8f, 1.2f);
				__instance.m_noiseDistanceYScale *= Random.Range(0.8f, 1.2f);
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch("UpdateStatusEffect")]
		private static void UpdateStatusEffectPrefix(SE_Demister __instance, ref bool __state)
		{
			if (PluginConfig.IsModEnabled.Value)
			{
				__state = Object.op_Implicit((Object)(object)__instance.m_ballInstance);
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("UpdateStatusEffect")]
		private static void UpdateStatusEffectPostfix(SE_Demister __instance, ref bool __state)
		{
			if (PluginConfig.IsModEnabled.Value && Object.op_Implicit((Object)(object)__instance.m_ballInstance) && (!__state || !Object.op_Implicit((Object)(object)WispManager.LocalPlayerDemisterBall)) && (Object)(object)((StatusEffect)__instance).m_character == (Object)(object)Player.m_localPlayer)
			{
				WispManager.LocalPlayerDemister = __instance;
				DemisterBallControl localPlayerDemisterBallControl = default(DemisterBallControl);
				if (__instance.m_ballInstance.TryGetComponent<DemisterBallControl>(ref localPlayerDemisterBallControl))
				{
					WispManager.SetLocalPlayerDemisterBallControl(localPlayerDemisterBallControl);
				}
				ParentConstraint val = default(ParentConstraint);
				if (!__instance.m_ballInstance.TryGetComponent<ParentConstraint>(ref val))
				{
					WispManager.SetupParentConstraint(__instance.m_ballInstance.AddComponent<ParentConstraint>(), ((StatusEffect)__instance).m_character);
				}
			}
		}
	}
	public static class PluginConfig
	{
		public enum LockTarget
		{
			Head,
			Eye,
			Transform
		}

		[Flags]
		public enum FlameEffects
		{
			None = 0,
			Flames = 1,
			FlamesL = 2,
			Flare = 4,
			Embers = 8,
			Distortion = 0x10,
			Energy = 0x20,
			EnergyII = 0x40,
			Sparcs = 0x80
		}

		public static readonly FlameEffects DefaultFlameEffects = FlameEffects.Flare | FlameEffects.Embers | FlameEffects.EnergyII | FlameEffects.Sparcs;

		public static ConfigEntry<bool> IsModEnabled { get; private set; }

		public static ConfigEntry<bool> DemisterBallLockPosition { get; private set; }

		public static ConfigEntry<Vector3> DemisterBallLockOffset { get; private set; }

		public static ConfigEntry<LockTarget> DemisterBallLockTarget { get; private set; }

		public static ConfigEntry<bool> DemisterBallUseCustomSettings { get; private set; }

		public static ConfigEntry<float> DemisterBallBodyScale { get; private set; }

		public static ConfigEntry<Color> DemisterBallBodyColor { get; private set; }

		public static ConfigEntry<float> DemisterBallBodyBrightness { get; private set; }

		public static ConfigEntry<Color> DemisterBallPointLightColor { get; private set; }

		public static ConfigEntry<FlameEffects> DemisterBallFlameEffectsEnabled { get; private set; }

		public static ConfigEntry<Color> DemisterBallFlameEffectsColor { get; private set; }

		public static ConfigEntry<Color> FlameEffectsEmbersColor { get; private set; }

		public static ConfigEntry<float> FlameEffectsEmbersBrightness { get; private set; }

		public static ConfigEntry<Color> FlameEffectsSparcsColor { get; private set; }

		public static ConfigEntry<float> FlameEffectsSparcsBrightness { get; private set; }

		public static void BindConfig(ConfigFile config)
		{
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_036b: Unknown result type (might be due to invalid IL or missing references)
			IsModEnabled = config.BindInOrder("_Global", "isModEnabled", defaultValue: true, "Globally enable or disable this mod.");
			IsModEnabled.OnSettingChanged<bool>(WispManager.UpdateUseCustomSettings);
			IsModEnabled.OnSettingChanged<bool>(WispManager.SetupParentConstraint);
			DemisterBallLockPosition = config.BindInOrder("DemisterBall", "demisterBallLockPosition", defaultValue: true, "SE_Demister.m_ballPrefab.transform.position lock to player.");
			DemisterBallLockPosition.OnSettingChanged<bool>(WispManager.SetupParentConstraint);
			DemisterBallLockOffset = config.BindInOrder<Vector3>("DemisterBall", "demisterBallLockOffset", new Vector3(-0.2f, 0.5f, 0f), "SE_Demister.m_ballPrefab.transform.position offset when locked to player.");
			DemisterBallLockOffset.OnSettingChanged<Vector3>(WispManager.SetupParentConstraint);
			DemisterBallLockTarget = config.BindInOrder("DemisterBall", "demisterBallLockTarget", LockTarget.Head, "Which target to offset from when locked to player.");
			DemisterBallLockTarget.OnSettingChanged<LockTarget>(WispManager.SetupParentConstraint);
			DemisterBallUseCustomSettings = config.BindInOrder("DemisterBall.Customization", "demisterBallUseCustomSettings", defaultValue: true, "Enables DemisterBall (Wisp) customization.");
			DemisterBallUseCustomSettings.OnSettingChanged<bool>(WispManager.UpdateUseCustomSettings);
			DemisterBallBodyScale = config.BindInOrder("Effects.Body", "bodyScale", 1f, "SE_demister.m_ballPrefab.transform.localScale", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 2f));
			DemisterBallBodyScale.OnSettingChanged<float>(WispManager.UpdatePlayerDemisterBall);
			DemisterBallBodyColor = config.BindInOrder<Color>("Effects.Body", "bodyColor", new Color(0f, 0.832f, 1f, 1f), "SE Demister.m_ballPrefab.color");
			DemisterBallBodyColor.OnSettingChanged<Color>(WispManager.UpdatePlayerDemisterBall);
			DemisterBallBodyBrightness = config.BindInOrder("Effects.Body", "bodyBrightness", 1.2f, "SE_Demister.m_ballPrefab.brightness", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 2f));
			DemisterBallBodyBrightness.OnSettingChanged<float>(WispManager.UpdatePlayerDemisterBall);
			DemisterBallPointLightColor = config.BindInOrder<Color>("Effects.PointLight", "pointLightColor", new Color(0.482f, 0.803f, 1f, 1f), "SE_Demister.m_ballPrefab/effects/Point light.color");
			DemisterBallPointLightColor.OnSettingChanged<Color>(WispManager.UpdatePlayerDemisterBall);
			DemisterBallFlameEffectsEnabled = config.BindInOrder("FlameEffects", "flameEffectsEnabled", DefaultFlameEffects, "SE_Demister.m_ballPrefab/effects/flame/...");
			DemisterBallFlameEffectsEnabled.OnSettingChanged<FlameEffects>(WispManager.UpdatePlayerDemisterBallFlameEffects);
			DemisterBallFlameEffectsColor = config.BindInOrder<Color>("FlameEffects", "flameEffectsColor", new Color(0.482f, 0.803f, 1f, 1f), "SE_Demister.m_ballPrefab/effects/flame/... color.");
			DemisterBallFlameEffectsColor.OnSettingChanged<Color>(WispManager.UpdatePlayerDemisterBallFlameEffects);
			BindFlameEffectsEmbersConfig(config);
			BindFlameEffectsSparcsConfig(config);
		}

		public static void BindFlameEffectsEmbersConfig(ConfigFile config)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			FlameEffectsEmbersColor = config.BindInOrder<Color>("FlameEffects.Embers", "embersColor", new Color(0f, 0.677f, 1f, 1f), "m_ballPrefab/effects/flame/embers.color");
			FlameEffectsEmbersColor.OnSettingChanged<Color>(WispManager.UpdatePlayerDemisterBallFlameEffects);
			FlameEffectsEmbersBrightness = config.BindInOrder("FlameEffects.Embers", "embersBrightness", 5.34f, "m_ballPrefab/effects/flame/embers.brightness", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5.34f));
			FlameEffectsEmbersBrightness.OnSettingChanged<float>(WispManager.UpdatePlayerDemisterBallFlameEffects);
		}

		public static void BindFlameEffectsSparcsConfig(ConfigFile config)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			FlameEffectsSparcsColor = config.BindInOrder<Color>("FlameEffects.Sparcs", "sparcsColor", new Color(0f, 0.677f, 1f, 1f), "m_ballPrefab/effects/flame/sparcs.color");
			FlameEffectsSparcsColor.OnSettingChanged<Color>(WispManager.UpdatePlayerDemisterBallFlameEffects);
			FlameEffectsSparcsBrightness = config.BindInOrder("FlameEffects.Sparcs", "sparcsBrightness", 5.34f, "m_ballPrefab/effects/flame/sparcs.brightness", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5.34f));
			FlameEffectsSparcsBrightness.OnSettingChanged<float>(WispManager.UpdatePlayerDemisterBallFlameEffects);
		}
	}
}
namespace ComfyLib
{
	public static class ZDOExtensions
	{
		public static void Set(this ZDO zdo, int key, Color value)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: 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_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			if (ZDOHelper.InitAndSet<Quaternion>(ZDOExtraData.s_quats, zdo.m_uid, key, new Quaternion(value.r, value.g, value.b, value.a)))
			{
				zdo.IncreaseDataRevision();
			}
		}

		public static Color GetColor(this ZDO zdo, int key, Color defaultValue)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: 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)
			Quaternion val = default(Quaternion);
			if (ZDOExtraData.s_quats.TryGetValue(zdo.m_uid, out var value) && value.TryGetValue(key, ref val))
			{
				return new Color(val.x, val.y, val.z, val.w);
			}
			return defaultValue;
		}

		public static bool TryGetColor(this ZDO zdo, int key, out Color result)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			Quaternion val = default(Quaternion);
			if (ZDOExtraData.s_quats.TryGetValue(zdo.m_uid, out var value) && value.TryGetValue(key, ref val))
			{
				result = new Color(val.x, val.y, val.z, val.w);
				return true;
			}
			result = default(Color);
			return false;
		}

		public static bool TryGetFloat(this ZDO zdo, int key, out float result)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			if (ZDOExtraData.s_floats.TryGetValue(zdo.m_uid, out var value) && value.TryGetValue(key, ref result))
			{
				return true;
			}
			result = 0f;
			return false;
		}
	}
	public sealed class LightSetting
	{
		private readonly Light _light;

		public Vector3 OriginalScale { get; }

		public Vector3 CurrentScale { get; private set; }

		public Color OriginalColor { get; }

		public Color CurrentColor { get; private set; }

		public LightSetting(Light light)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			_light = light;
			OriginalScale = ((Component)light).transform.localScale;
			CurrentScale = OriginalScale;
			OriginalColor = light.color;
			CurrentColor = OriginalColor;
		}

		public LightSetting Reset()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			SetScale(OriginalScale);
			SetColor(OriginalColor);
			return this;
		}

		public LightSetting SetScale(Vector3 scale)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			if (scale != CurrentScale)
			{
				CurrentScale = scale;
				((Component)_light).transform.localScale = scale;
			}
			return this;
		}

		public LightSetting SetColor(Color color)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			if (color != CurrentColor)
			{
				CurrentColor = color;
				_light.color = color;
			}
			return this;
		}
	}
	public static class ParticleSystemExtensions
	{
		public static MainModule Main(this ParticleSystem particleSystem)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return particleSystem.main;
		}

		public static MainModule SetStartColor(this MainModule main, MinMaxGradient color)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			((MainModule)(ref main)).startColor = color;
			return main;
		}

		public static ColorOverLifetimeModule ColorOverLifetime(this ParticleSystem particleSystem)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			return particleSystem.colorOverLifetime;
		}

		public static ColorOverLifetimeModule SetColor(this ColorOverLifetimeModule colorOverLifetime, MinMaxGradient color)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			((ColorOverLifetimeModule)(ref colorOverLifetime)).color = color;
			return colorOverLifetime;
		}

		public static string ToDebugString(this MinMaxGradient minMaxGradient)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Expected I4, but got Unknown
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			ParticleSystemGradientMode mode = ((MinMaxGradient)(ref minMaxGradient)).mode;
			return (int)mode switch
			{
				0 => $"Color: {((MinMaxGradient)(ref minMaxGradient)).color:F3}", 
				2 => $"TwoColor: ColorMin ({((MinMaxGradient)(ref minMaxGradient)).colorMin:F3}), ColorMax ({((MinMaxGradient)(ref minMaxGradient)).colorMax:F3})", 
				1 => "Gradient: " + ((MinMaxGradient)(ref minMaxGradient)).gradient.ToDebugString(), 
				3 => "TwoGradients: GradientMin (" + ((MinMaxGradient)(ref minMaxGradient)).gradientMin.ToDebugString() + "), GradientMax (" + ((MinMaxGradient)(ref minMaxGradient)).gradientMax.ToDebugString() + ")", 
				4 => "RandomColor: " + ((MinMaxGradient)(ref minMaxGradient)).gradient.ToDebugString(), 
				_ => $"{minMaxGradient}", 
			};
		}

		public static string ToDebugString(this Gradient gradient)
		{
			return string.Format("ColorKeys = [{0}], AlphaKeys = [{1}]", string.Join(", ", gradient.colorKeys.Select((GradientColorKey key) => $"({key.time:F3} {key.color:F3})")), string.Join(", ", gradient.alphaKeys.Select((GradientAlphaKey key) => $"({key.time:F3} {key.alpha:F3})")));
		}
	}
	public sealed class ParticleSystemSetting
	{
		private readonly ParticleSystem _particleSystem;

		public Vector3 OriginalScale { get; }

		public Vector3 CurrentScale { get; private set; }

		public MinMaxGradient OriginalStartColor { get; }

		public MinMaxGradient CurrentStartColor { get; private set; }

		public MinMaxGradient OriginalColorOveLifetimeColor { get; }

		public MinMaxGradient CurrentColorOverLifetimeColor { get; private set; }

		public ParticleSystemSetting(ParticleSystem particleSystem)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			_particleSystem = particleSystem;
			OriginalScale = ((Component)particleSystem).transform.localScale;
			CurrentScale = OriginalScale;
			MainModule main = particleSystem.main;
			OriginalStartColor = ((MainModule)(ref main)).startColor;
			CurrentStartColor = OriginalStartColor;
			ColorOverLifetimeModule colorOverLifetime = particleSystem.colorOverLifetime;
			OriginalColorOveLifetimeColor = ((ColorOverLifetimeModule)(ref colorOverLifetime)).color;
			CurrentColorOverLifetimeColor = OriginalColorOveLifetimeColor;
		}

		public ParticleSystemSetting Reset()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			SetScale(OriginalScale);
			SetStartColor(OriginalStartColor);
			SetColorOverLifetimeColor(OriginalColorOveLifetimeColor);
			return this;
		}

		public ParticleSystemSetting SetActive(bool active)
		{
			((Component)_particleSystem).gameObject.SetActive(active);
			return this;
		}

		public ParticleSystemSetting SetScale(Vector3 scale)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			if (scale != CurrentScale)
			{
				CurrentScale = scale;
				((Component)_particleSystem).transform.localScale = scale;
			}
			return this;
		}

		public ParticleSystemSetting SetStartColor(Color color)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			return this.SetStartColor(new MinMaxGradient(color));
		}

		public ParticleSystemSetting SetStartColor(MinMaxGradient color)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//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)
			CurrentStartColor = color;
			_particleSystem.Main().SetStartColor(CurrentStartColor);
			return this;
		}

		public ParticleSystemSetting SetColorOverLifetimeColor(Color color)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			return this.SetColorOverLifetimeColor(new MinMaxGradient(color));
		}

		public ParticleSystemSetting SetColorOverLifetimeColor(MinMaxGradient color)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//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)
			CurrentColorOverLifetimeColor = color;
			_particleSystem.ColorOverLifetime().SetColor(CurrentColorOverLifetimeColor);
			return this;
		}
	}
	public sealed class RendererSetting
	{
		private static readonly int _colorShaderId = Shader.PropertyToID("_Color");

		private static readonly int _emissionColorShaderId = Shader.PropertyToID("_EmissionColor");

		private readonly Renderer _renderer;

		public Vector3 OriginalScale { get; }

		public Vector3 CurrentScale { get; private set; }

		public Color OriginalColor { get; }

		public Color OriginalEmissionColor { get; }

		public Color CurrentColor { get; private set; }

		public Color CurrentEmissionColor { get; private set; }

		public RendererSetting(Renderer renderer)
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: 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_0073: Unknown result type (might be due to invalid IL or missing references)
			_renderer = renderer;
			OriginalScale = ((Component)_renderer).transform.localScale;
			OriginalColor = _renderer.material.GetColor(_colorShaderId);
			OriginalEmissionColor = _renderer.material.GetColor(_emissionColorShaderId);
			CurrentScale = OriginalScale;
			CurrentColor = OriginalColor;
			CurrentEmissionColor = CurrentEmissionColor;
		}

		public RendererSetting Reset()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			SetScale(OriginalScale);
			SetColor(OriginalColor);
			SetEmissionColor(OriginalEmissionColor);
			return this;
		}

		public RendererSetting SetActive(bool active)
		{
			((Component)_renderer).gameObject.SetActive(active);
			return this;
		}

		public RendererSetting SetScale(Vector3 scale)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			if (scale != CurrentScale)
			{
				CurrentScale = scale;
				((Component)_renderer).transform.localScale = scale;
			}
			return this;
		}

		public RendererSetting SetColor(Color color)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			if (color != CurrentColor)
			{
				CurrentColor = color;
				_renderer.material.SetColor(_colorShaderId, color);
			}
			return this;
		}

		public RendererSetting SetEmissionColor(Color color)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			if (color != CurrentEmissionColor)
			{
				CurrentEmissionColor = color;
				_renderer.material.SetColor(_emissionColorShaderId, color);
			}
			return this;
		}
	}
	public static class ConfigFileExtensions
	{
		internal sealed class ConfigurationManagerAttributes
		{
			public Action<ConfigEntryBase> CustomDrawer;

			public bool? Browsable;

			public bool? HideDefaultButton;

			public bool? HideSettingName;

			public bool? IsAdvanced;

			public int? Order;

			public bool? ReadOnly;
		}

		private static readonly Dictionary<string, int> _sectionToSettingOrder = new Dictionary<string, int>();

		private static int GetSettingOrder(string section)
		{
			if (!_sectionToSettingOrder.TryGetValue(section, out var value))
			{
				value = 0;
			}
			_sectionToSettingOrder[section] = value - 1;
			return value;
		}

		public static ConfigEntry<T> BindInOrder<T>(this ConfigFile config, string section, string key, T defaultValue, string description, AcceptableValueBase acceptableValues, bool browsable = true, bool hideDefaultButton = false, bool hideSettingName = false, bool isAdvanced = false, bool readOnly = false)
		{
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Expected O, but got Unknown
			return config.Bind<T>(section, key, defaultValue, new ConfigDescription(description, acceptableValues, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Browsable = browsable,
					CustomDrawer = null,
					HideDefaultButton = hideDefaultButton,
					HideSettingName = hideSettingName,
					IsAdvanced = isAdvanced,
					Order = GetSettingOrder(section),
					ReadOnly = readOnly
				}
			}));
		}

		public static ConfigEntry<T> BindInOrder<T>(this ConfigFile config, string section, string key, T defaultValue, string description, Action<ConfigEntryBase> customDrawer = null, bool browsable = true, bool hideDefaultButton = false, bool hideSettingName = false, bool isAdvanced = false, bool readOnly = false)
		{
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Expected O, but got Unknown
			return config.Bind<T>(section, key, defaultValue, new ConfigDescription(description, (AcceptableValueBase)null, new object[1]
			{
				new ConfigurationManagerAttributes
				{
					Browsable = browsable,
					CustomDrawer = customDrawer,
					HideDefaultButton = hideDefaultButton,
					HideSettingName = hideSettingName,
					IsAdvanced = isAdvanced,
					Order = GetSettingOrder(section),
					ReadOnly = readOnly
				}
			}));
		}

		public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action settingChangedHandler)
		{
			configEntry.SettingChanged += delegate
			{
				settingChangedHandler();
			};
		}

		public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action<T> settingChangedHandler)
		{
			configEntry.SettingChanged += delegate(object _, EventArgs eventArgs)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				settingChangedHandler((T)((SettingChangedEventArgs)eventArgs).ChangedSetting.BoxedValue);
			};
		}

		public static void OnSettingChanged<T>(this ConfigEntry<T> configEntry, Action<ConfigEntry<T>> settingChangedHandler)
		{
			configEntry.SettingChanged += delegate(object _, EventArgs eventArgs)
			{
				//IL_0007: Unknown result type (might be due to invalid IL or missing references)
				settingChangedHandler((ConfigEntry<T>)((SettingChangedEventArgs)eventArgs).ChangedSetting.BoxedValue);
			};
		}
	}
	public static class ChatExtensions
	{
		public static void AddMessage(this Chat chat, object obj)
		{
			if (Object.op_Implicit((Object)(object)chat))
			{
				((Terminal)chat).AddString($"{obj}");
				chat.m_hideTimer = 0f;
			}
		}
	}
	public static class ColorExtensions
	{
		public static Color SetAlpha(this Color color, float alpha)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			color.a = alpha;
			return color;
		}
	}
	public static class ObjectExtensions
	{
		public static T FirstByNameOrThrow<T>(this T[] unityObjects, string name) where T : Object
		{
			foreach (T val in unityObjects)
			{
				if (((Object)val).name == name)
				{
					return val;
				}
			}
			throw new InvalidOperationException($"Could not find Unity object of type {typeof(T)} with name: {name}");
		}

		public static T Ref<T>(this T unityObject) where T : Object
		{
			if (!Object.op_Implicit((Object)(object)unityObject))
			{
				return default(T);
			}
			return unityObject;
		}
	}
}