Beispiel #1
0
 public override void Run(GameEvent gameEvent, GameEventArgs eventArgs)
 {
     Player currentPlayer = Game.CurrentGame.CurrentPlayer;
     Trace.TraceInformation("Player {0} action.", currentPlayer.Id);
     while (true)
     {
         Trace.Assert(Game.CurrentGame.UiProxies.ContainsKey(currentPlayer));
         IUiProxy proxy = Game.CurrentGame.UiProxies[currentPlayer];
         ISkill skill;
         List<Card> cards;
         List<Player> players;
         PlayerActionStageVerifier v = new PlayerActionStageVerifier();
         if (!proxy.AskForCardUsage(new Prompt(Prompt.PlayingPhasePrompt), v, out skill, out cards, out players))
         {
             break;
         }
         if (skill != null)
         {
             if (skill is CheatSkill)
             {
                 if (!Game.CurrentGame.Settings.CheatEnabled) break;
                 CheatSkill cs = skill as CheatSkill;
                 if (cs.CheatType == CheatType.Card)
                 {
                     if (Game.CurrentGame.IsClient)
                     {
                         Game.CurrentGame.SyncUnknownLocationCardAll(null);
                     }
                     else
                     {
                         foreach (var searchCard in Game.CurrentGame.CardSet)
                         {
                             if (searchCard.Id == cs.CardId)
                             {
                                 Game.CurrentGame.SyncUnknownLocationCardAll(searchCard);
                                 break;
                             }
                         }
                     }
                     foreach (var searchCard in Game.CurrentGame.CardSet)
                     {
                         if (searchCard.Id == cs.CardId)
                         {
                             CardsMovement move = new CardsMovement();
                             move.Cards = new List<Card>() { searchCard };
                             move.To = new DeckPlace(Game.CurrentGame.CurrentPlayer, DeckType.Hand);
                             move.Helper = new MovementHelper();
                             Game.CurrentGame.MoveCards(move);
                             break;
                         }
                     }
                 }
                 else if (cs.CheatType == CheatType.Skill)
                 {
                     foreach (var hero in Game.CurrentGame.OriginalCardSet)
                     {
                         bool found = false;
                         if (hero.Type is HeroCardHandler)
                         {
                             foreach (var sk in (hero.Type as HeroCardHandler).Hero.Skills)
                             {
                                 if (sk.GetType().Name == cs.SkillName)
                                 {
                                     Game.CurrentGame.PlayerAcquireSkill(currentPlayer, sk.Clone() as ISkill);
                                     found = true;
                                     break;
                                 }
                             }
                         }
                         if (found) break;
                     }
                 }
                 continue;
             }
             else if (skill is ActiveSkill)
             {
                 GameEventArgs arg = new GameEventArgs();
                 arg.Source = Game.CurrentGame.CurrentPlayer;
                 arg.Targets = players;
                 arg.Cards = cards;
                 ((ActiveSkill)skill).NotifyAndCommit(arg);
                 continue;
             }
             CompositeCard c;
             CardTransformSkill s = (CardTransformSkill)skill;
             VerifierResult r = s.TryTransform(cards, null, out c);
             Trace.TraceInformation("Player used {0}", c.Type);
         }
         else
         {
             Trace.Assert(cards[0] != null && cards.Count == 1);
             Trace.TraceInformation("Player used {0}", cards[0].Type);
         }
         try
         {
             Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, new Triggers.GameEventArgs() { Skill = skill, Source = Game.CurrentGame.CurrentPlayer, Targets = players, Cards = cards });
         }
         catch (TriggerResultException)
         {
         }
         Game.CurrentGame.NotificationProxy.NotifyActionComplete();
     }
 }
            public override void Run(GameEvent gameEvent, GameEventArgs eventArgs)
            {
                Player currentPlayer = Game.CurrentGame.CurrentPlayer;

                Trace.TraceInformation("Player {0} action.", currentPlayer.Id);
                while (!currentPlayer.IsDead)
                {
                    bool newturn = false;
                    foreach (var pl in Game.CurrentGame.Players)
                    {
                        if (GetReadyToGo(pl) && pl == currentPlayer)
                        {
                            newturn = true;
                        }
                    }
                    if (newturn)
                    {
                        return;
                    }
                    Trace.Assert(Game.CurrentGame.UiProxies.ContainsKey(currentPlayer));
                    IPlayerProxy              proxy = Game.CurrentGame.UiProxies[currentPlayer];
                    ISkill                    skill;
                    List <Card>               cards;
                    List <Player>             players;
                    PlayerActionStageVerifier v = new PlayerActionStageVerifier();
                    Game.CurrentGame.Emit(GameEvent.PlayerIsAboutToUseCard, new PlayerIsAboutToUseOrPlayCardEventArgs()
                    {
                        Source = currentPlayer, Verifier = v
                    });
                    if (!proxy.AskForCardUsage(new Prompt(Prompt.PlayingPhasePrompt), v, out skill, out cards, out players))
                    {
                        break;
                    }
                    if (skill != null)
                    {
                        if (skill is CheatSkill)
                        {
                            if (!Game.CurrentGame.Settings.CheatEnabled)
                            {
                                break;
                            }
                            CheatSkill cs = skill as CheatSkill;
                            if (cs.CheatType == CheatType.Card)
                            {
                                if (Game.CurrentGame.IsClient)
                                {
                                    Game.CurrentGame.SyncUnknownLocationCardAll(null);
                                }
                                else
                                {
                                    foreach (var searchCard in Game.CurrentGame.CardSet)
                                    {
                                        if (searchCard.Id == cs.CardId)
                                        {
                                            Game.CurrentGame.SyncUnknownLocationCardAll(searchCard);
                                            break;
                                        }
                                    }
                                }
                                foreach (var searchCard in Game.CurrentGame.CardSet)
                                {
                                    if (searchCard.Id == cs.CardId)
                                    {
                                        CardsMovement move = new CardsMovement();
                                        move.Cards = new List <Card>()
                                        {
                                            searchCard
                                        };
                                        move.To     = new DeckPlace(Game.CurrentGame.CurrentPlayer, DeckType.Hand);
                                        move.Helper = new MovementHelper();
                                        Game.CurrentGame.MoveCards(move);
                                        break;
                                    }
                                }
                            }
                            else if (cs.CheatType == CheatType.Skill)
                            {
                                foreach (var hero in Game.CurrentGame.OriginalCardSet)
                                {
                                    bool found = false;
                                    if (hero.Type is HeroCardHandler)
                                    {
                                        foreach (var sk in (hero.Type as HeroCardHandler).Hero.Skills)
                                        {
                                            if (sk.GetType().Name == cs.SkillName)
                                            {
                                                Game.CurrentGame.PlayerAcquireAdditionalSkill(currentPlayer, sk.Clone() as ISkill, currentPlayer.Hero);
                                                found = true;
                                                break;
                                            }
                                        }
                                    }
                                    if (found)
                                    {
                                        break;
                                    }
                                }
                            }
                            continue;
                        }
                        else if (skill is ActiveSkill)
                        {
                            GameEventArgs arg = new GameEventArgs();
                            arg.Source  = Game.CurrentGame.CurrentPlayer;
                            arg.Targets = players;
                            arg.Cards   = cards;
                            ((ActiveSkill)skill).NotifyAndCommit(arg);
                            Game.CurrentGame.NotificationProxy.NotifyActionComplete();
                            Game.CurrentGame.LastAction = skill;
                            continue;
                        }
                        CompositeCard      c;
                        CardTransformSkill s = (CardTransformSkill)skill;
                        VerifierResult     r = s.TryTransform(cards, players, out c);
                        Trace.TraceInformation("Player used {0}", c.Type);
                    }
                    else
                    {
                        Trace.Assert(cards[0] != null && cards.Count == 1);
                        Trace.TraceInformation("Player used {0}", cards[0].Type);
                    }
                    try
                    {
                        Game.CurrentGame.Emit(GameEvent.CommitActionToTargets, new Triggers.GameEventArgs()
                        {
                            Skill = skill, Source = Game.CurrentGame.CurrentPlayer, Targets = players, Cards = cards
                        });
                    }
                    catch (TriggerResultException)
                    {
                    }
                    Game.CurrentGame.NotificationProxy.NotifyActionComplete();
                    Game.CurrentGame.LastAction = skill;
                }
            }