protected override void OnTick()
{
if (m_Owner.m_Mobile.Deleted)
{
Stop();
return;
}
else if (m_Owner.m_Mobile.Map == null || m_Owner.m_Mobile.Map == Map.Internal)
{
m_Owner.Deactivate();
return;
}
else if (m_Owner.m_Mobile.PlayerRangeSensitive)//have to check this in the timer....
{
Sector sect = m_Owner.m_Mobile.Map.GetSector(m_Owner.m_Mobile);
if (!sect.Active)
{
m_Owner.Deactivate();
return;
}
}
m_Owner.m_Mobile.OnThink();
if (m_Owner.m_Mobile.Deleted)
{
Stop();
return;
}
else if (m_Owner.m_Mobile.Map == null || m_Owner.m_Mobile.Map == Map.Internal)
{
m_Owner.Deactivate();
return;
}
if (m_Owner.m_Mobile.BardPacified)
{
m_Owner.DoBardPacified();
}
else if (m_Owner.m_Mobile.BardProvoked)
{
m_Owner.DoBardProvoked();
}
else
{
if (!m_Owner.m_Mobile.Controlled)
{
if (!m_Owner.Think())
{
Stop();
return;
}
}
else
{
if (!m_Owner.Obey())
{
Stop();
return;
}
}
}
if (m_Owner.CanDetectHidden && DateTime.Now > m_Owner.m_NextDetectHidden)
{
m_Owner.DetectHidden();
// Not exactly OSI style, approximation.
int delay = (15000 / m_Owner.m_Mobile.Int);
if (delay > 60)
delay = 60;
int min = delay * (9 / 10); // 13s at 1000 int, 33s at 400 int, 54s at <250 int
int max = delay * (10 / 9); // 16s at 1000 int, 41s at 400 int, 66s at <250 int
m_Owner.m_NextDetectHidden = DateTime.Now + TimeSpan.FromSeconds(Utility.RandomMinMax(min, max));
}
}
}