Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of balrond shipyard v1.6.3
plugins/BalrondShipyard.dll
Decompiled 2 months 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.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using BalrondBiomes; using BepInEx; using HarmonyLib; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("SailorBag")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("SailorBag")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("d18d2a38-6578-40b5-a296-30f8a379d6ab")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace BalrondBiomes { public class SE_WetImmunity : StatusEffect { public void Awake() { base.m_name = "Waterproof"; ((Object)this).name = "Waterproof"; base.m_tooltip = "Immune to wet effect"; } public override void UpdateStatusEffect(float dt) { ((StatusEffect)this).UpdateStatusEffect(dt); if (base.m_character.GetSEMan().HaveStatusEffect("Wet".GetHashCode())) { base.m_character.GetSEMan().RemoveStatusEffect("Wet".GetHashCode(), false); } } } } namespace BalrondShipyard { public sealed class AnchorSwitch : MonoBehaviour, Hoverable, Interactable { private const string ZdoKeyEnabled = "enabledAnchor"; private const string RpcSetState = "RPC_SetAnchorState"; [Header("UI")] [SerializeField] public string m_name = "Anchor"; [Header("Effects")] [SerializeField] public EffectList m_activateEffect = new EffectList(); [SerializeField] public EffectList m_deactivateEffect = new EffectList(); [SerializeField] private string turnOffMessage = ""; [SerializeField] private string turnOnMessage = ""; [Header("Network")] [SerializeField] public ZNetView m_nview; [SerializeField] public Ship m_ship; [Header("Visuals")] [SerializeField] public GameObject m_disabled; [SerializeField] public GameObject m_enabled; [SerializeField] private GameObject m_resetPoint; [SerializeField] private GameObject m_anchor; [Header("Physics")] [Tooltip("If true, also freezes ship rotation while anchor is down. Off is safer for buoyancy.")] [SerializeField] private bool m_freezeRotationWhileAnchored = false; private Rigidbody _rb; private RigidbodyConstraints _defaultConstraints; private bool _cachedDefaultConstraints; private bool _appliedState; private bool _hasAppliedOnce; private void Awake() { BindToParentShip(); if (!((Object)(object)m_nview == (Object)null) && m_nview.IsValid() && m_nview.GetZDO() != null) { m_nview.Register<bool>("RPC_SetAnchorState", (Action<long, bool>)RPC_SetAnchorState); ApplyState(GetEnabledFromZdo(), playEffects: false); } } private void OnEnable() { BindToParentShip(); if ((Object)(object)m_nview != (Object)null && m_nview.IsValid() && m_nview.GetZDO() != null) { ApplyState(GetEnabledFromZdo(), playEffects: false); } } private void BindToParentShip() { //IL_0070: 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) Ship componentInParent = ((Component)this).GetComponentInParent<Ship>(); if ((Object)(object)componentInParent == (Object)null) { m_ship = null; m_nview = null; _rb = null; return; } m_ship = componentInParent; m_nview = ((Component)componentInParent).GetComponent<ZNetView>(); _rb = ((Component)componentInParent).GetComponent<Rigidbody>(); if ((Object)(object)_rb != (Object)null && !_cachedDefaultConstraints) { _defaultConstraints = _rb.constraints; _cachedDefaultConstraints = true; } } public string GetHoverText() { return Localization.instance.Localize(IsEnabled() ? "\n[<color=yellow><b>$KEY_Use</b></color>] Pull Anchor" : "\n[<color=yellow><b>$KEY_Use</b></color>] Drop Anchor"); } public string GetHoverName() { return m_name; } public bool Interact(Humanoid character, bool repeat, bool alt) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) if (repeat) { return false; } if (!PrivateArea.CheckAccess(((Component)this).transform.position, 0f, true, false)) { return true; } if ((Object)(object)m_nview == (Object)null || !m_nview.IsValid() || m_nview.GetZDO() == null) { return false; } if (!m_nview.IsOwner()) { return true; } bool flag = !GetEnabledFromZdo(); SetEnabledAndBroadcast(flag); if (!string.IsNullOrEmpty(turnOnMessage) || !string.IsNullOrEmpty(turnOffMessage)) { ((Character)character).Message((MessageType)2, flag ? turnOnMessage : turnOffMessage, 0, (Sprite)null); } else { ((Character)character).Message((MessageType)2, m_name + (flag ? " dropped" : " picked up"), 0, (Sprite)null); } return true; } public bool UseItem(Humanoid user, ItemData item) { return false; } public bool IsEnabled() { if ((Object)(object)m_nview == (Object)null || !m_nview.IsValid() || m_nview.GetZDO() == null) { return false; } return GetEnabledFromZdo(); } private bool GetEnabledFromZdo() { return m_nview.GetZDO().GetBool("enabledAnchor", false); } private void SetEnabledAndBroadcast(bool enabled) { m_nview.GetZDO().Set("enabledAnchor", enabled); m_nview.InvokeRPC(ZNetView.Everybody, "RPC_SetAnchorState", new object[1] { enabled }); ApplyState(enabled, playEffects: true); } private void RPC_SetAnchorState(long sender, bool enabled) { ApplyState(enabled, playEffects: true); if ((Object)(object)m_nview != (Object)null && m_nview.IsOwner() && m_nview.GetZDO() != null) { m_nview.GetZDO().Set("enabledAnchor", enabled); } } private void ApplyState(bool enabled, bool playEffects) { //IL_006e: 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_0043: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: 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_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) if (_hasAppliedOnce && _appliedState == enabled) { return; } _hasAppliedOnce = true; _appliedState = enabled; if (playEffects) { if (enabled) { m_activateEffect.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1); } else { m_deactivateEffect.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1); } } if (Object.op_Implicit((Object)(object)m_disabled)) { m_disabled.SetActive(!enabled); } if (Object.op_Implicit((Object)(object)m_enabled)) { m_enabled.SetActive(enabled); } if (!((Object)(object)_rb != (Object)null)) { return; } if (!_cachedDefaultConstraints) { _defaultConstraints = _rb.constraints; _cachedDefaultConstraints = true; } if (enabled) { RigidbodyConstraints val = (RigidbodyConstraints)(_defaultConstraints | 2 | 8); if (m_freezeRotationWhileAnchored) { val = (RigidbodyConstraints)(val | 0x70); } _rb.constraints = val; } else { _rb.constraints = _defaultConstraints; } } } [Serializable] public class FishnetTrap : MonoBehaviour { [Serializable] public class ItemConversion { public Biome m_biome; public ItemDrop m_from; public ItemDrop m_to; public int m_seconds; public List<ItemDrop> m_options; } public string m_name = "FishnetTrap"; public string m_addOreTooltip = "Add Fishbait"; public string m_emptyOreTooltip = "Empty the basket"; public Switch m_addOreSwitch; public Switch m_emptyOreSwitch; public Transform m_outputPoint; public GameObject m_enabledObject; public GameObject m_disabledObject; public GameObject m_haveFuelObject; public GameObject m_haveOreObject; public GameObject m_noOreObject; public Animator[] m_animators; public int m_maxOre = 20; public float m_secPerProduct = 120f; public float m_addOreAnimationDuration; public List<ItemConversion> m_conversion; public EffectList m_oreAddedEffects = new EffectList(); public EffectList m_fuelAddedEffects = new EffectList(); public EffectList m_produceEffects = new EffectList(); private ZNetView m_nview; private float m_addedOreTime = -1000f; private StringBuilder m_sb = new StringBuilder(); public Container m_container; public GameObject m_full; public int m_maxFish = 50; private void Awake() { //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Expected O, but got Unknown //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Expected O, but got Unknown m_nview = ((Component)this).GetComponent<ZNetView>(); if ((Object)(object)m_nview == (Object)null || m_nview.GetZDO() == null) { return; } if (Object.op_Implicit((Object)(object)m_addOreSwitch)) { Switch addOreSwitch = m_addOreSwitch; addOreSwitch.m_onUse = (Callback)Delegate.Combine((Delegate?)(object)addOreSwitch.m_onUse, (Delegate?)new Callback(OnAddOre)); m_addOreSwitch.m_onHover = new TooltipCallback(OnHoverAddOre); } if (Object.op_Implicit((Object)(object)m_emptyOreSwitch)) { Switch emptyOreSwitch = m_emptyOreSwitch; emptyOreSwitch.m_onUse = (Callback)Delegate.Combine((Delegate?)(object)emptyOreSwitch.m_onUse, (Delegate?)new Callback(OnEmpty)); Switch emptyOreSwitch2 = m_emptyOreSwitch; emptyOreSwitch2.m_onHover = (TooltipCallback)Delegate.Combine((Delegate?)(object)emptyOreSwitch2.m_onHover, (Delegate?)new TooltipCallback(OnHoverEmptyOre)); } m_nview.Register<string>("AddOre", (Action<long, string>)RPC_AddOre); m_nview.Register("EmptyProcessed", (Action<long>)RPC_EmptyProcessed); if ((Object)(object)m_container == (Object)null) { Debug.LogWarning((object)"There is no container"); return; } WearNTear component = ((Component)this).GetComponent<WearNTear>(); if (Object.op_Implicit((Object)(object)component)) { component.m_onDestroyed = (Action)Delegate.Combine(component.m_onDestroyed, new Action(OnDestroyed)); } ((MonoBehaviour)this).InvokeRepeating("UpdateFishnetTrap", 1f, 1f); } private void DropAllItems() { //IL_002c: 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_003b: 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_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_0066: 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_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) while (GetQueueSize() > 0) { string queuedOre = GetQueuedOre(); RemoveOneOre(); ItemConversion itemConversion = GetItemConversion(queuedOre); if (itemConversion != null) { Vector3 val = ((Component)this).transform.position + Vector3.up + Random.insideUnitSphere * 0.3f; Quaternion val2 = Quaternion.Euler(0f, (float)Random.Range(0, 360), 0f); ItemDrop.OnCreateNew(Object.Instantiate<GameObject>(((Component)itemConversion.m_from).gameObject, val, val2)); } } } private void OnDestroyed() { if (m_nview.IsOwner()) { DropAllItems(); } } private bool IsItemAllowed(ItemData item) { return IsItemAllowed(((Object)item.m_dropPrefab).name); } private bool IsItemAllowed(string itemName) { foreach (ItemConversion item in m_conversion) { if (((Object)((Component)item.m_from).gameObject).name == itemName) { return true; } } return false; } private ItemData FindCookableItem(Inventory inventory) { foreach (ItemConversion item2 in m_conversion) { ItemData item = inventory.GetItem(item2.m_from.m_itemData.m_shared.m_name, -1, false); if (item != null) { return item; } } return null; } private bool OnAddOre(Switch sw, Humanoid user, ItemData item) { if (item == null) { item = FindCookableItem(user.GetInventory()); if (item == null) { ((Character)user).Message((MessageType)2, "$msg_noprocessableitems", 0, (Sprite)null); return false; } } if (!IsItemAllowed(((Object)item.m_dropPrefab).name)) { ((Character)user).Message((MessageType)2, "$msg_wontwork", 0, (Sprite)null); return false; } ZLog.Log((object)("trying to add " + item.m_shared.m_name)); if (GetQueueSize() >= m_maxOre) { ((Character)user).Message((MessageType)2, "$msg_itsfull", 0, (Sprite)null); return false; } ((Character)user).Message((MessageType)2, "$msg_added " + item.m_shared.m_name, 0, (Sprite)null); user.GetInventory().RemoveItem(item, 1); m_nview.InvokeRPC("AddOre", new object[1] { ((Object)item.m_dropPrefab).name }); m_addedOreTime = Time.time; if ((double)m_addOreAnimationDuration > 0.0) { SetAnimation(active: true); } return true; } private float GetBakeTimer() { return (!m_nview.IsValid()) ? 0f : m_nview.GetZDO().GetFloat(ZDOVars.s_bakeTimer, 0f); } private void SetBakeTimer(float t) { if (m_nview.IsValid()) { m_nview.GetZDO().Set(ZDOVars.s_bakeTimer, t); } } private float GetFuel() { return (!m_nview.IsValid()) ? 0f : m_nview.GetZDO().GetFloat(ZDOVars.s_fuel, 0f); } private void SetFuel(float fuel) { if (m_nview.IsValid()) { m_nview.GetZDO().Set(ZDOVars.s_fuel, fuel); } } private int GetQueueSize() { return m_nview.IsValid() ? m_nview.GetZDO().GetInt(ZDOVars.s_queued, 0) : 0; } private void RPC_AddOre(long sender, string name) { //IL_004d: 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) if (m_nview.IsOwner()) { if (!IsItemAllowed(name)) { ZLog.Log((object)("Item not allowed " + name)); return; } QueueOre(name); m_oreAddedEffects.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1); ZLog.Log((object)("Added ore " + name)); } } private void QueueOre(string name) { int queueSize = GetQueueSize(); m_nview.GetZDO().Set("item" + queueSize, name); m_nview.GetZDO().Set(ZDOVars.s_queued, queueSize + 1, false); } private string GetQueuedOre() { return (GetQueueSize() == 0) ? "" : m_nview.GetZDO().GetString(ZDOVars.s_item0, ""); } private void RemoveOneOre() { int queueSize = GetQueueSize(); if (queueSize != 0) { for (int i = 0; i < queueSize; i++) { string @string = m_nview.GetZDO().GetString("item" + (i + 1), ""); m_nview.GetZDO().Set("item" + i, @string); } m_nview.GetZDO().Set(ZDOVars.s_queued, queueSize - 1, false); } } private bool OnEmpty(Switch sw, Humanoid user, ItemData item) { if (GetProcessedQueueSize() <= 0) { return false; } m_nview.InvokeRPC("EmptyProcessed", Array.Empty<object>()); return true; } private void RPC_EmptyProcessed(long sender) { if (m_nview.IsOwner()) { } } private double GetDeltaTime() { DateTime time = ZNet.instance.GetTime(); DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("StartTime", time.Ticks)); double totalSeconds = (time - dateTime).TotalSeconds; m_nview.GetZDO().Set(ZDOVars.s_startTime, time.Ticks); return totalSeconds; } private float GetAccumulator() { return (!m_nview.IsValid()) ? 0f : m_nview.GetZDO().GetFloat(ZDOVars.s_accTime, 0f); } private void SetAccumulator(float t) { if (m_nview.IsValid()) { m_nview.GetZDO().Set(ZDOVars.s_accTime, t); } } private void UpdateFishnetTrap() { if (!m_nview.IsValid()) { return; } UpdateState(); if (!m_nview.IsOwner() || !m_container.m_inventory.HaveEmptySlot()) { return; } double deltaTime = GetDeltaTime(); float num = GetAccumulator() + (float)deltaTime; if ((double)num > 3600.0) { num = 3600f; } float num2 = 1f; while ((double)num >= 1.0) { num -= 1f; string queuedOre = GetQueuedOre(); if ((m_maxOre != 0 && !(queuedOre != "")) || !((double)m_secPerProduct > 0.0)) { continue; } float num3 = 1f * num2; if (queuedOre != "") { float num4 = GetBakeTimer() + num3; SetBakeTimer(num4); if ((double)num4 >= (double)m_secPerProduct) { SetBakeTimer(0f); RemoveOneOre(); QueueProcessed(queuedOre); } } } SetAccumulator(num); } private void QueueProcessed(string ore) { AddToContainer(ore, 1); } private void SpawnProcessed() { if (m_nview.IsValid()) { int @int = m_nview.GetZDO().GetInt(ZDOVars.s_spawnAmount, 0); if (@int > 0) { Spawn(m_nview.GetZDO().GetString(ZDOVars.s_spawnOre, ""), @int); m_nview.GetZDO().Set(ZDOVars.s_spawnOre, ""); m_nview.GetZDO().Set(ZDOVars.s_spawnAmount, 0, false); } } } private int GetProcessedQueueSize() { return m_nview.IsValid() ? m_nview.GetZDO().GetInt(ZDOVars.s_spawnAmount, 0) : 0; } private void Spawn(string ore, int stack) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_004d: 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) ItemConversion itemConversion = GetItemConversion(ore); if (itemConversion != null) { m_produceEffects.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1); ItemDrop component = Object.Instantiate<GameObject>(((Component)itemConversion.m_to).gameObject, m_outputPoint.position, m_outputPoint.rotation).GetComponent<ItemDrop>(); component.m_itemData.m_stack = stack; ItemDrop.OnCreateNew(component); } } private void AddToContainer(string ore, int stack) { //IL_0022: 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) ItemConversion itemConversion = GetItemConversion(ore); if (itemConversion != null) { m_produceEffects.Create(((Component)this).transform.position, ((Component)this).transform.rotation, (Transform)null, 1f, -1); ItemDrop fish = getFish(itemConversion); if ((Object)(object)fish == (Object)null) { Debug.LogWarning((object)"Something went wrong no fish found!"); } if (m_container.GetInventory().CanAddItem(((Component)fish).gameObject, stack)) { m_container.GetInventory().AddItem(((Component)fish).gameObject, stack); } } } private ItemDrop getFish(ItemConversion itemConversion) { //IL_0003: 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) if (!CheckBiome(itemConversion.m_biome)) { int num = Random.Range(0, 100); if (num <= 10) { ItemConversion itemConversionByBiomes = GetItemConversionByBiomes(GetBiome()); if (itemConversionByBiomes != null) { return itemConversionByBiomes.m_to; } } return itemConversion.m_options[Random.Range(0, itemConversion.m_options.Count)]; } int num2 = Random.Range(0, 100); if (num2 >= 75) { return itemConversion.m_to; } return itemConversion.m_options[Random.Range(0, itemConversion.m_options.Count)]; } private bool CheckBiome(Biome m_biome) { //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_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_0013: Invalid comparison between Unknown and I4 return (Heightmap.FindBiome(((Component)this).transform.position) & m_biome) > 0; } private Biome GetBiome() { //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) return Heightmap.FindBiome(((Component)this).transform.position); } private ItemConversion GetItemConversion(string itemName) { foreach (ItemConversion item in m_conversion) { if (((Object)((Component)item.m_from).gameObject).name == itemName) { return item; } } return null; } private ItemConversion GetItemConversionByBiomes(Biome m_biome) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) foreach (ItemConversion item in m_conversion) { if (item.m_biome == m_biome) { return item; } } return null; } private void SetNetState() { if (!IsActive()) { m_full.SetActive(false); return; } m_full.SetActive(true); int num = m_container.m_inventory.NrOfItemsIncludingStacks(); if (num > 1) { ((Component)m_full.transform.Find("low")).gameObject.SetActive(true); } else { ((Component)m_full.transform.Find("low")).gameObject.SetActive(false); } if ((double)num >= (double)m_maxFish * 0.5) { ((Component)m_full.transform.Find("mid")).gameObject.SetActive(true); } else { ((Component)m_full.transform.Find("mid")).gameObject.SetActive(false); } if ((double)num >= (double)m_maxFish * 0.75) { ((Component)m_full.transform.Find("max")).gameObject.SetActive(true); } else { ((Component)m_full.transform.Find("max")).gameObject.SetActive(false); } if (num >= m_maxFish) { m_full.SetActive(false); } } private void UpdateState() { bool flag = IsActive(); m_enabledObject.SetActive(flag); if (Object.op_Implicit((Object)(object)m_disabledObject)) { m_disabledObject.SetActive(!flag); } if (Object.op_Implicit((Object)(object)m_haveFuelObject)) { m_haveFuelObject.SetActive((double)GetFuel() > 0.0); } if (Object.op_Implicit((Object)(object)m_haveOreObject)) { m_haveOreObject.SetActive(GetQueueSize() > 0); } if (Object.op_Implicit((Object)(object)m_noOreObject)) { m_noOreObject.SetActive(GetQueueSize() == 0); } if ((double)m_addOreAnimationDuration > 0.0 && (double)Time.time - (double)m_addedOreTime < (double)m_addOreAnimationDuration) { flag = true; } SetAnimation(flag); SetNetState(); } private void SetAnimation(bool active) { Animator[] animators = m_animators; foreach (Animator val in animators) { if (((Component)val).gameObject.activeInHierarchy) { val.SetBool("active", active); val.SetFloat("activef", active ? 1f : 0f); } } } public bool IsActive() { return m_maxOre == 0 || GetQueueSize() > 0; } private string OnHoverEmptyOre() { return Localization.instance.Localize($"{m_name} ({GetProcessedQueueSize()} $piece_FishnetTrap_ready) \n[<color=yellow><b>$KEY_Use</b></color>] {m_emptyOreTooltip}"); } private string OnHoverAddOre() { m_sb.Clear(); m_sb.Append($"{m_name} ({GetQueueSize()}/{m_maxOre}) "); m_sb.Append("\n[<color=yellow><b>$KEY_Use</b></color>] " + m_addOreTooltip); return Localization.instance.Localize(m_sb.ToString()); } } [BepInPlugin("balrond.astafaraios.BalrondShipyard", "BalrondShipyard", "1.6.3")] public class Launch : BaseUnityPlugin { [HarmonyPatch(typeof(ShipyardStation), "Awake")] public static class ShipyardStation_Awake_Path { public static void Prefix(ShipyardStation __instance) { __instance.m_conversions = list; } } [HarmonyPatch(typeof(FishnetTrap), "Awake")] public static class FishnetTrap_Awake_Path { public static void Prefix(FishnetTrap __instance) { __instance.m_conversion = fishConversions; } } [HarmonyPatch(typeof(ShipExtensionManager), "Awake")] public static class ShipExtensionManager_Awake_Path { public static void Prefix(ShipExtensionManager __instance) { if (((Object)((Component)__instance).gameObject).name == "Karve(Clone)") { setupKarvePath(__instance); } if (((Object)((Component)__instance).gameObject).name == "Snekke(Clone)") { setupSnekkePath(__instance); } if (((Object)((Component)__instance).gameObject).name == "VikingShip(Clone)") { setupDrakkarPath(__instance); } if (((Object)((Component)__instance).gameObject).name == "Knarr(Clone)") { setupKnarrPath(__instance); } if (((Object)((Component)__instance).gameObject).name == "Snekke(Clone)") { setupSnekkePath(__instance); } if (((Object)((Component)__instance).gameObject).name == "Holk(Clone)") { setupHolkPath(__instance); } if (((Object)((Component)__instance).gameObject).name == "VikingShip_Ashlands(Clone)") { setupAshlandsDrakkarPath(__instance); } } } [HarmonyPatch(typeof(SEMan), "AddStatusEffect", new Type[] { typeof(int), typeof(bool), typeof(int), typeof(float) })] public class AddStatusEffectPatch { public static bool Prefix(SEMan __instance, ref int nameHash) { return !__instance.HaveStatusEffect("Waterproof".GetHashCode()) || nameHash != "Wet".GetHashCode(); } } [HarmonyPatch(typeof(ZNetScene), "Awake")] public static class ZNetScene_Awake_Path { public static void Prefix(ZNetScene __instance) { //IL_09ff: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance == (Object)null) { return; } if ((Object)(object)shipyard == (Object)null) { Debug.Log((object)"THERE IS NO SHIPYARD"); return; } objectRecipes.initPieces(__instance.m_prefabs); GameObject val = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "Hammer"); PieceTable buildPieces = val.GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces; setupRavenGuide(shipyard, __instance.m_prefabs); setupRavenGuide(scribeTable, __instance.m_prefabs); ashlandsUpdateFix(); foreach (GameObject scroll in scrolls) { GameObject val2 = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == ((Object)scroll).name); if ((Object)(object)val2 != (Object)null) { Debug.Log((object)("[SHIP] Scroll already exists in Znet skipping: " + ((Object)scroll).name)); continue; } if (((Object)scroll).name.Contains("Drakkar")) { scroll.GetComponent<ItemDrop>().m_itemData.m_shared.m_name.Replace("Drakkar", "Longship"); } __instance.m_prefabs.Add(scroll); } foreach (GameObject item in items) { GameObject val3 = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == ((Object)item).name); if ((Object)(object)val3 != (Object)null) { Debug.Log((object)("[SHIP] Item already exists in Znet skipping: " + ((Object)item).name)); continue; } if (((Object)item).name == "CapeSailor") { item.GetComponent<ItemDrop>().m_itemData.m_shared.m_equipStatusEffect = ObjectDB.instance.GetStatusEffect("Waterproof".GetHashCode()); } __instance.m_prefabs.Add(item); } if (!wasLoaded) { shipExtensionFactory.init(__instance, scrolls); list = shipExtensionFactory.list; shipProcessor.list = shipExtensionFactory.list; listKarve = shipExtensionFactory.listKarve; listSnekke = shipExtensionFactory.listSnekke; listKnarr = shipExtensionFactory.listKnarr; listDrakkar = shipExtensionFactory.listDrakkar; listHolk = shipExtensionFactory.listHolk; listAshlandsDrakkar = shipExtensionFactory.listAshlandsDrakkar; objectRecipes.createHolkRecipe(dvergercarve); objectRecipes.createKnarrRecipe(karr); objectRecipes.createSnekkeRecipe(snekke); objectRecipes.createShipyardRecipe(shipyard); objectRecipes.createScribeTableRecipe(scribeTable); shipProcessor.setupShipyard(__instance, shipyard); buildPieces.m_pieces.Add(shipyard); buildPieces.m_pieces.Add(scribeTable); GameObject val4 = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "Karve"); GameObject val5 = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "Raft"); GameObject val6 = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "VikingShip"); GameObject val7 = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "VikingShip_Ashlands"); objectRecipes.createKarveRecipe(val4); objectRecipes.createDrakkarRecipe(val6); objectRecipes.createAshlandsDrakkarRecipe(val7); GameObject val8 = buildPieces.m_pieces.Find((GameObject x) => ((Object)x).name == ((Object)dvergercarve).name); if ((Object)(object)val8 == (Object)null) { buildPieces.m_pieces.Add(dvergercarve); } GameObject val9 = buildPieces.m_pieces.Find((GameObject x) => ((Object)x).name == ((Object)karr).name); if ((Object)(object)val9 == (Object)null) { buildPieces.m_pieces.Add(karr); } GameObject val10 = buildPieces.m_pieces.Find((GameObject x) => ((Object)x).name == ((Object)snekke).name); if ((Object)(object)val9 == (Object)null) { buildPieces.m_pieces.Add(snekke); } objectRecipes.editBuildPieceRecipes(pieces); foreach (GameObject piece2 in pieces) { GameObject val11 = buildPieces.m_pieces.Find((GameObject x) => ((Object)x).name == ((Object)piece2).name); if ((Object)(object)val11 != (Object)null) { Debug.Log((object)("[SHIP] Piece already exists in Hammer: " + ((Object)piece2).name)); } else { buildPieces.m_pieces.Add(piece2); } } if ((Object)(object)val5 != (Object)null) { val5.GetComponent<Piece>().m_canBeRemoved = true; shipProcessor.addRaftExtensions(raftExtension, val5, __instance); } else { Debug.LogWarning((object)"[SHIP] NO KARVE TO EDIT"); } if ((Object)(object)val4 != (Object)null) { GameObject gameObject = ((Component)val4.transform.Find("piece_chest")).gameObject; gameObject.GetComponent<Container>().m_width = 3; gameObject.GetComponent<Container>().m_height = 2; shipProcessor.addKarveExtensions(karveExtension, val4, __instance); } else { Debug.Log((object)"[SHIP] NO KARVE TO EDIT"); } if ((Object)(object)karr != (Object)null) { shipProcessor.addKnarrExtensions(knarrExtension, karr, __instance); } else { Debug.Log((object)"[SHIP] NO KNARR TO EDIT"); } if ((Object)(object)snekke != (Object)null) { shipProcessor.addSnekkeExtensions(snekkeExtension, snekke, __instance); } else { Debug.Log((object)"[SHIP] NO SNEKKE TO EDIT"); } if ((Object)(object)dvergercarve != (Object)null) { shipProcessor.addHolkExtensions(holkExtensions, dvergercarve, __instance); } else { Debug.Log((object)"[SHIP] NO HOLK TO EDIT"); } if ((Object)(object)val7 != (Object)null) { GameObject gameObject2 = ((Component)val7.transform.Find("piece_chest")).gameObject; gameObject2.GetComponent<Container>().m_width = 8; gameObject2.GetComponent<Container>().m_height = 5; shipProcessor.addAshlandsDrakkarExtensions(ashlandsDrakkarExtensions, val7, __instance); } else { Debug.Log((object)"[SHIP] NO DRAKKAR TO EDIT"); } if ((Object)(object)val6 != (Object)null) { GameObject gameObject3 = ((Component)val6.transform.Find("piece_chest")).gameObject; gameObject3.GetComponent<Container>().m_width = 6; gameObject3.GetComponent<Container>().m_height = 4; shipProcessor.addDrakkarExtensions(drakkarExtensions, val6, __instance); } else { Debug.Log((object)"[SHIP] NO LONGSHIP TO EDIT"); } wasLoaded = true; } foreach (GameObject piece in pieces) { GameObject val12 = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == ((Object)piece).name); if ((Object)(object)val12 != (Object)null) { Debug.Log((object)("[SHIP] Piece already exists in Znet: " + ((Object)piece).name)); } else { __instance.m_prefabs.Add(piece); } } __instance.m_prefabs.Add(projectileAnchor); __instance.m_prefabs.Add(shipyard); __instance.m_prefabs.Add(scribeTable); ((Component)dvergercarve.transform.Find("piece_chest")).GetComponent<Container>().m_destroyedLootPrefab = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "CargoCrate"); __instance.m_prefabs.Add(dvergercarve); ((Component)karr.transform.Find("piece_chest")).GetComponent<Container>().m_destroyedLootPrefab = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "CargoCrate"); __instance.m_prefabs.Add(karr); ((Component)snekke.transform.Find("piece_chest")).GetComponent<Container>().m_destroyedLootPrefab = __instance.m_prefabs.Find((GameObject x) => ((Object)x).name == "CargoCrate"); __instance.m_prefabs.Add(snekke); if (!new ZNet().IsDedicated()) { ShaderReplacment.runMaterialFix(); } } } [HarmonyPatch(typeof(ObjectDB), "CopyOtherDB")] public static class Object_CopyOtherDB_Path { public static void Postfix() { if (!IsObjectDBValid()) { return; } StatusEffect stat = (StatusEffect)(object)createWateproofStatusEffect(); if ((Object)(object)ObjectDB.instance.m_StatusEffects.Find((StatusEffect x) => ((Object)x).name == ((Object)stat).name) == (Object)null) { ObjectDB.instance.m_StatusEffects.Add(stat); } objectRecipes.recipes = recipes; objectRecipes.initItems(ObjectDB.instance.m_items); foreach (GameObject scroll in scrolls) { AddNewPrefab(scroll); } foreach (GameObject item in items) { AddNewPrefab(item); } List<Recipe> collection = recipeBuilder.createRecipes(ObjectDB.instance.m_items, scrolls, scribeTable, items); recipes.AddRange(collection); foreach (Recipe recipe in recipes) { AddRecipeToObjectDB(recipe); } } } [HarmonyPatch(typeof(ObjectDB), "Awake")] public static class Object_Awake_Path { public static void Postfix() { if (!IsObjectDBValid()) { return; } StatusEffect stat = (StatusEffect)(object)createWateproofStatusEffect(); if ((Object)(object)ObjectDB.instance.m_StatusEffects.Find((StatusEffect x) => ((Object)x).name == ((Object)stat).name) == (Object)null) { ObjectDB.instance.m_StatusEffects.Add(stat); } objectRecipes.initItems(ObjectDB.instance.m_items); objectRecipes.recipes = recipes; foreach (GameObject scroll in scrolls) { AddNewPrefab(scroll); } foreach (GameObject item in items) { AddNewPrefab(item); } foreach (Recipe recipe in recipes) { AddRecipeToObjectDB(recipe); } } } private readonly Harmony harmony = new Harmony("balrond.astafaraios.BalrondShipyard"); public const string PluginGUID = "balrond.astafaraios.BalrondShipyard"; public const string PluginName = "BalrondShipyard"; public const string PluginVersion = "1.6.3"; private static AssetBundle assetBundle; public static GameObject snekkeExtension; public static GameObject karveExtension; public static GameObject knarrExtension; public static GameObject raftExtension; public static GameObject drakkarExtensions; public static GameObject ashlandsDrakkarExtensions; public static GameObject holkExtensions; public static GameObject shipyard; public static bool wasLoaded = false; public static ShipExtensionFactory shipExtensionFactory = new ShipExtensionFactory(); public static List<ShipExtension> list = new List<ShipExtension>(); public static List<ShipExtension> listSnekke = new List<ShipExtension>(); public static List<ShipExtension> listKarve = new List<ShipExtension>(); public static List<ShipExtension> listKnarr = new List<ShipExtension>(); public static List<ShipExtension> listDrakkar = new List<ShipExtension>(); public static List<ShipExtension> listAshlandsDrakkar = new List<ShipExtension>(); public static List<ShipExtension> listHolk = new List<ShipExtension>(); public static List<Texture> texturesKarve = new List<Texture>(); public static List<Texture> texturesDrakkar = new List<Texture>(); public static List<Texture> texturesRaft = new List<Texture>(); public static List<GameObject> scrolls = new List<GameObject>(); public static GameObject scribeTable; public static List<Recipe> recipes = new List<Recipe>(); public static ShipProcessor shipProcessor = new ShipProcessor(); public static ObjectRecipes objectRecipes = new ObjectRecipes(); public static List<FishnetTrap.ItemConversion> fishConversions = new List<FishnetTrap.ItemConversion>(); public static RecipeBuilder recipeBuilder = new RecipeBuilder(); public static Sprite waterProofIco; public static List<GameObject> items = new List<GameObject>(); public static string[] itemNames = new string[8] { "SailInk", "CoalPaste", "HelmetPirateBandana", "HelmetPirateHat", "SledgeAnchor", "CapeSailor", "ShieldSteering", "SwordSaber" }; public static string[] scrollNames = new string[113] { "SchematicDrakkarAnchor", "SchematicDrakkarArmor", "SchematicDrakkarBarrels", "SchematicDrakkarCrates", "SchematicDrakkarLights", "SchematicDrakkarOar", "SchematicDrakkarShields", "SchematicDrakkarTent", "SchematicDrakkarHeadCernyx", "SchematicDrakkarHeadDragon", "SchematicDrakkarHeadOsberg", "SchematicDrakkarHeadSkull", "SchematicDrakkarSailBlack", "SchematicDrakkarSailBlue", "SchematicDrakkarSailGreen", "SchematicDrakkarSailDefault", "SchematicDrakkarSailTransparent", "SchematicDrakkarSailWhite", "SchematicDrakkarSailHound", "SchematicDrakkarSailDruid", "SchematicDrakkarSailWolf", "SchematicDrakkarSailRaven", "SchematicKarveAnchor", "SchematicKarveArmor", "SchematicKarveBag", "SchematicKarveLights", "SchematicKarveOars", "SchematicKarveShields", "SchematicKarveSailBlack", "SchematicKarveSailBlue", "SchematicKarveSailDefault", "SchematicKarveSailGreen", "SchematicKarveSailTransparent", "SchematicKarveSailWhite", "SchematicKarveSailHound", "SchematicKarveSailDruid", "SchematicKarveSailWolf", "SchematicKarveSailRaven", "SchematicKnarrAnchor", "SchematicKnarrArmor", "SchematicKnarrBag", "SchematicKnarrLights", "SchematicKnarrOars", "SchematicKnarrShields", "SchematicKnarrTent", "SchematicKnarrSailBlack", "SchematicKnarrSailBlue", "SchematicKnarrSailDefault", "SchematicKnarrSailDruid", "SchematicKnarrSailGreen", "SchematicKnarrSailHound", "SchematicKnarrSailRaven", "SchematicKnarrSailTransparent", "SchematicKnarrSailWhite", "SchematicKnarrSailWolf", "SchematicHolkAnchor", "SchematicHolkArmor", "SchematicHolkLights", "SchematicHolkOars", "SchematicHolkShields", "SchematicHolkTent", "SchematicHolkBag", "SchematicHolkRopes", "SchematicHolkSailBlack", "SchematicHolkSailBlue", "SchematicHolkSailGreen", "SchematicHolkSailDefault", "SchematicHolkSailTransparent", "SchematicHolkSailWhite", "SchematicHolkSailHound", "SchematicHolkSailDruid", "SchematicHolkSailWolf", "SchematicHolkSailRaven", "SchematicAshlandsDrakkarAnchor", "SchematicAshlandsDrakkarCrates", "SchematicAshlandsDrakkarLights", "SchematicAshlandsDrakkarOar", "SchematicAshlandsDrakkarShields", "SchematicAshlandsDrakkarTent", "SchematicAshlandsDrakkarRopes", "SchematicAshlandsDrakkarSailBlack", "SchematicAshlandsDrakkarSailBlue", "SchematicAshlandsDrakkarSailGreen", "SchematicAshlandsDrakkarSailDefault", "SchematicAshlandsDrakkarSailTransparent", "SchematicAshlandsDrakkarSailWhite", "SchematicAshlandsDrakkarSailHound", "SchematicAshlandsDrakkarSailDruid", "SchematicAshlandsDrakkarSailWolf", "SchematicAshlandsDrakkarSailRaven", "SchematicKnarrNamePlate", "SchematicKarveNamePlate", "SchematicHolkNamePlate", "SchematicAshlandsDrakkarNamePlate", "SchematicDrakkarNamePlate", "SchematicSnekkeAnchor", "SchematicSnekkeArmor", "SchematicSnekkeLights", "SchematicSnekkeOars", "SchematicSnekkeShields", "SchematicSnekkeTent", "SchematicSnekkeBag", "SchematicSnekkeNamePlate", "SchematicSnekkeSailBlack", "SchematicSnekkeSailBlue", "SchematicSnekkeSailGreen", "SchematicSnekkeSailDefault", "SchematicSnekkeSailTransparent", "SchematicSnekkeSailWhite", "SchematicSnekkeSailHound", "SchematicSnekkeSailDruid", "SchematicSnekkeSailWolf", "SchematicSnekkeSailRaven" }; public static List<GameObject> pieces = new List<GameObject>(); public static string[] piecesNames = new string[28] { "tar_wood_wall_log4", "tar_wood_wall_log2", "tar_wood_pole_log4", "tar_wood_pole_log2", "tar_wood_floor", "tar_ladder", "tar_wood_log_26", "tar_wood_log_45", "tar_wood_pole_log1", "tar_wood_ramp", "piece_chest_tarred", "piece_chest_cargo", "piece_iron_wall_torch", "decor_dragon", "bridge_rope", "bridge_rope_support", "bridge_rope_support_side", "cloth_roof", "cloth_roof_corner", "cloth_roof_corner2", "cloth_roof_triangle_sloope", "fishnet_wall", "piece_banner_sail1", "piece_banner_sail2", "piece_ropewall", "piece_ropewall_big", "piece_wisplampceiling", "FishnetTrap" }; public static string[] sailNames = new string[10] { "default_drakkar", "blue_drakkar", "torn_drakkar", "green_drakkar", "transparent_drakkar", "white_drakkar", "sailCross", "yellow_drakkar", "sailDark", "sailVegvisir" }; public static GameObject dvergercarve; public static GameObject karr; public static GameObject snekke; public static GameObject projectileAnchor; private static FieldInfo AttachAnimField = AccessTools.Field(typeof(Player), "m_attachAnimation"); private void Awake() { init(); } private void init() { LoadAllAssetBundles(); shipProcessor.shipyard = shipyard; shipProcessor.texturesDrakkar = texturesDrakkar; shipProcessor.list = shipExtensionFactory.list; harmony.PatchAll(); } private void OnDestroy() { harmony.UnpatchSelf(); } private static bool IsObjectDBValid() { return (Object)(object)ObjectDB.instance != (Object)null && ObjectDB.instance.m_items.Count != 0 && ObjectDB.instance.m_recipes.Count != 0 && (Object)(object)ObjectDB.instance.GetItemPrefab("Amber") != (Object)null; } public static void LoadAllAssetBundles() { assetBundle = GetAssetBundleFromResources("shipyardnew"); LoadPrefabs(); } public static AssetBundle GetAssetBundleFromResources(string filename) { Assembly executingAssembly = Assembly.GetExecutingAssembly(); string name = executingAssembly.GetManifestResourceNames().Single((string str) => str.EndsWith(filename)); using Stream stream = executingAssembly.GetManifestResourceStream(name); return AssetBundle.LoadFromStream(stream); } private static void LoadPrefabs() { string text = "Assets/Custom/BalrondShipyard/"; waterProofIco = assetBundle.LoadAsset<Sprite>(text + "wateproof_ico.png"); dvergercarve = assetBundle.LoadAsset<GameObject>(text + "prefabs/Holk.prefab"); karr = assetBundle.LoadAsset<GameObject>(text + "prefabs/KnarrBal.prefab"); ((Object)karr).name = "Knarr"; snekke = assetBundle.LoadAsset<GameObject>(text + "prefabs/SnekkeShip_bal.prefab"); ((Object)snekke).name = "Snekke"; setupGateDoor(dvergercarve); ShaderReplacment.Replace(snekke); ShaderReplacment.Replace(karr); ShaderReplacment.Replace(dvergercarve); raftExtension = assetBundle.LoadAsset<GameObject>(text + "prefabs/RaftExtension/RaftExtension.prefab"); projectileAnchor = assetBundle.LoadAsset<GameObject>(text + "prefabs/projectile_anchor.prefab"); karveExtension = assetBundle.LoadAsset<GameObject>(text + "prefabs/KarveExtensions/karveExtension.prefab"); knarrExtension = ((Component)karr.transform.Find("knarrExtension")).gameObject; snekkeExtension = ((Component)snekke.transform.Find("snekkeExtension")).gameObject; holkExtensions = ((Component)dvergercarve.transform.Find("DvergerExtension")).gameObject; ShaderReplacment.Replace(snekkeExtension); ShaderReplacment.Replace(knarrExtension); ShaderReplacment.Replace(holkExtensions); shipyard = assetBundle.LoadAsset<GameObject>(text + "prefabs/pieces/ShipyardStation.prefab"); drakkarExtensions = assetBundle.LoadAsset<GameObject>(text + "prefabs/DrakkarExtensions/DrakkarExtensions.prefab"); ashlandsDrakkarExtensions = assetBundle.LoadAsset<GameObject>(text + "prefabs/AshlandsDrakkarExtensions.prefab"); scribeTable = assetBundle.LoadAsset<GameObject>(text + "prefabs/pieces/piece_scribetable.prefab"); ShaderReplacment.Replace(scribeTable); ShaderReplacment.Replace(karveExtension); ShaderReplacment.Replace(shipyard); ShaderReplacment.Replace(drakkarExtensions); ShaderReplacment.Replace(ashlandsDrakkarExtensions); string[] array = sailNames; foreach (string text2 in array) { Texture val = assetBundle.LoadAsset<Texture>(text + "sails/" + text2 + ".png"); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)("Sail not found: " + text2)); } else { texturesDrakkar.Add(val); } } string[] array2 = piecesNames; foreach (string text3 in array2) { GameObject val2 = assetBundle.LoadAsset<GameObject>(text + "prefabs/pieces/" + text3 + ".prefab"); if ((Object)(object)val2 == (Object)null) { Debug.LogWarning((object)("Not found: " + text3)); } if (text3 == "FishnetTrap") { Object.DestroyImmediate((Object)(object)val2.GetComponent<Smelter>()); } ShaderReplacment.Replace(val2); pieces.Add(val2); } string[] array3 = scrollNames; foreach (string text4 in array3) { GameObject val3 = assetBundle.LoadAsset<GameObject>(text + "prefabs/schematics/" + text4 + ".prefab"); if ((Object)(object)val3 == (Object)null) { Debug.LogWarning((object)("Not found: " + text4)); } ShaderReplacment.Replace(val3); scrolls.Add(val3); } string[] array4 = itemNames; foreach (string text5 in array4) { GameObject val4 = assetBundle.LoadAsset<GameObject>(text + "prefabs/items/" + text5 + ".prefab"); if ((Object)(object)val4 == (Object)null) { Debug.LogWarning((object)("Not found: " + text5)); } ShaderReplacment.Replace(val4); items.Add(val4); } } public static void setupGateDoor(GameObject gameObject) { GameObject gameObject2 = ((Component)gameObject.transform.Find("DvergerExtension/ramp_door")).gameObject; if ((Object)(object)gameObject2 == (Object)null) { Debug.LogWarning((object)"Cant find ramp !"); return; } Door component = gameObject2.GetComponent<Door>(); ShipRamp shipRamp = gameObject2.AddComponent<ShipRamp>(); shipRamp.m_nview = gameObject.GetComponent<ZNetView>(); shipRamp.m_name = component.m_name; shipRamp.m_openEffects = component.m_openEffects; shipRamp.m_openEnable = component.m_openEnable; shipRamp.m_closeEffects = component.m_closeEffects; } public static void setupRavenGuide(GameObject gameObject, List<GameObject> gameObjects) { GameObject gameObject2 = ((Component)gameObject.transform.Find("GuidePoint")).gameObject; GameObject val = gameObjects.Find((GameObject x) => ((Object)x).name == "piece_workbench"); GameObject gameObject3 = ((Component)val.transform.Find("GuidePoint")).gameObject; GameObject ravenPrefab = gameObject3.GetComponent<GuidePoint>().m_ravenPrefab; if ((Object)(object)ravenPrefab == (Object)null) { Debug.LogWarning((object)"Ravens not found"); } else { gameObject2.GetComponent<GuidePoint>().m_ravenPrefab = ravenPrefab; } } public static void setupDrakkarPath(ShipExtensionManager __instance) { //IL_004c: 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) GameObject val = ((Component)((Component)__instance).transform.Find("DrakkarExtensions")).gameObject; if ((Object)(object)val == (Object)null) { val = ((Component)((Component)__instance).transform.Find("DrakkarExtensions(Clone)")).gameObject; if ((Object)(object)val == (Object)null) { val = Object.Instantiate<GameObject>(drakkarExtensions, Vector3.zero, Quaternion.identity); shipProcessor.setPosition(val, ((Component)__instance).gameObject); } } if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)"I PATCHED AND NOT FOUND EXTENSIONS FOR DRAKKAR"); } if ((Object)(object)val != (Object)null) { __instance.lights = ((Component)val.transform.Find("Lamps")).gameObject; __instance.anchor = ((Component)val.transform.Find("Anchor")).gameObject; __instance.oars = ((Component)val.transform.Find("Oars")).gameObject; __instance.shields = ((Component)val.transform.Find("shieldset")).gameObject; __instance.roof = ((Component)val.transform.Find("Roof")).gameObject; __instance.lampheat = ((Component)val.transform.Find("LampWarm")).gameObject; __instance.fishnet = ((Component)val.transform.Find("fishnet")).gameObject; __instance.armor = ((Component)val.transform.Find("carapacehull")).gameObject; __instance.ram = ((Component)val.transform.Find("BatteringRam")).gameObject; __instance.nameplate = ((Component)val.transform.Find("shipplate")).gameObject; __instance.nameplate.SetActive(false); } __instance.shipExtensions = listDrakkar; Transform val2 = ((Component)__instance).gameObject.transform.Find("ship").Find("visual"); GameObject gameObject = ((Component)val2.Find("Customize")).gameObject; gameObject.SetActive(true); __instance.customize = gameObject; __instance.sail = ((Component)val2.Find("Mast").Find("Sail").Find("sail_full")).gameObject; __instance.textures = texturesDrakkar; shipProcessor.setupNamePlate(__instance.nameplate, ((Component)__instance).GetComponent<Ship>()); shipProcessor.setupFishnet(__instance.fishnet, ((Component)__instance).GetComponent<Ship>()); shipProcessor.setupShipHeads(((Component)__instance).gameObject); shipProcessor.setupShipLamps(__instance.customize); shipProcessor.setupShipShieldsAndCrates(__instance.customize); shipProcessor.setupShipTent(__instance.customize); } public static void setupAshlandsDrakkarPath(ShipExtensionManager __instance) { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) GameObject val = ((Component)((Component)__instance).transform.Find("AshlandsDrakkarExtensions")).gameObject; if ((Object)(object)val == (Object)null) { val = ((Component)((Component)__instance).transform.Find("AshlandsDrakkarExtensions(Clone)")).gameObject; if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)"Extension not found on clone"); val = Object.Instantiate<GameObject>(ashlandsDrakkarExtensions, Vector3.zero, Quaternion.identity); shipProcessor.setPosition(val, ((Component)__instance).gameObject); } } if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)"I PATCHED AND NOT FOUND EXTENSIONS FOR HOLK"); } Ship component = ((Component)__instance).GetComponent<Ship>(); shipProcessor.addAshlandsDrakkarExtensions(val, ((Component)component).gameObject, ZNetScene.instance); __instance.textures = texturesDrakkar; } public static void setupHolkPath(ShipExtensionManager __instance) { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) GameObject val = ((Component)((Component)__instance).transform.Find("DvergerExtension")).gameObject; if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)"Extension not found on ship"); val = ((Component)((Component)__instance).transform.Find("DvergerExtension(Clone)")).gameObject; if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)"Extension not found on clone"); val = Object.Instantiate<GameObject>(holkExtensions, Vector3.zero, Quaternion.identity); shipProcessor.setPosition(val, ((Component)__instance).gameObject); } } if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)"I PATCHED AND NOT FOUND EXTENSIONS FOR HOLK"); } Ship component = ((Component)__instance).GetComponent<Ship>(); shipProcessor.addHolkExtensions(val, ((Component)component).gameObject, ZNetScene.instance); __instance.textures = texturesDrakkar; } public static void setupKarvePath(ShipExtensionManager __instance) { GameObject val = ((Component)((Component)__instance).transform.Find("karveExtension")).gameObject; if ((Object)(object)val == (Object)null) { val = ((Component)((Component)__instance).transform.Find("karveExtension(Clone)")).gameObject; if ((Object)(object)val == (Object)null) { val = Object.Instantiate<GameObject>(karveExtension); shipProcessor.setPosition(val, ((Component)__instance).gameObject); } } if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)"I PATCHED AND NOT FOUND EXTENSIONS FOR KARVE"); return; } shipProcessor.addKarveExtensions(val, ((Component)__instance).gameObject, ZNetScene.instance); __instance.textures = texturesDrakkar; } public static void setupKnarrPath(ShipExtensionManager __instance) { GameObject val = ((Component)((Component)__instance).transform.Find("knarrExtension")).gameObject; if ((Object)(object)val == (Object)null) { val = ((Component)((Component)__instance).transform.Find("knarrExtension(Clone)")).gameObject; if ((Object)(object)val == (Object)null) { val = Object.Instantiate<GameObject>(knarrExtension); } } if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)"I PATCHED AND NOT FOUND EXTENSIONS FOR KNARR"); return; } shipProcessor.addKnarrExtensions(val, ((Component)__instance).gameObject, ZNetScene.instance); __instance.textures = texturesDrakkar; } public static void setupSnekkePath(ShipExtensionManager __instance) { GameObject val = ((Component)((Component)__instance).transform.Find("snekkeExtension")).gameObject; if ((Object)(object)val == (Object)null) { val = ((Component)((Component)__instance).transform.Find("snekkeExtension(Clone)")).gameObject; if ((Object)(object)val == (Object)null) { val = Object.Instantiate<GameObject>(snekkeExtension); } } if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)"I PATCHED AND NOT FOUND EXTENSIONS FOR SNEKKE"); return; } shipProcessor.addSnekkeExtensions(val, ((Component)__instance).gameObject, ZNetScene.instance); __instance.textures = texturesDrakkar; } [HarmonyPostfix] [HarmonyPatch(typeof(Ship), "OnTriggerEnter")] [HarmonyPatch(typeof(Ship), "OnTriggerExit")] public static void Ship_EnterExit(Collider collider, Ship __instance, List<Player> ___m_players) { if (Object.op_Implicit((Object)(object)((Component)collider).GetComponent<Player>())) { __instance.m_backwardForce = CalculateForce(___m_players.Count); } } [HarmonyPostfix] [HarmonyPatch(typeof(Ship), "UpdateOwner")] public static void Ship_UpdateOwner(Ship __instance, List<Player> ___m_players) { ShipExtensionManager component = ((Component)__instance).GetComponent<ShipExtensionManager>(); if ((Object)(object)component != (Object)null && component.isOarActive()) { int count = ___m_players.FindAll((Player p) => ((Character)p).IsAttached() && (string)AttachAnimField.GetValue(p) == "attach_chair").Count; __instance.m_backwardForce = CalculateForce(count); Debug.Log((object)("Ship ID:" + ((Object)__instance).GetInstanceID() + " sitting player count:" + count + " paddle force:" + __instance.m_backwardForce)); } } public static bool isPaddleForceActive() { return true; } public static bool isLinear() { return true; } public static float CalculateForce(int playerCount) { if (playerCount <= 0 || !isPaddleForceActive()) { return 0.5f; } if (isLinear()) { return Mathf.Min(0.5f + 0.25f * (float)(playerCount - 1), 3f); } float num = 0.55f; float num2 = Mathf.Clamp(0.875f, 1E-05f, 0.99999f); return num * (float)((1.0 - (double)Mathf.Pow(num2, (float)playerCount)) / (1.0 - (double)num2)); } public static void ashlandsUpdateFix() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) ImpactEffect component = dvergercarve.GetComponent<ImpactEffect>(); ImpactEffect component2 = karr.GetComponent<ImpactEffect>(); component.m_hitType = (HitType)17; component2.m_hitType = (HitType)17; WearNTear component3 = dvergercarve.GetComponent<WearNTear>(); WearNTear component4 = karr.GetComponent<WearNTear>(); component3.m_burnable = true; component4.m_burnable = true; Rigidbody component5 = dvergercarve.GetComponent<Rigidbody>(); Rigidbody component6 = karr.GetComponent<Rigidbody>(); component5.automaticCenterOfMass = true; component5.automaticInertiaTensor = true; component5.useGravity = true; component6.automaticCenterOfMass = true; component6.automaticInertiaTensor = true; component6.useGravity = true; Ship component7 = dvergercarve.GetComponent<Ship>(); Ship component8 = karr.GetComponent<Ship>(); component7.m_ashDamageMsgTime = 10f; component8.m_ashDamageMsgTime = 10f; component7.m_ashdamageEffects = ((Component)((Component)component7).transform.Find("ashlandeffects")).gameObject; component8.m_ashdamageEffects = ((Component)((Component)component8).transform.Find("ashlandeffects")).gameObject; } public static SE_WetImmunity createWateproofStatusEffect() { SE_WetImmunity sE_WetImmunity = ScriptableObject.CreateInstance<SE_WetImmunity>(); ((Object)sE_WetImmunity).name = "Waterproof"; ((StatusEffect)sE_WetImmunity).m_icon = waterProofIco; return sE_WetImmunity; } private static void AddRecipeToObjectDB(Recipe recipe) { int num = ObjectDB.instance.m_recipes.RemoveAll((Recipe x) => ((Object)x).name == ((Object)recipe).name); if (num > 0) { } ObjectDB.instance.m_recipes.Add(recipe); } private static void AddNewPrefab(GameObject newPrefab) { if ((Object)(object)newPrefab == (Object)null) { return; } if (((Object)newPrefab).name == "CapeSailor") { newPrefab.GetComponent<ItemDrop>().m_itemData.m_shared.m_equipStatusEffect = ObjectDB.instance.GetStatusEffect("Waterproof".GetHashCode()); } ItemDrop component = newPrefab.GetComponent<ItemDrop>(); if ((Object)(object)component != (Object)null) { if (((Object)newPrefab).name.Contains("Drakkar")) { component.m_itemData.m_shared.m_name.Replace("Drakkar", "Longship"); } if ((Object)(object)ObjectDB.instance.GetItemPrefab(((Object)newPrefab).name) == (Object)null) { ObjectDB.instance.m_items.Add(newPrefab); Dictionary<int, GameObject> dictionary = (Dictionary<int, GameObject>)typeof(ObjectDB).GetField("m_itemByHash", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(ObjectDB.instance); dictionary[StringExtensionMethods.GetStableHashCode(((Object)newPrefab).name)] = newPrefab; } } else { Debug.LogError((object)(((Object)newPrefab).name + " - ItemDrop not found on prefab")); } } } public class ObjectRecipes { public List<GameObject> zNetItems; public List<GameObject> ObjectDbItems; public List<Recipe> recipes; public List<GameObject> hammerTables; private string[] fishBaitNames = new string[9] { "FishingBait", "FishingBaitSwamp", "FishingBaitPlains", "FishingBaitOcean", "FishingBaitMistlands", "FishingBaitForest", "FishingBaitDeepNorth", "FishingBaitCave", "FishingBaitAshlands" }; public void initPieces(List<GameObject> items) { zNetItems = items; } public void initItems(List<GameObject> items) { ObjectDbItems = items; GameObject val = ObjectDbItems.Find((GameObject x) => ((Object)x).name == "Hammer"); hammerTables = val.GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces.m_pieces.FindAll((GameObject x) => (Object)(object)x.GetComponent<CraftingStation>() != (Object)null); } public void editBuildPieceRecipes(List<GameObject> buildables) { foreach (GameObject buildable in buildables) { if ((Object)(object)buildable == (Object)null) { Debug.LogWarning((object)"BUILD PIECE IS NULL SOMETHING DID NOT LOAD"); continue; } List<Requirement> list = new List<Requirement>(); Piece component = buildable.GetComponent<Piece>(); if (((Object)buildable).name.Contains("tar_")) { component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); switch (((Object)buildable).name) { case "tar_wood_wall_log4": list.Add(GetRequirement("CoalPaste", 2, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 4, 0, zNetItems)); break; case "tar_wood_wall_log2": list.Add(GetRequirement("CoalPaste", 1, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 2, 0, zNetItems)); break; case "tar_wood_pole_log4": list.Add(GetRequirement("CoalPaste", 2, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 4, 0, zNetItems)); break; case "tar_wood_pole_log2": list.Add(GetRequirement("CoalPaste", 1, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 2, 0, zNetItems)); break; case "tar_wood_floor": list.Add(GetRequirement("CoalPaste", 1, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 2, 0, zNetItems)); break; case "tar_ladder": list.Add(GetRequirement("CoalPaste", 2, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 3, 0, zNetItems)); break; case "tar_wood_log_26": list.Add(GetRequirement("CoalPaste", 1, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 2, 0, zNetItems)); break; case "tar_wood_log_45": list.Add(GetRequirement("CoalPaste", 1, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 2, 0, zNetItems)); break; case "tar_wood_pole_log1": list.Add(GetRequirement("CoalPaste", 1, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 1, 0, zNetItems)); break; case "tar_wood_ramp": list.Add(GetRequirement("CoalPaste", 1, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 2, 0, zNetItems)); break; } component.m_resources = list.ToArray(); continue; } component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "forge").GetComponent<CraftingStation>(); switch (((Object)buildable).name) { case "decor_dragon": list.Add(GetRequirement("Coal", 1, 0, zNetItems)); list.Add(GetRequirement("Iron", 1, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 2, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "piece_chest_cargo": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("CoalPaste", 2, 0, zNetItems)); list.Add(GetRequirement("IronNails", 24, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 2, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "piece_chest_tarred": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("Tar", 5, 0, zNetItems)); list.Add(GetRequirement("IronNails", 64, 0, zNetItems)); list.Add(GetRequirement("FineWood", 20, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 10, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "piece_iron_wall_torch": list.Add(GetRequirement("CoalPaste", 1, 0, zNetItems)); list.Add(GetRequirement("Iron", 1, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 2, 0, zNetItems)); list.Add(GetRequirement("Tar", 2, 0, zNetItems)); component.m_resources = list.ToArray(); ((Component)component).gameObject.GetComponent<Fireplace>().m_fuelItem = zNetItems.Find((GameObject x) => ((Object)x).name == "Tar").GetComponent<ItemDrop>(); break; case "bridge_rope": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 3, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "bridge_rope_support": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 6, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 2, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "bridge_rope_support_side": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 3, 0, zNetItems)); list.Add(GetRequirement("RoundLog", 1, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "cloth_roof": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 1, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 6, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "cloth_roof_corner": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 1, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 6, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "cloth_roof_corner2": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 1, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 6, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "cloth_roof_triangle_sloope": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 1, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 6, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "fishnet_wall": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 1, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 6, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "piece_banner_sail1": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 2, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 2, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "piece_banner_sail2": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 2, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 2, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "piece_ropewall": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 2, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 2, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "piece_ropewall_big": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 2, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 2, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "piece_wisplampceiling": component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("Wisp", 3, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 3, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 8, 0, zNetItems)); list.Add(GetRequirement("Iron", 1, 0, zNetItems)); component.m_resources = list.ToArray(); break; case "FishnetTrap": ((Behaviour)component).enabled = false; component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); list.Add(GetRequirement("FineWood", 4, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 8, 0, zNetItems)); list.Add(GetRequirement("IronNails", 14, 0, zNetItems)); list.Add(GetRequirement("CoalPaste", 4, 0, zNetItems)); list.Add(GetRequirement("FishingBait", 10, 0, zNetItems)); component.m_resources = list.ToArray(); setupFishtrap(component); break; default: Debug.LogWarning((object)("Unknown piece: " + ((Object)buildable).name)); break; } } } private void setupFishtrap(Piece piece) { FishnetTrap fishnetTrap = ((Component)piece).gameObject.GetComponent<FishnetTrap>(); if ((Object)(object)fishnetTrap == (Object)null) { fishnetTrap = ((Component)piece).gameObject.AddComponent<FishnetTrap>(); fishnetTrap.m_container = ((Component)((Component)piece).transform.Find("piece_chest")).GetComponent<Container>(); fishnetTrap.m_addOreSwitch = ((Component)((Component)piece).transform.Find("add_ore")).GetComponent<Switch>(); fishnetTrap.m_haveOreObject = ((Component)((Component)piece).transform.Find("have_ore")).gameObject; fishnetTrap.m_enabledObject = ((Component)((Component)piece).transform.Find("_enabled")).gameObject; fishnetTrap.m_full = ((Component)((Component)piece).transform.Find("full")).gameObject; } Launch.setupRavenGuide(((Component)fishnetTrap).gameObject, zNetItems); setupFishtrapConversions(fishnetTrap); fishnetTrap.m_container.m_destroyedLootPrefab = zNetItems.Find((GameObject x) => ((Object)x).name == "CargoCrate"); } private void setupFishtrapConversions(FishnetTrap FishnetTrap) { List<FishnetTrap.ItemConversion> list = new List<FishnetTrap.ItemConversion>(); string[] array = fishBaitNames; foreach (string name in array) { FishnetTrap.ItemConversion itemConversion = singleConversion(name); if (itemConversion != null) { list.Add(itemConversion); } } Launch.fishConversions = list; FishnetTrap.m_conversion = list; } private FishnetTrap.ItemConversion singleConversion(string name) { string[] othernames = new string[3] { "Fish1", "Fish2", "Fish3" }; return name switch { "FishingBait" => setupFishConversion(name, "Fish2", othernames, (Biome)1), "FishingBaitSwamp" => setupFishConversion(name, "Fish6", othernames, (Biome)2), "FishingBaitPlains" => setupFishConversion(name, "Fish7", othernames, (Biome)16), "FishingBaitOcean" => setupFishConversion(name, "Fish8", othernames, (Biome)256), "FishingBaitMistlands" => setupFishConversion(name, "Fish12", othernames, (Biome)512), "FishingBaitForest" => setupFishConversion(name, "Fish5", othernames, (Biome)8), "FishingBaitDeepNorth" => setupFishConversion(name, "Fish10", othernames, (Biome)64), "FishingBaitCave" => setupFishConversion(name, "Fish4_cave", othernames, (Biome)4), "FishingBaitAshlands" => setupFishConversion(name, "Fish11", othernames, (Biome)32), _ => null, }; } private FishnetTrap.ItemConversion setupFishConversion(string from, string to, string[] othernames, Biome biome) { //IL_0023: 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) FishnetTrap.ItemConversion itemConversion = new FishnetTrap.ItemConversion(); itemConversion.m_seconds = 0; itemConversion.m_biome = biome; itemConversion.m_from = zNetItems.Find((GameObject x) => ((Object)x).name == from).GetComponent<ItemDrop>(); itemConversion.m_to = zNetItems.Find((GameObject x) => ((Object)x).name == to).GetComponent<ItemDrop>(); itemConversion.m_options = new List<ItemDrop>(); foreach (string name in othernames) { itemConversion.m_options.Add(zNetItems.Find((GameObject x) => ((Object)x).name == name).GetComponent<ItemDrop>()); } return itemConversion; } public void createAshlandsDrakkarRecipe(GameObject shipyard) { //IL_00e2: Unknown result type (might be due to invalid IL or missing references) Piece component = shipyard.GetComponent<Piece>(); List<Requirement> list = new List<Requirement>(); list.Add(GetRequirement("FineWood", 50, 0, zNetItems)); list.Add(GetRequirement("IronNails", 350, 0, zNetItems)); list.Add(GetRequirement("Tar", 25, 0, zNetItems)); list.Add(GetRequirement("YggdrasilWood", 40, 0, zNetItems)); list.Add(GetRequirement("CeramicPlate", 40, 0, zNetItems)); component.m_resources = list.ToArray(); component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); component.m_comfort = 5; component.m_comfortGroup = (ComfortGroup)4; } public void createDrakkarRecipe(GameObject shipyard) { //IL_00e1: Unknown result type (might be due to invalid IL or missing references) Piece component = shipyard.GetComponent<Piece>(); List<Requirement> list = new List<Requirement>(); list.Add(GetRequirement("FineWood", 45, 0, zNetItems)); list.Add(GetRequirement("IronNails", 200, 0, zNetItems)); list.Add(GetRequirement("CoalPaste", 40, 0, zNetItems)); list.Add(GetRequirement("WolfPelt", 12, 0, zNetItems)); list.Add(GetRequirement("JuteRed", 4, 0, zNetItems)); component.m_resources = list.ToArray(); component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); component.m_comfort = 4; component.m_comfortGroup = (ComfortGroup)4; } public void createSnekkeRecipe(GameObject shipyard) { //IL_00df: Unknown result type (might be due to invalid IL or missing references) Piece component = shipyard.GetComponent<Piece>(); List<Requirement> list = new List<Requirement>(); list.Add(GetRequirement("FineWood", 40, 0, zNetItems)); list.Add(GetRequirement("IronNails", 100, 0, zNetItems)); list.Add(GetRequirement("CoalPaste", 30, 0, zNetItems)); list.Add(GetRequirement("TrollHide", 16, 0, zNetItems)); list.Add(GetRequirement("ElderBark", 30, 0, zNetItems)); component.m_resources = list.ToArray(); component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); component.m_comfort = 3; component.m_comfortGroup = (ComfortGroup)4; } public void createKarveRecipe(GameObject shipyard) { //IL_00df: Unknown result type (might be due to invalid IL or missing references) Piece component = shipyard.GetComponent<Piece>(); List<Requirement> list = new List<Requirement>(); list.Add(GetRequirement("FineWood", 30, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 90, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 16, 0, zNetItems)); list.Add(GetRequirement("DeerHide", 10, 0, zNetItems)); list.Add(GetRequirement("CoalPaste", 20, 0, zNetItems)); component.m_resources = list.ToArray(); component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); component.m_comfort = 2; component.m_comfortGroup = (ComfortGroup)4; } public void createKnarrRecipe(GameObject shipyard) { //IL_00df: Unknown result type (might be due to invalid IL or missing references) Piece component = shipyard.GetComponent<Piece>(); List<Requirement> list = new List<Requirement>(); list.Add(GetRequirement("FineWood", 35, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 120, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 14, 0, zNetItems)); list.Add(GetRequirement("TrollHide", 12, 0, zNetItems)); list.Add(GetRequirement("CoalPaste", 25, 0, zNetItems)); component.m_resources = list.ToArray(); component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); component.m_comfort = 2; component.m_comfortGroup = (ComfortGroup)4; } public void createHolkRecipe(GameObject shipyard) { //IL_00e2: Unknown result type (might be due to invalid IL or missing references) Piece component = shipyard.GetComponent<Piece>(); List<Requirement> list = new List<Requirement>(); list.Add(GetRequirement("YggdrasilWood", 50, 0, zNetItems)); list.Add(GetRequirement("IronNails", 400, 0, zNetItems)); list.Add(GetRequirement("ElderBark", 50, 0, zNetItems)); list.Add(GetRequirement("LoxPelt", 12, 0, zNetItems)); list.Add(GetRequirement("Tar", 20, 0, zNetItems)); component.m_resources = list.ToArray(); component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); component.m_comfort = 5; component.m_comfortGroup = (ComfortGroup)4; } public void createShipyardRecipe(GameObject shipyard) { Piece component = shipyard.GetComponent<Piece>(); List<Requirement> list = new List<Requirement>(); list.Add(GetRequirement("FineWood", 30, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 200, 0, zNetItems)); list.Add(GetRequirement("Coal", 25, 0, zNetItems)); list.Add(GetRequirement("DeerHide", 10, 0, zNetItems)); list.Add(GetRequirement("Resin", 25, 0, zNetItems)); component.m_resources = list.ToArray(); component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "forge").GetComponent<CraftingStation>(); } public void createScribeTableRecipe(GameObject table) { Piece component = table.GetComponent<Piece>(); List<Requirement> list = new List<Requirement>(); list.Add(GetRequirement("FineWood", 15, 0, zNetItems)); list.Add(GetRequirement("Wood", 15, 0, zNetItems)); list.Add(GetRequirement("BronzeNails", 55, 0, zNetItems)); list.Add(GetRequirement("LeatherScraps", 15, 0, zNetItems)); list.Add(GetRequirement("Feathers", 10, 0, zNetItems)); component.m_resources = list.ToArray(); component.m_craftingStation = zNetItems.Find((GameObject x) => ((Object)x).name == "piece_workbench").GetComponent<CraftingStation>(); } private Requirement GetRequirement(string name, int amount, int amountPerLevel = 0, List<GameObject> itemlist = null) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown Requirement val = new Requirement(); val.m_amount = amount; val.m_amountPerLevel = amountPerLevel; val.m_recover = true; val.m_resItem = itemlist.Find((GameObject x) => ((Object)x).name == name).GetComponent<ItemDrop>(); return val; } } public class RecipeBuilder { private List<GameObject> pieces; private List<GameObject> items; private List<GameObject> newItems; public List<Recipe> recipes = new List<Recipe>(); private CraftingStation cauldron; private CraftingStation workbench; private CraftingStation forge; private CraftingStation blackforge; private CraftingStation stoneCutter; private CraftingStation artisian; private CraftingStation runeforge; private CraftingStation tannery; private CraftingStation fletcher; private CraftingStation grill; private CraftingStation alchemylab; private CraftingStation scribe; public List<Recipe> createRecipes(List<GameObject> items, List<GameObject> newItems, GameObject scribeTable, List<GameObject> aditionals) { this.items = items; this.newItems = newItems; this.newItems.AddRange(aditionals); pieces = items.Find((GameObject x) => ((Object)x).name == "Hammer").GetComponent<ItemDrop>().m_itemData.m_shared.m_buildPieces.m_pieces; prepareTables(); scribe = scribeTable.GetComponent<CraftingStation>(); CraftingStation val = scribe; int minStationLevel = 1; foreach (GameObject newItem in newItems) { if (!(((Object)newItem).name == "SchematicDrakkarFishnet") && !(((Object)newItem).name == "SchematicDrakkarRam") && !(((Object)newItem).name == "SchematicHolkCage")) { Recipe val2 = ScriptableObject.CreateInstance<Recipe>(); val2.m_craftingStation = val; val2.m_repairStation = val; val2.m_minStationLevel = minStationLevel; val2 = createResources(newItem, val2); recipes.Add(val2); } } return recipes; } private void prepareTables() { cauldron = FindStation(pieces, "piece_cauldron"); workbench = FindStation(pieces, "piece_workbench"); forge = FindStation(pieces, "forge"); blackforge = FindStation(pieces, "blackforge"); stoneCutter = FindStation(pieces, "piece_stonecutter"); artisian = FindStation(pieces, "piece_artisanstation"); runeforge = FindStation(pieces, "piece_runeforge"); tannery = FindStation(pieces, "piece_tannery"); fletcher = FindStation(pieces, "piece_fletcher"); grill = FindStation(pieces, "piece_grill"); alchemylab = FindStation(pieces, "piece_alchemylab"); } private Recipe createResources(GameObject item, Recipe newRecipe) { ((Object)newRecipe).name = "Recipe_" + ((Object)item).name; newRecipe.m_item = item.GetComponent<ItemDrop>(); newRecipe.m_amount = 1; newRecipe.m_enabled = true; List<Requirement> list = new List<Requirement>(); newRecipe.m_craftingStation = scribe; newRecipe.m_minStationLevel = 1; switch (((Object)item).name) { case "SailInk": newRecipe.m_craftingStation = scribe; newRecipe.m_repairStation = scribe; newRecipe.m_minStationLevel = 1; newRecipe.m_amount = 4; list.Add(createReq("Blueberries", 7)); list.Add(createReq("Cloudberry", 4)); list.Add(createReq("Raspberry", 7)); list.Add(createReq("Coal", 7)); list.Add(createReq("Carrot", 6)); list.Add(createReq("Bloodbag", 5)); list.Add(createReq("Guck", 4)); list.Add(createReq("GiantBloodSack", 2)); list.Add(createReq("Charredskull", 2)); list.Add(createReq("CharredBone", 2)); newRecipe.m_requireOnlyOneIngredient = true; break; case "ShieldSteering": newRecipe.m_craftingStation = workbench; newRecipe.m_repairStation = workbench; newRecipe.m_minStationLevel = 3; list.Add(createReq("FineWood", 10, 5)); list.Add(createReq("Iron", 10, 5)); list.Add(createReq("LeatherScraps", 12, 6)); list.Add(createReq("CoalPaste", 6, 3)); break; case "SwordSaber": newRecipe.m_craftingStation = workbench; newRecipe.m_repairStation = workbench; newRecipe.m_minStationLevel = 3; list.Add(createReq("RoundLog", 4, 2)); list.Add(createReq("Iron", 12, 6)); list.Add(createReq("CoalPaste", 4, 2)); list.Add(createReq("LeatherScraps", 12, 6)); break; case "CapeSailor": newRecipe.m_craftingStation = workbench; newRecipe.m_repairStation = workbench; newRecipe.m_minStationLevel = 3; list.Add(createReq("SerpentScale", 9, 4)); list.Add(createReq("LeatherScraps", 12, 6)); list.Add(createReq("CoalPaste", 6, 3)); list.Add(createReq("TrollHide", 6, 3)); break; case "CoalPaste": newRecipe.m_amount = 4; newRecipe.m_craftingStation = workbench; newRecipe.m_repairStation = workbench; newRecipe.m_minStationLevel = 3; list.Add(createReq("Coal", 2)); list.Add(createReq("Resin", 4)); break; case "HelmetPirateBandana": newRecipe.m_craftingStation = workbench; newRecipe.m_repairStation = workbench; newRecipe.m_minStationLevel = 3; list.Add(createReq("JuteRed", 8, 4)); list.Add(createReq("LeatherScraps", 10, 5)); list.Add(createReq("CoalPaste", 6, 3)); list.Add(createReq("TrophySerpent", 1)); break; case "HelmetPirateHat": newRecipe.m_craftingStation = workbench; newRecipe.m_repairStation = workbench; newRecipe.m_minStationLevel = 3; list.Add(createReq("HelmetPirateBandana", 1)); list.Add(createReq("SailInk", 10, 5)); list.Add(createReq("LoxPelt", 4, 2)); list.Add(createReq("Feathers", 14, 7)); break; case "SledgeAnchor": newRecipe.m_craftingStation = forge; newRecipe.m_repairStation = forge; list.Add(createReq("Iron", 38, 18)); list.Add(createReq("LeatherScraps", 20, 10)); list.Add(createReq("Chain", 2, 1)); list.Add(createReq("TrophySerpent", 1)); break; case "SchematicSnekkeNamePlate": case "SchematicKnarrNamePlate": case "SchematicKarveNamePlate": case "SchematicHolkNamePlate": case "SchematicAshlandsDrakkarNamePlate": case "SchematicDrakkarNamePlate": list.Add(createReq("Wood", 2)); list.Add(createReq("Coal", 2)); break; case "SchematicDrakkarArmor": list.Add(createReq("Carapace", 20)); list.Add(createReq("BlackMetal", 16)); list.Add(createReq("Guck", 20)); list.Add(createReq("Chain", 8)); break; case "SchematicDrakkarAnchor": list.Add(createReq("Iron", 13)); list.Add(createReq("CoalPaste", 20)); list.Add(createReq("FineWood", 10)); list.Add(createReq("Chain", 3)); break; case "SchematicDrakkarBarrels": list.Add(createReq("IronNails", 57)); list.Add(createReq("Resin", 30)); list.Add(createReq("FineWood", 10)); list.Add(createReq("Wood", 20)); break; case "SchematicDrakkarCrates": list.Add(createReq("Tar", 6)); list.Add(createReq("BlackMetal", 8)); list.Add(createReq("FineWood", 25)); list.Add(createReq("IronNails", 33)); break; case "SchematicDrakkarLights": list.Add(createReq("FineWood", 10)); list.Add(createReq("IronNails", 37)); list.Add(createReq("Copper", 5)); break; case "SchematicDrakkarFishnet": newRecipe.m_enabled = false; list.Add(createReq("Wood", 10)); list.Add(createReq("FineWood", 5)); list.Add(createReq("RoundLog", 10)); break; case "SchematicDrakkarOar": list.Add(createReq("Wood", 10)); list.Add(createReq("FineWood", 5)); list.Add(createReq("RoundLog", 10)); break; case "SchematicDrakkarRam": newRecipe.m_enabled = false; list.Add(createReq("Iron", 33)); list.Add(createReq("MechanicalSpring", 5)); list.Add(createReq("Tar", 20)); list.Add(createReq("Carapace", 33)); break; case "SchematicDrakkarShields": list.Add(createReq("IronNails", 88)); list.Add(createReq("RoundLog", 12)); list.Add(createReq("Resin", 20)); list.Add(createReq("DeerHide", 15)); break; case "SchematicDrakkarTent": list.Add(createReq("JuteRed", 5)); list.Add(createReq("IronNails", 23)); list.Add(createReq("FineWood", 10)); list.Add(createReq("WolfPelt", 3)); break; case "SchematicDrakkarHeadCernyx": case "SchematicDrakkarHeadDragon": case "SchematicDrakkarHeadOsberg": case "SchematicDrakkarHeadSkull": list.Add(createReq("FineWood", 4)); list.Add(createReq("Tin", 2)); break; case "SchematicKnarrArmor": list.Add(createReq("Carapace", 16)); list.Add(createReq("BlackMetal", 14)); list.Add(createReq("Guck", 16)); list.Add(createReq("Chain", 4)); break; case "SchematicSnekkeArmor": list.Add(createReq("Carapace", 18)); list.Add(createReq("BlackMetal", 16)); list.Add(createReq("Guck", 16)); list.Add(createReq("Chain", 4)); break; case "SchematicKarveArmor": list.Add(createReq("Carapace", 12)); list.Add(createReq("BlackMetal", 12)); list.Add(createReq("Guck", 12)); list.Add(createReq("Chain", 4)); break; case "SchematicKnarrAnchor": list.Add(createReq("Bronze", 8)); list.Add(createReq("CoalPaste", 6)); list.Add(createReq("LeatherScraps", 16)); list.Add(createReq("Wood", 14)); break; case "SchematicSnekkeAnchor": list.Add(createReq("Iron", 8)); list.Add(createReq("CoalPaste", 6)); list.Add(createReq("LeatherScraps", 16)); list.Add(createReq("RoundLog", 10)); break; case "SchematicKarveAnchor": list.Add(createReq("Bronze", 6)); list.Add(createReq("CoalPaste", 4)); list.Add(createReq("LeatherScraps", 12)); list.Add(createReq("Wood", 10)); break; case "SchematicKnarrBag": list.Add(createReq("LeatherScraps", 12)); list.Add(createReq("Tin", 4)); list.Add(createReq("BronzeNails", 20)); list.Add(createReq("FineWood", 14)); break; case "SchematicSnekkeBag": list.Add(createReq("LeatherScraps", 14)); list.Add(createReq("Tin", 6)); list.Add(createReq("IronNails", 30)); list.Add(createReq("FineWood", 16)); break; case "SchematicKarveBag": list.Add(createReq("LeatherScraps", 10)); list.Add(createReq("Tin", 3)); list.Add(createReq("BronzeNails", 15)); list.Add(createReq("FineWood", 10)); break; case "SchematicKnarrLights": list.Add(createReq("CoalPaste", 12)); list.Add(createReq("BronzeNails", 35)); list.Add(createReq("Tin", 6)); list.Add(createReq("FineWood", 12)); break; case "SchematicSnekkeLights": list.Add(createReq("CoalPaste", 12)); list.Add(createReq("IronNails", 55)); list.Add(createReq("Tin", 8)); list.Add(createReq("FineWood", 16)); break; case "SchematicKarveLights": list.Add(createReq("CoalPaste", 8)); list.Add(createReq("BronzeNails", 25)); list.Add(createReq("Tin", 4)); list.Add(createReq("FineWood", 8)); break; case "SchematicKnarrOars": list.Add(createReq("Wood", 7)); list.Add(createReq("FineWood", 4)); list.Add(createReq("RoundLog", 6)); list.Add(createReq("CoalPaste", 6)); break; case "SchematicSnekkeOars": list.Add(createReq("Wood", 8)); list.Add(createReq("FineWood", 5)); list.Add(createReq("RoundLog", 7)); list.Add(createReq("CoalPaste", 7)); break; case "SchematicKarveOars": list.Add(createReq("Wood", 5)); list.Add(createReq("FineWood", 2)); list.Add(createReq("RoundLog", 4)); list.Add(createReq("CoalPaste", 4)); break; case "SchematicKnarrShields": list.Add(createReq("LeatherScraps", 20)); list.Add(createReq("BronzeNails", 65)); list.Add(createReq("Copper", 12)); list.Add(createReq("RoundLog", 24)); break; case "SchematicSnekkeShields": list.Add(createReq("LeatherScraps", 24)); list.Add(createReq("IronNails", 55)); list.Add(createReq("Copper", 14)); list.Add(createReq("RoundLog", 28)); break; case "SchematicKarveShields": list.Add(createReq("LeatherScraps", 14)); list.Add(createReq("BronzeNails", 50)); list.Add(createReq("Copper", 8)); list.Add(createReq("RoundLog", 20)); break; case "SchematicKnarrTent": list.Add(createReq("TrollHide", 10)); list.Add(createReq("BronzeNails", 35)); list.Add(createReq("FineWood", 10)); list.Add(createReq("Wood", 6)); break; case "SchematicSnekkeTent": list.Add(createReq("TrollHide", 12)); list.Add(createReq("IronNails", 55)); list.Add(createReq("FineWood", 14)); list.Add(createReq("Wood", 10)); break; case "SchematicKarveSailWhite": case "SchematicKarveSailTransparent": case "SchematicKarveSailBlack": case "SchematicKarveSailBlue": case "SchematicKarveSailDefault": case "SchematicKarveSailGreen": case "SchematicKarveSailHound": case "SchematicKarveSailDruid": case "SchematicKarveSailWolf": case "SchematicKarveSailRaven": list.Add(createReq("CoalPaste", 2)); list.Add(createReq("Wood", 5)); list.Add(createReq("SailInk", 3)); list.Add(createReq("LeatherScraps", 5)); break; case "SchematicDrakkarSailBlack": case "SchematicDrakkarSailBlue": case "SchematicDrakkarSailGreen": case "SchematicDrakkarSailDefault": case "SchematicDrakkarSailTransparent": case "SchematicDrakkarSailWhite": case "SchematicDrakkarSailHound": case "SchematicDrakkarSailDruid": case "SchematicDrakkarSailWolf": case "SchematicDrakkarSailRaven": list.Add(createReq("CoalPaste", 5)); list.Add(createReq("FineWood", 5)); list.Add(createReq("SailInk", 4)); list.Add(createReq("LeatherScraps", 8)); break; case "SchematicAshlandsDrakkarAnchor": list.Add(createReq("FlametalNew", 13)); list.Add(createReq("CoalPaste", 20)); list.Add(createReq("Blackwood", 10)); list.Add(createReq("Chain", 4)); break; case "SchematicAshlandsDrakkarCrates": list.Add(createReq("CharcoalResin", 6)); list.Add(createReq("FlametalNew", 8)); list.Add(createReq("Blackwood", 25)); list.Add(createReq("IronNails", 33)); break; case "SchematicAshlandsDrakkarLights": list.Add(createReq("Blackwood", 10)); list.Add(createReq("IronNails", 37)); list.Add(createReq("FlametalNew", 5)); list.Add(createReq("Wisp", 4)); break; case "SchematicAshlandsDrakkarOar": list.Add(createReq("Wood", 10)); list.Add(createReq("Blackwood", 5)); list.Add(createReq("RoundLog", 10)); break; case "SchematicAshlandsDrakkarShields": list.Add(createReq("FlametalNew", 14)); list.Add(createReq("Blackwood", 20)); list.Add(createReq("CharcoalResin", 20)); list.Add(createReq("AskHide", 10)); break; case "SchematicAshlandsDrakkarTent": list.Add(createReq("LinenThread", 25)); list.Add(createReq("FlametalNew", 10)); list.Add(createReq("Blackwood", 20)); list.Add(createReq("AskHide", 10)); break; case "SchematicAshlandsDrakkarRopes": list.Add(createReq("Wood", 20)); list.Add(createReq("Blackwood", 5)); list.Add(createReq("LeatherScraps", 20)); list.Add(createReq("FlametalNew", 5)); break; case "SchematicAshlandsDrakkarSailBlack": case "SchematicAshlandsDrakkarSailBlue": case "SchematicAshlandsDrakkarSailGreen": case "SchematicAshlandsDrakkarSailDefault": case "SchematicAshlandsDrakkarSailTransparent": case "SchematicAshlandsDrakkarSailWhite": case "SchematicAshlandsDrakkarSailHound": case "SchematicAshlandsDrakkarSailDruid": case "SchematicAshlandsDrakkarSailWolf": case "SchematicAshlandsDrakkarSailRaven": list.Add(createReq("CoalPaste", 4)); list.Add(createReq("Blackwood", 6)); list.Add(createReq("SailInk", 6)); list.Add(createReq("LeatherScraps", 14)); break; case "SchematicSnekkeSailBlack": case "SchematicSnekkeSailBlue": case "SchematicSnekkeSailDefault": case "SchematicSnekkeSailDruid": case "SchematicSnekkeSailGreen": case "SchematicSnekkeSailHound": case "SchematicSnekkeSailRaven": case "SchematicSnekkeSailTransparent": case "SchematicSnekkeSailWhite": case "SchematicSnekkeSailWolf": list.Add(createReq("CoalPaste", 3)); list.Add(createReq("Wood", 4)); list.Add(createReq("SailInk", 2)); list.Add(createReq("LeatherScraps", 4)); break; case "SchematicKnarrSailBlack": case "SchematicKnarrSailBlue": case "SchematicKnarrSailDefault": case "SchematicKnarrSailDruid": case "SchematicKnarrSailGreen": case "SchematicKnarrSailHound": case "SchematicKnarrSailRaven": case "SchematicKnarrSailTransparent": case "SchematicKnarrSailWhite": case "SchematicKnarrSailWolf": list.Add(createReq("CoalPaste", 3)); list.Add(createReq("Wood", 4)); list.Add(createReq("SailInk", 2)); list.Add(createReq("LeatherScraps", 4)); break; case "SchematicHolkArmor": list.Add(createReq("Carapace", 40)); list.Add(createReq("BlackMetal", 24)); list.Add(createReq("Guck", 30)); list.Add(createReq("Chain", 10)); break; case "SchematicHolkBag": list.Add(createReq("Tar", 10)); list.Add(createReq("BlackMetal", 12)); list.Add(createReq("YggdrasilWood", 15)); list.Add(createReq("IronNails", 77)); break; case "SchematicHolkAnchor": list.Add(createReq("Iron", 20)); list.Add(createReq("Tar", 6)); list.Add(createReq("YggdrasilWood", 10)); list.Add(createReq("Chain", 5)); break; case "SchematicHolkCage": newRecipe.m_enabled = false; list.Add(createReq("Tar", 10)); list.Add(createReq("BlackMetal", 8)); list.Add(createReq("FineWood", 25)); list.Add(createReq("IronNails", 33)); break; case "SchematicHolkLights": list.Add(createReq("YggdrasilWood", 10)); list.Add(createReq("IronNails", 37)); list.Add(createReq("Wisp", 4)); break; case "SchematicHolkRopes": list.Add(createReq("Wood", 10)); list.Add(createReq("YggdrasilWood", 5)); list.Add(createReq("LeatherScraps", 10)); list.Add(createReq("IronNails", 16)); break; case "SchematicHolkOars": list.Add(createReq("Wood", 10)); list.Add(createReq("FineWood", 10)); list.Add(createReq("RoundLog", 10)); list.Add(createReq("YggdrasilWood", 10));