From 3cd0e3d6cbb214a755e74c8662aa40c92688f5f6 Mon Sep 17 00:00:00 2001 From: AlexCube Date: Mon, 26 Oct 2026 21:47:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D1=80=D0=BD=D0=B0:=20=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=BF=D0=B0=20=D0=BD=D0=B5=20=D0=BF=D1=80=D0=BE=D0=BF?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=8E=D1=82=20=D0=BF=D1=80=D0=B8=20Shift+?= =?UTF-8?q?=D0=BA=D0=BB=D0=B8=D0=BA=D0=B5=20=D1=81=D1=82=D0=BE=D0=BF=D0=BA?= =?UTF-8?q?=D0=BE=D0=B9=20(#82);=20=D1=80=D0=B5=D1=86=D0=B5=D0=BF=D1=82?= =?UTF-8?q?=D1=8B=20=D0=B8=D0=B7=20=D0=BA=D1=83=D0=B7=D0=BD=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B2=D0=B5=D1=80=D1=81=D1=82=D0=B0=D0=BA,=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B5=208=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD=D1=82=D0=BE=D0=B2,?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=BB=D0=B3=D0=B8=D0=B5=20=C3=B74=20(#83)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проверка «Содержимого» урны - в следующем кадре: игра звала onModified посреди перекладки, лишние черепа возвращались в исходную ячейку рюкзака и затирались пустотой. Кузня делает только из вплавленного - урны логиста, лутера, старателя и гео-оссуарий на верстаке (на ломе). Зомбособака 9 -> 7 компонентов (окно показывает 8). Время долгих вещей вчетверо меньше. Co-Authored-By: Claude Opus 5.5 --- Config/recipes.xml | 120 ++++++++-------------------------- HarmonySrc/CinerariumTrunk.cs | 25 ++++++- 2 files changed, 52 insertions(+), 93 deletions(-) diff --git a/Config/recipes.xml b/Config/recipes.xml index 8b729f5..f636811 100644 --- a/Config/recipes.xml +++ b/Config/recipes.xml @@ -33,7 +33,7 @@ weapon - "он не является начальным оружием... больше про комфорт" - so the same circular-dependency concern doesn't apply, and the user wants it to actually cost a real chunk of ash rather than a token amount. --> - + @@ -90,7 +90,7 @@ their current HP per unit to make (NecromancerBloodPatch.cs) - this recipe shouldn't demand many. --> - + @@ -124,15 +124,15 @@ personal crafting). workbenchCrafting is just the same UI-categorization tag vanilla's own workbench recipes carry alongside craft_area, not a separate gate. --> - + + - - @@ -160,7 +160,7 @@ REDISTRIBUTED 2026-08-30, was necroNecromancyLvl200 before) - not specified by the user, guessed consistent with the other "advanced ritual" summon items. --> - + @@ -453,15 +453,10 @@ именно тогда (правило «порог по нужде, а не по силе»). Тег и unlock_level группы 2 в progression.xml обязаны совпадать. --> - - - - - - - - + + @@ -473,7 +468,7 @@ гео-оссуария: транспорт нужен, когда карта уже велика для пеших ходок. Состав - по указанию пользователя: кости, гнилое мясо, прах, кожа жертвы, два флакона крови. --> - + @@ -526,7 +521,7 @@ - + @@ -560,21 +555,16 @@ - - - - - - - - + + - + @@ -610,46 +600,22 @@ - - - - - - - - - - - - - - - - - - - - - + вместо глины латунь, плюс немного песка и угля («добавь в рецепт немного песка и угля») и воск - покрытие, чтобы латунь не тускнела («Это кстати будет шикарным поводом ставить пасеку»), делается в кузне. + 26.10: на верстаке, на латунном ломе, без песка и угля - кузня не берёт кости и прах (стрим 26.10). --> + - - - + - - @@ -685,24 +651,8 @@ - - - - - - - - - - - - - - - - - + железный и свинцовый лом вместо глины, отмычка; на крови и на соке. 26.10: из кузни - на верстак (кузня не берёт кости и прах). --> + @@ -710,7 +660,7 @@ - + @@ -718,30 +668,16 @@ - - - - - - - - - - - - - - - - + + - + diff --git a/HarmonySrc/CinerariumTrunk.cs b/HarmonySrc/CinerariumTrunk.cs index fb4e945..10fc2fa 100644 --- a/HarmonySrc/CinerariumTrunk.cs +++ b/HarmonySrc/CinerariumTrunk.cs @@ -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; + + /// Изменение в ячейках - проверка в следующем кадре. Игра зовёт onModified посреди своей перекладки: при Shift+клике + /// стопки черепов из рюкзака она сначала кладёт стопку в урну (тут срабатывал Check и возвращал лишние черепа в ту же ячейку + /// рюкзака), а потом пишет в исходную ячейку пустоту - и вернувшиеся черепа пропадали (стрим 26.10: «черепа исчезли из сумки»). + static void CheckLater() + { + if (_checkQueued) + { + return; + } + _checkQueued = true; + GameManager.Instance.StartCoroutine(CheckNextFrame()); + } + + static IEnumerator CheckNextFrame() + { + yield return null; + _checkQueued = false; + Check(); + } + /// Оставить в ячейке один череп, остальное - игроку; отметить в урне. У рабочего - запомнить образец; череп во /// второй ячейке - не образец, переложить в первую (или вернуть). static void Check()