Anasayfa
UO Sunucular
Forumlar
Profilim
UO-Developer.COM
using System;
using Server;
using Server.Mobiles;
using Server.Network;

namespace Server.Costum
{
    public class Kral
    {
        public static Mobile TheKral = null;
        private const string m_Title = "[Oyun Birincisi][KRAL]";
        private static TimeSpan m_Delay = TimeSpan.FromSeconds(1.0);  //Gecikme payı    *Teorik olarak sadece birkez çalışıyor, server açıldığında girdiğiniz süre kadar sonra ilk seçim yapılır, bundan sonra aşağıdaki interval etkileyici roldedir*
        private static TimeSpan m_Interval = TimeSpan.FromMinutes(15.0);  //Seçim aralığı

        /// <summary>
        /// Her interval kadar sürede bir kral seçimi yapılır
        /// </summary>
        public static void Initialize()
        {
            Timer.DelayCall(m_Delay, m_Interval, new TimerCallback(SelectKralCallback));
        }

        private static void SelectKralCallback()
        {
            try
            {
                Console.WriteLine("Kral seçimleri başladı");
                RemoveOldKral();
                SelectNewKral();
            }
            catch
            {
                Console.WriteLine("Kral seçimlerinde bir hata oluştu");
            }
            finally
            {
                AnnounceNewKral();
            }
        }

        /// <summary>
        /// Eski kral silinir
        /// </summary>
        /// <returns></returns>
        private static void RemoveOldKral()
        {
            if (TheKral != null)
                TheKral.Title = null;
        }

        /// <summary>
        /// Online oyuncular arasından yeni bir kral seçilir
        /// </summary>
        /// <returns></returns>
        private static Mobile SelectNewKral()
        {
            Mobile m_Candidate = null;

            if (NetState.Instances.Count >= 10)
            {
                foreach (NetState n in NetState.Instances)
                {
                    if (n.Mobile != null)
                    {
                        m_Candidate = n.Mobile;

                        if (TheKral == null)
                        {
                            TheKral = m_Candidate;
                            continue;
                        }

                        if (m_Candidate.Title == m_Title)
                        {
                            m_Candidate.Title = null;
                        }

                        if (m_Candidate.NetState != null && m_Candidate.Kills > TheKral.Kills)
                        {
                            TheKral = m_Candidate;
                        }
                    }
                }
            }
            return m_Candidate;
        }

        /// <summary>
        /// Seçilen kralı anons eder
        /// </summary>
        private static void AnnounceNewKral()
        {
            if (TheKral != null)
            {
                Console.WriteLine("Krallık seçimi bitti, kral = {0}", TheKral.Name);
                World.Broadcast(1153, false, "Yeni kral seçildi, [{0}]", TheKral.Name);
                TheKral.Title = m_Title;

                DoEffect();
            }
            else
            {
                World.Broadcast(1153, false, "Yeni bir kral seçilemedi...");
                Console.WriteLine("Yeni bir kral seçilemedi");
            }
        }

        private static void DoEffect()
        {
            Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(TheKral.X - 6, TheKral.Y - 6, TheKral.Z + 15), TheKral.Map), TheKral, 0x36D4, 7, 0, false, true, 1160, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
            Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(TheKral.X - 4, TheKral.Y - 6, TheKral.Z + 15), TheKral.Map), TheKral, 0x36D4, 7, 0, false, true, 1160, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
            Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(TheKral.X - 6, TheKral.Y - 4, TheKral.Z + 15), TheKral.Map), TheKral, 0x36D4, 7, 0, false, true, 1160, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
        }
    }
}

UO-Dev SPONSOR

Paylaş

XFacebook

Faydalı mı?

Bu içerik size yardımcı oldu mu?

UO-Dev SPONSOR

Henüz yorum yapılmamış. Yorum yazabilmek için giriş yapmanız gerekir.

Üyelerin oylama ortalaması (10 dışında) :

Henüz Oylanmamış

Oylar: 0

Paylaş

XFacebook

Faydalı mı?

Bu içerik size yardımcı oldu mu?