Ejemplo n.º 1
0
        public virtual void FindAbility(BaseCreature target, BaseMetaPet pet)
        {
            if (MetaSkillType.GoldFind == MetaSkillType)
            {
                DoAbilityGoldFind(target, pet);
            }

            if (MetaSkillType.VenemousBlood == MetaSkillType && DateTime.UtcNow >= NextUse &&
                Utility.RandomDouble() <= ChanceToActivate)
            {
                DoAbilityNoxiousBlood(target, pet);
            }

            if (MetaSkillType.Quicksilver == MetaSkillType && DateTime.UtcNow >= NextUse &&
                Utility.RandomDouble() <= ChanceToActivate && pet.GetStatMod("QuickSilver") == null)
            {
                DoAbilityQuicksilver(target, pet);
            }

            if (MetaSkillType.Bleed == MetaSkillType && DateTime.UtcNow >= NextUse &&
                Utility.RandomDouble() <= ChanceToActivate)
            {
                DoAbilityBleed(target, pet);
            }

            if (MetaSkillType.Molten == MetaSkillType && DateTime.UtcNow >= NextUse &&
                Utility.RandomDouble() <= ChanceToActivate)
            {
                DoAbilityMoltenBreath(target, pet);
            }
        }
Ejemplo n.º 2
0
        public virtual void FindAbility(BaseCreature target, BaseMetaPet pet)
        {
            if (MetaSkillType.GoldFind == MetaSkillType)
            {
                DoAbilityGoldFind(target, pet);
            }

            if (MetaSkillType.VenemousBlood == MetaSkillType && DateTime.UtcNow >= NextUse &&
                Utility.RandomDouble() <= ChanceToActivate)
            {
                DoAbilityNoxiousBlood(target, pet);
            }

            if (MetaSkillType.Quicksilver == MetaSkillType && DateTime.UtcNow >= NextUse &&
                Utility.RandomDouble() <= ChanceToActivate && pet.GetStatMod("QuickSilver") == null)
            {
                DoAbilityQuicksilver(target, pet);
            }

            if (MetaSkillType.Bleed == MetaSkillType && DateTime.UtcNow >= NextUse &&
            Utility.RandomDouble() <= ChanceToActivate)
            {
                DoAbilityBleed(target, pet);
            }

            if (MetaSkillType.Molten == MetaSkillType && DateTime.UtcNow >= NextUse &&
                Utility.RandomDouble() <= ChanceToActivate)
            {
                DoAbilityMoltenBreath(target, pet);
            }
        }
Ejemplo n.º 3
0
        public void DoAbilityNoxiousBlood(BaseCreature target, BaseMetaPet pet)
        {
            int range   = Utility.RandomMinMax(3, 5);
            int zOffset = 10;

            Point3D src = pet.Location.Clone3D(0, 0, zOffset);

            Point3D[] points = src.GetAllPointsInRange(pet.Map, range, range);

            Effects.PlaySound(pet.Location, pet.Map, 0x19C);

            Timer.DelayCall(
                TimeSpan.FromMilliseconds(100),
                () =>
            {
                foreach (Point3D trg in points)
                {
                    int bloodID = Utility.RandomMinMax(4650, 4655);

                    new MovingEffectInfo(src, trg.Clone3D(0, 0, 2), pet.Map, bloodID, 1367).MovingImpact(
                        info =>
                    {
                        var blood = new Blood
                        {
                            ItemID = bloodID,
                            Hue    = 1368
                        };
                        blood.MoveToWorld(info.Target.Location, info.Map);

                        Effects.PlaySound(info.Target, info.Map, 0x028);
                    });
                }
                foreach (
                    Mobile mobile in
                    pet.Location.GetMobilesInRange(pet.Map, range)
                    .Where(m => m is BaseCreature && !m.IsControlled()).Take(4))
                {
                    var num = (int)Math.Floor((float)Level / 2);
                    if (num == 5)
                    {
                        num = 4;
                    }
                    mobile.ApplyPoison(pet, Poison.GetPoison(num));
                }
                Experience++;
                if (Experience >= NextLevelExperience)
                {
                    LevelUpNoxiousBlood(pet.ControlMaster);
                }
            });
            NextUse = DateTime.UtcNow + CoolDown;
        }
Ejemplo n.º 4
0
        public void DoAbilityBleed(BaseCreature target, BaseMetaPet pet)
        {
            var timer = new InternalBleedTimer(pet, target, Level);

            timer.Start();

            Experience++;
            if (Experience >= NextLevelExperience)
            {
                LevelUpBleed(pet.ControlMaster);
            }
            NextUse = DateTime.UtcNow + CoolDown;
        }
Ejemplo n.º 5
0
        public void GetMeta(Mobile User, Mobile target)
        {
            var metapet = target as BaseMetaPet;

            if (metapet != null && metapet.Controlled && metapet.ControlMaster == User)
            {
                Pet = metapet;
                Hue = Pet.Hue;
                User.SendMessage(54, "You have successfully bound this meta stone to your Meta-Pet.");
            }
            else
            {
                User.SendMessage(54, "This can only be used on a Meta-Pet that you own!");
            }
        }
Ejemplo n.º 6
0
        public void DoAbilityGoldFind(BaseCreature target, BaseMetaPet pet)
        {
            int g = Utility.Random(1, (int)Math.Ceiling(target.HitsMax * AbilityMultiplier));

            target.PackItem(new Gold(g));
            if (pet.Controlled)
            {
                pet.ControlMaster.SendMessage(54, "Your Meta-Pet has found " + g + " pieces of gold.");
            }
            Experience++;
            if (Experience >= NextLevelExperience)
            {
                LevelUpGoldFind(pet.ControlMaster);
            }
        }
Ejemplo n.º 7
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);

            int version = reader.GetVersion();


            switch (version)
            {
            case 1:
                Pet = reader.ReadMobile <BaseMetaPet>();
                goto case 0;

            case 0:
                break;
            }
        }
Ejemplo n.º 8
0
        public void DoAbilityQuicksilver(BaseCreature target, BaseMetaPet pet)
        {
            pet.PublicOverheadMessage(MessageType.Label, 34, true, "*Quicksilver*");
            pet.HueMod = 2955;
            Timer.DelayCall(TimeSpan.FromSeconds((int)Math.Ceiling(2 * AbilityMultiplier)), () =>
            {
                pet.HueMod = -1;
            });

            pet.AddStatMod(new StatMod(StatType.Dex, "QuickSilver", 200 * _level, TimeSpan.FromSeconds(2 * Level)));
            pet.Stam = pet.Dex;

            Experience++;

            if (Experience >= NextLevelExperience)
            {
                LevelUpQuicksilver(pet.ControlMaster);
            }
            NextUse = DateTime.UtcNow + CoolDown;
        }
Ejemplo n.º 9
0
        public void DoAbilityMoltenBreath(BaseCreature target, BaseMetaPet pet)
        {
            pet.AIObject.NextMove = DateTime.UtcNow + TimeSpan.FromSeconds(1.0);
            pet.PlaySound(pet.BaseSoundID);
            pet.Animate(12, 5, 1, true, false, 0);

            var queue = new EffectQueue();
            queue.Deferred = false;

            Point3D endpoint = target.Location;
            Point3D[] line = pet.Location.GetLine3D(endpoint, pet.Map);

            if (target.InRange(pet.Location, 10))
            {
                int n = 0;
                foreach (Point3D p in line)
                {
                    n += 20;
                    Point3D p1 = p;
                    queue.Add(
                        new EffectInfo(
                            p,
                            pet.Map,
                            14089,
                            0,
                            10,
                            30,
                            EffectRender.Normal,
                            TimeSpan.FromMilliseconds(n),
                            () =>
                            {
                                foreach (Mobile player in AcquireTargets(pet, p1, 0))
                                {
                                    player.Damage(Level * 5, pet);
                                }
                            }));
                }

                queue.Callback = () =>
                {
                    BaseExplodeEffect e = ExplodeFX.Fire.CreateInstance(
                        endpoint, pet.Map, 2, 0, TimeSpan.FromMilliseconds(1000 - ((10) * 100)), null, () =>
                        {
                            foreach (Mobile mobile in AcquireTargets(pet, endpoint, 2))
                            {
                                mobile.Damage(Level * 3, pet);
                            }
                        });
                    e.Send();
                };


                queue.Process();
                Experience++;

                if (Experience >= NextLevelExperience)
                {
                    LevelUpMoltenBreath(pet.ControlMaster);
                }

                NextUse = DateTime.UtcNow + CoolDown;
            }
        }
Ejemplo n.º 10
0
 public void DoAbilityGoldFind(BaseCreature target, BaseMetaPet pet)
 {
     int g = Utility.Random(1, (int) Math.Ceiling(target.HitsMax * AbilityMultiplier));
     target.PackItem(new Gold(g));
     if (pet.Controlled)
     {
         pet.ControlMaster.SendMessage(54, "Your Meta-Pet has found " + g + " pieces of gold.");
     }
     Experience ++;
     if (Experience >= NextLevelExperience)
     {
         LevelUpGoldFind(pet.ControlMaster);
     }
 }
Ejemplo n.º 11
0
        public void DoAbilityNoxiousBlood(BaseCreature target, BaseMetaPet pet)
        {
            int range = Utility.RandomMinMax(3, 5);
            int zOffset = 10;

            Point3D src = pet.Location.Clone3D(0, 0, zOffset);
            Point3D[] points = src.GetAllPointsInRange(pet.Map, range, range);

            Effects.PlaySound(pet.Location, pet.Map, 0x19C);

            Timer.DelayCall(
                TimeSpan.FromMilliseconds(100),
                () =>
                {
                    foreach (Point3D trg in points)
                    {
                        int bloodID = Utility.RandomMinMax(4650, 4655);

                        new MovingEffectInfo(src, trg.Clone3D(0, 0, 2), pet.Map, bloodID, 1367).MovingImpact(
                            info =>
                            {
                                var blood = new Blood
                                {
                                    ItemID = bloodID,
                                    Hue = 1368
                                };
                                blood.MoveToWorld(info.Target.Location, info.Map);

                                Effects.PlaySound(info.Target, info.Map, 0x028);
                            });
                    }
                    foreach (
                        Mobile mobile in
                            pet.Location.GetMobilesInRange(pet.Map, range)
                                .Where(m => m is BaseCreature && !m.IsControlled()).Take(4))
                    {
                        var num = (int) Math.Floor((float) Level / 2);
                        if (num == 5)
                            num = 4;
                        mobile.ApplyPoison(pet, Poison.GetPoison(num));
                    }
                    Experience ++;
                    if (Experience >= NextLevelExperience)
                    {
                        LevelUpNoxiousBlood(pet.ControlMaster);
                    }
                });
            NextUse = DateTime.UtcNow + CoolDown;
        }
Ejemplo n.º 12
0
        public void DoAbilityQuicksilver(BaseCreature target, BaseMetaPet pet)
        {
            pet.PublicOverheadMessage(MessageType.Label, 34, true, "*Quicksilver*");
            pet.HueMod = 2955;
            Timer.DelayCall(TimeSpan.FromSeconds((int)Math.Ceiling(2 * AbilityMultiplier)), () =>
            {
                pet.HueMod = -1;
            });

            pet.AddStatMod(new StatMod(StatType.Dex, "QuickSilver", 200 * _level, TimeSpan.FromSeconds(2 * Level)));
            pet.Stam = pet.Dex;

            Experience++;

            if (Experience >= NextLevelExperience)
            {
                LevelUpQuicksilver(pet.ControlMaster);
            }
            NextUse = DateTime.UtcNow + CoolDown;
        }
Ejemplo n.º 13
0
        public void DoAbilityBleed(BaseCreature target, BaseMetaPet pet)
        {
            var timer = new InternalBleedTimer(pet, target, Level);
            timer.Start();

            Experience ++;
            if (Experience >= NextLevelExperience)
            {
                LevelUpBleed(pet.ControlMaster);
            }
            NextUse = DateTime.UtcNow + CoolDown;
        }
Ejemplo n.º 14
0
        public void DoAbilityMoltenBreath(BaseCreature target, BaseMetaPet pet)
        {
            pet.PlaySound(pet.BaseSoundID);
            pet.Animate(12, 5, 1, true, false, 0);

            var queue = new EffectQueue();

            queue.Deferred = false;

            Point3D endpoint = target.Location;

            Point3D[] line = pet.Location.GetLine3D(endpoint, pet.Map);

            if (target.InRange(pet.Location, 10))
            {
                int n = 0;
                foreach (Point3D p in line)
                {
                    n += 20;
                    Point3D p1 = p;
                    queue.Add(
                        new EffectInfo(
                            p,
                            pet.Map,
                            14089,
                            0,
                            10,
                            30,
                            EffectRender.Normal,
                            TimeSpan.FromMilliseconds(n),
                            () =>
                    {
                        foreach (Mobile player in AcquireTargets(pet, p1, 0))
                        {
                            player.Damage(Level * 9, pet);
                        }
                    }));
                }

                queue.Callback = () =>
                {
                    BaseExplodeEffect e = ExplodeFX.Fire.CreateInstance(
                        endpoint, pet.Map, 2, 0, TimeSpan.FromMilliseconds(1000 - ((10) * 100)), null, () =>
                    {
                        foreach (Mobile mobile in AcquireTargets(pet, endpoint, 2))
                        {
                            mobile.Damage(Level * 8, pet);
                        }
                    });
                    e.Send();
                };


                queue.Process();
                Experience++;

                if (Experience >= NextLevelExperience)
                {
                    LevelUpMoltenBreath(pet.ControlMaster);
                }

                NextUse = DateTime.UtcNow + CoolDown;
            }
        }