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