예제 #1
0
        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);
            }
        }