Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Immersive Auto Fuelers v1.1.1
plugins/ImmersiveAutoFuelers/ImmersiveAutoFuelers.dll
Decompiled 2 days 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.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.Rendering; using UnityEngine.UI; [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyVersion("0.0.0.0")] namespace WoodkeeperMod; [BepInPlugin("camde.valheim.immersiveautofuelers", "Immersive Auto Fuelers", "1.1.1")] public sealed class Plugin : BaseUnityPlugin { [HarmonyPatch(/*Could not decode attribute arguments.*/)] private static class ConfigNetwork { private static void Postfix(ZRoutedRpc __instance) { if (object.ReferenceEquals(registeredRpc, __instance)) { return; } registeredRpc = __instance; hasServerSettings = false; __instance.Register("IAF_RequestConfig", (Action<long>)delegate(long sender) { if (Object.op_Implicit((Object)(object)ZNet.instance) && ZNet.instance.IsServer()) { __instance.InvokeRoutedRPC(sender, "IAF_ConfigV2", new object[4] { BuildMenu.Value, FuelRadius.Value, LampMenu.Value, LampFuelRadius.Value }); } }); __instance.Register<bool, float, bool, float>("IAF_ConfigV2", (Method<bool, float, bool, float>)delegate(long sender, bool menu, float radius, bool lampMenu, float lampRadius) { if (Object.op_Implicit((Object)(object)ZNet.instance) && !ZNet.instance.IsServer()) { ZNetPeer serverPeer = ZNet.instance.GetServerPeer(); if (serverPeer != null && serverPeer.m_uid == sender && !float.IsNaN(radius) && !float.IsInfinity(radius) && !float.IsNaN(lampRadius) && !float.IsInfinity(lampRadius)) { radius = Mathf.Clamp(radius, 1f, 128f); lampRadius = Mathf.Clamp(lampRadius, 1f, 128f); bool flag = !hasServerSettings || serverMenu != menu || serverRadius != radius || serverLampMenu != lampMenu || serverLampRadius != lampRadius; serverLampMenu = lampMenu; serverLampRadius = lampRadius; serverMenu = menu; serverRadius = radius; hasServerSettings = true; if (flag) { ApplyConfig(); } } } }); } } [HarmonyPatch(typeof(ZNetScene), "Awake")] private static class Register { private static void Prefix(ZNetScene __instance) { if (!Object.op_Implicit((Object)(object)Prefab)) { Build(__instance); } if (!__instance.m_prefabs.Contains(Prefab)) { __instance.m_prefabs.Add(Prefab); } if (Object.op_Implicit((Object)(object)LampPrefab) && !__instance.m_prefabs.Contains(LampPrefab)) { __instance.m_prefabs.Add(LampPrefab); } if (Object.op_Implicit((Object)(object)Scuttle.Prefab) && !__instance.m_prefabs.Contains(Scuttle.Prefab)) { __instance.m_prefabs.Add(Scuttle.Prefab); } AddToHammer(ObjectDB.instance); } } [HarmonyPatch(typeof(ObjectDB), "Awake")] private static class DatabaseReady { private static void Postfix(ObjectDB __instance) { AddToHammer(__instance); } } [HarmonyPatch(typeof(ObjectDB), "CopyOtherDB")] private static class DatabaseCopied { private static void Postfix(ObjectDB __instance) { AddToHammer(__instance); } } [HarmonyPatch(typeof(Piece), "DropResources")] private static class LegacyRefund { private static void Prefix(Piece __instance, out Requirement[] __state) { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Expected O, but got Unknown __state = null; if (!Object.op_Implicit((Object)(object)((Component)__instance).GetComponent<Woodkeeper>())) { return; } ZNetView component = ((Component)__instance).GetComponent<ZNetView>(); if (Object.op_Implicit((Object)(object)component) && component.IsValid()) { byte[] byteArray = component.GetZDO().GetByteArray("woodkeeper_axe", (byte[])null); if (byteArray != null && byteArray.Length != 0) { __state = __instance.m_resources; Requirement[] array = (Requirement[])(object)new Requirement[1]; Requirement val = new Requirement(); val.m_resItem = ObjectDB.instance.GetItemPrefab("Wood").GetComponent<ItemDrop>(); val.m_amount = 50; val.m_amountPerLevel = 0; val.m_recover = true; array[0] = val; __instance.m_resources = array; } } } private static Exception Finalizer(Piece __instance, Requirement[] __state, Exception __exception) { if (__state != null) { __instance.m_resources = __state; } return __exception; } } [HarmonyPatch(typeof(Fireplace), "Awake")] private static class RegisterFireToggle { private static void Postfix(Fireplace __instance) { ZNetView view = ((Component)__instance).GetComponent<ZNetView>(); if (!Object.op_Implicit((Object)(object)view) || !view.IsValid()) { return; } view.Register("Woodkeeper_ToggleAutoFuel", (Action<long>)delegate { if (view.IsOwner() && Woodkeeper.InRange(__instance)) { ZDO zDO = view.GetZDO(); zDO.Set("woodkeeper_auto_fuel_disabled", !zDO.GetBool("woodkeeper_auto_fuel_disabled", false)); } }); } } [HarmonyPatch(typeof(Fireplace), "GetHoverText")] private static class FireHover { private static void Postfix(Fireplace __instance, ref string __result) { if (!string.IsNullOrEmpty(__result) && Woodkeeper.InRange(__instance)) { bool flag = ((Component)__instance).GetComponent<ZNetView>().GetZDO().GetBool("woodkeeper_auto_fuel_disabled", false); Woodkeeper woodkeeper = Woodkeeper.Supplier(__instance); string status = (flag ? "" : L10n.Status(Object.op_Implicit((Object)(object)woodkeeper) ? woodkeeper.Kind : 0)); string hint = L10n.Hint(flag); __result = Rules.InsertFuelStatus(__result, status, hint); string[] array = __result.Split('\n'); if (array.Length > 1) { array[1] = "<nobr>" + array[1] + "</nobr>"; } __result = string.Join("\n", array); } } } [HarmonyPatch(typeof(Fireplace), "Interact")] private static class FireInteract { private static bool Prefix(Fireplace __instance, bool hold, bool alt, ref bool __result) { if (!alt || !Woodkeeper.InRange(__instance)) { return true; } __result = false; if (!hold) { ZNetView component = ((Component)__instance).GetComponent<ZNetView>(); if (!component.HasOwner()) { component.ClaimOwnership(); } component.InvokeRPC("Woodkeeper_ToggleAutoFuel", new object[0]); __result = true; } return false; } } internal const string PrefabName = "piece_woodkeeper"; internal static GameObject Root; internal static GameObject Prefab; internal static ManualLogSource Log; private Harmony harmony; internal static ConfigEntry<bool> BuildMenu; internal static ConfigEntry<float> FuelRadius; internal static ConfigEntry<bool> LampMenu; internal static ConfigEntry<float> LampFuelRadius; internal static GameObject LampPrefab; private static bool serverLampMenu; private static float serverLampRadius; private static bool serverMenu; private static bool hasServerSettings; private static float serverRadius; private static ZRoutedRpc registeredRpc; private float nextConfigRequest; private float nextLocalizationCheck; private static Sprite menuIcon; internal static float LampRadius { get { if (!hasServerSettings) { return LampFuelRadius.Value; } return serverLampRadius; } } internal static float Radius { get { if (!hasServerSettings) { return FuelRadius.Value; } return serverRadius; } } private static bool MenuEnabled { get { if (!hasServerSettings) { return BuildMenu.Value; } return serverMenu; } } internal static bool ConfigReady { get { if (Object.op_Implicit((Object)(object)ZNet.instance) && !ZNet.instance.IsServer()) { return hasServerSettings; } return true; } } private static void ApplyConfig() { L10n.Refresh(); AddToHammer(ObjectDB.instance); if (Object.op_Implicit((Object)(object)Prefab)) { Prefab.GetComponent<Piece>().m_description = "$iaf_desc_rack"; } if (Object.op_Implicit((Object)(object)LampPrefab)) { LampPrefab.GetComponent<Piece>().m_description = "$iaf_desc_lamp"; } if (Object.op_Implicit((Object)(object)Player.m_localPlayer)) { AccessTools.Method(typeof(Player), "UpdateAvailablePiecesList", (Type[])null, (Type[])null).Invoke(Player.m_localPlayer, null); } } private void Update() { Diagnostics.Pump(); if (Time.unscaledTime >= nextLocalizationCheck) { nextLocalizationCheck = Time.unscaledTime + 3f; L10n.TryConfigHook(); } if (!Object.op_Implicit((Object)(object)ZNet.instance) || ZRoutedRpc.instance == null) { hasServerSettings = false; } else { if (Time.unscaledTime < nextConfigRequest) { return; } nextConfigRequest = Time.unscaledTime + 3f; if (!ZNet.instance.IsServer()) { ZNetPeer serverPeer = ZNet.instance.GetServerPeer(); if (serverPeer != null) { ZRoutedRpc.instance.InvokeRoutedRPC(serverPeer.m_uid, "IAF_RequestConfig", new object[0]); ZRoutedRpc.instance.InvokeRoutedRPC(serverPeer.m_uid, "IAF_RequestScuttle", new object[0]); } } } } private static Sprite GetMenuIcon() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)menuIcon)) { return menuIcon; } using Stream stream = typeof(Plugin).Assembly.GetManifestResourceStream("Woodkeeper.Icon.png"); if (stream == null) { throw new InvalidOperationException("Woodkeeper menu icon resource is missing."); } using MemoryStream memoryStream = new MemoryStream(); stream.CopyTo(memoryStream); Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false); ((Object)val).name = "Woodkeeper_MenuIcon"; if (!ImageConversion.LoadImage(val, memoryStream.ToArray(), true)) { throw new InvalidOperationException("Woodkeeper menu icon could not be decoded."); } ((Texture)val).filterMode = (FilterMode)1; ((Texture)val).wrapMode = (TextureWrapMode)1; menuIcon = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 100f); ((Object)menuIcon).name = "Woodkeeper_MenuIcon"; return menuIcon; } private void Awake() { //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Expected O, but got Unknown //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Expected O, but got Unknown //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Expected O, but got Unknown //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Expected O, but got Unknown Log = ((BaseUnityPlugin)this).Logger; L10n.Prepare(); Diagnostics.Init(((BaseUnityPlugin)this).Config); Scuttle.Configure(((BaseUnityPlugin)this).Config); ConfigEntry<bool> val = default(ConfigEntry<bool>); bool flag = !((BaseUnityPlugin)this).Config.TryGetEntry<bool>("Wood Keeper", "Show in build menu", ref val) || val.Value; ConfigEntry<float> val2 = default(ConfigEntry<float>); float num = (((BaseUnityPlugin)this).Config.TryGetEntry<float>("Wood Keeper", "Fuel radius", ref val2) ? val2.Value : 12f); BuildMenu = ((BaseUnityPlugin)this).Config.Bind<bool>("Firewood Rack", "Show in build menu", flag, L10n.Text("cfg_show_desc")); FuelRadius = ((BaseUnityPlugin)this).Config.Bind<float>("Firewood Rack", "Fuel radius", num, new ConfigDescription(L10n.Text("cfg_radius_desc"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 128f), new object[0])); BuildMenu.SettingChanged += delegate { ApplyConfig(); }; FuelRadius.SettingChanged += delegate { ApplyConfig(); }; LampMenu = ((BaseUnityPlugin)this).Config.Bind<bool>("Lamplighters Barrel", "Show in build menu", true, L10n.Text("cfg_show_desc")); LampFuelRadius = ((BaseUnityPlugin)this).Config.Bind<float>("Lamplighters Barrel", "Fuel radius", 12f, new ConfigDescription(L10n.Text("cfg_radius_desc"), (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 128f), new object[0])); LampMenu.SettingChanged += delegate { ApplyConfig(); }; LampFuelRadius.SettingChanged += delegate { ApplyConfig(); }; Root = new GameObject("Woodkeeper_Prefabs"); Root.SetActive(false); Object.DontDestroyOnLoad((Object)(object)Root); harmony = new Harmony("camde.valheim.immersiveautofuelers"); harmony.PatchAll(typeof(Plugin).Assembly); L10n.Initialize(harmony); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Immersive Auto Fuelers 1.1.1 loaded."); } private void OnApplicationQuit() { Diagnostics.Shutdown(); } private void OnDestroy() { Diagnostics.Shutdown(); if (harmony != null) { harmony.UnpatchSelf(); } } internal static GameObject Visual(GameObject source, Transform parent, string name) { GameObject val = Object.Instantiate<GameObject>(source, parent); ((Object)val).name = name; foreach (Component item in val.GetComponentsInChildren<Component>(true).Reverse()) { if (Object.op_Implicit((Object)(object)item) && !(item is Transform) && !(item is Renderer) && !(item is MeshFilter) && !(item is LODGroup)) { Object.DestroyImmediate((Object)(object)item); } } KeepVisibleLODs(val); val.SetActive(true); return val; } internal static void KeepVisibleLODs(GameObject visual) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: 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_0077: Unknown result type (might be due to invalid IL or missing references) LODGroup[] componentsInChildren = visual.GetComponentsInChildren<LODGroup>(true); foreach (LODGroup val in componentsInChildren) { List<LOD> list = new List<LOD>(); LOD[] lODs = val.GetLODs(); for (int j = 0; j < lODs.Length; j++) { LOD val2 = lODs[j]; Renderer[] array = val2.renderers.Where((Renderer r) => Object.op_Implicit((Object)(object)r) && (!Object.op_Implicit((Object)(object)((Component)r).GetComponent<MeshFilter>()) || (Object.op_Implicit((Object)(object)((Component)r).GetComponent<MeshFilter>().sharedMesh) && ((Component)r).GetComponent<MeshFilter>().sharedMesh.vertexCount > 0))).ToArray(); if (array.Length > 0) { list.Add(new LOD(val2.screenRelativeTransitionHeight, array)); } } if (list.Count != 0) { LOD value = list[list.Count - 1]; value.screenRelativeTransitionHeight = 0f; list[list.Count - 1] = value; val.SetLODs(list.ToArray()); val.RecalculateBounds(); } } } private static void Build(ZNetScene scene) { //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_036c: Unknown result type (might be due to invalid IL or missing references) //IL_037e: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Unknown result type (might be due to invalid IL or missing references) //IL_039a: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03c0: Unknown result type (might be due to invalid IL or missing references) //IL_03d2: Unknown result type (might be due to invalid IL or missing references) //IL_03dc: Unknown result type (might be due to invalid IL or missing references) //IL_0403: Unknown result type (might be due to invalid IL or missing references) //IL_040d: Unknown result type (might be due to invalid IL or missing references) //IL_0428: Unknown result type (might be due to invalid IL or missing references) //IL_0432: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_04b6: Unknown result type (might be due to invalid IL or missing references) //IL_04bd: Expected O, but got Unknown //IL_04ea: Unknown result type (might be due to invalid IL or missing references) //IL_04f1: Expected O, but got Unknown //IL_051d: Unknown result type (might be due to invalid IL or missing references) //IL_0524: Expected O, but got Unknown //IL_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_02ee: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) //IL_0306: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Unknown result type (might be due to invalid IL or missing references) Func<string, GameObject> func = (string name) => scene.m_prefabs.Find((GameObject p) => Object.op_Implicit((Object)(object)p) && ((Object)p).name == name); GameObject val = func("piece_chest_wood"); GameObject val2 = func("wood_stack"); GameObject val3 = func("piece_workbench"); if (Object.op_Implicit((Object)(object)val3) && Object.op_Implicit((Object)(object)val3.GetComponent<CraftingStation>())) { PlacementRadius.Template = val3.GetComponent<CraftingStation>().m_areaMarker; } GameObject val4 = func("bar_iron_stack"); GameObject val5 = func("bar_bronze_stack"); GameObject val6 = func("Wood"); GameObject val7 = func("Iron"); GameObject val8 = func("Bronze"); if (!Object.op_Implicit((Object)(object)val) || !Object.op_Implicit((Object)(object)val2) || !Object.op_Implicit((Object)(object)val4) || !Object.op_Implicit((Object)(object)val5) || !Object.op_Implicit((Object)(object)val6) || !Object.op_Implicit((Object)(object)val7) || !Object.op_Implicit((Object)(object)val8)) { throw new InvalidOperationException("Woodkeeper: required vanilla prefabs are missing."); } Prefab = Object.Instantiate<GameObject>(val, Root.transform); ((Object)Prefab).name = "piece_woodkeeper"; Transform[] array = ((IEnumerable)Prefab.transform).Cast<Transform>().ToArray(); foreach (Transform val9 in array) { Object.DestroyImmediate((Object)(object)((Component)val9).gameObject); } Collider[] components = Prefab.GetComponents<Collider>(); foreach (Collider val10 in components) { Object.DestroyImmediate((Object)(object)val10); } Renderer[] components2 = Prefab.GetComponents<Renderer>(); foreach (Renderer val11 in components2) { Object.DestroyImmediate((Object)(object)val11); } Animator[] components3 = Prefab.GetComponents<Animator>(); foreach (Animator val12 in components3) { Object.DestroyImmediate((Object)(object)val12); } GameObject val13 = RackModel.Create(Prefab.transform, val4, val5, func("piece_chest_barrel")); GameObject val14 = Visual(val2, Prefab.transform, "VanillaWoodPile"); val14.transform.localPosition = Vector3.zero; val14.transform.localRotation = Quaternion.Euler(0f, 0f, 180f); val14.transform.localScale = Vector3.one * 0.5f; float num5 = float.PositiveInfinity; MeshFilter[] componentsInChildren = val14.GetComponentsInChildren<MeshFilter>(true); foreach (MeshFilter val15 in componentsInChildren) { if (Object.op_Implicit((Object)(object)val15.sharedMesh)) { Bounds bounds = val15.sharedMesh.bounds; for (int num7 = 0; num7 < 8; num7++) { Vector3 val16 = ((Bounds)(ref bounds)).center + Vector3.Scale(((Bounds)(ref bounds)).extents, new Vector3(((num7 & 1) == 0) ? (-1f) : 1f, ((num7 & 2) == 0) ? (-1f) : 1f, ((num7 & 4) == 0) ? (-1f) : 1f)); float y = Prefab.transform.InverseTransformPoint(((Component)val15).transform.TransformPoint(val16)).y; num5 = Mathf.Min(num5, y); } } } val14.transform.localPosition = new Vector3(0f, float.IsInfinity(num5) ? 0.78f : (0.28f - num5), 0f); Transform transform = val13.transform; transform.localPosition *= 0.81f; Transform transform2 = val13.transform; transform2.localScale *= 0.81f; Transform transform3 = val14.transform; transform3.localPosition *= 0.81f; Transform transform4 = val14.transform; transform4.localScale *= 0.81f; BoxCollider val17 = Prefab.AddComponent<BoxCollider>(); val17.center = new Vector3(0.255f, 0.59f, 0f) * 0.81f; val17.size = new Vector3(1.91f, 1.18f, 1.05f) * 0.81f; Piece component = Prefab.GetComponent<Piece>(); component.m_name = "$iaf_rack"; component.m_description = "$iaf_desc_rack"; component.m_icon = GetMenuIcon(); GameObject val18 = func("forge"); if (!Object.op_Implicit((Object)(object)val18) || !Object.op_Implicit((Object)(object)val18.GetComponent<CraftingStation>())) { throw new InvalidOperationException("Forge crafting station missing."); } component.m_craftingStation = val18.GetComponent<CraftingStation>(); Requirement[] array2 = (Requirement[])(object)new Requirement[3]; Requirement val19 = new Requirement(); val19.m_resItem = val6.GetComponent<ItemDrop>(); val19.m_amount = 30; val19.m_amountPerLevel = 0; val19.m_recover = true; array2[0] = val19; Requirement val20 = new Requirement(); val20.m_resItem = val7.GetComponent<ItemDrop>(); val20.m_amount = 6; val20.m_amountPerLevel = 0; val20.m_recover = true; array2[1] = val20; Requirement val21 = new Requirement(); val21.m_resItem = val8.GetComponent<ItemDrop>(); val21.m_amount = 3; val21.m_amountPerLevel = 0; val21.m_recover = true; array2[2] = val21; component.m_resources = array2; Container component2 = Prefab.GetComponent<Container>(); component2.m_name = "$iaf_rack"; component2.m_open = (component2.m_closed = null); component2.m_width = 3; component2.m_height = 2; WearNTear component3 = Prefab.GetComponent<WearNTear>(); component3.m_new = (component3.m_worn = (component3.m_broken = (component3.m_wet = null))); component3.m_snow = (component3.m_snowWorn = (component3.m_snowBroken = null)); component3.m_fragmentRoots = (GameObject[])(object)new GameObject[2] { val13, val14 }; component3.m_nonSolidRenderers = new List<Renderer>(); Prefab.AddComponent<Woodkeeper>(); Prefab.AddComponent<FuelerAudit>(); Prefab.SetActive(true); BuildLamp(scene, val, val4, val5); try { Scuttle.Build(scene, val5); } catch (Exception ex) { Log.LogError((object)("Scuttle creation failed; other fuelers remain available: " + ex)); if (Object.op_Implicit((Object)(object)Scuttle.Prefab)) { Object.DestroyImmediate((Object)(object)Scuttle.Prefab); } Scuttle.Prefab = null; } FuelerLod.Build(Prefab); FuelerLod.Build(LampPrefab); FuelerLod.Build(Scuttle.Prefab); Log.LogInfo((object)("Woodkeeper prefab created; inventory " + component2.m_width + " x " + component2.m_height)); } private static void BuildLamp(ZNetScene scene, GameObject chest, GameObject iron, GameObject bronze) { //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Expected O, but got Unknown //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_0281: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) LampPrefab = Object.Instantiate<GameObject>(Prefab, Root.transform); ((Object)LampPrefab).name = "piece_iaf_lamplighter_barrel"; Transform[] array = ((IEnumerable)LampPrefab.transform).Cast<Transform>().ToArray(); foreach (Transform val in array) { Object.DestroyImmediate((Object)(object)((Component)val).gameObject); } LampPrefab.GetComponent<Woodkeeper>().IsLamp = true; GameObject resin = scene.m_prefabs.Find((GameObject p) => Object.op_Implicit((Object)(object)p) && ((Object)p).name == "Resin"); GameObject val2 = BucketModel.Create(LampPrefab.transform, scene.m_prefabs.Find((GameObject p) => Object.op_Implicit((Object)(object)p) && ((Object)p).name == "piece_chest_barrel"), iron, bronze, resin); val2.transform.localScale = Vector3.one * 0.75f; Piece component = LampPrefab.GetComponent<Piece>(); component.m_name = "$iaf_lamp"; component.m_description = "$iaf_desc_lamp"; string[] source = new string[4] { "BarrelRings", "Wood", "Bronze", "Resin" }; int[] amounts = new int[4] { 1, 12, 3, 25 }; component.m_resources = source.Select(delegate(string name, int num) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown Requirement val4 = new Requirement(); val4.m_resItem = scene.m_prefabs.Find((GameObject p) => Object.op_Implicit((Object)(object)p) && ((Object)p).name == name).GetComponent<ItemDrop>(); val4.m_amount = amounts[num]; val4.m_amountPerLevel = 0; val4.m_recover = true; return val4; }).ToArray(); using (Stream stream = typeof(Plugin).Assembly.GetManifestResourceStream("IAF.LampIcon.png")) { using MemoryStream memoryStream = new MemoryStream(); stream.CopyTo(memoryStream); Texture2D val3 = new Texture2D(2, 2, (TextureFormat)4, false); ImageConversion.LoadImage(val3, memoryStream.ToArray(), true); ((Texture)val3).filterMode = (FilterMode)1; ((Texture)val3).wrapMode = (TextureWrapMode)1; component.m_icon = Sprite.Create(val3, new Rect(0f, 0f, (float)((Texture)val3).width, (float)((Texture)val3).height), new Vector2(0.5f, 0.5f), 100f); } LampPrefab.GetComponent<Container>().m_name = component.m_name; BoxCollider component2 = LampPrefab.GetComponent<BoxCollider>(); component2.center = new Vector3(0f, 0.58f, 0f) * 0.75f; component2.size = new Vector3(1f, 1.16f, 0.9f) * 0.75f; LampPrefab.GetComponent<WearNTear>().m_fragmentRoots = (GameObject[])(object)new GameObject[1] { val2 }; } internal static void AddToHammer(ObjectDB db) { if (!Object.op_Implicit((Object)(object)db) || !Object.op_Implicit((Object)(object)Prefab)) { return; } Scuttle.AddToHammer(db); GameObject itemPrefab = db.GetItemPrefab("Hammer"); if (!Object.op_Implicit((Object)(object)itemPrefab)) { return; } PieceTable buildPieces = itemPrefab.GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces; Prefab.GetComponent<Piece>().m_enabled = MenuEnabled; if (!Object.op_Implicit((Object)(object)buildPieces)) { return; } if (MenuEnabled && !buildPieces.m_pieces.Contains(Prefab)) { buildPieces.m_pieces.Add(Prefab); } if (!MenuEnabled) { buildPieces.m_pieces.Remove(Prefab); } if (Object.op_Implicit((Object)(object)LampPrefab)) { bool flag = (hasServerSettings ? serverLampMenu : LampMenu.Value); LampPrefab.GetComponent<Piece>().m_enabled = flag; if (flag && !buildPieces.m_pieces.Contains(LampPrefab)) { buildPieces.m_pieces.Add(LampPrefab); } if (!flag) { buildPieces.m_pieces.Remove(LampPrefab); } } } } internal static class Rules { internal const float RangeSquared = 144f; internal static float RadiusSquared(float radius) { return radius * radius; } internal static string InsertFuelStatus(string hover, string status, string hint = "") { int num = hover.IndexOf('\n'); int num2 = ((num < 0) ? (-1) : hover.IndexOf('\n', num + 1)); if (num < 0) { return hover + ((status.Length > 0) ? (" " + status) : "") + hint; } int num3 = ((num2 < 0) ? hover.Length : num2); int num4 = hover.LastIndexOf(')', num3 - 1, num3 - num); if (status.Length > 0) { int num5 = ((num4 >= 0) ? num4 : num3); while (num5 > num && hover[num5 - 1] == ' ') { num5--; } string text = " " + status; hover = hover.Insert(num5, text); num3 += text.Length; } return hover.Insert(num3, hint); } internal static bool IsSupportedFire(string prefab) { switch (prefab) { default: return prefab == "bonfire"; case "fire_pit": case "fire_pit_iron": case "hearth": return true; } } internal static bool CanFuelStation(string prefab, string fuel) { if (prefab == "piece_oven" || prefab == "piece_bathtub") { return fuel == "Wood"; } return false; } internal static bool IsWood(ItemData item) { if (item != null && Object.op_Implicit((Object)(object)item.m_dropPrefab)) { return IsWoodName(((Object)item.m_dropPrefab).name); } return false; } internal static bool IsWoodName(string name) { if (!(name == "Wood") && !(name == "RoundLog")) { return name == "FineWood"; } return true; } internal static bool CanFuel(string prefab, string requiredFuel) { if (IsSupportedFire(prefab)) { return IsWoodName(requiredFuel); } return false; } internal static bool CanLampFuel(string prefab, string requiredFuel) { switch (requiredFuel) { case "Resin": switch (prefab) { default: return prefab == "piece_snowlantern"; case "piece_groundtorch_wood": case "piece_groundtorch": case "piece_walltorch": case "piece_jackoturnip": return true; } case "Guck": return prefab == "piece_groundtorch_green"; case "GreydwarfEye": return prefab == "piece_groundtorch_blue"; default: return false; } } internal static bool CanScuttleFuel(string prefab, string fuel) { if (fuel == "Coal") { if (!(prefab == "piece_brazierfloor01")) { return prefab == "piece_brazierceiling01"; } return true; } if (fuel == "GreydwarfEye") { return prefab == "piece_brazierfloor02"; } return false; } internal static string ConnectionName(string prefab, string fallback) { return prefab switch { "piece_brazierfloor01" => "Standing Brazier", "piece_brazierceiling01" => "Hanging Brazier", "piece_brazierfloor02" => "Standing Blue Brazier", "piece_oven" => "Stone Oven", "piece_bathtub" => "Hot Tub", "fire_pit" => "Camp fire", "fire_pit_iron" => "Iron fire pit", "hearth" => "Hearth", "bonfire" => "Bonfire", "piece_groundtorch_wood" => "Standing Wood Torch", "piece_groundtorch" => "Standing Iron Torch", "piece_groundtorch_blue" => "Standing Blue Torch", "piece_groundtorch_green" => "Standing Green Torch", "piece_walltorch" => "Sconce", "piece_jackoturnip" => "Jack-o-turnip", "piece_snowlantern" => "Snow lantern", _ => fallback, }; } internal static bool CanConsumeFuel(int kind, string required, string stored) { if (kind == 0) { if (IsWoodName(required)) { return IsWoodName(stored); } return false; } if (string.IsNullOrEmpty(required) || required != stored) { return false; } switch (kind) { case 1: if (!(required == "Resin") && !(required == "Guck")) { return required == "GreydwarfEye"; } return true; case 2: if (!(required == "Coal")) { return required == "GreydwarfEye"; } return true; default: return false; } } internal static int WoodPriority(ItemData item) { if (!(((Object)item.m_dropPrefab).name == "Wood")) { if (!(((Object)item.m_dropPrefab).name == "RoundLog")) { return 2; } return 1; } return 0; } internal static int Room(float capacity, float current) { if (float.IsNaN(capacity) || float.IsNaN(current) || float.IsInfinity(capacity) || float.IsInfinity(current)) { return 0; } return Math.Max(0, (int)Math.Floor(capacity - Math.Max(0f, current))); } internal static float HourlyRate(float secondsPerFuel) { if (!(secondsPerFuel > 0f) || float.IsInfinity(secondsPerFuel)) { return 0f; } return 3600f / secondsPerFuel; } } public sealed class Woodkeeper : MonoBehaviour { internal const string DisabledKey = "woodkeeper_auto_fuel_disabled"; internal const string ToggleRpc = "Woodkeeper_ToggleAutoFuel"; private const string AxeKey = "woodkeeper_axe"; private const string ReturnedKey = "woodkeeper_axe_returned"; public bool IsLamp; public bool IsScuttle; internal readonly Dictionary<string, float> Rates = new Dictionary<string, float>(); private static readonly HashSet<Woodkeeper> Stacks = new HashSet<Woodkeeper>(); private static readonly MethodInfo Refresh = AccessTools.Method(typeof(Container), "CheckForChanges", (Type[])null, (Type[])null); private static readonly MethodInfo SettleFire = AccessTools.Method(typeof(Fireplace), "UpdateFireplace", (Type[])null, (Type[])null); private static Fireplace[] fires = (Fireplace[])(object)new Fireplace[0]; private static float nextDiscovery; private static readonly Dictionary<Fireplace, Woodkeeper> suppliers = new Dictionary<Fireplace, Woodkeeper>(); private Container container; private ZNetView view; private float nextScan; private readonly Dictionary<ZDOID, float> ownershipSettling = new Dictionary<ZDOID, float>(); private static Vector3 supplierRadii; internal int Kind { get { if (!IsScuttle) { if (!IsLamp) { return 0; } return 1; } return 2; } } internal string DisplayName { get { if (!IsScuttle) { if (!IsLamp) { return "Firewood Rack"; } return "Lamplighter's Barrel"; } return "Brazier Scuttle"; } } private void Awake() { container = ((Component)this).GetComponent<Container>(); view = ((Component)this).GetComponent<ZNetView>(); WearNTear component = ((Component)this).GetComponent<WearNTear>(); if (Object.op_Implicit((Object)(object)component)) { component.m_onDestroyed = (Action)Delegate.Combine(component.m_onDestroyed, new Action(ReturnAxe)); } } private void OnEnable() { Stacks.Add(this); suppliers.Clear(); nextScan = Time.unscaledTime + Random.Range(0f, 5f); } private void OnDisable() { Stacks.Remove(this); suppliers.Clear(); } private void ReturnAxe() { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)view) || !view.IsValid() || !view.IsOwner()) { return; } ZDO zDO = view.GetZDO(); if (zDO.GetBool("woodkeeper_axe_returned", false)) { return; } byte[] byteArray = zDO.GetByteArray("woodkeeper_axe", (byte[])null); if (byteArray != null && byteArray.Length != 0) { Inventory val = new Inventory("Woodkeeper axe", (Sprite)null, 1, 1); val.Load(new ZPackage(byteArray)); ItemData val2 = val.GetAllItems().FirstOrDefault(); if (val2 == null) { throw new InvalidOperationException("Woodkeeper: saved axe could not be restored."); } ItemDrop.DropItem(val2, 1, ((Component)this).transform.position + Vector3.up * 0.7f, Quaternion.identity); zDO.Set("woodkeeper_axe_returned", true); } } private static bool Live(Woodkeeper stack) { if (Object.op_Implicit((Object)(object)stack) && Object.op_Implicit((Object)(object)stack.view) && stack.view.IsValid() && Object.op_Implicit((Object)(object)stack.container)) { return stack.container.GetInventory() != null; } return false; } internal static bool InRange(Fireplace fire) { return Object.op_Implicit((Object)(object)Supplier(fire)); } internal static Woodkeeper Supplier(Fireplace fire) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)fire) || !Plugin.ConfigReady || !Scuttle.Ready) { return ComputeSupplier(fire); } Targets(); Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(Plugin.Radius, Plugin.LampRadius, Scuttle.Radius); if (supplierRadii != val) { suppliers.Clear(); supplierRadii = val; } if (suppliers.TryGetValue(fire, out var value) && (!Object.op_Implicit((Object)(object)value) || Live(value))) { return value; } value = ComputeSupplier(fire); suppliers[fire] = value; return value; } private static Woodkeeper ComputeSupplier(Fireplace fire) { //IL_00b4: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)fire) || !fire.m_canRefill || fire.m_infiniteFuel || !Object.op_Implicit((Object)(object)fire.m_fuelItem) || (!Rules.CanFuel(Utils.GetPrefabName(((Component)fire).gameObject), ((Object)fire.m_fuelItem).name) && !Rules.CanLampFuel(Utils.GetPrefabName(((Component)fire).gameObject), ((Object)fire.m_fuelItem).name) && !Rules.CanScuttleFuel(Utils.GetPrefabName(((Component)fire).gameObject), ((Object)fire.m_fuelItem).name))) { return null; } ZNetView component = ((Component)fire).GetComponent<ZNetView>(); Piece component2 = ((Component)fire).GetComponent<Piece>(); if (!Object.op_Implicit((Object)(object)component) || !component.IsValid() || !Object.op_Implicit((Object)(object)component2) || !component2.IsPlacedByPlayer()) { return null; } return Nearest(((Component)fire).transform.position, Rules.CanScuttleFuel(Utils.GetPrefabName(((Component)fire).gameObject), ((Object)fire.m_fuelItem).name) ? 2 : (Rules.CanLampFuel(Utils.GetPrefabName(((Component)fire).gameObject), ((Object)fire.m_fuelItem).name) ? 1 : 0)); } internal static Woodkeeper Nearest(Vector3 position, bool lamp) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return Nearest(position, lamp ? 1 : 0); } internal static Woodkeeper Nearest(Vector3 position, int kind) { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) if (!Plugin.ConfigReady || (kind == 2 && !Scuttle.Ready)) { return null; } Woodkeeper woodkeeper = null; float num = Rules.RadiusSquared(kind switch { 1 => Plugin.LampRadius, 2 => Scuttle.Radius, _ => Plugin.Radius, }); foreach (Woodkeeper stack in Stacks) { if (Object.op_Implicit((Object)(object)stack) && stack.Kind == kind && Live(stack)) { Vector3 val = ((Component)stack).transform.position - position; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; if (!(sqrMagnitude > num) && (!Object.op_Implicit((Object)(object)woodkeeper) || sqrMagnitude != num || string.CompareOrdinal(((object)Unsafe.As<ZDOID, ZDOID>(ref stack.view.GetZDO().m_uid)/*cast due to .constrained prefix*/).ToString(), ((object)Unsafe.As<ZDOID, ZDOID>(ref woodkeeper.view.GetZDO().m_uid)/*cast due to .constrained prefix*/).ToString()) < 0)) { woodkeeper = stack; num = sqrMagnitude; } } } return woodkeeper; } internal SortedDictionary<string, int> Connections(out float woodPerHour, bool localize = true) { woodPerHour = 0f; Rates.Clear(); Dictionary<string, float> rates = Rates; Dictionary<string, float> rates2 = Rates; Dictionary<string, float> rates3 = Rates; float num = (Rates["GreydwarfEye"] = 0f); float num3 = (rates3["Guck"] = num); float value = (rates2["Resin"] = num3); rates["Coal"] = value; SortedDictionary<string, int> sortedDictionary = new SortedDictionary<string, int>(); Fireplace[] array = Targets(); foreach (Fireplace val in array) { if ((Object)(object)Supplier(val) != (Object)(object)this || ((Component)val).GetComponent<ZNetView>().GetZDO().GetBool("woodkeeper_auto_fuel_disabled", false)) { continue; } string fallback = ((Localization.instance != null) ? Localization.instance.Localize(val.m_name) : val.m_name); fallback = (localize ? L10n.ConnectionName(Utils.GetPrefabName(((Component)val).gameObject), fallback) : Rules.ConnectionName(Utils.GetPrefabName(((Component)val).gameObject), fallback)); if (!sortedDictionary.ContainsKey(fallback)) { sortedDictionary[fallback] = 0; } sortedDictionary[fallback]++; if (val.IsBurning() && ((Component)val).GetComponent<ZNetView>().GetZDO().GetInt("state", 1) == 1) { float num6 = Rules.HourlyRate(val.m_secPerFuel); woodPerHour += num6; if (Kind != 0) { Rates[((Object)val.m_fuelItem).name] += num6; } } } ExtraWoodTargets.Connections(this, sortedDictionary, ref woodPerHour, localize); return sortedDictionary; } private bool CanSupply(Component target, out ZNetView targetView) { targetView = target.GetComponent<ZNetView>(); Piece component = target.GetComponent<Piece>(); if (Object.op_Implicit((Object)(object)targetView) && targetView.IsValid() && Object.op_Implicit((Object)(object)component) && component.IsPlacedByPlayer() && !targetView.GetZDO().GetBool("woodkeeper_auto_fuel_disabled", false) && (Object)(object)Supplier((Fireplace)(object)((target is Fireplace) ? target : null)) == (Object)(object)this && view.IsOwner()) { return !container.IsInUse(); } return false; } internal bool OwnTarget(ZNetView target) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) ZDOID uid = target.GetZDO().m_uid; if (!target.IsOwner()) { target.ClaimOwnership(); ownershipSettling[uid] = Time.unscaledTime + 5f; return false; } if (ownershipSettling.TryGetValue(uid, out var value)) { if (Time.unscaledTime < value) { return false; } ownershipSettling.Remove(uid); } if (target.IsOwner() && view.IsOwner() && !container.IsInUse()) { return !target.GetZDO().GetBool("woodkeeper_auto_fuel_disabled", false); } return false; } internal int TakeWood(int wanted, out bool cheated) { cheated = false; int num = 0; Inventory inventory = container.GetInventory(); foreach (ItemData item in (from i in inventory.GetAllItems() where Rules.IsWood(i) && Rules.CanConsumeFuel(0, "Wood", ((Object)i.m_dropPrefab).name) select i).OrderBy(Rules.WoodPriority).ToList()) { int num2 = Math.Min(item.m_stack, wanted - num); if (num2 > 0 && inventory.RemoveItem(item, num2)) { num += num2; cheated |= item.m_cheated; } if (num >= wanted) { break; } } return num; } private void Update() { if (Time.unscaledTime < nextScan) { return; } nextScan = Time.unscaledTime + 5f; if (!Live(this) || !view.IsOwner() || container.IsInUse()) { return; } try { Scan(); } catch (Exception ex) { Plugin.Log.LogError((object)("Woodkeeper fueling scan failed: " + ex)); } } internal static Fireplace[] Targets() { if (Time.unscaledTime >= nextDiscovery) { fires = (from f in Object.FindObjectsByType<Fireplace>((FindObjectsSortMode)0) where Object.op_Implicit((Object)(object)f) && Object.op_Implicit((Object)(object)((Component)f).GetComponent<ZNetView>()) && ((Component)f).GetComponent<ZNetView>().IsValid() orderby ((Component)f).GetComponent<ZNetView>().GetZDO().GetFloat("fuel", 0f) select f).ToArray(); nextDiscovery = Time.unscaledTime + 5f; suppliers.Clear(); } return fires; } private void Scan() { //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Expected O, but got Unknown //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Expected O, but got Unknown //IL_02b2: Unknown result type (might be due to invalid IL or missing references) Targets(); Refresh.Invoke(container, null); if (!container.GetInventory().GetAllItems().Any(delegate(ItemData i) { if (Kind == 0) { return Rules.IsWood(i); } if (Object.op_Implicit((Object)(object)i.m_dropPrefab)) { if (!IsScuttle) { if (!(((Object)i.m_dropPrefab).name == "Resin") && !(((Object)i.m_dropPrefab).name == "Guck")) { return ((Object)i.m_dropPrefab).name == "GreydwarfEye"; } return true; } if (!(((Object)i.m_dropPrefab).name == "Coal")) { return ((Object)i.m_dropPrefab).name == "GreydwarfEye"; } return true; } return false; })) { return; } ExtraWoodTargets.Fill(this); Fireplace[] array = fires; foreach (Fireplace val in array) { if (!Object.op_Implicit((Object)(object)val) || (Object)(object)Supplier(val) != (Object)(object)this || !CanSupply((Component)(object)val, out var targetView) || Rules.Room(val.m_maxFuel, targetView.GetZDO().GetFloat("fuel", 0f)) == 0 || !OwnTarget(targetView) || !CanSupply((Component)(object)val, out targetView)) { continue; } SettleFire.Invoke(val, null); if (!CanSupply((Component)(object)val, out targetView) || !targetView.IsOwner()) { continue; } long ticks = ZNet.instance.GetTime().Ticks; long num2 = targetView.GetZDO().GetLong("iaf_last_fuel_transfer", 0L); if (num2 > 0 && ticks >= num2 && (double)(ticks - num2) / 10000000.0 < (double)val.m_secPerFuel) { continue; } float num3 = targetView.GetZDO().GetFloat("fuel", 0f); int num4 = Rules.Room(val.m_maxFuel, num3); if (num4 == 0) { continue; } ZPackage val2 = new ZPackage(); container.GetInventory().Save(val2); int num5 = 0; Diagnostics.Context = "fuel:" + Diagnostics.Id((Component)(object)this) + "->" + Diagnostics.Id((Component)(object)val); try { num5 = ((Kind != 0) ? TakeMatchingFuel(((Object)val.m_fuelItem).name, num4) : TakeWood(num4, out var _)); if (num5 != 0) { if (!targetView.IsOwner() || !view.IsOwner()) { throw new InvalidOperationException("Fuel transfer ownership changed."); } targetView.GetZDO().Set(ZDOVars.s_fuel, num3 + (float)num5); if (Math.Abs(targetView.GetZDO().GetFloat(ZDOVars.s_fuel, 0f) - (num3 + (float)num5)) > 0.001f) { throw new InvalidOperationException("Fuel deposit was not retained."); } targetView.GetZDO().Set("iaf_last_fuel_transfer", ticks); Diagnostics.Transfer(this, (Component)(object)val, ((Object)val.m_fuelItem).name, num5, num3, num3 + (float)num5, val.m_secPerFuel); Plugin.Log.LogInfo((object)string.Concat("Fuel transfer: ", DisplayName, " -> ", Utils.GetPrefabName(((Component)val).gameObject), " ", targetView.GetZDO().m_uid, ": ", num5, " ", ((Object)val.m_fuelItem).name, ", fuel ", num3.ToString("0.###"), " -> ", (num3 + (float)num5).ToString("0.###"))); } } catch (Exception ex) { if (Object.op_Implicit((Object)(object)targetView) && targetView.IsValid() && targetView.IsOwner()) { targetView.GetZDO().Set(ZDOVars.s_fuel, num3); } container.GetInventory().Load(new ZPackage(val2.GetArray())); Plugin.Log.LogError((object)("Fuel transfer rolled back; inventory restored: " + ex)); Diagnostics.Write(true, "transfer_rollback", (Component)(object)val, "supplier", Diagnostics.Id((Component)(object)this), "error", ex.ToString()); } finally { Diagnostics.Context = "unattributed"; } } } private int TakeMatchingFuel(string required, int wanted) { int num = 0; Inventory inventory = container.GetInventory(); foreach (ItemData item in (from i in inventory.GetAllItems() where Object.op_Implicit((Object)(object)i.m_dropPrefab) && Rules.CanConsumeFuel(Kind, required, ((Object)i.m_dropPrefab).name) select i).ToList()) { int num2 = Math.Min(item.m_stack, wanted - num); if (num2 > 0 && inventory.RemoveItem(item, num2)) { num += num2; } if (num >= wanted) { break; } } return num; } } internal static class RackModel { internal sealed class Geometry { internal readonly List<Vector3> vertices = new List<Vector3>(); internal readonly List<Vector2> uv = new List<Vector2>(); internal readonly List<int>[] triangles = new List<int>[3] { new List<int>(), new List<int>(), new List<int>() }; internal void Face(int material, params Vector3[] points) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) int count = vertices.Count; vertices.AddRange(points); for (int i = 0; i < points.Length; i++) { uv.Add(new Vector2((float)((i != 0 && i != 3) ? 1 : 0), (float)((i >= 2) ? 1 : 0))); } for (int j = 1; j < points.Length - 1; j++) { triangles[material].Add(count); triangles[material].Add(count + j); triangles[material].Add(count + j + 1); } } internal void Bar(Vector3 a, Vector3 b, float width, int material = 2) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: 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_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: 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_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: 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_0162: 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_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) Vector3 val = b - a; Vector3 normalized = ((Vector3)(ref val)).normalized; Vector3 val2 = Vector3.Cross(normalized, (Mathf.Abs(normalized.y) > 0.9f) ? Vector3.forward : Vector3.up); Vector3 val3 = ((Vector3)(ref val2)).normalized * width * 0.5f; Vector3 val4 = Vector3.Cross(normalized, val3); Vector3 val5 = ((Vector3)(ref val4)).normalized * width * 0.5f; Vector3[] array = (Vector3[])(object)new Vector3[4] { val3 + val5, -val3 + val5, -val3 - val5, val3 - val5 }; for (int i = 0; i < 4; i++) { int num = (i + 1) % 4; Face(material, a + array[i], a + array[num], b + array[num], b + array[i]); } Face(material, a + array[3], a + array[2], a + array[1], a + array[0]); Face(material, b + array[0], b + array[1], b + array[2], b + array[3]); } internal void Turned(Vector3 center, float[] heights, float[] radii, int material) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) Vector3[][] array = new Vector3[heights.Length][]; for (int i = 0; i < heights.Length; i++) { array[i] = (Vector3[])(object)new Vector3[8]; for (int j = 0; j < 8; j++) { float num = (float)j * (float)Math.PI / 4f; ref Vector3 reference = ref array[i][j]; reference = center + new Vector3(Mathf.Cos(num) * radii[i], heights[i], Mathf.Sin(num) * radii[i]); } } for (int k = 0; k < array.Length - 1; k++) { for (int l = 0; l < 8; l++) { int num2 = (l + 1) % 8; Face(material, array[k][l], array[k + 1][l], array[k + 1][num2], array[k][num2]); } } Face(material, array[0]); Face(material, array[^1].Reverse().ToArray()); } internal void Cap(Vector3 center) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) Turned(center, new float[8] { -0.065f, -0.04f, -0.02f, 0f, 0.025f, 0.06f, 0.095f, 0.115f }, new float[8] { 0.055f, 0.055f, 0.03f, 0.027f, 0.054f, 0.069f, 0.05f, 0.008f }, 0); } } private static void AddToolSet(Geometry g) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0063: 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) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_054d: Unknown result type (might be due to invalid IL or missing references) //IL_0552: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_0225: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_02a1: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_0577: Unknown result type (might be due to invalid IL or missing references) //IL_0578: Unknown result type (might be due to invalid IL or missing references) //IL_0582: Unknown result type (might be due to invalid IL or missing references) //IL_0587: Unknown result type (might be due to invalid IL or missing references) //IL_0588: Unknown result type (might be due to invalid IL or missing references) //IL_058d: Unknown result type (might be due to invalid IL or missing references) //IL_0592: Unknown result type (might be due to invalid IL or missing references) //IL_0597: Unknown result type (might be due to invalid IL or missing references) //IL_0599: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_02d8: Unknown result type (might be due to invalid IL or missing references) //IL_02e2: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_02fb: Unknown result type (might be due to invalid IL or missing references) //IL_0300: Unknown result type (might be due to invalid IL or missing references) //IL_0302: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Unknown result type (might be due to invalid IL or missing references) //IL_03da: Unknown result type (might be due to invalid IL or missing references) //IL_03dc: Unknown result type (might be due to invalid IL or missing references) //IL_03e6: Unknown result type (might be due to invalid IL or missing references) //IL_03ed: Unknown result type (might be due to invalid IL or missing references) //IL_03f2: Unknown result type (might be due to invalid IL or missing references) //IL_03f7: Unknown result type (might be due to invalid IL or missing references) //IL_03fa: Unknown result type (might be due to invalid IL or missing references) //IL_0425: Unknown result type (might be due to invalid IL or missing references) //IL_0427: Unknown result type (might be due to invalid IL or missing references) //IL_0431: Unknown result type (might be due to invalid IL or missing references) //IL_0436: Unknown result type (might be due to invalid IL or missing references) //IL_043b: Unknown result type (might be due to invalid IL or missing references) //IL_043d: Unknown result type (might be due to invalid IL or missing references) //IL_0447: Unknown result type (might be due to invalid IL or missing references) //IL_044c: Unknown result type (might be due to invalid IL or missing references) //IL_045c: Unknown result type (might be due to invalid IL or missing references) //IL_045e: Unknown result type (might be due to invalid IL or missing references) //IL_0468: Unknown result type (might be due to invalid IL or missing references) //IL_046d: Unknown result type (might be due to invalid IL or missing references) //IL_0472: Unknown result type (might be due to invalid IL or missing references) //IL_0474: Unknown result type (might be due to invalid IL or missing references) //IL_0476: Unknown result type (might be due to invalid IL or missing references) //IL_0480: Unknown result type (might be due to invalid IL or missing references) //IL_0485: Unknown result type (might be due to invalid IL or missing references) //IL_048a: Unknown result type (might be due to invalid IL or missing references) //IL_0494: Unknown result type (might be due to invalid IL or missing references) //IL_049b: Unknown result type (might be due to invalid IL or missing references) //IL_04a0: Unknown result type (might be due to invalid IL or missing references) //IL_04a5: Unknown result type (might be due to invalid IL or missing references) //IL_04a7: Unknown result type (might be due to invalid IL or missing references) //IL_04a9: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Unknown result type (might be due to invalid IL or missing references) //IL_04b8: Unknown result type (might be due to invalid IL or missing references) //IL_04bd: Unknown result type (might be due to invalid IL or missing references) //IL_04c7: Unknown result type (might be due to invalid IL or missing references) //IL_04ce: Unknown result type (might be due to invalid IL or missing references) //IL_04d3: Unknown result type (might be due to invalid IL or missing references) //IL_04d8: Unknown result type (might be due to invalid IL or missing references) //IL_04db: Unknown result type (might be due to invalid IL or missing references) //IL_04dd: Unknown result type (might be due to invalid IL or missing references) //IL_04eb: Unknown result type (might be due to invalid IL or missing references) //IL_04ed: Unknown result type (might be due to invalid IL or missing references) //IL_04fb: Unknown result type (might be due to invalid IL or missing references) //IL_04fd: Unknown result type (might be due to invalid IL or missing references) //IL_04ff: Unknown result type (might be due to invalid IL or missing references) //IL_050d: Unknown result type (might be due to invalid IL or missing references) //IL_0512: Unknown result type (might be due to invalid IL or missing references) //IL_033a: Unknown result type (might be due to invalid IL or missing references) //IL_033c: Unknown result type (might be due to invalid IL or missing references) //IL_034c: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_0356: Unknown result type (might be due to invalid IL or missing references) //IL_0360: Unknown result type (might be due to invalid IL or missing references) //IL_0365: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_036d: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_0387: Unknown result type (might be due to invalid IL or missing references) //IL_038c: Unknown result type (might be due to invalid IL or missing references) Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(1f, 0f, 0f); int count = g.vertices.Count; g.Turned(val, new float[4] { 0.015f, 0.035f, 0.07f, 0.105f }, new float[4] { 0.21f, 0.21f, 0.17f, 0.065f }, 2); g.Bar(val + Vector3.up * 0.08f, val + Vector3.up * 1.03f, 0.035f); g.Turned(val, new float[3] { 1.01f, 1.045f, 1.08f }, new float[3] { 0.035f, 0.047f, 0.015f }, 0); Vector3 val2 = default(Vector3); for (int i = 0; i < 4; i++) { float num = ((float)i * 90f + 45f) * ((float)Math.PI / 180f); ((Vector3)(ref val2))..ctor(Mathf.Cos(num), 0f, Mathf.Sin(num)); Vector3 val3 = val + val2 * 0.145f; g.Bar(val + Vector3.up * 0.94f, val3 + Vector3.up * 0.94f, 0.027f); g.Bar(val3 + Vector3.up * 0.94f, val3 + Vector3.up * 0.97f, 0.027f); if (i != 3) { g.Turned(val3, new float[11] { 0.96f, 0.975f, 0.995f, 1.025f, 1.06f, 1.075f, 1.09f, 1.105f, 1.135f, 1.16f, 1.175f }, new float[11] { 0.035f, 0.035f, 0.02f, 0.03f, 0.02f, 0.027f, 0.018f, 0.03f, 0.042f, 0.03f, 0.008f }, 0); g.Bar(val3 + Vector3.up * 0.95f, val3 + Vector3.up * 0.23f, 0.018f); } switch (i) { case 0: g.Turned(val3, new float[2] { 0.12f, 0.23f }, new float[2] { 0.003f, 0.015f }, 2); g.Bar(val3 + Vector3.up * 0.25f, val3 + Vector3.up * 0.18f + val2 * 0.06f, 0.018f); g.Bar(val3 + Vector3.up * 0.18f + val2 * 0.06f, val3 + Vector3.up * 0.205f + val2 * 0.09f, 0.013f); continue; case 1: AddShovel(g, val3, val2); continue; case 2: { g.Bar(val3 + Vector3.left * 0.06f + Vector3.up * 0.26f, val3 + Vector3.right * 0.06f + Vector3.up * 0.26f, 0.04f, 0); for (int j = 0; j < 7; j++) { Vector3 val4 = val3 + Vector3.right * ((float)(j - 3) * 0.018f) + Vector3.up * 0.24f; g.Bar(val4, val4 + Vector3.down * (0.11f + (float)(j % 2) * 0.012f), 0.014f, 1); } continue; } } float[] array = new float[2] { -1f, 1f }; foreach (float num2 in array) { Vector3 val5 = val3 + Vector3.right * 0.05f * num2; g.Turned(val5, new float[7] { 0.96f, 0.98f, 1.02f, 1.07f, 1.105f, 1.14f, 1.17f }, new float[7] { 0.026f, 0.026f, 0.019f, 0.024f, 0.018f, 0.031f, 0.008f }, 0); g.Bar(val5 + Vector3.up * 0.96f, val3 + Vector3.up * 0.54f, 0.016f); Vector3 a = val3 + Vector3.up * 0.54f; Vector3 val6 = val3 + Vector3.up * 0.36f + Vector3.right * 0.065f * num2; Vector3 val7 = val3 + Vector3.up * 0.16f + Vector3.right * 0.035f * num2; g.Bar(a, val6, 0.016f); g.Bar(val6, val7, 0.016f); g.Bar(val7, val7 + Vector3.right * ((0f - num2) * 0.018f), 0.02f); } } Quaternion val8 = Quaternion.Euler(0f, 45f, 0f); Vector3 val9 = default(Vector3); ((Vector3)(ref val9))..ctor(0f, 0f, -0.25f); for (int l = count; l < g.vertices.Count; l++) { g.vertices[l] = val + val8 * (g.vertices[l] - val) + val9; } } internal static void AddShovel(Geometry g, Vector3 pos, Vector3 radial) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0027: 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_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: 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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: 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_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: 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_00fe: 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_010f: 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_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0162: 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_016f: 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_017a: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02aa: Unknown result type (might be due to invalid IL or missing references) //IL_02af: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Unknown result type (might be due to invalid IL or missing references) //IL_02d1: Unknown result type (might be due to invalid IL or missing references) //IL_02d7: Unknown result type (might be due to invalid IL or missing references) //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_02ee: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02fc: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_0380: Unknown result type (might be due to invalid IL or missing references) //IL_0385: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Unknown result type (might be due to invalid IL or missing references) //IL_03a0: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_03c7: Unknown result type (might be due to invalid IL or missing references) //IL_03cc: Unknown result type (might be due to invalid IL or missing references) //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03e7: Unknown result type (might be due to invalid IL or missing references) //IL_03ee: Unknown result type (might be due to invalid IL or missing references) //IL_03f8: Unknown result type (might be due to invalid IL or missing references) //IL_03fd: Unknown result type (might be due to invalid IL or missing references) //IL_0402: Unknown result type (might be due to invalid IL or missing references) Vector3 val = Vector3.Cross(Vector3.up, radial); Vector3 normalized = ((Vector3)(ref val)).normalized; Vector3 val2 = pos + Vector3.up * 0.3f - normalized * 0.065f; Vector3 val3 = pos + Vector3.up * 0.3f + normalized * 0.065f; Vector3 val4 = pos + Vector3.up * 0.105f - normalized * 0.065f + radial * 0.015f; Vector3 val5 = pos + Vector3.up * 0.105f + normalized * 0.065f + radial * 0.015f; Vector3 val6 = val4 - normalized * 0.03f + radial * 0.04f; Vector3 val7 = val5 + normalized * 0.03f + radial * 0.04f; Vector3 val8 = val2 - normalized * 0.02f + radial * 0.035f; Vector3 val9 = val3 + normalized * 0.02f + radial * 0.035f; Vector3[][] array = new Vector3[4][] { (Vector3[])(object)new Vector3[4] { val2, val3, val5, val4 }, (Vector3[])(object)new Vector3[4] { val8, val2, val4, val6 }, (Vector3[])(object)new Vector3[4] { val3, val9, val7, val5 }, (Vector3[])(object)new Vector3[4] { pos + Vector3.up * 0.35f - normalized * 0.022f, pos + Vector3.up * 0.35f + normalized * 0.022f, val3, val2 } }; Vector3[][] array2 = array; foreach (Vector3[] array3 in array2) { g.Face(2, array3); g.Face(2, (from p in array3.Reverse() select p - radial * 0.008f).ToArray()); for (int num = 0; num < array3.Length; num++) { int num2 = (num + 1) % array3.Length; g.Face(2, array3[num], array3[num2], array3[num2] - radial * 0.008f, array3[num] - radial * 0.008f); } } } internal static Material Pick(GameObject source, params string[] hints) { Material[] array = (from m in source.GetComponentsInChildren<MeshRenderer>(true).SelectMany((MeshRenderer r) => ((Renderer)r).sharedMaterials) where Object.op_Implicit((Object)(object)m) && ((Object)m).name.IndexOf("fire", StringComparison.OrdinalIgnoreCase) < 0 && ((Object)m).name.IndexOf("flame", StringComparison.OrdinalIgnoreCase) < 0 select m).Distinct().ToArray(); foreach (string hint in hints) { Func<Material, bool> predicate = (Material m) => ((Object)m).name.IndexOf(hint, StringComparison.OrdinalIgnoreCase) >= 0; Material val = array.FirstOrDefault(predicate); if (Object.op_Implicit((Object)(object)val)) { return val; } } if (array.Length == 0) { throw new InvalidOperationException("Woodkeeper: vanilla model materials missing."); } return array[0]; } internal static Material BarrelMetal(GameObject barrel) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown return new Material(Pick(barrel, "barrelplayer")); } internal static void MapBarrelMetalUV(Geometry geometry, params int[] slots) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) HashSet<int> hashSet = new HashSet<int>(); foreach (int num in slots) { foreach (int item in geometry.triangles[num]) { if (hashSet.Add(item)) { Vector2 val = geometry.uv[item]; geometry.uv[item] = new Vector2(0.76f + val.x * 0.2f, 0.04f + val.y * 0.92f); } } } } internal static GameObject Create(Transform parent, GameObject ironStack, GameObject bronzeStack, GameObject barrel) { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_0397: Unknown result type (might be due to invalid IL or missing references) //IL_03a8: Unknown result type (might be due to invalid IL or missing references) //IL_03e6: Unknown result type (might be due to invalid IL or missing references) //IL_03ed: Expected O, but got Unknown //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0458: Unknown result type (might be due to invalid IL or missing references) //IL_045f: Expected O, but got Unknown //IL_04b7: Unknown result type (might be due to invalid IL or missing references) //IL_04be: Expected O, but got Unknown //IL_04c1: Unknown result type (might be due to invalid IL or missing references) //IL_04cb: Unknown result type (might be due to invalid IL or missing references) //IL_04d7: Unknown result type (might be due to invalid IL or missing references) //IL_04de: Expected O, but got Unknown //IL_050e: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: 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_01d3: 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) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Unknown result type (might be due to invalid IL or missing references) //IL_026b: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_027e: Unknown result type (might be due to invalid IL or missing references) //IL_0283: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Unknown result type (might be due to invalid IL or missing references) //IL_0307: Unknown result type (might be due to invalid IL or missing references) //IL_0321: Unknown result type (might be due to invalid IL or missing references) Geometry geometry = new Geometry(); float[] array = new float[2] { -0.4f, 0.4f }; Vector3 a = default(Vector3); Vector3 val = default(Vector3); Vector3 val2 = default(Vector3); Vector3 a2 = default(Vector3); Vector3 val4 = default(Vector3); foreach (float num in array) { float[] array2 = new float[2] { -0.7f, 0.7f }; foreach (float num2 in array2) { geometry.Bar(new Vector3(num2, 0.76f, num), new Vector3(num2, 0.88f, num), 0.065f); geometry.Cap(new Vector3(num2, 0.88f, num)); geometry.Bar(new Vector3(num2, 0.765f, num), new Vector3(num2, 0.8f, num), 0.082f, 0); } ((Vector3)(ref a))..ctor(-0.7f, 0.8f, num); for (int k = 1; k <= 10; k++) { float num3 = (float)k / 10f; ((Vector3)(ref val))..ctor(-0.7f + 1.4f * num3, 0.28f + 0.52f * Mathf.Pow(2f * num3 - 1f, 2f), num); geometry.Bar(a, val, 0.065f); a = val; } float[] array3 = new float[2] { -0.47f, 0.47f }; foreach (float num4 in array3) { ((Vector3)(ref val2))..ctor(num4 * 1.13f, 0.035f, num * 1.22f); float num5 = 0.28f + 0.52f * Mathf.Pow(num4 / 0.7f, 2f); geometry.Bar(val2, new Vector3(num4, num5 + 0.05f, num), 0.075f); geometry.Bar(val2 + Vector3.left * 0.075f, val2 + Vector3.right * 0.075f, 0.035f); geometry.Turned(new Vector3(val2.x, 0f, val2.z), new float[6] { 0.018f, 0.032f, 0.045f, 0.06f, 0.083f, 0.098f }, new float[6] { 0.095f, 0.095f, 0.08f, 0.055f, 0.05f, 0.041f }, 0); Vector3 val3 = new Vector3(num4, num5 + 0.05f, num) - val2; Vector3 normalized = ((Vector3)(ref val3)).normalized; geometry.Bar(val2 + normalized * 0.1f, val2 + normalized * 0.145f, 0.09f, 0); } ((Vector3)(ref a2))..ctor(-0.49f, 0.16f, num); for (int m = 1; m <= 16; m++) { float num6 = (float)m / 16f; ((Vector3)(ref val4))..ctor(-0.49f + 0.98f * num6, 0.16f + 0.075f * Mathf.Sin(num6 * (float)Math.PI), num); geometry.Bar(a2, val4, 0.03f); a2 = val4; } geometry.Turned(new Vector3(0f, 0f, num), new float[3] { 0.22f, 0.245f, 0.27f }, new float[3] { 0.018f, 0.034f, 0.012f }, 0); } float[] array4 = new float[2] { -0.45f, 0.45f }; foreach (float num7 in array4) { geometry.Bar(new Vector3(num7, 0.32f, -0.4f), new Vector3(num7, 0.32f, 0.4f), 0.055f); } AddToolSet(geometry); MapBarrelMetalUV(geometry, 1, 2); Mesh val5 = new Mesh(); ((Object)val5).name = "Woodkeeper_IronRack"; val5.SetVertices(geometry.vertices); val5.SetUVs(0, geometry.uv); val5.subMeshCount = 3; for (int num8 = 0; num8 < 3; num8++) { val5.SetTriangles(geometry.triangles[num8], num8); } val5.RecalculateNormals(); val5.RecalculateTangents(); val5.RecalculateBounds(); GameObject val6 = new GameObject("IronRack"); val6.transform.SetParent(parent, false); val6.layer = ((Component)parent).gameObject.layer; val6.AddComponent<MeshFilter>().sharedMesh = val5; Material val7 = BarrelMetal(barrel); Material val8 = new Material(Pick(bronzeStack, "bronze", "metal")); val8.mainTextureScale *= 0.65f; Material val9 = new Material(val7); ((Object)val9).name = "Woodkeeper_BrushBristles"; if (val9.HasProperty("_Color")) { val9.SetColor("_Color", new Color(0.18f, 0.18f, 0.17f)); } ((Renderer)val6.AddComponent<MeshRenderer>()).sharedMaterials = (Material[])(object)new Material[3] { val8, val9, val7 }; return val6; } } [HarmonyPatch(typeof(Hud), "UpdateCrosshair")] internal static class FuelHoverLayout { private static TMP_Text changed; private static TextWrappingModes originalWrapping; private static TextOverflowModes originalOverflow; private static void Postfix(Hud __instance) { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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) TMP_Text hoverName = (TMP_Text)(object)__instance.m_hoverName; bool flag = Object.op_Implicit((Object)(object)hoverName) && hoverName.text != null && hoverName.text.Contains("<link=\"iaf_supplier\">"); if (Object.op_Implicit((Object)(object)changed) && (!flag || (Object)(object)changed != (Object)(object)hoverName)) { changed.textWrappingMode = originalWrapping; changed.overflowMode = originalOverflow; changed = null; } if (flag) { if ((Object)(object)changed != (Object)(object)hoverName) { changed = hoverName; originalWrapping = hoverName.textWrappingMode; originalOverflow = hoverName.overflowMode; } hoverName.textWrappingMode = (TextWrappingModes)0; hoverName.overflowMode = (TextOverflowModes)0; } } } [HarmonyPatch(typeof(InventoryGui), "UpdateContainerWeight")] internal static class ConnectionUi { private static GameObject tab; private static GameObject popup; private static TMP_Text number; private static TMP_Text details; private static TMP_Text burnRate; private static Woodkeeper current; private static float nextRefresh; private static Sprite connectionIcon; private static Image symbol; private static Image nativeSymbol; private static readonly FieldInfo CurrentContainer = AccessTools.Field(typeof(InventoryGui), "m_currentContainer"); private static readonly FieldInfo GuiAnimator = AccessTools.Field(typeof(InventoryGui), "m_animator"); internal static void LanguageChanged() { nextRefresh = 0f; } private static Sprite GetConnectionIcon() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)connectionIcon)) { return c