From b6a892cadda81f00501f40596f4a260b3af10148 Mon Sep 17 00:00:00 2001 From: AlexCube Date: Fri, 18 Sep 2026 21:21:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B1=D0=BE=D1=80=20=D0=BA?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=B9:=20=D0=B2=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D1=8B=20=D1=82=D0=B5,=20=D1=87?= =?UTF-8?q?=D1=82=D0=BE=20=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D1=8F=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D1=82=D0=BE=D1=87=D0=BA=D0=BE=D0=B9=20=D0=B2?= =?UTF-8?q?=D0=BE=D0=B7=D1=80=D0=BE=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Исправление промаха по цели. Кровати класса SleepingBag (bed02*, bunkBed*) были исключены из подбора НАМЕРЕННО, с формулировкой "это respawn-anchor блоки, не декорация, трогать не просил" - и подбирались только декоративные bedMadeNoFrame*/bedMessyNoFrame*. Пользователь объяснил, что смысл подбора кроватей ровно обратный: "поглощённые блоки сохраняют состояние, которое было до поглощения. Кровати до поглощения не являются точкой возрождения. Точкой возрождения они могли бы стать при подборе". То есть мы подбирали ровно те кровати, которые не нужны, и не подбирали те, ради которых всё затевалось. Проверено декомпиляцией BlockSleepingBag: PlaceBlock ставит игроку selectedSpawnPointKey и запоминает BedrollPos - поставленная своими руками кровать действительно становится точкой возрождения, а стоящая в POI нет. Значит подбор и поглощение браслетом решают РАЗНЫЕ задачи. Новых патчей не понадобилось, и это проверялось до правки: BlockSleepingBag переопределяет только CanPlaceBlockAt, PlaceBlock, GetActivationText и ЧЕТЫРЁХаргументный OnBlockActivated. Наши три патча висят на HasBlockActivationCommands, GetBlockActivationCommands и ПЯТИаргументном OnBlockActivated - ни одного из них он не перекрывает. С BlockCompositeTileEntity (кулеры, коробки) в своё время так не вышло и понадобился отдельный набор. Добавлены два префикса: bed02 и bunkBed. Полсотни цветовых вариантов наследуют Class="SleepingBag" через Extends и покрываются ими же. bedroll НЕ включён: собственный предмет игрока, ставится и снимается штатно, а bedrollPOI от него не наследуется и точкой возрождения не является. В ИГРЕ НЕ ПРОВЕРЕНО. Смотреть надо одно: становится ли поднятая и заново поставленная кровать точкой возрождения на самом деле. Co-Authored-By: Claude Opus 5 --- HarmonySrc/BlockPickupPatch.cs | 33 ++++++++++++++++++++++++++++++++- NecromancerHarmony.dll | Bin 111104 -> 111104 bytes NecromancerHarmony.pdb | Bin 34332 -> 34336 bytes 3 files changed, 32 insertions(+), 1 deletion(-) 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 e849b380074ca68e16f5c9423ae525eee02896a7..94dffef20b47d05776118ab8d2bfed991e8ebf3d 100644 GIT binary patch delta 10709 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 delta 10650 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 B7773W diff --git a/NecromancerHarmony.pdb b/NecromancerHarmony.pdb index 979d0bd19076065ebc8b0e305a36ca1f6288be25..38ab14bca343251f25d8dd681082ab047478e36f 100644 GIT binary patch delta 2015 zcmZYA3s6*57zgn0?%sWH0p+={Y$Ac6upkS_`ynANiVLiZfJr4#YKmcEWDeRTM+hB! zZh{Xo4RU;u;I*cBNJgfiq!wBVK9Dp`l)_RAoBH3Izx)5rnRD+sXZGB=wNC6&NINC;L^TCj>{ zKn2tWtEmpI24h8}CWS%Glb=CNiI5L(z;5UP?+_dEhcuW0xljNLU;vy$Z748Qd=N*` zp&S*$MrZ}UFphGd25cvAlmKP$6X?P@GQ$pN4CguOLlGUp(G>`b81ju~2F&05+EvD3Ab220>eaJ6X38v-mIv;gFp9yA-aLO1k6@(d3ugs?0f zy#YONCyUpSHd{x_v!9~1a4=g=svJ3K!4JkmBBbSr|G$#5q*T+Y95ppSGaQHR$Nhb% z?@F~eUQNSKYOyW;Mo{6*e=6ykOs-Tj)0OI_PFHF{-SuRE8(n--i^H{a?LTd?Pf3G9 zzk*?yIN`doZWON=FZME2hZkDRVSiRigI+1+CcRq9)*wzwKG;sm^T8veG=?}xnIGyT zWl6M)l(sP%DHG$|rCd1CLrQ(pQ&L_tc_J^2p{HqxPSIFm=~ZqlDX7lwW4WA$Rp)X2 zMeU_il10$_o>Y6CI2+zvdE}P^Z?3nL&tA=332E`ojjKL3bbWbq`Crjb^MYplK^6b- z^TgcK$r(eN42O(#_Q1LPhaT$(Yc5{@M7z$e+OX8;trhmzV1uC(abPU`bh}e)e=BruvZ`M6jda_5?Crn!IBkXrMHZtI~;!fVL zeXA+-8T0IY=UTnWJZ~7!XFAoNF}LQd{(yfseM`lZFWJm)!^pBmVtsrcoIJDaVctq_ z-#c-6omQKER;zKy|IlVjWxd5ktDe8|J5xZSW5+v-@48&I=<>d*o$L4Oj-HJ!UDh1` zU2c!e_YUP|-Yf1(=K7O#ov*hS{psl2`+UXJzPRu~*+;tre>nE_18V=PPj_N~n|wCX z$Tt}x4>uQ^Hg3|csqALG;e0}`% z(64=j`rSK1JLXS4&|W%g#Y?4y^X?zL+!H%oFfY%0^c`zkY1^{4#Y17W`nfM(t;pMB z=$hglT*@AWnjBb}oEUb6__hU=9acz-#y;uUvNnYya&%ee R|Aw9a_pmF%q*dQDe*@k*Ao>6R delta 1998 zcmZY8dr(wW90%~<-CcH|qY1k~- zwOLSA=;fb9G|sqe#R4L_ADH~eFGXb96o32+yS)v@ecO*VwpGZKxkyf^295RKfQ_Vj6~?U@?h9#8e2)px22hK_{UU zSPR>AQu-7Ib=VO}i9)3o@(z_!4CFu&?16r853?m7NPrYD!yH%)zkoxyE%}9W6Uitd zTt<1Y89Kmwf{aq32E-9E(!(kk0_8**CBi4rGSMQVt0*EOWpo8XqGYrc;@^;wP;W;D zD1jC|w~##z=V6w!GCNmU31#AQ9Nr>VLVt8@koWbco!Om_-QUw2<5N?2H^TMCCR2M$s3F?7Ybnm z9E7jo4k!|oGzWHqafXtLVX;X`@4<&~!=$3+i7NUMG)XEdPEuQFO_G`(KdcYp%_G94IgIpNfA@B^Rp6bfM4qP8VuNefsqP6Gx?1hGTnMt2K^aJ>vQ;6iixG(f~>uvX0H7A-Cw`a6PUe3t0!`8=<4;L{MM z;4>$DG@pffXFkQzNrE}d2XzJ&MHF= zNi6$6-knkXEbGsAeNsD*Kd*~mHpV{5@-ZFUVcXSHzB=gS+7dYq*lO)F3Bwep?w6l9 z`J;7g@t~>o(%6e-w+xQKC5ln(<;&M5M^^i^+&e%05BVf%ndh4IkG7mK2PoqX9JZ#t znDA%cq8i(>$EMb~b^>*7!KD&oO+Vde9otXFZqN z?e%oeaP!+~hlbYoiq6Uw1`K9hjZ6tpz6j5maldIGboO7v%)V(4ovXf^uwJ?7a}wdeV)jFzoQxsur*HUT{rT4%5H1qrX9s> z`j(hd@5wEXtM&DztBQ4=zs)a+>U{V>o3pea|K|<4^A^@r zA1PefzP)I6vY~Utfn5|8=_x5-nkty4TI(M3Y}pXgbnjL3FY|3C%{rW62u0_sF`jr0 zz4Ap;l86Khtrl4vDNaCY@(|#@FanFGgeZEYH7nEISuC0%w8Kl~6C;vvUkR}UTbUUk zQ1H{W)-$d9{#l7VnawgHZUt*ePMYKdzgjJOF(;qvZPT)bxhjU+Wi9j7GCXiqWz7d=6E97RbWtS}L6o}lp%6~gu2yjAHXDBXI2dJ>ern^0^ek=p->{B<59?wRKKhAa F=x?c{7FPfO