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>(); }
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; } } } } } }
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); }
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); } }
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); }
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); }
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); } }
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; }