D:\ValheimDev\Dumps\Old\assembly_valheim\AnimalAI.cs D:\ValheimDev\Dumps\Latest\assembly_valheim\AnimalAI.cs
using System; using System;
.using System.Collections.Generic;  
using UnityEngine; using UnityEngine;
   
public class AnimalAI : BaseAI public class AnimalAI : BaseAI
{ {
    protected override void Awake()     protected override void Awake()
    {     {
        base.Awake();         base.Awake();
        this.m_updateTargetTimer = UnityEngine.Random.Range(0f, 2f);         this.m_updateTargetTimer = UnityEngine.Random.Range(0f, 2f);
    }     }
   
.    protected override void OnEnable()  
    {  
        base.OnEnable();  
        AnimalAI.Instances.Add(this);  
    }  
   
    protected override void OnDisable()  
    {  
        base.OnDisable();  
        AnimalAI.Instances.Remove(this);  
    }  
   
    protected override void OnDamaged(float damage, Character attacker)     protected override void OnDamaged(float damage, Character attacker)
    {     {
        base.OnDamaged(damage, attacker);         base.OnDamaged(damage, attacker);
        this.SetAlerted(true);         this.SetAlerted(true);
    }     }
   
.    public new void UpdateAI(float dt)     public override bool UpdateAI(float dt)
    {     {
.        if (!this.m_nview.IsOwner())         if (!base.UpdateAI(dt))
        {         {
.            return;             return false;
        }         }
        if (this.m_afraidOfFire && base.AvoidFire(dt, null, true))         if (this.m_afraidOfFire && base.AvoidFire(dt, null, true))
        {         {
.            return;             return true;
        }         }
        this.m_updateTargetTimer -= dt;         this.m_updateTargetTimer -= dt;
        if (this.m_updateTargetTimer <= 0f)         if (this.m_updateTargetTimer <= 0f)
        {         {
            this.m_updateTargetTimer = (Character.IsCharacterInRange(base.transform.position, 32f) ? 2f : 10f);             this.m_updateTargetTimer = (Character.IsCharacterInRange(base.transform.position, 32f) ? 2f : 10f);
            Character character = base.FindEnemy();             Character character = base.FindEnemy();
            if (character)             if (character)
            {             {
                this.m_target = character;                 this.m_target = character;
            }             }
        }         }
        if (this.m_target && this.m_target.IsDead())         if (this.m_target && this.m_target.IsDead())
        {         {
            this.m_target = null;             this.m_target = null;
        }         }
        if (this.m_target)         if (this.m_target)
        {         {
            bool flag = base.CanSenseTarget(this.m_target);             bool flag = base.CanSenseTarget(this.m_target);
            base.SetTargetInfo(this.m_target.GetZDOID());             base.SetTargetInfo(this.m_target.GetZDOID());
            if (flag)             if (flag)
            {             {
                this.SetAlerted(true);                 this.SetAlerted(true);
            }             }
        }         }
        else         else
        {         {
            base.SetTargetInfo(ZDOID.None);             base.SetTargetInfo(ZDOID.None);
        }         }
        if (base.IsAlerted())         if (base.IsAlerted())
        {         {
            this.m_inDangerTimer += dt;             this.m_inDangerTimer += dt;
            if (this.m_inDangerTimer > this.m_timeToSafe)             if (this.m_inDangerTimer > this.m_timeToSafe)
            {             {
                this.m_target = null;                 this.m_target = null;
                this.SetAlerted(false);                 this.SetAlerted(false);
            }             }
        }         }
        if (this.m_target)         if (this.m_target)
        {         {
            base.Flee(dt, this.m_target.transform.position);             base.Flee(dt, this.m_target.transform.position);
            this.m_target.OnTargeted(false, false);             this.m_target.OnTargeted(false, false);
.            return;  
        }         }
.        base.IdleMovement(dt);         else 
          { 
              base.IdleMovement(dt);
          } 
          return true; 
    }     }
   
    protected override void SetAlerted(bool alert)     protected override void SetAlerted(bool alert)
    {     {
        if (alert)         if (alert)
        {         {
            this.m_inDangerTimer = 0f;             this.m_inDangerTimer = 0f;
        }         }
        base.SetAlerted(alert);         base.SetAlerted(alert);
    }     }
.   
    public new static List<AnimalAI> Instances { get; } = new List<AnimalAI>();  
   
    private const float m_updateTargetFarRange = 32f;     private const float m_updateTargetFarRange = 32f;
   
    private const float m_updateTargetIntervalNear = 2f;     private const float m_updateTargetIntervalNear = 2f;
   
    private const float m_updateTargetIntervalFar = 10f;     private const float m_updateTargetIntervalFar = 10f;
   
    public float m_timeToSafe = 4f;     public float m_timeToSafe = 4f;
   
    private Character m_target;     private Character m_target;
   
    private float m_inDangerTimer;     private float m_inDangerTimer;
   
    private float m_updateTargetTimer;     private float m_updateTargetTimer;
} }