コード例 #1
0
ファイル: ShopManager.cs プロジェクト: aggpys/Atreia-World
        private static GameShop ReadPriceList(string path)
        {
            XDocument xdoc = null;

            try
            {
                xdoc = XDocument.Load(path);
            }
            catch (XmlException) { }

            if (xdoc == null || xdoc.Root == null) return null;

            var xNameCategories = XName.Get("categories", DefaultNamespace);
            var xNameCategory = XName.Get("category", DefaultNamespace);
            var xNameItem = XName.Get("item", DefaultNamespace);

            var result = new GameShop();
            var categoriesRoot = xdoc.Root.Element(xNameCategories);

            if (categoriesRoot == null)
                return null;

            foreach (var xcat in categoriesRoot.Elements(xNameCategory))
            {
                var catAttr = xcat.Attribute("name");
                if (catAttr == null || string.IsNullOrEmpty(catAttr.Value)) return null;

                var category = new ShopItemCollection(catAttr.Value.Trim());

                foreach (var xitem in xcat.Elements(xNameItem))
                {
                    var idAttr = xitem.Attribute("id");
                    var titleAttr = xitem.Attribute("title");
                    var qualityAttr = xitem.Attribute("quality");
                    var raceAttr = xitem.Attribute("race");
                    var iconAttr = xitem.Attribute("icon");
                    var countAttr = xitem.Attribute("count");
                    var priceAttr = xitem.Attribute("price");

                    if (idAttr == null || string.IsNullOrEmpty(idAttr.Value)) continue;
                    if (titleAttr == null || string.IsNullOrEmpty(titleAttr.Value)) continue;
                    if (priceAttr == null || string.IsNullOrEmpty(priceAttr.Value)) continue;

                    uint id;
                    uint price;
                    uint count;

                    var idTest = uint.TryParse(idAttr.Value, out id);
                    var priceTest = uint.TryParse(priceAttr.Value, out price);

                    if (!idTest || !priceTest) continue;

                    if (countAttr != null)
                    {
                        var countTest = uint.TryParse(countAttr.Value, out count);

                        if (!countTest)
                            count = 1;
                    }
                    else
                        count = 1;

                    var quality = ItemQuality.Common;

                    if (qualityAttr != null &&
                        !string.IsNullOrEmpty(qualityAttr.Value))
                    {
                        ItemQuality temp;

                        var qualityTest = Enum.TryParse(qualityAttr.Value, true, out temp);

                        if (qualityTest)
                            quality = temp;
                    }

                    var race = ItemRaceRestriction.Universal;

                    if (raceAttr != null &&
                        !string.IsNullOrEmpty(raceAttr.Value))
                    {
                        ItemRaceRestriction temp;

                        var raceTest = Enum.TryParse(raceAttr.Value, true, out temp);

                        if (raceTest)
                            race = temp;
                    }

                    string icon = null;

                    if (iconAttr != null &&
                        !string.IsNullOrEmpty(iconAttr.Value))
                        icon = iconAttr.Value.Trim();

                    category.Add(new ShopItem(id, titleAttr.Value.Trim(), quality, race, icon, count, price));
                }

                if (category.Count > 0)
                    result.Add(category);
            }

            return result.Count == 0 ? null : result;
        }
コード例 #2
0
        private static GameShop ReadPriceList(string path)
        {
            XDocument xdoc = null;

            try
            {
                xdoc = XDocument.Load(path);
            }
            catch (XmlException) { }

            if (xdoc == null || xdoc.Root == null)
            {
                return(null);
            }

            var xNameCategories = XName.Get("categories", DefaultNamespace);
            var xNameCategory   = XName.Get("category", DefaultNamespace);
            var xNameItem       = XName.Get("item", DefaultNamespace);

            var result         = new GameShop();
            var categoriesRoot = xdoc.Root.Element(xNameCategories);

            if (categoriesRoot == null)
            {
                return(null);
            }

            foreach (var xcat in categoriesRoot.Elements(xNameCategory))
            {
                var catAttr = xcat.Attribute("name");
                if (catAttr == null || string.IsNullOrEmpty(catAttr.Value))
                {
                    return(null);
                }

                var category = new ShopItemCollection(catAttr.Value.Trim());

                foreach (var xitem in xcat.Elements(xNameItem))
                {
                    var idAttr      = xitem.Attribute("id");
                    var titleAttr   = xitem.Attribute("title");
                    var qualityAttr = xitem.Attribute("quality");
                    var raceAttr    = xitem.Attribute("race");
                    var iconAttr    = xitem.Attribute("icon");
                    var countAttr   = xitem.Attribute("count");
                    var priceAttr   = xitem.Attribute("price");

                    if (idAttr == null || string.IsNullOrEmpty(idAttr.Value))
                    {
                        continue;
                    }
                    if (titleAttr == null || string.IsNullOrEmpty(titleAttr.Value))
                    {
                        continue;
                    }
                    if (priceAttr == null || string.IsNullOrEmpty(priceAttr.Value))
                    {
                        continue;
                    }

                    uint id;
                    uint price;
                    uint count;

                    var idTest    = uint.TryParse(idAttr.Value, out id);
                    var priceTest = uint.TryParse(priceAttr.Value, out price);

                    if (!idTest || !priceTest)
                    {
                        continue;
                    }

                    if (countAttr != null)
                    {
                        var countTest = uint.TryParse(countAttr.Value, out count);

                        if (!countTest)
                        {
                            count = 1;
                        }
                    }
                    else
                    {
                        count = 1;
                    }

                    var quality = ItemQuality.Common;

                    if (qualityAttr != null &&
                        !string.IsNullOrEmpty(qualityAttr.Value))
                    {
                        ItemQuality temp;

                        var qualityTest = Enum.TryParse(qualityAttr.Value, true, out temp);

                        if (qualityTest)
                        {
                            quality = temp;
                        }
                    }

                    var race = ItemRaceRestriction.Universal;

                    if (raceAttr != null &&
                        !string.IsNullOrEmpty(raceAttr.Value))
                    {
                        ItemRaceRestriction temp;

                        var raceTest = Enum.TryParse(raceAttr.Value, true, out temp);

                        if (raceTest)
                        {
                            race = temp;
                        }
                    }

                    string icon = null;

                    if (iconAttr != null &&
                        !string.IsNullOrEmpty(iconAttr.Value))
                    {
                        icon = iconAttr.Value.Trim();
                    }

                    category.Add(new ShopItem(id, titleAttr.Value.Trim(), quality, race, icon, count, price));
                }

                if (category.Count > 0)
                {
                    result.Add(category);
                }
            }

            return(result.Count == 0 ? null : result);
        }