ИИ питомцев переписан, добавлен Дух крысы, пороги разнесены по шкале
Работа по указаниям 2026-09-18. В релиз пока не выходит. НОВЫЙ ПИТОМЕЦ "Дух крысы" (necroRatSpirit), Некромантия 3 (60 убийств): модель зомбоволка в масштабе 0.28, урон 5, кроличьи звуки. Сам не нападает никогда, держится справа-сзади в двух блоках, упёршись в препятствие проходит СКВОЗЬ него и блоков не ломает. Укус замедляет, оставляет метку духа (видна на компасе, +25% получаемого урона) и рвёт жилу. Обгрызая труп, лечится. СВОЯ ЗАДАЧА ИИ. Задачи "иди за сущностью" в игре нет вовсе - проверены все 32 типа EAI*. Написана NecroFollowOwnerTask по образцу EAIApproachSpot: сектор "3-6 часов" от хозяина, FindPath с canBreak:false, проход сквозь препятствие через Entity.IsStuck. Вешается в рантайме, минуя Type.GetType. ПРИКАЗ АТАКОВАТЬ. Повторное применение свитка при живом питомце натравливает его на цель под прицелом: EntityPlayerLocal.HitInfo + ItemActionAttack. GetEntityFromHit. Торговцы и игроки отсеяны. Нет цели - "Нет цели для атаки". ЗОМБОЖИВОТНЫЕ ПРИВЕДЕНЫ К ТОМУ ЖЕ ОБРАЗЦУ. Сняты BreakBlock, Territorial, ApproachSpot, Wander, BlockingTargetTask и поедание трупов; цель они больше не выбирают сами. Лестница урона 20/35/45/60 плюс расчленение у Пса, Медведя и Волка. Кровотечение всем, метка и ослабление - только у крысы. УБИЙСТВА ПИТОМЦЕМ ЗАСЧИТЫВАЮТСЯ ВЛАДЕЛЬЦУ, включая добивание кровотечением. Префикс на AwardKillXPServer подменяет убийцу владельцем; для смерти от баффа заведена память укусов, потому что в DamageSource от баффа нет того, кто его наложил. Зомби под Камнем духов это не задело - решение от 17.09 в силе. ГРИФ откачен на летающую ветку EntityVulture и переименован в Могильного стервятника: модель наконец соответствует имени. Держится у игрока сам, через собственный механизм "дома" (setHomeArea), на время погони дом отвязывается. Попытка натянуть птичий префаб на наземный класс провалилась и записана - так делать нельзя. ПРОЧЕЕ: призрачный вид распространён с торговцев на питомцев (у Пса, Медведя и Волка выключен по указанию), у Пса светятся фиолетовые глаза, белая иконка книги снята со всех свитков призыва, "Жуки Властелина" переименованы в "Рой фараона" на всех 13 языках. ПОРОГИ: крыса 60, стервятник 500, пёс 1300, медведь 2000, волк 4000. ИСПРАВЛЕНО ПО ХОДУ ИГРОВЫХ ПРОВЕРОК: питомцы не призывались обычным кликом (AnimWait требовал удержания), отзыв срабатывал не с первого раза (автомат состояний ItemActionSpawnEntity), крыса проваливалась сквозь мир (IsStuck отключает и пол), питомец подбрасывал хозяина (коллайдеры разводились до появления модели). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
15c59dd37a
commit
d97f83e972
+309
-13
@@ -518,7 +518,10 @@
|
||||
<append xpath="/items">
|
||||
<item name="bookSummonZombieDog">
|
||||
<property name="Tags" value="T0,weapon,attPerception"/>
|
||||
<property name="ItemTypeIcon" value="book"/>
|
||||
<!-- ItemTypeIcon="book" УБРАН 2026-09-18 со ВСЕХ свитков и книг призыва разом,
|
||||
прямое указание: "свитки призыва и книги призыва не должны содержать белую
|
||||
иконку книги поверх. Они ПРЕДМЕТЫ, а не рецепты." Полный разбор виджета - у
|
||||
bookSummonRatSpirit ниже и у Пространственного браслета (07.09). -->
|
||||
<!-- ICON REPLACED 2026-08-29: swapped the user's earlier hand-drawn
|
||||
schematicDogSummon.png for the new AI-generated SummonZombieDog.png, to match
|
||||
the rest of the item set's unified style (same prompt/generator as the other 12
|
||||
@@ -546,7 +549,22 @@
|
||||
<property class="Action0">
|
||||
<property name="Class" value="SpawnEntity"/>
|
||||
<property name="AnimType" value="4"/>
|
||||
<property name="AnimWait" value="0.3"/>
|
||||
<!-- 0.05, а не 0.3 - выровнено со Свитком духа крысы 2026-09-18, после того как
|
||||
в игре не призвались НИ ГРИФ, НИ ВОЛК, НИ МЕДВЕДЬ, ни пёс, а крыса
|
||||
призвалась. В логе у всех четверых было только "action index=1" (отзыв) и ни
|
||||
одного index=0: до Spawn основной клик не доходил вовсе.
|
||||
|
||||
ItemActionSpawnEntity.OnHoldingUpdate копит stateTime по 0.05 за тик и
|
||||
сравнивает с animWait, а ExecuteAction(_bReleased: true) при отпускании
|
||||
кнопки сбрасывает состояние в None. То есть 0.3 означало "держать кнопку
|
||||
треть секунды", шесть тиков подряд, и обычный клик до спавна не доживал -
|
||||
молча, без ошибки и без строки в логе.
|
||||
|
||||
Раньше это сходило с рук: призыв делают раз за сессию и кнопку держали. Но
|
||||
теперь на этом же слоте сидит КОМАНДА АТАКОВАТЬ, которую отдают быстро и
|
||||
часто, - и требовать под неё удержание нельзя. У крысы это было исправлено
|
||||
сразу, у остальных - забыто; теперь у всех одинаково. -->
|
||||
<property name="AnimWait" value="0.05"/>
|
||||
<property name="SoundWarn" value="zombiedogalert"/>
|
||||
<property name="SoundAttack" value="zombiedogattack"/>
|
||||
<property name="Entity" value="necroZombieDog"/>
|
||||
@@ -587,15 +605,99 @@
|
||||
since it doesn't mean much against a zombie, kept only the slow that was asked
|
||||
for. Gated to zombies only, same EntityTagCompare pattern as everywhere else in
|
||||
this mod that adds a buff on hit. -->
|
||||
<!-- УРОН ПОДНЯТ С ВАНИЛЬНЫХ 8 ДО 35, 2026-09-18. Указание: зомбоживотные - это "по
|
||||
сути те же крысы, но размер модели оригинальный, урон нарастает от зомбособаки до
|
||||
зомбоволка... они уже реально убивают зомби эффективно", и следом уточнение
|
||||
"зомбособаке урон 35 и шанс расчленения, как и волку, как и медведю".
|
||||
|
||||
Лестница целиком: Дух крысы 5 -> Зомбогриф 20 -> Зомбопёс 35 ->
|
||||
Зомбомедведь 45 -> Зомбоволк 60. Верхняя ступень - ванильный урон лютоволка,
|
||||
ниже неё всё выстроено вручную; ванильные значения были 8 / 22 / 60 / 60, то
|
||||
есть лестницы не было вовсе (медведь и волк совпадали).
|
||||
|
||||
ГРИФ НАМЕРЕННО САМЫЙ СЛАБЫЙ ИЗ ЗВЕРЕЙ, и это не просчёт: "для атаки он не особо
|
||||
подходит", роль у него будет другая - см. BACKLOG.md 18.09, замысел сделать из
|
||||
него аналог разведдрона (запустить в небо и смотреть его глазами).
|
||||
|
||||
РАСЧЛЕНЕНИЕ - у Пса, Медведя и Волка. Ни у Грифа, ни у Духа крысы его нет.
|
||||
Величина 0.25 одна на всех троих: конкретной цифры названо не было, а разводить
|
||||
её по видам незачем - они уже разведены уроном. -->
|
||||
<property class="Action0">
|
||||
<property name="DamageEntity" value="35"/>
|
||||
</property>
|
||||
<effect_group name="necroMeleeHandZombieDog" tiered="false">
|
||||
<passive_effect name="ModSlots" operation="base_set" value="0"/>
|
||||
<passive_effect name="DismemberChance" operation="base_add" value="0.25"/>
|
||||
<triggered_effect trigger="onSelfAttackedOther" action="AddBuff" target="other" buff="buffInjurySlow">
|
||||
<requirement name="EntityTagCompare" target="other" tags="zombie"/>
|
||||
</triggered_effect>
|
||||
<!-- Кровотечение добавлено 2026-09-18 всем призванным зомбоживотным. Метку духа
|
||||
и ослабление (buffNecroRatMark) они НЕ ставят по прямому указанию - это
|
||||
остаётся особенностью крысы, у которой своего урона почти нет. Замедление
|
||||
buffInjurySlow выше - НЕ то же самое, что "ослабление": оно стоит здесь с
|
||||
28.08 по отдельной просьбе ("укус применяет buffInjurySlow") и не трогалось.
|
||||
Скажите, если его тоже убрать. -->
|
||||
<triggered_effect trigger="onSelfAttackedOther" action="AddBuff" target="other" buff="buffNecroRatBleed"/>
|
||||
</effect_group>
|
||||
</item>
|
||||
</append>
|
||||
|
||||
<!-- Оружие ближнего боя трёх остальных зомбоживотных, 2026-09-18. До сих пор они брали
|
||||
ванильные предметы напрямую (meleeHandAnimalMountainLion / meleeHandAnimalZombieBear /
|
||||
meleeHandAnimalDireWolf), и своих эффектов у них не было вовсе. Теперь нужны свои: и
|
||||
чтобы выстроить лестницу урона, и чтобы повесить кровотечение.
|
||||
|
||||
effect_group НЕ наследуется через Extends (см. заметку в шапке файла), поэтому у каждого
|
||||
он свой, а не добавленный к родительскому. Всё остальное - задержка, радиус, звуки удара -
|
||||
наследуется от ванильного предмета как есть. -->
|
||||
<append xpath="/items">
|
||||
<item name="necroMeleeHandZombieGriffin">
|
||||
<property name="Extends" value="meleeHandAnimalZombieVulture"/>
|
||||
<property name="CreativeMode" value="None"/>
|
||||
<!-- 20, а не 35: понижено 18.09 по прямому указанию. Гриф - будущий разведчик, а не
|
||||
боец (см. комментарий к лестнице выше). Расчленения у него тоже нет. -->
|
||||
<property class="Action0">
|
||||
<property name="DamageEntity" value="20"/>
|
||||
</property>
|
||||
<effect_group name="necroMeleeHandZombieGriffin" tiered="false">
|
||||
<passive_effect name="ModSlots" operation="base_set" value="0"/>
|
||||
<triggered_effect trigger="onSelfAttackedOther" action="AddBuff" target="other" buff="buffNecroRatBleed"/>
|
||||
</effect_group>
|
||||
</item>
|
||||
</append>
|
||||
|
||||
<append xpath="/items">
|
||||
<item name="necroMeleeHandZombieBear">
|
||||
<property name="Extends" value="meleeHandAnimalZombieBear"/>
|
||||
<property name="CreativeMode" value="None"/>
|
||||
<property class="Action0">
|
||||
<property name="DamageEntity" value="45"/>
|
||||
</property>
|
||||
<effect_group name="necroMeleeHandZombieBear" tiered="false">
|
||||
<passive_effect name="ModSlots" operation="base_set" value="0"/>
|
||||
<passive_effect name="DismemberChance" operation="base_add" value="0.25"/>
|
||||
<triggered_effect trigger="onSelfAttackedOther" action="AddBuff" target="other" buff="buffNecroRatBleed"/>
|
||||
</effect_group>
|
||||
</item>
|
||||
</append>
|
||||
|
||||
<append xpath="/items">
|
||||
<item name="necroMeleeHandZombieWolf">
|
||||
<property name="Extends" value="meleeHandAnimalDireWolf"/>
|
||||
<property name="CreativeMode" value="None"/>
|
||||
<!-- 60 - ванильный урон лютоволка, верхняя ступень лестницы. Оставлен как есть. -->
|
||||
<property class="Action0">
|
||||
<property name="DamageEntity" value="60"/>
|
||||
</property>
|
||||
<effect_group name="necroMeleeHandZombieWolf" tiered="false">
|
||||
<passive_effect name="ModSlots" operation="base_set" value="0"/>
|
||||
<passive_effect name="DismemberChance" operation="base_add" value="0.25"/>
|
||||
<triggered_effect trigger="onSelfAttackedOther" action="AddBuff" target="other" buff="buffNecroRatBleed"/>
|
||||
</effect_group>
|
||||
</item>
|
||||
</append>
|
||||
|
||||
|
||||
<!-- "Жуки Властелина" (Insect Swarm summon): user request 2026-08-28, added alongside the
|
||||
Zombie Dog bugfix above since it reuses the exact same summon plumbing (SpawnEntity,
|
||||
HarmonySrc/SummonPatch.cs ownership/limit).
|
||||
@@ -656,7 +758,10 @@
|
||||
<append xpath="/items">
|
||||
<item name="bookSummonInsectSwarm">
|
||||
<property name="Tags" value="T0,weapon,attPerception"/>
|
||||
<property name="ItemTypeIcon" value="book"/>
|
||||
<!-- ItemTypeIcon="book" УБРАН 2026-09-18 со ВСЕХ свитков и книг призыва разом,
|
||||
прямое указание: "свитки призыва и книги призыва не должны содержать белую
|
||||
иконку книги поверх. Они ПРЕДМЕТЫ, а не рецепты." Полный разбор виджета - у
|
||||
bookSummonRatSpirit ниже и у Пространственного браслета (07.09). -->
|
||||
<!-- ICON REPLACED 2026-08-29: same reasoning as bookSummonZombieDog above - swapped
|
||||
the earlier hand-drawn schematicInsectoSummon.png for BeetlesOfTheLord.png. -->
|
||||
<property name="CustomIcon" value="BeetlesOfTheLord"/>
|
||||
@@ -681,7 +786,22 @@
|
||||
<property class="Action0">
|
||||
<property name="Class" value="SpawnEntity"/>
|
||||
<property name="AnimType" value="4"/>
|
||||
<property name="AnimWait" value="0.3"/>
|
||||
<!-- 0.05, а не 0.3 - выровнено со Свитком духа крысы 2026-09-18, после того как
|
||||
в игре не призвались НИ ГРИФ, НИ ВОЛК, НИ МЕДВЕДЬ, ни пёс, а крыса
|
||||
призвалась. В логе у всех четверых было только "action index=1" (отзыв) и ни
|
||||
одного index=0: до Spawn основной клик не доходил вовсе.
|
||||
|
||||
ItemActionSpawnEntity.OnHoldingUpdate копит stateTime по 0.05 за тик и
|
||||
сравнивает с animWait, а ExecuteAction(_bReleased: true) при отпускании
|
||||
кнопки сбрасывает состояние в None. То есть 0.3 означало "держать кнопку
|
||||
треть секунды", шесть тиков подряд, и обычный клик до спавна не доживал -
|
||||
молча, без ошибки и без строки в логе.
|
||||
|
||||
Раньше это сходило с рук: призыв делают раз за сессию и кнопку держали. Но
|
||||
теперь на этом же слоте сидит КОМАНДА АТАКОВАТЬ, которую отдают быстро и
|
||||
часто, - и требовать под неё удержание нельзя. У крысы это было исправлено
|
||||
сразу, у остальных - забыто; теперь у всех одинаково. -->
|
||||
<property name="AnimWait" value="0.05"/>
|
||||
<property name="SoundWarn" value="swarmalert"/>
|
||||
<property name="SoundAttack" value="swarmattack"/>
|
||||
<property name="Entity" value="necroInsectSwarm"/>
|
||||
@@ -703,7 +823,10 @@
|
||||
<append xpath="/items">
|
||||
<item name="bookSummonZombieGriffin">
|
||||
<property name="Tags" value="T0,weapon,attPerception"/>
|
||||
<property name="ItemTypeIcon" value="book"/>
|
||||
<!-- ItemTypeIcon="book" УБРАН 2026-09-18 со ВСЕХ свитков и книг призыва разом,
|
||||
прямое указание: "свитки призыва и книги призыва не должны содержать белую
|
||||
иконку книги поверх. Они ПРЕДМЕТЫ, а не рецепты." Полный разбор виджета - у
|
||||
bookSummonRatSpirit ниже и у Пространственного браслета (07.09). -->
|
||||
<!-- ICON ADDED 2026-08-29: real generated art (SummonZombieGriffin.png). -->
|
||||
<property name="CustomIcon" value="SummonZombieGriffin"/>
|
||||
<property name="DescriptionKey" value="bookSummonZombieGriffinDesc"/>
|
||||
@@ -721,9 +844,28 @@
|
||||
<property class="Action0">
|
||||
<property name="Class" value="SpawnEntity"/>
|
||||
<property name="AnimType" value="4"/>
|
||||
<property name="AnimWait" value="0.3"/>
|
||||
<property name="SoundWarn" value="mlionalert"/>
|
||||
<property name="SoundAttack" value="mlionattack"/>
|
||||
<!-- 0.05, а не 0.3 - выровнено со Свитком духа крысы 2026-09-18, после того как
|
||||
в игре не призвались НИ ГРИФ, НИ ВОЛК, НИ МЕДВЕДЬ, ни пёс, а крыса
|
||||
призвалась. В логе у всех четверых было только "action index=1" (отзыв) и ни
|
||||
одного index=0: до Spawn основной клик не доходил вовсе.
|
||||
|
||||
ItemActionSpawnEntity.OnHoldingUpdate копит stateTime по 0.05 за тик и
|
||||
сравнивает с animWait, а ExecuteAction(_bReleased: true) при отпускании
|
||||
кнопки сбрасывает состояние в None. То есть 0.3 означало "держать кнопку
|
||||
треть секунды", шесть тиков подряд, и обычный клик до спавна не доживал -
|
||||
молча, без ошибки и без строки в логе.
|
||||
|
||||
Раньше это сходило с рук: призыв делают раз за сессию и кнопку держали. Но
|
||||
теперь на этом же слоте сидит КОМАНДА АТАКОВАТЬ, которую отдают быстро и
|
||||
часто, - и требовать под неё удержание нельзя. У крысы это было исправлено
|
||||
сразу, у остальных - забыто; теперь у всех одинаково. -->
|
||||
<property name="AnimWait" value="0.05"/>
|
||||
<!-- Звуки призыва сменены 2026-09-18: "при появлении слышен крик льва, а не
|
||||
грифа". Остались с той поры, когда Гриф был горным львом; модель откатили на
|
||||
стервятника, а свиток забыли - те же грабли, что "зомбомедведь лает", только
|
||||
теперь на предмете, а не на сущности. -->
|
||||
<property name="SoundWarn" value="vulturealert"/>
|
||||
<property name="SoundAttack" value="vultureattack"/>
|
||||
<property name="Entity" value="necroZombieGriffin"/>
|
||||
<property name="EntityOffset" value="0, -1, 2.5"/>
|
||||
</property>
|
||||
@@ -741,7 +883,10 @@
|
||||
<append xpath="/items">
|
||||
<item name="bookSummonZombieBear">
|
||||
<property name="Tags" value="T0,weapon,attPerception"/>
|
||||
<property name="ItemTypeIcon" value="book"/>
|
||||
<!-- ItemTypeIcon="book" УБРАН 2026-09-18 со ВСЕХ свитков и книг призыва разом,
|
||||
прямое указание: "свитки призыва и книги призыва не должны содержать белую
|
||||
иконку книги поверх. Они ПРЕДМЕТЫ, а не рецепты." Полный разбор виджета - у
|
||||
bookSummonRatSpirit ниже и у Пространственного браслета (07.09). -->
|
||||
<!-- ICON ADDED 2026-08-29: real generated art (SummonZombieBear.png). -->
|
||||
<property name="CustomIcon" value="SummonZombieBear"/>
|
||||
<property name="DescriptionKey" value="bookSummonZombieBearDesc"/>
|
||||
@@ -759,7 +904,22 @@
|
||||
<property class="Action0">
|
||||
<property name="Class" value="SpawnEntity"/>
|
||||
<property name="AnimType" value="4"/>
|
||||
<property name="AnimWait" value="0.3"/>
|
||||
<!-- 0.05, а не 0.3 - выровнено со Свитком духа крысы 2026-09-18, после того как
|
||||
в игре не призвались НИ ГРИФ, НИ ВОЛК, НИ МЕДВЕДЬ, ни пёс, а крыса
|
||||
призвалась. В логе у всех четверых было только "action index=1" (отзыв) и ни
|
||||
одного index=0: до Spawn основной клик не доходил вовсе.
|
||||
|
||||
ItemActionSpawnEntity.OnHoldingUpdate копит stateTime по 0.05 за тик и
|
||||
сравнивает с animWait, а ExecuteAction(_bReleased: true) при отпускании
|
||||
кнопки сбрасывает состояние в None. То есть 0.3 означало "держать кнопку
|
||||
треть секунды", шесть тиков подряд, и обычный клик до спавна не доживал -
|
||||
молча, без ошибки и без строки в логе.
|
||||
|
||||
Раньше это сходило с рук: призыв делают раз за сессию и кнопку держали. Но
|
||||
теперь на этом же слоте сидит КОМАНДА АТАКОВАТЬ, которую отдают быстро и
|
||||
часто, - и требовать под неё удержание нельзя. У крысы это было исправлено
|
||||
сразу, у остальных - забыто; теперь у всех одинаково. -->
|
||||
<property name="AnimWait" value="0.05"/>
|
||||
<property name="SoundWarn" value="bearalert"/>
|
||||
<property name="SoundAttack" value="bearattack"/>
|
||||
<property name="Entity" value="necroZombieBear"/>
|
||||
@@ -779,7 +939,10 @@
|
||||
<append xpath="/items">
|
||||
<item name="bookSummonZombieWolf">
|
||||
<property name="Tags" value="T0,weapon,attPerception"/>
|
||||
<property name="ItemTypeIcon" value="book"/>
|
||||
<!-- ItemTypeIcon="book" УБРАН 2026-09-18 со ВСЕХ свитков и книг призыва разом,
|
||||
прямое указание: "свитки призыва и книги призыва не должны содержать белую
|
||||
иконку книги поверх. Они ПРЕДМЕТЫ, а не рецепты." Полный разбор виджета - у
|
||||
bookSummonRatSpirit ниже и у Пространственного браслета (07.09). -->
|
||||
<!-- ICON ADDED 2026-08-29: real generated art (SummonZombieWolf.png). -->
|
||||
<property name="CustomIcon" value="SummonZombieWolf"/>
|
||||
<property name="DescriptionKey" value="bookSummonZombieWolfDesc"/>
|
||||
@@ -797,7 +960,22 @@
|
||||
<property class="Action0">
|
||||
<property name="Class" value="SpawnEntity"/>
|
||||
<property name="AnimType" value="4"/>
|
||||
<property name="AnimWait" value="0.3"/>
|
||||
<!-- 0.05, а не 0.3 - выровнено со Свитком духа крысы 2026-09-18, после того как
|
||||
в игре не призвались НИ ГРИФ, НИ ВОЛК, НИ МЕДВЕДЬ, ни пёс, а крыса
|
||||
призвалась. В логе у всех четверых было только "action index=1" (отзыв) и ни
|
||||
одного index=0: до Spawn основной клик не доходил вовсе.
|
||||
|
||||
ItemActionSpawnEntity.OnHoldingUpdate копит stateTime по 0.05 за тик и
|
||||
сравнивает с animWait, а ExecuteAction(_bReleased: true) при отпускании
|
||||
кнопки сбрасывает состояние в None. То есть 0.3 означало "держать кнопку
|
||||
треть секунды", шесть тиков подряд, и обычный клик до спавна не доживал -
|
||||
молча, без ошибки и без строки в логе.
|
||||
|
||||
Раньше это сходило с рук: призыв делают раз за сессию и кнопку держали. Но
|
||||
теперь на этом же слоте сидит КОМАНДА АТАКОВАТЬ, которую отдают быстро и
|
||||
часто, - и требовать под неё удержание нельзя. У крысы это было исправлено
|
||||
сразу, у остальных - забыто; теперь у всех одинаково. -->
|
||||
<property name="AnimWait" value="0.05"/>
|
||||
<property name="SoundWarn" value="wolfdirealert"/>
|
||||
<property name="SoundAttack" value="wolfdireattack"/>
|
||||
<property name="Entity" value="necroZombieWolf"/>
|
||||
@@ -814,6 +992,121 @@
|
||||
</item>
|
||||
</append>
|
||||
|
||||
<!-- "Дух крысы" (Rat Spirit): питомец начального уровня, указание 2026-09-18.
|
||||
|
||||
УРОН 5 - прямо по указанию, и это почти ничего (у волчьего укуса, от которого предмет
|
||||
наследуется, 60). Крыса не оружие: она вешает дебафы. Их два, и оба БЕЗ гейта по тегу
|
||||
"zombie", в отличие от укуса зомбопса выше - крысе разрешено атаковать любое существо,
|
||||
значит и дебафы должны ложиться на то, что она укусила, а не только на зомби.
|
||||
|
||||
ЗАМЕДЛЕНИЕ СДЕЛАНО СВОЁ (buffNecroRatGrip, см. buffs.xml), а не взято из ванили: все
|
||||
готовые "слоу" - это эффекты игроцкой системы травм, половина из них скрыта и написана
|
||||
заодно под транспорт. Своё - это ровно RunSpeed/WalkSpeed/CrouchSpeed с затуханием, без
|
||||
лишнего. Что эти величины вообще доходят до ИИ зомби, подтверждено декомпиляцией
|
||||
EntityAlive.GetMoveSpeedAggro - разбор целиком в комментарии к самому баффу. -->
|
||||
<append xpath="/items">
|
||||
<item name="necroMeleeHandRatSpirit">
|
||||
<property name="Extends" value="meleeHandAnimalDireWolf"/>
|
||||
<property name="CreativeMode" value="None"/>
|
||||
<property class="Action0">
|
||||
<property name="DamageEntity" value="5"/>
|
||||
</property>
|
||||
<!-- effect_group НЕ наследуется через Extends (см. заметку в шапке файла) - триггеры
|
||||
родителя пришлось бы переписывать целиком, и здесь они и не нужны: у крысы свои. -->
|
||||
<effect_group name="necroMeleeHandRatSpirit" tiered="false">
|
||||
<passive_effect name="ModSlots" operation="base_set" value="0"/>
|
||||
<triggered_effect trigger="onSelfAttackedOther" action="AddBuff" target="other" buff="buffNecroRatGrip"/>
|
||||
<triggered_effect trigger="onSelfAttackedOther" action="AddBuff" target="other" buff="buffNecroRatMark"/>
|
||||
<triggered_effect trigger="onSelfAttackedOther" action="AddBuff" target="other" buff="buffNecroRatBleed"/>
|
||||
</effect_group>
|
||||
</item>
|
||||
</append>
|
||||
|
||||
<!-- "Свиток духа крысы": тот же свиток, что у Зомбоволка, но серее - указание 2026-09-18
|
||||
("выглядит как свиток призыва зомбоволка, но с более серым тинтом"). Иконка
|
||||
переиспользуется целиком (CustomIcon="SummonZombieWolf"), своей рисовать не пришлось;
|
||||
CustomIconTint обесцвечивает её, TintColor - 3D-модель в руке. Оба множатся на базовый
|
||||
цвет, как у Камня духов.
|
||||
|
||||
ДВА ДЕЙСТВИЯ, И ОНИ НЕ ТЕ ЖЕ, ЧТО У ОСТАЛЬНЫХ ПИТОМЦЕВ. Action1 (силовая атака) - отзыв,
|
||||
как везде. А вот Action0 у крысы ТРЁХзначный, и разбирает это HarmonySrc/PetCommandPatch.cs:
|
||||
если крыса не призвана - призыв; если призвана - КОМАНДА АТАКОВАТЬ того, на кого смотрит
|
||||
прицел; если под прицелом некого атаковать - "Нет цели для атаки" и больше ничего.
|
||||
Class="SpawnEntity" в обоих слотах при этом обязателен: наш префикс висит именно на
|
||||
ItemActionSpawnEntity.Spawn, и без него клик до нас не дойдёт.
|
||||
|
||||
Книга НЕ расходуется (ConsumesBook=false в SummonPatch.cs): иначе командовать атакой
|
||||
означало бы тратить свиток на каждый приказ. -->
|
||||
<append xpath="/items">
|
||||
<item name="bookSummonRatSpirit">
|
||||
<property name="Tags" value="T0,weapon,attPerception"/>
|
||||
<!-- ItemTypeIcon="book" НЕ СТАВИТСЯ, хотя стоит у всех шести книг призыва выше.
|
||||
Баг-репорт 2026-09-18: "у книги призыва есть ещё одна белая иконка книги поверх.
|
||||
Такая обычно появляется на неизученных рецептах, но тут у нас не рецепт и не
|
||||
книга для изучения. Это предмет."
|
||||
|
||||
Это тот же виджет, что уже разбирался 07.09 у Пространственного браслета (см.
|
||||
его комментарий ниже, там полностью): значок 12x12 в ЛЕВОМ ВЕРХНЕМ углу поверх
|
||||
иконки предмета, XUi_InGame/templates.xml, recipe_entry:
|
||||
|
||||
<sprite name="itemtypeicon" sprite="ui_game_symbol_{itemtypeicon}" .../>
|
||||
|
||||
Значение подставляется прямо в имя спрайта, поэтому "book" даёт белую книжку. У
|
||||
ванили этот значок означает "куда/чем крафтится" (bundle, forge, campfire), и
|
||||
единственный ванильный предмет с value="book" - это настоящая схема. Наш свиток
|
||||
схемой не является: его не изучают, им пользуются. Значок вводил в заблуждение.
|
||||
|
||||
Убрано целиком, а не заменено: ItemClass.ItemTypeIcon по умолчанию "", виджет
|
||||
закрыт гейтом {hasitemtypeicon}, и без свойства он просто не рисуется.
|
||||
|
||||
У ОСТАЛЬНЫХ ШЕСТИ КНИГ ПРИЗЫВА ЭТОТ ЖЕ ЗНАЧОК ПОКА ОСТАЛСЯ - трогать их без
|
||||
указания не стал, но замечание к ним относится ровно так же. -->
|
||||
<property name="CustomIcon" value="SummonZombieWolf"/>
|
||||
<property name="CustomIconTint" value="8a9a8a"/>
|
||||
<property name="DescriptionKey" value="bookSummonRatSpiritDesc"/>
|
||||
<property name="DisplayType" value="ammoGrenadeFire"/>
|
||||
<property name="HoldType" value="21"/>
|
||||
<property name="Meshfile" value="@:Other/Items/Misc/bookPrefab.prefab"/>
|
||||
<property name="Material" value="Mpaper"/>
|
||||
<property name="TintColor" value="120, 135, 120"/>
|
||||
<property name="Weight" value="0"/>
|
||||
<property name="Stacknumber" value="10"/>
|
||||
<property name="EconomicValue" value="0"/>
|
||||
<property name="Group" value="Ammo/Weapons,Ammo"/>
|
||||
<property name="SoundPickup" value="schematics_grab"/>
|
||||
<property name="SoundPlace" value="schematics_place"/>
|
||||
<property class="Action0">
|
||||
<property name="Class" value="SpawnEntity"/>
|
||||
<property name="AnimType" value="4"/>
|
||||
<!-- 0.05, а НЕ 0.3, как у остальных призывных книг. Исправлено 2026-09-18 по первому же
|
||||
игровому запуску: в логе шесть нажатий подряд и все с action index=1 (отзыв), ни
|
||||
одного с index=0 - то есть до Spawn основной клик не доходил вовсе.
|
||||
|
||||
Причина в ItemActionSpawnEntity.OnHoldingUpdate: stateTime растёт по 0.05 за тик и
|
||||
сравнивается с animWait, а ExecuteAction(_bReleased: true) при отпускании кнопки
|
||||
сбрасывает состояние обратно в None. Значит 0.3 - это "держать кнопку треть
|
||||
секунды", шесть тиков; обычный клик короче и не доходит до спавна, причём МОЛЧА -
|
||||
ни ошибки, ни строки в логе.
|
||||
|
||||
Для остальных питомцев удержание терпимо (призыв делают раз в сессию), а у крысы
|
||||
на этом же слоте сидит КОМАНДА АТАКОВАТЬ - приказ посреди боя, который отдают
|
||||
быстро и часто. Требовать под него удержание нельзя. -->
|
||||
<property name="AnimWait" value="0.05"/>
|
||||
<property name="SoundWarn" value="rabbitpain"/>
|
||||
<property name="Entity" value="necroRatSpirit"/>
|
||||
<property name="EntityOffset" value="0, -1, 2.5"/>
|
||||
</property>
|
||||
<property class="Action1">
|
||||
<property name="Class" value="SpawnEntity"/>
|
||||
<property name="AnimType" value="4"/>
|
||||
<property name="AnimWait" value="0.1"/>
|
||||
<property name="SoundWarn" value="swoosh"/>
|
||||
<property name="Entity" value="necroRatSpirit"/>
|
||||
<property name="EntityOffset" value="0, -1, 2.5"/>
|
||||
</property>
|
||||
</item>
|
||||
</append>
|
||||
|
||||
<!-- "Книга банши" (Banshee's Book): BACKLOG.md item 7 (dictated 2026-08-28, implemented
|
||||
2026-08-29 "без вопросов" per user request). Consumed on use, plays a screamer's own
|
||||
alert sound, spawns a small HOSTILE horde near the caster - see
|
||||
@@ -836,7 +1129,10 @@
|
||||
<append xpath="/items">
|
||||
<item name="bookBanshee">
|
||||
<property name="Tags" value="T0,weapon,attPerception"/>
|
||||
<property name="ItemTypeIcon" value="book"/>
|
||||
<!-- ItemTypeIcon="book" УБРАН 2026-09-18 со ВСЕХ свитков и книг призыва разом,
|
||||
прямое указание: "свитки призыва и книги призыва не должны содержать белую
|
||||
иконку книги поверх. Они ПРЕДМЕТЫ, а не рецепты." Полный разбор виджета - у
|
||||
bookSummonRatSpirit ниже и у Пространственного браслета (07.09). -->
|
||||
<!-- ICON UPDATED 2026-08-29: real generated art (BansheesScroll.png), no tint. -->
|
||||
<property name="CustomIcon" value="BansheesScroll"/>
|
||||
<property name="DescriptionKey" value="bookBansheeDesc"/>
|
||||
|
||||
Reference in New Issue
Block a user