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); } }
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; }
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; }
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!"); } }
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); } }
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; } }
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; }
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; } }
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); } }
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; }
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; }
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; } }