static void LoadZones([NotNull] Map mapFile, [NotNull] OpticraftDataStore dataStore) { if (mapFile == null) { throw new ArgumentNullException("mapFile"); } if (dataStore == null) { throw new ArgumentNullException("dataStore"); } if (dataStore.Zones.Length == 0) { return; } // TODO: investigate side effects PlayerInfo conversionPlayer = PlayerDB.AddSuperPlayer(ReservedPlayerID.Importer, "OpticraftConversion", RankManager.HighestRank); foreach (OpticraftZone optiZone in dataStore.Zones) { // Make zone Zone fZone = new Zone { Name = optiZone.Name, }; BoundingBox bBox = new BoundingBox(optiZone.X1, optiZone.Y1, optiZone.Z1, optiZone.X2, optiZone.X2, optiZone.Z2); fZone.Create(bBox, conversionPlayer); // Min rank Rank minRank = Rank.Parse(optiZone.MinimumRank); if (minRank != null) { fZone.Controller.MinRank = minRank; } foreach (string playerName in optiZone.Builders) { // These are all lower case names if (!Player.IsValidName(playerName)) { continue; } PlayerInfo pInfo = PlayerDB.FindExact(playerName); if (pInfo != null) { fZone.Controller.Include(pInfo); } } // Excluded names are not as of yet implemented in opticraft, but will be soon // So add compatibility for them when they arrive. if (optiZone.Excluded != null) { foreach (string playerName in optiZone.Excluded) { // These are all lower case names if (!Player.IsValidName(playerName)) { continue; } PlayerInfo pInfo = PlayerDB.FindExact(playerName); if (pInfo != null) { fZone.Controller.Exclude(pInfo); } } } mapFile.Zones.Add(fZone); } }