Вселиться в зомби и в своего питомца, подорвать одержимого копа, 25 убийств змеёй, войти в чертоги (ChallengeStatAwarded: счёт шлёт NecroChallenges.cs), найти череп (Gather), сок чёрной розы, мод «Мёртвая буря», гримуар медведя (Craft). Тексты намёком, 13 языков. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
240 lines
22 KiB
XML
240 lines
22 KiB
XML
<config>
|
||
<!-- ВКЛАДКА ИСПЫТАНИЙ "Некромантия" (указание 2026-09-16: "Сделать вкладку квестов для
|
||
некромантии. Типа тех вкладок, где дают опыт за установку первой двери, за установку
|
||
клеймблока, за повешение факела и сбор ресурсов").
|
||
|
||
ОБА ЗАКАЗАННЫХ ИСПЫТАНИЯ НА МЕСТЕ с 2026-09-16. Сначала тут было одно ("Первым делом -
|
||
нож"): challenges.xml мод не трогал ни разу, и сперва надо было увидеть в игре, что вкладка
|
||
вообще появляется. Нож выбран для этой проверки потому, что крафтится сразу и без верстака,
|
||
то есть проверка занимала минуту, а не сессию. Вкладка отобразилась, испытание закрылось,
|
||
лог чистый - после чего добавлен "Безумный донор".
|
||
|
||
РАЗРОЗНЕННО, НЕ ЦЕПОЧКОЙ (указание: "цепочку ивентов там делать не нужно. Пусть будет
|
||
разрозненно. Что сделано то и отмечаем"). Поэтому у группы НЕТ ни link_challenges="true",
|
||
ни hidden_by - оба атрибута стоят у ванильных Basics/Homesteading именно затем, чтобы
|
||
открывать записи по очереди. Без них испытания видны сразу и закрываются в любом порядке.
|
||
Побочная польза: снимается противоречие порядка - Кровь некроманта нельзя скрафтить без
|
||
ножа в инвентаре, так что "донор" первым в цепочке был бы невыполним.
|
||
|
||
ОТКУДА ИКОНКИ - разобрано 2026-09-16, и вывод ограничивающий: ТОЛЬКО из символьного
|
||
атласа игры, свой спрайт туда положить нельзя.
|
||
- В Data/Config/XUi_InGame/templates.xml оба места, где эти иконки рисуются, объявлены
|
||
БЕЗ атрибута atlas: строка испытания (challenge_entry, sprite="{iconname}") и кнопка
|
||
вкладки (category_icon, sprite="{categoryicon}"). Нет atlas - значит атлас по
|
||
умолчанию, тот, где живут все ui_game_symbol_*.
|
||
- Подтверждение с другой стороны: в ванильном challenges.xml ВСЕ 215 иконок имеют вид
|
||
ui_game_symbol_* без единого исключения (проверено вычитанием).
|
||
- Свой атлас мода (UIAtlases/NecroFinal) тут не поможет: механизм UIAtlases/<Имя>
|
||
создаёт НОВЫЙ атлас, и обратиться к нему можно только явным atlas="NecroFinal" на
|
||
спрайте, которого в этих шаблонах нет.
|
||
- Дописать atlas= в сам шаблон НЕЛЬЗЯ: шаблон один на все испытания, и тогда ванильные
|
||
215 иконок начнут искаться в нашем атласе и пропадут.
|
||
Выбирали из 359 доступных ui_game_symbol_*, собранных по ванильным конфигам. -->
|
||
<append xpath="/challenges">
|
||
|
||
<!-- ВКЛАДКА. Череп, и это ОДНО РЕШЕНИЕ С ИКОНКОЙ САМОГО СКИЛЛА "Некромантия" в
|
||
progression.xml: вкладка и скилл обязаны читаться как одно целое, поэтому меняются
|
||
только парой. Разойдутся - и панель скилла с вкладкой испытаний перестанут выглядеть
|
||
как одна система.
|
||
|
||
Сначала (16.09) здесь стоял ui_game_symbol_zombie - по тому же принципу совпадения со
|
||
скиллом, у которого он тогда и стоял. В игре вкладка отобразилась и испытание
|
||
сработало, после чего пользователь заменил символ на череп: "Для некроманта это более
|
||
атмосферно". Заменено разом во всех четырёх живых местах мода (здесь, скилл в
|
||
progression.xml и два баффа в buffs.xml), разбор - в BACKLOG.md.
|
||
|
||
Годные альтернативы, если череп когда-нибудь разонравится:
|
||
ui_game_symbol_specters_grace, ui_game_symbol_7th_curse,
|
||
ui_game_symbol_near_death_trauma. -->
|
||
<challenge_category name="NecroNecromancy" title_key="challengeCatNecroNecromancy" icon="ui_game_symbol_skull"/>
|
||
|
||
<!-- ГРУППА. Сознательно БЕЗ reward_text_key и reward_event.
|
||
|
||
Это осознанный риск скелета, а не забывчивость: у всех 20 ванильных групп они есть, но
|
||
корень <challenges> объявлен с default_reward="challenge_reward_default" и
|
||
default_reward_text_key="challenge_reward_100xp", и мы добавляемся именно в этот
|
||
корень. Если умолчания на группы не распространяются, игра скажет об этом в логе - и
|
||
это ровно то, ради чего скелет и запускается. Заводить своё событие награды вслепую
|
||
дороже, чем один раз посмотреть в лог. -->
|
||
<challenge_group category="NecroNecromancy" name="NecroPath" title_key="challengeGroupNecroPath"/>
|
||
|
||
<!-- ИСПЫТАНИЕ. objective type="Craft" без count - ножа нужен один.
|
||
hint не задан: он необязателен - в ванили одно испытание из 188 обходится без него, а
|
||
тут подсказка и не нужна, название говорит само за себя.
|
||
|
||
500 XP, А НЕ УМОЛЧАНИЕ. Сначала тут не стояло награды вовсе, то есть работал
|
||
challenge_reward_default (100 XP), по аналогии с ванильным craftStoneAxe: один крафт в
|
||
самом начале. Аналогия оказалась неверной, и это выяснилось только при чтении рецепта:
|
||
в ножа входит 1 Кровь некроманта, а её собственный крафт снимает 90% ТЕКУЩЕГО здоровья.
|
||
То есть нож стоит одного захода на порог смерти, чего у каменного топора нет и близко.
|
||
500 - ванильный тир простых, но небесплатных дел (craftCharredMeat, huntAnimals). -->
|
||
<challenge name="necroCraftKnife" title_key="challengeNecroCraftKnifeTitle" icon="ui_game_symbol_knife" group="NecroPath"
|
||
short_description_key="challengeNecroCraftKnifeShort" description_key="challengeNecroCraftKnifeDesc"
|
||
reward_text_key="challenge_reward_500xp" reward_event="challenge_reward_500">
|
||
<objective type="Craft" item="necroWpnBladeNecroKnife"/>
|
||
</challenge>
|
||
|
||
<!-- ИСПЫТАНИЕ 2: "Безумный донор" (указание: "добыть 15 флаконов крови некроманта").
|
||
Кровь не добывается из мира, она крафтится, поэтому тип Craft, а не Gather.
|
||
|
||
count="15" - у Craft счётчик поддерживается, и это стоило отдельной проверки: в самых
|
||
наглядных ванильных примерах (craftStoneAxe, craftClothes) он не указан, и легко
|
||
решить, что его нет. Есть - 18 ванильных Craft-целей его несут, вплоть до
|
||
resourceForgedIron count="100" и thrownAmmoPipeBomb count="20".
|
||
|
||
ИМЯ ОПРАВДАНО МЕХАНИКОЙ, А НЕ ПРОСТО КРАСИВОЕ: каждый крафт Крови некроманта снимает
|
||
90% ТЕКУЩЕГО здоровья (NecromancerBloodPatch.cs) и требует нож в инвентаре. Пятнадцать
|
||
раз подряд - это пятнадцать раз довести себя до полусмерти, и "Безумный донор" описывает
|
||
это точно.
|
||
|
||
Зависимости от первого испытания нет и быть не должно (указание: "разрозненно"), хотя
|
||
фактически кровь без ножа не скрафтить. Порядка у группы нет, так что игрок сам
|
||
упрётся в нож, когда попробует начать с крови, - и это честнее замка.
|
||
|
||
icon="ui_game_symbol_siphoning_strikes" - "высасывающие удары", символ выкачивания
|
||
жизни. Найден при разборе всех 359 доступных ui_game_symbol_*; под механику "плати
|
||
собственной кровью" попадает точнее любого медицинского символа. -->
|
||
<challenge name="necroMadDonor" title_key="challengeNecroMadDonorTitle" icon="ui_game_symbol_siphoning_strikes" group="NecroPath"
|
||
short_description_key="challengeNecroMadDonorShort" description_key="challengeNecroMadDonorDesc"
|
||
reward_text_key="challenge_reward_2500xp" reward_event="challenge_reward_2500">
|
||
<objective type="Craft" item="resourceNecromancerBlood" count="15"/>
|
||
</challenge>
|
||
|
||
<!-- ИСПЫТАНИЕ 3: "Первый подданный" - Камень духов (указание 2026-09-17: "И первый камень
|
||
духов. Сам посчитай и придумай").
|
||
|
||
Имя про механику: Камень духов подчиняет зомби, и подчинённый бьётся за игрока. Это
|
||
первое существо, которое слушается некроманта, - отсюда "подданный".
|
||
|
||
100 XP, то есть challenge_reward_default, награда НЕ ЗАДАНА СОЗНАТЕЛЬНО. Рецепт -
|
||
1 камень + 20 волокон травы, ни праха, ни крови. Это самая дешёвая вещь мода и
|
||
буквальный аналог ванильного craftStoneAxe, за который ваниль платит ровно умолчание.
|
||
Здесь 100 - не занижение, а единственное честное число: поднять его выше значило бы
|
||
платить за десять минут игры больше, чем ваниль платит за то же самое.
|
||
|
||
icon="ui_game_symbol_specters_grace" ("милость призрака") - предмет называется Камнем
|
||
ДУХОВ и подчиняет мёртвого, так что символ совпадает и по названию, и по смыслу. -->
|
||
<challenge name="necroSpiritStone" title_key="challengeNecroSpiritStoneTitle" icon="ui_game_symbol_specters_grace" group="NecroPath"
|
||
short_description_key="challengeNecroSpiritStoneShort" description_key="challengeNecroSpiritStoneDesc">
|
||
<objective type="Craft" item="thrownStoneSpirit"/>
|
||
</challenge>
|
||
|
||
<!-- ИСПЫТАНИЕ 4: "Короткая дорога домой" - Синий портальный камень (указание 2026-09-17).
|
||
|
||
Имя про механику: камень телепортирует к спальному мешку за десятисекундный канал и не
|
||
расходуется. Это в буквальном смысле короткий путь домой, и никакой другой предмет мода
|
||
этого не делает.
|
||
|
||
2000 XP - и это САМОЕ ДОРОГОЕ ИСПЫТАНИЕ ВКЛАДКИ ПО ГРАЙНДУ, что видно только из
|
||
рецепта: 1 камень + 3 минералки + 15 волокон + 150 ПРАХА ЗОМБИ. Прах падает с Жертвы,
|
||
помеченной Ножом некроманта, по 1-4 с вероятностью 0.4 (loot.xml), то есть в среднем
|
||
около одной единицы за убийство - значит 150 праха это порядка ста пятидесяти
|
||
ритуальных убийств ножом. Для сравнения, ванильный craftForgedIron (сто крафтов
|
||
кованого железа) платит 2000, и это чистый грайнд без риска - ровно тот же случай.
|
||
Выше не ставим: 2500 у "Безумного донора" оплачивает смертельный риск, которого здесь
|
||
нет, а 5000 ваниль держит за химстанцией и тирами квестов.
|
||
|
||
icon="ui_game_symbol_map_house" - дом, к которому камень и возвращает. -->
|
||
<challenge name="necroPortalStoneBlue" title_key="challengeNecroPortalBlueTitle" icon="ui_game_symbol_map_house" group="NecroPath"
|
||
short_description_key="challengeNecroPortalBlueShort" description_key="challengeNecroPortalBlueDesc"
|
||
reward_text_key="challenge_reward_2000xp" reward_event="challenge_reward_2000">
|
||
<objective type="Craft" item="thrownStonePortalBlue"/>
|
||
</challenge>
|
||
|
||
<!-- ИСПЫТАНИЯ 1.6.0 (01.10.2026, указание: «добавь испытания по линии некромантии, сам
|
||
придумай; часть - первое создание новых предметов»). Пять - первое создание нового
|
||
(скакун, оссуарий, запас сфер, камень, свиток крысы), два - вещи, на которые испытаний
|
||
ещё не было (браслет, пирамида). Награды по тому же счёту, что выше: 1000 - быстрые
|
||
вещи (10 сфер, свиток), 2000 - станция/браслет/пирамида, 2500 - скакун и камень
|
||
(дорогие рецепты на верстаке и химстанции). Иконки - только ui_game_symbol_*. -->
|
||
<challenge name="necroBoneSteed" title_key="challengeNecroBoneSteedTitle" icon="ui_game_symbol_motorcycle" group="NecroPath"
|
||
short_description_key="challengeNecroBoneSteedShort" description_key="challengeNecroBoneSteedDesc"
|
||
reward_text_key="challenge_reward_2500xp" reward_event="challenge_reward_2500">
|
||
<objective type="Craft" item="necroBoneSteedPlaceable"/>
|
||
</challenge>
|
||
<challenge name="necroGeoOssuary" title_key="challengeNecroGeoOssuaryTitle" icon="ui_game_symbol_challenge_harvesting_cobblestone" group="NecroPath"
|
||
short_description_key="challengeNecroGeoOssuaryShort" description_key="challengeNecroGeoOssuaryDesc"
|
||
reward_text_key="challenge_reward_2000xp" reward_event="challenge_reward_2000">
|
||
<objective type="BlockPlace" block="necroGeoOssuary" count="1"/>
|
||
</challenge>
|
||
<challenge name="necroBloodReserve" title_key="challengeNecroBloodReserveTitle" icon="ui_game_symbol_laceration" group="NecroPath"
|
||
short_description_key="challengeNecroBloodReserveShort" description_key="challengeNecroBloodReserveDesc"
|
||
reward_text_key="challenge_reward_1000xp" reward_event="challenge_reward_1000">
|
||
<objective type="Craft" item="resourceBloodSphere" count="10"/>
|
||
</challenge>
|
||
<challenge name="necroBloodStone" title_key="challengeNecroBloodStoneTitle" icon="ui_game_symbol_resource" group="NecroPath"
|
||
short_description_key="challengeNecroBloodStoneShort" description_key="challengeNecroBloodStoneDesc"
|
||
reward_text_key="challenge_reward_2500xp" reward_event="challenge_reward_2500">
|
||
<objective type="Craft" item="resourceBloodStone"/>
|
||
</challenge>
|
||
<challenge name="necroRatKing" title_key="challengeNecroRatKingTitle" icon="ui_game_symbol_book" group="NecroPath"
|
||
short_description_key="challengeNecroRatKingShort" description_key="challengeNecroRatKingDesc"
|
||
reward_text_key="challenge_reward_1000xp" reward_event="challenge_reward_1000">
|
||
<objective type="Craft" item="bookSummonRatSpirit"/>
|
||
</challenge>
|
||
<challenge name="necroPocketVault" title_key="challengeNecroPocketVaultTitle" icon="ui_game_symbol_backpack" group="NecroPath"
|
||
short_description_key="challengeNecroPocketVaultShort" description_key="challengeNecroPocketVaultDesc"
|
||
reward_text_key="challenge_reward_2000xp" reward_event="challenge_reward_2000">
|
||
<objective type="Craft" item="braceletSpatialVault"/>
|
||
</challenge>
|
||
<challenge name="necroHeresy" title_key="challengeNecroHeresyTitle" icon="ui_game_symbol_7th_curse" group="NecroPath"
|
||
short_description_key="challengeNecroHeresyShort" description_key="challengeNecroHeresyDesc"
|
||
reward_text_key="challenge_reward_2000xp" reward_event="challenge_reward_2000">
|
||
<objective type="BlockPlace" block="necroHeresyPyramid" count="1"/>
|
||
</challenge>
|
||
<!-- ИСПЫТАНИЯ 12.10.2026 (указание: «из того что уже реализовано сделай ещё несколько испытаний»).
|
||
Тексты - намёком, без инструкций (описание мода «должно привлекать, а не спойлерить»).
|
||
Действия (вселение, подрыв, змея, чертоги) - ChallengeStatAwarded: счёт шлёт код мода
|
||
(NecroChallenges.cs), как ванильное «попить из озера». Череп - Gather: игра проверяет, что он
|
||
лежит в рюкзаке или на поясе (выпадает с шансом 2% при обыске красного трупа). Награды по
|
||
прежнему счёту: 1000 - сделать впервые, 2000 - редкое или дорогое, 2500 - долгий счёт и
|
||
самый дорогой гримуар. -->
|
||
<challenge name="necroPossessZombie" title_key="challengeNecroPossessZombieTitle" icon="ui_game_symbol_zombie" group="NecroPath"
|
||
short_description_key="challengeNecroPossessZombieShort" description_key="challengeNecroPossessZombieDesc"
|
||
reward_text_key="challenge_reward_1000xp" reward_event="challenge_reward_1000">
|
||
<objective type="ChallengeStatAwarded" challenge_stat="necroStatPossessZombie" count="1" stat_text_key="challengeNecroPossessZombieShort"/>
|
||
</challenge>
|
||
<challenge name="necroPossessPet" title_key="challengeNecroPossessPetTitle" icon="ui_game_symbol_tracking_wolf" group="NecroPath"
|
||
short_description_key="challengeNecroPossessPetShort" description_key="challengeNecroPossessPetDesc"
|
||
reward_text_key="challenge_reward_1000xp" reward_event="challenge_reward_1000">
|
||
<objective type="ChallengeStatAwarded" challenge_stat="necroStatPossessPet" count="1" stat_text_key="challengeNecroPossessPetShort"/>
|
||
</challenge>
|
||
<challenge name="necroLivingBomb" title_key="challengeNecroLivingBombTitle" icon="ui_game_symbol_explosion" group="NecroPath"
|
||
short_description_key="challengeNecroLivingBombShort" description_key="challengeNecroLivingBombDesc"
|
||
reward_text_key="challenge_reward_2000xp" reward_event="challenge_reward_2000">
|
||
<objective type="ChallengeStatAwarded" challenge_stat="necroStatLivingBomb" count="1" stat_text_key="challengeNecroLivingBombShort"/>
|
||
</challenge>
|
||
<challenge name="necroSnakeHunt" title_key="challengeNecroSnakeHuntTitle" icon="ui_game_symbol_tracking_snake" group="NecroPath"
|
||
short_description_key="challengeNecroSnakeHuntShort" description_key="challengeNecroSnakeHuntDesc"
|
||
reward_text_key="challenge_reward_2500xp" reward_event="challenge_reward_2500">
|
||
<objective type="ChallengeStatAwarded" challenge_stat="necroStatSnakeKill" count="25" stat_text_key="challengeNecroSnakeHuntShort"/>
|
||
</challenge>
|
||
<challenge name="necroMindPalace" title_key="challengeNecroMindPalaceTitle" icon="ui_game_symbol_map_bed" group="NecroPath"
|
||
short_description_key="challengeNecroMindPalaceShort" description_key="challengeNecroMindPalaceDesc"
|
||
reward_text_key="challenge_reward_1000xp" reward_event="challenge_reward_1000">
|
||
<objective type="ChallengeStatAwarded" challenge_stat="necroStatMindPalace" count="1" stat_text_key="challengeNecroMindPalaceShort"/>
|
||
</challenge>
|
||
<challenge name="necroYorick" title_key="challengeNecroYorickTitle" icon="ui_game_symbol_candy_skull_crushers" group="NecroPath"
|
||
short_description_key="challengeNecroYorickShort" description_key="challengeNecroYorickDesc"
|
||
reward_text_key="challenge_reward_2000xp" reward_event="challenge_reward_2000">
|
||
<objective type="Gather" item="necroSkull" count="1"/>
|
||
</challenge>
|
||
<challenge name="necroBlackRose" title_key="challengeNecroBlackRoseTitle" icon="ui_game_symbol_flower" group="NecroPath"
|
||
short_description_key="challengeNecroBlackRoseShort" description_key="challengeNecroBlackRoseDesc"
|
||
reward_text_key="challenge_reward_1000xp" reward_event="challenge_reward_1000">
|
||
<objective type="Craft" item="resourceNecroBlackRoseJuice"/>
|
||
</challenge>
|
||
<challenge name="necroDeadStorm" title_key="challengeNecroDeadStormTitle" icon="ui_game_symbol_twitch_spawn_storm" group="NecroPath"
|
||
short_description_key="challengeNecroDeadStormShort" description_key="challengeNecroDeadStormDesc"
|
||
reward_text_key="challenge_reward_2000xp" reward_event="challenge_reward_2000">
|
||
<objective type="Craft" item="necroModKnifeDeadStorm"/>
|
||
</challenge>
|
||
<challenge name="necroBearHug" title_key="challengeNecroBearTitle" icon="ui_game_symbol_tracking_bear" group="NecroPath"
|
||
short_description_key="challengeNecroBearShort" description_key="challengeNecroBearDesc"
|
||
reward_text_key="challenge_reward_2500xp" reward_event="challenge_reward_2500">
|
||
<objective type="Craft" item="bookSummonZombieBear"/>
|
||
</challenge>
|
||
|
||
</append>
|
||
</config>
|