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 void HandleUse(GameSession session, PacketReader packet)
    {
        long itemUid  = packet.ReadLong();
        long unk      = packet.ReadLong();
        int  quantity = packet.ReadInt();

        if (!session.Player.Inventory.Items.ContainsKey(itemUid))
        {
            return;
        }

        Item item = session.Player.Inventory.Items[itemUid];

        ItemExchangeScrollMetadata exchange = ItemExchangeScrollMetadataStorage.GetMetadata(item.Function.Id);

        if (!session.Player.Wallet.Meso.Modify(-exchange.MesoCost * quantity))
        {
            session.Send(ItemExchangePacket.Notice((short)ExchangeNotice.InsufficientMeso));
            return;
        }

        if (exchange.ItemCost.Count != 0 && !PlayerHasAllIngredients(session, exchange, quantity))
        {
            session.Send(ItemExchangePacket.Notice((short)ExchangeNotice.InsufficientItems));
            return;
        }

        if (!RemoveRequiredItemsFromInventory(session, exchange, item, quantity))
        {
            return;
        }

        Item exchangeRewardItem = new(exchange.RewardId)
        {
            Rarity = exchange.RewardRarity,
            Amount = exchange.RewardAmount * quantity
        };

        session.Player.Inventory.AddItem(session, exchangeRewardItem, true);
        session.Send(ItemExchangePacket.Notice((short)ExchangeNotice.Success));
    }
Ejemplo n.º 5
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);
    }