public class WalkTimer : Timer { private Entity m_Entity; private int m_Cycle; public WalkTimer(Entity e) : base(TimeSpan.Zero, TimeSpan.FromSeconds(0.5)) { m_Entity = e; Priority = TimerPriority.EveryTick; m_Cycle = 0; } protected override void OnTick() { if (m_Entity == null) Stop(); if ((m_Entity is Player) && (m_Entity as Player).NetState == null) Stop(); bool NeedMove = false; m_Cycle++; switch (m_Entity.WalkSpeed) { case WalkSpeed.Quick: NeedMove = true; m_Cycle = 0; break; case WalkSpeed.Normal: if (m_Cycle >= 2) { m_Cycle = 0; NeedMove = true; } break; case WalkSpeed.Slow: if (m_Cycle >= 4) { m_Cycle = 0; NeedMove = true; } break; } if (NeedMove && !m_Entity.MoveOneStep()) Stop(); }