Example #1
0
 public override async Task DoEffect(Game game, ChooseDirectionResponse response, List <Player> unaffectedPlayers)
 {
     await UseCard.UseEventCard(game, response, this, (g, r) =>
     {
         return(Task.CompletedTask);
     });
 }
Example #2
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;
                }
            }
        }
Example #3
0
 public override async Task Use(Game game, ChooseDirectionResponse response)
 {
     await UseCard.UseEventCard(game, response, this, (g, r) =>
     {
         return(Task.CompletedTask);
     });
 }
 public override Task DoEffect(Game game, ChooseDirectionResponse response, List <Player> unaffectedPlayers)
 {
     return(ZMDFQ.Effects.UseCard.UseEventCard(game, response, this, async(g, r) =>
     {
         await g.ChangeSize(1, this);
         await g.GetPlayer(r.PlayerId).ChangeSize(game, 1, this, g.GetPlayer(r.PlayerId));
     }));
 }
Example #5
0
 private async Task SetEventCard(Game game, ChooseDirectionResponse response)
 {
     if (SaveEvent != null)
     {
         await SaveEvent.Use(game, response);
     }
     SaveEvent = EventCards[0];
     EventCards.RemoveAt(0);
 }
 public override Task DoEffect(Game game, ChooseDirectionResponse response, List <Player> unaffectedPlayers)
 {
     return(ZMDFQ.Effects.UseCard.UseEventCard(game, response, this, async(g, r) =>
     {
         foreach (Player player in g.Players.Where(p => !unaffectedPlayers.Contains(p)))
         {
             await player.ChangeSize(g, 1, this, g.GetPlayer(r.PlayerId));
         }
     }));
 }
Example #7
0
 Task effect(Game game, ChooseDirectionResponse response)
 {
     if (response.IfForward)
     {
         game.Players.Find(p => p.Id == response.PlayerId).Size *= 2;
     }
     else
     {
         game.Players.Find(p => p.Id == response.PlayerId).Size = 0;
     }
     return(Task.CompletedTask);
 }
Example #8
0
 Task effect(Game game, ChooseDirectionResponse response)
 {
     if (response.IfForward)
     {
         game.Size += game.ChainEventDeck.Where(c => c is EV_E001).Count() + 1;
     }
     else
     {
         game.Size -= game.ChainEventDeck.Where(c => c is EV_E001).Count() + 1;
     }
     game.ChainEventDeck.Add(this);
     return(Task.CompletedTask);
 }
Example #9
0
        async Task effect(Game game, ChooseDirectionResponse response)
        {
            ActionCard source = game.GetCard(response.CardId) as ActionCard;
            Player     player = game.Players.Find(p => p.Id == response.PlayerId);

            if (response.IfForward)
            {
                await player.ChangeSize(game, player.Size, source, player);
            }
            else
            {
                await player.ChangeSize(game, -player.Size, source, player);
            }
        }
Example #10
0
 public override async Task DoEffect(Game game, ChooseDirectionResponse response, List <Player> unaffectedPlayers)
 {
     await Effects.UseCard.UseEventCard(game, response, this, async (g, r) =>
     {
         if (response.IfForward)
         {
             await game.ChangeSize(game.ChainEventDeck.Where(c => c is EV_E001).Count() + 1, this);
         }
         else
         {
             await game.ChangeSize(-game.ChainEventDeck.Where(c => c is EV_E001).Count() + 1, this);
         }
         game.ChainEventDeck.Add(this);
     });
 }
Example #11
0
        static async Task doeffect(ActionCard card, object[] args, Game game)
        {
            ChooseDirectionResponse response = args[1] as ChooseDirectionResponse;

            if (!response.IfSet)
            {
                //启用阻塞
                flag = new TaskCompletionSource <bool>();
                if (game.Requests[game.Players.IndexOf(card.Owner)].Any(x => x is UseLimitCardRequest r && r.CardType == game.Database.getID(typeof(AT_N020))))
                {
                    //说明该玩家处于另一个墨菲定律询问
                    return;
                }
                Log.Game($"询问 { card.Owner.Name } 使用定律");
                UseLimitCardResponse response1 = (UseLimitCardResponse)await game.WaitAnswer(new UseLimitCardRequest()
                {
                    AllPlayerRequest = true,
                    PlayerId         = card.Owner.Id,
                    CardType         = game.Database.getID(typeof(AT_N020))
                }.SetTimeOut(game.RequestTime));

                if (response1.Used)
                {
                    Log.Game($" { card.Owner.Name } 使用墨菲定律");
                    //响应后 取消其他玩家的询问
                    game.CancelRequests();
                    //这段会有问题,丢卡后卡的owner变成null,个人影响力变化会找不到来源玩家(理论上是自己)
                    Player owner = card.Owner;
                    await card.Owner.DropActionCard(game, new List <int>() { card.Id }, true);

                    await owner.ChangeSize(game, -1, card, card.Owner);

                    //把方向置为反向
                    response.IfForward = !response.IfForward;
                    //取消阻塞
                    flag.TrySetResult(true);
                }
                else
                {
                    Log.Game($" { card.Owner.Name } 取消使用墨菲定律");
                    if (game.Requests.All(x => x.Count == 0))
                    {
                        flag.TrySetResult(true);
                    }
                }
            }
        }
Example #12
0
 internal Task UseEventCard(Game game, ChooseDirectionResponse response)
 {
     if (response.IfSet)
     {
         return(SetEventCard(game, response));
     }
     else
     {
         //默认玩家手上一定是一张事件卡,有其他情况再改
         EventCard card = EventCards.Find(c => c.Id == response.CardId);
         if (card != null)
         {
             return(card.Use(game, response));
         }
         else
         {
             Log.Error("未找到卡片(" + response.CardId + ")");
             return(Task.CompletedTask);
         }
     }
 }
Example #13
0
 public override async Task Use(Game game, ChooseDirectionResponse response)
 {
     await Effects.UseCard.UseEventCard(game, response, this, effect);
 }
Example #14
0
 public override async Task DoEffect(Game game, ChooseDirectionResponse response, List <Player> unaffectedPlayers)
 {
     await UseCard.UseEventCard(game, response, this, effect);
 }
Example #15
0
 public override Task DoEffect(Game game, ChooseDirectionResponse response, List <Player> unaffectedPlayers)
 {
     return(Task.CompletedTask);
 }
Example #16
0
 public override Task Use(Game game, ChooseDirectionResponse response)
 {
     return(Task.CompletedTask);
 }