Одержимость: девианты и питомцы снимают старую цель с одержимого
Кто шёл на зомби до вселения, держал его целью и дальше: заплатки CharmPatch гасят только новый выбор цели. Раз в полсекунды цель и месть девиантов и питомцев на одержимого сбрасываются. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
39763047ce
commit
8000e65167
@@ -1359,6 +1359,27 @@ namespace NecromancerTome
|
|||||||
public const float GroundAimRange = 30f; // зрение зомби, как TauntRange
|
public const float GroundAimRange = 30f; // зрение зомби, как TauntRange
|
||||||
public const float GroundAimRadius = 0.6f;
|
public const float GroundAimRadius = 0.6f;
|
||||||
|
|
||||||
|
/// <summary>Девианты и питомцы мода не бьют одержимого (13.10: «девианты не должны нападать на
|
||||||
|
/// одержимого»). Новую цель им гасят заплатки на выборе и присвоении (CharmPatch), но зомби, на которого
|
||||||
|
/// девиант или питомец уже шёл до вселения, оставался его целью - SetAttackTarget больше не звался.
|
||||||
|
/// Такую цель снимаем здесь, раз в полсекунды (из CheckBody).</summary>
|
||||||
|
static void DropAllyTargets(World _world, EntityAlive _z)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < _world.EntityAlives.Count; i++)
|
||||||
|
{
|
||||||
|
EntityAlive e = _world.EntityAlives[i];
|
||||||
|
if (e == null || e == _z || e.IsDead() ||
|
||||||
|
e.GetAttackTarget() != _z && e.GetRevengeTarget() != _z ||
|
||||||
|
!NecroCharmSide.IsCharmed(e) && !SnakeControl.IsNecroEntity(e))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
e.SetRevengeTarget(null);
|
||||||
|
e.SetAttackTarget(null, 0);
|
||||||
|
Debug.Log("[NecromancerTome] Possession: " + e.EntityName + " (" + e.entityId + ") больше не нападает на одержимого");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>Раз в полсекунды: есть ли живой враг ближе BodyDangerRange к телу (как у змеи).</summary>
|
/// <summary>Раз в полсекунды: есть ли живой враг ближе BodyDangerRange к телу (как у змеи).</summary>
|
||||||
static void CheckBody(World _world, EntityAlive _z, float _dt)
|
static void CheckBody(World _world, EntityAlive _z, float _dt)
|
||||||
{
|
{
|
||||||
@@ -1368,6 +1389,7 @@ namespace NecromancerTome
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_bodyCheck = 0.5f;
|
_bodyCheck = 0.5f;
|
||||||
|
DropAllyTargets(_world, _z);
|
||||||
bool danger = false;
|
bool danger = false;
|
||||||
Vector3 body = _player.position;
|
Vector3 body = _player.position;
|
||||||
float r2 = SnakeControl.BodyDangerRange * SnakeControl.BodyDangerRange;
|
float r2 = SnakeControl.BodyDangerRange * SnakeControl.BodyDangerRange;
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user