예제 #1
0
        private void ParseGoods(IList<string> lines)
        {
            for (int i = 0; i < lines.Count; i++)
            {
                if (!lines[i].ToUpper().StartsWith(TradeKey)) continue;

                while (++i < lines.Count)
                {
                    if (lines[i].StartsWith("[")) return;
                    if (String.IsNullOrEmpty(lines[i])) continue;

                    var data = lines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    ItemInfo info = Envir.GetItemInfo(data[0]);
                    if (info == null)
                        continue;

                    UserItem goods = Envir.CreateShopItem(info, (uint)i);

                    if (goods == null || Goods.Contains(goods))
                    {
                        MessageQueue.Enqueue(string.Format("Could not find Item: {0}, File: {1}", lines[i], FileName));
                        continue;
                    }

                    ushort count = 1;
                    if (data.Length == 2)
                        ushort.TryParse(data[1], out count);

                    goods.Count = count;

                    Goods.Add(goods);
                }
            }
        }
예제 #2
0
        public RecipeInfo(string name)
        {
            ItemInfo itemInfo = Envir.GetItemInfo(name);

            if (itemInfo == null)
            {
                MessageQueue.Enqueue(string.Format("Could not find Item: {0}", name));
                return;
            }

            Item = Envir.CreateShopItem(itemInfo);

            LoadIngredients(name);
        }
예제 #3
0
        public RecipeInfo(string name)
        {
            ItemInfo itemInfo = Envir.GetItemInfo(name);

            if (itemInfo == null)
            {
                MessageQueue.Enqueue(string.Format("找不到物品合成配方: {0}", name));
                return;
            }

            Item = Envir.CreateShopItem(itemInfo, ++Envir.NextRecipeID);

            LoadIngredients(name);
        }
예제 #4
0
        private void LoadIngredients(string recipe)
        {
            List <string> lines = File.ReadAllLines(Path.Combine(Settings.RecipePath, recipe + ".txt")).ToList();

            Tools       = new List <UserItem>();
            Ingredients = new List <UserItem>();

            var mode = "ingredients";

            for (int i = 0; i < lines.Count; i++)
            {
                if (String.IsNullOrEmpty(lines[i]))
                {
                    continue;
                }

                if (lines[i].StartsWith("["))
                {
                    mode = lines[i].Substring(1, lines[i].Length - 2).ToLower();
                    continue;
                }

                switch (mode)
                {
                case "recipe":
                {
                    var data = lines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    if (data.Length < 2)
                    {
                        continue;
                    }

                    switch (data[0].ToLower())
                    {
                    case "amount":
                        Item.Count = uint.Parse(data[1]);
                        break;

                    case "chance":
                        Chance = byte.Parse(data[1]);

                        if (Chance > 100)
                        {
                            Chance = 100;
                        }
                        break;

                    case "gold":
                        Gold = uint.Parse(data[1]);
                        break;

                    default:
                        break;
                    }
                }
                break;

                case "tools":
                {
                    var data = lines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    ItemInfo info = Envir.GetItemInfo(data[0]);

                    if (info == null)
                    {
                        MessageQueue.Enqueue(string.Format("Could not find Tool: {0}, Recipe: {1}", lines[i], recipe));
                        continue;
                    }

                    UserItem tool = Envir.CreateShopItem(info);

                    Tools.Add(tool);
                }
                break;

                case "ingredients":
                {
                    var data = lines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    ItemInfo info = Envir.GetItemInfo(data[0]);

                    if (info == null)
                    {
                        MessageQueue.Enqueue(string.Format("Could not find Ingredient: {0}, Recipe: {1}", lines[i], recipe));
                        continue;
                    }

                    UserItem ingredient = Envir.CreateShopItem(info);

                    uint count = 1;
                    if (data.Length >= 2)
                    {
                        uint.TryParse(data[1], out count);
                    }

                    if (data.Length >= 3)
                    {
                        ushort.TryParse(data[2], out ingredient.CurrentDura);
                    }

                    ingredient.Count = count > info.StackSize ? info.StackSize : count;

                    Ingredients.Add(ingredient);
                }
                break;

                case "criteria":
                {
                    var data = lines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    if (data.Length < 2)
                    {
                        continue;
                    }

                    try
                    {
                        switch (data[0].ToLower())
                        {
                        case "level":
                            RequiredLevel = ushort.Parse(data[1]);
                            break;

                        case "class":
                            if (Enum.TryParse <MirClass>(data[1], true, out MirClass cls))
                            {
                                RequiredClass.Add(cls);
                            }
                            else
                            {
                                RequiredClass.Add((MirClass)byte.Parse(data[1]));
                            }
                            break;

                        case "gender":
                            if (Enum.TryParse <MirGender>(data[1], true, out MirGender gender))
                            {
                                RequiredGender = gender;
                            }
                            else
                            {
                                RequiredGender = (MirGender)byte.Parse(data[1]);
                            }
                            break;

                        case "flag":
                            RequiredFlag.Add(int.Parse(data[1]));
                            break;

                        case "quest":
                            RequiredQuest.Add(int.Parse(data[1]));
                            break;
                        }
                    }
                    catch
                    {
                        MessageQueue.Enqueue(string.Format("Could not parse option: {0}, Value: {1}", data[0], data[1]));
                        continue;
                    }
                }
                break;
                }
            }
        }
예제 #5
0
        private void LoadIngredients(string recipe)
        {
            List <string> lines = File.ReadAllLines(Path.Combine(Settings.RecipePath, recipe + ".txt")).ToList();

            Ingredients = new List <UserItem>();

            var mode = "ingredients";

            for (int i = 0; i < lines.Count; i++)
            {
                if (String.IsNullOrEmpty(lines[i]))
                {
                    continue;
                }

                if (lines[i].StartsWith("["))
                {
                    mode = lines[i].Substring(1, lines[i].Length - 2).ToLower();
                    continue;
                }

                switch (mode)
                {
                case "ingredients":
                {
                    var data = lines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    ItemInfo info = Envir.GetItemInfo(data[0]);

                    if (info == null)
                    {
                        MessageQueue.Enqueue(string.Format("Could not find Item: {0}, Recipe: {1}", lines[i], recipe));
                        continue;
                    }

                    uint count = 1;
                    if (data.Length == 2)
                    {
                        uint.TryParse(data[1], out count);
                    }

                    UserItem ingredient = Envir.CreateShopItem(info);

                    ingredient.Count = count > info.StackSize ? info.StackSize : count;

                    Ingredients.Add(ingredient);
                }
                break;

                case "criteria":
                {
                    var data = lines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                    if (data.Length < 2)
                    {
                        continue;
                    }

                    try
                    {
                        switch (data[0].ToLower())
                        {
                        case "level":
                            RequiredLevel = ushort.Parse(data[1]);
                            break;

                        case "class":
                            RequiredClass.Add((MirClass)byte.Parse(data[1]));
                            break;

                        case "gender":
                            RequiredGender = (MirGender)byte.Parse(data[1]);
                            break;

                        case "flag":
                            RequiredFlag.Add(int.Parse(data[1]));
                            break;

                        case "quest":
                            RequiredQuest.Add(int.Parse(data[1]));
                            break;
                        }
                    }
                    catch
                    {
                        MessageQueue.Enqueue(string.Format("Could not parse option: {0}, Value: {1}", data[0], data[1]));
                        continue;
                    }
                }
                break;
                }
            }
        }