void player_CardBought(object sender, Players.CardBuyEventArgs e) { // This is not the card you are looking for if (e.Card != this || e.Actions.ContainsKey(this.GetType())) { return; } Player player = sender as Player; if (player.Currency > e.Game.ComputeCost(this)) { e.Actions[this.GetType()] = new Players.CardBuyAction(this.Owner, this, String.Format("Overpay for {0}", this.Name), player_BuyOverpayer, false); } }
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(); }