Урна рабочего: в кузню только сырьё, булыжник не плавить (#19)

Проверка «нет рецепта» не отличала камни от булыжника: у камня тоже есть
рецепты (разбор, выплавка из переплавленного), и дух брал то, что лежит
в ящике раньше. Теперь «сделано руками» = есть рецепт изготовления, не
разбор и не выплавка; такое в кузню не кладётся.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-24 14:56:59 +03:00
co-authored by Claude Opus 5.5
parent fb9c50cdf9
commit b4335a0448
3 changed files with 19 additions and 3 deletions
+19 -3
View File
@@ -485,16 +485,18 @@ namespace NecromancerTome
// 23.10 («вместо камней вплавляет булыжник»): сначала сырьё, у которого нет рецепта (камни, лом), сделанное руками // 23.10 («вместо камней вплавляет булыжник»): сначала сырьё, у которого нет рецепта (камни, лом), сделанное руками
// (булыжник) - только если сырья нет. Раньше - первое подходящее по порядку ячеек. // (булыжник) - только если сырья нет. Раньше - первое подходящее по порядку ячеек.
// 24.10 («работник положил сланец в переплавку в печку»): горючее (нефтяной сланец - сырьё для бензина) не плавится // 24.10 («работник положил сланец в переплавку в печку»): горючее (нефтяной сланец - сырьё для бензина) не плавится
// вовсе - рецепта у него нет, и раньше оно шло наравне с камнями. // вовсе. 24.10 («и снова засунул булыжник!!!»): плавится только сырьё - сделанное руками (булыжник) не плавится
// никогда. Прежняя проверка «нет рецепта» не отличала камни от булыжника: у камня тоже есть рецепты (разбор в лом,
// выплавка из переплавленного) - см. Handmade.
foreach ((Vector3i p, TEFeatureStorage box, int k) s in Ordered(_src, g => foreach ((Vector3i p, TEFeatureStorage box, int k) s in Ordered(_src, g =>
{ {
ItemClass c = g.itemValue.ItemClass; ItemClass c = g.itemValue.ItemClass;
if (c?.MadeOfMaterial?.ForgeCategory == null || !c.MadeOfMaterial.ForgeCategory.EqualsCaseInsensitive(mat) || if (c?.MadeOfMaterial?.ForgeCategory == null || !c.MadeOfMaterial.ForgeCategory.EqualsCaseInsensitive(mat) ||
c.GetItemName().StartsWith("unit_") || ItemClass.GetFuelValue(g.itemValue) > 0) c.GetItemName().StartsWith("unit_") || ItemClass.GetFuelValue(g.itemValue) > 0 || Handmade(c))
{ {
return -1; return -1;
} }
return CraftingManager.GetRecipe(c.GetItemName()) == null ? 0 : 1; return 0;
})) }))
{ {
{ {
@@ -533,6 +535,20 @@ namespace NecromancerTome
return false; return false;
} }
/// <summary>Сделано руками: есть рецепт изготовления - не разбор (IsScrap, wildcard_forge_category) и не выплавка в кузне
/// из переплавленного (material_based). Камни и лом - сырьё (только такие рецепты), булыжник - сделан руками.</summary>
static bool Handmade(ItemClass _c)
{
foreach (Recipe r in CraftingManager.GetRecipes(_c.GetItemName()))
{
if (!r.IsScrap && !r.wildcardForgeCategory && !r.materialBasedRecipe)
{
return true;
}
}
return false;
}
static Vector3i? FuelSource(List<(Vector3i p, TEFeatureStorage box)> _src) static Vector3i? FuelSource(List<(Vector3i p, TEFeatureStorage box)> _src)
{ {
foreach ((Vector3i p, TEFeatureStorage box, int k) s in Ordered(_src, FuelRank)) foreach ((Vector3i p, TEFeatureStorage box, int k) s in Ordered(_src, FuelRank))
Binary file not shown.
Binary file not shown.