Урна: черепа не пропадают при Shift+клике стопкой (#82); рецепты из кузни на верстак, не больше 8 компонентов, долгие ÷4 (#83)

Проверка «Содержимого» урны - в следующем кадре: игра звала onModified посреди перекладки,
лишние черепа возвращались в исходную ячейку рюкзака и затирались пустотой.
Кузня делает только из вплавленного - урны логиста, лутера, старателя и гео-оссуарий на верстаке
(на ломе). Зомбособака 9 -> 7 компонентов (окно показывает 8). Время долгих вещей вчетверо меньше.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-26 21:47:45 +03:00
co-authored by Claude Opus 5.5
parent b5a4ec4a2c
commit 3cd0e3d6cb
2 changed files with 52 additions and 93 deletions
+24 -1
View File
@@ -1,3 +1,4 @@
using System.Collections;
using UnityEngine;
namespace NecromancerTome
@@ -42,7 +43,7 @@ namespace NecromancerTome
_bag.SetSlot(1, _u.Sample.Clone());
}
XUiC_BagStorageWindowGroup.Open(ui.xui, _p, _bag, LootContainer.GetLootContainer(LootTemplate),
Localization.Get("necroCinerariumTrunk"), Check, () =>
Localization.Get("necroCinerariumTrunk"), CheckLater, () =>
{
Check();
_urn = null;
@@ -52,6 +53,28 @@ namespace NecromancerTome
Debug.Log("[NecromancerTome] Cinerarium: «Содержимое» урны " + _u.ToWorldPos() + " открыто, череп " + (_u.HasSkull ? "есть" : "нет"));
}
static bool _checkQueued;
/// <summary>Изменение в ячейках - проверка в следующем кадре. Игра зовёт onModified посреди своей перекладки: при Shift+клике
/// стопки черепов из рюкзака она сначала кладёт стопку в урну (тут срабатывал Check и возвращал лишние черепа в ту же ячейку
/// рюкзака), а потом пишет в исходную ячейку пустоту - и вернувшиеся черепа пропадали (стрим 26.10: «черепа исчезли из сумки»).</summary>
static void CheckLater()
{
if (_checkQueued)
{
return;
}
_checkQueued = true;
GameManager.Instance.StartCoroutine(CheckNextFrame());
}
static IEnumerator CheckNextFrame()
{
yield return null;
_checkQueued = false;
Check();
}
/// <summary>Оставить в ячейке один череп, остальное - игроку; отметить в урне. У рабочего - запомнить образец; череп во
/// второй ячейке - не образец, переложить в первую (или вернуть).</summary>
static void Check()