internal void player_BuyOverpayer(Player player, ref Players.CardBuyEventArgs e) { OptionCollection options = new OptionCollection(); for (int i = 0; i <= player.Currency.Coin.Value - e.Game.ComputeCost(this).Coin.Value; i++) for (int j = 0; j <= player.Currency.Potion.Value; j++) if (i != 0 || j != 0) options.Add(new Currency(i, j).ToStringInline(), false); if (options.Count > 0) { Choice choiceOverpay = new Choice(this.OverpayMessage, this, options, player); ChoiceResult resultOverpay = player.MakeChoice(choiceOverpay); if (resultOverpay.Options.Count > 0) { Currency overpayAmount = new Currency(resultOverpay.Options[0]); player._Game.SendMessage(player, this, overpayAmount); if (!overpayAmount.IsBlank) { player.SpendCurrency(overpayAmount); Overpay(player, overpayAmount); } } } e.HandledBy.Add(this.GetType()); // Clear out the Event Triggers -- this only happens when its Gained, so we don't care any more foreach (Player playerLoop in _CardBoughtHandlers.Keys) playerLoop.CardBought -= _CardBoughtHandlers[playerLoop]; _CardBoughtHandlers.Clear(); }