コード例 #1
0
        void GetTheirCards(Player Owner, GameEvent gameEvent, GameEventArgs eventArgs)
        {
            ISkill        skill;
            List <Card>   cards;
            List <Player> players;

            if (Game.CurrentGame.UiProxies[Owner].AskForCardUsage(new CardUsagePrompt("TuXi"), new TuXiVerifier(), out skill, out cards, out players))
            {
                Game.CurrentGame.SortByOrderOfComputation(Game.CurrentGame.CurrentPlayer, players);
                NotifySkillUse(players);
                StagingDeckType TuXiDeck = new StagingDeckType("TuXi");
                CardsMovement   move     = new CardsMovement();
                move.Helper.IsFakedMove = true;
                foreach (Player p in players)
                {
                    if (p.HandCards().Count == 0)
                    {
                        continue;
                    }
                    List <List <Card> > answer;
                    if (!Game.CurrentGame.UiProxies[Owner].AskForCardChoice(new CardChoicePrompt("TuXi"), new List <DeckPlace>()
                    {
                        new DeckPlace(p, DeckType.Hand)
                    },
                                                                            new List <string>()
                    {
                        "TuXi"
                    }, new List <int>()
                    {
                        1
                    }, new RequireOneCardChoiceVerifier(true), out answer))
                    {
                        answer = new List <List <Card> >();
                        answer.Add(Game.CurrentGame.PickDefaultCardsFrom(new List <DeckPlace>()
                        {
                            new DeckPlace(p, DeckType.Hand)
                        }));
                    }
                    move.Cards = answer[0];
                    move.To    = new DeckPlace(p, TuXiDeck);
                    Game.CurrentGame.MoveCards(move, false, Core.Utils.GameDelays.None);
                    Game.CurrentGame.PlayerLostCard(p, answer[0]);
                }
                move.Cards.Clear();
                move.Helper.IsFakedMove = false;
                move.To = new DeckPlace(Owner, DeckType.Hand);
                foreach (Player p in players)
                {
                    move.Cards.AddRange(Game.CurrentGame.Decks[p, TuXiDeck]);
                }
                cards = new List <Card>(move.Cards);
                Game.CurrentGame.MoveCards(move);
                Game.CurrentGame.PlayerAcquiredCard(Owner, cards);
                Game.CurrentGame.CurrentPhaseEventIndex++;
                Game.CurrentGame.NotificationProxy.NotifyActionComplete();
                throw new TriggerResultException(TriggerResult.End);
            }
        }
コード例 #2
0
        public override bool Commit(GameEventArgs arg)
        {
            Owner[DiMengUsed] = 1;
            List <Card> cards = arg.Cards;

            if (cards.Count > 0)
            {
                Game.CurrentGame.HandleCardDiscard(Owner, cards);
            }
            Player          src1       = arg.Targets[0];
            Player          src2       = arg.Targets[1];
            StagingDeckType DiMengDeck = new StagingDeckType("DiMeng");

            Game.CurrentGame.EnterAtomicContext();
            CardsMovement move = new CardsMovement();

            move.Helper.IsFakedMove = true;
            cards      = new List <Card>(Game.CurrentGame.Decks[src1, DeckType.Hand]);
            move.Cards = new List <Card>(cards);
            move.To    = new DeckPlace(src1, DiMengDeck);
            Game.CurrentGame.MoveCards(move);
            Game.CurrentGame.PlayerLostCard(src1, cards);

            cards      = new List <Card>(Game.CurrentGame.Decks[src2, DeckType.Hand]);
            move.Cards = new List <Card>(cards);
            move.To    = new DeckPlace(src2, DiMengDeck);
            Game.CurrentGame.MoveCards(move);
            Game.CurrentGame.PlayerLostCard(src2, cards);
            Game.CurrentGame.ExitAtomicContext();

            move.Helper.IsFakedMove = false;
            Game.CurrentGame.SyncImmutableCards(src1, Game.CurrentGame.Decks[src2, DiMengDeck]);
            Game.CurrentGame.SyncImmutableCards(src2, Game.CurrentGame.Decks[src1, DiMengDeck]);
            Game.CurrentGame.EnterAtomicContext();
            cards      = new List <Card>(Game.CurrentGame.Decks[src2, DiMengDeck]);
            move.Cards = new List <Card>(cards);
            move.To    = new DeckPlace(src1, DeckType.Hand);
            Game.CurrentGame.MoveCards(move);
            Game.CurrentGame.PlayerAcquiredCard(src1, cards);

            cards      = new List <Card>(Game.CurrentGame.Decks[src1, DiMengDeck]);
            move.Cards = new List <Card>(cards);
            move.To    = new DeckPlace(src2, DeckType.Hand);
            Game.CurrentGame.MoveCards(move);
            Game.CurrentGame.PlayerAcquiredCard(src2, cards);
            Game.CurrentGame.ExitAtomicContext();
            return(true);
        }
コード例 #3
0
        protected void Draw(Player player, GameEvent gameEvent, GameEventArgs eventArgs, List <Card> cards, List <Player> players)
        {
            Game.CurrentGame.SortByOrderOfComputation(Game.CurrentGame.CurrentPlayer, players);
            StagingDeckType QiaoBianDeck = new StagingDeckType("QiaoBian");
            CardsMovement   move         = new CardsMovement();

            move.Helper.IsFakedMove = true;
            foreach (Player p in players)
            {
                if (p.HandCards().Count == 0)
                {
                    continue;
                }
                List <List <Card> > answer;
                var places = new List <DeckPlace>()
                {
                    new DeckPlace(p, DeckType.Hand)
                };
                if (!Game.CurrentGame.UiProxies[Owner].AskForCardChoice(new CardChoicePrompt("QiaoBian", Owner), places,
                                                                        new List <string>()
                {
                    "QiaoBian"
                }, new List <int>()
                {
                    1
                }, new RequireOneCardChoiceVerifier(true), out answer))
                {
                    answer = new List <List <Card> >();
                    answer.Add(Game.CurrentGame.PickDefaultCardsFrom(places));
                }
                move.Cards = answer[0];
                move.To    = new DeckPlace(p, QiaoBianDeck);
                Game.CurrentGame.MoveCards(move, false, Core.Utils.GameDelays.None);
                Game.CurrentGame.PlayerLostCard(p, answer[0]);
            }
            move.Cards.Clear();
            move.Helper.IsFakedMove = false;
            move.To = new DeckPlace(Owner, DeckType.Hand);
            foreach (Player p in players)
            {
                move.Cards.AddRange(Game.CurrentGame.Decks[p, QiaoBianDeck]);
            }
            cards = new List <Card>(move.Cards);
            Game.CurrentGame.MoveCards(move);
            Game.CurrentGame.PlayerAcquiredCard(Owner, cards);
            Game.CurrentGame.NotificationProxy.NotifyActionComplete();
        }
コード例 #4
0
ファイル: GanLu.cs プロジェクト: BlueBerryBread/sgs_byCsharp
        public override bool Commit(GameEventArgs arg)
        {
            Owner[GanLuUsed] = 1;
            List <Card>     cards;
            Player          src1      = arg.Targets[0];
            Player          src2      = arg.Targets[1];
            StagingDeckType GanLuDeck = new StagingDeckType("GanLu");

            Game.CurrentGame.EnterAtomicContext();
            CardsMovement move = new CardsMovement();

            move.Helper.IsFakedMove = true;
            cards      = new List <Card>(src1.Equipments());
            move.Cards = new List <Card>(cards);
            move.To    = new DeckPlace(src1, GanLuDeck);
            Game.CurrentGame.MoveCards(move);
            Game.CurrentGame.PlayerLostCard(src1, cards);

            cards      = new List <Card>(src2.Equipments());
            move.Cards = new List <Card>(cards);
            move.To    = new DeckPlace(src2, GanLuDeck);
            Game.CurrentGame.MoveCards(move);
            Game.CurrentGame.PlayerLostCard(src2, cards);
            Game.CurrentGame.ExitAtomicContext();

            Game.CurrentGame.EnterAtomicContext();
            move.Helper.IsFakedMove = false;
            cards      = new List <Card>(Game.CurrentGame.Decks[src2, GanLuDeck]);
            move.Cards = new List <Card>(cards);
            move.To    = new DeckPlace(src1, DeckType.Equipment);
            Game.CurrentGame.MoveCards(move);
            Game.CurrentGame.PlayerAcquiredCard(src1, cards);

            cards      = new List <Card>(Game.CurrentGame.Decks[src1, GanLuDeck]);
            move.Cards = new List <Card>(cards);
            move.To    = new DeckPlace(src2, DeckType.Equipment);
            Game.CurrentGame.MoveCards(move);
            Game.CurrentGame.PlayerAcquiredCard(src2, cards);
            Game.CurrentGame.ExitAtomicContext();
            return(true);
        }