Exemple #1
0
        private async Task doeffect(object[] args, Game game)
        {
            ChooseDirectionResponse response = args[1] as ChooseDirectionResponse;

            if (!response.IfSet)
            {
                TakeChoiceResponse response1 = (TakeChoiceResponse)await game.WaitAnswer(new TakeChoiceRequest()
                {
                    PlayerId = Owner.Id,
                    Infos    = new List <string>()
                    {
                        "使用墨菲定律", "取消"
                    },
                    AllPlayerRequest = true,
                }.SetTimeOut(game.RequestTime));

                if (response1.Index == 0)
                {
                    //如果使用了墨菲定律,那么取消所有剩余询问
                    game.CancelRequests();
                    await Owner.DropActionCard(game, new List <int>() { this.Id }, true);

                    response.IfForward = !response.IfForward;
                }
            }
        }
Exemple #2
0
 public override Task DoEffect(Game game, FreeUse useWay)
 {
     return(Effects.UseCard.UseActionCard(game, useWay, this, async(g, r) =>
     {
         //询问玩家是加或减
         TakeChoiceResponse response = (TakeChoiceResponse)await game.WaitAnswer(new TakeChoiceRequest()
         {
             PlayerId = useWay.PlayerId,
             Infos = new List <string>()
             {
                 "+2",
                 "-2",
             }
         });
         //处理实际效果
         if (response.Index == 0)
         {
             await game.ChangeSize(2, this);
         }
         else
         {
             await game.ChangeSize(-2, this);
         }
     }));
 }
Exemple #3
0
        async Task effect(object[] args)
        {
            Game   game   = args[0] as Game;
            Player player = args[1] as Player;

            if (!AutoRequest)
            {
                return;
            }
            if (Hero.Player.Size < 0 && player == Hero.Player)
            {
                TakeChoiceResponse response = await game.WaitAnswer(new TakeChoiceRequest()
                {
                    PlayerId = Hero.Player.Id,
                    Infos    = new List <string>()
                    {
                        "不发动技能", "发动技能"
                    },
                    TimeOut = 10
                }) as TakeChoiceResponse;

                if (response.Index > 0)
                {
                    await Hero.FaceUp(game);

                    await Hero.Player.DrawActionCard(game, Math.Abs(Hero.Player.Size));
                }
            }
        }
Exemple #4
0
 public override async Task DoEffect(Game game, FreeUse useWay)
 {
     await Effects.UseCard.UseActionCard(game, useWay, this, async (g, r) =>
     {
         int x = g.twoPointCheck();
         g.GetPlayer(r.PlayersId[0]).ChangeSize(g, -x, this);
         TakeChoiceResponse response = await g.WaitAnswer(new TakeChoiceRequest() { PlayerId = r.PlayerId, Infos = new List<string>() { "-2", "+2" } }) as TakeChoiceResponse;
         if (response.Index == 0)
             g.Size -= x;
         else
             g.Size += x;
     }
 }
        public override async Task DoEffect(Game game, FreeUse useWay)
        {
            Player             player       = game.GetPlayer(useWay.PlayerId);
            Player             targetPlayer = game.GetPlayer(useWay.PlayersId[0]);
            ActionCard         source       = game.GetCard(useWay.Source[0]) as ActionCard;
            TakeChoiceResponse takeChoice   = await game.WaitAnswer(new TakeChoiceRequest()
            {
                Infos = new List <string>()
                {
                    "+1", "-1"
                },
                PlayerId    = useWay.PlayerId,
                RequsetInfo = "社群规模±1"
            }.SetTimeOut(game.RequestTime)) as TakeChoiceResponse;

            if (takeChoice.Index == 0)
            {
                await game.ChangeSize(1, source);
            }
            else
            {
                await game.ChangeSize(-1, source);
            }

            ChooseSomeCardResponse chooseCard = await game.WaitAnswer(new ChooseSomeCardRequest()
            {
                Count       = player.ActionCards.Count,
                EnoughOnly  = false,
                PlayerId    = useWay.PlayerId,
                RequsetInfo = "选择X张牌给予目标玩家,你与其影响力+X"
            }.SetTimeOut(game.RequestTime)) as ChooseSomeCardResponse;

            List <ActionCard> cards = new List <ActionCard>(chooseCard.Cards.Select(id => player.ActionCards.Find(c => c.Id == id)));
            await player.DropActionCard(game, chooseCard.Cards);

            await player.AddActionCards(game, cards);

            await player.ChangeSize(game, cards.Count, source, player);

            await targetPlayer.ChangeSize(game, cards.Count, source, player);
        }
Exemple #6
0
        private async Task doeffect_passive(object[] args)
        {
            Game            game         = args[0] as Game;
            EventData <int> value        = args[2] as EventData <int>;
            Player          sourcePlayer = args[4] as Player;

            if (value.data < 0 && sourcePlayer != Owner)
            {
                TakeChoiceResponse response = (TakeChoiceResponse)await game.WaitAnswer(new TakeChoiceRequest()
                {
                    PlayerId = Owner.Id,
                    Infos    = new List <string>()
                    {
                        "取消", "使用挂裱"
                    }
                });

                if (response.Index == 1)
                {
                    await Effects.UseCard.UseActionCard(game, new FreeUse()
                    {
                        PlayerId = Owner.Id,
                        CardId   = Id,
                        Source   = new List <int>()
                        {
                            Id
                        },
                        PlayersId = new List <int>()
                        {
                            sourcePlayer.Id
                        }
                    }, this, async (g, r) =>
                    {
                        await g.GetPlayer(r.PlayersId[0]).ChangeSize(g, value.data, this, g.GetPlayer(r.PlayerId));
                    });
                }
            }
        }
        public override async Task DoEffect(Game game, FreeUse useWay)
        {
            ActionCard source = game.GetCard(useWay.Source[0]) as ActionCard;
            int        x      = game.twoPointCheck();
            await game.GetPlayer(useWay.PlayersId[0]).ChangeSize(game, -x, source, game.GetPlayer(useWay.PlayerId));

            TakeChoiceResponse response = await game.WaitAnswer(new TakeChoiceRequest()
            {
                PlayerId = useWay.PlayerId, Infos = new List <string>()
                {
                    "+2", "-2"
                }
            }) as TakeChoiceResponse;

            if (response.Index == 0)
            {
                await game.ChangeSize(2, source);
            }
            else
            {
                await game.ChangeSize(-2, source);
            }
        }
Exemple #8
0
 public override async Task DoEffect(Game game, FreeUse useWay)
 {
     await Effects.UseCard.UseActionCard(game, useWay, this, async (g, r) =>
     {
         Player target = g.GetPlayer(r.PlayersId[0]);
         TakeChoiceResponse response = await g.WaitAnswer(new TakeChoiceRequest()
         {
             PlayerId = r.PlayerId, Infos = new List <string>()
             {
                 "你个人影响力+1,对方抽一张牌", "你抽一张牌,对方个人影响力+1"
             }
         }) as TakeChoiceResponse;
         if (response.Index == 0)
         {
             await Owner.ChangeSize(g, 1, this);
             await target.DrawActionCard(g, 1);
         }
         else
         {
             await Owner.DrawActionCard(g, 1);
             await target.ChangeSize(g, 1, this);
         }
     });
 }
        public override async Task DoEffect(Game game, FreeUse useWay)
        {
            ActionCard    source       = game.GetCard(useWay.Source[0]) as ActionCard;
            List <Player> crowdfunders = new List <Player>()
            {
                game.GetPlayer(useWay.PlayerId)
            };

            Task <Response>[] tasks = await game.waitAnswerAll(new List <Player>(game.Players.Where(p => p.Id != useWay.PlayerId)), p => game.WaitAnswer(new ChooseSomeCardRequest()
            {
                AllPlayerRequest = true,
                Count            = 1,
                EnoughOnly       = false,
                PlayerId         = p.Id,
                RequsetInfo      = "是否丢弃手牌成为众筹者?"
            }.SetTimeOut(game.RequestTime)));

            foreach (var task in tasks)
            {
                ChooseSomeCardResponse response = task.Result as ChooseSomeCardResponse;
                if (response.Cards.Count > 0)
                {
                    crowdfunders.Add(game.GetPlayer(response.PlayerId));
                }
            }
            if (crowdfunders.Count == game.Players.Count)
            {
                return;
            }
            if (crowdfunders.Count > 0)
            {
                foreach (Player player in crowdfunders)
                {
                    await player.ChangeSize(game, 1, source, game.GetPlayer(useWay.PlayerId));
                }
            }
            if (crowdfunders.Count > 1)
            {
                TakeChoiceResponse response = await game.WaitAnswer(new TakeChoiceRequest()
                {
                    PlayerId = useWay.PlayerId,
                    Infos    = new List <string>()
                    {
                        "+" + crowdfunders.Count, "-" + crowdfunders.Count
                    }
                }.SetTimeOut(game.RequestTime)) as TakeChoiceResponse;

                if (response.Index == 0)
                {
                    await game.ChangeSize(crowdfunders.Count, source);
                }
                else
                {
                    await game.ChangeSize(-crowdfunders.Count, source);
                }
            }
            if (crowdfunders.Count > 2)
            {
                foreach (Player player in crowdfunders)
                {
                    await player.DrawActionCard(game, 1);
                }
            }
        }