using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using HarmonyLib;
using JetBrains.Annotations;
using LocalizationManager;
using Microsoft.CodeAnalysis;
using ServerSync;
using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Core.ObjectPool;
using YamlDotNet.Core.Tokens;
using YamlDotNet.Helpers;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.BufferedDeserialization;
using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators;
using YamlDotNet.Serialization.Callbacks;
using YamlDotNet.Serialization.Converters;
using YamlDotNet.Serialization.EventEmitters;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization.NodeDeserializers;
using YamlDotNet.Serialization.NodeTypeResolvers;
using YamlDotNet.Serialization.ObjectFactories;
using YamlDotNet.Serialization.ObjectGraphTraversalStrategies;
using YamlDotNet.Serialization.ObjectGraphVisitors;
using YamlDotNet.Serialization.Schemas;
using YamlDotNet.Serialization.TypeInspectors;
using YamlDotNet.Serialization.TypeResolvers;
using YamlDotNet.Serialization.Utilities;
using YamlDotNet.Serialization.ValueDeserializers;
[assembly: Guid("E74EB49A-461D-48EA-85BC-F462D60C98C4")]
[assembly: ComVisible(false)]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyProduct("Tweaks")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyTitle("Tweaks")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: CompilationRelaxations(8)]
[assembly: AssemblyFileVersion("1.1.5")]
[assembly: AssemblyCompany("Radamanto")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.5.0")]
[module: <6b5a4928-18e3-4234-ada4-a8316253b5ae>RefSafetyRules(11)]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[<36063384-42ab-4db6-84d6-671cadb70b70>Embedded]
internal sealed class <36063384-42ab-4db6-84d6-671cadb70b70>EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
[<36063384-42ab-4db6-84d6-671cadb70b70>Embedded]
[CompilerGenerated]
internal sealed class <10f6daa5-3e28-494a-bd9a-778075d193dc>NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public <10f6daa5-3e28-494a-bd9a-778075d193dc>NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public <10f6daa5-3e28-494a-bd9a-778075d193dc>NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
[<36063384-42ab-4db6-84d6-671cadb70b70>Embedded]
[CompilerGenerated]
internal sealed class <68e52a09-af3b-4f50-86ad-48279f320d83>NullableContextAttribute : Attribute
{
public readonly byte Flag;
public <68e52a09-af3b-4f50-86ad-48279f320d83>NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
[<36063384-42ab-4db6-84d6-671cadb70b70>Embedded]
[CompilerGenerated]
internal sealed class <6b5a4928-18e3-4234-ada4-a8316253b5ae>RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public <6b5a4928-18e3-4234-ada4-a8316253b5ae>RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace LocalizationManager
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
[PublicAPI]
public class Localizer
{
private static readonly Dictionary<string, Dictionary<string, Func<string>>> PlaceholderProcessors;
private static readonly Dictionary<string, Dictionary<string, string>> loadedTexts;
private static readonly ConditionalWeakTable<Localization, string> localizationLanguage;
private static readonly List<WeakReference<Localization>> localizationObjects;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
private static BaseUnityPlugin _plugin;
private static readonly List<string> fileExtensions;
private static BaseUnityPlugin plugin
{
get
{
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Expected O, but got Unknown
if (_plugin == null)
{
IEnumerable<TypeInfo> source;
try
{
source = Assembly.GetExecutingAssembly().DefinedTypes.ToList();
}
catch (ReflectionTypeLoadException ex)
{
source = from t in ex.Types
where t != null
select t.GetTypeInfo();
}
_plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First([<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t)));
}
return _plugin;
}
}
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
[method: <68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(2)]
[field: <10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
public static event Action OnLocalizationComplete;
private static void UpdatePlaceholderText(Localization localization, string key)
{
localizationLanguage.TryGetValue(localization, out var value);
string text = loadedTexts[value][key];
if (PlaceholderProcessors.TryGetValue(key, out var value2))
{
text = value2.Aggregate(text, [<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)] (string current, KeyValuePair<string, Func<string>> kv) => current.Replace("{" + kv.Key + "}", kv.Value()));
}
localization.AddWord(key, text);
}
public static void AddPlaceholder<T>(string key, string placeholder, ConfigEntry<T> config, [<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(new byte[] { 2, 1, 1 })] Func<T, string> convertConfigValue = null)
{
if (convertConfigValue == null)
{
convertConfigValue = (T val) => val.ToString();
}
if (!PlaceholderProcessors.ContainsKey(key))
{
PlaceholderProcessors[key] = new Dictionary<string, Func<string>>();
}
config.SettingChanged += [<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)] (object _, EventArgs _) =>
{
UpdatePlaceholder();
};
if (loadedTexts.ContainsKey(Localization.instance.GetSelectedLanguage()))
{
UpdatePlaceholder();
}
void UpdatePlaceholder()
{
PlaceholderProcessors[key][placeholder] = () => convertConfigValue(config.Value);
UpdatePlaceholderText(Localization.instance, key);
}
}
public static void AddText(string key, string text)
{
List<WeakReference<Localization>> list = new List<WeakReference<Localization>>();
foreach (WeakReference<Localization> localizationObject in localizationObjects)
{
if (localizationObject.TryGetTarget(out var target))
{
Dictionary<string, string> dictionary = loadedTexts[localizationLanguage.GetOrCreateValue(target)];
if (!target.m_translations.ContainsKey(key))
{
dictionary[key] = text;
target.AddWord(key, text);
}
}
else
{
list.Add(localizationObject);
}
}
foreach (WeakReference<Localization> item in list)
{
localizationObjects.Remove(item);
}
}
public static void Load()
{
_ = plugin;
}
public static void LoadLocalizationLater(Localization __instance)
{
LoadLocalization(Localization.instance, __instance.GetSelectedLanguage());
}
public static void SafeCallLocalizeComplete()
{
Localizer.OnLocalizationComplete?.Invoke();
}
private static void LoadLocalization(Localization __instance, string language)
{
if (!localizationLanguage.Remove(__instance))
{
localizationObjects.Add(new WeakReference<Localization>(__instance));
}
localizationLanguage.Add(__instance, language);
Dictionary<string, string> dictionary = new Dictionary<string, string>();
foreach (string item in from f in Directory.GetFiles(Path.GetDirectoryName(Paths.PluginPath), plugin.Info.Metadata.Name + ".*", SearchOption.AllDirectories)
where fileExtensions.IndexOf(Path.GetExtension(f)) >= 0
select f)
{
string[] array = Path.GetFileNameWithoutExtension(item).Split(new char[1] { '.' });
if (array.Length >= 2)
{
string text = array[1];
if (dictionary.ContainsKey(text))
{
Debug.LogWarning((object)("Duplicate key " + text + " found for " + plugin.Info.Metadata.Name + ". The duplicate file found at " + item + " will be skipped."));
}
else
{
dictionary[text] = item;
}
}
}
byte[] array2 = LoadTranslationFromAssembly("English");
if (array2 == null)
{
throw new Exception("Found no English localizations in mod " + plugin.Info.Metadata.Name + ". Expected an embedded resource translations/English.json or translations/English.yml.");
}
string input = Encoding.UTF8.GetString(array2).TrimStart(new char[1] { '\ufeff' });
Dictionary<string, string> dictionary2 = new DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(input);
if (dictionary2 == null)
{
throw new Exception("Localization for mod " + plugin.Info.Metadata.Name + " failed: Localization file was empty.");
}
string text2 = null;
if (language != "English")
{
if (dictionary.TryGetValue(language, out var value))
{
text2 = File.ReadAllText(value);
}
else
{
byte[] array3 = LoadTranslationFromAssembly(language);
if (array3 != null)
{
text2 = Encoding.UTF8.GetString(array3);
}
}
}
if (text2 == null && dictionary.TryGetValue("English", out var value2))
{
text2 = File.ReadAllText(value2);
}
if (text2 != null)
{
text2 = text2.TrimStart(new char[1] { '\ufeff' });
foreach (KeyValuePair<string, string> item2 in new DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(text2) ?? new Dictionary<string, string>())
{
dictionary2[item2.Key] = item2.Value;
}
}
loadedTexts[language] = dictionary2;
foreach (KeyValuePair<string, string> item3 in dictionary2)
{
UpdatePlaceholderText(__instance, item3.Key);
}
}
static Localizer()
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Expected O, but got Unknown
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Expected O, but got Unknown
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Expected O, but got Unknown
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Expected O, but got Unknown
PlaceholderProcessors = new Dictionary<string, Dictionary<string, Func<string>>>();
loadedTexts = new Dictionary<string, Dictionary<string, string>>();
localizationLanguage = new ConditionalWeakTable<Localization, string>();
localizationObjects = new List<WeakReference<Localization>>();
fileExtensions = new List<string>(2) { ".json", ".yml" };
Harmony val = new Harmony("org.bepinex.helpers.LocalizationManager");
val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "SetupLanguage", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Localizer), "LoadLocalization", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(FejdStartup), "SetupGui", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Localizer), "LoadLocalizationLater", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(FejdStartup), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Localizer), "SafeCallLocalizeComplete", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
}
[return: <10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
private static byte[] LoadTranslationFromAssembly(string language)
{
foreach (string fileExtension in fileExtensions)
{
byte[] array = ReadEmbeddedFileBytes("translations." + language + fileExtension);
if (array != null)
{
return array;
}
}
return null;
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(2)]
public static byte[] ReadEmbeddedFileBytes([<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(1)] string resourceFileName, Assembly containingAssembly = null)
{
using MemoryStream memoryStream = new MemoryStream();
if ((object)containingAssembly == null)
{
containingAssembly = Assembly.GetCallingAssembly();
}
string text = containingAssembly.GetManifestResourceNames().FirstOrDefault([<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)] (string str) => str.EndsWith(resourceFileName, StringComparison.Ordinal));
if (text != null)
{
containingAssembly.GetManifestResourceStream(text)?.CopyTo(memoryStream);
}
return (memoryStream.Length == 0L) ? null : memoryStream.ToArray();
}
}
public static class LocalizationManagerVersion
{
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(1)]
public const string Version = "1.4.1";
}
}
namespace Tweaks
{
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
internal static class StatusHudOrganizer
{
private const int MaxRows = 5;
private const float IconSize = 32f;
private const float EntryWidth = 170f;
private const float EntryHeight = 36f;
private const float IconOffsetX = -4f;
private const float TextGap = 8f;
private const int FontSize = 14;
internal static void Apply(List<StatusEffect> statusEffects, List<RectTransform> statusObjects)
{
if (!TweaksPlugin.CE_StatusHudOrganizer_Enabled.Value || statusEffects == null || statusObjects == null)
{
return;
}
int num = Math.Min(statusEffects.Count, statusObjects.Count);
for (int i = 0; i < num; i++)
{
StatusEffect val = statusEffects[i];
RectTransform val2 = statusObjects[i];
if (!((Object)(object)val == (Object)null) && !((Object)(object)val2 == (Object)null))
{
int row = i % 5;
int column = i / 5;
SetupEntry(val2, column, row);
SetupIcon(val2);
SetupCooldown(val2);
SetupTimeText(val2);
SetupName(val2, val);
}
}
}
private static void SetupEntry(RectTransform entry, int column, int row)
{
//IL_000c: 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_0038: 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)
entry.anchorMin = new Vector2(1f, 1f);
entry.anchorMax = new Vector2(1f, 1f);
entry.pivot = new Vector2(1f, 1f);
entry.anchoredPosition = new Vector2(-4f - (float)column * 170f, (float)(-row) * 36f);
entry.SetSizeWithCurrentAnchors((Axis)0, 170f);
entry.SetSizeWithCurrentAnchors((Axis)1, 36f);
}
private static void SetupIcon(RectTransform entry)
{
//IL_002a: 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_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
Transform obj = ((Transform)entry).Find("Icon");
RectTransform val = (RectTransform)(object)((obj is RectTransform) ? obj : null);
if (val != null)
{
val.anchorMin = new Vector2(1f, 0.5f);
val.anchorMax = new Vector2(1f, 0.5f);
val.pivot = new Vector2(1f, 0.5f);
val.anchoredPosition = new Vector2(-4f, 0f);
val.SetSizeWithCurrentAnchors((Axis)0, 32f);
val.SetSizeWithCurrentAnchors((Axis)1, 32f);
}
}
private static void SetupCooldown(RectTransform entry)
{
//IL_003f: 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_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
Transform obj = ((Transform)entry).Find("Cooldown");
RectTransform val = (RectTransform)(object)((obj is RectTransform) ? obj : null);
if (val != null)
{
float num = Mathf.Clamp(16f, 10f, 18f);
val.anchorMin = new Vector2(1f, 0.5f);
val.anchorMax = new Vector2(1f, 0.5f);
val.pivot = new Vector2(0.5f, 0.5f);
val.anchoredPosition = new Vector2(-20f, -8f);
val.SetSizeWithCurrentAnchors((Axis)0, num);
val.SetSizeWithCurrentAnchors((Axis)1, num);
}
}
private static void SetupTimeText(RectTransform entry)
{
Transform val = ((Transform)entry).Find("TimeText");
if (!((Object)(object)val == (Object)null))
{
((Component)val).gameObject.SetActive(false);
}
}
private static void SetupName(RectTransform entry, StatusEffect statusEffect)
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
Transform obj = ((Transform)entry).Find("Name");
RectTransform val = (RectTransform)(object)((obj is RectTransform) ? obj : null);
if (val != null)
{
TMP_Text component = ((Component)val).GetComponent<TMP_Text>();
if (!((Object)(object)component == (Object)null))
{
float num = Mathf.Max(20f, 130f - Mathf.Abs(-4f));
((Component)val).gameObject.SetActive(true);
val.anchorMin = new Vector2(1f, 0.5f);
val.anchorMax = new Vector2(1f, 0.5f);
val.pivot = new Vector2(1f, 0.5f);
val.anchoredPosition = new Vector2(-44f, 0f);
val.SetSizeWithCurrentAnchors((Axis)0, num);
val.SetSizeWithCurrentAnchors((Axis)1, 36f);
component.alignment = (TextAlignmentOptions)4100;
component.fontSize = 14f;
component.richText = true;
component.textWrappingMode = (TextWrappingModes)0;
component.overflowMode = (TextOverflowModes)3;
string text = ((Localization.instance != null) ? Localization.instance.Localize(statusEffect.m_name) : statusEffect.m_name);
string iconText = statusEffect.GetIconText();
component.text = ((!string.IsNullOrEmpty(iconText)) ? (text + " <color=#ffb75c>" + iconText + "</color>") : text);
}
}
}
}
[HarmonyPatch(typeof(Hud), "UpdateStatusEffects", new Type[] { typeof(List<StatusEffect>) })]
internal static class Patch_Hud_UpdateStatusEffects_StatusHudOrganizer
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Postfix(List<StatusEffect> statusEffects, List<RectTransform> ___m_statusEffects)
{
StatusHudOrganizer.Apply(statusEffects, ___m_statusEffects);
}
}
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
internal static class ProtectedZoneBossAltar
{
private const string MsgBuildBlocked = "$tweaks_bossaltar_build_blocked";
private const string MsgTerrainBlocked = "$tweaks_bossaltar_terrain_blocked";
private static readonly HashSet<string> BossLocations = new HashSet<string>(StringComparer.Ordinal) { "Eikthyrnir", "GDKing", "Bonemass", "Dragonqueen", "GoblinKing", "Mistlands_DvergrBossEntrance1", "FaderLocation" };
private static readonly HashSet<Location> ActiveBossAltars = new HashSet<Location>();
internal static void Register(Location location)
{
if (Object.op_Implicit((Object)(object)location))
{
string item = ProtectedZoneManager.Normalize(((Object)((Component)location).gameObject).name);
if (BossLocations.Contains(item))
{
ActiveBossAltars.Add(location);
}
}
}
internal static void Unregister(Location location)
{
if (Object.op_Implicit((Object)(object)location))
{
ActiveBossAltars.Remove(location);
}
}
internal static bool IsBlocked(Vector3 point, out ProtectedZoneBlock block)
{
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
block = default(ProtectedZoneBlock);
if (!Enabled())
{
return false;
}
if (ProtectedZoneManager.Bypass())
{
return false;
}
if (ActiveBossAltars.Count == 0)
{
return false;
}
float radius = GetRadius();
if (radius <= 0f)
{
return false;
}
foreach (Location activeBossAltar in ActiveBossAltars)
{
if (!Object.op_Implicit((Object)(object)activeBossAltar) || Utils.DistanceXZ(((Component)activeBossAltar).transform.position, point) > radius)
{
continue;
}
block = new ProtectedZoneBlock(ProtectedZoneKind.BossAltar, "$tweaks_bossaltar_build_blocked", "$tweaks_bossaltar_terrain_blocked");
return true;
}
return false;
}
private static bool Enabled()
{
try
{
return TweaksPlugin.GetBossAltarsProtectionEnabled();
}
catch
{
return true;
}
}
private static float GetRadius()
{
try
{
return Mathf.Max(0f, TweaksPlugin.CE_BossAltarsProtection_Radius.Value);
}
catch
{
return 100f;
}
}
}
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
internal static class Tweaks_AssetLoader
{
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
private static AssetBundle _bundle;
private const string ResourceName = "Tweaks.assets.rd_tweaks";
private static void LoadBundle()
{
if ((Object)(object)_bundle != (Object)null)
{
return;
}
try
{
Assembly executingAssembly = Assembly.GetExecutingAssembly();
using Stream stream = executingAssembly.GetManifestResourceStream("Tweaks.assets.rd_tweaks");
if (stream != null)
{
byte[] array = new byte[stream.Length];
stream.Read(array, 0, array.Length);
_bundle = AssetBundle.LoadFromMemory(array);
}
}
catch
{
_bundle = null;
}
}
[return: <10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
internal static Sprite GetSprite(string name)
{
LoadBundle();
if ((Object)(object)_bundle == (Object)null)
{
return null;
}
try
{
return _bundle.LoadAsset<Sprite>(name);
}
catch
{
return null;
}
}
}
[HarmonyPatch(typeof(Player), "AutoPickup")]
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
internal static class Patch_Player_AutoPickup_Range
{
private static void Prefix(Player __instance, out float __state)
{
__state = __instance.m_autoPickupRange;
__instance.m_autoPickupRange = TweaksPlugin.CE_AutoPickupRange.Value;
}
private static void Postfix(Player __instance, float __state)
{
__instance.m_autoPickupRange = __state;
}
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(2)]
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
internal static class ClockHud
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)]
[HarmonyPatch(typeof(Hud), "Awake")]
private static class Patch_Hud_Awake
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Postfix(Hud __instance)
{
if (!Enabled())
{
TeardownUi();
}
else
{
EnsureUi(__instance);
}
}
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)]
[HarmonyPatch(typeof(Hud), "OnDestroy")]
private static class Patch_Hud_OnDestroy
{
private static void Postfix()
{
TeardownUi();
}
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)]
[HarmonyPatch(typeof(Hud), "Update")]
private static class Patch_Hud_Update
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Postfix(Hud __instance)
{
if (!Enabled())
{
if ((Object)(object)_text != (Object)null)
{
TeardownUi();
}
}
else
{
EnsureUi(__instance);
Tick(Time.unscaledDeltaTime, __instance);
}
}
}
private static GameObject _root;
private static RectTransform _rootRt;
private static GameObject _container;
private static RectTransform _containerRt;
private static TextMeshProUGUI _text;
private static Image _dayNightIcon;
private static RectTransform _iconRt;
private static Sprite _sprDay;
private static Sprite _sprNight;
private static float _timer;
private static string _lastLine;
private const float TickInterval = 0.2f;
private static readonly FieldInfo FI_EnvMan_SmoothDayFraction = AccessTools.Field(typeof(EnvMan), "m_smoothDayFraction");
private static bool Enabled()
{
return TweaksPlugin.CE_ClockHud_Enabled.Value;
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
[return: <10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
private static GameObject GetHudRoot(Hud hud)
{
FieldInfo fieldInfo = AccessTools.Field(typeof(Hud), "m_rootObject");
if (fieldInfo != null)
{
object? value = fieldInfo.GetValue(hud);
GameObject val = (GameObject)((value is GameObject) ? value : null);
if (val != null && (Object)(object)val != (Object)null)
{
return val;
}
}
fieldInfo = AccessTools.Field(typeof(Hud), "m_root");
if (fieldInfo != null)
{
object? value2 = fieldInfo.GetValue(hud);
GameObject val2 = (GameObject)((value2 is GameObject) ? value2 : null);
if (val2 != null && (Object)(object)val2 != (Object)null)
{
return val2;
}
}
return ((Object)(object)hud != (Object)null) ? ((Component)hud).gameObject : null;
}
private static TMP_FontAsset TryGetFontFromInventoryGui()
{
InventoryGui instance = InventoryGui.instance;
if ((Object)(object)instance == (Object)null)
{
return null;
}
if ((Object)(object)instance.m_playerName != (Object)null && (Object)(object)instance.m_playerName.font != (Object)null)
{
return instance.m_playerName.font;
}
if ((Object)(object)instance.m_recipeName != (Object)null && (Object)(object)instance.m_recipeName.font != (Object)null)
{
return instance.m_recipeName.font;
}
if ((Object)(object)instance.m_containerName != (Object)null && (Object)(object)instance.m_containerName.font != (Object)null)
{
return instance.m_containerName.font;
}
if ((Object)(object)instance.m_craftingStationName != (Object)null && (Object)(object)instance.m_craftingStationName.font != (Object)null)
{
return instance.m_craftingStationName.font;
}
return null;
}
private static TMP_FontAsset TryGetFontFromMenu()
{
Menu instance = Menu.instance;
if ((Object)(object)instance == (Object)null)
{
return null;
}
if ((Object)(object)instance.lastSaveText != (Object)null && (Object)(object)instance.lastSaveText.font != (Object)null)
{
return instance.lastSaveText.font;
}
return null;
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void EnsureFont(Hud hud)
{
if ((Object)(object)_text == (Object)null || (Object)(object)((TMP_Text)_text).font != (Object)null)
{
return;
}
TMP_FontAsset val = TryGetFontFromInventoryGui();
if ((Object)(object)val != (Object)null)
{
((TMP_Text)_text).font = val;
return;
}
val = TryGetFontFromMenu();
if ((Object)(object)val != (Object)null)
{
((TMP_Text)_text).font = val;
}
else if ((Object)(object)hud != (Object)null && (Object)(object)hud.m_hoverName != (Object)null && (Object)(object)((TMP_Text)hud.m_hoverName).font != (Object)null)
{
((TMP_Text)_text).font = ((TMP_Text)hud.m_hoverName).font;
}
}
private static void EnsureSprites()
{
if ((Object)(object)_sprDay == (Object)null)
{
_sprDay = Tweaks_AssetLoader.GetSprite("dia");
}
if ((Object)(object)_sprNight == (Object)null)
{
_sprNight = Tweaks_AssetLoader.GetSprite("noite");
}
}
private static float GetIconSize()
{
float value = TweaksPlugin.CE_ClockHud_IconSize.Value;
return Mathf.Clamp(value, 8f, 128f);
}
private static void ApplyIconSize()
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)_iconRt == (Object)null))
{
float iconSize = GetIconSize();
_iconRt.sizeDelta = new Vector2(iconSize, iconSize);
}
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void EnsureUi(Hud hud)
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Expected O, but got Unknown
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Expected O, but got Unknown
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Expected O, but got Unknown
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_0158: Expected O, but got Unknown
//IL_0167: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: Unknown result type (might be due to invalid IL or missing references)
//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
//IL_01f8: Expected O, but got Unknown
//IL_0215: Unknown result type (might be due to invalid IL or missing references)
//IL_021b: Expected O, but got Unknown
//IL_0226: Unknown result type (might be due to invalid IL or missing references)
//IL_023c: Unknown result type (might be due to invalid IL or missing references)
//IL_0252: Unknown result type (might be due to invalid IL or missing references)
//IL_0268: Unknown result type (might be due to invalid IL or missing references)
//IL_027e: Unknown result type (might be due to invalid IL or missing references)
//IL_0337: Unknown result type (might be due to invalid IL or missing references)
//IL_033d: Expected O, but got Unknown
//IL_035a: Unknown result type (might be due to invalid IL or missing references)
//IL_0364: Expected O, but got Unknown
//IL_0373: Unknown result type (might be due to invalid IL or missing references)
//IL_038d: Unknown result type (might be due to invalid IL or missing references)
//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
//IL_030e: Unknown result type (might be due to invalid IL or missing references)
//IL_0313: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)_text != (Object)null)
{
EnsureFont(hud);
return;
}
GameObject hudRoot = GetHudRoot(hud);
if (!((Object)(object)hudRoot == (Object)null))
{
_root = new GameObject("Tweaks_ClockHud", new Type[1] { typeof(RectTransform) });
_root.transform.SetParent(hudRoot.transform, false);
_rootRt = (RectTransform)_root.transform;
_rootRt.anchorMin = new Vector2(0.5f, 1f);
_rootRt.anchorMax = new Vector2(0.5f, 1f);
_rootRt.pivot = new Vector2(0.5f, 1f);
_rootRt.anchoredPosition = new Vector2(0f, -8f);
_rootRt.sizeDelta = new Vector2(900f, 72f);
_container = new GameObject("Container", new Type[1] { typeof(RectTransform) });
_container.transform.SetParent(_root.transform, false);
_containerRt = (RectTransform)_container.transform;
_containerRt.anchorMin = new Vector2(0.5f, 0.5f);
_containerRt.anchorMax = new Vector2(0.5f, 0.5f);
_containerRt.pivot = new Vector2(0.5f, 0.5f);
_containerRt.anchoredPosition = new Vector2(0f, -4f);
_containerRt.sizeDelta = new Vector2(900f, 72f);
GameObject val = new GameObject("Text", new Type[1] { typeof(RectTransform) });
val.transform.SetParent(_container.transform, false);
RectTransform val2 = (RectTransform)val.transform;
val2.anchorMin = new Vector2(0f, 0.5f);
val2.anchorMax = new Vector2(1f, 1f);
val2.pivot = new Vector2(0.5f, 1f);
val2.anchoredPosition = new Vector2(0f, 0f);
val2.sizeDelta = new Vector2(0f, -8f);
_text = val.AddComponent<TextMeshProUGUI>();
((Graphic)_text).raycastTarget = false;
((TMP_Text)_text).textWrappingMode = (TextWrappingModes)0;
((TMP_Text)_text).alignment = (TextAlignmentOptions)258;
((TMP_Text)_text).fontSize = Mathf.Clamp(TweaksPlugin.CE_ClockHud_FontSize.Value, 10, 48);
EnsureFont(hud);
if ((Object)(object)((TMP_Text)_text).font != (Object)null)
{
((TMP_Text)_text).outlineWidth = 0.2f;
((TMP_Text)_text).outlineColor = Color32.op_Implicit(Color.black);
}
GameObject val3 = new GameObject("DayNightIcon", new Type[1] { typeof(RectTransform) });
val3.transform.SetParent(_container.transform, false);
_iconRt = (RectTransform)val3.transform;
_iconRt.anchorMin = new Vector2(0.5f, 0f);
_iconRt.anchorMax = new Vector2(0.5f, 0f);
_iconRt.pivot = new Vector2(0.5f, 0f);
_iconRt.anchoredPosition = new Vector2(0f, 2f);
_dayNightIcon = val3.AddComponent<Image>();
((Graphic)_dayNightIcon).raycastTarget = false;
((Behaviour)_dayNightIcon).enabled = false;
ApplyIconSize();
_timer = 0f;
_lastLine = null;
}
}
private static void TeardownUi()
{
if ((Object)(object)_root != (Object)null)
{
Object.Destroy((Object)(object)_root);
}
_root = null;
_rootRt = null;
_container = null;
_containerRt = null;
_text = null;
_dayNightIcon = null;
_iconRt = null;
_timer = 0f;
_lastLine = null;
}
private static bool IgnoreKeyPresses()
{
if ((Object)(object)ZNetScene.instance == (Object)null)
{
return true;
}
if ((Object)(object)Player.m_localPlayer == (Object)null)
{
return true;
}
if (Minimap.IsOpen())
{
return true;
}
if (Console.IsVisible())
{
return true;
}
if (TextInput.IsVisible())
{
return true;
}
ZNet instance = ZNet.instance;
if ((Object)(object)instance != (Object)null && instance.InPasswordDialog())
{
return true;
}
Chat instance2 = Chat.instance;
if ((Object)(object)instance2 != (Object)null && instance2.HasFocus())
{
return true;
}
if (StoreGui.IsVisible())
{
return true;
}
if (InventoryGui.IsVisible())
{
return true;
}
if (Menu.IsVisible())
{
return true;
}
TextViewer instance3 = TextViewer.instance;
if ((Object)(object)instance3 != (Object)null && instance3.IsVisible())
{
return true;
}
return false;
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static float GetSmoothDayFraction(EnvMan envMan)
{
if (FI_EnvMan_SmoothDayFraction != null)
{
try
{
object value = FI_EnvMan_SmoothDayFraction.GetValue(envMan);
if (value is float)
{
float result = (float)value;
if (true)
{
return result;
}
}
}
catch
{
}
}
return envMan.GetDayFraction();
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static int GetCurrentDaySafe(EnvMan envMan)
{
try
{
return envMan.GetCurrentDay();
}
catch
{
return envMan.GetDay();
}
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static string GetIngameTimeString(EnvMan envMan)
{
float num = Mathf.Repeat(GetSmoothDayFraction(envMan), 1f);
DateTime now = DateTime.Now;
DateTime dateTime = new DateTime(now.Year, now.Month, now.Day);
double value = (double)num * 24.0 * 60.0;
return dateTime.AddMinutes(value).ToString("HH:mm");
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static string MonoDigits(string s)
{
return "<mspace=0.42em>" + s + "</mspace>";
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static string NormalizeHexColor([<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)] string s, string fallbackNoHash)
{
if (string.IsNullOrWhiteSpace(s))
{
return fallbackNoHash;
}
string text = s.Trim();
if (text.StartsWith("#", StringComparison.Ordinal))
{
text = text.Substring(1);
}
if (text.Length == 6 || text.Length == 8)
{
return text;
}
return fallbackNoHash;
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static string WrapColor(string text, string hexNoHash)
{
if (string.IsNullOrEmpty(hexNoHash))
{
return text;
}
return "<color=#" + hexNoHash + ">" + text + "</color>";
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static string BuildLine()
{
int num = 0;
string s = "00:00";
EnvMan instance = EnvMan.instance;
if ((Object)(object)instance != (Object)null)
{
num = instance.GetDay(ZNet.instance.GetTimeSeconds());
s = GetIngameTimeString(instance);
}
string text = TweaksPlugin.CE_ClockHud_LabelDay.Value ?? "Dia";
string text2 = TweaksPlugin.CE_ClockHud_LabelGameTime.Value ?? "Hora";
string text3 = TweaksPlugin.CE_ClockHud_LabelRealTime.Value ?? "Hora Real";
string hexNoHash = NormalizeHexColor(TweaksPlugin.CE_ClockHud_ColorDay.Value, "FFFFFF");
string hexNoHash2 = NormalizeHexColor(TweaksPlugin.CE_ClockHud_ColorGameTime.Value, "FFFFFF");
string hexNoHash3 = NormalizeHexColor(TweaksPlugin.CE_ClockHud_ColorRealTime.Value, "FFFFFF");
string text4 = "";
if (TweaksPlugin.CE_ClockHud_ShowDay.Value)
{
text4 = $"{WrapColor(text, hexNoHash)}: {num}";
}
string text5 = "";
if (TweaksPlugin.CE_ClockHud_ShowGameTime.Value)
{
text5 = WrapColor(text2, hexNoHash2) + ": " + MonoDigits(s);
}
string text6 = "";
if (TweaksPlugin.CE_ClockHud_ShowRealTime.Value)
{
DateTime now = DateTime.Now;
text6 = WrapColor(text3, hexNoHash3) + ": " + MonoDigits(now.ToString("HH:mm"));
}
if (!string.IsNullOrWhiteSpace(text4) && !string.IsNullOrWhiteSpace(text5) && !string.IsNullOrWhiteSpace(text6))
{
return (text4 + " " + text5 + " " + text6).Trim();
}
if (!string.IsNullOrWhiteSpace(text4) && !string.IsNullOrWhiteSpace(text5))
{
return (text4 + " " + text5).Trim();
}
if (!string.IsNullOrWhiteSpace(text5) && !string.IsNullOrWhiteSpace(text6))
{
return (text5 + " " + text6).Trim();
}
if (!string.IsNullOrWhiteSpace(text4))
{
return text4;
}
if (!string.IsNullOrWhiteSpace(text5))
{
return text5;
}
if (!string.IsNullOrWhiteSpace(text6))
{
return text6;
}
return string.Empty;
}
private static void UpdateDayNightIcon()
{
if ((Object)(object)_dayNightIcon == (Object)null)
{
return;
}
if (!TweaksPlugin.CE_ClockHud_ShowIcon.Value)
{
_dayNightIcon.sprite = null;
((Behaviour)_dayNightIcon).enabled = false;
return;
}
EnsureSprites();
if (EnvMan.IsDay())
{
_dayNightIcon.sprite = _sprDay;
((Behaviour)_dayNightIcon).enabled = (Object)(object)_dayNightIcon.sprite != (Object)null;
}
else if (EnvMan.IsNight())
{
_dayNightIcon.sprite = _sprNight;
((Behaviour)_dayNightIcon).enabled = (Object)(object)_dayNightIcon.sprite != (Object)null;
}
else
{
_dayNightIcon.sprite = null;
((Behaviour)_dayNightIcon).enabled = false;
}
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Tick(float dt, Hud hud)
{
if ((Object)(object)_text == (Object)null)
{
return;
}
EnsureFont(hud);
if (IgnoreKeyPresses())
{
return;
}
_timer += dt;
while (_timer >= 0.2f)
{
_timer -= 0.2f;
((TMP_Text)_text).fontSize = Mathf.Clamp(TweaksPlugin.CE_ClockHud_FontSize.Value, 10, 48);
string text = BuildLine();
if (!string.Equals(_lastLine, text, StringComparison.Ordinal))
{
_lastLine = text;
((TMP_Text)_text).text = text;
}
if (TweaksPlugin.CE_ClockHud_ShowIcon.Value)
{
ApplyIconSize();
UpdateDayNightIcon();
}
else
{
UpdateDayNightIcon();
}
}
}
}
[HarmonyPatch]
internal static class Tweaks_ComfortRange
{
[CompilerGenerated]
private sealed class <GetNearbyComfortPieces_Transpiler>d__3 : IEnumerable<CodeInstruction>, IEnumerable, IEnumerator<CodeInstruction>, IDisposable, IEnumerator
{
private int <>1__state;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(1)]
private CodeInstruction <>2__current;
private int <>l__initialThreadId;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(new byte[] { 0, 1 })]
private IEnumerable<CodeInstruction> instructions;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(new byte[] { 0, 1 })]
public IEnumerable<CodeInstruction> <>3__instructions;
private bool <replaced>5__1;
private MethodInfo <mi>5__2;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(new byte[] { 0, 1 })]
private IEnumerator<CodeInstruction> <>s__3;
private CodeInstruction <ins>5__4;
private float <f>5__5;
CodeInstruction IEnumerator<CodeInstruction>.Current
{
[DebuggerHidden]
[return: <10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(1)]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <GetNearbyComfortPieces_Transpiler>d__3(int <>1__state)
{
this.<>1__state = <>1__state;
<>l__initialThreadId = Environment.CurrentManagedThreadId;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
int num = <>1__state;
if (num == -3 || (uint)(num - 1) <= 1u)
{
try
{
}
finally
{
<>m__Finally1();
}
}
<mi>5__2 = null;
<>s__3 = null;
<ins>5__4 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Expected O, but got Unknown
try
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<replaced>5__1 = false;
<mi>5__2 = AccessTools.Method(typeof(Tweaks_ComfortRange), "GetComfortRadiusRuntime", (Type[])null, (Type[])null);
<>s__3 = instructions.GetEnumerator();
<>1__state = -3;
break;
case 1:
<>1__state = -3;
<replaced>5__1 = true;
break;
case 2:
<>1__state = -3;
<ins>5__4 = null;
break;
}
if (<>s__3.MoveNext())
{
<ins>5__4 = <>s__3.Current;
if (!<replaced>5__1 && <ins>5__4.opcode == OpCodes.Ldc_R4)
{
object operand = <ins>5__4.operand;
if (operand is float)
{
<f>5__5 = (float)operand;
if (Math.Abs(<f>5__5 - sComfortRadiusConstant) < 0.0001f)
{
<>2__current = new CodeInstruction(OpCodes.Call, (object)<mi>5__2);
<>1__state = 1;
return true;
}
}
}
<>2__current = <ins>5__4;
<>1__state = 2;
return true;
}
<>m__Finally1();
<>s__3 = null;
return false;
}
catch
{
//try-fault
((IDisposable)this).Dispose();
throw;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
private void <>m__Finally1()
{
<>1__state = -1;
if (<>s__3 != null)
{
<>s__3.Dispose();
}
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
[DebuggerHidden]
IEnumerator<CodeInstruction> IEnumerable<CodeInstruction>.GetEnumerator()
{
<GetNearbyComfortPieces_Transpiler>d__3 <GetNearbyComfortPieces_Transpiler>d__;
if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId)
{
<>1__state = 0;
<GetNearbyComfortPieces_Transpiler>d__ = this;
}
else
{
<GetNearbyComfortPieces_Transpiler>d__ = new <GetNearbyComfortPieces_Transpiler>d__3(0);
}
<GetNearbyComfortPieces_Transpiler>d__.instructions = <>3__instructions;
return <GetNearbyComfortPieces_Transpiler>d__;
}
[DebuggerHidden]
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable<CodeInstruction>)this).GetEnumerator();
}
}
private static readonly float sComfortRadiusConstant;
static Tweaks_ComfortRange()
{
try
{
sComfortRadiusConstant = ((typeof(SE_Rested).GetField("c_ComfortRadius", BindingFlags.Static | BindingFlags.NonPublic)?.GetValue(null) is float num) ? num : 10f);
}
catch
{
sComfortRadiusConstant = 10f;
}
}
internal static float GetComfortRadiusRuntime()
{
try
{
if (TweaksPlugin.CE_ComfortRange_Enabled == null || !TweaksPlugin.CE_ComfortRange_Enabled.Value)
{
return sComfortRadiusConstant;
}
if (TweaksPlugin.CE_ComfortRange_Radius == null)
{
return sComfortRadiusConstant;
}
float num = TweaksPlugin.CE_ComfortRange_Radius.Value;
if (num < 0f)
{
num = 0f;
}
if (num > 1000f)
{
num = 1000f;
}
return num;
}
catch
{
return sComfortRadiusConstant;
}
}
[HarmonyTranspiler]
[IteratorStateMachine(typeof(<GetNearbyComfortPieces_Transpiler>d__3))]
[HarmonyPatch(typeof(SE_Rested), "GetNearbyComfortPieces")]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static IEnumerable<CodeInstruction> GetNearbyComfortPieces_Transpiler(IEnumerable<CodeInstruction> instructions)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <GetNearbyComfortPieces_Transpiler>d__3(-2)
{
<>3__instructions = instructions
};
}
}
[BepInPlugin("radamanto.Tweaks", "Tweaks", "1.1.5")]
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
public class TweaksPlugin : BaseUnityPlugin
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)]
private class ConfigurationManagerAttributes
{
public bool? Browsable = false;
}
[CompilerGenerated]
private sealed class <ReloadConfigAfterQuietPeriod>d__93 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
private object <>2__current;
public float quietSeconds;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
public TweaksPlugin <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
[return: <10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
[return: <10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <ReloadConfigAfterQuietPeriod>d__93(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
break;
case 1:
<>1__state = -1;
break;
}
if ((DateTime.UtcNow - <>4__this._lastCfgWriteUtc).TotalSeconds < (double)quietSeconds)
{
<>2__current = null;
<>1__state = 1;
return true;
}
try
{
if (<>4__this._configWatcher == null || !<>4__this._watcherReady)
{
return false;
}
<>4__this._configWatcher.EnableRaisingEvents = false;
if ((Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer())
{
((BaseUnityPlugin)<>4__this).Config.Reload();
<>4__this._ignoreEventsUntilUtc = DateTime.UtcNow.AddSeconds(1.0);
((BaseUnityPlugin)<>4__this).Config.Save();
}
}
catch
{
}
finally
{
if (<>4__this._configWatcher != null)
{
<>4__this._configWatcher.EnableRaisingEvents = true;
}
<>4__this._reloadScheduled = false;
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
public const string ModGUID = "radamanto.Tweaks";
public const string ModName = "Tweaks";
public const string ModVersion = "1.1.5";
private readonly Harmony _harmony = new Harmony("radamanto.Tweaks");
private static bool _bootstrapped;
public static ConfigEntry<bool> CE_BossAltarsProtection_Enabled;
public static ConfigEntry<float> CE_BossAltarsProtection_Radius;
internal static ConfigEntry<bool> CE_ProtectedAreaObjects_Enabled;
internal static ConfigEntry<float> CE_ProtectedAreaObjects_Radius;
internal static ConfigEntry<string> CE_ProtectedAreaObjects_Locations;
internal static ConfigEntry<string> CE_ProtectedAreaObjects_Vegetations;
public static ConfigEntry<bool> CE_Plants_IgnoreBiome;
public static ConfigEntry<bool> CE_AllFaction_Enabled;
public static ConfigEntry<Faction> CE_AllFaction_AnimalsVeg;
public static ConfigEntry<Faction> CE_AllFaction_ForestMonsters;
public static ConfigEntry<Faction> CE_AllFaction_Undead;
public static ConfigEntry<Faction> CE_AllFaction_Demon;
public static ConfigEntry<Faction> CE_AllFaction_MountainMonsters;
public static ConfigEntry<Faction> CE_AllFaction_SeaMonsters;
public static ConfigEntry<Faction> CE_AllFaction_PlainsMonsters;
public static ConfigEntry<Faction> CE_AllFaction_Boss;
public static ConfigEntry<Faction> CE_AllFaction_MistlandsMonsters;
public static ConfigEntry<bool> CE_TrashOnDel_Enabled;
public static ConfigEntry<KeyCode> CE_TrashOnDel_Key;
public static ConfigEntry<bool> CE_TrashOnDel_Confirm;
public static ConfigEntry<bool> CE_TrashOnDel_AllowHotbar;
public static ConfigEntry<bool> CE_FloatItems_Enabled;
public static ConfigEntry<bool> CE_ClockHud_Enabled;
public static ConfigEntry<bool> CE_ClockHud_ShowDay;
public static ConfigEntry<bool> CE_ClockHud_ShowRealTime;
public static ConfigEntry<bool> CE_ClockHud_ShowGameTime;
public static ConfigEntry<int> CE_ClockHud_FontSize;
public static ConfigEntry<string> CE_ClockHud_LabelDay;
public static ConfigEntry<string> CE_ClockHud_LabelGameTime;
public static ConfigEntry<string> CE_ClockHud_LabelRealTime;
public static ConfigEntry<string> CE_ClockHud_ColorDay;
public static ConfigEntry<string> CE_ClockHud_ColorGameTime;
public static ConfigEntry<string> CE_ClockHud_ColorRealTime;
public static ConfigEntry<float> CE_ClockHud_IconSize;
public static ConfigEntry<bool> CE_ClockHud_ShowIcon;
public static ConfigEntry<float> CE_AutoPickupRange;
public static ConfigEntry<bool> CE_ComfortRange_Enabled;
public static ConfigEntry<float> CE_ComfortRange_Radius;
public static ConfigEntry<bool> CE_SkillDeathLoss_Enabled;
public static ConfigEntry<float> CE_SkillDeathLoss_Factor;
public static ConfigEntry<float> CE_SkillGain_Swords;
public static ConfigEntry<float> CE_SkillGain_Knives;
public static ConfigEntry<float> CE_SkillGain_Clubs;
public static ConfigEntry<float> CE_SkillGain_Polearms;
public static ConfigEntry<float> CE_SkillGain_Spears;
public static ConfigEntry<float> CE_SkillGain_Blocking;
public static ConfigEntry<float> CE_SkillGain_Axes;
public static ConfigEntry<float> CE_SkillGain_Bows;
public static ConfigEntry<float> CE_SkillGain_Crossbows;
public static ConfigEntry<float> CE_SkillGain_Unarmed;
public static ConfigEntry<float> CE_SkillGain_ElementalMagic;
public static ConfigEntry<float> CE_SkillGain_BloodMagic;
public static ConfigEntry<float> CE_SkillGain_Pickaxes;
public static ConfigEntry<float> CE_SkillGain_WoodCutting;
public static ConfigEntry<float> CE_SkillGain_Run;
public static ConfigEntry<float> CE_SkillGain_Jump;
public static ConfigEntry<float> CE_SkillGain_Sneak;
public static ConfigEntry<float> CE_SkillGain_Swim;
public static ConfigEntry<float> CE_SkillGain_Fishing;
public static ConfigEntry<float> CE_SkillGain_Crafting;
public static ConfigEntry<float> CE_SkillGain_Cooking;
public static ConfigEntry<float> CE_SkillGain_Farming;
public static ConfigEntry<float> CE_SkillGain_Dodge;
public static ConfigEntry<float> CE_SkillGain_Ride;
public static ConfigEntry<bool> CE_JoinMessage_Enabled;
public static ConfigEntry<string> CE_JoinMessage_Text;
public static ConfigEntry<bool> CE_ForcePlayerPins_Enabled;
public static ConfigEntry<bool> CE_StatusHudOrganizer_Enabled;
public static ConfigEntry<bool> CE_AdminBypass;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
internal static ConfigSync ConfigSync;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
private static ConfigEntry<bool> _serverConfigLocked;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
private FileSystemWatcher _configWatcher;
private DateTime _lastCfgWriteUtc = DateTime.MinValue;
private bool _reloadScheduled;
private bool _watcherReady;
private DateTime _ignoreEventsUntilUtc = DateTime.MinValue;
public static bool IsLocalPlayerAdmin()
{
return ConfigSync != null && ConfigSync.IsAdmin;
}
public static bool GetAdminBypass()
{
return CE_AdminBypass.Value;
}
public static bool GetForcePlayerPins()
{
return CE_ForcePlayerPins_Enabled.Value;
}
public static bool GetBossAltarsProtectionEnabled()
{
return CE_BossAltarsProtection_Enabled.Value;
}
internal static bool GetProtectedAreaObjectsEnabled()
{
return CE_ProtectedAreaObjects_Enabled.Value;
}
private void Awake()
{
Localizer.Load();
if (!_bootstrapped)
{
_bootstrapped = true;
SetupServerSyncAndWatcher();
CE_AdminBypass = Cfg("01 - General", "01.01 - AdminBypass", defaultValue: true, "If true, admins bypass supported Tweaks restrictions.");
CE_ForcePlayerPins_Enabled = Cfg("02 - MapPins", "02.01 - ForceAllPlayersVisible", defaultValue: false, "Forces players to keep their public map position enabled.");
CE_JoinMessage_Enabled = Cfg("03 - JoinMessage", "03.01 - Enabled", defaultValue: false, "Enables the join message.");
CE_JoinMessage_Text = Cfg("03 - JoinMessage", "03.02 - Text", "A player has arrived.", "Join message text.");
CE_Plants_IgnoreBiome = Cfg("04 - Plants", "04.01 - IgnoreBiome", defaultValue: true, "Allows planting in any biome.");
CE_AllFaction_Enabled = Cfg("05 - FactionRemap", "05.01 - Enabled", defaultValue: false, "Enables faction remapping for creatures.");
CE_AllFaction_AnimalsVeg = Cfg<Faction>("05 - FactionRemap", "05.02 - AnimalsVegToFaction", (Faction)1, "Faction used for passive wildlife.");
CE_AllFaction_ForestMonsters = Cfg<Faction>("05 - FactionRemap", "05.03 - ForestMonstersToFaction", (Faction)2, "Faction used for Black Forest creatures.");
CE_AllFaction_Undead = Cfg<Faction>("05 - FactionRemap", "05.04 - UndeadToFaction", (Faction)3, "Faction used for undead creatures.");
CE_AllFaction_Demon = Cfg<Faction>("05 - FactionRemap", "05.05 - DemonToFaction", (Faction)4, "Faction used for Demon creatures.");
CE_AllFaction_MountainMonsters = Cfg<Faction>("05 - FactionRemap", "05.06 - MountainMonstersToFaction", (Faction)5, "Faction used for Mountain creatures.");
CE_AllFaction_SeaMonsters = Cfg<Faction>("05 - FactionRemap", "05.07 - SeaMonstersToFaction", (Faction)6, "Faction used for ocean creatures.");
CE_AllFaction_PlainsMonsters = Cfg<Faction>("05 - FactionRemap", "05.08 - PlainsMonstersToFaction", (Faction)7, "Faction used for Plains creatures.");
CE_AllFaction_Boss = Cfg<Faction>("05 - FactionRemap", "05.09 - BossToFaction", (Faction)8, "Faction used for bosses.");
CE_AllFaction_MistlandsMonsters = Cfg<Faction>("05 - FactionRemap", "05.10 - MistlandsMonstersToFaction", (Faction)9, "Faction used for Mistlands creatures.");
CE_TrashOnDel_Enabled = Cfg("06 - Trash", "06.01 - DeleteWithDelKey", defaultValue: true, "Allows deleting the dragged item using a key.");
CE_TrashOnDel_Key = Cfg<KeyCode>("06 - Trash", "06.02 - DeleteKey", (KeyCode)127, "Key used to delete the dragged item.", synced: false);
CE_TrashOnDel_Confirm = Cfg("06 - Trash", "06.03 - ConfirmDelete", defaultValue: false, "Asks for confirmation before deleting.", synced: false);
CE_TrashOnDel_AllowHotbar = Cfg("06 - Trash", "06.04 - AllowDeleteHotbar", defaultValue: false, "Allows deleting items from the hotbar.");
CE_FloatItems_Enabled = Cfg("07 - FloatItems", "07.01 - Enabled", defaultValue: true, "Makes dropped items float in water.");
CE_ClockHud_Enabled = Cfg("08 - ClockHud", "08.01 - Enabled", defaultValue: true, "Shows a simple clock at the top center of the screen.");
CE_ClockHud_ShowDay = Cfg("08 - ClockHud", "08.02 - ShowDay", defaultValue: true, "Shows the in-game day number.");
CE_ClockHud_ShowGameTime = Cfg("08 - ClockHud", "08.03 - ShowGameTime", defaultValue: true, "Shows the in-game time.");
CE_ClockHud_ShowRealTime = Cfg("08 - ClockHud", "08.04 - ShowRealTime", defaultValue: true, "Shows the real (system) time.");
CE_ClockHud_FontSize = Cfg("08 - ClockHud", "08.05 - FontSize", 28, "Clock font size.", synced: false);
CE_ClockHud_LabelDay = Cfg("08 - ClockHud", "08.06 - LabelDay", "Dia", "Label for the in-game day text.");
CE_ClockHud_LabelGameTime = Cfg("08 - ClockHud", "08.07 - LabelGameTime", "Hora", "Label for the in-game time text.");
CE_ClockHud_LabelRealTime = Cfg("08 - ClockHud", "08.08 - LabelRealTime", "Hora Real", "Label for the real time text.");
CE_ClockHud_ColorDay = Cfg("08 - ClockHud", "08.09 - ColorDay", "#FFD700", "HEX color for the Day label. Formats: #RRGGBB.", synced: false);
CE_ClockHud_ColorGameTime = Cfg("08 - ClockHud", "08.10 - ColorGameTime", "#FFD700", "HEX color for the Game Time label. Formats: #RRGGBB.", synced: false);
CE_ClockHud_ColorRealTime = Cfg("08 - ClockHud", "08.11 - ColorRealTime", "#FFD700", "HEX color for the Real Time label. Formats: #RRGGBB.", synced: false);
CE_ClockHud_ShowIcon = Cfg("08 - ClockHud", "08.12 - ShowIcon", defaultValue: true, "Shows the day/night icon.");
CE_ClockHud_IconSize = Cfg("08 - ClockHud", "08.13 - IconSize", 34f, "Day/Night icon size in pixels.", synced: false);
CE_AutoPickupRange = Cfg("09 - AutoPickupRange", "09.01 - Range", 6f, "Auto-pickup radius (meters). Vanilla is 2.");
CE_ComfortRange_Enabled = Cfg("10 - ComfortRange", "10.01 - Enabled", defaultValue: true, "Enable global comfort search radius override.");
CE_ComfortRange_Radius = Cfg("10 - ComfortRange", "10.02 - Radius", 25f, "Comfort search radius (meters). Vanilla is 10.");
CE_SkillDeathLoss_Enabled = Cfg("11 - SkillDeathLoss", "11.01 - Enabled", defaultValue: true, "If true, overrides vanilla skill loss handling on death.");
CE_SkillDeathLoss_Factor = Cfg("11 - SkillDeathLoss", "11.02 - LossFactor", 0.05f, "Fraction of each skill level lost on death. Vanilla is 0.05 (5%). Set 0 to disable skill loss.");
CE_SkillGain_Swords = Cfg("12 - SkillGain", "12.01 - Swords", 1f, "Skill gain multiplier for Swords. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Knives = Cfg("12 - SkillGain", "12.02 - Knives", 1f, "Skill gain multiplier for Knives. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Clubs = Cfg("12 - SkillGain", "12.03 - Clubs", 1f, "Skill gain multiplier for Clubs. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Polearms = Cfg("12 - SkillGain", "12.04 - Polearms", 1f, "Skill gain multiplier for Polearms. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Spears = Cfg("12 - SkillGain", "12.05 - Spears", 1f, "Skill gain multiplier for Spears. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Blocking = Cfg("12 - SkillGain", "12.06 - Blocking", 1f, "Skill gain multiplier for Blocking. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Axes = Cfg("12 - SkillGain", "12.07 - Axes", 1f, "Skill gain multiplier for Axes. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Bows = Cfg("12 - SkillGain", "12.08 - Bows", 1f, "Skill gain multiplier for Bows. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Crossbows = Cfg("12 - SkillGain", "12.09 - Crossbows", 1f, "Skill gain multiplier for Crossbows. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Unarmed = Cfg("12 - SkillGain", "12.10 - Unarmed", 1f, "Skill gain multiplier for Unarmed. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_ElementalMagic = Cfg("12 - SkillGain", "12.11 - ElementalMagic", 1f, "Skill gain multiplier for Elemental Magic. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_BloodMagic = Cfg("12 - SkillGain", "12.12 - BloodMagic", 1f, "Skill gain multiplier for Blood Magic. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Pickaxes = Cfg("12 - SkillGain", "12.13 - Pickaxes", 1f, "Skill gain multiplier for Pickaxes. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_WoodCutting = Cfg("12 - SkillGain", "12.14 - WoodCutting", 1f, "Skill gain multiplier for Wood Cutting. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Run = Cfg("12 - SkillGain", "12.15 - Run", 1f, "Skill gain multiplier for Run. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Jump = Cfg("12 - SkillGain", "12.16 - Jump", 1f, "Skill gain multiplier for Jump. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Sneak = Cfg("12 - SkillGain", "12.17 - Sneak", 1f, "Skill gain multiplier for Sneak. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Swim = Cfg("12 - SkillGain", "12.18 - Swim", 1f, "Skill gain multiplier for Swim. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Fishing = Cfg("12 - SkillGain", "12.19 - Fishing", 1f, "Skill gain multiplier for Fishing. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Crafting = Cfg("12 - SkillGain", "12.20 - Crafting", 1f, "Skill gain multiplier for Crafting. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Cooking = Cfg("12 - SkillGain", "12.21 - Cooking", 1f, "Skill gain multiplier for Cooking. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Farming = Cfg("12 - SkillGain", "12.22 - Farming", 1f, "Skill gain multiplier for Farming. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Dodge = Cfg("12 - SkillGain", "12.23 - Dodge", 1f, "Skill gain multiplier for Dodge. Example: 0.75 = 75% of vanilla gain.");
CE_SkillGain_Ride = Cfg("12 - SkillGain", "12.24 - Ride", 1f, "Skill gain multiplier for Ride. Example: 0.75 = 75% of vanilla gain.");
CE_BossAltarsProtection_Enabled = Cfg("13 - AltarsProtection", "13.01 - BossAltarsProtectionEnabled", defaultValue: true, "Enables protection around boss altars for building and terrain modification.");
CE_BossAltarsProtection_Radius = Cfg("13 - AltarsProtection", "13.02 - BossAltarsProtectionRadius", 50f, "Protection radius around boss altars for building and terrain modification.");
CE_ProtectedAreaObjects_Enabled = Cfg("14 - ProtectedAreaObjects", "14.01 - Enabled", defaultValue: true, "Enable protection around configured locations and vegetation/object prefabs.");
CE_ProtectedAreaObjects_Radius = Cfg("14 - ProtectedAreaObjects", "14.02 - Radius", 25f, "Protection radius around configured locations and vegetation/object prefabs.");
CE_ProtectedAreaObjects_Locations = Cfg("14 - ProtectedAreaObjects", "14.03 - Locations", "", "Comma-separated Location names protected against building and terrain editing.\nExample: SunkenCrypt4,Crypt2,Crypt3,Crypt4,TrollCave02,MountainCave02,GoblinCamp2,Mistlands_Excavation1");
CE_ProtectedAreaObjects_Vegetations = Cfg("14 - ProtectedAreaObjects", "14.04 - Vegetations", "", "Comma-separated vegetation/object prefab names protected against building and terrain editing. Only prefabs with ZNetView are registered by this system.\nExample: rock4_copper,silvervein");
CE_StatusHudOrganizer_Enabled = Cfg("15 - SmallStatusEffect", "15.01 - Enabled", defaultValue: true, "Enables compact status effect HUD layout.");
_harmony.PatchAll();
}
}
private void OnDestroy()
{
_configWatcher?.Dispose();
_configWatcher = null;
}
public void SetupServerSyncAndWatcher()
{
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Expected O, but got Unknown
bool flag = false;
try
{
((BaseUnityPlugin)this).Config.SaveOnConfigSet = false;
ConfigSync = new ConfigSync(((BaseUnityPlugin)this).Info.Metadata.GUID)
{
DisplayName = ((BaseUnityPlugin)this).Info.Metadata.Name,
CurrentVersion = ((BaseUnityPlugin)this).Info.Metadata.Version.ToString(),
MinimumRequiredVersion = ((BaseUnityPlugin)this).Info.Metadata.Version.ToString()
};
_serverConfigLocked = ((BaseUnityPlugin)this).Config.Bind<bool>("01 - General", "LockConfiguration", true, new ConfigDescription("If true, the server locks synchronized configs.", (AcceptableValueBase)null, new object[1]
{
new ConfigurationManagerAttributes
{
Browsable = false
}
}));
ConfigSync.AddLockingConfigEntry<bool>(_serverConfigLocked);
SetupConfigWatcher();
flag = true;
}
catch
{
}
finally
{
((BaseUnityPlugin)this).Config.SaveOnConfigSet = true;
if (flag && (Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer())
{
((BaseUnityPlugin)this).Config.Save();
}
}
}
protected ConfigEntry<T> Cfg<[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)] T>(string section, string key, T defaultValue, string description, bool synced = true)
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
return config(section, key, defaultValue, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synced);
}
private ConfigEntry<T> config<[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)] T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
ConfigDescription val = new ConfigDescription(description.Description + (synchronizedSetting ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags);
ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val);
try
{
SyncedConfigEntry<T> syncedConfigEntry = ConfigSync?.AddConfigEntry<T>(val2);
if (syncedConfigEntry != null)
{
syncedConfigEntry.SynchronizedConfig = synchronizedSetting;
}
}
catch
{
}
return val2;
}
private void SetupConfigWatcher()
{
try
{
_configWatcher?.Dispose();
string configPath = Paths.ConfigPath;
string fileName = Path.GetFileName(((BaseUnityPlugin)this).Config.ConfigFilePath);
_configWatcher = new FileSystemWatcher(configPath, fileName)
{
IncludeSubdirectories = false,
NotifyFilter = (NotifyFilters.FileName | NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.CreationTime)
};
FileSystemEventHandler onChanged = [<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)] (object _, FileSystemEventArgs __) =>
{
if (!(DateTime.UtcNow < _ignoreEventsUntilUtc))
{
_lastCfgWriteUtc = DateTime.UtcNow;
if (!_reloadScheduled)
{
_reloadScheduled = true;
((MonoBehaviour)this).StartCoroutine(ReloadConfigAfterQuietPeriod(0.75f));
}
}
};
_configWatcher.Changed += onChanged;
_configWatcher.Created += onChanged;
_configWatcher.Renamed += [<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)] (object _, RenamedEventArgs __) =>
{
onChanged(_, __);
};
_configWatcher.EnableRaisingEvents = true;
_watcherReady = true;
}
catch
{
}
}
[IteratorStateMachine(typeof(<ReloadConfigAfterQuietPeriod>d__93))]
private IEnumerator ReloadConfigAfterQuietPeriod(float quietSeconds)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <ReloadConfigAfterQuietPeriod>d__93(0)
{
<>4__this = this,
quietSeconds = quietSeconds
};
}
internal static float GetSkillMultiplier(SkillType skill)
{
//IL_0005: 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_0045: Expected I4, but got Unknown
//IL_0047: 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_007c: Expected I4, but got Unknown
if (1 == 0)
{
}
float result = (skill - 1) switch
{
0 => CE_SkillGain_Swords.Value,
1 => CE_SkillGain_Knives.Value,
2 => CE_SkillGain_Clubs.Value,
3 => CE_SkillGain_Polearms.Value,
4 => CE_SkillGain_Spears.Value,
5 => CE_SkillGain_Blocking.Value,
6 => CE_SkillGain_Axes.Value,
7 => CE_SkillGain_Bows.Value,
13 => CE_SkillGain_Crossbows.Value,
10 => CE_SkillGain_Unarmed.Value,
8 => CE_SkillGain_ElementalMagic.Value,
9 => CE_SkillGain_BloodMagic.Value,
11 => CE_SkillGain_Pickaxes.Value,
12 => CE_SkillGain_WoodCutting.Value,
_ => (skill - 100) switch
{
2 => CE_SkillGain_Run.Value,
0 => CE_SkillGain_Jump.Value,
1 => CE_SkillGain_Sneak.Value,
3 => CE_SkillGain_Swim.Value,
4 => CE_SkillGain_Fishing.Value,
7 => CE_SkillGain_Crafting.Value,
5 => CE_SkillGain_Cooking.Value,
6 => CE_SkillGain_Farming.Value,
8 => CE_SkillGain_Dodge.Value,
10 => CE_SkillGain_Ride.Value,
_ => 1f,
},
};
if (1 == 0)
{
}
return result;
}
}
[HarmonyPatch(typeof(Character), "Awake")]
internal static class AllFaction_CharacterFaction_Patch
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Postfix(Character __instance)
{
//IL_004a: 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_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: 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_0057: 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_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Expected I4, but got Unknown
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: 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)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: 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_00ce: 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_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
if (TweaksPlugin.CE_AllFaction_Enabled.Value && !((Object)(object)__instance == (Object)null) && !__instance.IsPlayer() && !__instance.IsTamed())
{
Faction faction = __instance.m_faction;
Faction val = faction;
Faction val2 = faction;
Faction val3 = val2;
switch (val3 - 1)
{
case 0:
val = TweaksPlugin.CE_AllFaction_AnimalsVeg.Value;
break;
case 1:
val = TweaksPlugin.CE_AllFaction_ForestMonsters.Value;
break;
case 2:
val = TweaksPlugin.CE_AllFaction_Undead.Value;
break;
case 3:
val = TweaksPlugin.CE_AllFaction_Demon.Value;
break;
case 4:
val = TweaksPlugin.CE_AllFaction_MountainMonsters.Value;
break;
case 5:
val = TweaksPlugin.CE_AllFaction_SeaMonsters.Value;
break;
case 6:
val = TweaksPlugin.CE_AllFaction_PlainsMonsters.Value;
break;
case 7:
val = TweaksPlugin.CE_AllFaction_Boss.Value;
break;
case 8:
val = TweaksPlugin.CE_AllFaction_MistlandsMonsters.Value;
break;
}
if (val != faction)
{
__instance.m_faction = val;
}
}
}
}
internal static class FloatItems
{
[HarmonyPatch(typeof(ItemDrop), "Awake")]
private static class Patch_ItemDrop_Awake
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Postfix(ItemDrop __instance)
{
if (Enabled() && IsValidTarget(__instance) && !((Object)(object)((Component)__instance).GetComponent<Floating>() != (Object)null))
{
((Component)__instance).gameObject.AddComponent<Floating>();
}
}
}
private static bool Enabled()
{
return TweaksPlugin.CE_FloatItems_Enabled.Value;
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static bool IsValidTarget(ItemDrop itemDrop)
{
if ((Object)(object)itemDrop == (Object)null)
{
return false;
}
GameObject gameObject = ((Component)itemDrop).gameObject;
if ((Object)(object)gameObject == (Object)null)
{
return false;
}
return (Object)(object)gameObject.GetComponent<Piece>() == (Object)null && (Object)(object)gameObject.GetComponent<WearNTear>() == (Object)null && (Object)(object)gameObject.GetComponent<Rigidbody>() != (Object)null && (Object)(object)gameObject.GetComponentInChildren<Collider>() != (Object)null && (Object)(object)gameObject.GetComponent<ZNetView>() != (Object)null;
}
}
[HarmonyPatch(typeof(Plant), "Awake")]
internal static class PlantAnywhere_Patch
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Postfix(Plant __instance)
{
//IL_0015: 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_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: 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_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
if (!TweaksPlugin.CE_Plants_IgnoreBiome.Value)
{
return;
}
Biome val = (Biome)0;
foreach (Biome value in Enum.GetValues(typeof(Biome)))
{
val = (Biome)(val | value);
}
__instance.m_biome = val;
}
}
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
internal static class ProtectedZoneObjects
{
private const string MsgBuildBlocked = "$tweaks_protectedareaobjects_build_blocked";
private const string MsgTerrainBlocked = "$tweaks_protectedareaobjects_terrain_blocked";
private static readonly HashSet<Location> ActiveLocations = new HashSet<Location>();
private static readonly HashSet<ZNetView> ActiveVegetations = new HashSet<ZNetView>();
private static readonly HashSet<string> LocationNames = new HashSet<string>(StringComparer.Ordinal);
private static readonly HashSet<string> VegetationNames = new HashSet<string>(StringComparer.Ordinal);
private static string _cachedLocations = string.Empty;
private static string _cachedVegetations = string.Empty;
internal static void RegisterLocation(Location location)
{
if (Object.op_Implicit((Object)(object)location))
{
RefreshLists();
string item = ProtectedZoneManager.Normalize(((Object)((Component)location).gameObject).name);
if (LocationNames.Contains(item))
{
ActiveLocations.Add(location);
}
}
}
internal static void UnregisterLocation(Location location)
{
if (Object.op_Implicit((Object)(object)location))
{
ActiveLocations.Remove(location);
}
}
internal static void RegisterVegetation(ZNetView znv)
{
if (Object.op_Implicit((Object)(object)znv))
{
RefreshLists();
string item = ProtectedZoneManager.Normalize(((Object)((Component)znv).gameObject).name);
if (VegetationNames.Contains(item))
{
ActiveVegetations.Add(znv);
}
}
}
internal static void UnregisterVegetation(ZNetView znv)
{
if (Object.op_Implicit((Object)(object)znv))
{
ActiveVegetations.Remove(znv);
}
}
internal static bool IsBlocked(Vector3 point, out ProtectedZoneBlock block)
{
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_0100: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
block = default(ProtectedZoneBlock);
if (!Enabled())
{
return false;
}
if (ProtectedZoneManager.Bypass())
{
return false;
}
RefreshLists();
float radius = GetRadius();
if (radius <= 0f)
{
return false;
}
foreach (Location activeLocation in ActiveLocations)
{
if (!Object.op_Implicit((Object)(object)activeLocation) || Utils.DistanceXZ(((Component)activeLocation).transform.position, point) > radius)
{
continue;
}
block = new ProtectedZoneBlock(ProtectedZoneKind.Object, "$tweaks_protectedareaobjects_build_blocked", "$tweaks_protectedareaobjects_terrain_blocked");
return true;
}
foreach (ZNetView activeVegetation in ActiveVegetations)
{
if (!Object.op_Implicit((Object)(object)activeVegetation) || Utils.DistanceXZ(((Component)activeVegetation).transform.position, point) > radius)
{
continue;
}
block = new ProtectedZoneBlock(ProtectedZoneKind.Object, "$tweaks_protectedareaobjects_build_blocked", "$tweaks_protectedareaobjects_terrain_blocked");
return true;
}
return false;
}
private static bool Enabled()
{
try
{
return TweaksPlugin.GetProtectedAreaObjectsEnabled();
}
catch
{
return true;
}
}
private static float GetRadius()
{
try
{
return Mathf.Max(0f, TweaksPlugin.CE_ProtectedAreaObjects_Radius.Value);
}
catch
{
return 100f;
}
}
private static void RefreshLists()
{
string locationsRaw = GetLocationsRaw();
string vegetationsRaw = GetVegetationsRaw();
if (!string.Equals(_cachedLocations, locationsRaw, StringComparison.Ordinal))
{
_cachedLocations = locationsRaw;
ProtectedZoneManager.Rebuild(LocationNames, locationsRaw);
}
if (!string.Equals(_cachedVegetations, vegetationsRaw, StringComparison.Ordinal))
{
_cachedVegetations = vegetationsRaw;
ProtectedZoneManager.Rebuild(VegetationNames, vegetationsRaw);
}
}
private static string GetLocationsRaw()
{
try
{
return TweaksPlugin.CE_ProtectedAreaObjects_Locations.Value ?? string.Empty;
}
catch
{
return string.Empty;
}
}
private static string GetVegetationsRaw()
{
try
{
return TweaksPlugin.CE_ProtectedAreaObjects_Vegetations.Value ?? string.Empty;
}
catch
{
return string.Empty;
}
}
}
internal enum ProtectedZoneKind
{
BossAltar,
Object
}
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
internal readonly struct ProtectedZoneBlock
{
internal readonly ProtectedZoneKind Kind;
internal readonly string BuildMessage;
internal readonly string TerrainMessage;
internal ProtectedZoneBlock(ProtectedZoneKind kind, string buildMessage, string terrainMessage)
{
Kind = kind;
BuildMessage = buildMessage;
TerrainMessage = terrainMessage;
}
}
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
internal static class ProtectedZoneManager
{
internal static bool TryGetBlock(Vector3 point, out ProtectedZoneBlock block)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
if (ProtectedZoneBossAltar.IsBlocked(point, out block))
{
return true;
}
if (ProtectedZoneObjects.IsBlocked(point, out block))
{
return true;
}
block = default(ProtectedZoneBlock);
return false;
}
internal static void ShowBuildBlocked(ProtectedZoneBlock block)
{
Show(block.BuildMessage);
}
internal static void ShowTerrainBlocked(ProtectedZoneBlock block)
{
Show(block.TerrainMessage);
}
internal static bool Bypass()
{
try
{
return TweaksPlugin.GetAdminBypass() && TweaksPlugin.IsLocalPlayerAdmin();
}
catch
{
return false;
}
}
internal static string Normalize(string name)
{
if (string.IsNullOrEmpty(name))
{
return string.Empty;
}
return name.EndsWith("(Clone)", StringComparison.Ordinal) ? name.Substring(0, name.Length - "(Clone)".Length).TrimEnd(Array.Empty<char>()) : name;
}
internal static void Rebuild(HashSet<string> target, string raw)
{
target.Clear();
if (string.IsNullOrWhiteSpace(raw))
{
return;
}
string[] array = raw.Split(new char[1] { ',' });
for (int i = 0; i < array.Length; i++)
{
string text = Normalize(array[i].Trim());
if (text.Length > 0)
{
target.Add(text);
}
}
}
private static void Show(string message)
{
Player localPlayer = Player.m_localPlayer;
if (Object.op_Implicit((Object)(object)localPlayer))
{
((Character)localPlayer).Message((MessageType)2, message, 0, (Sprite)null);
}
}
}
[HarmonyPatch(typeof(Location), "Awake")]
internal static class ProtectedZonePatchLocationAwake
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Postfix(Location __instance)
{
ProtectedZoneBossAltar.Register(__instance);
ProtectedZoneObjects.RegisterLocation(__instance);
}
}
[HarmonyPatch(typeof(Location), "OnDestroy")]
internal static class ProtectedZonePatchLocationOnDestroy
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Prefix(Location __instance)
{
ProtectedZoneBossAltar.Unregister(__instance);
ProtectedZoneObjects.UnregisterLocation(__instance);
}
}
[HarmonyPatch(typeof(ZNetView), "Awake")]
internal static class ProtectedZonePatchZNetViewAwake
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Postfix(ZNetView __instance)
{
ProtectedZoneObjects.RegisterVegetation(__instance);
}
}
[HarmonyPatch(typeof(ZNetView), "OnDestroy")]
internal static class ProtectedZonePatchZNetViewOnDestroy
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Prefix(ZNetView __instance)
{
ProtectedZoneObjects.UnregisterVegetation(__instance);
}
}
[HarmonyPatch(typeof(Player), "TryPlacePiece")]
internal static class ProtectedZonePatchPlayerTryPlacePiece
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static bool Prefix(Player __instance, Piece piece, ref bool __result)
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)__instance) || !Object.op_Implicit((Object)(object)piece))
{
return true;
}
__instance.UpdatePlacementGhost(true);
GameObject val = AccessTools.FieldRefAccess<Player, GameObject>("m_placementGhost").Invoke(__instance);
if (!Object.op_Implicit((Object)(object)val))
{
return true;
}
if (!ProtectedZoneManager.TryGetBlock(val.transform.position, out var block))
{
return true;
}
ProtectedZoneManager.ShowBuildBlocked(block);
__result = false;
return false;
}
}
[HarmonyPatch(typeof(TerrainComp), "RPC_ApplyOperation")]
internal static class ProtectedZonePatchTerrainApplyOperation
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static bool Prefix(TerrainComp __instance, long sender, ZPackage pkg)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Expected O, but got Unknown
//IL_0026: 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_002c: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)__instance) || pkg == null)
{
return true;
}
ZPackage val = new ZPackage(pkg.GetArray());
Vector3 point = val.ReadVector3();
if (!ProtectedZoneManager.TryGetBlock(point, out var block))
{
return true;
}
ProtectedZoneManager.ShowTerrainBlocked(block);
return false;
}
}
[HarmonyPatch(typeof(Skills), "LowerAllSkills")]
internal static class Tweaks_Skills_LowerAllSkills_Patch
{
[HarmonyPriority(500)]
private static bool Prefix(ref float __0)
{
if (TweaksPlugin.CE_SkillDeathLoss_Enabled == null || !TweaksPlugin.CE_SkillDeathLoss_Enabled.Value)
{
return true;
}
float num = ((TweaksPlugin.CE_SkillDeathLoss_Factor != null) ? TweaksPlugin.CE_SkillDeathLoss_Factor.Value : 0.05f);
if (num < 0f)
{
num = 0f;
}
if (num == 0f)
{
return false;
}
__0 = num;
return true;
}
}
[HarmonyPatch(typeof(Skills), "Clear")]
internal static class Tweaks_Skills_Clear_Patch
{
[HarmonyPriority(500)]
private static bool Prefix()
{
if (TweaksPlugin.CE_SkillDeathLoss_Enabled == null || !TweaksPlugin.CE_SkillDeathLoss_Enabled.Value)
{
return true;
}
return false;
}
}
[HarmonyPatch(typeof(Skills), "RaiseSkill")]
internal static class Tweaks_SkillGain_Patch
{
private static void Prefix(ref SkillType skillType, ref float factor)
{
if (skillType && (int)skillType != 999)
{
factor *= TweaksPlugin.GetSkillMultiplier(skillType);
}
}
}
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
internal static class TrashOnDel
{
[HarmonyPatch(typeof(InventoryGui), "Hide")]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)]
private static class Patch_InventoryGui_Hide
{
private static void Postfix()
{
CloseDialog();
}
}
[HarmonyPatch(typeof(InventoryGui), "UpdateItemDrag")]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(0)]
private static class Patch_InventoryGui_UpdateItemDrag
{
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
private static void Postfix(InventoryGui __instance, ItemData ___m_dragItem, Inventory ___m_dragInventory, int ___m_dragAmount, GameObject ___m_dragGo)
{
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Invalid comparison between Unknown and I4
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
if (Enabled() && !((Object)(object)___m_dragGo == (Object)null) && ___m_dragItem != null && ___m_dragInventory != null && ___m_dragInventory.ContainsItem(___m_dragItem) && !_dialogOpen)
{
KeyCode value = TweaksPlugin.CE_TrashOnDel_Key.Value;
if ((int)value != 0 && ZInput.GetKeyDown(value, true))
{
TryRequestDelete(___m_dragItem, ___m_dragInventory, ___m_dragAmount);
}
}
}
}
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
private static GameObject _dialog;
private static bool _dialogOpen;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
private static ItemData _pendingItem;
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(2)]
private static Inventory _pendingInv;
private static int _pendingAmount;
private static readonly MethodInfo MI_SetupDragItem = AccessTools.Method(typeof(InventoryGui), "SetupDragItem", (Type[])null, (Type[])null);
private static readonly MethodInfo MI_UpdateCraftingPanel = AccessTools.Method(typeof(InventoryGui), "UpdateCraftingPanel", new Type[1] { typeof(bool) }, (Type[])null);
private static bool Enabled()
{
return TweaksPlugin.CE_TrashOnDel_Enabled.Value;
}
private static void CloseDialog()
{
_dialogOpen = false;
if ((Object)(object)_dialog != (Object)null)
{
Object.Destroy((Object)(object)_dialog);
_dialog = null;
}
_pendingItem = null;
_pendingInv = null;
_pendingAmount = 0;
}
private static void DoDeleteNow()
{
if ((Object)(object)InventoryGui.instance == (Object)null)
{
CloseDialog();
return;
}
if ((Object)(object)Player.m_localPlayer == (Object)null)
{
CloseDialog();
return;
}
if (_pendingItem == null || _pendingInv == null)
{
CloseDialog();
return;
}
if (_pendingAmount <= 0)
{
CloseDialog();
return;
}
if (!_pendingInv.ContainsItem(_pendingItem))
{
CloseDialog();
return;
}
if (!TweaksPlugin.CE_TrashOnDel_AllowHotbar.Value && _pendingItem.m_gridPos.y == 0)
{
CloseDialog();
return;
}
Player localPlayer = Player.m_localPlayer;
((Humanoid)localPlayer).RemoveEquipAction(_pendingItem);
((Humanoid)localPlayer).UnequipItem(_pendingItem, false);
if (_pendingAmount >= _pendingItem.m_stack)
{
_pendingInv.RemoveItem(_pendingItem);
}
else
{
_pendingInv.RemoveItem(_pendingItem, _pendingAmount);
}
_pendingInv.Changed();
MI_SetupDragItem.Invoke(InventoryGui.instance, new object[3] { null, null, 0 });
MI_UpdateCraftingPanel.Invoke(InventoryGui.instance, new object[1] { false });
CloseDialog();
}
private static void ShowConfirmDialog(ItemData item, int amount)
{
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Expected O, but got Unknown
//IL_0172: Unknown result type (might be due to invalid IL or missing references)
//IL_017c: Expected O, but got Unknown
//IL_0227: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)InventoryGui.instance == (Object)null || _dialogOpen)
{
return;
}
Transform splitPanel = InventoryGui.instance.m_splitPanel;
if ((Object)(object)splitPanel == (Object)null)
{
return;
}
_dialog = Object.Instantiate<GameObject>(((Component)splitPanel).gameObject, ((Component)InventoryGui.instance).transform);
((Object)_dialog).name = "TweaksTrashConfirm";
_dialogOpen = true;
Transform obj = _dialog.transform.Find("win_bkg/Button_ok");
Button val = ((obj != null) ? ((Component)obj).GetComponent<Button>() : null);
if ((Object)(object)val != (Object)null)
{
((UnityEventBase)val.onClick).RemoveAllListeners();
((UnityEvent)val.onClick).AddListener(new UnityAction(DoDeleteNow));
TextMeshProUGUI componentInChildren = ((Component)val).GetComponentInChildren<TextMeshProUGUI>();
if ((Object)(object)componentInChildren != (Object)null)
{
string text = ((Localization.instance != null) ? Localization.instance.Localize("$menu_ok") : "OK");
((TMP_Text)componentInChildren).text = ((string.IsNullOrWhiteSpace(text) || text.Contains("$")) ? "OK" : text);
}
}
Transform obj2 = _dialog.transform.Find("win_bkg/Button_cancel");
Button val2 = ((obj2 != null) ? ((Component)obj2).GetComponent<Button>() : null);
if ((Object)(object)val2 != (Object)null)
{
((UnityEventBase)val2.onClick).RemoveAllListeners();
((UnityEvent)val2.onClick).AddListener(new UnityAction(CloseDialog));
}
Transform val3 = _dialog.transform.Find("win_bkg/Slider");
if ((Object)(object)val3 != (Object)null)
{
((Component)val3).gameObject.SetActive(false);
}
Transform obj3 = _dialog.transform.Find("win_bkg/Text");
TextMeshProUGUI val4 = ((obj3 != null) ? ((Component)obj3).GetComponent<TextMeshProUGUI>() : null);
if ((Object)(object)val4 != (Object)null)
{
string text2 = ((Localization.instance != null) ? Localization.instance.Localize("$tweaks_trash_title") : "Lixeira");
((TMP_Text)val4).text = ((string.IsNullOrWhiteSpace(text2) || text2.Contains("$")) ? "Lixeira" : text2);
((Graphic)val4).color = Color.red;
}
Transform obj4 = _dialog.transform.Find("win_bkg/Icon_bkg/Icon");
Image val5 = ((obj4 != null) ? ((Component)obj4).GetComponent<Image>() : null);
if ((Object)(object)val5 != (Object)null)
{
val5.sprite = item.GetIcon();
}
Transform obj5 = _dialog.transform.Find("win_bkg/amount");
TextMeshProUGUI val6 = ((obj5 != null) ? ((Component)obj5).GetComponent<TextMeshProUGUI>() : null);
if ((Object)(object)val6 != (Object)null)
{
((TMP_Text)val6).text = $"{amount}/{item.m_shared.m_maxStackSize}";
}
_dialog.SetActive(true);
}
private static void TryRequestDelete(ItemData dragItem, Inventory dragInv, int dragAmount)
{
if (Enabled() && !((Object)(object)InventoryGui.instance == (Object)null) && !((Object)(object)Player.m_localPlayer == (Object)null) && dragInv == ((Humanoid)Player.m_localPlayer).m_inventory && dragAmount > 0 && (TweaksPlugin.CE_TrashOnDel_AllowHotbar.Value || dragItem.m_gridPos.y != 0))
{
_pendingItem = dragItem;
_pendingInv = dragInv;
_pendingAmount = dragAmount;
if (TweaksPlugin.CE_TrashOnDel_Confirm.Value)
{
ShowConfirmDialog(dragItem, dragAmount);
}
else
{
DoDeleteNow();
}
}
}
}
public class Tweaks_ForcePlayerPins
{
[HarmonyPatch(typeof(Player), "OnSpawned")]
public static class Patch_Player_OnSpawned
{
private static void Postfix()
{
if (TweaksPlugin.GetForcePlayerPins() && (!TweaksPlugin.GetAdminBypass() || !TweaksPlugin.IsLocalPlayerAdmin()) && !((Object)(object)ZNet.instance == (Object)null))
{
ZNet.instance.SetPublicReferencePosition(true);
}
}
}
[HarmonyPatch(typeof(ZNet), "SetPublicReferencePosition")]
public static class Patch_ZNet_SetPublicReferencePosition
{
private static void Prefix(ref bool pub)
{
if (TweaksPlugin.GetForcePlayerPins() && (!TweaksPlugin.GetAdminBypass() || !TweaksPlugin.IsLocalPlayerAdmin()))
{
pub = true;
}
}
}
}
[HarmonyPatch(typeof(Game), "UpdateRespawn")]
[<10f6daa5-3e28-494a-bd9a-778075d193dc>Nullable(0)]
[<68e52a09-af3b-4f50-86ad-48279f320d83>NullableContext(1)]
internal static class Tweaks_JoinMessage
{
private static readonly MethodInfo MI_ChatSendText = AccessTools.Method(typeof(Chat), "SendText", new Type[2]
{
typeof(Type),
typeof(string)
}, (Type[])null);
private static readonly CodeMatch ArrivalTokenMatch = new CodeMatch((OpCode?)OpCodes.Ldstr, (object)"$text_player_arrived", (string)null);
private static readonly CodeMatch SendTextMatch = new CodeMatch((OpCode?)OpCodes.Callvirt, (object)MI_ChatSendText, (string)null);
[HarmonyTranspiler]
private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Expected O, but got Unknown
CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null);
val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1] { ArrivalTokenMatch });
if (!val.IsValid)
{
return val.InstructionEnumeration();
}
val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1] { SendTextMatch });
if (!val.IsValid)
{
return val.InstructionEnumeration();
}
val.SetInstruction(Transpilers.EmitDelegate<Action<Chat, Type, string>>((Action<Chat, Type, string>)SendJoinMessage));
return val.InstructionEnumeration();
}
private static void SendJoinMessage(Chat chat, Type type, string originalText)
{
//IL_0028: 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)
if ((Object)(object)chat == (Object)null)
{
return;
}
ConfigEntry<bool> cE_JoinMessage_Enabled = TweaksPlugin.CE_JoinMessage_Enabled;
if (cE_JoinMessage_Enabled == null || !cE_JoinMessage_Enabled.Value)
{
chat.SendText(type, originalText);
return;
}
string text = TweaksPlugin.CE_JoinMessage_Text?.Value ?? string.Empty;
if (!string.IsNullOrWhiteSpace(text))
{
chat.SendText(type, text.Trim());
}
}
}
}
namespace Microsoft.CodeAnalysis
{
[<c313bdcf-fb71-4bb3-9447-e4ef333dedc2>Embedded]
[CompilerGenerated]
internal sealed class <c313bdcf-fb71-4bb3-9447-e4ef333dedc2>EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
[CompilerGenerated]
[<c313bdcf-fb71-4bb3-9447-e4ef333dedc2>Embedded]
internal sealed class <49c14fc5-ae8f-4738-b0e3-3dba221955ba>NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public <49c14fc5-ae8f-4738-b0e3-3dba221955ba>NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public <49c14fc5-ae8f-4738-b0e3-3dba221955ba>NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[<c313bdcf-fb71-4bb3-9447-e4ef333dedc2>Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
[CompilerGenerated]
internal sealed