From 20af2bbe6cfa2713d4b3005692e9407e2397d95f Mon Sep 17 00:00:00 2001 From: AlexCube Date: Tue, 15 Sep 2026 22:31:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=BE=D1=80=D0=B3=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=86=20=D1=81=D0=BD=D0=BE=D0=B2=D0=B0=20=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B8=D1=82=D1=81=D1=8F=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=B7=D1=80=D0=B0=D0=BA=D0=BE=D0=BC=20=D0=BF=D0=BE=D1=81=D0=BB?= =?UTF-8?q?=D0=B5=20=D0=B2=D1=8B=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20?= =?UTF-8?q?=D1=87=D0=B0=D0=BD=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Баг со стрима: торговец, ставший чёрно-белым и полупрозрачным, наутро снова обычный человек. Догадка была про обновление ассортимента - не подтвердилась, и это стоит записать, потому что по часам лавки модель не трогает ВООБЩЕ ничего: TraderData при сбросе переписывает только PrimaryInventory и lastInventoryUpdate, а TraderArea.SetClosed ходит по блокам TraderOnOff - двери, замки, BlockLight, динамик - и до сущности торговца не дотягивается. Настоящая причина в EntityFactory.CreateEntityOperation.CompleteEntity: `entity.entityId = ecd.id`, то есть сохранённый айди ВОССТАНАВЛИВАЕТСЯ. Торговцы стримятся на подходе и точно так же выгружаются, когда игрок уходит на ночь. Возвращается он - торговец собран заново: новый GameObject, новые рендереры, ванильные материалы, ТОТ ЖЕ entityId. А в патче стоял HashSet Ghosted - "этот айди я уже обработал". Айди в наборе есть, свип проходит мимо, торговец остаётся живым человеком до конца сессии. Отсюда и "на следующее утро": симптом идёт не за часами лавки, а за чанком, в котором лавка стоит. Ghosted стал Dictionary, где GhostBody держит массив рендереров, которые патч взял себе. IsIntact проверяет их: у Unity уничтоженный объект сравнивается с null, так что подмена модели видна прямо, и та же проверка бесплатно закрывает любую другую пересборку, не только выгрузку чанка. Prune чистит Converted и TintedMaterials от уничтоженных объектов. Без него оба списка росли бы на одного торговца за каждую пересборку, а Retint/Reapply ходили бы по обломкам. Материал, выданный через renderer.materials, принадлежит рендереру и умирает вместе с ним - одного прохода хватает на оба списка. В лог добавлена строка "entity came back with a new model" - ровно та, которой не хватало, чтобы найти это за один заход вместо разбора в декомпиляторе. Счётчик в necroghost переименован: со словарём он означает "торговцев под присмотром сейчас", а не "id, которые когда-либо видели" - он теперь падает и растёт. Не проверено в игре: нужен заход к торговцу, выгрузка лавки и возвращение. --- Traders go back to being ghosts after a chunk unload Reported from the stream: a trader who had gone black-and-white and translucent was an ordinary person again the next morning. The guess was the restock - it was wrong, and that is worth recording, because nothing on the shop's clock touches the model at all: TraderData's reset rewrites PrimaryInventory and lastInventoryUpdate only, and TraderArea.SetClosed walks TraderOnOff blocks - doors, locks, BlockLight, speaker - and never reaches the trader entity. The real cause is in EntityFactory.CreateEntityOperation.CompleteEntity: `entity.entityId = ecd.id`, so the saved id is RESTORED. Traders are streamed in on approach and streamed out the same way when the player leaves for the night. On return the trader is rebuilt from scratch - new GameObject, new renderers, the game's own materials - carrying THE SAME entityId. The patch held a HashSet Ghosted, meaning "this id is done". The id was still in the set, the sweep skipped him, and he stayed an ordinary person for the rest of the session. Hence "the next morning": the symptom follows the chunk the shop sits in, not the shop's clock. Ghosted is now a Dictionary, the value holding the renderers the patch took over. IsIntact tests them: Unity's destroyed objects compare equal to null, so a swapped model is directly visible, and the same check covers any other rebuild for free. Prune drops destroyed entries from Converted and TintedMaterials. Without it both lists would grow by one trader's worth per rebuild and Retint/Reapply would be walking the wreckage. A material assigned through renderer.materials is owned by that renderer and dies with it, so one pass settles both. A log line was added - "entity came back with a new model" - the exact line that was missing to find this in one visit rather than in a decompiler. The necroghost counter was reworded: with a dictionary it means "traders held as ghosts right now", not "ids ever seen" - it now falls as well as rises. Not tested in game: needs a visit, a shop unload and a return. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MnwP2Dt1vk8bUPJ452EoVL --- HarmonySrc/GhostTraderCommand.cs | 9 ++- HarmonySrc/GhostTraderPatch.cs | 118 ++++++++++++++++++++++++++++--- NecromancerHarmony.dll | Bin 90112 -> 90624 bytes NecromancerHarmony.pdb | Bin 28712 -> 28980 bytes 4 files changed, 117 insertions(+), 10 deletions(-) diff --git a/HarmonySrc/GhostTraderCommand.cs b/HarmonySrc/GhostTraderCommand.cs index 5714664..432656f 100644 --- a/HarmonySrc/GhostTraderCommand.cs +++ b/HarmonySrc/GhostTraderCommand.cs @@ -148,7 +148,12 @@ namespace NecromancerTome /// Current value plus what it actually reached, in both units, and which way the /// body is being faded. The count is the half that answers "did it do anything": 0 /// materials means no trader has been converted yet - they stream in on approach - not - /// that the number was refused. + /// that the number was refused. + /// + /// The trader count is "held as a ghost RIGHT NOW", not "seen this session": since the + /// 2026-09-15 fix, Ghosted is keyed by entity id but re-entered when a trader is rebuilt, + /// and a trader whose chunk has unloaded keeps his entry only until the next sweep finds + /// his model gone. So the number falls as well as rises, and that is correct. public static void Report(string _prefix) { float alpha = GhostTraderPatch.GhostAlpha; @@ -157,7 +162,7 @@ namespace NecromancerTome _prefix + ": " + ((1f - alpha) * 100f).ToString("0.#") + "% transparent (alpha " + alpha.ToString("0.###") + "), body mode " + GhostTraderPatch.BodyMode + ", applied to " + applied + " live material(s) across " + - GhostTraderPatch.Ghosted.Count + " trader(s) converted this session."); + GhostTraderPatch.Ghosted.Count + " trader(s) currently held as ghosts."); } /// Percent out of what the user typed. StringParsers is the game's own parser and diff --git a/HarmonySrc/GhostTraderPatch.cs b/HarmonySrc/GhostTraderPatch.cs index 336b766..1a7b1ea 100644 --- a/HarmonySrc/GhostTraderPatch.cs +++ b/HarmonySrc/GhostTraderPatch.cs @@ -67,6 +67,11 @@ namespace NecromancerTome /// Polling with ModEvents.UnityUpdate - the same approach PetFollowPatch.cs already uses here - /// avoids guessing at the right moment inside someone else's character pipeline. A trader with /// no renderers yet is simply not marked done and is picked up on the next sweep. + /// + /// The same tick is what puts a trader BACK once the game has rebuilt him - see Ghosted, and + /// the bug of 2026-09-15 that taught this file the difference between an entity id and a + /// model. A spawn hook would not have helped there either: the entity was never re-created as + /// far as its id is concerned. /// public static class GhostTraderPatch { @@ -135,6 +140,16 @@ namespace NecromancerTome public Material[] Originals; } + /// What one trader was actually given, kept so the sweep can ask "is he STILL a + /// ghost" instead of only "have I seen this id". The renderers are the answer: a trader + /// that streams out and back in is rebuilt from scratch - new GameObject, new renderers, + /// the game's own materials - while keeping the id he was saved under, so an id on its own + /// says nothing about the model standing there now. See the Ghosted comment. + public struct GhostBody + { + public Renderer[] Renderers; + } + /// Every renderer taken over, in the order it was found. Pruned of destroyed /// renderers as they are walked; dropped wholesale when the world unloads. public static readonly List Converted = new List(); @@ -192,8 +207,29 @@ namespace NecromancerTome /// beyond doubt: 1 = solid, 0 = gone, exactly like an alpha. public static readonly string[] FadeNameHints = { "_Fade" }; - /// Entity ids already converted. Cleared when the world unloads. - public static readonly HashSet Ghosted = new HashSet(); + /// Traders already converted, by entity id, WITH the renderers each was given. + /// Cleared when the world unloads. + /// + /// THE VALUE IS NOT DECORATION - it is the fix for "the trader stopped being a ghost the + /// next morning" (2026-09-15). This was a HashSet of ids, and an id is not enough: + /// EntityFactory restores `entity.entityId = ecd.id` from the save, so a trader who is + /// streamed out while the player is away (they are streamed IN on approach in the first + /// place - see the class comment) comes back as a BRAND NEW GameObject carrying the SAME + /// id, with the game's own materials on it. The set still held the id, the sweep skipped + /// him, and he stayed an ordinary living person for the rest of the session. + /// + /// It is NOT the restock, which was the first guess and is worth writing down as ruled + /// out: TraderData's reset rewrites PrimaryInventory and lastInventoryUpdate and touches + /// no renderer, and TraderArea.SetClosed - the whole open/close cycle - only works doors, + /// lights and speakers. Nothing on the shop's clock ever reaches the model. What does is + /// the chunk the shop sits in, which is why the symptom looks like it follows the morning: + /// the player is away for the night, the trader unloads with his chunk, and he is rebuilt + /// when they walk back. + /// + /// Holding the renderers makes the question answerable: Unity's destroyed objects compare + /// equal to null, so a trader whose model is gone is visible as such, and the same check + /// covers any other rebuild of the model for free. + public static readonly Dictionary Ghosted = new Dictionary(); /// Source shader names already described in the log, so the probe says each /// distinct thing once rather than once per trader per part. @@ -252,21 +288,84 @@ namespace NecromancerTome { continue; } - if (Ghosted.Contains(trader.entityId)) + if (Ghosted.TryGetValue(trader.entityId, out GhostBody body)) { - continue; + if (IsIntact(body)) + { + continue; + } + // His model was destroyed and rebuilt under him. Drop what is known about the + // old one before building the new, or Converted and TintedMaterials keep + // entries for renderers and materials that no longer exist. + Debug.Log("[NecromancerTome] GhostTraderPatch: entity " + trader.entityId + + " came back with a new model - ghosting him again"); + Ghosted.Remove(trader.entityId); + Prune(); } - if (ApplyGreyscale(trader)) + if (ApplyGreyscale(trader, out GhostBody fresh)) { - Ghosted.Add(trader.entityId); + Ghosted[trader.entityId] = fresh; + } + } + } + + /// Is this trader still wearing what we put on him? False the moment any part of + /// the model we converted has been destroyed - which is what a stream-out and back in + /// looks like from here, and equally what any other rebuild of the model would look like. + /// + /// Deliberately NOT "does he have renderers we have not converted": a trader gains and + /// loses renderers in normal play (a held item, worn equipment), and treating that as a + /// rebuild would re-run the conversion on renderers already carrying our materials - whose + /// sharedMaterials hand back OUR clones, so the "originals" kept for the next mode switch + /// would be re-shaded ones with no way back. The known gap that leaves is a part of the + /// model built AFTER the first sweep reached him: it stays in colour until he next + /// reloads. Nothing like that has been seen on the six traders. + public static bool IsIntact(GhostBody _body) + { + if (_body.Renderers == null || _body.Renderers.Length == 0) + { + return false; + } + foreach (Renderer renderer in _body.Renderers) + { + if (renderer == null) + { + return false; + } + } + return true; + } + + /// Drops every entry whose Unity object the game has destroyed. Both lists are + /// session-long and keyed by nothing - without this they grow by one trader's worth of + /// renderers and materials every time a trader is rebuilt, and Retint/Reapply would be + /// walking the wreckage. A material assigned through renderer.materials is owned by that + /// renderer and dies with it, so one pass settles both. + public static void Prune() + { + for (int i = Converted.Count - 1; i >= 0; i--) + { + if (Converted[i].Renderer == null) + { + Converted.RemoveAt(i); + } + } + for (int i = TintedMaterials.Count - 1; i >= 0; i--) + { + if (TintedMaterials[i].Material == null) + { + TintedMaterials.RemoveAt(i); } } } /// False when there is nothing to work on yet (model not built), so the caller - /// leaves this trader unmarked and tries again on the next sweep. - public static bool ApplyGreyscale(EntityTrader _trader) + /// leaves this trader unmarked and tries again on the next sweep. On true, _body carries + /// the renderers taken over, which is how the next sweep tells this trader from a rebuilt + /// one standing under the same entity id. + public static bool ApplyGreyscale(EntityTrader _trader, out GhostBody _body) { + _body = default(GhostBody); Renderer[] renderers = _trader.GetComponentsInChildren(true); if (renderers == null || renderers.Length == 0) { @@ -279,6 +378,7 @@ namespace NecromancerTome int converted = 0; int leversBefore = TintedMaterials.Count; + List taken = new List(renderers.Length); foreach (Renderer renderer in renderers) { if (renderer == null || renderer is ParticleSystemRenderer) @@ -293,11 +393,13 @@ namespace NecromancerTome } Converted.Add(new GhostRenderer { Renderer = renderer, Originals = sources }); + taken.Add(renderer); if (Convert(renderer, sources)) { converted++; } } + _body.Renderers = taken.ToArray(); // The lever count is the half that answers "will the console command reach him": // desaturation and opacity come from different properties, and the body had the first diff --git a/NecromancerHarmony.dll b/NecromancerHarmony.dll index 16f693c852533226e36add7f8574a20247e35303..1b08c8cd33bf79028cef89767fc723b37268e4a2 100644 GIT binary patch delta 28194 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 diff --git a/NecromancerHarmony.pdb b/NecromancerHarmony.pdb index 37d4945282639aa1fe943563729707d7b73e3a03..7f437d5deb562df552d67fe43cbb2d87045b61ca 100644 GIT binary patch delta 7691 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