public void SpawnBob(Mobile caster) { Mobile target = caster; if (Map == null || Map == Map.Internal) return; int helpers = 0; ArrayList mobs = new ArrayList(); IPooledEnumerable eable = this.GetMobilesInRange(10); foreach (Mobile m in eable) { if (m is Bob) ++helpers; if (m is PlayerMobile && m.Alive == true && m.Hidden == false && m.AccessLevel <= AccessLevel.Player) mobs.Add(m); } eable.Free(); if (helpers < 5) { BaseCreature helper = new Bob(); helper.Team = this.Team; helper.Map = Map; bool validLocation = false; // pick a random player to focus on // if there are no players, we will stay with the caster if (mobs.Count > 0) target = mobs[Utility.Random(mobs.Count)] as Mobile; for (int j = 0; !validLocation && j < 10; ++j) { int x = target.X + Utility.Random(3) - 1; int y = target.Y + Utility.Random(3) - 1; int z = Map.GetAverageZ(x, y); if (validLocation = Map.CanFit(x, y, this.Z, 16, CanFitFlags.requireSurface)) helper.Location = new Point3D(x, y, Z); else if (validLocation = Map.CanFit(x, y, z, 16, CanFitFlags.requireSurface)) helper.Location = new Point3D(x, y, z); } if (!validLocation) helper.Location = target.Location; helper.Combatant = target; } }