Территория торговца убивает одержимого зомби (не питомца): проверка раз в 2 с, подсказка на 13 языках

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-13 18:38:05 +03:00
co-authored by Claude Opus 5.5
parent 3da4435bca
commit 4e885bf624
2 changed files with 24 additions and 0 deletions
+23
View File
@@ -1559,6 +1559,27 @@ namespace NecromancerTome
}
_bodyCheck = 0.5f;
DropAllyTargets(_world, _z);
// Территория торговца убивает одержимого зомби (указание 13.10: «пусть убивает одержимых, даже не сам, а
// территория, на которой он находится»; питомцев не касается). GetTraderAreaAt - настоящая территория, не
// IsWithinTraderArea (её мод подменяет внутри чертогов). Гибель - обычная: дух в тело, сумка мешком.
// Раз в TraderCheckTime (указание 13.10: «проверяй реже»), только готовая территория (IsInitialized, как у игры).
_traderCheck -= 0.5f;
if (!IsPet && _traderCheck <= 0f)
{
_traderCheck = TraderCheckTime;
TraderArea ta = _world.GetTraderAreaAt(World.worldToBlockPos(_z.position + Vector3.up * 0.5f));
if (ta != null && ta.IsInitialized)
{
GameManager.ShowTooltip(_player, Localization.Get("necroPossessTraderArea"));
Debug.Log("[NecromancerTome] Possession: " + _z.EntityName + " на территории торговца - гибнет");
_z.DamageEntity(new DamageSource(EnumDamageSource.Internal, EnumDamageTypes.Suicide), 99999, false, 1f);
if (!_z.IsDead())
{
_z.Kill(DamageResponse.New(true));
}
return;
}
}
bool danger = false;
Vector3 body = _player.position;
float r2 = SnakeControl.BodyDangerRange * SnakeControl.BodyDangerRange;
@@ -2183,6 +2204,8 @@ namespace NecromancerTome
public const float UseReach = 6f;
/// <summary>Ближе стольких метров зверь чует одержимого и не видя (Patch_EAIRunawayFromEntity_FindEnemy_Possession).</summary>
public const float AnimalFearNear = 8f;
public const float TraderCheckTime = 2f;
static float _traderCheck;
static float _promptNext;
static string _prompt; // дальше луч не ищет; сама дальность - у блока (GetActivationDistanceSq)