public static void PatchSmelter(Smelter smelter) { if (smelter.m_emptyOreSwitch && smelter.m_spawnStack) { int processedQueueSize = smelter.GetProcessedQueueSize(); smelter.m_emptyOreSwitch.m_hoverText = $"{smelter.m_name} {processedQueueSize} $piece_smelter_ready \n{useKey} {smelter.m_emptyOreTooltip}"; } int queueSize = smelter.GetQueueSize(); smelter.m_addOreSwitch.m_hoverText = $"{smelter.m_name} ({queueSize}/{smelter.m_maxOre}) "; if (queueSize > 0) // This codeline is run every tick when windmill is on!! { Debug.Log($"{smelter.GetBakeTimer()}, {smelter.m_secPerProduct}, {queueSize}"); smelter.m_addOreSwitch.m_hoverText += $"{Helpers.TimeString(smelter.m_secPerProduct * queueSize - smelter.GetBakeTimer())}"; // 8sec - 10sec (30sec) // 9sec - 10sec (30sec) } if (smelter.m_requiresRoof && !smelter.m_haveRoof && Mathf.Sin(Time.time * 10f) > 0f) { Switch addOreSwitch = smelter.m_addOreSwitch; addOreSwitch.m_hoverText += $" {smelterRoof}"; } Switch addOreSwitch2 = smelter.m_addOreSwitch; addOreSwitch2.m_hoverText = $"{addOreSwitch2.m_hoverText} \n{useKey} {smelter.m_addOreTooltip}"; }
static void Prefix(Smelter __instance) { if (__instance == null || !Player.m_localPlayer || __instance.m_nview == null || !__instance.m_nview.IsOwner()) { return; } Smelter smelter = __instance; Stopwatch delta = GameObjectAssistant.GetStopwatch(smelter.gameObject); if (delta.IsRunning && delta.ElapsedMilliseconds < 1000) { return; } delta.Restart(); float autoFuelRange = 0f; bool ignorePrivateAreaCheck = false; bool isKiln = false; if (smelter.m_name.Equals(SmelterDefinitions.KilnName)) { if (!Configuration.Current.Kiln.IsEnabled || !Configuration.Current.Kiln.autoFuel) { return; } isKiln = true; autoFuelRange = Configuration.Current.Kiln.autoRange; ignorePrivateAreaCheck = Configuration.Current.Kiln.ignorePrivateAreaCheck; } else if (smelter.m_name.Equals(SmelterDefinitions.SmelterName)) { if (!Configuration.Current.Smelter.IsEnabled || !Configuration.Current.Smelter.autoFuel) { return; } autoFuelRange = Configuration.Current.Smelter.autoRange; ignorePrivateAreaCheck = Configuration.Current.Smelter.ignorePrivateAreaCheck; } else if (smelter.m_name.Equals(SmelterDefinitions.FurnaceName)) { if (!Configuration.Current.Furnace.IsEnabled || !Configuration.Current.Furnace.autoFuel) { return; } autoFuelRange = Configuration.Current.Furnace.autoRange; ignorePrivateAreaCheck = Configuration.Current.Furnace.ignorePrivateAreaCheck; } else if (__instance.m_name.Equals(SmelterDefinitions.WindmillName)) { if (!Configuration.Current.Windmill.IsEnabled || !Configuration.Current.Windmill.autoFuel) { return; } autoFuelRange = Configuration.Current.Windmill.autoRange; ignorePrivateAreaCheck = Configuration.Current.Windmill.ignorePrivateAreaCheck; } else if (__instance.m_name.Equals(SmelterDefinitions.SpinningWheelName)) { if (!Configuration.Current.SpinningWheel.IsEnabled || !Configuration.Current.SpinningWheel.autoFuel) { return; } autoFuelRange = Configuration.Current.SpinningWheel.autoRange; ignorePrivateAreaCheck = Configuration.Current.SpinningWheel.ignorePrivateAreaCheck; } autoFuelRange = Helper.Clamp(autoFuelRange, 1, 50); int toMaxOre = smelter.m_maxOre - smelter.GetQueueSize(); int toMaxFuel = smelter.m_maxFuel - (int)System.Math.Ceiling(smelter.GetFuel()); if (smelter.m_fuelItem && toMaxFuel > 0) { ItemDrop.ItemData fuelItemData = smelter.m_fuelItem.m_itemData; // Check for fuel in nearby containers int addedFuel = InventoryAssistant.RemoveItemInAmountFromAllNearbyChests(smelter.gameObject, autoFuelRange, fuelItemData, toMaxFuel, !ignorePrivateAreaCheck); for (int i = 0; i < addedFuel; i++) { smelter.m_nview.InvokeRPC("AddFuel", new object[] { }); } if (addedFuel > 0) { ZLog.Log("Added " + addedFuel + " fuel(" + fuelItemData.m_shared.m_name + ") in " + smelter.m_name); } } if (toMaxOre > 0) { List <Container> nearbyChests = InventoryAssistant.GetNearbyChests(smelter.gameObject, autoFuelRange); foreach (Container c in nearbyChests) { foreach (Smelter.ItemConversion itemConversion in smelter.m_conversion) { if (isKiln) { if (Configuration.Current.Kiln.dontProcessFineWood && itemConversion.m_from.m_itemData.m_shared.m_name.Equals(WoodDefinitions.FineWoodName)) { continue; } if (Configuration.Current.Kiln.dontProcessRoundLog && itemConversion.m_from.m_itemData.m_shared.m_name.Equals(WoodDefinitions.RoundLogName)) { continue; } int threshold = Configuration.Current.Kiln.stopAutoFuelThreshold < 0 ? 0 : Configuration.Current.Kiln.stopAutoFuelThreshold; if (threshold > 0 && InventoryAssistant.GetItemAmountInItemList(InventoryAssistant.GetNearbyChestItemsByContainerList(nearbyChests), itemConversion.m_to.m_itemData) >= threshold) { return; } } ItemDrop.ItemData oreItem = itemConversion.m_from.m_itemData; int addedOres = InventoryAssistant.RemoveItemFromChest(c, oreItem, toMaxOre); if (addedOres > 0) { GameObject orePrefab = ObjectDB.instance.GetItemPrefab(itemConversion.m_from.gameObject.name); for (int i = 0; i < addedOres; i++) { smelter.m_nview.InvokeRPC("AddOre", new object[] { orePrefab.name }); } toMaxOre -= addedOres; if (addedOres > 0) { ZLog.Log("Added " + addedOres + " ores(" + oreItem.m_shared.m_name + ") in " + smelter.m_name); } if (toMaxOre == 0) { return; } } } } } }