void Run(Player owner, GameEvent gameEvent, GameEventArgs args) { while (owner.HandCards().Count > 0 && owner.DelayedTools().Count > 0) { List<List<Card>> answer; List<DeckPlace> sourceDeck = new List<DeckPlace>(); sourceDeck.Add(new DeckPlace(owner, DeckType.DelayedTools)); sourceDeck.Add(new DeckPlace(owner, DeckType.Hand)); AdditionalCardChoiceOptions options = new AdditionalCardChoiceOptions(); options.IsCancellable = true; if (owner.AskForCardChoice(new CardChoicePrompt("XiuLuo", owner), sourceDeck, new List<string>() { "XLJinNang", "XLShouPai" }, new List<int>() { 1, 1 }, new XiuLuoVerifier(), out answer, options)) { NotifySkillUse(); Game.CurrentGame.HandleCardDiscard(owner, answer[1]); Game.CurrentGame.HandleCardDiscard(owner, answer[0]); } else break; } }
protected override void Process(Player source, Player dest, ICard card, ReadOnlyCard readonlyCard, GameEventArgs inResponseTo) { IPlayerProxy ui = Game.CurrentGame.UiProxies[source]; if (source.IsDead) return; if (dest.HandCards().Count + dest.Equipments().Count + dest.DelayedTools().Count == 0) return; // ShunChai -> WuXie(from target) -> WuXie(soemone else) -> target has no card List<DeckPlace> places = new List<DeckPlace>(); places.Add(new DeckPlace(dest, DeckType.Hand)); places.Add(new DeckPlace(dest, DeckType.Equipment)); places.Add(new DeckPlace(dest, DeckType.DelayedTools)); List<string> resultDeckPlace = new List<string>(); resultDeckPlace.Add(ResultDeckName); List<int> resultDeckMax = new List<int>(); resultDeckMax.Add(1); List<List<Card>> answer; if (!ui.AskForCardChoice(new CardChoicePrompt(ChoicePrompt), places, resultDeckPlace, resultDeckMax, new RequireOneCardChoiceVerifier(true), out answer)) { Trace.TraceInformation("Player {0} Invalid answer", source.Id); answer = new List<List<Card>>(); answer.Add(Game.CurrentGame.PickDefaultCardsFrom(places)); } Card theCard = answer[0][0]; if (ShunChaiDest(source, dest).DeckType == DeckType.Discard) { Game.CurrentGame.HandleCardDiscard(dest, new List<Card>() { theCard }); } else { Game.CurrentGame.HandleCardTransferToHand(dest, source, new List<Card>() { theCard }); } }
public Card SelectACardFrom(Player from, Player ask, Prompt prompt, String resultdeckname, bool equipExcluded = false, bool delayedToolsExcluded = true, bool noReveal = false) { var deck = from.HandCards(); if (!equipExcluded) deck = new List<Card>(deck.Concat(from.Equipments())); if (!delayedToolsExcluded) deck = new List<Card>(deck.Concat(from.DelayedTools())); if (deck.Count == 0) return null; List<DeckPlace> places = new List<DeckPlace>(); places.Add(new DeckPlace(from, DeckType.Hand)); if (!equipExcluded) places.Add(new DeckPlace(from, DeckType.Equipment)); if (!delayedToolsExcluded) places.Add(new DeckPlace(from, DeckType.DelayedTools)); List<List<Card>> answer; if (!ask.AskForCardChoice(prompt, places, new List<string>() { resultdeckname }, new List<int>() { 1 }, new RequireOneCardChoiceVerifier(noReveal), out answer)) { Trace.TraceInformation("Player {0} Invalid answer", ask); answer = new List<List<Card>>(); answer.Add(new List<Card>()); answer[0].Add(deck.First()); } Card theCard = answer[0][0]; if (noReveal) { SyncCard(from, ref theCard); } else { SyncCardAll(ref theCard); } Trace.Assert(answer.Count == 1 && answer[0].Count == 1); return theCard; }
protected override bool VerifyPlayer(Player source, Player player) { return player.HandCards().Count + player.Equipments().Count + player.DelayedTools().Count > 0; }