Кровавый прилив: в ночь кровавой луны дух не выходит из тела
Нет змеи, чертогов, одержимости зомби и питомцев; кто вне тела - выброшен в тело; «коза» без эффекта. Подмешивание Стирателей в орду отключено. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
555d9c9b48
commit
8541c7abdf
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user