public void SpawnUndeadArmy(Mobile target) { Map map = this.Map; if (map == null) { return; } int knights = 0; foreach (Mobile m in this.GetMobilesInRange(10)) { if (m is UndeadKnight || m is WailingBanshee) { ++knights; } } if (knights < 1) { PlaySound(0x567); int newUndead = Utility.Random(13); for (int i = 0; i < newUndead; ++i) { BaseCreature skeleton; switch (Utility.Random(2)) { default: case 0: skeleton = new WailingBanshee(); break; case 1: skeleton = new UndeadKnight(); break; } skeleton.Team = this.Team; bool validLocation = false; Point3D loc = this.Location; for (int j = 0; !validLocation && j < 10; ++j) { int x = X + Utility.Random(3) - 1; int y = Y + Utility.Random(3) - 1; int z = map.GetAverageZ(x, y); if (validLocation = map.CanFit(x, y, this.Z, 16, false, false)) { loc = new Point3D(x, y, Z); } else if (validLocation = map.CanFit(x, y, z, 16, false, false)) { loc = new Point3D(x, y, z); } } skeleton.MoveToWorld(loc, map); skeleton.Combatant = target; } } }
public void ThrowSkull(BaseCreature creature) { if (creature == null) { return; } if (creature.Deleted || !creature.Alive) { return; } if (creature.Combatant != null) { Mobile combatant = creature.Combatant; Point3D location = creature.Location; Map map = creature.Map; if (combatant.Alive && creature.InLOS(combatant) && creature.GetDistanceToSqrt(combatant) <= 12) { Animate(4, 4, 1, true, false, 0); double stationaryDuration = 3; creature.CantWalk = true; creature.Frozen = true; creature.AIObject.NextMove = creature.AIObject.NextMove + TimeSpan.FromSeconds(stationaryDuration); creature.LastSwingTime = creature.LastSwingTime + TimeSpan.FromSeconds(stationaryDuration); creature.NextSpellTime = creature.NextSpellTime + TimeSpan.FromSeconds(stationaryDuration); creature.NextCombatHealActionAllowed = creature.NextCombatHealActionAllowed + TimeSpan.FromSeconds(stationaryDuration); creature.NextCombatSpecialActionAllowed = creature.NextCombatSpecialActionAllowed + TimeSpan.FromSeconds(stationaryDuration); creature.NextCombatEpicActionAllowed = creature.NextCombatEpicActionAllowed + TimeSpan.FromSeconds(stationaryDuration); IEntity startLocation = new Entity(Serial.Zero, new Point3D(creature.Location.X, creature.Location.Y, creature.Location.Z + 8), map); int attackSound = 0x5D3; int hitSound = 0x653; Effects.PlaySound(location, map, attackSound); creature.MovingEffect(combatant, 8707, 8, 1, false, false, 2612, 0); double distance = Utility.GetDistanceToSqrt(creature.Location, combatant.Location); double destinationDelay = (double)distance * .08; Timer.DelayCall(TimeSpan.FromSeconds(destinationDelay), delegate { if (creature == null) { return; } if (creature.Deleted || !creature.Alive) { return; } creature.CantWalk = false; creature.Frozen = false; m_NextThrownSkullAllowed = DateTime.UtcNow + NextThrownSkullDelay; if (!SpecialAbilities.IsDamagable(combatant)) { return; } Effects.PlaySound(combatant.Location, combatant.Map, hitSound); Effects.SendLocationParticles(EffectItem.Create(combatant.Location, map, TimeSpan.FromSeconds(0.25)), 0x3709, 10, 20, 2613, 0, 5029, 0); Effects.SendLocationParticles(EffectItem.Create(combatant.Location, map, TimeSpan.FromSeconds(0.25)), 0x3779, 10, 60, 2613, 0, 5029, 0); Effects.SendLocationParticles(EffectItem.Create(combatant.Location, map, TimeSpan.FromSeconds(0.5)), 0x3996, 10, 60, 2613, 0, 5029, 0); BaseCreature monsterToSpawn = null; double spawnPercent = (double)intervalCount / (double)totalIntervals; int creatureCount = 1 + (int)(Math.Ceiling(3 * spawnPercent)); for (int a = 0; a < creatureCount; a++) { switch (Utility.RandomMinMax(1, 10)) { case 1: monsterToSpawn = new Skeleton(); break; case 2: monsterToSpawn = new Skeleton(); break; case 3: monsterToSpawn = new Skeleton(); break; case 4: monsterToSpawn = new PatchworkSkeleton(); break; case 5: monsterToSpawn = new PatchworkSkeleton(); break; case 6: monsterToSpawn = new SkeletalKnight(); break; case 7: monsterToSpawn = new UndeadKnight(); break; case 8: monsterToSpawn = new RisenKnight(); break; case 9: monsterToSpawn = new RisenNoble(); break; case 10: monsterToSpawn = new SkeletalDrake(); break; } if (monsterToSpawn != null) { monsterToSpawn.BossMinion = true; monsterToSpawn.MoveToWorld(combatant.Location, combatant.Map); monsterToSpawn.BossMinion = true; m_Creatures.Add(monsterToSpawn); } } for (int a = 0; a < 5; a++) { Blood bones = new Blood(); bones.Name = "bones"; bones.ItemID = Utility.RandomList(6929, 6930, 6937, 6938, 6933, 6934, 6935, 6936, 6939, 6940, 6880, 6881, 6882, 6883); Point3D bonesLocation = new Point3D(combatant.Location.X + Utility.RandomList(-1, 1), combatant.Location.Y + Utility.RandomList(-1, 1), combatant.Location.Z); bones.MoveToWorld(bonesLocation, map); } int damage = creature.DamageMin; if (combatant is BaseCreature) { damage = (int)((double)damage * 1.5); } new Blood().MoveToWorld(combatant.Location, combatant.Map); AOS.Damage(combatant, creature, damage, 0, 100, 0, 0, 0); }); } } }
public void SpawnUndeadArmy(Mobile target) { Map map = this.Map; if (map == null) return; int knights = 0; foreach (Mobile m in this.GetMobilesInRange(10)) { if (m is UndeadKnight || m is WailingBanshee) ++knights; } if (knights < 1) { PlaySound(0x567); int newUndead = Utility.Random(13); for (int i = 0; i < newUndead; ++i) { BaseCreature skeleton; switch (Utility.Random(2)) { default: case 0: skeleton = new WailingBanshee(); break; case 1: skeleton = new UndeadKnight(); break; } skeleton.Team = this.Team; bool validLocation = false; Point3D loc = this.Location; for (int j = 0; !validLocation && j < 10; ++j) { int x = X + Utility.Random(3) - 1; int y = Y + Utility.Random(3) - 1; int z = map.GetAverageZ(x, y); if (validLocation = map.CanFit(x, y, this.Z, 16, false, false)) loc = new Point3D(x, y, Z); else if (validLocation = map.CanFit(x, y, z, 16, false, false)) loc = new Point3D(x, y, z); } skeleton.MoveToWorld(loc, map); skeleton.Combatant = target; } } }