public void FindCreature(Mobile from, int creatureLevel) { if (from == null) { return; } PlayerMobile player = from as PlayerMobile; if (player == null) { return; } int waterLocationChecks = 20; int minSpawnRadius = 3; int maxSpawnRadius = 6; bool foundWaterSpot = false; bool spawnedCreatures = false; Point3D spawnLocation = Location; Point3D newLocation = new Point3D(); for (int a = 0; a < waterLocationChecks; a++) { int x = X; int xOffset = Utility.RandomMinMax(minSpawnRadius, maxSpawnRadius); if (Utility.RandomDouble() >= .5) { xOffset *= -1; } x += xOffset; int y = Y; int yOffset = Utility.RandomMinMax(minSpawnRadius, maxSpawnRadius); if (Utility.RandomDouble() >= .5) { yOffset *= -1; } y += yOffset; newLocation.X = x; newLocation.Y = y; newLocation.Z = -5; bool waterTile = BaseBoat.IsWaterTile(newLocation, Map); if (waterTile) { if (BaseBoat.FindBoatAt(newLocation, Map) != null) { continue; } SpellHelper.AdjustField(ref spawnLocation, Map, 12, false); foundWaterSpot = true; break; } } if (!foundWaterSpot) { return; } int count = 0; switch (creatureLevel) { case 1: count = Utility.RandomMinMax(1, 2); for (int a = 0; a < count; a++) { BaseCreature bc_Creature = new Puddle(); bc_Creature.m_WasFishedUp = true; bc_Creature.MoveToWorld(spawnLocation, from.Map); spawnedCreatures = true; } if (spawnedCreatures) { from.PublicOverheadMessage(MessageType.Regular, 0, false, "*something rises from the water*"); } break; case 2: count = Utility.RandomMinMax(1, 2); for (int a = 0; a < count; a++) { BaseCreature bc_Creature = new WaterElemental(); bc_Creature.m_WasFishedUp = true; bc_Creature.MoveToWorld(spawnLocation, from.Map); spawnedCreatures = true; } if (spawnedCreatures) { from.PublicOverheadMessage(MessageType.Regular, 0, false, "*something rises from the water*"); } break; case 3: count = Utility.RandomMinMax(1, 2); for (int a = 0; a < count; a++) { BaseCreature bc_Creature = new DeepSeaSerpent(); bc_Creature.m_WasFishedUp = true; bc_Creature.MoveToWorld(spawnLocation, from.Map); spawnedCreatures = true; } if (spawnedCreatures) { from.PublicOverheadMessage(MessageType.Regular, 0, false, "*something rises from the water*"); } break; case 4: count = Utility.RandomMinMax(1, 2); for (int a = 0; a < count; a++) { BaseCreature bc_Creature = new Kraken(); bc_Creature.m_WasFishedUp = true; bc_Creature.MoveToWorld(spawnLocation, from.Map); spawnedCreatures = true; } if (spawnedCreatures) { from.PublicOverheadMessage(MessageType.Regular, 0, false, "*something rises from the water*"); } break; } }
public void FindCreature(Mobile from, int creatureLevel) { if (from == null) { return; } PlayerMobile player = from as PlayerMobile; if (player == null) { return; } int waterLocationChecks = 20; int minSpawnRadius = 3; int maxSpawnRadius = 6; bool foundWaterSpot = false; bool spawnedCreatures = false; Point3D spawnLocation = Location; Point3D newLocation = new Point3D(); for (int a = 0; a < waterLocationChecks; a++) { int x = X; int xOffset = Utility.RandomMinMax(minSpawnRadius, maxSpawnRadius); if (Utility.RandomDouble() >= .5) { xOffset *= -1; } x += xOffset; int y = Y; int yOffset = Utility.RandomMinMax(minSpawnRadius, maxSpawnRadius); if (Utility.RandomDouble() >= .5) { yOffset *= -1; } y += yOffset; newLocation.X = x; newLocation.Y = y; newLocation.Z = -5; bool waterTile = BaseShip.IsWaterTile(newLocation, Map); if (waterTile) { if (BaseShip.FindShipAt(newLocation, Map) != null) { continue; } SpellHelper.AdjustField(ref spawnLocation, Map, 12, false); foundWaterSpot = true; break; } } if (!foundWaterSpot) { return; } int count = 0; switch (creatureLevel) { case 1: count = Utility.RandomMinMax(1, 2); for (int a = 0; a < count; a++) { BaseCreature bc_Creature = new Puddle(); bc_Creature.m_WasFishedUp = true; bc_Creature.MoveToWorld(spawnLocation, from.Map); spawnedCreatures = true; } if (spawnedCreatures) { from.PublicOverheadMessage(MessageType.Regular, 0, false, "*something was hiding in the wreckage!*"); } break; case 2: if (player.ShipOccupied != null) { if (!player.ShipOccupied.Deleted && player.ShipOccupied.m_SinkTimer == null) { count = Utility.RandomMinMax(2, 4); for (int a = 0; a < count; a++) { BaseCreature bc_Creature = new ColossusTermite(); bc_Creature.m_WasFishedUp = true; bc_Creature.MoveToWorld(player.ShipOccupied.GetRandomEmbarkLocation(false), from.Map); spawnedCreatures = true; } } } if (spawnedCreatures) { from.PublicOverheadMessage(MessageType.Regular, 0, false, "*the wreckage was full of termites!*"); } break; case 3: count = Utility.RandomMinMax(1, 2); for (int a = 0; a < count; a++) { BaseCreature bc_Creature = new DeepSeaSerpent(); bc_Creature.m_WasFishedUp = true; bc_Creature.MoveToWorld(spawnLocation, from.Map); spawnedCreatures = true; } if (spawnedCreatures) { from.PublicOverheadMessage(MessageType.Regular, 0, false, "*something was hiding in the wreckage!*"); } break; case 4: count = Utility.RandomMinMax(1, 2); for (int a = 0; a < count; a++) { BaseCreature bc_Creature = new Kraken(); bc_Creature.m_WasFishedUp = true; bc_Creature.MoveToWorld(spawnLocation, from.Map); spawnedCreatures = true; } if (spawnedCreatures) { from.PublicOverheadMessage(MessageType.Regular, 0, false, "*something was hiding in the wreckage!*"); } break; } }