protected override async Task Handle(CellonItemEvent e, CancellationToken cancellation) { if (!(e.Sender is IPlayerEntity player)) { return; } await player.GoldLess(e.GoldAmount); //Session.Character.Inventory.RemoveItemAmount(cellon.ItemVNum); // GENERATE OPTION EquipmentOptionDto option = CellonGeneratorHelper.Instance.GenerateOption(e.Cellon.Item.EffectValue); // FAIL /* * if (option == null || e.Jewelry.EquipmentOptions.Any(s => s.Type == option.Type)) * { * player.SendTopscreenMessage("CELLONING_FAILED", MsgPacketType.White); * player.GenerateShopEndPacket(ShopEndPacketType.CloseSubWindow); * return; * } * * // SUCCESS * e.Jewelry.EquipmentOptions.Add(option); */ await player.SendTopscreenMessage("CELLONING_SUCCESS", MsgPacketType.White); await player.SendPacketAsync(player.GenerateShopEndPacket(ShopEndPacketType.CloseSubWindow)); }
public EquipmentOptionDto GenerateOption(int itemEffectValue) { Dictionary <JewelOptionType, CellonGenerator> dictionary = _generatorDictionary[itemEffectValue]; Dictionary <JewelOptionType, CellonGenerator> .ValueCollection list = dictionary.Values; var result = new EquipmentOptionDto(); int rand = new Random().Next(list.Count); for (int i = 0; i < list.Count; i++) { if (i != rand) { continue; } result.Value = new Random().Next(list.ElementAt(i).Min, list.ElementAt(i).Max); result.Level = (byte)itemEffectValue; result.Type = (byte)i; return(result); } return(null); }