Decompiled source of DvergrLightControl v1.2.2

DvergrLightControl.dll

Decompiled 2 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
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("DvergrLightControl")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("DvergrLightControl")]
[assembly: AssemblyTitle("DvergrLightControl")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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]
	[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]
	[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 DvergrLightControl
{
	[BepInPlugin("com.Azura.dvergrlightcontrol", "Dvergr Light Control", "1.2.2")]
	[BepInProcess("valheim.exe")]
	[BepInProcess("valheim.x86_64")]
	public class DvergrLightControlPlugin : BaseUnityPlugin
	{
		public const string PluginGUID = "com.Azura.dvergrlightcontrol";

		public const string PluginName = "Dvergr Light Control";

		public const string PluginVersion = "1.2.2";

		private ConfigEntry<KeyboardShortcut> m_toggleKey;

		private ConfigEntry<bool> m_autoDaylight;

		private ConfigEntry<bool> m_showNotification;

		private ConfigEntry<bool> m_applyToOtherPlayers;

		private bool m_lightEnabled = true;

		private bool? m_lastIsDark;

		private float m_checkTimer;

		private static readonly List<Light> s_lights = new List<Light>();

		public static DvergrLightControlPlugin Instance { get; private set; } = null;

		public static ManualLogSource Log => ((BaseUnityPlugin)Instance).Logger;

		private void Awake()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: 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)
			Instance = this;
			m_toggleKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("1. Raccourcis", "ToggleKey", new KeyboardShortcut((KeyCode)108, Array.Empty<KeyCode>()), "Key that turns the Dvergr circlet's light on or off by hand.\nTouche pour allumer ou éteindre à la main la lumière du diadème de Dvergr.");
			m_autoDaylight = ((BaseUnityPlugin)this).Config.Bind<bool>("2. Automatisation", "AutoDaylight", true, "Turns the light off in daylight outdoors, and back on at night and in crypts, caves and dungeons.\nÉteint la lumière en plein jour à l'extérieur, et la rallume la nuit et dans les cryptes, grottes et donjons.");
			m_showNotification = ((BaseUnityPlugin)this).Config.Bind<bool>("3. Affichage", "ShowNotification", true, "Show a short notice on screen when the light switches.\nAffiche un court message à l'écran quand la lumière bascule.");
			m_applyToOtherPlayers = ((BaseUnityPlugin)this).Config.Bind<bool>("4. Multijoueur", "ApplyToOtherPlayers", true, "Also dims other players' circlets in daylight, on your screen only.\nÉteint aussi le diadème des autres joueurs en journée, sur votre écran seulement.");
			ManualLogSource logger = ((BaseUnityPlugin)this).Logger;
			object[] obj = new object[4] { "Dvergr Light Control", "1.2.2", null, null };
			KeyboardShortcut value = m_toggleKey.Value;
			obj[2] = ((KeyboardShortcut)(ref value)).MainKey;
			obj[3] = m_autoDaylight.Value;
			logger.LogInfo((object)string.Format("{0} v{1} loaded. Key: {2}, AutoDaylight: {3}", obj));
		}

		private void Update()
		{
			//IL_0025: 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)
			Player localPlayer = Player.m_localPlayer;
			if ((Object)(object)localPlayer == (Object)null || ((Character)localPlayer).IsDead())
			{
				return;
			}
			if (!IsInputBlocked())
			{
				KeyboardShortcut value = m_toggleKey.Value;
				if (((KeyboardShortcut)(ref value)).IsDown())
				{
					m_lightEnabled = !m_lightEnabled;
					NotifyPlayer(Traductions.Texte(m_lightEnabled ? "allume" : "eteint"));
				}
			}
			if (m_autoDaylight.Value)
			{
				m_checkTimer += Time.deltaTime;
				if (m_checkTimer >= 1f)
				{
					m_checkTimer = 0f;
					CheckDaylightTransition(localPlayer);
				}
			}
		}

		private void LateUpdate()
		{
			Player localPlayer = Player.m_localPlayer;
			if ((Object)(object)localPlayer == (Object)null)
			{
				return;
			}
			ApplyLightState(localPlayer, m_lightEnabled);
			if (!m_applyToOtherPlayers.Value)
			{
				return;
			}
			List<Player> allPlayers = Player.GetAllPlayers();
			if (allPlayers == null || allPlayers.Count < 2)
			{
				return;
			}
			bool flag = IsEnvironmentDark(localPlayer);
			foreach (Player item in allPlayers)
			{
				if ((Object)(object)item != (Object)null && (Object)(object)item != (Object)(object)localPlayer)
				{
					ApplyLightState(item, flag || ((Character)item).InInterior());
				}
			}
		}

		private void CheckDaylightTransition(Player player)
		{
			bool flag = IsEnvironmentDark(player);
			if (!m_lastIsDark.HasValue)
			{
				m_lastIsDark = flag;
				m_lightEnabled = flag;
			}
			else if (m_lastIsDark.Value != flag)
			{
				m_lastIsDark = flag;
				m_lightEnabled = flag;
				NotifyPlayer(Traductions.Texte(flag ? "nuit" : "jour"));
			}
		}

		private static bool IsEnvironmentDark(Player player)
		{
			if ((Object)(object)player == (Object)null)
			{
				return false;
			}
			if (((Character)player).InInterior())
			{
				return true;
			}
			return !EnvMan.IsDaylight();
		}

		private static void ApplyLightState(Player player, bool state)
		{
			VisEquipment val = default(VisEquipment);
			if (!((Component)player).TryGetComponent<VisEquipment>(ref val) || (Object)(object)val.m_helmet == (Object)null)
			{
				return;
			}
			((Component)val.m_helmet).GetComponentsInChildren<Light>(true, s_lights);
			foreach (Light s_light in s_lights)
			{
				if ((Object)(object)s_light != (Object)null && ((Behaviour)s_light).enabled != state)
				{
					((Behaviour)s_light).enabled = state;
				}
			}
			s_lights.Clear();
		}

		private static bool IsInputBlocked()
		{
			if ((Object)(object)Chat.instance != (Object)null && Chat.instance.HasFocus())
			{
				return true;
			}
			if (Console.IsVisible())
			{
				return true;
			}
			if (Menu.IsVisible())
			{
				return true;
			}
			if (TextInput.IsVisible())
			{
				return true;
			}
			return false;
		}

		private void NotifyPlayer(string message)
		{
			if (m_showNotification.Value && (Object)(object)MessageHud.instance != (Object)null)
			{
				MessageHud.instance.ShowMessage((MessageType)1, "\ud83d\udca1 " + message, 0, (Sprite)null, false, true);
			}
		}
	}
	internal static class Traductions
	{
		internal static readonly string[] Langues = new string[36]
		{
			"English", "Swedish", "French", "Italian", "German", "Spanish", "Russian", "Romanian", "Bulgarian", "Macedonian",
			"Finnish", "Danish", "Norwegian", "Icelandic", "Turkish", "Lithuanian", "Czech", "Hungarian", "Slovak", "Polish",
			"Dutch", "Portuguese_European", "Portuguese_Brazilian", "Chinese", "Chinese_Trad", "Japanese", "Korean", "Hindi", "Thai", "Abenaki",
			"Croatian", "Georgian", "Greek", "Serbian", "Ukrainian", "Latvian"
		};

		private static readonly string[] Cultures = new string[36]
		{
			"en-US", "sv-SE", "fr-FR", "it-IT", "de-DE", "es-ES", "ru-RU", "ro-RO", "bg-BG", "mk-MK",
			"fi-FI", "da-DK", "nb-NO", "is-IS", "tr-TR", "lt-LT", "cs-CZ", "hu-HU", "sk-SK", "pl-PL",
			"nl-NL", "pt-PT", "pt-BR", "zh-CN", "zh-TW", "ja-JP", "ko-KR", "hi-IN", "th-TH", "en-US",
			"hr-HR", "ka-GE", "el-GR", "sr-Latn-RS", "uk-UA", "lv-LV"
		};

		internal static readonly Dictionary<string, string[]> Textes = new Dictionary<string, string[]>
		{
			["allume"] = new string[36]
			{
				"Dverger Circlet: on", "Dvärgadiadem: på", "Diadème de dverger : allumé", "Diadema di Dverger: acceso", "Dverger-Reif: an", "Diadema de Dverger: encendida", "Венец Двергов: включён", "Coroniță Dverger: pornită", "Двергски челник: включен", "Двергерска дијадема: вклучена",
				"Dverger-koru: päällä", "Dvergerdiadem: tændt", "Dvergdiadem: på", "Dvergahringur: kveikt", "Dverger tacı: açık", "Nykštukų šalmas: įjungtas", "Trpasličí kroužek: zapnuto", "Dverger fejdísz: be", "Trpasličí diadém: zapnutý", "Diadem Dvergera: włączony",
				"Dvergerdiadeem: aan", "Diadema Dverger: ligado", "Argola Dverger: ligada", "矮人光环:开启", "矮人頭環:開啟", "ドヴェルガーのサークレット:オン", "드베르그 관: 켜짐", "ड\u094dव\u0947र\u094dगर म\u0941क\u0941ट: च\u093eल\u0942", "มงก\u0e38ฎห\u0e34นเวทย\u0e4c: เป\u0e34ด", null,
				"Dvergerska dijadema: uključena", "დვარფების გვირგვინი: ჩართულია", "Διάδημα Dverger: αναμμένο", "Dvergerski dijadem: uključen", "Дворфський вінець: увімкнено", "Dvergera diadēma: ieslēgta"
			},
			["eteint"] = new string[36]
			{
				"Dverger Circlet: off", "Dvärgadiadem: av", "Diadème de dverger : éteint", "Diadema di Dverger: spento", "Dverger-Reif: aus", "Diadema de Dverger: apagada", "Венец Двергов: выключен", "Coroniță Dverger: oprită", "Двергски челник: изключен", "Двергерска дијадема: исклучена",
				"Dverger-koru: pois", "Dvergerdiadem: slukket", "Dvergdiadem: av", "Dvergahringur: slökkt", "Dverger tacı: kapalı", "Nykštukų šalmas: išjungtas", "Trpasličí kroužek: vypnuto", "Dverger fejdísz: ki", "Trpasličí diadém: vypnutý", "Diadem Dvergera: wyłączony",
				"Dvergerdiadeem: uit", "Diadema Dverger: desligado", "Argola Dverger: desligada", "矮人光环:关闭", "矮人頭環:關閉", "ドヴェルガーのサークレット:オフ", "드베르그 관: 꺼짐", "ड\u094dव\u0947र\u094dगर म\u0941क\u0941ट: ब\u0902द", "มงก\u0e38ฎห\u0e34นเวทย\u0e4c: ป\u0e34ด", null,
				"Dvergerska dijadema: isključena", "დვარფების გვირგვინი: გამორთულია", "Διάδημα Dverger: σβηστό", "Dvergerski dijadem: isključen", "Дворфський вінець: вимкнено", "Dvergera diadēma: izslēgta"
			},
			["nuit"] = new string[36]
			{
				"Dverger Circlet: night mode (on)", "Dvärgadiadem: nattläge (på)", "Diadème de dverger : mode nuit (allumé)", "Diadema di Dverger: modalità notte (acceso)", "Dverger-Reif: Nachtmodus (an)", "Diadema de Dverger: modo noche (encendida)", "Венец Двергов: ночной режим (включён)", "Coroniță Dverger: mod noapte (pornită)", "Двергски челник: нощен режим (включен)", "Двергерска дијадема: ноќен режим (вклучена)",
				"Dverger-koru: yötila (päällä)", "Dvergerdiadem: nattilstand (tændt)", "Dvergdiadem: nattmodus (på)", "Dvergahringur: næturstilling (kveikt)", "Dverger tacı: gece modu (açık)", "Nykštukų šalmas: nakties režimas (įjungtas)", "Trpasličí kroužek: noční režim (zapnuto)", "Dverger fejdísz: éjszakai mód (be)", "Trpasličí diadém: nočný režim (zapnutý)", "Diadem Dvergera: tryb nocny (włączony)",
				"Dvergerdiadeem: nachtmodus (aan)", "Diadema Dverger: modo noturno (ligado)", "Argola Dverger: modo noturno (ligada)", "矮人光环:夜间模式(开启)", "矮人頭環:夜間模式(開啟)", "ドヴェルガーのサークレット:夜モード(オン)", "드베르그 관: 야간 모드 (켜짐)", "ड\u094dव\u0947र\u094dगर म\u0941क\u0941ट: र\u093eत म\u094bड (च\u093eल\u0942)", "มงก\u0e38ฎห\u0e34นเวทย\u0e4c: โหมดกลางค\u0e37น (เป\u0e34ด)", null,
				"Dvergerska dijadema: noćni način (uključena)", "დვარფების გვირგვინი: ღამის რეჟიმი (ჩართულია)", "Διάδημα Dverger: νυχτερινή λειτουργία (αναμμένο)", "Dvergerski dijadem: noćni režim (uključen)", "Дворфський вінець: нічний режим (увімкнено)", "Dvergera diadēma: nakts režīms (ieslēgta)"
			},
			["jour"] = new string[36]
			{
				"Dverger Circlet: day mode (off)", "Dvärgadiadem: dagläge (av)", "Diadème de dverger : mode jour (éteint)", "Diadema di Dverger: modalità giorno (spento)", "Dverger-Reif: Tagmodus (aus)", "Diadema de Dverger: modo día (apagada)", "Венец Двергов: дневной режим (выключен)", "Coroniță Dverger: mod zi (oprită)", "Двергски челник: дневен режим (изключен)", "Двергерска дијадема: дневен режим (исклучена)",
				"Dverger-koru: päivätila (pois)", "Dvergerdiadem: dagtilstand (slukket)", "Dvergdiadem: dagmodus (av)", "Dvergahringur: dagstilling (slökkt)", "Dverger tacı: gündüz modu (kapalı)", "Nykštukų šalmas: dienos režimas (išjungtas)", "Trpasličí kroužek: denní režim (vypnuto)", "Dverger fejdísz: nappali mód (ki)", "Trpasličí diadém: denný režim (vypnutý)", "Diadem Dvergera: tryb dzienny (wyłączony)",
				"Dvergerdiadeem: dagmodus (uit)", "Diadema Dverger: modo diurno (desligado)", "Argola Dverger: modo diurno (desligada)", "矮人光环:日间模式(关闭)", "矮人頭環:日間模式(關閉)", "ドヴェルガーのサークレット:昼モード(オフ)", "드베르그 관: 주간 모드 (꺼짐)", "ड\u094dव\u0947र\u094dगर म\u0941क\u0941ट: द\u093fन म\u094bड (ब\u0902द)", "มงก\u0e38ฎห\u0e34นเวทย\u0e4c: โหมดกลางว\u0e31น (ป\u0e34ด)", null,
				"Dvergerska dijadema: dnevni način (isključena)", "დვარფების გვირგვინი: დღის რეჟიმი (გამორთულია)", "Διάδημα Dverger: ημερήσια λειτουργία (σβηστό)", "Dvergerski dijadem: dnevni režim (isključen)", "Дворфський вінець: денний режим (вимкнено)", "Dvergera diadēma: dienas režīms (izslēgta)"
			}
		};

		private static readonly FieldInfo TraductionDuJeu = typeof(Localization).GetField("m_instance", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);

		private static bool jeuPret;

		internal static string LangueDuJeu
		{
			get
			{
				try
				{
					if (!jeuPret)
					{
						if (TraductionDuJeu != null && TraductionDuJeu.GetValue(null) == null)
						{
							return PlayerPrefs.GetString("language", "English");
						}
						jeuPret = true;
					}
					return Localization.instance.GetSelectedLanguage();
				}
				catch (Exception)
				{
					return "English";
				}
			}
		}

		internal static string Texte(string cle, string langue = null)
		{
			if (!Textes.TryGetValue(cle, out var value))
			{
				return cle;
			}
			int num = Array.IndexOf(Langues, langue ?? LangueDuJeu);
			if (num <= 0 || num >= value.Length || string.IsNullOrEmpty(value[num]))
			{
				return value[0];
			}
			return value[num];
		}

		internal static string Format(string cle, string langue, object[] valeurs)
		{
			string text = Texte(cle, langue);
			if (valeurs != null && valeurs.Length != 0)
			{
				return string.Format(Culture(langue), text, valeurs);
			}
			return text;
		}

		internal static CultureInfo Culture(string langue = null)
		{
			int num = Array.IndexOf(Langues, langue ?? LangueDuJeu);
			try
			{
				return CultureInfo.GetCultureInfo((num >= 0) ? Cultures[num] : "en-US");
			}
			catch
			{
				return CultureInfo.InvariantCulture;
			}
		}
	}
}