Мод для 7 Days to Die 3.2: навык «Некромантия», растущий от счётчика убитых зомби, тёмное оружие с шестью собственными модами, призывная нежить, пирамида духов и сюжетный финал через Чёрный портал. Локализация на 13 языках. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MaNro5hAGTzcQ7rJNN2tCX
91 lines
6.4 KiB
XML
91 lines
6.4 KiB
XML
<config>
|
|
<!-- "Пирамида Ереси" (Pyramid of Heresy) - user request 2026-08-31: a placeable ward that
|
|
periodically applies the existing Deviator charm (see HarmonySrc/PyramidWardPatch.cs,
|
|
reusing HarmonySrc/CharmPatch.cs's buffNecroDeviatorCharm wholesale - no new charm logic
|
|
was written, this just triggers the same buff on a timer) to any un-charmed zombie that
|
|
wanders into its radius, turning it against other zombies instead of the player/base - a
|
|
"barrier" in effect, not in physics: it never pushes or physically blocks anything, it
|
|
flips allegiance.
|
|
|
|
SHAPE: Shape="New" + Model="@:Shapes/pyramid.fbx" - the same standalone pyramid mesh
|
|
vanilla itself ships and uses for imposterPyramid's own LOD model (Data/Config/blocks.xml,
|
|
"*** blockNextGen imposters" section) - a real, solid, always-loaded asset, not invented
|
|
for this mod. Checked the "tentBiohazardRoofXxx" tent-roof pieces first (they're the
|
|
nearest thing to a "block with a pyramid top" already in vanilla) but rejected them - all
|
|
of them are 3x1x1/3x2x3 multi-blocks meant as building-sized tent roofs, wrong shape/scale
|
|
for a single placeable ward. Red per the user's request via TintColor="8A4142" - the exact
|
|
hex vanilla's own tentBiohazardRoofRed/tentBiohazardRoofCenterRed use for their red tint,
|
|
reused here rather than inventing a new one.
|
|
|
|
FIXED 2026-08-31 (user report: placed fine but genuinely invisible - "нету префаба"):
|
|
missing `Texture` property. EVERY vanilla block using this exact Shape="New" + a custom
|
|
standalone Model="@:Shapes/....fbx" (imposterPyramid itself, imposterQuarter,
|
|
imposterCTREighth, poiFillerBlock - checked all of them directly) always pairs it with an
|
|
explicit `Texture="N"` atlas index; ours never had one, which is the real, simple root
|
|
cause. Also switched Material from plain "Msteel" to "Msteel_shapes" + Texture="356" -
|
|
the exact Material/Texture pair vanilla's own `steelShapes` block (the real "shapes=All"
|
|
steel building family) uses for this same "New" shape renderer - plain "Msteel" is meant
|
|
for non-shape steel blocks (doors, hatches) and was never a matched pair with Shape="New"
|
|
to begin with. TintColor="8A4142" still multiplies on top as before.
|
|
|
|
User specifically asked to reuse the "Пирамида 1 м" ("Pyramid 1m") shape/prefab -
|
|
genuinely tried, but that specific shape turned out to be a NAMED VARIANT of the engine's
|
|
procedural multi-shape building system (`shapes="All"` blocks like `steelShapes`/
|
|
`concreteShapes` - see those in vanilla blocks.xml), not a standalone asset with its own
|
|
file path at all: decompiled `BlockShapeNew` (the C# class behind every Shape="New" block)
|
|
directly and it contains NO "Pyramid" string anywhere - the mapping from a shape's display
|
|
name to its actual geometry lives in compiled/binary shape-node data this decompile
|
|
couldn't reach, not in anything grep-able or copyable as a `Model=` path. Reproducing that
|
|
exact shape would mean reverse-engineering that binary shape data, real extra work with an
|
|
uncertain payoff - what shipped instead is the closest already-proven-working equivalent:
|
|
the same "New"-shape pyramid mesh `imposterPyramid` itself uses, now actually configured
|
|
correctly (see the fix above) so it renders for real. If the proportions look wrong next to
|
|
the in-game "Pyramid 1m" (e.g. too tall/full-block instead of a short 1m cap), that's a
|
|
scale tweak once it's visible, not a rendering bug - say so and it can be resized.
|
|
|
|
REWRITTEN 2026-09-01, Class changed from none to Class="CompositeTileEntity" +
|
|
CompositeFeatures/TEFeaturePyramidWard - two direct user findings drove this:
|
|
1. "Навожу прицел, но подсказка про E не появляется" - the original plain-Block +
|
|
Harmony-patches-on-Block approach never showed the E-prompt at all, because a
|
|
SEPARATE gate method (Block.HasBlockActivationCommands) was never patched and always
|
|
said "nothing to activate" for a plain decorative block.
|
|
2. "Сделай TileEntity" - direct request for the effect/zone toggle state to actually
|
|
survive a save/reload, which the old static-Dictionary-in-Harmony-patch version could
|
|
not do at all (documented as a known caveat before, now actually fixed).
|
|
Same syntax vanilla's own keystoneBlock (Land Claim) already uses for this exact
|
|
Class="CompositeTileEntity" + CompositeFeatures pattern - see HarmonySrc/
|
|
PyramidWardPatch.cs's own class doc comment on TEFeaturePyramidWard for the full decompiled
|
|
reasoning (why this is the sanctioned extension point, not a hardcoded-switch hack; the
|
|
E-menu/persistence/per-tick mechanics all live there now, not in this XML file). -->
|
|
<append xpath="/blocks">
|
|
<block name="necroHeresyPyramid">
|
|
<property name="CreativeMode" value="Player" />
|
|
<property name="DescriptionKey" value="necroHeresyPyramidDesc" />
|
|
<property name="Class" value="CompositeTileEntity" />
|
|
<property class="CompositeFeatures">
|
|
<property class="TEFeaturePyramidWard" />
|
|
</property>
|
|
<property name="Material" value="Msteel_shapes" />
|
|
<property name="Shape" value="New" />
|
|
<property name="Model" value="@:Shapes/pyramid.fbx" />
|
|
<property name="Texture" value="356" />
|
|
<property name="TintColor" value="8A4142" />
|
|
<!-- Real generated art (exch/pyramidOfSpirit.png, copied to
|
|
UIAtlases/ItemIconAtlas/) added 2026-09-02, per direct instruction - no
|
|
CustomIconTint alongside it (same lesson as every other real icon in this mod,
|
|
e.g. resourceZombieAsh: a real drawn icon already has its own correct color, tinting
|
|
it on top would recolor it unintentionally). TintColor above is unaffected - that's
|
|
the 3D block MESH's tint, a completely separate thing from the 2D inventory icon. -->
|
|
<property name="CustomIcon" value="pyramidOfSpirit" />
|
|
<property name="Group" value="Decoration" />
|
|
<property name="FilterTags" value="MC_building,SC_decor" />
|
|
<property name="Collide" value="movement,melee,bullet,arrow,rocket" />
|
|
<property name="StabilitySupport" value="false" />
|
|
<property name="MaxDamage" value="2000" />
|
|
<property name="EconomicValue" value="0" />
|
|
<property name="SellableToTrader" value="false" />
|
|
<drop event="Destroy" name="resourceScrapIron" count="10,20" />
|
|
</block>
|
|
</append>
|
|
</config>
|