diff --git a/HarmonySrc/CinerariumCraft.cs b/HarmonySrc/CinerariumCraft.cs index 4db5a02..ee7bd51 100644 --- a/HarmonySrc/CinerariumCraft.cs +++ b/HarmonySrc/CinerariumCraft.cs @@ -119,6 +119,47 @@ namespace NecromancerTome break; } } + // 2а. Кузня: вход сырья держать полным (24.10, пользователь: «Места не должны пустовать. Нужно чтобы заполнены были + // обе ячейки»). Раньше сырьё подкладывалось, только когда переплавленного не хватало даже на одну штуку, - кузня + // плавила остатки, и дух ставил цемент по одному. Подкладка - ДО изготовления (после него очередь до неё не + // доходила: переплавленного каждый шаг хватало на одну штуку), но только в пустую или наполовину опустевшую ячейку - + // кузня плавит непрерывно, и иначе подкладка отнимала бы все шаги. + if (hasSample) + { + string feedName = sample.itemValue.ItemClass?.GetItemName(); + foreach (Station st in stations) + { + if (!st.Te.isModuleUsed[MaterialModule] || !OutputHasRoom(st.Te, sample) && !outRoom) + { + continue; + } + foreach (Recipe r in CraftingManager.GetRecipes(feedName)) + { + if (r.IsScrap || !AreaFits(r, st.Areas) || owner != null && !r.IsUnlocked(owner)) + { + continue; + } + foreach (ItemStack ing in r.ingredients) + { + string iname = ing?.itemValue?.ItemClass?.GetItemName(); + if (iname == null || UnitSlot(st.Te, iname) < 0) + { + continue; + } + if (FeedMaterial(st, iname, src, _dry, out Vector3i? rawAt, true)) + { + _from = rawAt; + if (!_dry) + { + Ignite(st.Te, src, false); + } + return st.Pos; + } + } + } + } + } + if (hasSample) { string name = sample.itemValue.ItemClass?.GetItemName(); @@ -171,45 +212,6 @@ namespace NecromancerTome } } - // 2б. Кузня: вход сырья держать полным (24.10, пользователь: «Места не должны пустовать. Нужно чтобы заполнены были - // обе ячейки»). Раньше сырьё подкладывалось, только когда переплавленного не хватало даже на одну штуку, - кузня - // плавила остатки, и дух ставил цемент по одному. Изготовление - первым делом (выше), подкладка - следующим. - if (hasSample) - { - string name = sample.itemValue.ItemClass?.GetItemName(); - foreach (Station st in stations) - { - if (!st.Te.isModuleUsed[MaterialModule] || !OutputHasRoom(st.Te, sample) && !outRoom) - { - continue; - } - foreach (Recipe r in CraftingManager.GetRecipes(name)) - { - if (r.IsScrap || !AreaFits(r, st.Areas) || owner != null && !r.IsUnlocked(owner)) - { - continue; - } - foreach (ItemStack ing in r.ingredients) - { - string iname = ing?.itemValue?.ItemClass?.GetItemName(); - if (iname == null || UnitSlot(st.Te, iname) < 0) - { - continue; - } - if (FeedMaterial(st, iname, src, _dry, out Vector3i? rawAt)) - { - _from = rawAt; - if (!_dry) - { - Ignite(st.Te, src, false); - } - return st.Pos; - } - } - } - } - } - // 3. Огонь: работа есть - топливо и огонь; нет - погасить (экономия топлива). foreach (Station st in stations) { @@ -516,7 +518,8 @@ namespace NecromancerTome } /// Сырьё для переплавки в unit_X: предмет из ящика «откуда», сделанный из этого материала, - во вход кузни. - static bool FeedMaterial(Station _st, string _unit, List<(Vector3i p, TEFeatureStorage box)> _src, bool _dry, out Vector3i? _at) + /// _halfEmpty - только в пустую ячейку или заполненную меньше чем наполовину (подкладка впрок, шаг 2а). + static bool FeedMaterial(Station _st, string _unit, List<(Vector3i p, TEFeatureStorage box)> _src, bool _dry, out Vector3i? _at, bool _halfEmpty = false) { _at = null; string mat = _unit.Substring(5); @@ -546,6 +549,10 @@ namespace NecromancerTome { bool empty = input[i] == null || input[i].IsEmpty(); int room = empty ? ic.MaxCount : input[i].itemValue.type == g.itemValue.type ? ic.MaxCount - input[i].count : 0; + if (_halfEmpty && !empty && input[i].count * 2 > ic.MaxCount) + { + room = 0; + } if (room <= 0) { continue; diff --git a/NecromancerHarmony.dll b/NecromancerHarmony.dll index 0f85262..c1214ba 100644 Binary files a/NecromancerHarmony.dll and b/NecromancerHarmony.dll differ diff --git a/NecromancerHarmony.pdb b/NecromancerHarmony.pdb index c0cbd12..8b87b22 100644 Binary files a/NecromancerHarmony.pdb and b/NecromancerHarmony.pdb differ