diff --git a/HarmonySrc/BlockPickupPatch.cs b/HarmonySrc/BlockPickupPatch.cs index 28cdb6b..50106a9 100644 --- a/HarmonySrc/BlockPickupPatch.cs +++ b/HarmonySrc/BlockPickupPatch.cs @@ -43,7 +43,17 @@ namespace NecromancerTome /// Data/Config/blocks.xml block names (checked directly, matched by name PREFIX since most /// categories have many color/variant blocks) - tell me if any of these aren't what was /// meant, this is an interpretation, not a spec: - /// - "Кровати" (beds) -> bedMadeNoFrame*/bedMessyNoFrame* ONLY. Deliberately excludes + /// - ОБНОВЛЕНО 2026-09-18: кровати класса SleepingBag (bed02*, bunkBed*) ТЕПЕРЬ ВКЛЮЧЕНЫ, + /// см. комментарий в TargetPrefixes. НОВЫХ ПАТЧЕЙ ДЛЯ НИХ НЕ ПОНАДОБИЛОСЬ, и это стоило + /// проверить: BlockSleepingBag переопределяет только CanPlaceBlockAt, PlaceBlock, + /// GetActivationText и ЧЕТЫРЁХаргументный OnBlockActivated. Наши три патча висят на + /// HasBlockActivationCommands, GetBlockActivationCommands и ПЯТИаргументном + /// OnBlockActivated - ни одного из них он не перекрывает, поэтому патчи базового Block + /// достают его как есть. С BlockCompositeTileEntity (кулеры, коробки) так не вышло - + /// там понадобился отдельный набор, см. ниже. + /// + /// - Исходная формулировка, оставлена для истории: + /// "Кровати" (beds) -> bedMadeNoFrame*/bedMessyNoFrame* ONLY. Deliberately excludes /// bed02*/bunkBedMade*/bunkBedMessy* even though they look like beds too - decompiling /// showed those all use Class="SleepingBag" (they're actually functional sleeping-bag/ /// respawn-anchor blocks, not pure decoration - same family as the player's own bedroll, @@ -74,6 +84,27 @@ namespace NecromancerTome { "bedMadeNoFrame", "bedMessyNoFrame", + // ДОБАВЛЕНО 2026-09-18, И ЭТО ИСПРАВЛЕНИЕ ПРОМАХА ПО ЦЕЛИ. Изначально эти кровати были + // исключены НАМЕРЕННО, с формулировкой "это respawn-anchor блоки, не декорация, + // трогать не просил". Оказалось ровно наоборот: пользователь объяснил, что подбор + // кроватей нужен ИМЕННО ради возрождения - "поглощённые блоки сохраняют состояние, + // которое было до поглощения; кровати до поглощения не являются точкой возрождения; + // точкой возрождения они могли бы стать при подборе". + // + // Проверено декомпиляцией BlockSleepingBag: PlaceBlock ставит игроку + // selectedSpawnPointKey и запоминает BedrollPos - то есть поставленная своими руками + // кровать действительно становится точкой возрождения, а стоящая в POI - нет. + // + // Один префикс покрывает все цветовые варианты: bed02White, bunkBedMessyBlue и прочие + // наследуют Class="SleepingBag" через Extends от bed02 / bunkBedMade. + // Вместе с bunkBed* попадают bunkBedFrame и bunkBedMattress - у них класса нет, они + // просто декор, и подбирать их не вредно. + // + // bedroll НЕ включён намеренно: это собственный предмет игрока, он и так ставится и + // снимается штатно, а bedrollPOI - отдельный декоративный блок, который от bedroll не + // наследуется и точкой возрождения не является. + "bed02", + "bunkBed", "cntWaterCooler", "cntCardboardBox", }; diff --git a/NecromancerHarmony.dll b/NecromancerHarmony.dll index e849b38..94dffef 100644 Binary files a/NecromancerHarmony.dll and b/NecromancerHarmony.dll differ diff --git a/NecromancerHarmony.pdb b/NecromancerHarmony.pdb index 979d0bd..38ab14b 100644 Binary files a/NecromancerHarmony.pdb and b/NecromancerHarmony.pdb differ