コード例 #1
0
ファイル: RankManager.cs プロジェクト: TheDireMaster/fCraft
        /// <summary> Adds a new rank to the list. Checks for duplicates. </summary>
        public static void AddRank([NotNull] Rank rank)
        {
            if (rank == null)
            {
                throw new ArgumentNullException("rank");
            }
            if (PlayerDB.IsLoaded)
            {
                throw new InvalidOperationException("You may not add ranks after PlayerDB has already been loaded.");
            }
            // check for duplicate rank names
            if (RanksByName.ContainsKey(rank.Name.ToLower()))
            {
                throw new RankDefinitionException(rank.Name,
                                                  "Duplicate definition for rank \"{0}\" (by Name) was ignored.",
                                                  rank.Name);
            }

            if (RanksById.ContainsKey(rank.Id))
            {
                throw new RankDefinitionException(rank.Name,
                                                  "Duplicate definition for rank \"{0}\" (by ID) was ignored.",
                                                  rank.Name);
            }

            Ranks.Add(rank);
            RanksByName[rank.Name.ToLower()] = rank;
            RanksByFullName[rank.FullName]   = rank;
            RanksById[rank.Id] = rank;
            RebuildIndex();
        }
コード例 #2
0
ファイル: RankManager.cs プロジェクト: TheDireMaster/fCraft
        /// <summary> Removes the specified rank from the list of available ranks </summary>
        /// <param name="deletedRank"> Rank to be deleted. </param>
        /// <param name="replacementRank"> Rank that will replace the deleted rank. </param>
        /// <returns> Whether or not the rank was successfully deleted/replaced. </returns>
        /// <exception cref="ArgumentNullException"> deletedRank or replacementRank is null. </exception>
        /// <exception cref="InvalidOperationException"> PlayerDB is already loaded. </exception>
        public static bool DeleteRank([NotNull] Rank deletedRank, [NotNull] Rank replacementRank)
        {
            if (deletedRank == null)
            {
                throw new ArgumentNullException("deletedRank");
            }
            if (replacementRank == null)
            {
                throw new ArgumentNullException("replacementRank");
            }
            if (PlayerDB.IsLoaded)
            {
                throw new InvalidOperationException("You may not modify ranks after PlayerDB has been loaded.");
            }
            bool rankLimitsChanged = false;

            Ranks.Remove(deletedRank);
            RanksByName.Remove(deletedRank.Name.ToLower());
            RanksById.Remove(deletedRank.Id);
            RanksByFullName.Remove(deletedRank.FullName);
            LegacyRankMapping.Add(deletedRank.Id, replacementRank.Id);
            foreach (Rank rank in Ranks)
            {
                for (int i = 0; i < rank.PermissionLimits.Length; i++)
                {
                    if (rank.GetLimit((Permission)i) == deletedRank)
                    {
                        rank.ResetLimit((Permission)i);
                        rankLimitsChanged = true;
                    }
                }
            }
            RebuildIndex();
            return(rankLimitsChanged);
        }