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