Пример #1
0
 public override async Task DoEffect(Game game, FreeUse useWay)
 {
     await Effects.UseCard.UseActionCard(game, useWay, this, async (g, r) =>
     {
         await g.GetPlayer(r.PlayersId[0]).ChangeSize(g, -g.twoPointCheck(), this, Owner);
     });
 }
Пример #2
0
        public override async Task DoEffect(Game game, FreeUse useWay)
        {
            ActionCard source = game.GetCard(useWay.Source[0]) as ActionCard;
            Player     player = game.GetPlayer(useWay.PlayerId);
            Player     target = game.GetPlayer(useWay.PlayersId[0]);
            await target.ChangeSize(game, -1, source, player);

            Player now = target;

            while (true)
            {
                ChooseSomeCardResponse chooseSomeCardResponse =
                    (ChooseSomeCardResponse)await game.WaitAnswer(new ChooseSomeCardRequest()
                {
                    Count = 1, PlayerId = now.Id, TimeOut = game.RequestTime, EnoughOnly = false
                });

                if (chooseSomeCardResponse.Cards.Count == 0)
                {
                    break;
                }
                else
                {
                    Player nowTarget = now == player ? target : player;
                    await now.discard(game, chooseSomeCardResponse.Cards);

                    await nowTarget.ChangeSize(game, -1, source, now);

                    now = nowTarget;
                }
            }
        }
Пример #3
0
 public override async Task DoEffect(Game game, FreeUse useWay)
 {
     await UseCard.UseActionCard(game, useWay, this, async (g, r) =>
     {
         await game.GetPlayer(useWay.PlayerId).ChangeSize(game, 1, this, Owner);
     });
 }
Пример #4
0
 internal Task UseActionCard(Game game, FreeUse useInfo)
 {
     if (useInfo.SkillId < 0)
     {
         //正常用卡
         ActionCard card = ActionCards.Find(x => x.Id == useInfo.CardId);
         if (card == null)
         {
             return(Task.CompletedTask);
         }
         return(card.DoEffect(game, useInfo));
     }
     else
     {
         Skill skill = Hero.Skills.Find(x => SkillHelper.getId(x) == useInfo.SkillId);
         if (skill != null)
         {
             return(skill.DoEffect(game, useInfo));
         }
         else
         {
             throw new System.Exception($"玩家不持有的技能:{useInfo.SkillId}");
         }
     }
 }
Пример #5
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);
         }
     }));
 }
Пример #6
0
        public override Task DoEffect(Game game, FreeUse useInfo)
        {
            turnLimit.Use();
            AT_N001 card = new AT_N001();

            return(card.DoEffect(game, useInfo));
        }
Пример #7
0
 public override async Task DoEffect(Game game, FreeUse useWay)
 {
     await UseCard.UseActionCard(game, useWay, this, (g, r) =>
     {
         return(Task.CompletedTask);
     });
 }
Пример #8
0
 public override async Task DoEffect(Game game, FreeUse useWay)
 {
     await UseCard.UseActionCard(game, useWay, this, async (g, r) =>
     {
         await game.ChangeSize(2, this);
     });
 }
Пример #9
0
        private async Task effect(Game game, FreeUse useWay)
        {
            Player target = game.GetPlayer(useWay.PlayersId[0]);
            Player user   = game.GetPlayer(useWay.PlayerId);
            await target.ChangeSize(game, -1, this, Owner);

            Player now = target;

            while (true)
            {
                ChooseSomeCardResponse chooseSomeCardResponse =
                    (ChooseSomeCardResponse)await game.WaitAnswer(new ChooseSomeCardRequest()
                {
                    Count = 1, PlayerId = now.Id, TimeOut = game.RequestTime, EnoughOnly = false
                });

                if (chooseSomeCardResponse.Cards.Count == 0)
                {
                    break;
                }
                else
                {
                    Player nowTarget = now == user ? target : user;
                    await nowTarget.ChangeSize(game, -1, this, Owner);

                    now = nowTarget;
                }
            }
        }
Пример #10
0
 public override async Task DoEffect(Game game, FreeUse useWay)
 {
     await Effects.UseCard.UseActionCard(game, useWay, this, async (g, r) =>
     {
         await g.GetPlayer(r.PlayerId).DrawActionCard(g, 2);
     });
 }
Пример #11
0
 protected override bool canUse(Game game, Request nowRequest, FreeUse useInfo, out NextRequest nextRequest)
 {
     nextRequest = new NextRequest()
     {
         RequestInfo = "无法主动打出"
     };
     return(false);
 }
Пример #12
0
 public override async Task DoEffect(Game game, FreeUse useWay)
 {
     await Effects.UseCard.UseActionCard(game, useWay, this, async (g, r) =>
     {
         await Owner.ChangeSize(g, -1, this);
         await g.GetPlayer(r.PlayersId[0]).ChangeSize(g, -2, this);
     });
 }
Пример #13
0
 public override async Task DoEffect(Game game, FreeUse useWay)
 {
     if (_changeTarget != null)
     {
         setProp("user", game.GetPlayer(useWay.PlayerId));
         await _changeTarget.DoEffect(game, useWay);
     }
 }
Пример #14
0
 public override bool isValidTarget(Game game, FreeUse useWay, Player player, out string invalidInfo)
 {
     if (_changeTarget != null)
     {
         return(_changeTarget.isValidTarget(game, useWay, player, out invalidInfo));
     }
     return(base.isValidTarget(game, useWay, player, out invalidInfo));
 }
Пример #15
0
 public override bool isValidTarget(Game game, FreeUse useWay, ActionCard card, out string invalidInfo)
 {
     if (_changeTarget != null)
     {
         return(_changeTarget.isValidTarget(game, useWay, card, out invalidInfo));
     }
     return(base.isValidTarget(game, useWay, card, out invalidInfo));
 }
Пример #16
0
 public override async Task DoEffect(Game game, FreeUse useWay)
 {
     await Effects.UseCard.UseActionCard(game, useWay, this, (g, r) =>
     {
         g.GetPlayer(r.PlayerId).Size += 1;
         return(Task.CompletedTask);
     });
 }
Пример #17
0
        public override async Task DoEffect(Game game, FreeUse useWay)
        {
            ActionCard source = game.GetCard(useWay.Source[0]) as ActionCard;
            Player     player = game.GetPlayer(useWay.PlayerId);
            Player     target = game.GetPlayer(useWay.PlayersId[0]);
            await player.ChangeSize(game, -1, source, player);

            await target.ChangeSize(game, -2, source, player);
        }
Пример #18
0
 protected override bool canUse(Game game, Request nowRequest, FreeUse useInfo, out NextRequest nextRequest)
 {
     if (game.UsedEventDeck.Count < 1)
     {
         nextRequest = null;
         return(false);
     }
     return(base.canUse(game, nowRequest, useInfo, out nextRequest));
 }
Пример #19
0
 protected override bool canUse(Game game, Request nowRequest, FreeUse useInfo, out NextRequest nextRequest)
 {
     if (useInfo.PlayersId.Count < 1)
     {
         nextRequest = new HeroChooseRequest();
         return(false);
     }
     return(base.canUse(game, nowRequest, useInfo, out nextRequest));
 }
Пример #20
0
        public override Task DoEffect(Game game, FreeUse useWay)
        {
            ActionCard source = game.GetCard(useWay.Source[0]) as ActionCard;

            source.setProp("onTurnStart", new CardCallback(source, onTurnStart));
            source.setProp("player", game.GetPlayer(useWay.PlayerId));
            game.EventSystem.Register(EventEnum.TurnStart, game.GetSeat(game.GetPlayer(useWay.PlayerId)), source.getProp <CardCallback>("onTurnStart").call);
            Debug.Log(source + "注册延迟效果");
            return(Task.CompletedTask);
        }
Пример #21
0
 protected override bool canUse(Game game, Request nowRequest, FreeUse useInfo, out NextRequest nextRequest)
 {
     if (nowRequest is FreeUseRequest)
     {
         nextRequest = new NextRequest()
         {
             RequestInfo = "无法主动打出"
         };
         return(false);
     }
     return(base.canUse(game, nowRequest, useInfo, out nextRequest));
 }
Пример #22
0
 protected override bool canUse(Game game, Request nowRequest, FreeUse useInfo, out NextRequest nextRequest)
 {
     if (nowRequest is FreeUseRequest && useInfo.PlayersId.Count < 1)
     {
         nextRequest = new HeroChooseRequest()
         {
             PlayerId = useInfo.PlayerId, Number = 1, RequestInfo = "选择目标玩家"
         };
         return(false);
     }
     return(base.canUse(game, nowRequest, useInfo, out nextRequest));
 }
Пример #23
0
 protected override bool canUse(Game game, Request nowRequest, FreeUse useInfo, out NextRequest nextRequest)
 {
     if (_changeTarget == null)
     {
         nextRequest = null;
         return(false);
     }
     else
     {
         return(_changeTarget.CanUse(game, nowRequest, useInfo, out nextRequest));
     }
 }
Пример #24
0
        /// <summary>
        /// 能否使用卡牌,默认没有任何条件,但是会对要求使用特定类型卡片的情况进行检查,所以在重写该方法的时候除了特殊情况应该返回base.canUse
        /// </summary>
        /// <param name="game"></param>
        /// <param name="nowRequest"></param>
        /// <param name="useInfo"></param>
        /// <param name="nextRequest"></param>
        /// <returns></returns>
        protected virtual bool canUse(Game game, Request nowRequest, FreeUse useInfo, out NextRequest nextRequest)
        {
            nextRequest = null;
            switch (nowRequest)
            {
            case UseLimitCardRequest useLimitCard:
                return(Effects.UseWayResponse.CheckLimit(game, useLimitCard, useInfo, ref nextRequest, game.GetCard(useInfo.Source[0])));

            case FreeUseRequest _:
                return(true);
            }
            return(false);
        }
Пример #25
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;
     }
 }
Пример #26
0
 protected override bool canUse(Game game, Request nowRequest, FreeUse useInfo, out NextRequest nextRequest)
 {
     if (useInfo.PlayersId.Count < 1)
     {
         nextRequest = new HeroChooseRequest();
         return false;
     }
     else
     {
         nextRequest = null;
         return true;
     }
 }
Пример #27
0
 /// <summary>
 /// 不能自己撕自己
 /// </summary>
 /// <param name="game"></param>
 /// <param name="useWay"></param>
 /// <param name="player"></param>
 /// <returns></returns>
 public override bool isValidTarget(Game game, FreeUse useWay, Player player, out string invalidInfo)
 {
     if (player.Id != useWay.PlayerId)
     {
         invalidInfo = string.Empty;
         return(true);
     }
     else
     {
         invalidInfo = "目标不能是自己";
         return(false);
     }
 }
Пример #28
0
        protected override bool canUse(Game game, Request nowRequest, FreeUse useInfo, out NextRequest nextRequest)
        {
            nextRequest = null;
            switch (nowRequest)
            {
            case UseLimitCard useLimitCard:
                return(Effects.UseWayResponse.CheckLimit(game, useLimitCard, useInfo, ref nextRequest, this));

            case FreeUseRequest _:
                return(true);
            }
            return(false);
        }
Пример #29
0
 protected override bool canUse(Game game, Request nowRequest, FreeUse useInfo, out NextRequest nextRequest)
 {
     nextRequest = null;
     if (!turnLimit.CanUse())
     {
         return(false);
     }
     if (useInfo.Source.Count != 1)
     {
         nextRequest = new CardChooseRequest()
         {
         };
         return(false);
     }
     else
     {
         return(true);
     }
 }
Пример #30
0
        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);
        }