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); } } }
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); }
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); }
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; } } }
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; } } }