示例#1
0
        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;
            }
            }
        }