Exemplo n.º 1
0
 public override bool Commit(GameEventArgs arg)
 {
     Owner[LuanWuUsed] = 1;
     var toProcess = Game.CurrentGame.AlivePlayers;
     toProcess.Remove(Owner);
     foreach (Player target in toProcess)
     {
         ISkill skill;
         List<Card> cards;
         List<Player> players;
         while (true)
         {
             if (target.IsDead) break;
             var v = new LuanWuVerifier();
             Game.CurrentGame.Emit(GameEvent.PlayerIsAboutToUseCard, new PlayerIsAboutToUseOrPlayCardEventArgs() { Source = target, Verifier = v });
             if (Game.CurrentGame.UiProxies[target].AskForCardUsage(new CardUsagePrompt("LuanWu"), v,
                 out skill, out cards, out players))
             {
                 try
                 {
                     GameEventArgs args = new GameEventArgs();
                     target[Sha.NumberOfShaUsed]--;
                     args.Source = target;
                     args.Targets = players;
                     args.Skill = skill;
                     args.Cards = cards;
                     Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, args);
                 }
                 catch (TriggerResultException e)
                 {
                     Trace.Assert(e.Status == TriggerResult.Retry);
                     continue;
                 }
             }
             else
             {
                 Game.CurrentGame.LoseHealth(target, 1);
             }
             break;
         }
     }
     return true;
 }