Esempio n. 1
0
        public static bool CheckThinkTrigger(BaseCreature bc)
        {
            var combatant = bc.Combatant;

            if (combatant is Mobile)
            {
                var profile = PetTrainingHelper.GetAbilityProfile(bc);

                if (profile != null)
                {
                    AreaEffect effect = null;

                    var effects = profile.GetAreaEffects().Where(a => !a.IsInCooldown(bc)).ToArray();

                    if (effects != null && effects.Length > 0)
                    {
                        effect = effects[Utility.Random(effects.Length)];
                    }

                    if (effect != null)
                    {
                        return(effect.Trigger(bc, (Mobile)combatant));
                    }
                }
            }
            return(false);
        }
Esempio n. 2
0
        public override void DoEffects(BaseCreature creature, Mobile defender, ref int damage)
        {
            if (creature.Map == null)
            {
                return;
            }

            List <Mobile>     list  = new List <Mobile>();
            IPooledEnumerable eable = creature.GetMobilesInRange(8);

            foreach (Mobile m in eable)
            {
                if (AreaEffect.ValidTarget(creature, m))
                {
                    list.Add(m);
                }
            }

            eable.Free();

            foreach (Mobile m in list)
            {
                creature.DoHarmful(m, false);

                m.FixedParticles(0x374A, 10, 15, 5013, 0x496, 0, EffectLayer.Waist);
                m.PlaySound(0x231);

                m.SendMessage("You feel the mana drain out of you!");

                int toDrain = Utility.RandomMinMax(40, 60);

                creature.Mana += toDrain;
                m.Mana        -= toDrain;
            }
        }
Esempio n. 3
0
        public IEnumerable <AreaEffect> EnumerateAreaEffects()
        {
            if (AreaEffects == null)
            {
                yield break;
            }

            for (var index = 0; index < AreaEffects.Length; index++)
            {
                AreaEffect ability = AreaEffects[index];

                yield return(ability);
            }
        }
Esempio n. 4
0
        public void RemoveAbility(AreaEffect ability)
        {
            if (AreaEffects == null || !AreaEffects.Any(a => a == ability))
            {
                return;
            }

            var list = AreaEffects.ToList();

            list.Remove(ability);
            RemovePetAdvancement(ability);

            AreaEffects = list.ToArray();

            ColUtility.Free(list);
        }
Esempio n. 5
0
        public bool HasAreaEffect(AreaEffect ability)
        {
            bool any = false;

            for (var index = 0; index < AreaEffects.Length; index++)
            {
                var a = AreaEffects[index];

                if (a == ability)
                {
                    any = true;
                    break;
                }
            }

            return(AreaEffects != null && any);
        }
Esempio n. 6
0
        public override void DoEffects(BaseCreature creature, Mobile defender, ref int damage)
        {
            IPooledEnumerable eable = creature.GetMobilesInRange(3);
            List <Mobile>     list  = new List <Mobile>();

            list.Add(defender);

            foreach (Mobile m in eable)
            {
                if (AreaEffect.ValidTarget(creature, m))
                {
                    list.Add(m);
                }
            }

            eable.Free();
            Poison p = creature.GetHitPoison();

            if (p == null)
            {
                return;
            }

            foreach (var m in list)
            {
                defender.PlaySound(0xDD);
                defender.FixedParticles(0x3728, 244, 25, 9941, 1266, 0, EffectLayer.Waist);

                m.SendLocalizedMessage(1008097, false, creature.Name); //  : poisoned you!

                m.ApplyPoison(creature, p);
            }

            if (creature.Controlled && list.Count > 0)
            {
                var profile = PetTrainingHelper.GetAbilityProfile(creature);

                if ((profile != null && profile.HasAbility(MagicalAbility.Poisoning)) || 0.2 > Utility.RandomDouble())
                {
                    creature.CheckSkill(SkillName.Poisoning, 0, creature.Skills[SkillName.Poisoning].Cap);
                }
            }

            ColUtility.Free(list);
        }
Esempio n. 7
0
        public IEnumerable <object> EnumerateAllAbilities()
        {
            if (MagicalAbility != MagicalAbility.None)
            {
                for (var index = 0; index < PetTrainingHelper.MagicalAbilities.Length; index++)
                {
                    MagicalAbility abil = PetTrainingHelper.MagicalAbilities[index];

                    if ((MagicalAbility & abil) != 0)
                    {
                        yield return(abil);
                    }
                }
            }

            if (SpecialAbilities != null)
            {
                for (var index = 0; index < SpecialAbilities.Length; index++)
                {
                    SpecialAbility abil = SpecialAbilities[index];

                    yield return(abil);
                }
            }

            if (AreaEffects != null)
            {
                for (var index = 0; index < AreaEffects.Length; index++)
                {
                    AreaEffect effect = AreaEffects[index];

                    yield return(effect);
                }
            }

            if (WeaponAbilities != null)
            {
                for (var index = 0; index < WeaponAbilities.Length; index++)
                {
                    WeaponAbility abil = WeaponAbilities[index];

                    yield return(abil);
                }
            }
        }
Esempio n. 8
0
        public bool AddAbility(AreaEffect ability, bool advancement = true)
        {
            if (AreaEffects == null)
            {
                AreaEffects = new[] { ability };
            }
            else
            {
                bool any = false;

                for (var index = 0; index < AreaEffects.Length; index++)
                {
                    var a = AreaEffects[index];

                    if (a == ability)
                    {
                        any = true;
                        break;
                    }
                }

                if (!any)
                {
                    AreaEffect[] temp = AreaEffects;

                    AreaEffects = new AreaEffect[temp.Length + 1];

                    for (int i = 0; i < temp.Length; i++)
                    {
                        AreaEffects[i] = temp[i];
                    }

                    AreaEffects[temp.Length] = ability;
                }
            }

            OnAddAbility(ability, advancement);

            return(true);
        }
Esempio n. 9
0
        public static bool CheckThinkTrigger(BaseCreature bc)
        {
            AbilityProfile profile = PetTrainingHelper.GetAbilityProfile(bc);

            if (profile != null)
            {
                AreaEffect effect = null;

                List <AreaEffect> list = new List <AreaEffect>();

                var af = profile.GetAreaEffects();

                for (var index = 0; index < af.Length; index++)
                {
                    var a = af[index];

                    if (!a.IsInCooldown(bc))
                    {
                        list.Add(a);
                    }
                }

                AreaEffect[] effects = list.ToArray();

                if (effects.Length > 0)
                {
                    effect = effects[Utility.Random(effects.Length)];
                }

                if (effect != null)
                {
                    return(effect.Trigger(bc, bc.Combatant as Mobile));
                }
            }

            return(false);
        }
Esempio n. 10
0
        public bool AddAbility(AreaEffect ability, bool advancement = true)
        {
            if (AreaEffects == null)
            {
                AreaEffects = new AreaEffect[] { ability };
            }
            else if (!AreaEffects.Any(a => a == ability))
            {
                var temp = AreaEffects;

                AreaEffects = new AreaEffect[temp.Length + 1];

                for (int i = 0; i < temp.Length; i++)
                {
                    AreaEffects[i] = temp[i];
                }

                AreaEffects[temp.Length] = ability;
            }

            OnAddAbility(ability, advancement);

            return(true);
        }
Esempio n. 11
0
        public void RemoveAbility(AreaEffect ability)
        {
            bool any = false;

            for (var index = 0; index < AreaEffects.Length; index++)
            {
                var a = AreaEffects[index];

                if (a == ability)
                {
                    any = true;
                    break;
                }
            }

            if (AreaEffects == null || !any)
            {
                return;
            }

            List <AreaEffect> list = new List <AreaEffect>();

            for (var index = 0; index < AreaEffects.Length; index++)
            {
                var effect = AreaEffects[index];

                list.Add(effect);
            }

            list.Remove(ability);
            RemovePetAdvancement(ability);

            AreaEffects = list.ToArray();

            ColUtility.Free(list);
        }
Esempio n. 12
0
 public bool HasAreaEffect(AreaEffect ability)
 {
     return(AreaEffects != null && AreaEffects.Any(a => a == ability));
 }
Esempio n. 13
0
        public AbilityProfile(BaseCreature bc, GenericReader reader)
        {
            int version = reader.ReadInt();

            Creature = bc;

            switch (version)
            {
            case 0:
                DamageIndex = -1;
                break;

            case 1:
                DamageIndex = reader.ReadInt();
                break;
            }

            MagicalAbility = (MagicalAbility)reader.ReadInt();
            TokunoTame     = reader.ReadBool();

            RegenHits = reader.ReadInt();
            RegenStam = reader.ReadInt();
            RegenMana = reader.ReadInt();

            int count = reader.ReadInt();

            SpecialAbilities = new SpecialAbility[count];

            for (int i = 0; i < count; i++)
            {
                SpecialAbilities[i] = SpecialAbility.Abilities[reader.ReadInt()];
            }

            count       = reader.ReadInt();
            AreaEffects = new AreaEffect[count];

            for (int i = 0; i < count; i++)
            {
                AreaEffects[i] = AreaEffect.Effects[reader.ReadInt()];
            }

            count           = reader.ReadInt();
            WeaponAbilities = new WeaponAbility[count];

            for (int i = 0; i < count; i++)
            {
                WeaponAbilities[i] = WeaponAbility.Abilities[reader.ReadInt()];
            }

            count = reader.ReadInt();
            for (int i = 0; i < count; i++)
            {
                if (Advancements == null)
                {
                    Advancements = new List <object>();
                }

                switch (reader.ReadInt())
                {
                case 1: Advancements.Add((MagicalAbility)reader.ReadInt()); break;

                case 2: Advancements.Add(SpecialAbility.Abilities[reader.ReadInt()]); break;

                case 3: Advancements.Add(AreaEffect.Effects[reader.ReadInt()]); break;

                case 4: Advancements.Add(WeaponAbility.Abilities[reader.ReadInt()]); break;

                case 5: Advancements.Add((SkillName)reader.ReadInt()); break;
                }
            }
        }
Esempio n. 14
0
        public virtual void Serialize(GenericWriter writer)
        {
            writer.Write(1);

            writer.Write(DamageIndex);

            writer.Write((int)MagicalAbility);
            writer.Write(TokunoTame);

            writer.Write(RegenHits);
            writer.Write(RegenStam);
            writer.Write(RegenMana);

            writer.Write(SpecialAbilities != null ? SpecialAbilities.Length : 0);

            if (SpecialAbilities != null)
            {
                for (var index = 0; index < SpecialAbilities.Length; index++)
                {
                    SpecialAbility abil = SpecialAbilities[index];

                    writer.Write(Array.IndexOf(SpecialAbility.Abilities, abil));
                }
            }

            writer.Write(AreaEffects != null ? AreaEffects.Length : 0);

            if (AreaEffects != null)
            {
                for (var index = 0; index < AreaEffects.Length; index++)
                {
                    AreaEffect abil = AreaEffects[index];

                    writer.Write(Array.IndexOf(AreaEffect.Effects, abil));
                }
            }

            writer.Write(WeaponAbilities != null ? WeaponAbilities.Length : 0);

            if (WeaponAbilities != null)
            {
                for (var index = 0; index < WeaponAbilities.Length; index++)
                {
                    WeaponAbility abil = WeaponAbilities[index];

                    writer.Write(Array.IndexOf(WeaponAbility.Abilities, abil));
                }
            }

            writer.Write(Advancements != null ? Advancements.Count : 0);

            if (Advancements != null)
            {
                for (var index = 0; index < Advancements.Count; index++)
                {
                    object o = Advancements[index];

                    if (o is MagicalAbility ability)
                    {
                        writer.Write(1);
                        writer.Write((int)ability);
                    }
                    else if (o is SpecialAbility specialAbility)
                    {
                        writer.Write(2);
                        writer.Write(Array.IndexOf(SpecialAbility.Abilities, specialAbility));
                    }
                    else if (o is AreaEffect effect)
                    {
                        writer.Write(3);
                        writer.Write(Array.IndexOf(AreaEffect.Effects, effect));
                    }
                    else if (o is WeaponAbility weaponAbility)
                    {
                        writer.Write(4);
                        writer.Write(Array.IndexOf(WeaponAbility.Abilities, weaponAbility));
                    }
                    else if (o is SkillName skillName)
                    {
                        writer.Write(5);
                        writer.Write((int)skillName);
                    }
                    else
                    {
                        writer.Write(0);
                    }
                }
            }
        }