SortRanksByLegacyNumericRank() static private method

static private SortRanksByLegacyNumericRank ( ) : void
return void
Example #1
0
        static void LoadRankList(XElement el, int version, bool fromFile)
        {
            if (el == null)
            {
                throw new ArgumentNullException("el");
            }

            XElement legacyRankMappingTag = el.Element("LegacyRankMapping");

            if (legacyRankMappingTag != null)
            {
                foreach (XElement rankPair in legacyRankMappingTag.Elements("LegacyRankPair"))
                {
                    XAttribute fromRankID = rankPair.Attribute("from");
                    XAttribute toRankID   = rankPair.Attribute("to");
                    if (fromRankID == null || String.IsNullOrEmpty(fromRankID.Value) ||
                        toRankID == null || String.IsNullOrEmpty(toRankID.Value))
                    {
                        Logger.Log("Config.Load: Could not parse a LegacyRankMapping entry: {0}", LogType.Error, rankPair.ToString());
                    }
                    else
                    {
                        RankManager.LegacyRankMapping.Add(fromRankID.Value, toRankID.Value);
                    }
                }
            }

            XElement rankList = el.Element("Ranks") ?? el.Element("Classes");

            if (rankList != null)
            {
                XElement[] rankDefinitionList = rankList.Elements("Rank").ToArray();
                if (rankDefinitionList.Length == 0)
                {
                    rankDefinitionList = rankList.Elements("PlayerClass").ToArray();   // LEGACY
                }
                foreach (XElement rankDefinition in rankDefinitionList)
                {
                    try {
                        RankManager.AddRank(new Rank(rankDefinition));
                    } catch (RankDefinitionException ex) {
                        Logger.Log(ex.Message, LogType.Error);
                    }
                }

                if (RankManager.RanksByName.Count == 0)
                {
                    Logger.Log("Config.Load: No ranks were defined, or none were defined correctly. Using default ranks (guest, regular, op, and owner).", LogType.Warning);
                    rankList.Remove();
                    el.Add(DefineDefaultRanks());
                }
                else if (version < ConfigVersion)      // start LEGACY code

                {
                    if (version < 103)    // speedhack permission
                    {
                        if (!RankManager.RanksByID.Values.Any(rank => rank.Can(Permission.UseSpeedHack)))
                        {
                            foreach (Rank rank in RankManager.RanksByID.Values)
                            {
                                rank.Permissions[(int)Permission.UseSpeedHack] = true;
                            }
                            Logger.Log("Config.Load: All ranks were granted UseSpeedHack permission (default). " +
                                       "Use ConfigTool to update config. If you are editing config.xml manually, " +
                                       "set version=\"{0}\" to prevent permissions from resetting in the future.", LogType.Warning, ConfigVersion);
                        }
                    }

                    if (version < 111)
                    {
                        RankManager.SortRanksByLegacyNumericRank();
                    }
                } // end LEGACY code
            }
            else
            {
                if (fromFile)
                {
                    Logger.Log("Config.Load: using default player ranks.", LogType.Warning);
                }
                el.Add(DefineDefaultRanks());
            }

            // parse rank-limit permissions
            RankManager.ParsePermissionLimits();
        }