Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
    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);
        }