Ejemplo n.º 1
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>();
        }
Ejemplo n.º 2
0
 public override void Run(GameEvent gameEvent, GameEventArgs eventArgs)
 {
     if (gameEvent == GameEvent.PlayerSkillSetChanged)
     {
         SkillSetChangedEventArgs args = eventArgs as SkillSetChangedEventArgs;
         Trace.Assert(args != null);
         if (!args.IsLosingSkill)
         {
             return;
         }
         foreach (var sk in args.Skills)
         {
             if (deckCleanup.ContainsKey(sk))
             {
                 foreach (var deck in deckCleanup[sk])
                 {
                     if (Game.CurrentGame.Decks[args.Source, deck].Count > 0)
                     {
                         List <Card> toDiscard = new List <Card>(Game.CurrentGame.Decks[args.Source, deck]);
                         if (toDiscard.Any(c => c.Type.IsCardCategory(CardCategory.Hero)))
                         {
                             //HuaShenDeck
                             if (Game.CurrentGame.IsClient)
                             {
                                 foreach (var hc in toDiscard)
                                 {
                                     hc.Id   = Card.UnknownHeroId;
                                     hc.Type = new UnknownHeroCardHandler();
                                 }
                             }
                             CardsMovement move = new CardsMovement();
                             move.Cards = toDiscard;
                             move.To    = new DeckPlace(null, DeckType.Heroes);
                             move.Helper.IsFakedMove = true;
                             Game.CurrentGame.MoveCards(move);
                         }
                         else
                         {
                             Game.CurrentGame.HandleCardDiscard(args.Source, toDiscard);
                         }
                     }
                 }
             }
             if (markCleanup.ContainsKey(sk))
             {
                 foreach (var player in Game.CurrentGame.Players)
                 {
                     foreach (var mark in markCleanup[sk])
                     {
                         player[mark] = 0;
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 3
0
        public ISkill LoseHeroSkill(string skillName, Hero heroTag)
        {
            Trace.Assert(heroTag != null && heroTag.Owner == this);
            ISkill skill = heroTag.LoseSkill(skillName);

            if (skill != null)
            {
                SkillSetChangedEventArgs arg = new SkillSetChangedEventArgs();
                arg.Source        = this;
                arg.IsLosingSkill = true;
                arg.Skills.Add(skill);
                Game.CurrentGame.Emit(GameEvent.PlayerSkillSetChanged, arg);
            }
            return(skill);
        }
Ejemplo n.º 4
0
        public void LoseAllHeroSkills(Hero h)
        {
            Trace.Assert(h.Owner == this);
            List <ISkill> skills = new List <ISkill>(h.Skills);

            h.LoseAllSkills();
            if (skills.Count > 0)
            {
                SkillSetChangedEventArgs arg = new SkillSetChangedEventArgs();
                arg.Source        = this;
                arg.IsLosingSkill = true;
                arg.Skills        = skills;
                Game.CurrentGame.Emit(GameEvent.PlayerSkillSetChanged, arg);
            }
        }
Ejemplo n.º 5
0
        public void PlayerLoseAdditionalSkill(Player p, ISkill skill, bool undeletable = false)
        {
            if (!undeletable && !p.AdditionalSkills.Contains(skill))
            {
                return;
            }
            p.LoseAdditionalSkill(skill, undeletable);
            SkillSetChangedEventArgs args = new SkillSetChangedEventArgs();

            args.Source = p;
            args.Skills.Add(skill);
            args.IsLosingSkill = true;
            Emit(GameEvent.PlayerSkillSetChanged, args);
            _ResetCards(p);
        }
Ejemplo n.º 6
0
        public void PlayerAcquireAdditionalSkill(Player p, ISkill skill, Hero tag, bool undeletable = false)
        {
            if (p.IsDead)
            {
                return;
            }
            p.AcquireAdditionalSkill(skill, tag, undeletable);
            SkillSetChangedEventArgs args = new SkillSetChangedEventArgs();

            args.Source = p;
            args.Skills.Add(skill);
            args.IsLosingSkill = false;
            Emit(GameEvent.PlayerSkillSetChanged, args);
            _ResetCards(p);
        }
Ejemplo n.º 7
0
        public void LoseAllHerosSkills()
        {
            Trace.Assert(Hero != null);
            List <ISkill> skills = new List <ISkill>(Hero.Skills);

            Hero.LoseAllSkills();
            if (Hero2 != null)
            {
                skills.AddRange(Hero2.Skills);
                Hero2.LoseAllSkills();
            }
            if (skills.Count > 0)
            {
                SkillSetChangedEventArgs arg = new SkillSetChangedEventArgs();
                arg.Source        = this;
                arg.IsLosingSkill = true;
                arg.Skills        = skills;
                Game.CurrentGame.Emit(GameEvent.PlayerSkillSetChanged, arg);
            }
        }
Ejemplo n.º 8
0
        public MouDuan()
        {
            mdJiAng   = new JiAng();
            mdQianXun = new QianXun();
            mdYingZi  = new YingZi();
            mdKeJi    = new KeJi();

            var trigger1 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) =>
            {
                if (e == GameEvent.PlayerSkillSetChanged)
                {
                    SkillSetChangedEventArgs args = a as SkillSetChangedEventArgs;
                    return(!args.IsLosingSkill && args.Skills.Contains(this));
                }
                return(true);
            },
                (p, e, a) =>
            {
                if (p.HandCards().Count > 2)
                {
                    p[WuMark] = 1;
                    Game.CurrentGame.PlayerAcquireAdditionalSkill(p, mdJiAng, HeroTag);
                    Game.CurrentGame.PlayerAcquireAdditionalSkill(p, mdQianXun, HeroTag);
                }
                else
                {
                    p[WenMark] = 1;
                    Game.CurrentGame.PlayerAcquireAdditionalSkill(p, mdYingZi, HeroTag);
                    Game.CurrentGame.PlayerAcquireAdditionalSkill(p, mdKeJi, HeroTag);
                }
            },
                TriggerCondition.OwnerIsSource
                )
            {
                AskForConfirmation = false, IsAutoNotify = false
            };

            Triggers.Add(GameEvent.PlayerGameStartAction, trigger1);
            Triggers.Add(GameEvent.PlayerSkillSetChanged, trigger1);

            var trigger2 = new AutoNotifyPassiveSkillTrigger(
                this,
                (p, e, a) => { return(p.HandCards().Count <= 2 && p[WuMark] != 0); },
                (p, e, a) =>
            {
                p[WuMark]  = 0;
                p[WenMark] = 1;
                Game.CurrentGame.PlayerLoseAdditionalSkill(p, mdJiAng);
                Game.CurrentGame.PlayerLoseAdditionalSkill(p, mdQianXun);
                Game.CurrentGame.PlayerAcquireAdditionalSkill(p, mdYingZi, HeroTag);
                Game.CurrentGame.PlayerAcquireAdditionalSkill(p, mdKeJi, HeroTag);
            },
                TriggerCondition.OwnerIsSource
                )
            {
                AskForConfirmation = false
            };

            Triggers.Add(GameEvent.CardsLost, trigger2);

            var trigger3 = new AutoNotifyUsagePassiveSkillTrigger(
                this,
                (p, e, a) => { return(p[WenMark] != 0); },
                (p, e, a, c, t) =>
            {
                Game.CurrentGame.HandleCardDiscard(p, c);
                if (p.HandCards().Count <= 2)
                {
                    return;
                }
                p[WuMark]  = 1;
                p[WenMark] = 0;
                Game.CurrentGame.PlayerLoseAdditionalSkill(p, mdYingZi);
                Game.CurrentGame.PlayerLoseAdditionalSkill(p, mdKeJi);
                Game.CurrentGame.PlayerAcquireAdditionalSkill(p, mdJiAng, HeroTag);
                Game.CurrentGame.PlayerAcquireAdditionalSkill(p, mdQianXun, HeroTag);
            },
                TriggerCondition.Global,
                new MouDuanVerifier()
                )
            {
                AskForConfirmation = false
            };

            Triggers.Add(GameEvent.PhaseBeforeStart, trigger3);

            IsAutoInvoked = null;
        }