Книга некроманта 1.0 — первая публичная версия
Мод для 7 Days to Die 3.2: навык «Некромантия», растущий от счётчика убитых зомби, тёмное оружие с шестью собственными модами, призывная нежить, пирамида духов и сюжетный финал через Чёрный портал. Локализация на 13 языках. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MaNro5hAGTzcQ7rJNN2tCX
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
<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>
|
||||
Reference in New Issue
Block a user