public override bool Commit(GameEventArgs arg) { Owner[TiaoXinUsed] = 1; var target = arg.Targets[0]; ISkill skill; List <Card> cards; List <Player> players; while (true) { var v = new JieDaoShaRen.JieDaoShaRenVerifier(Owner); Game.CurrentGame.Emit(GameEvent.PlayerIsAboutToUseCard, new PlayerIsAboutToUseOrPlayCardEventArgs() { Source = target, Verifier = v }); if (Game.CurrentGame.UiProxies[target].AskForCardUsage(new CardUsagePrompt("TiaoXin", Owner), v, out skill, out cards, out players)) { try { GameEventArgs args = new GameEventArgs(); target[Sha.NumberOfShaUsed]--; args.Source = target; args.Targets = new List <Player>(players); args.Targets.Add(Owner); args.Skill = skill; args.Cards = cards; Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, args); } catch (TriggerResultException e) { Trace.Assert(e.Status == TriggerResult.Retry); continue; } } else { var theCard = Game.CurrentGame.SelectACardFrom(arg.Targets[0], Owner, new CardChoicePrompt("TiaoXin", Owner), "TiaoXin"); if (theCard != null) { Game.CurrentGame.HandleCardDiscard(arg.Targets[0], new List <Card>() { theCard }); } } break; } return(true); }
void Run(Player Owner, GameEvent gameEvent, GameEventArgs eventArgs, List <Card> cards, List <Player> players) { NotifySkillUse(players); Game.CurrentGame.DrawCards(players[0], 2); ISkill skill; List <Card> nCard; List <Player> nPlayer; while (true) { var v = new JieDaoShaRen.JieDaoShaRenVerifier(players[1]); bool xuanhuoShaUsed = false; if (players.Count == 2 && !players[1].IsDead) { Game.CurrentGame.Emit(GameEvent.PlayerIsAboutToUseCard, new PlayerIsAboutToUseOrPlayCardEventArgs() { Source = players[0], Verifier = v }); if (players[0].AskForCardUsage(new CardUsagePrompt("XuanHuoSha", players[1]), v, out skill, out nCard, out nPlayer)) { xuanhuoShaUsed = true; try { players[0][Sha.NumberOfShaUsed]--; GameEventArgs args = new GameEventArgs(); args.Source = players[0]; args.Targets = nPlayer; args.Targets.Add(players[1]); args.Skill = skill; args.Cards = nCard; Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, args); } catch (TriggerResultException e) { Trace.Assert(e.Status == TriggerResult.Retry); continue; } } } if (!xuanhuoShaUsed) { int cardCount = players[0].HandCards().Count + players[0].Equipments().Count; if (cardCount == 0) { break; } List <Card> toGet = new List <Card>(); if (cardCount <= 2) { toGet.AddRange(players[0].HandCards()); toGet.AddRange(players[0].Equipments()); } else { List <List <Card> > answer; List <DeckPlace> sourcePlace = new List <DeckPlace>(); sourcePlace.Add(new DeckPlace(players[0], DeckType.Hand)); sourcePlace.Add(new DeckPlace(players[0], DeckType.Equipment)); if (!Owner.AskForCardChoice(new CardChoicePrompt("XuanHuo", players[0], Owner), sourcePlace, new List <string>() { "HuoDe" }, new List <int>() { 2 }, new RequireCardsChoiceVerifier(2, true), out answer, null, CardChoiceCallback.GenericCardChoiceCallback)) { answer = new List <List <Card> >(); answer.Add(Game.CurrentGame.PickDefaultCardsFrom(sourcePlace, 2)); } Game.CurrentGame.SyncImmutableCards(Owner, answer[0]); toGet = answer[0]; } Game.CurrentGame.HandleCardTransferToHand(players[0], Owner, toGet); } break; } Game.CurrentGame.CurrentPhaseEventIndex++; throw new TriggerResultException(TriggerResult.End); }