protected override int GetProgress(ConquestState state, CreatureConquestContainer args)
        {
            if (state.User == null)
                return 0;

            if (args == null || args.Creature == null || args.Killer != null && args.Killer is PlayerMobile && args.Killer.Account != state.User.Account || !(args.Creature is BaseCreature))
            {
                return 0;
            }

            var creature = args.Creature as BaseCreature;

            if (Alignment != Alignment.None && creature.Alignment != Alignment)
            {
                return 0;
            }

            return 1;
            //return base.GetProgress(state, args);
        }
Exemplo n.º 2
0
        /*public static event Action<ConquestProgressEventArgs> OnProgress;
        public static event Action<ConquestTierCompletedEventArgs> OnTierCompleted;
        public static event Action<ConquestCompletedEventArgs> OnCompleted;

        public static void InvokeProgress(ConquestProgressEventArgs e)
        {
            if (e != null && OnProgress != null)
            {
                OnProgress(e);
            }
        }

        public static void InvokeTierCompleted(ConquestTierCompletedEventArgs e)
        {
            if (e != null && OnTierCompleted != null)
            {
                OnTierCompleted(e);
            }
        }

        public static void InvokeCompleted(ConquestCompletedContainer e)
        {
            if (e != null && OnCompleted != null)
            {
                OnCompleted(e);
            }
        }

        private static void SetEvents()
        {
            EventSink.PlayerDeath += HandlePlayerDeath;
            EventSink.Speech += HandleSpeech;
            //EventSink.Login += HandleLogin;
            //EventSink.Logout += HandleLogout;
            EventSink.Movement += HandleMovement;
            EventSink.CastSpellRequest += HandleCastSpellRequest;
            EventSink.Command += HandleCommand;
            //EventSink.ClientVersionReceived += HandleClientVersionReceived;

            EventSink.OnConsume += HandleOnItemConsume;
            EventSink.OnItemUse += HandleOnItemUse;

            TrashProfile.TokensReceived += HandleTrashTokens;

            OnProgress += HandleProgress;
            OnTierCompleted += HandleTierCompleted;
            OnCompleted += HandleCompleted;
        }

        private static void UnsetEvents()
        {
            EventSink.PlayerDeath -= HandlePlayerDeath;
            EventSink.Speech -= HandleSpeech;
            //EventSink.Login -= HandleLogin;
            //EventSink.Logout -= HandleLogout;
            EventSink.Movement -= HandleMovement;
            EventSink.CastSpellRequest -= HandleCastSpellRequest;
            EventSink.Command -= HandleCommand;
            //EventSink.ClientVersionReceived -= HandleClientVersionReceived;

            EventSink.OnConsume -= HandleOnItemConsume;
            EventSink.OnItemUse -= HandleOnItemUse;

            TrashProfile.TokensReceived -= HandleTrashTokens;

            OnProgress -= HandleProgress;
            OnTierCompleted -= HandleTierCompleted;
            OnCompleted -= HandleCompleted;
        }*/

        public static void HandleCreatureDeath(CreatureConquestContainer e)
        {
            if (e == null || e.Creature == null || !(e.Creature is BaseCreature))
            {
                return;
            }

            var creature = (BaseCreature) e.Creature;

            List<PlayerMobile> team =
                creature.DamageEntries.Not(de => de.DamageGiven <= 0 || de.HasExpired)
                    .Select(de => de.Damager)
                    .OfType<PlayerMobile>()
                    .ToList();

            if (e.Killer != null)
            {
                var killer = e.Killer as PlayerMobile;
                if (killer == null && e.Killer is BaseCreature)
                {
                    killer = ((BaseCreature) e.Killer).GetMaster<PlayerMobile>();
                }

                if (killer == null)
                {
                    killer = creature.GetLastKiller<PlayerMobile>();
                }

                if (killer != null && !team.Contains(killer))
                {
                    team.Add(killer);
                }
            }

            team.ForEach(p => CheckProgress<CreatureKillConquest>(p, new CreatureConquestContainer(creature, p, e.Corpse)));
        }