Девять новых испытаний некромантии

Вселиться в зомби и в своего питомца, подорвать одержимого копа, 25 убийств
змеёй, войти в чертоги (ChallengeStatAwarded: счёт шлёт NecroChallenges.cs),
найти череп (Gather), сок чёрной розы, мод «Мёртвая буря», гримуар медведя
(Craft). Тексты намёком, 13 языков.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-12 11:39:01 +03:00
co-authored by Claude Opus 5.5
parent 47a4b345af
commit cb2a4f19b4
8 changed files with 109 additions and 1 deletions
+1
View File
@@ -978,6 +978,7 @@ namespace NecromancerTome
LogCell(world, _origin + KnifeAt, "нож");
LogCell(world, _origin + BookAt, "книга");
MindControl.Begin(player, spawn, SpawnYaw);
NecroChallenges.Award(NecroChallenges.MindPalace);
player.ScreenEffectManager?.SetScreenEffect("FadeToBlack", 0f, 1.5f);
}
else if (Time.time > _deadline)
+22
View File
@@ -0,0 +1,22 @@
namespace NecromancerTome
{
/// <summary>
/// Испытания вкладки «Некромантия» на действия, а не на крафт (12.10.2026): код мода засчитывает
/// событие, игра ведёт счёт сама - цель challenges.xml type="ChallengeStatAwarded" с тем же
/// challenge_stat (как ванильное «попить из озера» - AwardChallenge drinkwater). Счёт - у локального
/// игрока (QuestEventManager.Current), поэтому звать там, где действие делает он сам.
/// </summary>
public static class NecroChallenges
{
public const string PossessZombie = "necroStatPossessZombie";
public const string PossessPet = "necroStatPossessPet";
public const string LivingBomb = "necroStatLivingBomb";
public const string SnakeKill = "necroStatSnakeKill";
public const string MindPalace = "necroStatMindPalace";
public static void Award(string _stat, int _count = 1)
{
QuestEventManager.Current?.ChallengeAwardCredited(_stat, _count);
}
}
}
+2
View File
@@ -321,6 +321,7 @@ namespace NecromancerTome
_zombie.motion = Vector3.zero;
}
Debug.Log("[NecromancerTome] Possession: вселение в " + (_pet ? "питомца " : "") + _zombie.EntityName + " (" + _zombie.entityId + ")" + (Flying ? ", полёт" : ""));
NecroChallenges.Award(_pet ? NecroChallenges.PossessPet : NecroChallenges.PossessZombie);
return true;
}
@@ -555,6 +556,7 @@ namespace NecromancerTome
{
Debug.Log("[NecromancerTome] Possession: подрыв " + z.EntityName);
cop.HandlePrimingDetonator();
NecroChallenges.Award(NecroChallenges.LivingBomb);
}
Ranged(z, ranged, rangedHeld);
+5 -1
View File
@@ -471,7 +471,11 @@ namespace NecromancerTome
NecroBurst.Pending.Add(target.entityId);
target.DamageEntity(new DamageSourceEntity(EnumDamageSource.External, EnumDamageTypes.Piercing, _player.entityId),
99999, false);
if (!target.IsDead())
if (target.IsDead())
{
NecroChallenges.Award(NecroChallenges.SnakeKill);
}
else
{
NecroBurst.Pending.Remove(target.entityId);
NoLoot.Remove(target.entityId);