Кровавый прилив: в ночь кровавой луны дух не выходит из тела

Нет змеи, чертогов, одержимости зомби и питомцев; кто вне тела - выброшен
в тело; «коза» без эффекта. Подмешивание Стирателей в орду отключено.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-10 12:56:52 +03:00
co-authored by Claude Opus 5.5
parent 555d9c9b48
commit 8541c7abdf
8 changed files with 85 additions and 2 deletions
+44
View File
@@ -65,6 +65,37 @@ namespace NecromancerTome
return world != null && world.IsDark();
}
/// <summary>
/// «Кровавый прилив» (указание 10.10, новая концепция ночи кровавой луны). Луна в этой фазе тянет из
/// земли некротлен - прах умерших за годы эпидемии, - и плотность некроэнергии в воздухе скачком
/// сравнивается с плотностью в теле некроманта. Дух выходит из тела по перепаду плотностей; перепада
/// нет - выйти нечем. Поэтому до утра: нет духа змеи, чертогов разума, одержимости (и зомби, и своих
/// питомцев), а кто был вне тела к началу - выброшен в тело. «Коза» (леденящий ужас) тонет в
/// насыщенном воздухе: жест есть, эффекта нет.
/// Время - ванильное GameUtils.IsBloodMoonTime (от заката дня луны до рассвета), оно считается по часам
/// мира и одинаково у хоста и клиента; AIDirector с его BloodMoonActive есть только у сервера.
/// </summary>
public static bool IsBloodTide()
{
World world = GameManager.Instance?.World;
return world != null && GameUtils.IsBloodMoonTime(world.worldTime, (world.DuskHour, world.DawnHour),
GameStats.GetInt(EnumGameStats.BloodMoonDay));
}
/// <summary>Надпись «кровавого прилива» - не чаще раза в BloodTideHintPeriod с.</summary>
public const float BloodTideHintPeriod = 2f;
static float _bloodTideHintAt = -100f;
public static void BloodTideHint(EntityPlayerLocal _player)
{
if (_player == null || Time.time - _bloodTideHintAt < BloodTideHintPeriod)
{
return;
}
_bloodTideHintAt = Time.time;
GameManager.ShowTooltip(_player, Localization.Get("necroBloodTide"));
}
public static bool IsKnife(ItemClass _item)
{
return _item != null && _item.Name == KnifeName;
@@ -81,6 +112,12 @@ namespace NecromancerTome
Debug.Log("[NecromancerTome] SnakeMode: днём дух змеи недоступен");
return;
}
if (IsBloodTide())
{
BloodTideHint(_player);
Debug.Log("[NecromancerTome] SnakeMode: кровавый прилив - дух не покидает тело");
return;
}
World world = GameManager.Instance.World;
EntityClass snakeClass = EntityClass.list[EntityClass.FromString(SnakeClassName)];
if (snakeClass == null)
@@ -247,6 +284,13 @@ namespace NecromancerTome
Exit(player);
return;
}
if (IsBloodTide())
{
BloodTideHint(player);
Debug.Log("[NecromancerTome] SnakeMode: кровавый прилив - дух выброшен в тело");
Exit(player);
return;
}
if (_placeSnake && PlaceSnake(player, snake))
{
_placeSnake = false;