Example #1
0
 public KuangFeng()
 {
     kuangfengTarget = null;
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { kuangfengTarget = null; },
         TriggerCondition.OwnerIsSource
     ) { AskForConfirmation = false, IsAutoNotify = false };
     var trigger2 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { return Game.CurrentGame.Decks[Owner, QiXing.QiXingDeck].Count > 0; },
         Run,
         TriggerCondition.OwnerIsSource
     ) { IsAutoNotify = false };
     var trigger3 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             var args = a as DamageEventArgs;
             return (DamageElement)args.Element == DamageElement.Fire && kuangfengTarget == args.Targets[0];
         },
         (p, e, a) =>
         {
             var args = a as DamageEventArgs;
             args.Magnitude++;
         },
         TriggerCondition.Global
     ) { AskForConfirmation = false };
     Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.Start], trigger);
     Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.End], trigger2);
     Triggers.Add(GameEvent.DamageInflicted, trigger3);
     IsAutoInvoked = false;
 }
Example #2
0
        public ShenWei()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { p[Player.DealAdjustment] += 2; },
                TriggerCondition.OwnerIsSource
                );

            Triggers.Add(GameEvent.PhaseProceedEvents[TurnPhase.Draw], trigger);
            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
            {
                var args = a as AdjustmentEventArgs;
                args.AdjustmentAmount += 2;
            },
                TriggerCondition.OwnerIsSource
                )
            {
                IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PlayerHandCardCapacityAdjustment, trigger2);
            IsEnforced = true;
        }
Example #3
0
File: BuQu.cs Project: h1398123/sgs
 public BuQu()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             if (p.Health > 0 && Game.CurrentGame.Decks[Owner, bq].Count > 0)
             {
                 int toDraw = Game.CurrentGame.Decks[Owner, bq].Count;
                 while (toDraw-- > 0)
                 {
                     Card c1 = Game.CurrentGame.Decks[Owner, bq][Game.CurrentGame.Decks[Owner, bq].Count - 1];
                     CardsMovement move = new CardsMovement();
                     move.Cards = new List<Card>() { c1 };
                     move.To = new DeckPlace(null, DeckType.Discard);
                     Game.CurrentGame.MoveCards(move);
                 }
             }
             return p.Health <= 0;
         },
         Run,
         TriggerCondition.OwnerIsTarget
     ) { Type = TriggerType.Skill };
     Triggers.Add(GameEvent.AfterHealthChanged, trigger);
     ExtraCardsDeck = bq;
     IsAutoInvoked = true;
 }
Example #4
0
 public YongSi()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { p[Player.DealAdjustment] += Game.CurrentGame.NumberOfAliveAllegiances; },
         TriggerCondition.OwnerIsSource
     );
     var trigger2 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             Game.CurrentGame.ForcePlayerDiscard(
              p,
              (pl, i) =>
              {
                  return Game.CurrentGame.NumberOfAliveAllegiances - i;
              },
              true);
         },
         TriggerCondition.OwnerIsSource
     );
     Triggers.Add(GameEvent.PhaseProceedEvents[TurnPhase.Draw], trigger);
     Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.Discard], trigger2);
     IsEnforced = true;
 }
 public RulerGivenSkillContainerSkill(IRulerGivenSkill InnerSkill, Allegiance al)
 {
     innerSkillType = InnerSkill.GetType();
     Allegiance = al;
     masterList = new Dictionary<Player, IRulerGivenSkill>();
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         DistributeSkills,
         TriggerCondition.OwnerIsSource
     ) { IsAutoNotify = false, AskForConfirmation = false };
     var trigger2 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             if (a.Source.Allegiance == Allegiance && !masterList.ContainsKey(a.Source))
             {
                 DistributeSkills(Owner, null, null);
             }
             if (a.Source.Allegiance != Allegiance && masterList.ContainsKey(a.Source))
             {
                 ISkill skill = masterList[a.Source];
                 masterList.Remove(a.Source);
                 Game.CurrentGame.PlayerLoseAdditionalSkill(a.Source, skill, true);
             }
         },
         TriggerCondition.Global
     ) { IsAutoNotify = false, AskForConfirmation = false };
     Triggers.Add(GameEvent.PlayerGameStartAction, trigger);
     Triggers.Add(GameEvent.PlayerChangedAllegiance, trigger2);
     IsAutoInvoked = null;
     IsRulerOnly = true;
 }
Example #6
0
        public ZhiJi()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(p[ZhiJiAwaken] == 0 && Game.CurrentGame.Decks[p, DeckType.Hand].Count == 0); },
                (p, e, a) =>
            {
                p[ZhiJiAwaken] = 1;
                int answer     = 0;
                Game.CurrentGame.UiProxies[p].AskForMultipleChoice(new MultipleChoicePrompt("ZhiJi"), new List <OptionPrompt>()
                {
                    new OptionPrompt("MoPai"), new OptionPrompt("HuiFuTiLi")
                }, out answer);
                if (answer == 1)
                {
                    Game.CurrentGame.RecoverHealth(p, p, 1);
                }
                else
                {
                    Game.CurrentGame.DrawCards(p, 2);
                }
                Game.CurrentGame.LoseMaxHealth(p, 1);
                Game.CurrentGame.PlayerAcquireAdditionalSkill(p, new GuanXing(), HeroTag);
            },
                TriggerCondition.OwnerIsSource
                );

            Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.Start], trigger);
            IsAwakening = true;
        }
Example #7
0
File: ZiLi.cs Project: kingling/sgs
 public ZiLi()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { return p[ZiLiAwakened] == 0 && Game.CurrentGame.Decks[p, QuanJi.QuanDeck].Count >= 3; },
         (p, e, a) =>
         {
             p[ZiLiAwakened] = 1;
             Game.CurrentGame.LoseMaxHealth(p, 1);
             int answer = 0;
             Owner.AskForMultipleChoice(
                     new MultipleChoicePrompt("ZiLi"),
                     new List<OptionPrompt>() { new OptionPrompt("ZiLiRecover"), new OptionPrompt("ZiLiDraw") },
                     out answer);
             if (answer == 0)
             {
                 Game.CurrentGame.RecoverHealth(Owner, Owner, 1);
             }
             else
             {
                 Game.CurrentGame.DrawCards(Owner, 2);
             }
             Game.CurrentGame.PlayerAcquireAdditionalSkill(Owner, new PaiYi(), HeroTag);
         },
         TriggerCondition.OwnerIsSource
     );
     Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.Start], trigger);
     IsAwakening = true;
 }
Example #8
0
        public FangQuan()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
            {
                return(!Game.CurrentGame.PhasesSkipped.Contains(TurnPhase.Play));
            },
                (p, e, a) =>
            {
                p[FangQuanUsed] = 1;
                Game.CurrentGame.PhasesSkipped.Add(TurnPhase.Play);
            },
                TriggerCondition.OwnerIsSource
                );
            var trigger2 = new AutoNotifyUsagePassiveSkillTrigger(
                this,
                (p, e, a) => { return(p[FangQuanUsed] == 1); },
                (p, e, a, cards, players) =>
            {
                Game.CurrentGame.HandleCardDiscard(a.Source, cards);
                Game.CurrentGame.RegisterTrigger(GameEvent.PhasePostEnd, new FangQuanTrigger(Owner, players[0]));
            },
                TriggerCondition.OwnerIsSource,
                new FangQuanVerifier()
                )
            {
                AskForConfirmation = false
            };

            Triggers.Add(GameEvent.PhaseOutEvents[TurnPhase.Draw], trigger);
            Triggers.Add(GameEvent.PhaseProceedEvents[TurnPhase.End], trigger2);
        }
Example #9
0
        public HuaShen()
        {
            acquiredSkill = null;
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
            {
                AcquireHeroCard(p, HeroTag);
                AcquireHeroCard(p, HeroTag);
                Run(p, e, a);
            },
                TriggerCondition.OwnerIsSource
                )
            {
                AskForConfirmation = false
            };
            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(Game.CurrentGame.Decks[Owner, HuaShenDeck].Count > 0); },
                Run,
                TriggerCondition.OwnerIsSource
                );

            Triggers.Add(GameEvent.PlayerGameStartAction, trigger);
            Triggers.Add(GameEvent.PhaseProceedEvents[TurnPhase.BeforeStart], trigger2);
            Triggers.Add(GameEvent.PhasePostEnd, trigger2);

            IsAutoInvoked = false;
            DeckCleanup.Add(HuaShenDeck);
        }
Example #10
0
        public YaoWu()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
            {
                return(a.ReadonlyCard != null && a.ReadonlyCard.Type is Sha && a.Source != null &&
                       a.ReadonlyCard.SuitColor == SuitColorType.Red);
            },
                (p, e, a) =>
            {
                int answer = 0;
                if (a.Source.LostHealth > 0 &&
                    a.Source.AskForMultipleChoice(new MultipleChoicePrompt("YaoWu"),
                                                  OptionPrompt.RecoverOneHealthOrDrawOneCardOptions, out answer) &&
                    answer == 0)
                {
                    Game.CurrentGame.RecoverHealth(a.Source, a.Source, 1);
                }
                else
                {
                    Game.CurrentGame.DrawCards(a.Source, 1);
                }
            },
                TriggerCondition.OwnerIsTarget
                );

            Triggers.Add(GameEvent.AfterDamageCaused, trigger);
            IsEnforced = true;
        }
Example #11
0
            public FuHunPassiveSkill()
            {
                var trigger = new AutoNotifyPassiveSkillTrigger(
                    this,
                    (p, e, a) => { return(fhWuSheng == null && a.ReadonlyCard != null && a.ReadonlyCard[FuHunSha] == 1 && Game.CurrentGame.PhasesOwner == p && Game.CurrentGame.CurrentPhase == TurnPhase.Play); },
                    (p, e, a) =>
                {
                    fhWuSheng   = new WuSheng();
                    fhPaoXiao   = new PaoXiao();
                    Trigger tri = new RemoveShengPao(p, this);
                    Game.CurrentGame.PlayerAcquireAdditionalSkill(p, fhWuSheng, HeroTag);
                    Game.CurrentGame.PlayerAcquireAdditionalSkill(p, fhPaoXiao, HeroTag);
                    Game.CurrentGame.RegisterTrigger(GameEvent.PhasePostEnd, tri);
                },
                    TriggerCondition.OwnerIsSource
                    )
                {
                    AskForConfirmation = false
                };

                Triggers.Add(GameEvent.AfterDamageCaused, trigger);

                var trigger2 = new AutoNotifyPassiveSkillTrigger(
                    this,
                    (p, e, a) => { return(a.Card[FuHunSha] == 1); },
                    (p, e, a) => { throw new TriggerResultException(TriggerResult.Fail); },
                    TriggerCondition.OwnerIsSource
                    )
                {
                    AskForConfirmation = false, IsAutoNotify = false
                };

                Triggers.Add(GameEvent.PlayerCanPlayCard, trigger2);
            }
Example #12
0
        public DanLao()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { if (a.ReadonlyCard != null && !a.ReadonlyCard.Type.IsCardCategory(CardCategory.Tool))
                               {
                                   return(false);
                               }
                               return(a.Targets.Count > 1); },
                OnPlayerIsCardTarget,
                TriggerCondition.OwnerIsTarget
                );
            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(a.ReadonlyCard != null && a.ReadonlyCard[DanLaoEffect[p]] == 1); },
                (p, e, a) => { throw new TriggerResultException(TriggerResult.End); },
                TriggerCondition.OwnerIsTarget
                )
            {
                AskForConfirmation = false
            };

            Triggers.Add(GameEvent.CardUsageTargetValidating, trigger2);
            Triggers.Add(GameEvent.CardUsageTargetConfirming, trigger);
            IsAutoInvoked = null;
        }
Example #13
0
        public ChongZhen()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(a.ReadonlyCard != null && a.ReadonlyCard[LongDan.CanShuaLiuMang] == 1 && a.Targets.Any(pl => pl.HandCards().Count > 0)); },
                (p, e, a) =>
            {
                if (a.Targets != null)
                {
                    foreach (var target in a.Targets)
                    {
                        if (target.HandCards().Count == 0)
                        {
                            continue;
                        }
                        var result = Game.CurrentGame.SelectACardFrom(target, p, new CardChoicePrompt("ChongZhen", target, p), "ChongZhen", true, true, true);
                        Game.CurrentGame.HandleCardTransferToHand(target, p, new List <Card>()
                        {
                            result
                        });
                    }
                }
            },
                TriggerCondition.OwnerIsSource
                );

            Triggers.Add(GameEvent.PlayerPlayedCard, trigger);
            Triggers.Add(GameEvent.PlayerUsedCard, trigger);
            IsAutoInvoked = null;
        }
Example #14
0
        public GuZheng()
        {
            GuZhengCards = new List <Card>();
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(Game.CurrentGame.CurrentPlayer != p && Game.CurrentGame.CurrentPhase == TurnPhase.Discard); },
                (p, e, a) => { GuZhengCards.AddRange(a.Cards); },
                TriggerCondition.Global
                )
            {
                IsAutoNotify = false, AskForConfirmation = false
            };
            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(GuZhengCards.Count > 0 && Game.CurrentGame.CurrentPlayer != p); },
                Run,
                TriggerCondition.Global
                )
            {
                Priority = 1, AskForConfirmation = false, IsAutoNotify = false
            };
            var trigger3 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { GuZhengCards = new List <Card>(); },
                TriggerCondition.Global
                )
            {
                Priority = 0, AskForConfirmation = false, IsAutoNotify = false
            };

            Triggers.Add(GameEvent.CardsEnteredDiscardDeck, trigger);
            Triggers.Add(GameEvent.PhaseEndEvents[TurnPhase.Discard], trigger2);
            Triggers.Add(GameEvent.PhasePostEnd, trigger3);
        }
Example #15
0
        public HuaShen()
        {
            acquiredSkill = null;
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
                {
                    AcquireHeroCard(p, HeroTag);
                    AcquireHeroCard(p, HeroTag);
                    Run(p, e, a);
                },
                TriggerCondition.OwnerIsSource
            ) { AskForConfirmation = false };
            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return Game.CurrentGame.Decks[Owner, HuaShenDeck].Count > 0; },
                Run,
                TriggerCondition.OwnerIsSource
            );
            Triggers.Add(GameEvent.PlayerGameStartAction, trigger);
            Triggers.Add(GameEvent.PhaseProceedEvents[TurnPhase.BeforeStart], trigger2);
            Triggers.Add(GameEvent.PhasePostEnd, trigger2);

            IsAutoInvoked = false;
            DeckCleanup.Add(HuaShenDeck);
        }
Example #16
0
            public JiuShiPassive()
            {
                var trigger = new AutoNotifyPassiveSkillTrigger(
                    this,
                    (p, e, a) => { return((a as DamageEventArgs).ReadonlyCard[JiuShiUsable] == 1); },
                    (p, e, a) => { (a as DamageEventArgs).ReadonlyCard[JiuShiUsable] = 0; p.IsImprisoned = false; },
                    TriggerCondition.OwnerIsTarget
                    )
                {
                };

                Triggers.Add(GameEvent.DamageComputingFinished, trigger);
                var trigger2 = new AutoNotifyPassiveSkillTrigger(
                    this,
                    (p, e, a) => { return(p.IsImprisoned); },
                    (p, e, a) => { (a as DamageEventArgs).ReadonlyCard[JiuShiUsable] = 1; },
                    TriggerCondition.OwnerIsTarget
                    )
                {
                    IsAutoNotify = false, AskForConfirmation = false, Priority = int.MinValue
                };

                Triggers.Add(GameEvent.DamageInflicted, trigger2);
                IsAutoInvoked = null;
            }
Example #17
0
        public WangZun()
        {
            Trigger trigger = new AutoNotifyPassiveSkillTrigger
                              (
                this,
                (p, e, a) => { return(a.Source.Role == Role.Ruler); },
                (p, e, a) => { Game.CurrentGame.DrawCards(p, 1); a.Source[WangZunUsed] = 1; },
                TriggerCondition.Global
                              );

            Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.BeforeStart], trigger);
            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
            {
                var args = a as AdjustmentEventArgs;
                if (a.Source[WangZunUsed] == 1)
                {
                    args.AdjustmentAmount -= 1;
                    NotifySkillUse();
                }
            },
                TriggerCondition.Global
                )
            {
                IsAutoNotify = false, AskForConfirmation = false
            };

            Triggers.Add(GameEvent.PlayerHandCardCapacityAdjustment, trigger2);
            IsAutoInvoked = false;
        }
Example #18
0
        public KeJi()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(Game.CurrentGame.CurrentPhase == TurnPhase.Play && Game.CurrentGame.CurrentPlayer == p && a.Card != null && a.ReadonlyCard != null && a.ReadonlyCard.Type is Sha); },
                (p, e, a) => { p[KeJiFailed] = 1; },
                TriggerCondition.OwnerIsSource
                )
            {
                IsAutoNotify = false, AskForConfirmation = false
            };

            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(p[KeJiFailed] == 0 && !Game.CurrentGame.PhasesSkipped.Contains(TurnPhase.Discard)); },
                (p, e, a) => { Game.CurrentGame.PhasesSkipped.Add(TurnPhase.Discard); },
                TriggerCondition.OwnerIsSource
                );

            Triggers.Add(GameEvent.PlayerUsedCard, trigger);
            Triggers.Add(GameEvent.PlayerPlayedCard, trigger);

            Triggers.Add(GameEvent.PhaseOutEvents[TurnPhase.Play], trigger2);
            IsAutoInvoked = true;
        }
Example #19
0
        public BaZhen()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
            {
                foreach (var ac in Game.CurrentGame.Decks[p, DeckType.Equipment])
                {
                    if (ac.Type is Armor)
                    {
                        return(false);
                    }
                }
                return(a.Card.Type is Shan && Armor.ArmorIsValid(Owner, a.Targets[0], a.ReadonlyCard));
            },
                Run,
                TriggerCondition.OwnerIsSource
                )
            {
                IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PlayerRequireCard, trigger);
            IsEnforced = true;
        }
Example #20
0
        public DaWu()
        {
            dawuTargets = new List <Player>();
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(Game.CurrentGame.Decks[Owner, QiXing.QiXingDeck].Count > 0); },
                Run,
                TriggerCondition.OwnerIsSource
                )
            {
                IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.End], trigger);

            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { Game.CurrentGame.RegisterTrigger(GameEvent.PlayerIsDead, new DaWuOnDeath(p, this)); },
                TriggerCondition.OwnerIsSource
                )
            {
                AskForConfirmation = false, IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PlayerGameStartAction, trigger2);

            IsAutoInvoked = null;
        }
Example #21
0
 public BengHuai()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             int minHp = int.MaxValue;
             foreach (Player pl in Game.CurrentGame.AlivePlayers)
             {
                 if (pl.Health < minHp) minHp = pl.Health;
             }
             return p.Health > minHp;
         },
         (p, e, a) =>
         {
             int answer = 0;
             Game.CurrentGame.UiProxies[p].AskForMultipleChoice(new MultipleChoicePrompt("BengHuai"), new List<string>() { "TiLiZhi", "TiLiShangXian" }, out answer);
             if (answer == 0)
             {
                 Game.CurrentGame.LoseHealth(p, 1);
             }
             else
             {
                 Game.CurrentGame.LoseMaxHealth(p, 1);
             }
         },
         TriggerCondition.OwnerIsSource
     );
     Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.End], trigger);
     IsEnforced = true;
 }
Example #22
0
        public WuJi()
        {
            var trigger1 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return p[WuJiAwaken] == 0; },
                (p, e, a) => { p[WuJiCount] += (a as DamageEventArgs).Magnitude; },
                TriggerCondition.OwnerIsSource
            ) { IsAutoNotify = false };
            Triggers.Add(GameEvent.AfterDamageCaused, trigger1);

            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return p[WuJiCount] >= 3 && p[WuJiAwaken] == 0; },
                (p, e, a) =>
                {
                    p[WuJiAwaken]++;
                    p.MaxHealth++;
                    Game.CurrentGame.RecoverHealth(p, p, 1);
                    ISkill huxiao = p.LoseHeroSkill("HuXiao", HeroTag);
                    Trace.Assert(huxiao != null);
                    Game.CurrentGame.NotificationProxy.NotifyLogEvent(new LogEvent("WuJi", Owner, huxiao), new List<Player>() { Owner });
                },
                TriggerCondition.OwnerIsSource
            );
            Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.End], trigger2);
            IsAwakening = true;
        }
Example #23
0
 public TengJiaSkill()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { return a.ReadonlyCard != null && ((a.ReadonlyCard.Type is Aoe) || (a.ReadonlyCard.Type is RegularSha)) && a.ReadonlyCard[Armor.IgnoreAllArmor] == 0 && a.ReadonlyCard[Armor.IgnorePlayerArmor] != Owner.Id + 1; },
         (p, e, a) => { throw new TriggerResultException(TriggerResult.End); },
         TriggerCondition.OwnerIsTarget
     );
     var trigger2 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             var args = a as DamageEventArgs;
             return (DamageElement)args.Element == DamageElement.Fire && a.ReadonlyCard[Armor.IgnoreAllArmor] == 0 && a.ReadonlyCard[Armor.IgnorePlayerArmor] != Owner.Id + 1;
         },
         (p, e, a) =>
         {
             var args = a as DamageEventArgs;
             args.Magnitude++;
         },
         TriggerCondition.OwnerIsTarget
     );
     Triggers.Add(GameEvent.CardUsageTargetValidating, trigger);
     Triggers.Add(GameEvent.DamageInflicted, trigger2);
 }
Example #24
0
        public WeiDi()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return a.Source == ruler; },
                (p, e, a) =>
                {
                    bool canInvoke = true;
                    if (e == GameEvent.PlayerSkillSetChanged)
                    {
                        SkillSetChangedEventArgs arg = a as SkillSetChangedEventArgs;
                        canInvoke = arg.Skills.Any(sk => sk.IsRulerOnly);
                    }
                    if (canInvoke)
                    {
                        UninstallSkills();
                        InstallSkills(p, ruler);
                    }
                },
                TriggerCondition.Global
            ) { AskForConfirmation = false, IsAutoNotify = false };
            Triggers.Add(GameEvent.PlayerSkillSetChanged, trigger);
            Triggers.Add(GameEvent.PlayerChangedHero, trigger);

            IsEnforced = true;
            ruler = null;
            theSkills = new Dictionary<ISkill, ISkill>();
        }
Example #25
0
        public WeiMu()
        {
            Triggers.Add(GameEvent.PlayerCanBeTargeted, new RelayTrigger(
                             (p, e, a) =>
            {
                return(CardCategoryManager.IsCardCategory(a.Card.Type.Category, CardCategory.Tool) && a.Card.SuitColor == SuitColorType.Black);
            },
                             (p, e, a) =>
            {
                if (a.Card.Place.DeckType == DeckType.DelayedTools)
                {
                    NotifySkillUse();
                }
                throw new TriggerResultException(TriggerResult.Fail);
            },
                             TriggerCondition.OwnerIsTarget
                             ));

            var notify = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(a.Source != p && a.ReadonlyCard.Type is Aoe && a.ReadonlyCard.SuitColor == SuitColorType.Black); },
                (p, e, a) => { },
                TriggerCondition.Global
                );

            Triggers.Add(GameEvent.PlayerUsedCard, notify);
            IsEnforced = true;
        }
Example #26
0
            public QingLongYanYueSkill()
            {
                var trigger = new AutoNotifyPassiveSkillTrigger(
                    this,
                    Run,
                    TriggerCondition.OwnerIsSource
                    )
                {
                    IsAutoNotify = false, AskForConfirmation = false
                };

                Triggers.Add(ShaCancelling.PlayerShaTargetDodged, trigger);

                var notify = new AutoNotifyPassiveSkillTrigger(
                    this,
                    (p, e, a) => { return(a.ReadonlyCard[QingLongSha] == 1); },
                    (p, e, a) => { },
                    TriggerCondition.OwnerIsSource
                    )
                {
                    AskForConfirmation = false
                };

                Triggers.Add(GameEvent.PlayerUsedCard, notify);
            }
Example #27
0
File: DaWu.cs Project: pxoylngx/sgs
 public DaWu()
 {
     dawuTargets = new List<Player>();
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { foreach (var mark in dawuTargets) { mark[DaWuMark] = 0; } dawuTargets.Clear(); },
         TriggerCondition.OwnerIsSource
     ) { AskForConfirmation = false, IsAutoNotify = false };
     var trigger2 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { return Game.CurrentGame.Decks[Owner, QiXing.QiXingDeck].Count > 0; },
         Run,
         TriggerCondition.OwnerIsSource
     ) { IsAutoNotify = false };
     var trigger3 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             var args = a as DamageEventArgs;
             return (DamageElement)args.Element != DamageElement.Lightning && dawuTargets.Contains(args.Targets[0]);
         },
         (p, e, a) =>
         {
             throw new TriggerResultException(TriggerResult.End);
         },
         TriggerCondition.Global
     ) { AskForConfirmation = false };
     Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.Start], trigger);
     Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.End], trigger2);
     Triggers.Add(GameEvent.DamageInflicted, trigger3);
     IsAutoInvoked = false;
 }
Example #28
0
            public TanHuPassiveSkill()
            {
                var trigger = new AutoNotifyPassiveSkillTrigger(
                    this,
                    (p, e, a) => { return(p[TanHuWin[a.Targets[0]]] != 0); },
                    (p, e, a) => { var arg = a as AdjustmentEventArgs; arg.AdjustmentAmount = 1; },
                    TriggerCondition.OwnerIsSource
                    )
                {
                    AskForConfirmation = false, IsAutoNotify = false
                };

                Triggers.Add(GameEvent.PlayerDistanceOverride, trigger);

                var trigger2 = new AutoNotifyPassiveSkillTrigger(
                    this,
                    (p, e, a) => { return(p[TanHuWin[a.Targets[0]]] != 0); },
                    (p, e, a) =>
                {
                    if (a.ReadonlyCard.Type.IsCardCategory(CardCategory.ImmediateTool))
                    {
                        a.ReadonlyCard[WuXieKeJi.CannotBeCountered[a.Targets[0]]] = 1;
                    }
                },
                    TriggerCondition.OwnerIsSource
                    )
                {
                    AskForConfirmation = false, IsAutoNotify = false
                };

                Triggers.Add(GameEvent.CardUsageBeforeEffected, trigger2);
            }
Example #29
0
 public ZuiXiang()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         Run,
         TriggerCondition.OwnerIsSource
     ) { AskForConfirmation = false, IsAutoNotify = false };
     var trigger2 = new AutoNotifyPassiveSkillTrigger(
         this,
         CardUseStopper,
         TriggerCondition.OwnerIsSource
     ) { AskForConfirmation = false, IsAutoNotify = false };
     var trigger3 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { return a.ReadonlyCard != null; },
         CardEffectStopper,
         TriggerCondition.OwnerIsTarget
     ) { AskForConfirmation = false, IsAutoNotify = false };
     Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.Start], trigger);
     Triggers.Add(GameEvent.PlayerCanUseCard, trigger2);
     Triggers.Add(GameEvent.PlayerCanPlayCard, trigger2);
     Triggers.Add(GameEvent.CardUsageTargetValidating, trigger3);
     IsSingleUse = true;
     DeckCleanup.Add(zxDeck);
 }
Example #30
0
        public LieGong()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return((a.ReadonlyCard.Type is Sha) && Game.CurrentGame.CurrentPhase == TurnPhase.Play); },
                (p, e, a) =>
            {
                Dictionary <Player, int> map = new Dictionary <Player, int>();
                foreach (var target in a.Targets)
                {
                    if (!map.Keys.Contains(target))
                    {
                        map.Add(target, 0);
                    }
                    if ((Game.CurrentGame.Decks[target, DeckType.Hand].Count >= a.Source.Health || Game.CurrentGame.Decks[target, DeckType.Hand].Count <= a.Source[Player.AttackRange] + 1) &&
                        AskForSkillUse())
                    {
                        a.ReadonlyCard[ShaCancelling.CannotProvideShan[target]] |= (1 << map[target]);
                        NotifySkillUse(new List <Player>()
                        {
                            target
                        });
                    }
                    map[target]++;
                }
            },
                TriggerCondition.OwnerIsSource
                )
            {
                IsAutoNotify = false, AskForConfirmation = false
            };

            Triggers.Add(GameEvent.CardUsageTargetConfirmed, trigger);
            IsAutoInvoked = true;
        }
Example #31
0
 public WuMou()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { return CardCategoryManager.IsCardCategory(a.Card.Type.Category, CardCategory.ImmediateTool); },
         (p, e, a) =>
         {
             if (Owner[KuangBao.BaoNuMark] == 0)
             {
                 Game.CurrentGame.LoseHealth(Owner, 1);
             }
             else
             {
                 int answer = 0;
                 Owner.AskForMultipleChoice(
                     new MultipleChoicePrompt("WuMou"),
                     new List<OptionPrompt>() { new OptionPrompt("WuMouMark"), new OptionPrompt("WuMouHealth") },
                     out answer);
                 if (answer == 0)
                 {
                     Owner[KuangBao.BaoNuMark]--;
                 }
                 else
                 {
                     Game.CurrentGame.LoseHealth(Owner, 1);
                 }
             }
         },
         TriggerCondition.OwnerIsSource
     ) { Type = TriggerType.Skill };
     Triggers.Add(GameEvent.PlayerUsedCard, trigger);
     IsEnforced = true;
 }
Example #32
0
 public GuZheng()
 {
     GuZhengCards = new List<Card>();
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { return Game.CurrentGame.CurrentPlayer != p && Game.CurrentGame.CurrentPhase == TurnPhase.Discard; },
         (p, e, a) => { GuZhengCards.AddRange(a.Cards); },
         TriggerCondition.Global
     ) { IsAutoNotify = false, AskForConfirmation = false };
     var trigger2 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { return GuZhengCards.Count > 0 && Game.CurrentGame.CurrentPlayer != p; },
         Run,
         TriggerCondition.Global
     ) { Priority = 1 };
     var trigger3 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { GuZhengCards = new List<Card>(); },
         TriggerCondition.Global
     ) { Priority = 0, AskForConfirmation = false, IsAutoNotify = false };
     Triggers.Add(GameEvent.CardsEnteredDiscardDeck, trigger);
     Triggers.Add(GameEvent.PhaseEndEvents[TurnPhase.Discard], trigger2);
     Triggers.Add(GameEvent.PhasePostEnd, trigger3);
     IsAutoInvoked = null;
 }
Example #33
0
        public WeiDi()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return a.Source == ruler; },
                (p, e, a) =>
                {
                    bool nothingChanged = true;
                    foreach (var sk in a.Source.ActionableSkills)
                    {
                        if (sk.IsRulerOnly)
                        {
                            if (!theSkills.ContainsKey(sk))
                                nothingChanged = false;
                        }
                    }
                    foreach (var sk in theSkills)
                    {
                        if (!a.Source.ActionableSkills.Contains(sk.Key))
                            nothingChanged = false;
                    }
                    if (!nothingChanged)
                    {
                        UninstallSkills();
                        InstallSkills(p);
                    }
                },
                TriggerCondition.Global
            ) { AskForConfirmation = false, IsAutoNotify = false };
            Triggers.Add(GameEvent.PlayerSkillSetChanged, trigger);

            IsEnforced = true;
            ruler = null;
            theSkills = new Dictionary<ISkill, ISkill>();
        }
Example #34
0
        public LieGong()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return (a.ReadonlyCard.Type is Sha) && Game.CurrentGame.CurrentPhase == TurnPhase.Play; },
                (p, e, a) =>
                {
                    Dictionary<Player, int> map = new Dictionary<Player, int>();
                    foreach (var target in a.Targets)
                    {
                        if (!map.Keys.Contains(target)) map.Add(target, 0);
                        if ((Game.CurrentGame.Decks[target, DeckType.Hand].Count >= a.Source.Health || Game.CurrentGame.Decks[target, DeckType.Hand].Count <= a.Source[Player.AttackRange] + 1)
                         && AskForSkillUse())
                        {
                            a.ReadonlyCard[ShaCancelling.CannotProvideShan[target]] |= (1 << map[target]);
                            NotifySkillUse(new List<Player>() { target });
                        }
                        map[target]++;
                    }
                },
                TriggerCondition.OwnerIsSource
            ) { IsAutoNotify = false, AskForConfirmation = false };

            Triggers.Add(GameEvent.CardUsageTargetConfirmed, trigger);
            IsAutoInvoked = true;
        }
Example #35
0
        public DuanChang()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return a.Source != null; },
                (p, e, a) =>
                {
                    var h = a.Source.Hero;
                    foreach (ISkill sk in new List<ISkill>(a.Source.AdditionalSkills))
                    {
                        Game.CurrentGame.PlayerLoseSkill(a.Source, sk);
                    }

                    SkillSetChangedEventArgs args = new SkillSetChangedEventArgs();
                    args.Source = a.Source;
                    args.IsLosingSkill = true;
                    foreach (var sk in a.Source.Hero.Skills)
                    {
                        sk.Owner = null;
                        args.Skills.Clear();
                        args.Skills.Add(sk);
                        Game.CurrentGame.Emit(GameEvent.PlayerSkillSetChanged, args);
                    }
                    a.Source.Hero = new Hero(h.Name, h.IsMale, h.Allegiance, h.MaxHealth, new List<ISkill>());
                    a.Source[DuanChangStatus] = 1;
                },
                TriggerCondition.OwnerIsTarget
            );

            Triggers.Add(GameEvent.PlayerIsDead, trigger);
            IsEnforced = true;
        }
Example #36
0
        public YongSi()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { p[Player.DealAdjustment] += Game.CurrentGame.NumberOfAliveAllegiances; },
                TriggerCondition.OwnerIsSource
                );
            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
            {
                Game.CurrentGame.ForcePlayerDiscard(
                    p,
                    (pl, i) =>
                {
                    return(Game.CurrentGame.NumberOfAliveAllegiances - i);
                },
                    true);
            },
                TriggerCondition.OwnerIsSource
                );

            Triggers.Add(GameEvent.PhaseProceedEvents[TurnPhase.Draw], trigger);
            Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.Discard], trigger2);
            IsEnforced = true;
        }
Example #37
0
        public MouKui()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return a.ReadonlyCard.Type is Sha; },
                Run1,
                TriggerCondition.OwnerIsSource
            ) { AskForConfirmation = false, IsAutoNotify = false };
            Triggers.Add(GameEvent.CardUsageTargetConfirmed, trigger);

            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                Run2,
                TriggerCondition.OwnerIsSource
            ) { AskForConfirmation = false, IsAutoNotify = false };
            Triggers.Add(ShaCancelling.PlayerShaTargetDodged, trigger2);

            var trigger3 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
                {
                    if (a.ReadonlyCard[MouKuiCheck] == 0)
                    {
                        a.ReadonlyCard[MouKuiCheck] = 1;
                        return;
                    }
                    a.ReadonlyCard[MouKuiCheck[a.Targets[0]]] >>= 1;
                }
                ,
                TriggerCondition.OwnerIsSource
            ) { AskForConfirmation = false, IsAutoNotify = false };
            Triggers.Add(ShaCancelling.PlayerShaTargetShanModifier, trigger3);
            IsAutoInvoked = null;
        }
Example #38
0
        public RenXin()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(!a.Targets.Contains(p) && p.HandCards().Count > 0); },
                (p, e, a) =>
            {
                var target = a.Targets[0];
                NotifySkillUse(new List <Player>()
                {
                    target
                });
                Game.CurrentGame.HandleCardTransferToHand(p, target, new List <Card>(p.HandCards()));
                p.IsImprisoned = !p.IsImprisoned;
                Game.CurrentGame.RecoverHealth(p, target, 1);
            },
                TriggerCondition.Global
                )
            {
                IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PlayerIsAboutToDie, trigger);
            IsAutoInvoked = false;
        }
Example #39
0
        public BaoBian()
        {
            bbPaoXiao = null;
            bbShenSu  = null;
            bbTiaoXin = null;
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { Refresh(p); },
                TriggerCondition.OwnerIsTarget
                )
            {
                IsAutoNotify = false
            };

            Triggers.Add(GameEvent.AfterHealthChanged, trigger);
            IsEnforced = true;
            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { Refresh(p); },
                TriggerCondition.OwnerIsSource
                )
            {
                IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PlayerGameStartAction, trigger2);
        }
Example #40
0
        public WeiDi()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(a.Source == ruler && a.Source != Owner); },
                (p, e, a) =>
            {
                bool canInvoke = true;
                if (e == GameEvent.PlayerSkillSetChanged)
                {
                    SkillSetChangedEventArgs arg = a as SkillSetChangedEventArgs;
                    canInvoke = arg.Skills.Any(sk => sk.IsRulerOnly);
                }
                if (canInvoke)
                {
                    UninstallSkills();
                    InstallSkills(p, ruler);
                }
            },
                TriggerCondition.Global
                )
            {
                AskForConfirmation = false, IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PlayerSkillSetChanged, trigger);
            Triggers.Add(GameEvent.PlayerChangedHero, trigger);

            IsEnforced = true;
            ruler      = null;
            theSkills  = new Dictionary <ISkill, ISkill>();
        }
Example #41
0
 public ShenJi()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { return p.Weapon() == null; },
         (p, e, a) =>
         {
             ShaEventArgs args = (ShaEventArgs)a;
             if (args.TargetApproval[0] == false)
             {
                 return;
             }
             int moreTargetsToApprove = 2;
             int i = 1;
             while (moreTargetsToApprove > 0 && i < args.TargetApproval.Count)
             {
                 if (args.TargetApproval[i] == true)
                 {
                     i++;
                     continue;
                 }
                 args.TargetApproval[i] = true;
                 i++;
                 moreTargetsToApprove--;
             }
         },
         TriggerCondition.OwnerIsSource
     ) { IsAutoNotify = false, AskForConfirmation = false, Priority = SkillPriority.ShenJi };
     Triggers.Add(Sha.PlayerShaTargetValidation, trigger);
     IsAutoInvoked = null;
 }
Example #42
0
 public FangQuan()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             return !Game.CurrentGame.PhasesSkipped.Contains(TurnPhase.Play);
         },
         (p, e, a) =>
         {
             p[FangQuanUsed] = 1;
             Game.CurrentGame.PhasesSkipped.Add(TurnPhase.Play);
         },
         TriggerCondition.OwnerIsSource
     );
     var trigger2 = new AutoNotifyUsagePassiveSkillTrigger(
         this,
         (p, e, a) => { return p[FangQuanUsed] == 1; },
         (p, e, a, cards, players) =>
         {
             Game.CurrentGame.HandleCardDiscard(a.Source, cards);
             Game.CurrentGame.RegisterTrigger(GameEvent.PhasePostEnd, new FangQuanTrigger(Owner, players[0]));
         },
         TriggerCondition.OwnerIsSource,
         new FangQuanVerifier()
     ) { AskForConfirmation = false };
     Triggers.Add(GameEvent.PhaseOutEvents[TurnPhase.Draw], trigger);
     Triggers.Add(GameEvent.PhaseProceedEvents[TurnPhase.End], trigger2);
 }
Example #43
0
            public LiHuoPassive()
            {
                var trigger = new AutoNotifyPassiveSkillTrigger(
                    this,
                    (p, e, a) => { return(a.Card.Type is HuoSha); },
                    (p, e, a) =>
                {
                    ShaEventArgs args = (ShaEventArgs)a;
                    Trace.Assert(args != null);
                    if (args.Source != Owner)
                    {
                        return;
                    }
                    if (args.TargetApproval[0])
                    {
                        for (int i = 1; i < args.TargetApproval.Count; i++)
                        {
                            if (!args.TargetApproval[i])
                            {
                                args.TargetApproval[i] = true;
                                break;
                            }
                        }
                    }
                },
                    TriggerCondition.OwnerIsSource
                    )
                {
                    AskForConfirmation = false, IsAutoNotify = false, Priority = SkillPriority.LiHuo
                };

                Triggers.Add(Sha.PlayerShaTargetValidation, trigger);
            }
Example #44
0
 public ZhuGeLianNuSkill()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             return a.Source[Sha.NumberOfShaUsed] > 0 &&  a.Card.Type is Sha;
         },
         (p, e, a) => { },
         TriggerCondition.OwnerIsSource
     );
     var trigger2 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { throw new TriggerResultException(TriggerResult.Success); },
         TriggerCondition.OwnerIsSource
     ) { IsAutoNotify = false };
     var trigger3 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             ShaEventArgs args = (ShaEventArgs)a;
             args.TargetApproval[0] = true;
         },
         TriggerCondition.OwnerIsSource
     ) { IsAutoNotify = false, Priority = int.MaxValue, Type = TriggerType.Skill };
     Triggers.Add(GameEvent.PlayerUsedCard, trigger);
     Triggers.Add(Sha.PlayerNumberOfShaCheck, trigger2);
     Triggers.Add(Sha.PlayerShaTargetValidation, trigger3);
     IsEnforced = true;
 }
Example #45
0
        public KuiWei()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
            {
                int count = GetWeaponCount() + 2;
                Game.CurrentGame.DrawCards(p, count);
                p.IsImprisoned  = !p.IsImprisoned;
                p[KuiWeiStatus] = 1;
            },
                TriggerCondition.OwnerIsSource
                );

            Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.End], trigger);

            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
                { return(p[KuiWeiStatus] == 1); },
                KuiWeiDiscard,
                TriggerCondition.OwnerIsSource
                )
            {
                AskForConfirmation = false, IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.Draw], trigger2);
        }
Example #46
0
        public ShenJi()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(p.Weapon() == null); },
                (p, e, a) =>
            {
                ShaEventArgs args = (ShaEventArgs)a;
                if (args.TargetApproval[0] == false)
                {
                    return;
                }
                int moreTargetsToApprove = 2;
                int i = 1;
                while (moreTargetsToApprove > 0 && i < args.TargetApproval.Count)
                {
                    if (args.TargetApproval[i] == true)
                    {
                        i++;
                        continue;
                    }
                    args.TargetApproval[i] = true;
                    i++;
                    moreTargetsToApprove--;
                }
            },
                TriggerCondition.OwnerIsSource
                )
            {
                IsAutoNotify = false, AskForConfirmation = false, Priority = SkillPriority.ShenJi
            };

            Triggers.Add(Sha.PlayerShaTargetValidation, trigger);
            IsAutoInvoked = null;
        }
Example #47
0
 public ZhiJi()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) => { return p[ZhiJiAwaken] == 0 && Game.CurrentGame.Decks[p, DeckType.Hand].Count == 0; },
         (p, e, a) =>
         {
             p[ZhiJiAwaken] = 1;
             int answer = 0;
             Game.CurrentGame.UiProxies[p].AskForMultipleChoice(new MultipleChoicePrompt("ZhiJi"), new List<OptionPrompt>() { new OptionPrompt("MoPai"), new OptionPrompt("HuiFuTiLi") }, out answer);
             if (answer == 1)
             {
                 Game.CurrentGame.RecoverHealth(p, p, 1);
             }
             else
             {
                 Game.CurrentGame.DrawCards(p, 2);
             }
             Game.CurrentGame.LoseMaxHealth(p, 1);
             Game.CurrentGame.PlayerAcquireSkill(p, new GuanXing());
         },
         TriggerCondition.OwnerIsSource
     );
     Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.Start], trigger);
     IsAwakening = true;
 }
Example #48
0
        public WeiMu()
        {
            Triggers.Add(GameEvent.PlayerCanBeTargeted, new RelayTrigger(
                (p, e, a) =>
                {
                    return CardCategoryManager.IsCardCategory(a.Card.Type.Category, CardCategory.Tool) && a.Card.SuitColor == SuitColorType.Black;
                },
                (p, e, a) =>
                {
                    if (a.Card.Place.DeckType == DeckType.DelayedTools)
                    {
                        NotifySkillUse();
                    }
                    throw new TriggerResultException(TriggerResult.Fail);
                },
                TriggerCondition.OwnerIsTarget
                ));

            var notify = new AutoNotifyPassiveSkillTrigger(
                 this,
                 (p, e, a) => { return a.Source != p && a.ReadonlyCard.Type is Aoe && a.ReadonlyCard.SuitColor == SuitColorType.Black; },
                 (p, e, a) => { },
                 TriggerCondition.Global
             );
            Triggers.Add(GameEvent.PlayerUsedCard, notify);
            IsEnforced = true;
        }
Example #49
0
        public LianPo()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(Game.CurrentGame.PhasesOwner != null); },
                (p, e, a) => { p[LianPoCount]++; },
                TriggerCondition.OwnerIsSource
                )
            {
                AskForConfirmation = false, IsAutoNotify = false
            };
            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { int count = p[LianPoCount]; p[LianPoCount] = 0; return(count > 0); },
                (p, e, a) => { Game.CurrentGame.DoPlayer(p); },
                TriggerCondition.Global
                )
            {
                Priority = int.MinValue
            };

            Triggers.Add(GameEvent.PlayerIsDead, trigger);
            Triggers.Add(GameEvent.PhasePostEnd, trigger2);
            IsAutoInvoked = true;
        }
        public EnforcedCardTransformSkill()
        {
            Decks = new List<DeckType>();
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return a.Card != null && Decks.Contains(a.Card.Place.DeckType) && CardVerifier(a.Card); },
                (p, e, a) => { TransfromAction(p, a.Card); },
                TriggerCondition.OwnerIsSource
            ) { IsAutoNotify = false };
            Triggers.Add(GameEvent.EnforcedCardTransform, trigger);

            var notify = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
                {
                    Card card = a.Card as Card;
                    return card != null && Decks.Contains(card.HistoryPlace1.DeckType) && CardVerifier(Game.CurrentGame.OriginalCardSet[card.Id]);
                },
                (p, e, a) =>
                {
                    Game.CurrentGame.NotificationProxy.NotifyLogEvent(
                        new LogEvent("EnforcedCardTransform", Owner, Game.CurrentGame.OriginalCardSet[(a.Card as Card).Id], a.Card),
                        new List<Player> { Owner },
                        true,
                        false
                    );
                },
                TriggerCondition.OwnerIsSource
            );
            Triggers.Add(GameEvent.PlayerUsedCard, notify);
            IsEnforced = true;
        }
Example #51
0
        public WanSha()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(Game.CurrentGame.CurrentPlayer == Owner && a.Source != Owner && Game.CurrentGame.DyingPlayers.Count > 0 && Game.CurrentGame.DyingPlayers.Last() != a.Source && a.Card.Type is Tao); },
                (p, e, a) => { throw new TriggerResultException(TriggerResult.Fail); },
                TriggerCondition.Global
                )
            {
                IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PlayerCanUseCard, trigger);

            var notify = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(Game.CurrentGame.CurrentPlayer == Owner); },
                (p, e, a) => { NotifySkillUse(a.Targets); },
                TriggerCondition.Global
                )
            {
                IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PlayerIsAboutToDie, notify);
            IsEnforced = true;
        }
Example #52
0
 public JueCe()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             var ret = a.Cards.Any(c => c[Card.IsLastHandCard] == 1) && Game.CurrentGame.CurrentPlayer == p;
             if (ret)
             {
                 var card = a.Cards.FirstOrDefault(c => c[Card.IsLastHandCard] == 1);
                 if (card != null && card.HistoryPlace1.Player != null && !card.HistoryPlace1.Player.IsDead)
                     return true;
             }
             return false;
         },
         (p, e, a) =>
         {
             var card = a.Cards.FirstOrDefault(c => c[Card.IsLastHandCard] == 1);
             if (card != null && card.HistoryPlace1.Player != null)
                 Game.CurrentGame.DoDamage(p, card.HistoryPlace1.Player, 1, DamageElement.None, null, null);
         },
         TriggerCondition.Global
     ) {  };
     Triggers.Add(GameEvent.CardsLost, trigger);
     IsAutoInvoked = null;
 }
Example #53
0
        public WangZun()
        {
            Trigger trigger = new AutoNotifyPassiveSkillTrigger
            (
                this,
                (p, e, a) => { return a.Source.Role == Role.Ruler; },
                (p, e, a) => { Game.CurrentGame.DrawCards(p, 1); a.Source[WangZunUsed] = 1; },
                TriggerCondition.Global
            );

            Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.BeforeStart], trigger);
            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
                {
                    var args = a as AdjustmentEventArgs;
                    if (a.Source[WangZunUsed] == 1)
                    {
                        args.AdjustmentAmount -= 1;
                        NotifySkillUse();
                    }
                },
                TriggerCondition.Global
            ) { IsAutoNotify = false, AskForConfirmation = false };
            Triggers.Add(GameEvent.PlayerHandCardCapacityAdjustment, trigger2);
            IsAutoInvoked = false;
        }
Example #54
0
        public ShangShi()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                canTrigger,
                Run,
                TriggerCondition.OwnerIsTarget
                )
            {
                Priority = int.MinValue
            };
            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                canTrigger,
                Run,
                TriggerCondition.OwnerIsSource
                );

            Triggers.Add(GameEvent.CardsLost, trigger2);
            Triggers.Add(GameEvent.CardsAcquired, trigger2);
            Triggers.Add(GameEvent.AfterHealthChanged, trigger);
            Triggers.Add(GameEvent.PhaseOutEvents[TurnPhase.Discard], trigger2);
            Triggers.Add(GameEvent.PlayerSkillSetChanged, trigger2);
            IsAutoInvoked = true;
        }
Example #55
0
            public TianYiPassiveSkill()
            {
                TianYiResult = false;
                var winTrigger = new AutoNotifyPassiveSkillTrigger(
                    this,
                    (p, e, a) => { return(p[TianYiUsed] == 1 && TianYiResult); },
                    (p, e, a) =>
                {
                    ShaEventArgs args = (ShaEventArgs)a;
                    Trace.Assert(args != null);
                    if (args.TargetApproval[0])
                    {
                        for (int i = 1; i < args.TargetApproval.Count; i++)
                        {
                            if (!args.TargetApproval[i])
                            {
                                args.TargetApproval[i] = true;
                                break;
                            }
                        }
                    }
                    for (int i = 0; i < args.RangeApproval.Count; i++)
                    {
                        args.RangeApproval[i] = true;
                    }
                },
                    TriggerCondition.OwnerIsSource
                    )
                {
                    AskForConfirmation = false, IsAutoNotify = false
                };

                Triggers.Add(Sha.PlayerShaTargetValidation, winTrigger);
            }
Example #56
0
 public QingGangJianSkill()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             return a.ReadonlyCard != null && (a.ReadonlyCard.Type is Sha);
         },
         Run,
         TriggerCondition.OwnerIsSource
     );
     Triggers.Add(GameEvent.CardUsageTargetConfirmed, trigger);
     var trigger2 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             return a.ReadonlyCard != null && (a.ReadonlyCard.Type is Sha);
         },
         (p, e, a) => { var args = a as DamageEventArgs; args.ReadonlyCard[Armor.IgnorePlayerArmor[args.Targets[0]]]--;},
         TriggerCondition.OwnerIsSource
     ) { AskForConfirmation = false, IsAutoNotify = false, Priority = int.MinValue };
     Triggers.Add(GameEvent.DamageInflicted, trigger2);
     var trigger3 = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             return a.ReadonlyCard != null && (a.ReadonlyCard.Type is Sha);
         },
         (p, e, a) => { a.ReadonlyCard[Armor.IgnorePlayerArmor[a.Targets[0]]]--; },
         TriggerCondition.OwnerIsSource
     ) { AskForConfirmation = false, IsAutoNotify = false, Priority = int.MinValue };
     Triggers.Add(ShaCancelling.PlayerShaTargetDodged, trigger3);
     IsEnforced = true;
 }
Example #57
0
        public XueHen()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(Owner[FenYong.FenYongStatus] == 1); },
                Run,
                TriggerCondition.Global
                )
            {
                IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PhaseBeginEvents[TurnPhase.End], trigger);

            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(a.Card[XueHenSha] != 0); },
                (p, e, a) =>
            {
                ShaEventArgs args     = a as ShaEventArgs;
                args.RangeApproval[0] = true;
            },
                TriggerCondition.OwnerIsSource
                )
            {
                AskForConfirmation = false, IsAutoNotify = false
            };

            Triggers.Add(Sha.PlayerShaTargetValidation, trigger2);

            IsEnforced = true;
        }
Example #58
0
 public ShangShi()
 {
     var trigger = new AutoNotifyPassiveSkillTrigger(
         this,
         (p, e, a) =>
         {
             if (e != GameEvent.AfterHealthChanged && a.Source != p)
                 return false;
             if (e == GameEvent.CardsLost)
             {
                 if (!a.Cards.Any(c => c.HistoryPlace1.DeckType == DeckType.Hand))
                     return false;
             }
             if (e == GameEvent.CardsAcquired)
             {
                 if (!a.Cards.Any(c => c.Place.DeckType == DeckType.Hand))
                     return false;
             }
             if (e == GameEvent.AfterHealthChanged && (!a.Targets.Contains(p) || p.Health - (a as HealthChangedEventArgs).Delta < 0))
                 return false;
             return (Game.CurrentGame.CurrentPhaseEventIndex == 3 || Game.CurrentGame.CurrentPhase != TurnPhase.Discard) && p.HandCards().Count < p.LostHealth;
         },
         (p, e, a) => { Game.CurrentGame.DrawCards(p, p.LostHealth - p.HandCards().Count); },
         TriggerCondition.Global
     ) { Priority = int.MinValue};
     Triggers.Add(GameEvent.CardsLost, trigger);
     Triggers.Add(GameEvent.CardsAcquired, trigger);
     Triggers.Add(GameEvent.AfterHealthChanged, trigger);
     Triggers.Add(GameEvent.PhaseOutEvents[TurnPhase.Discard], trigger);
     Triggers.Add(GameEvent.PlayerSkillSetChanged, trigger);
     IsAutoInvoked = true;
 }
Example #59
0
        public YanHuo()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return true; },
                (p, e, a) =>
                {
                    int X = p.HandCards().Count + p.Equipments().Count;
                    Player opponent = Game.CurrentGame.Players.First(pl => pl != p);
                    Trace.Assert(opponent != null);
                    while (X-- > 0 && opponent.HandCards().Count + opponent.Equipments().Count > 0)
                    {
                        List<DeckPlace> decks = new List<DeckPlace>() { new DeckPlace(opponent, DeckType.Hand), new DeckPlace(opponent, DeckType.Equipment) };
                        List<List<Card>> answer;
                        if (!p.AskForCardChoice(new CardChoicePrompt("YanHuo"), decks, new List<string>() { "YanHuo" }, new List<int>() { 1 }, new RequireOneCardChoiceVerifier(true), out answer))
                        {
                            answer = new List<List<Card>>();
                            answer.Add(Game.CurrentGame.PickDefaultCardsFrom(decks));
                        }
                        Game.CurrentGame.HandleCardDiscard(opponent, answer[0]);
                    }
                },
                TriggerCondition.OwnerIsTarget
            );

            Triggers.Add(GameEvent.PlayerIsDead, trigger);
            IsAutoInvoked = true;
        }
Example #60
0
        public QuanJi()
        {
            var trigger = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
                {
                    return Game.CurrentGame.Decks[p, QuanDeck].Count > 0;
                },
                (p, e, a) =>
                {
                    var args = a as AdjustmentEventArgs;
                    args.AdjustmentAmount += Game.CurrentGame.Decks[p, QuanDeck].Count;
                },
                TriggerCondition.OwnerIsSource
            ) { AskForConfirmation = false, IsAutoNotify = false };

            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                Run,
                TriggerCondition.OwnerIsTarget
            ) { AskForConfirmation = false };

            Triggers.Add(GameEvent.PlayerHandCardCapacityAdjustment, trigger);
            Triggers.Add(GameEvent.AfterDamageInflicted, trigger2);
            IsAutoInvoked = true;
            ExtraCardsDeck = QuanDeck;
        }