Звери боятся одержимого: если зверь ни от кого не бежит, одержимый в его радиусе и виден (или ближе 8 м) - бежит от него
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
83c6be241d
commit
3da4435bca
@@ -2181,6 +2181,8 @@ namespace NecromancerTome
|
|||||||
/// trigger. Запертую чужую дверь не откроет - замок проверяет сама дверь.</summary>
|
/// trigger. Запертую чужую дверь не откроет - замок проверяет сама дверь.</summary>
|
||||||
static readonly string[] UseCommands = { "open", "close", "light", "activate" };
|
static readonly string[] UseCommands = { "open", "close", "light", "activate" };
|
||||||
public const float UseReach = 6f;
|
public const float UseReach = 6f;
|
||||||
|
/// <summary>Ближе стольких метров зверь чует одержимого и не видя (Patch_EAIRunawayFromEntity_FindEnemy_Possession).</summary>
|
||||||
|
public const float AnimalFearNear = 8f;
|
||||||
static float _promptNext;
|
static float _promptNext;
|
||||||
static string _prompt; // дальше луч не ищет; сама дальность - у блока (GetActivationDistanceSq)
|
static string _prompt; // дальше луч не ищет; сама дальность - у блока (GetActivationDistanceSq)
|
||||||
|
|
||||||
@@ -2876,4 +2878,33 @@ namespace NecromancerTome
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>Звери боятся одержимого (тест 13.10: «куры и кролики не пугаются одержимого зомби»). Их EAIRunawayFromEntity
|
||||||
|
/// бежит от зомби, только если тот ближе dangerDistance или виден, а от игрока - ещё и по шуму; одержимым правит
|
||||||
|
/// игрок-охотник, поэтому, если зверь ни от кого не бежит, одержимый в его радиусе (как у игры: min(зрение,
|
||||||
|
/// safeDistance) * 0.8) и виден - или ближе Possession.AnimalFearNear - зверь бежит от него. Питомцев мода не касается.</summary>
|
||||||
|
[HarmonyPatch(typeof(EAIRunawayFromEntity), nameof(EAIRunawayFromEntity.FindEnemy))]
|
||||||
|
public static class Patch_EAIRunawayFromEntity_FindEnemy_Possession
|
||||||
|
{
|
||||||
|
public static void Postfix(EAIRunawayFromEntity __instance)
|
||||||
|
{
|
||||||
|
EntityAlive z = Possession.Zombie;
|
||||||
|
EntityAlive self = __instance.theEntity;
|
||||||
|
if (__instance.enemy != null || !Possession.Active || z == null || z.IsDead() || self == null || self == z ||
|
||||||
|
SnakeControl.IsNecroEntity(self))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
float radius = Utils.FastMin(self.GetSeeDistance(), __instance.safeDistance) * 0.8f;
|
||||||
|
float d2 = self.GetDistanceSq(z);
|
||||||
|
if (d2 > radius * radius)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (d2 <= Possession.AnimalFearNear * Possession.AnimalFearNear || self.CanSee(z))
|
||||||
|
{
|
||||||
|
__instance.enemy = z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user