Exemple #1
0
        public void Invasion_Tick()
        {
            if (m_InvasionStarted)
            {
                if (InvasionConfig.Enabled)
                {
                    if (m_SpawnList == null || m_RegisteredInvasionRegion == null || m_Players == null)
                    {
                        StartInvasion();
                    }

                    if (m_SpawnList.Count < m_SpawnDensity)
                    {
                        SpawnInvasion();
                    }

                    if (m_Kills >= m_RequiredKillCount)
                    {
                        EndInvasion(InvasionEventSink.InvasionEndedEventArgs.InvasionEndedReason.KillCountReached);
                    }
                }
            }

            InvasionEventSink.OnInvasionTicked(new InvasionEventSink.InvasionTickedEventArgs(this));
            Timer.DelayCall(InvasionConfig.InvasionTickRate, new TimerCallback(Invasion_Tick));
        }
Exemple #2
0
 public override void OnKilledBy(Mobile mob)
 {
     if (m_Controller != null && mob != null)
     {
         InvasionEventSink.OnInvasionSpawnKilled(new InvasionEventSink.InvasionSpawnKilledEventArgs(Controller, mob));
     }
     base.OnKilledBy(mob);
 }
Exemple #3
0
        public InvasionController()
            : base(0xEDD)
        {
            Name    = String.Format("DefaultInvasion{0}", ControllerCount.ToString());
            Visible = false;
            Movable = false;

            ControllerCount += 1;
            InvasionEventSink.OnInvasionControllerCreated(new InvasionEventSink.InvasionControllerCreatedEventArgs(this));
        }
Exemple #4
0
        public override void OnDelete()
        {
            if (m_Controller == null)
            {
                base.OnDelete();
                return;
            }

            InvasionEventSink.OnInvasionSpawnDeleted(new InvasionEventSink.InvasionSpawnDeletedEventArgs(m_Controller, this));
            base.OnDelete();
        }
Exemple #5
0
        public override void OnDeath(Container c)
        {
            if (m_Controller == null)
            {
                Delete();
                base.OnDeath(c);
                return;
            }

            InvasionEventSink.OnInvasionSpawnDied(new InvasionEventSink.InvasionSpawnDiedEventArgs(m_Controller, this, c));
            base.OnDeath(c);
        }
Exemple #6
0
        protected override bool OnMove(Direction d)
        {
            if (m_Controller == null)
            {
                Delete();
            }

            if (m_Controller != null)
            {
                InvasionEventSink.OnInvasionSpawnMoved(new InvasionEventSink.InvasionSpawnMovedEventArgs(m_Controller, this));
            }

            return(base.OnMove(d));
        }
Exemple #7
0
        public void StartInvasion()
        {
            if (m_SpawnList == null)
            {
                m_SpawnList = new List <InvasionSpawn>();
            }
            if (m_RegisteredInvasionRegion == null)
            {
                m_RegisteredInvasionRegion = new InvasionRegion(this);
            }
            if (m_Players == null)
            {
                m_Players = new Dictionary <PlayerMobile, int>();
            }

            m_InvasionStarted = true;
            InvasionEventSink.OnInvasionStarted(new InvasionEventSink.InvasionStartedEventArgs(this));
        }
Exemple #8
0
 public void OnInvasionStarted(InvasionEventSink.InvasionStartedEventArgs args)
 {
     if (args.Controller == Controller)
         Register();
 }
Exemple #9
0
 public void OnInvasionEnded(InvasionEventSink.InvasionEndedEventArgs args)
 {
     if (args.Controller == Controller)
         Unregister();
 }
Exemple #10
0
 public static void OnInvasionControllerDeleted(InvasionEventSink.InvasionControllerDeletedEventArgs args)
 {
     InvasionControllerRegistry.Remove(args.Controller);
 }
Exemple #11
0
 public static void OnInvasionControllerCreated(InvasionEventSink.InvasionControllerCreatedEventArgs args)
 {
     InvasionControllerRegistry.Add(args.Controller);
 }
Exemple #12
0
 public override void OnDelete()
 {
     InvasionEventSink.OnInvasionControllerDeleted(new InvasionEventSink.InvasionControllerDeletedEventArgs(this));
     base.OnDelete();
 }
Exemple #13
0
        public void EndInvasion(InvasionEventSink.InvasionEndedEventArgs.InvasionEndedReason Reason)
        {
            m_InvasionStarted = false;

            List <InvasionSpawn> ToDelete = new List <InvasionSpawn>();

            for (int i = 0; i < m_SpawnList.Count; ++i)
            {
                ToDelete.Add((InvasionSpawn)m_SpawnList[i]);
            }

            foreach (Mobile m in World.Mobiles.Values)
            {
                if (m is InvasionSpawn)
                {
                    if (((InvasionSpawn)m).Controller == this)
                    {
                        ToDelete.Add((InvasionSpawn)m);
                    }
                }
            }

            for (int i = 0; i < ToDelete.Count; ++i)
            {
                InvasionSpawn deleting = (InvasionSpawn)ToDelete[i];
                deleting.Delete();
            }

            if (Reason == InvasionEventSink.InvasionEndedEventArgs.InvasionEndedReason.KillCountReached)
            {
                Console.WriteLine("Player Count:" + m_Players.Count.ToString());
                IEnumerator key = m_Players.Keys.GetEnumerator();
                for (int i = 0; i < m_Players.Count; ++i)
                {
                    key.MoveNext();
                    int kills   = (int)m_Players[(PlayerMobile)key.Current];
                    int percent = (kills / m_RequiredKillCount) * 100;
                    if (percent > 100)
                    {
                        percent = 100;
                    }

                    int reward = (percent * m_Reward) / 100;

                    if (reward < 1)
                    {
                        reward = 1;
                    }

                    if (reward > 60000)
                    {
                        reward = 60000;
                    }

                    Console.WriteLine("Kills:" + kills.ToString());
                    Console.WriteLine("Percent:" + percent.ToString());

                    Item givenreward;
                    if (reward >= 5000)
                    {
                        givenreward = new BankCheck(reward);
                    }
                    else
                    {
                        givenreward = new Gold(reward);
                    }

                    BankBox bank = (BankBox)((PlayerMobile)key.Current).BankBox;
                    bank.AddItem(givenreward);

                    ((PlayerMobile)key.Current).SendMessage(String.Format("The invasion has ended! You have been rewarded {0}gp!", reward.ToString()));
                }
            }

            m_SpawnList.Clear();
            m_SpawnList = null;

            m_Players.Clear();
            m_Players = null;
            m_Kills   = 0;

            InvasionEventSink.OnInvasionEnded(new InvasionEventSink.InvasionEndedEventArgs(this, Reason));
        }
        public static void OnInvasionSpawnDied(InvasionEventSink.InvasionSpawnDiedEventArgs args)
        {
            if (!args.Controller.InvasionStarted)
                return;

            args.Controller.Kills += 1;
            args.Controller.SpawnList.Remove(args.Spawn);
        }
        public static void OnInvasionSpawnKilled(InvasionEventSink.InvasionSpawnKilledEventArgs args)
        {
            if (args.Controller == null || args.Killer == null)
                return;
            if (!args.Controller.InvasionStarted)
                return;

            if (args.Killer is PlayerMobile)
            {
                if (args.Controller.Players.ContainsKey((PlayerMobile)args.Killer))
                    args.Controller.Players[(PlayerMobile)args.Killer] += 1;
                else
                    args.Controller.Players.Add((PlayerMobile)args.Killer, 1);
            }
        }
        public void EndInvasion(InvasionEventSink.InvasionEndedEventArgs.InvasionEndedReason Reason)
        {
            m_InvasionStarted = false;

            List<InvasionSpawn> ToDelete = new List<InvasionSpawn>();
            for (int i = 0; i < m_SpawnList.Count; ++i)
                ToDelete.Add((InvasionSpawn)m_SpawnList[i]);

            foreach(Mobile m in World.Mobiles.Values)
                if (m is InvasionSpawn)
                    if(((InvasionSpawn)m).Controller == this)
                        ToDelete.Add((InvasionSpawn)m);

            for(int i = 0; i < ToDelete.Count; ++i)
            {
                InvasionSpawn deleting = (InvasionSpawn)ToDelete[i];
                deleting.Delete();
            }

            if (Reason == InvasionEventSink.InvasionEndedEventArgs.InvasionEndedReason.KillCountReached)
            {
                Console.WriteLine("Player Count:" + m_Players.Count.ToString());
                IEnumerator key = m_Players.Keys.GetEnumerator();
                for (int i = 0; i < m_Players.Count; ++i)
                {
                    key.MoveNext();
                    int kills = (int)m_Players[(PlayerMobile)key.Current];
                    int percent = (kills / m_RequiredKillCount) * 100;
                    if (percent > 100)
                        percent = 100;

                    int reward = (percent * m_Reward) / 100;

                    if (reward < 1)
                        reward = 1;

                    if(reward > 60000)
                        reward = 60000;

                    Console.WriteLine("Kills:" + kills.ToString());
                    Console.WriteLine("Percent:" + percent.ToString());

                    Item givenreward;
                    if (reward >= 5000)
                        givenreward = new BankCheck(reward);
                    else
                        givenreward = new Gold(reward);

                    BankBox bank = (BankBox)((PlayerMobile)key.Current).BankBox;
                    bank.AddItem(givenreward);

                    ((PlayerMobile)key.Current).SendMessage(String.Format("The invasion has ended! You have been rewarded {0}gp!", reward.ToString()));
                }
            }

            m_SpawnList.Clear();
            m_SpawnList = null;

            m_Players.Clear();
            m_Players = null;
            m_Kills = 0;

            InvasionEventSink.OnInvasionEnded(new InvasionEventSink.InvasionEndedEventArgs(this, Reason));
        }
        public static void OnInvasionSpawnMoved(InvasionEventSink.InvasionSpawnMovedEventArgs args)
        {
            if (!args.Controller.InvasionStarted)
                return;

            if(!args.Controller.RegisteredInvasionRegion.InRegion((Mobile)args.Spawn))
                args.Spawn.Delete();

            if (args.Spawn.CheckReachedTarget())
                args.Spawn.RangeHome = InvasionConfig.InvasionSpawnWanderFromTargetRange;
        }