private void Hatch(object ob) { HatchState state = HatchState.Rustle; try { state = (HatchState)ob; } catch { m_Hatch.Stop(); Console.WriteLine("{0} passed to ChickenEgg.Hatch(). Tell Taran Kain.", ob); return; } if (m_Chick == null || m_Chick.Deleted) { m_Hatch.Stop(); return; } switch (state) { case HatchState.Rustle: { if (Utility.RandomDouble() < .4) { Rustle(); } if (Utility.RandomDouble() < .05) { m_Hatch.Stop(); m_Hatch = Timer.DelayCall(TimeSpan.FromSeconds(Utility.RandomDouble() + 2), TimeSpan.FromSeconds(2), new TimerStateCallback(Hatch), HatchState.Crack); m_Hatch.Start(); } break; } case HatchState.Crack: { if (Utility.RandomDouble() < .7) { Effects.PlaySound(Location, Map, Utility.RandomList(828, 829)); PublicOverheadMessage(Server.Network.MessageType.Regular, 0, true, "You notice some cracks!"); } if (Utility.RandomDouble() < .2) { m_Hatch.Stop(); m_Hatch = Timer.DelayCall(TimeSpan.FromSeconds(Utility.RandomDouble() + 4), TimeSpan.FromSeconds(1), new TimerStateCallback(Hatch), HatchState.Beak); m_Hatch.Start(); } break; } case HatchState.Beak: { if (Utility.RandomDouble() < .4) { Effects.PlaySound(Location, Map, Utility.RandomList(828, 829)); PublicOverheadMessage(Server.Network.MessageType.Regular, 0, true, "You can see a beak!"); } if (Utility.RandomDouble() < .1) { m_Hatch.Stop(); m_Hatch = Timer.DelayCall(TimeSpan.FromSeconds(Utility.RandomDouble() + 3), new TimerStateCallback(Hatch), HatchState.Split); m_Hatch.Start(); } break; } case HatchState.Split: { Effects.PlaySound(Location, Map, Utility.RandomList(308, 309)); PublicOverheadMessage(Server.Network.MessageType.Regular, 0, true, "The egg splits open!"); m_Hatch.Stop(); m_Hatch = Timer.DelayCall(TimeSpan.FromSeconds(Utility.RandomDouble() * 0.5), new TimerStateCallback(Hatch), HatchState.Hatch); m_Hatch.Start(); break; } case HatchState.Hatch: { m_Chick.SpawnerTempMob = false; m_Chick.MoveToWorld(GetWorldLocation(), Map); m_Chick.PlaySound(Utility.RandomList(111, 113, 114, 115)); new Eggshells().MoveToWorld(GetWorldLocation(), Map); Delete(); break; } } }