static async Task ask(ActionCard card, object[] args) { Game game = args[0] as Game; Player player = args[1] as Player; EventData <int> value = args[2] as EventData <int>; Player sourcePlayer = args[4] as Player; if (player == card.Owner && value.data < 0 && sourcePlayer != card.Owner)//其他玩家减少拥有者的影响力。 { //启用阻塞 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_N005)))) { //说明该玩家处于另一个挂裱询问 return; } Log.Game($"询问 { card.Owner.Name } 使用挂裱"); UseLimitCardResponse useLimitCard = (UseLimitCardResponse)await game.WaitAnswer(new UseLimitCardRequest() { AllPlayerRequest = true, PlayerId = card.Owner.Id, CardType = game.Database.getID(typeof(AT_N005)) }.SetTimeOut(game.RequestTime)); if (useLimitCard.Used) { Log.Game($" { card.Owner.Name } 使用挂裱"); //响应后 取消其他玩家的询问 game.CancelRequests(); await card.Owner.DropActionCard(game, new List <int>() { card.Id }, true);//弃牌 //实际上的效果 await sourcePlayer.ChangeSize(game, value.data, card, player); //取消阻塞 flag.TrySetResult(true); } else { Log.Game($" { card.Owner.Name } 取消使用挂裱"); if (game.Requests.All(x => x.Count == 0)) { flag.TrySetResult(true); } } } }
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); } } } }