public void UpdateRewards(GameSession session) { Rewards = new(); foreach ((long uid, int amount) in Slots.Where(x => x != null)) { Item item = session.Player.Inventory.Items.FirstOrDefault(x => x.Value.Uid == uid).Value; if (!ItemMetadataStorage.IsValid(item.Id)) { continue; } List <ItemBreakReward> breakRewards = ItemMetadataStorage.GetBreakRewards(item.Id); if (breakRewards == null) { continue; } foreach (ItemBreakReward ingredient in breakRewards) { if (ingredient.Id == 0) { continue; } if (Rewards.ContainsKey(ingredient.Id)) { Rewards[ingredient.Id] += ingredient.Count; } else { Rewards[ingredient.Id] = ingredient.Count; } Rewards[ingredient.Id] *= amount; } // TODO: Add Onyx Crystal (40100023) and Chaos Onyx Crystal (40100024) to rewards if InventoryTab = Gear, based on level and rarity // TODO: Add rewards for outfits } session.Send(ItemBreakPacket.Results(Rewards)); }
private static void UpdateRewards(GameSession session) { Player player = session.Player; player.Rewards = new Dictionary <int, int>(); foreach (Tuple <long, int> slot in player.DismantleSlots.Where(x => x != null)) { Item item = player.Inventory.Items.FirstOrDefault(x => x.Value.Uid == slot.Item1).Value; if (!ItemMetadataStorage.IsValid(item.Id)) { continue; } List <ItemBreakReward> breakRewards = ItemMetadataStorage.GetBreakRewards(item.Id); if (breakRewards == null) { continue; } foreach (ItemBreakReward ingredient in breakRewards) { if (ingredient.Id != 0) { if (player.Rewards.ContainsKey(ingredient.Id)) { player.Rewards[ingredient.Id] += ingredient.Count; } else { player.Rewards[ingredient.Id] = ingredient.Count; } player.Rewards[ingredient.Id] *= slot.Item2; } } // TODO: Add Onyx Crystal (40100023) and Chaos Onyx Crystal (40100024) to rewards if InventoryTab = Gear, based on level and rarity // TODO: Add rewards for outfits } session.Send(ItemBreakPacket.Results(player.Rewards)); }