Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of TamingTools v0.0.1
TamingTools.dll
Decompiled 17 hours ago
The result has been truncated due to the large size, download it to view full contents!
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.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 BepInEx.Logging; using HarmonyLib; using JetBrains.Annotations; using LocalizationManager; using Microsoft.CodeAnalysis; using ServerSync; using TMPro; using TamingTools.RPC; using UnityEngine; using UnityEngine.SceneManagement; 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("d8b8b522-7ea7-41eb-a21a-d076e3ab8dc5")] [assembly: ComVisible(false)] [assembly: AssemblyTrademark("")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyProduct("TamingTools")] [assembly: AssemblyCompany("")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyDescription("")] [assembly: AssemblyTitle("TamingTools")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyConfiguration("")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace TamingTools { public class Enchants { public static void AddTamingFoodEffect(string itemName, Tameable tame) { //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) if (itemName == TamingTools.t1foodPrefabName) { tame.m_character.m_seman.AddStatusEffect(TamingTools.prefabManager.effect_tameFood1, true, 0, 0f); } else if (itemName == TamingTools.t2foodPrefabName) { tame.m_character.m_seman.AddStatusEffect(TamingTools.prefabManager.effect_tameFood2, true, 0, 0f); } else { if (!(itemName == TamingTools.t3foodPrefabName)) { return; } tame.m_character.m_seman.AddStatusEffect(TamingTools.prefabManager.effect_tameFood3, true, 0, 0f); } if (!tame.IsTamed()) { tame.m_nview.GetZDO().Set(ZDOVars.s_tameLastFeeding, 0L); } GameObject prefab = ZNetScene.instance.GetPrefab("fx_guardstone_permitted_add"); Object.Instantiate<GameObject>(prefab, ((Component)tame).transform.position, ((Component)tame).transform.rotation); } public static float getTamingFoodEffect(Tameable tame) { SEMan seman = tame.m_character.m_seman; if (seman != null) { List<StatusEffect> statusEffects = seman.GetStatusEffects(); foreach (StatusEffect item in statusEffects) { DBG.blogDebug("se.m_name=" + item.m_name); if (item.m_name == "$tt_effect_tamefood") { DBG.blogDebug("has tameFood:" + item.m_cooldown); return item.m_cooldown; } } } return 1f; } public static float getPlayersSpeedTame(Vector3 center, float maxdist) { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) List<Player> s_players = Player.s_players; float num = 0f; float time = Time.time; foreach (Player item in s_players) { if (!((Character)item).m_nview.IsValid()) { continue; } DBG.tryblogDebug("plr=" + item.GetPlayerName(), "plr=could not get name"); if (!(Vector3.Distance(((Component)item).transform.position, center) > maxdist)) { ZDO zDO = ((Character)item).m_nview.GetZDO(); if (time < zDO.GetFloat("SE_SpeedTame", 0f)) { DBG.blogDebug("has Speed Tame"); num += 3f; } if (time < zDO.GetFloat("SE_BestialCommand", 0f)) { DBG.blogDebug("has Bestial Command"); num += 1f; } } } return num; } [HarmonyPostfix] [HarmonyPatch(typeof(Tameable), "OnConsumedItem")] private static void PostfixOnConsume(ItemDrop item, Tameable __instance) { if ((Object)(object)item != (Object)null) { AddTamingFoodEffect(((Object)item).name.Replace("(Clone)", ""), __instance); } } [HarmonyPostfix] [HarmonyPatch(typeof(Tameable), "Awake")] private static void Postfix_Tameable_Awake(Tameable __instance) { if ((Object)(object)__instance.m_monsterAI == (Object)null) { DBG.blogDebug("No monsterAI, skipping remove tamingfood"); return; } List<ItemDrop> consumeItems = __instance.m_monsterAI.m_consumeItems; if (consumeItems == null || consumeItems.Count == 0) { return; } bool flag = __instance.IsTamed(); int num = 0; for (int num2 = consumeItems.Count - 1; num2 >= 0; num2--) { if (((Object)consumeItems[num2]).name == TamingTools.t3foodPrefabName) { if (!flag) { return; } consumeItems.RemoveAt(num2); num++; } else if (((Object)consumeItems[num2]).name == TamingTools.t2foodPrefabName) { if (!flag) { return; } consumeItems.RemoveAt(num2); num++; } else if (((Object)consumeItems[num2]).name == TamingTools.t1foodPrefabName) { if (!flag) { return; } consumeItems.RemoveAt(num2); num++; } if (num >= PrefabManager.tamingfood_IDrops.Length) { return; } } if (flag) { return; } ItemDrop[] tamingfood_IDrops = PrefabManager.tamingfood_IDrops; foreach (ItemDrop item in tamingfood_IDrops) { consumeItems.Add(item); } GameObject prefab = ZNetScene.instance.GetPrefab(((Object)__instance).name.Replace("(Clone)", "")); if ((Object)(object)prefab != (Object)null) { List<ItemDrop> consumeItems2 = prefab.GetComponent<MonsterAI>().m_consumeItems; ItemDrop[] tamingfood_IDrops2 = PrefabManager.tamingfood_IDrops; foreach (ItemDrop item2 in tamingfood_IDrops2) { consumeItems2.Add(item2); } } } [HarmonyPostfix] [HarmonyPatch(typeof(Character), "SetTamed")] private static void Postfix_SetTame(Character __instance, bool tamed) { if (!tamed || (Object)(object)__instance.m_baseAI == (Object)null) { return; } BaseAI baseAI = __instance.m_baseAI; MonsterAI val = (MonsterAI)(object)((baseAI is MonsterAI) ? baseAI : null); if ((Object)(object)val == (Object)null) { DBG.blogDebug("skipping as type is:" + ((object)__instance.m_baseAI).GetType().Name); return; } List<ItemDrop> consumeItems = val.m_consumeItems; if (consumeItems == null || consumeItems.Count == 0) { return; } int num = 0; for (int num2 = consumeItems.Count - 1; num2 >= 0; num2--) { if (((Object)consumeItems[num2]).name == TamingTools.t3foodPrefabName) { DBG.blogDebug("Removing (" + num2 + ") " + ((Object)consumeItems[num2]).name); consumeItems.RemoveAt(num2); num++; } else if (((Object)consumeItems[num2]).name == TamingTools.t2foodPrefabName) { DBG.blogDebug("Removing (" + num2 + ") " + ((Object)consumeItems[num2]).name); consumeItems.RemoveAt(num2); num++; } else if (((Object)consumeItems[num2]).name == TamingTools.t1foodPrefabName) { DBG.blogDebug("Removing (" + num2 + ") " + ((Object)consumeItems[num2]).name); consumeItems.RemoveAt(num2); num++; } if (num >= PrefabManager.tamingfood_IDrops.Length) { break; } } } [HarmonyPrefix] [HarmonyPatch(typeof(Tameable), "DecreaseRemainingTime")] private static void PrefixDecreaseRemainingTime(Tameable __instance, ref float time) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) time += getPlayersSpeedTame(((Component)__instance).transform.position, 25f); time *= getTamingFoodEffect(__instance); } } public class TT_StatusEffect : StatusEffect { private ZNetView m_nview; public string ZDO_key = ""; public float m_lvl = 1f; public float m_length = 600f; public float m_damageMod = 0.6f; public SkillType[] modifySkills = (SkillType[])(object)new SkillType[0]; public override void Setup(Character character) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) base.m_character = character; if (!string.IsNullOrEmpty(base.m_startMessage)) { base.m_character.Message(base.m_startMessageType, base.m_startMessage, 0, (Sprite)null); } m_nview = base.m_character.m_nview; if (m_nview.IsValid()) { if (base.m_repeatInterval > 0f) { m_length = base.m_repeatInterval; } DBG.blogDebug("Setting " + ZDO_key + " to time " + (Time.time + m_length)); m_nview.GetZDO().Set(ZDO_key, Time.time + m_length); } ((StatusEffect)this).TriggerStartEffects(); } public override void UpdateStatusEffect(float dt) { base.m_time += dt; if (base.m_repeatInterval > 0f) { base.m_msgTimer += dt; if (base.m_msgTimer > base.m_repeatInterval) { DBG.blogDebug("resetting timer for " + ZDO_key + " to time " + (Time.time + base.m_repeatInterval)); base.m_msgTimer = 0f; m_nview.GetZDO().Set(ZDO_key, Time.time + base.m_repeatInterval); } } } public override void ModifyAttack(SkillType skill, ref HitData hitData) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if (modifySkills.Length != 0 && (modifySkills.Contains(skill) || (int)modifySkills[0] == 999)) { ((DamageTypes)(ref hitData.m_damage)).Modify(m_damageMod); } } public override void Stop() { ((StatusEffect)this).Stop(); m_nview.GetZDO().Set(ZDO_key, 0f); } } public class PrefabManager : MonoBehaviour { public GameObject Root; public static ZNetScene zns; private static AssetBundle Assets; public const string assetBundleName = "tt_assets"; public static string assetPath = TamingTools.assetPath; public static GameObject T1FoodPrefab; public static GameObject T2FoodPrefab; public static GameObject T3FoodPrefab; private static GameObject TameMeadBasePrefab; private static GameObject TameMeadPrefab; public StatusEffect effect_tamebuff = ScriptableObject.CreateInstance<StatusEffect>(); public StatusEffect effect_tameFood1 = ScriptableObject.CreateInstance<StatusEffect>(); public StatusEffect effect_tameFood2 = ScriptableObject.CreateInstance<StatusEffect>(); public StatusEffect effect_tameFood3 = ScriptableObject.CreateInstance<StatusEffect>(); public static TT_StatusEffect effect_speed_tame = ScriptableObject.CreateInstance<TT_StatusEffect>(); public static ItemDrop[] tamingfood_IDrops = (ItemDrop[])(object)new ItemDrop[3]; private static bool setItemConversions = false; public static bool hasInitItems = false; public static Dictionary<string, Shader> ShaderDict = new Dictionary<string, Shader>(); public static List<GameObject> MocksToComplete = new List<GameObject>(); private void Awake() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown Root = new GameObject("PrefabList"); Root.transform.SetParent(TamingTools.Root.transform); Root.SetActive(false); Assets = Utils.LoadAssetBundle("tt_assets", Assembly.GetExecutingAssembly()); T1FoodPrefab = Assets.LoadAsset<GameObject>(assetPath + TamingTools.t1foodPrefabName + ".prefab"); T2FoodPrefab = Assets.LoadAsset<GameObject>(assetPath + TamingTools.t2foodPrefabName + ".prefab"); T3FoodPrefab = Assets.LoadAsset<GameObject>(assetPath + TamingTools.t3foodPrefabName + ".prefab"); MocksToComplete.Add(T3FoodPrefab); tamingfood_IDrops[0] = T1FoodPrefab.GetComponent<ItemDrop>(); tamingfood_IDrops[1] = T2FoodPrefab.GetComponent<ItemDrop>(); tamingfood_IDrops[2] = T3FoodPrefab.GetComponent<ItemDrop>(); TameMeadPrefab = Assets.LoadAsset<GameObject>(assetPath + "MeadSpeedTame.prefab"); TameMeadBasePrefab = Assets.LoadAsset<GameObject>(assetPath + "MeadBaseSpeedTame.prefab"); } public static AssetBundle getAssetBundle() { return Assets; } public static void InitItemReg() { DBG.blogDebug("InitItemReg"); TamingTools.prefabManager.EffectReg(); DBG.blogDebug("Post effect reg"); TameMeadBasePrefab.GetComponent<ItemDrop>().m_itemData.m_shared.m_consumeStatusEffect = (StatusEffect)(object)effect_speed_tame; TameMeadPrefab.GetComponent<ItemDrop>().m_itemData.m_shared.m_consumeStatusEffect = (StatusEffect)(object)effect_speed_tame; CompleteAllMocks(); hasInitItems = true; } public static void CompleteAllMocks() { for (int num = MocksToComplete.Count - 1; num >= 0; num--) { if (Utils.FixMock(MocksToComplete[num])) { MocksToComplete.RemoveAt(num); } else { DBG.blogDebug("failed to fix Mock on: " + ((Object)MocksToComplete[num]).name); } } } public static void ItemReg() { DBG.blogDebug("ItemReg"); if (TamingTools.useTamingFoods.Value) { addItem(T1FoodPrefab, TamingTools.T1Food_Recipe.Value, TamingTools.T1Food_Station.Value); addItem(T2FoodPrefab, TamingTools.T2Food_Recipe.Value, TamingTools.T2Food_Station.Value); addItem(T3FoodPrefab, TamingTools.T3Food_Recipe.Value, TamingTools.T3Food_Station.Value); } else { removeItem("TT_T1Food"); removeItem("TT_T2Food"); removeItem("TT_T3Food"); } if (TamingTools.useTamingMead.Value) { addSpeedTamePotion(); return; } removeItem("MeadBaseSpeedTame"); removeItem("MeadSpeedTame"); } public static void addSpeedTamePotion() { DBG.blogDebug("Adding recipe for SpeedTamePotion"); addItem(TameMeadBasePrefab, TamingTools.TamingMead_Recipe.Value, TamingTools.TamingMead_Station.Value); DBG.blogDebug("Added recipe for SpeedTamePotionBase"); addItem(TameMeadPrefab, "", ""); addFermenterConversions(); } private static void addFermenterConversions() { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown if (!setItemConversions) { DBG.blogDebug("Adding conversion for SpeedTamePotion"); GameObject prefab = ZNetScene.instance.GetPrefab("fermenter"); if ((Object)(object)prefab == (Object)null) { DBG.blogDebug("Failed to find fermenter"); } DBG.blogDebug("Got Fermenter prefab "); Fermenter component = prefab.GetComponent<Fermenter>(); ItemConversion conversion = new ItemConversion(); conversion.m_from = TameMeadBasePrefab.GetComponent<ItemDrop>(); if (component.m_conversion.Exists((ItemConversion c) => (Object)(object)c.m_from == (Object)(object)conversion.m_from)) { DBG.blogDebug("Already conversion for speed tame potion "); setItemConversions = true; return; } conversion.m_to = TameMeadPrefab.GetComponent<ItemDrop>(); conversion.m_producedItems = 4; component.m_conversion.Add(conversion); DBG.blogDebug("Added conversion for SpeedTamePotion"); setItemConversions = true; } } private static void removeItem(string prefabName) { GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(prefabName); if (!Object.op_Implicit((Object)(object)itemPrefab)) { DBG.blogWarning("cannot remove: " + prefabName + " as not in OBjectDB"); } else { ObjectDB.instance.m_items.Remove(itemPrefab); } } public static void addItem(GameObject go, string recipe, string station) { if ((Object)(object)go == (Object)null || ((Object)go).name == null) { DBG.blogDebug("go is null"); } DBG.blogDebug("Attempting to add item:" + ((Object)go).name); if (Object.op_Implicit((Object)(object)ObjectDB.instance.GetItemPrefab(((Object)go).name))) { DBG.blogDebug("got item"); if (Object.op_Implicit((Object)(object)ZNetScene.instance)) { DBG.blogDebug("addItem resetting: " + ((Object)go).name + " recipe"); ResetRecipe(recipe, station, ((Object)go).name); } DBG.blogDebug("already in oDB: " + ((Object)go).name); } else { DBG.blogDebug("addItem adding: " + ((Object)go).name + " to ObjectDB: " + ((Object)ObjectDB.instance).name); Utils.addItemToODB(go, ObjectDB.instance); DBG.blogDebug("Amount in objectDB=" + ObjectDB.instance.m_itemByHash.Count); if (Object.op_Implicit((Object)(object)ZNetScene.instance)) { ResetRecipe(recipe, station, ((Object)go).name); } } } private static Recipe ResetRecipe(string recipeConfig, string craftingStation, string item) { if (recipeConfig == "" || craftingStation == "") { return null; } GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(item); DBG.blogDebug("resetting: " + item + " recipe"); if ((Object)(object)itemPrefab == (Object)null) { DBG.blogWarning(item + " is null"); return null; } ItemDrop item2 = default(ItemDrop); if (!itemPrefab.TryGetComponent<ItemDrop>(ref item2)) { DBG.blogWarning(item + " does not have itemDrop"); return null; } Recipe val = ScriptableObject.CreateInstance<Recipe>(); ((Object)val).name = "Recipe_" + item; val.m_item = item2; if (item == ((Object)T2FoodPrefab).name) { val.m_amount = 3; } string[] array = craftingStation.Split(new char[1] { ':' }); GameObject prefab = ZNetScene.instance.GetPrefab(array[0]); CraftingStation val2 = default(CraftingStation); if ((Object)(object)prefab == (Object)null || !prefab.TryGetComponent<CraftingStation>(ref val2)) { DBG.blogWarning("invalid crafting station: " + array[0]); return null; } val.m_craftingStation = val2; val.m_repairStation = val2; if (array.Length > 1 && int.TryParse(array[1], out var result)) { val.m_minStationLevel = result; } else { val.m_minStationLevel = 5; } string[] array2 = recipeConfig.Split(new char[1] { ',' }); int amt = 1; int upgrade_amt = 1; List<Requirement> list = new List<Requirement>(); for (int i = 0; i < array2.Length; i++) { string[] array3 = array2[i].Split(new char[1] { ':' }); if (array3.Length > 1 && int.TryParse(array3[1], out var result2)) { if (array3.Length > 2 && int.TryParse(array3[2], out var result3)) { amt = result2; upgrade_amt = result3; } else { amt = result2; upgrade_amt = Mathf.RoundToInt((float)result2 * 0.75f); } } Requirement val3 = makeRequirment(array3[0], amt, upgrade_amt); if (val3 == null) { return null; } list.Add(val3); } val.m_resources = list.ToArray(); ObjectDB.instance.m_recipes.Add(val); return val; } private static Requirement makeRequirment(string itemStr, int amt, int upgrade_amt) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown Requirement val = new Requirement(); GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemStr); ItemDrop resItem = default(ItemDrop); if (!Object.op_Implicit((Object)(object)itemPrefab) || !itemPrefab.TryGetComponent<ItemDrop>(ref resItem)) { DBG.blogDebug("Ingredient: " + itemStr + " is not found"); return null; } val.m_amount = amt; val.m_amountPerLevel = upgrade_amt; val.m_resItem = resItem; return val; } private void EffectReg() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown Transform transform = Assets.LoadAsset<GameObject>(assetPath + "vfx_Effects.prefab").transform; effect_tamebuff.m_startEffects.m_effectPrefabs = (EffectData[])(object)new EffectData[1]; effect_tamebuff.m_startEffects.m_effectPrefabs[0] = new EffectData(); EffectData val = effect_tamebuff.m_startEffects.m_effectPrefabs[0]; val.m_attach = true; val.m_inheritParentRotation = true; val.m_inheritParentScale = true; val.m_scale = true; GameObject val2 = Object.Instantiate<GameObject>(((Component)transform.Find("vfx_TameFood")).gameObject, TamingTools.prefabManager.Root.transform); ((Object)val2).name = ((Object)val2).name.Replace("(Clone)", ""); effect_tamebuff.m_startEffects.m_effectPrefabs[0].m_prefab = val2; ((Object)effect_tamebuff).name = "SE_TameBuff"; effect_tamebuff.m_ttl = 600f; effect_tameFood1 = Object.Instantiate<StatusEffect>(effect_tamebuff, Root.transform); ((Object)effect_tameFood1).name = "SE_TameFood1"; effect_tameFood1.m_ttl = 620f; effect_tameFood1.m_name = "$tt_effect_tamefood"; effect_tameFood1.m_cooldown = 1.18f; effect_tameFood2 = Object.Instantiate<StatusEffect>(effect_tameFood1, Root.transform); ((Object)effect_tameFood2).name = "SE_TameFood2"; effect_tameFood2.m_cooldown = 1.49f; effect_tameFood3 = Object.Instantiate<StatusEffect>(effect_tameFood1, Root.transform); ((Object)effect_tameFood3).name = "SE_TameFood3"; effect_tameFood3.m_cooldown = 2f; DBG.blogDebug("In Effect speed tame"); ((Object)effect_speed_tame).name = "SE_SpeedTame"; ((StatusEffect)effect_speed_tame).m_ttl = 600f; effect_speed_tame.ZDO_key = "SE_SpeedTame"; DBG.blogDebug("In Effect speed tame icon"); Object[] array = Assets.LoadAssetWithSubAssets(assetPath + "SpeedTamePotionIcon.png"); DBG.blogDebug("In Effect speed tame sprite"); ref Sprite icon = ref ((StatusEffect)effect_speed_tame).m_icon; Object obj = array[1]; icon = (Sprite)(object)((obj is Sprite) ? obj : null); ((StatusEffect)effect_speed_tame).m_name = "$at_effect_speed_tame"; DBG.blogDebug("finsihed speed tame"); } } internal class DBG { public static void blogInfo(object o) { TamingTools.logger.LogInfo(o); } public static void blogWarning(object o) { TamingTools.logger.LogWarning(o); } public static void blogDebug(object o) { if (TamingTools.debugout.Value) { TamingTools.logger.LogWarning(o); } } public static void tryblogDebug(object o, object o_backup) { try { if (TamingTools.debugout.Value) { TamingTools.logger.LogWarning(o); } } catch { TamingTools.logger.LogWarning(o_backup); } } } [BepInPlugin("meldurson.TamingTools", "TamingTools", "0.0.1")] public class TamingTools : BaseUnityPlugin { [Serializable] public class TameConfig : ICloneable { public string PrefabName { get; set; } = ""; public bool commandable { get; set; } = true; public float tamingTime { get; set; } = 1800f; public float fedDuration { get; set; } = 600f; public float consumeRange { get; set; } = 2f; public float consumeSearchInterval { get; set; } = 10f; public float consumeSearchRange { get; set; } = 10f; public string consumeItems { get; set; } = "RawMeat"; public bool changeGroup { get; set; } = false; public bool procretion { get; set; } = true; public bool procretionOverwrite { get; set; } = false; public int maxCreatures { get; set; } = 5; public float pregnancyChance { get; set; } = 0.33f; public float pregnancyDuration { get; set; } = 60f; public float growTime { get; set; } = 3000f; public float size { get; set; } = 1f; public float followDistMulti { get; set; } = 1f; public string group { get; set; } = ""; public string egg { get; set; } = ""; public string offspringName { get; set; } = ""; public string requiredWorldKeys { get; set; } = ""; public string trade { get; set; } = ""; public bool removeTameable { get; set; } = false; public object Clone() { return MemberwiseClone(); } } [Serializable] public class specificMates : ICloneable { public string prefabName { get; set; } = ""; public List<chanceOffspring> possibleOffspring { get; set; } = new List<chanceOffspring>(); public object Clone() { return MemberwiseClone(); } } [Serializable] public class chanceOffspring : ICloneable { public GameObject offspring { get; set; } = null; public float chance { get; set; } = 100f; public object Clone() { return MemberwiseClone(); } } public const string versionNumber = "0.0.1"; public const string versionMinimum = "0.0.1"; public const string modName = "TamingTools"; public const string GUID = "meldurson.TamingTools"; public static ManualLogSource logger; public static string assetPath = "Assets/MeldursonAssets/"; public static string t1foodPrefabName = "TT_T1Food"; public static string t2foodPrefabName = "TT_T2Food"; public static string t3foodPrefabName = "TT_T3Food"; public static Dictionary<string, TameConfig> customTamesList = new Dictionary<string, TameConfig>(); public static string[] fastTameFoods = new string[3] { t1foodPrefabName, t2foodPrefabName, t3foodPrefabName }; public static GameObject Root; public static PrefabManager prefabManager; public static CfgPackage CfgPackage; public static bool ServerConfigReceived = false; public static bool localizeLoaded = false; public static Harmony harmony = new Harmony("meldurson.TamingTools"); public static ConfigEntry<bool> debugout; public static ConfigEntry<bool> useTamingFoods; public static ConfigEntry<string> T1Food_Recipe; public static ConfigEntry<string> T1Food_Station; public static ConfigEntry<string> T2Food_Recipe; public static ConfigEntry<string> T2Food_Station; public static ConfigEntry<string> T3Food_Recipe; public static ConfigEntry<string> T3Food_Station; public static ConfigEntry<bool> useTamingMead; public static ConfigEntry<string> TamingMead_Recipe; public static ConfigEntry<string> TamingMead_Station; public static ConfigSync configSync = new ConfigSync("meldurson.TamingTools") { DisplayName = "TamingTools", CurrentVersion = "0.0.1", MinimumRequiredVersion = "0.0.1" }; private void Awake() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Expected O, but got Unknown //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Expected O, but got Unknown //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Expected O, but got Unknown //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Expected O, but got Unknown //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Expected O, but got Unknown //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Expected O, but got Unknown //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Expected O, but got Unknown //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Expected O, but got Unknown //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Expected O, but got Unknown logger = ((BaseUnityPlugin)this).Logger; debugout = config("1:General", "Debug Output", value: false, new ConfigDescription("Determines if debug is output to bepinex log", (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting: false); useTamingMead = config("1:General", "useTamingMead", value: true, new ConfigDescription("Use a taming equipment that helps with calming or seeing more stats of a creature", (AcceptableValueBase)null, Array.Empty<object>())); useTamingFoods = config("1:General", "useTamingFoods", value: true, new ConfigDescription("Use taming foods that can be used to speed up taming if fed to creatures", (AcceptableValueBase)null, Array.Empty<object>())); T1Food_Recipe = config("5: Recipes", "T1Food Recipe", "MeadTasty:1,MushroomYellow:3,LeatherScraps:1", new ConfigDescription("What is the recipe for crafting the Basic Food, separate amount with : and different items with ,", (AcceptableValueBase)null, Array.Empty<object>())); T1Food_Station = config("5: Recipes", "T1Food Station", "piece_cauldron:1", new ConfigDescription("What is the required Crafting Station and Level, separated by a : such as piece_workbench:3 would be lvl 3 Workbench (vanilla stations are: piece_workbench, forge, piece_cauldron, piece_stonecutter, piece_artisanstation, blackforge, piece_magetable, piece_MeadCauldron, piece_preptable", (AcceptableValueBase)null, Array.Empty<object>())); T2Food_Recipe = config("5: Recipes", "T2Food Recipe", "MeadHealthMedium:6,BarleyFlour:10,DragonTear:1", new ConfigDescription("What is the recipe for crafting the Superior Food, separate amount with : and different items with ,", (AcceptableValueBase)null, Array.Empty<object>())); T2Food_Station = config("5: Recipes", "T2Food Station", "piece_preptable:1", new ConfigDescription("What is the required Crafting Station and Level, separated by a : such as piece_workbench:3 would be lvl 3 Workbench (vanilla stations are: piece_workbench, forge, piece_cauldron, piece_stonecutter, piece_artisanstation, blackforge, piece_magetable, piece_MeadCauldron, piece_preptable", (AcceptableValueBase)null, Array.Empty<object>())); T3Food_Recipe = config("5: Recipes", "T3Food Recipe", "MeadEitrMinor:4,MeadHealthMajor:2,Fish9:1,MushroomMagecap:5", new ConfigDescription("What is the recipe for crafting the Excellent Food, separate amount with : and different items with ,", (AcceptableValueBase)null, Array.Empty<object>())); T3Food_Station = config("5: Recipes", "T3Food Station", "piece_cauldron:5", new ConfigDescription("What is the required Crafting Station and Level, separated by a : such as piece_workbench:3 would be lvl 3 Workbench (vanilla stations are: piece_workbench, forge, piece_cauldron, piece_stonecutter, piece_artisanstation, blackforge, piece_magetable, piece_MeadCauldron, piece_preptable", (AcceptableValueBase)null, Array.Empty<object>())); TamingMead_Recipe = config("5: Recipes", "TamingMead Recipe", "TrophyWolf:3,BarleyFlour:5,RawMeat:5,Honey:10", new ConfigDescription("What is the recipe for crafting the Taming Mead, separate amount with : and different items with ,", (AcceptableValueBase)null, Array.Empty<object>())); TamingMead_Station = config("5: Recipes", "TamingMead Station", "piece_MeadCauldron:1", new ConfigDescription("What is the required Crafting Station and Level, separated by a : such as piece_workbench:3 would be lvl 3 Workbench (vanilla stations are: piece_workbench, forge, piece_cauldron, piece_stonecutter, piece_artisanstation, blackforge, piece_magetable, piece_MeadCauldron, piece_preptable", (AcceptableValueBase)null, Array.Empty<object>())); ((BaseUnityPlugin)this).Config.Save(); Root = new GameObject("TamingTools Root"); prefabManager = Root.AddComponent<PrefabManager>(); Object.DontDestroyOnLoad((Object)(object)Root); PerformPatches(); } public void PerformPatches() { harmony.PatchAll(typeof(TamingTools)); harmony.PatchAll(typeof(Enchants)); IEnumerable<MethodBase> patchedMethods = harmony.GetPatchedMethods(); DBG.blogDebug("Patched Methods="); foreach (MethodBase item in patchedMethods) { DBG.blogDebug(item.ReflectedType?.ToString() + ":" + item.Name + " is patched"); } } private ConfigEntry<T> config<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); SyncedConfigEntry<T> syncedConfigEntry = configSync.AddConfigEntry<T>(val2); syncedConfigEntry.SynchronizedConfig = synchronizedSetting; return val2; } private ConfigEntry<T> config<T>(string group, string name, T value, string description, bool synchronizedSetting = true) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting); } [HarmonyPostfix] [HarmonyPatch(typeof(ConfigSync), "HandleConfigSyncRPC")] private static void Postfix_HandleConfigSyncRPC() { DBG.blogDebug("Has Server HandleConfigSyncRPC"); if (!PrefabManager.hasInitItems) { DBG.blogDebug("Has not done init item reg"); } PrefabManager.ItemReg(); DBG.blogDebug("Item Reg completed"); } [HarmonyPriority(5)] [HarmonyPatch(typeof(ObjectDB), "Awake")] [HarmonyPostfix] private static void Postfix_ODB_Awake(ObjectDB __instance) { //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) DBG.blogDebug("In main Load"); if (!localizeLoaded) { Localizer.Load(); localizeLoaded = true; } Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name != "main") { DBG.blogDebug("Not Main Scene"); return; } if (!Object.op_Implicit((Object)(object)ZNet.instance)) { DBG.blogDebug("No instance of ZNet"); return; } if (!PrefabManager.hasInitItems) { PrefabManager.zns = ((Component)__instance).gameObject.GetComponent<ZNetScene>(); PrefabManager.InitItemReg(); } if (!ZNet.instance.IsServer()) { DBG.blogDebug("ZNet not server"); } else { PrefabManager.ItemReg(); } } } public static class Utils { public static AssetBundle LoadAssetBundle(string bundleName, Assembly assembly) { string text = null; try { text = assembly.GetManifestResourceNames().Single((string str) => str.EndsWith(bundleName)); } catch { } if (text == null) { DBG.blogWarning("Could not find asset by the name " + bundleName); return null; } Stream manifestResourceStream = assembly.GetManifestResourceStream(text); AssetBundle result; using (manifestResourceStream) { result = AssetBundle.LoadFromStream(manifestResourceStream); } return result; } public static T CopyBroComponent<T, TU>(this Component comp, TU other) where T : Component { Type baseType = ((object)comp).GetType().BaseType; IEnumerable<FieldInfo> fields = baseType.GetFields(); foreach (FieldInfo item in fields) { object value = item.GetValue(other); try { item.SetValue(comp, value); } catch { DBG.blogDebug("Failed bro copy for: " + item); } } return (T)(object)((comp is T) ? comp : null); } public static string GetPrefabName(string name) { int num = name.IndexOfAny(new char[2] { '(', ' ' }); if (num != -1) { return name.Remove(num); } return name; } public static bool addToZNS(GameObject go) { ZNetScene instance = ZNetScene.instance; if (!Object.op_Implicit((Object)(object)instance)) { return false; } int stableHashCode = StringExtensionMethods.GetStableHashCode(((Object)go).name); if (instance.m_namedPrefabs.ContainsKey(stableHashCode)) { DBG.blogDebug("ZNS already has " + ((Object)go).name); return false; } if (Object.op_Implicit((Object)(object)go.GetComponent<ZNetView>())) { instance.m_prefabs.Add(go); } else { instance.m_nonNetViewPrefabs.Add(go); } instance.m_namedPrefabs.Add(stableHashCode, go); DBG.blogDebug("Added " + ((Object)go).name + " to zns"); return true; } public static bool addItemToODB(GameObject go, ObjectDB odb) { int stableHashCode = StringExtensionMethods.GetStableHashCode(((Object)go).name); if ((Object)(object)go.GetComponent<ItemDrop>() == (Object)null) { DBG.blogDebug("Does not have ItemDrop: " + ((Object)go).name); return false; } if (odb.m_itemByHash.ContainsKey(stableHashCode)) { DBG.blogDebug("Already added item " + ((Object)go).name); return false; } addToZNS(go); odb.m_items.Add(go); odb.m_itemByHash.Add(stableHashCode, go); return true; } public static void cloneProperties<TOne, TTwo>(TOne copyTo, TTwo CopyFrom) where TOne : Component where TTwo : Component { FieldInfo[] fields = ((object)CopyFrom).GetType().GetFields(); foreach (FieldInfo fieldInfo in fields) { try { if ((fieldInfo.GetValue(copyTo) != null) & (fieldInfo.GetValue(CopyFrom) != fieldInfo.GetValue(copyTo))) { fieldInfo.SetValue(copyTo, fieldInfo.GetValue(CopyFrom)); DBG.blogDebug("From " + ((object)CopyFrom).GetType()?.ToString() + fieldInfo.Name + " set to " + fieldInfo.GetValue(copyTo)); } } catch { DBG.blogDebug(((object)copyTo).GetType()?.ToString() + " does not have " + fieldInfo.Name); } } } public static Color colFromHex(string hexStr) { //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) try { DBG.blogDebug("in colfromhex"); int num = int.Parse(hexStr.Replace("#", ""), NumberStyles.HexNumber); float num2 = num & 0xFF; float num3 = (num >> 8) & 0xFF; float num4 = (num >> 16) & 0xFF; DBG.blogDebug("r,g,b=" + num4 + "," + num3 + "," + num2); Color result = default(Color); ((Color)(ref result))..ctor(num4 / 255f, num3 / 255f, num2 / 255f); return result; } catch { DBG.blogWarning("Not a valid hex color code"); return Color.white; } } public static Texture2D changeEggTex(Texture2D oldTex, Color col, bool invertShadow) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: 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) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) DBG.blogDebug("in change color"); Texture2D val = Object.Instantiate<Texture2D>(oldTex); Color[] array = (Color[])(object)new Color[3] { col, col, col }; int num = Mathf.Min(3, ((Texture)val).mipmapCount); Color val3 = default(Color); for (int i = 0; i < num; i++) { Color[] pixels = val.GetPixels(i); DBG.blogDebug("cols.length=" + pixels.Length); for (int j = 0; j < pixels.Length; j++) { Color val2 = pixels[j]; if (invertShadow) { ((Color)(ref val3))..ctor(1f - val2.r, 1f - val2.g, 1f - val2.b); Color val4 = val3 - new Color(Mathf.Min(val3.r, 0.6f), Mathf.Min(val3.g, 0.6f), Mathf.Min(val3.b, 0.6f)); Color val5 = pixels[j] * col; pixels[j] = val5 - val5 * val4 * 1f; pixels[j] = changeHue(val5, 0.5f) * val3 * 1.3f + pixels[j]; } else { Color val6 = Color.grey * val2; val6 -= new Color(Mathf.Min(val6.r, 0.25f), Mathf.Min(val6.g, 0.25f), Mathf.Min(val6.b, 0.25f)); pixels[j] *= col; } pixels[j].a = val2.a; } val.SetPixels(pixels, i); } val.Apply(false); return val; } public static Color changeHue(Color col, float hue) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0021: 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_0026: Unknown result type (might be due to invalid IL or missing references) float num2 = default(float); float num3 = default(float); float num = default(float); Color.RGBToHSV(col, ref num, ref num2, ref num3); num = (num + hue) % 1f; return Color.HSVToRGB(num, num2, num3); } public static T GetCopyOf<T>(this Component comp, T other) where T : Component { Type type = ((object)comp).GetType(); if (type != ((object)other).GetType()) { return default(T); } List<Type> list = new List<Type>(); Type baseType = type.BaseType; while (baseType != null && !(baseType == typeof(MonoBehaviour))) { list.Add(baseType); baseType = baseType.BaseType; } IEnumerable<PropertyInfo> enumerable = type.GetProperties(BindingFlags.Public); foreach (Type item in list) { enumerable = enumerable.Concat(item.GetProperties(BindingFlags.Public)); } enumerable = from property in enumerable where !(type == typeof(Rigidbody)) || !(property.Name == "inertiaTensor") where !property.CustomAttributes.Any((CustomAttributeData attribute) => attribute.AttributeType == typeof(ObsoleteAttribute)) select property; foreach (PropertyInfo pinfo in enumerable) { if (pinfo.CanWrite && !enumerable.Any((PropertyInfo e) => e.Name == $"shared{char.ToUpper(pinfo.Name[0])}{pinfo.Name.Substring(1)}")) { try { pinfo.SetValue(comp, pinfo.GetValue(other, null), null); } catch { } } } IEnumerable<FieldInfo> enumerable2 = type.GetFields(BindingFlags.Public); foreach (FieldInfo finfo in enumerable2) { foreach (Type item2 in list) { if (!enumerable2.Any((FieldInfo e) => e.Name == $"shared{char.ToUpper(finfo.Name[0])}{finfo.Name.Substring(1)}")) { enumerable2 = enumerable2.Concat(item2.GetFields(BindingFlags.Public)); } } } foreach (FieldInfo item3 in enumerable2) { item3.SetValue(comp, item3.GetValue(other)); } enumerable2 = enumerable2.Where((FieldInfo field) => field.CustomAttributes.Any((CustomAttributeData attribute) => attribute.AttributeType == typeof(ObsoleteAttribute))); foreach (FieldInfo item4 in enumerable2) { item4.SetValue(comp, item4.GetValue(other)); } return (T)(object)((comp is T) ? comp : null); } public static T AddComponent<T>(this GameObject go, T toAdd) where T : Component { return go.AddComponent(((object)toAdd).GetType()).GetCopyOf(toAdd); } public static T CopyIntoParent<T>(T go, T parent) where T : Component { //IL_0055: Unknown result type (might be due to invalid IL or missing references) T val = Object.Instantiate<T>(go); ((Object)(object)val).name = ((Object)(object)go).name; ((Component)val).transform.parent = ((Component)parent).transform; ((Component)val).transform.localPosition = new Vector3(0f, 0f, 0f); return val; } public static bool FixMockMesh(MeshFilter meshFilter, ZNetScene zns) { string text = ((Object)meshFilter.mesh).name.Split(new char[1] { ' ' })[0]; DBG.blogDebug("fullname=" + text); string[] array = text.Split(new char[1] { '_' }); if (array[0] != "JVLmock") { DBG.blogDebug("Not Mock, Skipping"); return false; } if (array.Length == 1) { DBG.blogDebug("Not long enough name, Skipping"); return false; } GameObject val = zns.GetPrefab(array[1]); if ((Object)(object)val == (Object)null) { DBG.blogDebug("Could not find prefab with name:" + array[1]); return false; } string[] array2 = text.Split(new string[1] { "__" }, StringSplitOptions.None); for (int i = 1; i < array2.Length; i++) { Transform val2 = val.transform.Find(array2[i]); if ((Object)(object)val2 == (Object)null) { DBG.blogDebug("Child is null:" + array2[i]); return false; } DBG.blogDebug("Child is valid:" + array2[i]); val = ((Component)val2).gameObject; } MeshFilter component = val.GetComponent<MeshFilter>(); if ((Object)(object)component == (Object)null) { DBG.blogDebug("No Mesh filter in object:" + ((Object)val).name); return false; } Mesh mesh = component.mesh; if ((Object)(object)mesh == (Object)null) { DBG.blogDebug("No Mesh in MeshFilter:" + ((Object)val).name); return false; } meshFilter.mesh = mesh; DBG.blogDebug("Fixed mesh on " + ((Object)meshFilter).name); return true; } public static bool FixMock(GameObject go, bool justMesh = true) { ZNetScene instance = ZNetScene.instance; bool flag = false; MeshFilter[] components = go.GetComponents<MeshFilter>(); foreach (MeshFilter meshFilter in components) { flag = flag || FixMockMesh(meshFilter, instance); } MeshFilter[] componentsInChildren = go.GetComponentsInChildren<MeshFilter>(); foreach (MeshFilter meshFilter2 in componentsInChildren) { flag = flag || FixMockMesh(meshFilter2, instance); } if (justMesh) { return flag; } return flag; } } } namespace TamingTools.RPC { [Serializable] public class CfgPackage { [HarmonyPatch(typeof(Game), "Start")] public static class GameStartPatch { private static void Prefix() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown ZRoutedRpc.instance.Register<ZPackage>("TT_RecieveConfigs", (Action<long, ZPackage>)RPC_RecieveConfigs); ZRoutedRpc.instance.Register<ZPackage>("TT_Configs", (Action<long, ZPackage>)RPC_TT_Configs); DBG.blogDebug("RPCs Registered"); ZPackage val = new ZPackage(); val.Write("0.0.1"); version = val; } } public static ZPackage version; public static void RPC_RecieveConfigs(long sender, ZPackage pkg) { DBG.blogInfo("Received Configs from Server"); if (sender == ZRoutedRpc.instance.GetServerPeerID() && pkg != null && pkg.Size() > 0) { DBG.blogDebug("Has Valid Server and Package"); DBG.blogDebug("Unpacked"); PrefabManager.ItemReg(); } } public static void RPC_TT_Configs(long sender, ZPackage pkg) { string text = pkg.ReadString(); DBG.blogInfo("Local version:0.0.1, remote: " + text); ZNetPeer peer = ZNet.instance.GetPeer(sender); if (ZNet.instance.IsServer()) { if (peer == null) { DBG.blogInfo("Peer is Null"); } else { DBG.blogInfo("Peer is not Null"); } } } public static void RPC_TT_Version(ZRpc rpc, ZPackage pkg) { string text = pkg.ReadString(); DBG.blogInfo("Local version:0.0.1, remote: " + text); if (text != "0.0.1") { DBG.blogWarning("Let Me Tame You Versions do not match"); if (ZNet.instance.IsServer()) { DBG.blogWarning("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting..."); rpc.Invoke("Error", new object[1] { 3 }); } } } [HarmonyPatch(typeof(ZNet), "OnNewConnection")] [HarmonyPostfix] private static void SyncVersionPatch(ZNetPeer peer, ref ZNet __instance) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown DBG.blogDebug("Registering version RPC handler"); peer.m_rpc.Register<ZPackage>("TT_Version", (Action<ZRpc, ZPackage>)RPC_TT_Version); DBG.blogDebug("Invoking version check"); if (version == null) { ZPackage val = new ZPackage(); val.Write("0.0.1"); version = val; } peer.m_rpc.Invoke("TT_Version", new object[1] { version }); ZRoutedRpc.instance.InvokeRoutedRPC(peer.m_uid, "TT_Version", new object[1] { version }); } [HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")] [HarmonyPostfix] private static void SyncConfigsPatch_New(ZRpc rpc, ref ZNet __instance) { DBG.blogDebug("Registering version RPC handler"); ZRoutedRpc.instance.InvokeRoutedRPC(__instance.GetPeer(rpc).m_uid, "TT_Configs", new object[1] { version }); } } } namespace Microsoft.CodeAnalysis { [<05c2fb3e-b1f5-4d55-b4f9-06940aed948b>Embedded] [CompilerGenerated] internal sealed class <05c2fb3e-b1f5-4d55-b4f9-06940aed948b>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [<05c2fb3e-b1f5-4d55-b4f9-06940aed948b>Embedded] [CompilerGenerated] internal sealed class IsReadOnlyAttribute : Attribute { } [CompilerGenerated] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] [<05c2fb3e-b1f5-4d55-b4f9-06940aed948b>Embedded] internal sealed class <50695eb0-1575-4a71-9582-f9a8395ba049>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <50695eb0-1575-4a71-9582-f9a8395ba049>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <50695eb0-1575-4a71-9582-f9a8395ba049>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [CompilerGenerated] [<05c2fb3e-b1f5-4d55-b4f9-06940aed948b>Embedded] internal sealed class <4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContextAttribute : Attribute { public readonly byte Flag; public <4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [<05c2fb3e-b1f5-4d55-b4f9-06940aed948b>Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class <a6eb0cb0-d2d8-45fe-8db2-8292719103e8>RefSafetyRulesAttribute : Attribute { public readonly int Version; public <a6eb0cb0-d2d8-45fe-8db2-8292719103e8>RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace YamlDotNet { [<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(1)] [<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] internal sealed class <42fce5d2-ef4d-4e40-8dac-e68996dcdae3>CultureInfoAdapter : CultureInfo { private readonly IFormatProvider provider; public <42fce5d2-ef4d-4e40-8dac-e68996dcdae3>CultureInfoAdapter(CultureInfo baseCulture, IFormatProvider provider) : base(baseCulture.Name) { this.provider = provider; } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public override object GetFormat(Type formatType) { return provider.GetFormat(formatType); } } [<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] [<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(1)] internal static class Polyfills { [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool Contains(this string source, char c) { return source.IndexOf(c) != -1; } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool EndsWith(this string source, char c) { if (source.Length > 0) { return source[source.Length - 1] == c; } return false; } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool StartsWith(this string source, char c) { if (source.Length > 0) { return source[0] == c; } return false; } } internal static class <409c1ef6-2c5d-48e3-a702-5dff2392221f>PropertyInfoExtensions { [<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(1)] [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public static object ReadValue(this PropertyInfo property, object target) { return property.GetValue(target, null); } } [<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] [<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(1)] internal static class <837dff35-c361-4d26-a79c-e914d6d4f5d5>ReflectionExtensions { private static readonly Func<PropertyInfo, bool> IsInstance = (PropertyInfo property) => !(property.GetMethod ?? property.SetMethod).IsStatic; private static readonly Func<PropertyInfo, bool> IsInstancePublic = (PropertyInfo property) => IsInstance(property) && (property.GetMethod ?? property.SetMethod).IsPublic; [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public static Type BaseType(this Type type) { return type.GetTypeInfo().BaseType; } public static bool IsValueType(this Type type) { return type.GetTypeInfo().IsValueType; } public static bool IsGenericType(this Type type) { return type.GetTypeInfo().IsGenericType; } public static bool IsGenericTypeDefinition(this Type type) { return type.GetTypeInfo().IsGenericTypeDefinition; } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public static Type GetImplementationOfOpenGenericInterface(this Type type, Type openGenericType) { if (!openGenericType.IsGenericType || !openGenericType.IsInterface) { throw new ArgumentException("The type must be a generic type definition and an interface", "openGenericType"); } if (IsGenericDefinitionOfType(type, openGenericType)) { return type; } return type.FindInterfaces([<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(0)] (Type t, object context) => IsGenericDefinitionOfType(t, context), openGenericType).FirstOrDefault(); static bool IsGenericDefinitionOfType(Type t, [<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] object context) { if (t.IsGenericType) { return t.GetGenericTypeDefinition() == (Type)context; } return false; } } public static bool IsInterface(this Type type) { return type.GetTypeInfo().IsInterface; } public static bool IsEnum(this Type type) { return type.GetTypeInfo().IsEnum; } public static bool IsRequired(this MemberInfo member) { return member.GetCustomAttributes(inherit: true).Any([<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(0)] (object x) => x.GetType().FullName == "System.Runtime.CompilerServices.RequiredMemberAttribute"); } public static bool HasDefaultConstructor(this Type type, bool allowPrivateConstructors) { BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Public; if (allowPrivateConstructors) { bindingFlags |= BindingFlags.NonPublic; } if (!type.IsValueType) { return type.GetConstructor(bindingFlags, null, Type.EmptyTypes, null) != null; } return true; } public static bool IsAssignableFrom(this Type type, Type source) { return type.IsAssignableFrom(source.GetTypeInfo()); } public static bool IsAssignableFrom(this Type type, TypeInfo source) { return type.GetTypeInfo().IsAssignableFrom(source); } public static TypeCode GetTypeCode(this Type type) { if (IsEnum(type)) { type = Enum.GetUnderlyingType(type); } if (type == typeof(bool)) { return TypeCode.Boolean; } if (type == typeof(char)) { return TypeCode.Char; } if (type == typeof(sbyte)) { return TypeCode.SByte; } if (type == typeof(byte)) { return TypeCode.Byte; } if (type == typeof(short)) { return TypeCode.Int16; } if (type == typeof(ushort)) { return TypeCode.UInt16; } if (type == typeof(int)) { return TypeCode.Int32; } if (type == typeof(uint)) { return TypeCode.UInt32; } if (type == typeof(long)) { return TypeCode.Int64; } if (type == typeof(ulong)) { return TypeCode.UInt64; } if (type == typeof(float)) { return TypeCode.Single; } if (type == typeof(double)) { return TypeCode.Double; } if (type == typeof(decimal)) { return TypeCode.Decimal; } if (type == typeof(DateTime)) { return TypeCode.DateTime; } if (type == typeof(string)) { return TypeCode.String; } return TypeCode.Object; } public static bool IsDbNull(this object value) { return value?.GetType()?.FullName == "System.DBNull"; } public static Type[] GetGenericArguments(this Type type) { return type.GetTypeInfo().GenericTypeArguments; } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public static PropertyInfo GetPublicProperty(this Type type, string name) { return type.GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public).FirstOrDefault([<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(0)] (PropertyInfo p) => p.Name == name); } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public static FieldInfo GetPublicStaticField(this Type type, string name) { return type.GetRuntimeField(name); } public static IEnumerable<PropertyInfo> GetProperties(this Type type, bool includeNonPublic) { Func<PropertyInfo, bool> predicate = (includeNonPublic ? IsInstance : IsInstancePublic); if (!IsInterface(type)) { return type.GetRuntimeProperties().Where(predicate); } return new Type[1] { type }.Concat(type.GetInterfaces()).SelectMany([<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(0)] (Type i) => i.GetRuntimeProperties().Where(predicate)); } public static IEnumerable<PropertyInfo> GetPublicProperties(this Type type) { return GetProperties(type, includeNonPublic: false); } public static IEnumerable<FieldInfo> GetPublicFields(this Type type) { return from f in type.GetRuntimeFields() where !f.IsStatic && f.IsPublic select f; } public static IEnumerable<MethodInfo> GetPublicStaticMethods(this Type type) { return from m in type.GetRuntimeMethods() where m.IsPublic && m.IsStatic select m; } public static MethodInfo GetPrivateStaticMethod(this Type type, string name) { return type.GetRuntimeMethods().FirstOrDefault([<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(0)] (MethodInfo m) => !m.IsPublic && m.IsStatic && m.Name.Equals(name)) ?? throw new MissingMethodException("Expected to find a method named '" + name + "' in '" + type.FullName + "'."); } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public static MethodInfo GetPublicStaticMethod(this Type type, string name, params Type[] parameterTypes) { return type.GetRuntimeMethods().FirstOrDefault([<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(0)] (MethodInfo m) => { if (m.IsPublic && m.IsStatic && m.Name.Equals(name)) { ParameterInfo[] parameters = m.GetParameters(); if (parameters.Length == parameterTypes.Length) { return parameters.Zip(parameterTypes, [<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(0)] (ParameterInfo pi, Type pt) => pi.ParameterType == pt).All((bool r) => r); } return false; } return false; }); } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public static MethodInfo GetPublicInstanceMethod(this Type type, string name) { return type.GetRuntimeMethods().FirstOrDefault([<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(0)] (MethodInfo m) => m.IsPublic && !m.IsStatic && m.Name.Equals(name)); } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public static MethodInfo GetGetMethod(this PropertyInfo property, bool nonPublic) { MethodInfo methodInfo = property.GetMethod; if (!nonPublic && !methodInfo.IsPublic) { methodInfo = null; } return methodInfo; } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public static MethodInfo GetSetMethod(this PropertyInfo property) { return property.SetMethod; } public static IEnumerable<Type> GetInterfaces(this Type type) { return type.GetTypeInfo().ImplementedInterfaces; } public static bool IsInstanceOf(this Type type, object o) { if (!(o.GetType() == type)) { return o.GetType().GetTypeInfo().IsSubclassOf(type); } return true; } public static Attribute[] GetAllCustomAttributes<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] TAttribute>(this PropertyInfo member) { return Attribute.GetCustomAttributes(member, typeof(TAttribute), inherit: true); } public static bool AcceptsNull(this MemberInfo member) { object[] customAttributes = member.DeclaringType.GetCustomAttributes(inherit: true); object obj = customAttributes.FirstOrDefault([<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(0)] (object x) => x.GetType().FullName == "System.Runtime.CompilerServices.NullableContextAttribute"); int num = 0; if (obj != null) { Type type = obj.GetType(); PropertyInfo property = type.GetProperty("Flag"); num = (byte)property.GetValue(obj); } object[] customAttributes2 = member.GetCustomAttributes(inherit: true); object obj2 = customAttributes2.FirstOrDefault([<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(0)] (object x) => x.GetType().FullName == "System.Runtime.CompilerServices.NullableAttribute"); PropertyInfo propertyInfo = (obj2?.GetType())?.GetProperty("NullableFlags"); byte[] source = (byte[])propertyInfo.GetValue(obj2); return source.Any((byte x) => x == 2) || num == 2; } } internal static class <411c97f1-e5ea-448a-b4ac-d107196038ac>StandardRegexOptions { public const RegexOptions Compiled = RegexOptions.Compiled; } } namespace YamlDotNet.Serialization { [<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(1)] [<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] internal abstract class <25991687-7b3c-412a-b54b-d6e0a23d8298>BuilderSkeleton<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TBuilder> where TBuilder : <25991687-7b3c-412a-b54b-d6e0a23d8298>BuilderSkeleton<TBuilder> { internal <218821ec-88f6-4692-8f49-ed3ebea2712e>INamingConvention namingConvention = <30e63b9e-a982-41a6-b0ce-a9f90f53a05f>NullNamingConvention.Instance; internal <218821ec-88f6-4692-8f49-ed3ebea2712e>INamingConvention enumNamingConvention = <30e63b9e-a982-41a6-b0ce-a9f90f53a05f>NullNamingConvention.Instance; internal <8cdc06d7-cd4d-416a-a39c-cc81bcf75c66>ITypeResolver typeResolver; internal readonly <85fb2a34-c493-418c-9b45-1019521b1163>YamlAttributeOverrides overrides; internal readonly <e6c6a0d4-35c5-4f51-907d-ef63f4a4def5>LazyComponentRegistrationList<<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing, <015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter> typeConverterFactories; internal readonly <e6c6a0d4-35c5-4f51-907d-ef63f4a4def5>LazyComponentRegistrationList<<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector, <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector> typeInspectorFactories; internal bool ignoreFields; internal bool includeNonPublicProperties; internal Settings settings; internal <2c4ee249-2d13-4aa3-9737-4c86eec88f67>YamlFormatter yamlFormatter = <2c4ee249-2d13-4aa3-9737-4c86eec88f67>YamlFormatter.Default; protected abstract TBuilder Self { get; } internal <25991687-7b3c-412a-b54b-d6e0a23d8298>BuilderSkeleton(<8cdc06d7-cd4d-416a-a39c-cc81bcf75c66>ITypeResolver typeResolver) { overrides = new <85fb2a34-c493-418c-9b45-1019521b1163>YamlAttributeOverrides(); typeConverterFactories = new <e6c6a0d4-35c5-4f51-907d-ef63f4a4def5>LazyComponentRegistrationList<<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing, <015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter> { { typeof(<809a1958-7a61-4ed6-ab2f-55af1aa3d906>GuidConverter), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <809a1958-7a61-4ed6-ab2f-55af1aa3d906>GuidConverter(jsonCompatible: false) }, { typeof(<aaf86a10-5311-4a8e-9ca7-ddd36e849fb9>SystemTypeConverter), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <aaf86a10-5311-4a8e-9ca7-ddd36e849fb9>SystemTypeConverter() } }; typeInspectorFactories = new <e6c6a0d4-35c5-4f51-907d-ef63f4a4def5>LazyComponentRegistrationList<<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector, <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector>(); this.typeResolver = typeResolver ?? throw new ArgumentNullException("typeResolver"); settings = new Settings(); } public TBuilder IgnoreFields() { ignoreFields = true; return Self; } public TBuilder IncludeNonPublicProperties() { includeNonPublicProperties = true; return Self; } public TBuilder EnablePrivateConstructors() { settings.AllowPrivateConstructors = true; return Self; } public TBuilder WithNamingConvention(<218821ec-88f6-4692-8f49-ed3ebea2712e>INamingConvention namingConvention) { this.namingConvention = namingConvention ?? throw new ArgumentNullException("namingConvention"); return Self; } public TBuilder WithEnumNamingConvention(<218821ec-88f6-4692-8f49-ed3ebea2712e>INamingConvention enumNamingConvention) { this.enumNamingConvention = enumNamingConvention; return Self; } public TBuilder WithTypeResolver(<8cdc06d7-cd4d-416a-a39c-cc81bcf75c66>ITypeResolver typeResolver) { this.typeResolver = typeResolver ?? throw new ArgumentNullException("typeResolver"); return Self; } public abstract TBuilder WithTagMapping(<fb5701dc-7312-4dc7-91f9-86539539cfb2>TagName tag, Type type); public TBuilder WithAttributeOverride<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] TClass>(Expression<Func<TClass, object>> propertyAccessor, Attribute attribute) { overrides.Add(propertyAccessor, attribute); return Self; } public TBuilder WithAttributeOverride(Type type, string member, Attribute attribute) { overrides.Add(type, member, attribute); return Self; } public TBuilder WithTypeConverter(<015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter typeConverter) { return WithTypeConverter(typeConverter, delegate(<40546893-04ba-4b2f-bf1c-157a7983f623>IRegistrationLocationSelectionSyntax<<015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter> w) { w.OnTop(); }); } public TBuilder WithTypeConverter(<015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter typeConverter, Action<<40546893-04ba-4b2f-bf1c-157a7983f623>IRegistrationLocationSelectionSyntax<<015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter>> where) { if (typeConverter == null) { throw new ArgumentNullException("typeConverter"); } if (where == null) { throw new ArgumentNullException("where"); } where(typeConverterFactories.CreateRegistrationLocationSelector(typeConverter.GetType(), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => typeConverter)); return Self; } public TBuilder WithTypeConverter<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TYamlTypeConverter>(<66417a64-dc4a-4a32-89d8-f2fe8a7d7ac7>WrapperFactory<<015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter, <015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter> typeConverterFactory, Action<<7e516d9c-028b-47f4-9887-542ac29c9e2a>ITrackingRegistrationLocationSelectionSyntax<<015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter>> where) where TYamlTypeConverter : <015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter { if (typeConverterFactory == null) { throw new ArgumentNullException("typeConverterFactory"); } if (where == null) { throw new ArgumentNullException("where"); } where(typeConverterFactories.CreateTrackingRegistrationLocationSelector(typeof(TYamlTypeConverter), (<015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter wrapped, <f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => typeConverterFactory(wrapped))); return Self; } public TBuilder WithoutTypeConverter<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TYamlTypeConverter>() where TYamlTypeConverter : <015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter { return WithoutTypeConverter(typeof(TYamlTypeConverter)); } public TBuilder WithoutTypeConverter(Type converterType) { if (converterType == null) { throw new ArgumentNullException("converterType"); } typeConverterFactories.Remove(converterType); return Self; } public TBuilder WithTypeInspector<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TTypeInspector>(Func<<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector, TTypeInspector> typeInspectorFactory) where TTypeInspector : <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector { return WithTypeInspector(typeInspectorFactory, delegate(<40546893-04ba-4b2f-bf1c-157a7983f623>IRegistrationLocationSelectionSyntax<<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector> w) { w.OnTop(); }); } public TBuilder WithTypeInspector<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TTypeInspector>(Func<<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector, TTypeInspector> typeInspectorFactory, Action<<40546893-04ba-4b2f-bf1c-157a7983f623>IRegistrationLocationSelectionSyntax<<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector>> where) where TTypeInspector : <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector { if (typeInspectorFactory == null) { throw new ArgumentNullException("typeInspectorFactory"); } if (where == null) { throw new ArgumentNullException("where"); } where(typeInspectorFactories.CreateRegistrationLocationSelector(typeof(TTypeInspector), (<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector inner) => typeInspectorFactory(inner))); return Self; } public TBuilder WithTypeInspector<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TTypeInspector>(<10e7fbd0-709c-43d4-8f78-926f9e7bc0c7>WrapperFactory<<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector, <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector, TTypeInspector> typeInspectorFactory, Action<<7e516d9c-028b-47f4-9887-542ac29c9e2a>ITrackingRegistrationLocationSelectionSyntax<<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector>> where) where TTypeInspector : <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector { if (typeInspectorFactory == null) { throw new ArgumentNullException("typeInspectorFactory"); } if (where == null) { throw new ArgumentNullException("where"); } where(typeInspectorFactories.CreateTrackingRegistrationLocationSelector(typeof(TTypeInspector), (<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector wrapped, <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector inner) => typeInspectorFactory(wrapped, inner))); return Self; } public TBuilder WithoutTypeInspector<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TTypeInspector>() where TTypeInspector : <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector { return WithoutTypeInspector(typeof(TTypeInspector)); } public TBuilder WithoutTypeInspector(Type inspectorType) { if (inspectorType == null) { throw new ArgumentNullException("inspectorType"); } typeInspectorFactories.Remove(inspectorType); return Self; } public TBuilder WithYamlFormatter(<2c4ee249-2d13-4aa3-9737-4c86eec88f67>YamlFormatter formatter) { yamlFormatter = formatter ?? throw new ArgumentNullException("formatter"); return Self; } protected IEnumerable<<015c6dc0-b58c-4c33-93e4-7e83db2082c6>IYamlTypeConverter> BuildTypeConverters() { return typeConverterFactories.BuildComponentList(); } } internal delegate TComponent <66417a64-dc4a-4a32-89d8-f2fe8a7d7ac7>WrapperFactory<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] TComponentBase, TComponent>(TComponentBase wrapped) where TComponent : TComponentBase; internal delegate TComponent <10e7fbd0-709c-43d4-8f78-926f9e7bc0c7>WrapperFactory<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] TArgument, [<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] TComponentBase, TComponent>(TComponentBase wrapped, TArgument argument) where TComponent : TComponentBase; [Flags] internal enum <d90fed3e-e02f-48d3-9de2-1d9b33f15769>DefaultValuesHandling { Preserve = 0, OmitNull = 1, OmitDefaults = 2, OmitEmptyCollections = 4 } [<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(1)] [<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] internal sealed class <da905783-e934-43a6-a0c3-eeed000f1549>Deserializer : <6bb2661e-9396-4da5-aeb8-c1201a976544>IDeserializer { private readonly <63a8773f-ae47-49dd-8c39-0296eaf7cd79>IValueDeserializer valueDeserializer; public <da905783-e934-43a6-a0c3-eeed000f1549>Deserializer() : this(new <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder().BuildValueDeserializer()) { } private <da905783-e934-43a6-a0c3-eeed000f1549>Deserializer(<63a8773f-ae47-49dd-8c39-0296eaf7cd79>IValueDeserializer valueDeserializer) { this.valueDeserializer = valueDeserializer ?? throw new ArgumentNullException("valueDeserializer"); } public static <da905783-e934-43a6-a0c3-eeed000f1549>Deserializer FromValueDeserializer(<63a8773f-ae47-49dd-8c39-0296eaf7cd79>IValueDeserializer valueDeserializer) { return new <da905783-e934-43a6-a0c3-eeed000f1549>Deserializer(valueDeserializer); } public T Deserialize<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] T>(string input) { using StringReader input2 = new StringReader(input); return Deserialize<T>(input2); } public T Deserialize<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] T>(TextReader input) { return Deserialize<T>(new <d4371f5c-5e45-4b3c-b949-438da3ad6ba5>Parser(input)); } public T Deserialize<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] T>(<1f8efb3f-b6b8-48e6-86ff-e4c6b182ca62>IParser parser) { return (T)Deserialize(parser, typeof(T)); } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public object Deserialize(string input) { return Deserialize<object>(input); } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public object Deserialize(TextReader input) { return Deserialize<object>(input); } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public object Deserialize(<1f8efb3f-b6b8-48e6-86ff-e4c6b182ca62>IParser parser) { return Deserialize<object>(parser); } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public object Deserialize(string input, Type type) { using StringReader input2 = new StringReader(input); return Deserialize(input2, type); } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public object Deserialize(TextReader input, Type type) { return Deserialize(new <d4371f5c-5e45-4b3c-b949-438da3ad6ba5>Parser(input), type); } [return: <50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] public object Deserialize(<1f8efb3f-b6b8-48e6-86ff-e4c6b182ca62>IParser parser, Type type) { if (parser == null) { throw new ArgumentNullException("parser"); } if (type == null) { throw new ArgumentNullException("type"); } <78824d44-d94a-4fb7-ae26-e026dd06d0f9>StreamStart @event; bool flag = parser.TryConsume<<78824d44-d94a-4fb7-ae26-e026dd06d0f9>StreamStart>(out @event); <eb6883aa-c049-41d0-8552-64328616633c>DocumentStart event2; bool flag2 = parser.TryConsume<<eb6883aa-c049-41d0-8552-64328616633c>DocumentStart>(out event2); object result = null; if (!parser.Accept<<7ea0e6af-60ef-4ac0-a61d-b669925591cd>DocumentEnd>(out var _) && !parser.Accept<<16dfd304-16ef-4003-b2e5-e59f3df7fbe6>StreamEnd>(out var _)) { using <188dcaa7-a0e7-43b3-b6bc-224771d00acf>SerializerState <188dcaa7-a0e7-43b3-b6bc-224771d00acf>SerializerState = new <188dcaa7-a0e7-43b3-b6bc-224771d00acf>SerializerState(); result = valueDeserializer.DeserializeValue(parser, type, <188dcaa7-a0e7-43b3-b6bc-224771d00acf>SerializerState, valueDeserializer); <188dcaa7-a0e7-43b3-b6bc-224771d00acf>SerializerState.OnDeserialization(); } if (flag2) { parser.Consume<<7ea0e6af-60ef-4ac0-a61d-b669925591cd>DocumentEnd>(); } if (flag) { parser.Consume<<16dfd304-16ef-4003-b2e5-e59f3df7fbe6>StreamEnd>(); } return result; } } [<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(1)] [<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(new byte[] { 0, 1 })] internal sealed class <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder : <25991687-7b3c-412a-b54b-d6e0a23d8298>BuilderSkeleton<<07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder> { private Lazy<<2cd1ea38-f6a5-4a6a-9585-ef23bb2232b8>IObjectFactory> objectFactory; private readonly <e6c6a0d4-35c5-4f51-907d-ef63f4a4def5>LazyComponentRegistrationList<<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing, <944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer> nodeDeserializerFactories; private readonly <e6c6a0d4-35c5-4f51-907d-ef63f4a4def5>LazyComponentRegistrationList<<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing, <9ba986bb-1912-4978-ba84-ec207338fd4a>INodeTypeResolver> nodeTypeResolverFactories; private readonly Dictionary<<fb5701dc-7312-4dc7-91f9-86539539cfb2>TagName, Type> tagMappings; private readonly Dictionary<Type, Type> typeMappings; private readonly ITypeConverter typeConverter; private bool ignoreUnmatched; private bool duplicateKeyChecking; private bool attemptUnknownTypeDeserialization; private bool enforceNullability; private bool caseInsensitivePropertyMatching; private bool enforceRequiredProperties; protected override <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder Self => this; public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder() : base((<8cdc06d7-cd4d-416a-a39c-cc81bcf75c66>ITypeResolver)new <c19577c4-3562-4098-b9a2-7d323114f033>StaticTypeResolver()) { typeMappings = new Dictionary<Type, Type>(); objectFactory = new Lazy<<2cd1ea38-f6a5-4a6a-9585-ef23bb2232b8>IObjectFactory>(() => new <3603c483-9d87-48a7-92d4-dc6c6d12067f>DefaultObjectFactory(typeMappings, settings), isThreadSafe: true); tagMappings = new Dictionary<<fb5701dc-7312-4dc7-91f9-86539539cfb2>TagName, Type> { { <58f25cad-8c7c-4ad6-bddb-ae640550b10f>FailsafeSchema.Tags.Map, typeof(Dictionary<object, object>) }, { <58f25cad-8c7c-4ad6-bddb-ae640550b10f>FailsafeSchema.Tags.Str, typeof(string) }, { <edb99e99-c4af-4fee-9553-a7854ca0ebbd>JsonSchema.Tags.Bool, typeof(bool) }, { <edb99e99-c4af-4fee-9553-a7854ca0ebbd>JsonSchema.Tags.Float, typeof(double) }, { <edb99e99-c4af-4fee-9553-a7854ca0ebbd>JsonSchema.Tags.Int, typeof(int) }, { <a488e164-8d5b-4ffc-9794-fa52a07d8e3f>DefaultSchema.Tags.Timestamp, typeof(DateTime) } }; typeInspectorFactories.Add(typeof(<540e5e1f-8dce-42d7-9384-8f4a864f8613>CachedTypeInspector), (<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector inner) => new <540e5e1f-8dce-42d7-9384-8f4a864f8613>CachedTypeInspector(inner)); typeInspectorFactories.Add(typeof(<a10678bf-8bbf-48f5-a137-e8e53497635a>NamingConventionTypeInspector), (<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector inner) => (!(namingConvention is <30e63b9e-a982-41a6-b0ce-a9f90f53a05f>NullNamingConvention)) ? new <a10678bf-8bbf-48f5-a137-e8e53497635a>NamingConventionTypeInspector(inner, namingConvention) : inner); typeInspectorFactories.Add(typeof(<b0e97467-9d56-415a-9e36-8b03a35e5129>YamlAttributesTypeInspector), (<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector inner) => new <b0e97467-9d56-415a-9e36-8b03a35e5129>YamlAttributesTypeInspector(inner)); typeInspectorFactories.Add(typeof(<0b2725d2-b351-42cc-bd16-50eadd20b1da>YamlAttributeOverridesInspector), (<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector inner) => (overrides == null) ? inner : new <0b2725d2-b351-42cc-bd16-50eadd20b1da>YamlAttributeOverridesInspector(inner, overrides.Clone())); typeInspectorFactories.Add(typeof(<f0ea8e1a-d5d2-4fba-a863-003078c59956>ReadableAndWritablePropertiesTypeInspector), (<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector inner) => new <f0ea8e1a-d5d2-4fba-a863-003078c59956>ReadableAndWritablePropertiesTypeInspector(inner)); nodeDeserializerFactories = new <e6c6a0d4-35c5-4f51-907d-ef63f4a4def5>LazyComponentRegistrationList<<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing, <944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer> { { typeof(<a0d9142b-193f-4213-93ce-fd98ed30c231>YamlConvertibleNodeDeserializer), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <a0d9142b-193f-4213-93ce-fd98ed30c231>YamlConvertibleNodeDeserializer(objectFactory.Value) }, { typeof(<a67adb03-00e9-45c9-a3a3-0fa502f8db42>YamlSerializableNodeDeserializer), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <a67adb03-00e9-45c9-a3a3-0fa502f8db42>YamlSerializableNodeDeserializer(objectFactory.Value) }, { typeof(<21c5f308-1af2-44bf-b83f-81b923682274>TypeConverterNodeDeserializer), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <21c5f308-1af2-44bf-b83f-81b923682274>TypeConverterNodeDeserializer(BuildTypeConverters()) }, { typeof(<093f568c-119a-49c6-a2d4-521d4d32223b>NullNodeDeserializer), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <093f568c-119a-49c6-a2d4-521d4d32223b>NullNodeDeserializer() }, { typeof(<e9812539-c4a0-4398-8650-4ad234a1a8dc>ScalarNodeDeserializer), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <e9812539-c4a0-4398-8650-4ad234a1a8dc>ScalarNodeDeserializer(attemptUnknownTypeDeserialization, typeConverter, BuildTypeInspector(), yamlFormatter, enumNamingConvention) }, { typeof(<911b0494-e9f2-4d6a-816a-26486bc81ec6>ArrayNodeDeserializer), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <911b0494-e9f2-4d6a-816a-26486bc81ec6>ArrayNodeDeserializer(enumNamingConvention, BuildTypeInspector()) }, { typeof(<d7d5920d-4699-4ca5-a442-7a25f988405d>DictionaryNodeDeserializer), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <d7d5920d-4699-4ca5-a442-7a25f988405d>DictionaryNodeDeserializer(objectFactory.Value, duplicateKeyChecking) }, { typeof(<2f8837de-bd36-48c5-8e11-eb9414f13741>CollectionNodeDeserializer), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <2f8837de-bd36-48c5-8e11-eb9414f13741>CollectionNodeDeserializer(objectFactory.Value, enumNamingConvention, BuildTypeInspector()) }, { typeof(<497b9989-c4c7-4cd4-bf65-e80f57a3a6b6>EnumerableNodeDeserializer), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <497b9989-c4c7-4cd4-bf65-e80f57a3a6b6>EnumerableNodeDeserializer() }, { typeof(<2ff18f22-cd92-4665-ba53-fa0e72df6327>ObjectNodeDeserializer), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <2ff18f22-cd92-4665-ba53-fa0e72df6327>ObjectNodeDeserializer(objectFactory.Value, BuildTypeInspector(), ignoreUnmatched, duplicateKeyChecking, typeConverter, enumNamingConvention, enforceNullability, caseInsensitivePropertyMatching, enforceRequiredProperties, BuildTypeConverters()) }, { typeof(FsharpListNodeDeserializer), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new FsharpListNodeDeserializer(BuildTypeInspector(), enumNamingConvention) } }; nodeTypeResolverFactories = new <e6c6a0d4-35c5-4f51-907d-ef63f4a4def5>LazyComponentRegistrationList<<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing, <9ba986bb-1912-4978-ba84-ec207338fd4a>INodeTypeResolver> { { typeof(<c9813d2e-07e1-431c-acac-4d119f12cfce>MappingNodeTypeResolver), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <c9813d2e-07e1-431c-acac-4d119f12cfce>MappingNodeTypeResolver(typeMappings) }, { typeof(<8c8675f9-4e5b-4414-b959-5693892e4e73>YamlConvertibleTypeResolver), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <8c8675f9-4e5b-4414-b959-5693892e4e73>YamlConvertibleTypeResolver() }, { typeof(<53a88709-58f0-44ef-8b8b-58b5ee976568>YamlSerializableTypeResolver), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <53a88709-58f0-44ef-8b8b-58b5ee976568>YamlSerializableTypeResolver() }, { typeof(<00a0b88a-3d76-44e9-8a60-2e868ba785d7>TagNodeTypeResolver), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <00a0b88a-3d76-44e9-8a60-2e868ba785d7>TagNodeTypeResolver(tagMappings) }, { typeof(<37dd94aa-34cd-45c2-b62a-b54d59fab845>PreventUnknownTagsNodeTypeResolver), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <37dd94aa-34cd-45c2-b62a-b54d59fab845>PreventUnknownTagsNodeTypeResolver() }, { typeof(<0ad83501-6d5e-49c3-89f1-6e02596e68b2>DefaultContainersNodeTypeResolver), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => new <0ad83501-6d5e-49c3-89f1-6e02596e68b2>DefaultContainersNodeTypeResolver() } }; typeConverter = new ReflectionTypeConverter(); } public <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector BuildTypeInspector() { <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector2 = new WritablePropertiesTypeInspector(typeResolver, includeNonPublicProperties); if (!ignoreFields) { <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector2 = new <e6f6c60f-ca4d-4078-b1d3-443a6205c9db>CompositeTypeInspector(new <9d7a06cf-6471-4a8c-815e-2d1a1656c07b>ReadableFieldsTypeInspector(typeResolver), <619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector2); } return typeInspectorFactories.BuildComponentChain(<619b34a7-c3cf-48e7-90cc-feead801e2f5>ITypeInspector2); } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithAttemptingUnquotedStringTypeDeserialization() { attemptUnknownTypeDeserialization = true; return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithObjectFactory(<2cd1ea38-f6a5-4a6a-9585-ef23bb2232b8>IObjectFactory objectFactory) { if (objectFactory == null) { throw new ArgumentNullException("objectFactory"); } this.objectFactory = new Lazy<<2cd1ea38-f6a5-4a6a-9585-ef23bb2232b8>IObjectFactory>(() => objectFactory, isThreadSafe: true); return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithObjectFactory(Func<Type, object> objectFactory) { if (objectFactory == null) { throw new ArgumentNullException("objectFactory"); } return WithObjectFactory(new <c5b36a09-278c-451d-a435-291e17162564>LambdaObjectFactory(objectFactory)); } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithNodeDeserializer(<944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer nodeDeserializer) { return WithNodeDeserializer(nodeDeserializer, delegate(<40546893-04ba-4b2f-bf1c-157a7983f623>IRegistrationLocationSelectionSyntax<<944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer> w) { w.OnTop(); }); } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithNodeDeserializer(<944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer nodeDeserializer, Action<<40546893-04ba-4b2f-bf1c-157a7983f623>IRegistrationLocationSelectionSyntax<<944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer>> where) { if (nodeDeserializer == null) { throw new ArgumentNullException("nodeDeserializer"); } if (where == null) { throw new ArgumentNullException("where"); } where(nodeDeserializerFactories.CreateRegistrationLocationSelector(nodeDeserializer.GetType(), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => nodeDeserializer)); return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithNodeDeserializer<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TNodeDeserializer>(<66417a64-dc4a-4a32-89d8-f2fe8a7d7ac7>WrapperFactory<<944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer, TNodeDeserializer> nodeDeserializerFactory, Action<<7e516d9c-028b-47f4-9887-542ac29c9e2a>ITrackingRegistrationLocationSelectionSyntax<<944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer>> where) where TNodeDeserializer : <944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer { if (nodeDeserializerFactory == null) { throw new ArgumentNullException("nodeDeserializerFactory"); } if (where == null) { throw new ArgumentNullException("where"); } where(nodeDeserializerFactories.CreateTrackingRegistrationLocationSelector(typeof(TNodeDeserializer), (<944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer wrapped, <f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => nodeDeserializerFactory(wrapped))); return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithoutNodeDeserializer<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TNodeDeserializer>() where TNodeDeserializer : <944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer { return WithoutNodeDeserializer(typeof(TNodeDeserializer)); } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithoutNodeDeserializer(Type nodeDeserializerType) { if (nodeDeserializerType == null) { throw new ArgumentNullException("nodeDeserializerType"); } nodeDeserializerFactories.Remove(nodeDeserializerType); return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithTypeDiscriminatingNodeDeserializer(Action<ITypeDiscriminatingNodeDeserializerOptions> configureTypeDiscriminatingNodeDeserializerOptions, int maxDepth = -1, int maxLength = -1) { TypeDiscriminatingNodeDeserializerOptions typeDiscriminatingNodeDeserializerOptions = new TypeDiscriminatingNodeDeserializerOptions(); configureTypeDiscriminatingNodeDeserializerOptions(typeDiscriminatingNodeDeserializerOptions); TypeDiscriminatingNodeDeserializer nodeDeserializer = new TypeDiscriminatingNodeDeserializer(nodeDeserializerFactories.BuildComponentList(), typeDiscriminatingNodeDeserializerOptions.discriminators, maxDepth, maxLength); return WithNodeDeserializer(nodeDeserializer, delegate(<40546893-04ba-4b2f-bf1c-157a7983f623>IRegistrationLocationSelectionSyntax<<944861a5-757a-4977-8b32-488cf68a0d63>INodeDeserializer> s) { s.Before<<d7d5920d-4699-4ca5-a442-7a25f988405d>DictionaryNodeDeserializer>(); }); } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithNodeTypeResolver(<9ba986bb-1912-4978-ba84-ec207338fd4a>INodeTypeResolver nodeTypeResolver) { return WithNodeTypeResolver(nodeTypeResolver, delegate(<40546893-04ba-4b2f-bf1c-157a7983f623>IRegistrationLocationSelectionSyntax<<9ba986bb-1912-4978-ba84-ec207338fd4a>INodeTypeResolver> w) { w.OnTop(); }); } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithNodeTypeResolver(<9ba986bb-1912-4978-ba84-ec207338fd4a>INodeTypeResolver nodeTypeResolver, Action<<40546893-04ba-4b2f-bf1c-157a7983f623>IRegistrationLocationSelectionSyntax<<9ba986bb-1912-4978-ba84-ec207338fd4a>INodeTypeResolver>> where) { if (nodeTypeResolver == null) { throw new ArgumentNullException("nodeTypeResolver"); } if (where == null) { throw new ArgumentNullException("where"); } where(nodeTypeResolverFactories.CreateRegistrationLocationSelector(nodeTypeResolver.GetType(), (<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => nodeTypeResolver)); return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithNodeTypeResolver<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TNodeTypeResolver>(<66417a64-dc4a-4a32-89d8-f2fe8a7d7ac7>WrapperFactory<<9ba986bb-1912-4978-ba84-ec207338fd4a>INodeTypeResolver, TNodeTypeResolver> nodeTypeResolverFactory, Action<<7e516d9c-028b-47f4-9887-542ac29c9e2a>ITrackingRegistrationLocationSelectionSyntax<<9ba986bb-1912-4978-ba84-ec207338fd4a>INodeTypeResolver>> where) where TNodeTypeResolver : <9ba986bb-1912-4978-ba84-ec207338fd4a>INodeTypeResolver { if (nodeTypeResolverFactory == null) { throw new ArgumentNullException("nodeTypeResolverFactory"); } if (where == null) { throw new ArgumentNullException("where"); } where(nodeTypeResolverFactories.CreateTrackingRegistrationLocationSelector(typeof(TNodeTypeResolver), (<9ba986bb-1912-4978-ba84-ec207338fd4a>INodeTypeResolver wrapped, <f31e24e0-3540-44a5-b987-80248d8ae485>Nothing _) => nodeTypeResolverFactory(wrapped))); return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithCaseInsensitivePropertyMatching() { caseInsensitivePropertyMatching = true; return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithEnforceNullability() { enforceNullability = true; return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithEnforceRequiredMembers() { enforceRequiredProperties = true; return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithoutNodeTypeResolver<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TNodeTypeResolver>() where TNodeTypeResolver : <9ba986bb-1912-4978-ba84-ec207338fd4a>INodeTypeResolver { return WithoutNodeTypeResolver(typeof(TNodeTypeResolver)); } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithoutNodeTypeResolver(Type nodeTypeResolverType) { if (nodeTypeResolverType == null) { throw new ArgumentNullException("nodeTypeResolverType"); } nodeTypeResolverFactories.Remove(nodeTypeResolverType); return this; } public override <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithTagMapping(<fb5701dc-7312-4dc7-91f9-86539539cfb2>TagName tag, Type type) { if (tag.IsEmpty) { throw new ArgumentException("Non-specific tags cannot be maped"); } if (type == null) { throw new ArgumentNullException("type"); } if (tagMappings.TryGetValue(tag, out var value)) { throw new ArgumentException($"Type already has a registered type '{value.FullName}' for tag '{tag}'", "tag"); } tagMappings.Add(tag, type); return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithTypeMapping<[<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(2)] TInterface, [<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] TConcrete>() where TConcrete : TInterface { Type typeFromHandle = typeof(TInterface); Type typeFromHandle2 = typeof(TConcrete); if (!typeFromHandle.IsAssignableFrom(typeFromHandle2)) { throw new InvalidOperationException("The type '" + typeFromHandle2.Name + "' does not implement interface '" + typeFromHandle.Name + "'."); } if (!DictionaryExtensions.TryAdd(typeMappings, typeFromHandle, typeFromHandle2)) { typeMappings[typeFromHandle] = typeFromHandle2; } return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithoutTagMapping(<fb5701dc-7312-4dc7-91f9-86539539cfb2>TagName tag) { if (tag.IsEmpty) { throw new ArgumentException("Non-specific tags cannot be maped"); } if (!tagMappings.Remove(tag)) { throw new KeyNotFoundException($"Tag '{tag}' is not registered"); } return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder IgnoreUnmatchedProperties() { ignoreUnmatched = true; return this; } public <07eba1af-ec55-41ab-96ac-80f8030e44b1>DeserializerBuilder WithDuplicateKeyChecking() { duplicateKeyChecking = true; return this; } public <6bb2661e-9396-4da5-aeb8-c1201a976544>IDeserializer Build() { if (FsharpHelper.Instance == null) { FsharpHelper.Instance = new DefaultFsharpHelper(); } return <da905783-e934-43a6-a0c3-eeed000f1549>Deserializer.FromValueDeserializer(BuildValueDeserializer()); } public <63a8773f-ae47-49dd-8c39-0296eaf7cd79>IValueDeserializer BuildValueDeserializer() { return new <c891dcd8-8a65-4031-8004-6da5449668ef>AliasValueDeserializer(new <5135c096-4fa8-4ccf-a19a-8063b7a5188d>NodeValueDeserializer(nodeDeserializerFactories.BuildComponentList(), nodeTypeResolverFactories.BuildComponentList(), typeConverter, enumNamingConvention, BuildTypeInspector())); } } [<50695eb0-1575-4a71-9582-f9a8395ba049>Nullable(0)] [<4dbd70ac-3833-421e-8d49-1c491cf72deb>NullableContext(1)] internal sealed class <2d1f9551-49b2-4c6c-b2aa-e850505c24a3>EmissionPhaseObjectGraphVisitorArgs { private readonly IEnumerable<<b6a33241-7f15-4325-b6d9-861bbb0e719f>IObjectGraphVisitor<<f31e24e0-3540-44a5-b987-80248d8ae485>Nothing>> preProcessingPhaseVisitors; public <b6a33241-7f15-4325-b6d9-861bbb0e719f>IObjectGraphVisitor<<fd8f6139-9f9c-43f5-854e-3d3fe89ea0f9>I