Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of DvergrLightControl v1.2.2
DvergrLightControl.dll
Decompiled 2 weeks agousing 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; } } } }