private static bool PlayerHasAllIngredients(GameSession session, ItemExchangeScrollMetadata exchange, int quantity) { // TODO: Check if rarity matches for (int i = 0; i < exchange.ItemCost.Count; i++) { ItemRequirementMetadata exchangeItem = exchange.ItemCost.ElementAt(i); Item item = session.Player.Inventory.GetById(exchangeItem.Id); if (item == null) { continue; } return(item.Amount >= exchangeItem.Amount * quantity); } return(false); }
private static bool PlayerHasAllIngredients(GameSession session, ItemExchangeScrollMetadata exchange, int quantity) { // TODO: Check if rarity matches List <Item> playerInventoryItems = new(session.Player.Inventory.Items.Values); for (int i = 0; i < exchange.ItemCost.Count; i++) { ItemRequirementMetadata exchangeItem = exchange.ItemCost.ElementAt(i); Item item = playerInventoryItems.FirstOrDefault(x => x.Id == exchangeItem.Id); if (item == null) { continue; } return(item.Amount >= exchangeItem.Amount * quantity); } return(false); }
private static bool RemoveRequiredItemsFromInventory(GameSession session, ItemExchangeScrollMetadata exchange, Item originItem, int quantity) { if (exchange.ItemCost.Count != 0) { for (int i = 0; i < exchange.ItemCost.Count; i++) { ItemRequirementMetadata exchangeItem = exchange.ItemCost.ElementAt(i); Item item = session.Player.Inventory.GetById(exchangeItem.Id); if (item == null) { continue; } session.Player.Inventory.ConsumeItem(session, item.Uid, exchangeItem.Amount * quantity); } } session.Player.Inventory.ConsumeItem(session, originItem.Uid, exchange.RecipeAmount * quantity); return(true); }
private static bool RemoveRequiredItemsFromInventory(GameSession session, ItemExchangeScrollMetadata exchange, Item originItem, int quantity) { List <Item> playerInventoryItems = new(session.Player.Inventory.Items.Values); if (exchange.ItemCost.Count != 0) { for (int i = 0; i < exchange.ItemCost.Count; i++) { ItemRequirementMetadata exchangeItem = exchange.ItemCost.ElementAt(i); Item item = playerInventoryItems.FirstOrDefault(x => x.Id == exchangeItem.Id); if (item == null) { continue; } session.Player.Inventory.ConsumeItem(session, item.Uid, exchangeItem.Amount * quantity); } } session.Player.Inventory.ConsumeItem(session, originItem.Uid, exchange.RecipeAmount * quantity); return(true); }
protected override List <ItemExchangeScrollMetadata> Parse() { List <ItemExchangeScrollMetadata> exchangeScroll = new List <ItemExchangeScrollMetadata>(); foreach (PackFileEntry entry in Resources.XmlFiles) { if (!entry.Name.StartsWith("table/itemexchangescrolltable")) { continue; } XmlDocument document = Resources.XmlMemFile.GetDocument(entry.FileHeader); foreach (XmlNode node in document.DocumentElement.ChildNodes) { ItemExchangeScrollMetadata metadata = new ItemExchangeScrollMetadata(); if (node.Name == "exchange") { metadata.ExchangeId = int.Parse(node.Attributes["id"].Value); metadata.Type = node.Attributes["type"].Value; } foreach (XmlNode childNode in node) { if (childNode.Name == "receipe") { metadata.RecipeId = int.Parse(childNode.Attributes["id"].Value); metadata.RecipeRarity = byte.Parse(childNode.Attributes["rank"].Value); metadata.RecipeAmount = short.Parse(childNode.Attributes["count"].Value); } else if (childNode.Name == "exchange") { metadata.RewardId = int.Parse(childNode.Attributes["id"].Value); metadata.RewardRarity = byte.Parse(childNode.Attributes["rank"].Value); metadata.RewardAmount = short.Parse(childNode.Attributes["count"].Value); } else if (childNode.Name == "require") { metadata.MesoCost = string.IsNullOrEmpty(childNode.Attributes["meso"].Value) ? 0 : int.Parse(childNode.Attributes["meso"].Value); foreach (XmlNode itemNode in childNode) { if (itemNode.Name != "item") { continue; } ItemRequirementMetadata item = new ItemRequirementMetadata(); string[] parameters = itemNode.Attributes["id"].Value.Split(","); parameters[0] = Regex.Match(parameters[0], @"\d+").Value; // remove text from item id item.Id = int.Parse(parameters[0]); item.Rarity = byte.Parse(parameters[1]); item.Amount = short.Parse(parameters[2]); metadata.ItemCost.Add(item); } } } exchangeScroll.Add(metadata); } } return(exchangeScroll); }