public PCardArch() : base("卡牌类成就") { TriggerList.Add(new PTrigger("吃掉电脑屏幕") { IsLocked = true, Time = PTime.EndGameTime, Effect = (PGame Game) => { Game.GetWinner().ForEach((PPlayer Player) => { if (Player.Area.HandCardArea.CardNumber >= 17) { Announce(Game, Player, "吃掉电脑屏幕"); } }); } }); TriggerList.Add(new PTrigger("海天一色") { IsLocked = true, Time = PTime.DieTime, Effect = (PGame Game) => { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PCard && ((PCard)InjureTag.InjureSource).Model is P_ManTiienKuoHai) { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); if (UseCardTag != null && UseCardTag.User != null && UseCardTag.Card.Equals(InjureTag.InjureSource)) { Announce(Game, UseCardTag.User, "海天一色"); } } } }); TriggerList.Add(new PTrigger("口蜜腹剑") { IsLocked = true, Time = PTime.DieTime, Effect = (PGame Game) => { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PCard && ((PCard)InjureTag.InjureSource).Model is P_HsiaoLiTsaangTao) { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); if (UseCardTag != null && UseCardTag.User != null && UseCardTag.Card.Equals(InjureTag.InjureSource)) { Announce(Game, UseCardTag.User, "口蜜腹剑"); } } } }); #region 出其不意 string Chuqby = "出其不意"; TriggerList.Add(new PTrigger("出其不意[初始化]") { IsLocked = true, Time = PPeriod.StartTurn.During, Effect = (PGame Game) => { Game.NowPlayer.Tags.CreateTag(new PUsedTag(Chuqby, 1)); } }); TriggerList.Add(new PTrigger("出其不意[使用暗度陈仓]") { IsLocked = true, Time = PTime.Card.EndSettleTime, Condition = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); return(UseCardTag.TargetList.Contains(Game.NowPlayer) && UseCardTag.Card.Model is P_AnTuCheevnTsaang); }, Effect = (PGame Game) => { Game.NowPlayer.Tags.FindPeekTag <PUsedTag>(PUsedTag.TagNamePrefix + Chuqby).Count = 1; } }); TriggerList.Add(new PTrigger("出其不意") { IsLocked = true, Time = PTime.PurchaseLandTime, Condition = (PGame Game) => { PPurchaseLandTag PurchaseLandTag = Game.TagManager.FindPeekTag <PPurchaseLandTag>(PPurchaseLandTag.TagName); return(PurchaseLandTag.Player.Equals(Game.NowPlayer) && PurchaseLandTag.Block.IsBusinessLand && Game.NowPlayer.Tags.FindPeekTag <PUsedTag>(PUsedTag.TagNamePrefix + Chuqby).Count > 0); }, Effect = (PGame Game) => { Announce(Game, Game.NowPlayer, "出其不意"); } }); #endregion #region 百足之虫 string Baizzc = "百足之虫"; MultiPlayerTriggerList.Add((PPlayer Player) => new PTrigger("百足之虫[初始化]") { IsLocked = true, Time = PTime.StartGameTime, Effect = (PGame Game) => { Player.Tags.CreateTag(new PUsedTag(Baizzc, 2)); } }); MultiPlayerTriggerList.Add((PPlayer Player) => new PTrigger("百足之虫[使用借尸还魂]") { IsLocked = true, Time = PTime.Card.EndSettleTime, Condition = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); return(UseCardTag.TargetList.Contains(Player) && UseCardTag.Card.Model is P_ChiehShihHuanHun); }, Effect = (PGame Game) => { PUsedTag UsedTag = Player.Tags.FindPeekTag <PUsedTag>(PUsedTag.TagNamePrefix + Baizzc); UsedTag.Count++; if (UsedTag.Count >= UsedTag.Limit) { Announce(Game, Player, Baizzc); } } }); #endregion #region 护花使者 string Huhsz = "护花使者"; MultiPlayerTriggerList.Add((PPlayer Player) => new PTrigger("护花使者[初始化]") { IsLocked = true, Time = PPeriod.StartTurn.Start, Effect = (PGame Game) => { Player.Tags.PopTag <PHuszTag>(PHuszTag.TagName); } }); TriggerList.Add(new PTrigger("护花使者[使用调虎离山]") { IsLocked = true, Time = PTime.Card.EndSettleTime, Condition = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); return(UseCardTag.Card.Model is P_TiaoHuLiShan); }, Effect = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); UseCardTag.TargetList.ForEach((PPlayer Player) => { if (!Player.Tags.ExistTag(PHuszTag.TagName) && Player.TeamIndex == UseCardTag.User.TeamIndex) { Player.Tags.CreateTag(new PHuszTag(UseCardTag.User)); } }); } }); TriggerList.Add(new PTrigger("护花使者") { IsLocked = true, Time = PTime.Injure.StartSettle, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return(InjureTag.ToPlayer != null && InjureTag.ToPlayer.Tags.ExistTag(PHuszTag.TagName)); }, Effect = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); Announce(Game, InjureTag.ToPlayer.Tags.FindPeekTag <PHuszTag>(PHuszTag.TagName).User, Huhsz); } }); #endregion TriggerList.Add(new PTrigger("搬石砸脚") { IsLocked = true, Time = PTime.Card.EndSettleTime, Effect = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); if (UseCardTag.Card.Model is P_PaaoChuanYinYoo && UseCardTag.TargetList.TrueForAll((PPlayer Player) => Player.TeamIndex == UseCardTag.User.TeamIndex)) { Announce(Game, UseCardTag.User, "搬石砸脚"); } } }); #region 水至清则无鱼 string Shuizqzwy = "水至清则无鱼"; TriggerList.Add(new PTrigger("水至清则无鱼[初始化]") { IsLocked = true, Time = PTime.Card.AfterEmitTargetTime, Effect = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); if (UseCardTag.Card.Model is P_HunShuiMoYoo) { UseCardTag.User.Tags.CreateTag(new PCardInjureTag(UseCardTag.Card, 0)); } } }); TriggerList.Add(new PTrigger("水至清则无鱼[增量计算]") { IsLocked = true, Time = PTime.Injure.EndSettle, Effect = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag.Injure > 0 && InjureTag.FromPlayer != null && InjureTag.InjureSource is PCard && ((PCard)InjureTag.InjureSource).Model is P_HunShuiMoYoo && InjureTag.FromPlayer.Tags.ExistTag(PCardInjureTag.TagName + P_HunShuiMoYoo.CardName)) { InjureTag.FromPlayer.Tags.FindPeekTag <PCardInjureTag>(PCardInjureTag.TagName + P_HunShuiMoYoo.CardName).TotalInjure += InjureTag.Injure; } } }); TriggerList.Add(new PTrigger("水至清则无鱼") { IsLocked = true, Time = PTime.Card.EndSettleTime, Effect = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); if (UseCardTag.Card.Model is P_HunShuiMoYoo && UseCardTag.User.Tags.ExistTag(PCardInjureTag.TagName + P_HunShuiMoYoo.CardName)) { PCardInjureTag CardInjureTag = UseCardTag.User.Tags.PopTag <PCardInjureTag>(PCardInjureTag.TagName + P_HunShuiMoYoo.CardName); if (CardInjureTag.TotalInjure >= 3500) { Announce(Game, UseCardTag.User, Shuizqzwy); } } } }); #endregion #region 逃出生天 string Taocst = "逃出生天"; TriggerList.Add(new PTrigger("逃出生天[初始化]") { IsLocked = true, Time = PPeriod.StartTurn.During, Effect = (PGame Game) => { Game.NowPlayer.Tags.CreateTag(new PUsedTag(Taocst, 1)); } }); TriggerList.Add(new PTrigger("逃出生天[使用金蝉脱壳]") { IsLocked = true, Time = PTime.Card.EndSettleTime, Condition = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); return(Game.NowPlayer.Equals(UseCardTag.User) && UseCardTag.Card.Model is P_ChinChaanToowChiiao); }, Effect = (PGame Game) => { Game.NowPlayer.Tags.FindPeekTag <PUsedTag>(PUsedTag.TagNamePrefix + Taocst).Count = 1; } }); TriggerList.Add(new PTrigger("逃出生天") { IsLocked = true, Time = PPeriod.SettleStage.Before, Condition = (PGame Game) => { return(Game.NowPlayer.Tags.FindPeekTag <PUsedTag>(PUsedTag.TagNamePrefix + Taocst).Count > 0 && (Game.NowPlayer.Position.GetMoneyStopPercent > 0 || Game.NowPlayer.Position.GetMoneyStopSolid > 0)); }, Effect = (PGame Game) => { Announce(Game, Game.NowPlayer, Taocst); } }); #endregion #region 无处可逃 string Wuckt = "无处可逃"; TriggerList.Add(new PTrigger("无处可逃[初始化]") { IsLocked = true, Time = PTime.Card.AfterEmitTargetTime, Effect = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); if (UseCardTag.Card.Model is P_KuanMevnChoTsev) { UseCardTag.User.Tags.CreateTag(new PCardInjureTag(UseCardTag.Card, 0)); } } }); TriggerList.Add(new PTrigger("无处可逃[增量计算]") { IsLocked = true, Time = PTime.Injure.EndSettle, Effect = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag.Injure > 0 && InjureTag.FromPlayer != null && InjureTag.InjureSource is PCard && ((PCard)InjureTag.InjureSource).Model is P_KuanMevnChoTsev && InjureTag.FromPlayer.Tags.ExistTag(PCardInjureTag.TagName + P_KuanMevnChoTsev.CardName)) { InjureTag.FromPlayer.Tags.FindPeekTag <PCardInjureTag>(PCardInjureTag.TagName + P_KuanMevnChoTsev.CardName).TotalInjure += InjureTag.Injure; } } }); TriggerList.Add(new PTrigger("无处可逃") { IsLocked = true, Time = PTime.Card.EndSettleTime, Effect = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); if (UseCardTag.Card.Model is P_KuanMevnChoTsev && UseCardTag.User.Tags.ExistTag(PCardInjureTag.TagName + P_KuanMevnChoTsev.CardName)) { PCardInjureTag CardInjureTag = UseCardTag.User.Tags.PopTag <PCardInjureTag>(PCardInjureTag.TagName + P_KuanMevnChoTsev.CardName); if (CardInjureTag.TotalInjure >= 7000) { Announce(Game, UseCardTag.User, Wuckt); } } } }); #endregion TriggerList.Add(new PTrigger("不安好心") { IsLocked = true, Time = PTime.DieTime, Effect = (PGame Game) => { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PCard && ((PCard)InjureTag.InjureSource).Model is P_ChiaTaoFaKuo) { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); if (UseCardTag != null && UseCardTag.User != null && UseCardTag.Card.Equals(InjureTag.InjureSource)) { Announce(Game, UseCardTag.User, "不安好心"); } } } }); #region 装疯卖傻 string Zhuangfms = "装疯卖傻"; MultiPlayerTriggerList.Add((PPlayer Player) => new PTrigger("装疯卖傻[初始化]") { IsLocked = true, Time = PPeriod.StartTurn.Start, Effect = (PGame Game) => { Player.Tags.PopTag <PZhuangfmsTag>(PZhuangfmsTag.TagName); } }); TriggerList.Add(new PTrigger("装疯卖傻[使用假痴不癫]") { IsLocked = true, Time = PTime.Card.EndSettleTime, Condition = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); return(UseCardTag.Card.Model is P_ChiaChiihPuTien); }, Effect = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); UseCardTag.TargetList.ForEach((PPlayer Player) => { if (!Player.Tags.ExistTag(PZhuangfmsTag.TagName) && Player.TeamIndex == UseCardTag.User.TeamIndex) { Player.Tags.CreateTag(new PZhuangfmsTag(UseCardTag.User)); } }); } }); TriggerList.Add(new PTrigger("装疯卖傻") { IsLocked = true, Time = PTime.Injure.StartSettle, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return(InjureTag.ToPlayer != null && InjureTag.ToPlayer.Tags.ExistTag(PZhuangfmsTag.TagName)); }, Effect = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); Announce(Game, InjureTag.ToPlayer.Tags.FindPeekTag <PZhuangfmsTag>(PZhuangfmsTag.TagName).User, Zhuangfms); } }); #endregion #region 病相怜 TriggerList.Add(new PTrigger("同病相怜") { IsLocked = true, Time = PTime.Injure.AcceptInjure, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return(InjureTag.ToPlayer != null && InjureTag.Injure > 0 && InjureTag.ToPlayer.Tags.ExistTag(PTag.LockedTag.Name) && InjureTag.InjureSource is PCard && ((PCard)InjureTag.InjureSource).Model is P_ShanTien); }, Effect = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); Announce(Game, InjureTag.ToPlayer, "同病相怜"); } }); #endregion #region 谁是赢家 string Uzuyj = "谁是赢家"; MultiPlayerTriggerList.Add((PPlayer Player) => new PTrigger("谁是赢家[初始化]") { IsLocked = true, Time = PPeriod.StartTurn.Start, Effect = (PGame Game) => { Player.Tags.PopTag <PTag>(Uzuyj); } }); TriggerList.Add(new PTrigger("谁是赢家[使用走为上计]") { IsLocked = true, Time = PTime.Card.EndSettleTime, Condition = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); return(UseCardTag.Card.Model is P_TsouWeiShangChi); }, Effect = (PGame Game) => { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); UseCardTag.TargetList.ForEach((PPlayer Player) => { if (!Player.Tags.ExistTag(Uzuyj)) { Player.Tags.CreateTag(new PTag(Uzuyj) { Visible = false }); } }); } }); TriggerList.Add(new PTrigger("谁是赢家") { IsLocked = true, Time = PTime.EndGameTime, Effect = (PGame Game) => { Game.GetWinner().ForEach((PPlayer Player) => { if (Player.Tags.ExistTag(Uzuyj)) { Announce(Game, Player, Uzuyj); } }); } }); #endregion }
public P_JeanneDarc() : base("贞德") { Sex = PSex.Female; Age = PAge.Medieval; Index = 30; Cost = 40; Tips = "定位:辅助\n" + "难度:简单\n" + "史实:法国民族英雄,天主教圣人,被称为“奥尔良的圣女”。在英法百年战争中,她带领法国军队对抗英军的入侵,屡战屡胜,扭转了战争的局势。\n" + "攻略:\n-"; PSkill ShengNv = new PSkill("圣女"); SkillList.Add(ShengNv .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(ShengNv.Name) { IsLocked = true, Player = Player, Time = PTime.EnterDyingTime, AIPriority = 5, Condition = (PGame Game) => { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); return Player.Area.OwnerCardNumber > 0 && DyingTag.Source != null && DyingTag.Source is PBlock; }, AICondition = (PGame Game) => { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); if (DyingTag.Killer.General is P_LvZhi) { return false; } if (DyingTag.Player.TeamIndex == Player.TeamIndex) { if (Player.Equals(DyingTag.Player)) { return true; } else { if (DyingTag.Player.Money <= -10000) { return false; } if (Player.Money > 5000) { return true; } else { return Player.Area.OwnerCardNumber <= 3; } } } else { return false; } }, Effect = (PGame Game) => { ShengNv.AnnouceUseSkill(Player); PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); Game.CardManager.ThrowAll(Player.Area); PCard Card = new P_ChiehTaoShaJevn().Instantiate(); Card.Point = 0; PTrigger Trigger = Card.Model.MoveInHandTriggerList.Find((Func <PPlayer, PCard, PTrigger> TriggerGenerator) => TriggerGenerator(DyingTag.Player, Card).Time.Equals(PTime.EnterDyingTime))?.Invoke(DyingTag.Player, Card); if (Trigger != null) { Game.Logic.StartSettle(new PSettle("圣女[借尸还魂]", Trigger.Effect)); Game.LoseMoney(Player, 5000); if (!Player.Equals(DyingTag.Player)) { Game.GetCard(DyingTag.Player); } } } }); })); }
// 宣布一个时机的到来 public void CallTime(PTime Time) { PLogger.Log("时机到来:" + Time.Name); if (Time.IsPeroidTime() && EndTurnDirectly) { PLogger.Log("阶段立刻结束"); return; } List <PPlayer> Sequence = SettleSequence(); List <PTrigger> ValidTriggerList; List <PTrigger> AlreadyTriggerList = new List <PTrigger>(); foreach (PPlayer Judger in Sequence) { AlreadyTriggerList.Clear(); PLogger.Log("开始启动" + (Judger == null ? "null" : Judger.Name) + "的响应"); while ((ValidTriggerList = TriggerList.FindAll((PTrigger Trigger) => { if (Trigger.Time.Equals(Time) && Trigger.Player == Judger && !AlreadyTriggerList.Contains(Trigger) && (Judger == null || Judger.IsAlive)) { PLogger.Log(" 执行判定:" + Trigger.Name); bool Condition = Trigger.Condition(Game); bool AiCondition = Condition && (Judger == null || Judger.IsUser || Trigger.AICondition(Game)); return(AiCondition); } else { return(false); } })).Count > 0) { PTrigger ChosenTrigger = null; if (Judger == null || Judger.IsAI) { ChosenTrigger = PMath.Max(ValidTriggerList, (PTrigger Trigger) => Trigger.AIPriority).Key; } else { if (ValidTriggerList.Count == 1 && ValidTriggerList[0].IsLocked) { ChosenTrigger = ValidTriggerList[0]; } else { string[] TriggerNames = ValidTriggerList.ConvertAll((PTrigger Trigger) => Trigger.Name + (Trigger.IsLocked ? "(锁定)" : string.Empty)).ToArray(); if (ValidTriggerList.TrueForAll((PTrigger Trigger) => !Trigger.IsLocked)) { TriggerNames = TriggerNames.Concat(new string[] { "取消" }).ToArray(); } int ChosenResult = PNetworkManager.NetworkServer.ChooseManager.Ask(Judger, "选择以下效果发动", TriggerNames); if (ChosenResult < ValidTriggerList.Count) { ChosenTrigger = ValidTriggerList[ChosenResult]; } } } if (ChosenTrigger != null) { Game.Logic.StartSettle(new PSettle("于[" + Time.Name + "]触发[" + ChosenTrigger.Name + "]", (PGame Game) => { ChosenTrigger.Effect(Game); })); if (!ChosenTrigger.CanRepeat) { AlreadyTriggerList.Add(ChosenTrigger); } if (Time.IsPeroidTime() && EndTurnDirectly) { PLogger.Log("阶段立刻结束"); return; } if (Time.Equals(PTime.EnterDyingTime)) { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); if (DyingTag.Player != null && DyingTag.Player.Money > 0) { PLogger.Log("脱离濒死状态"); return; } } } else { break; } } } PLogger.Log("时机结束:" + Time.Name); }
public P_LvZhi() : base("吕雉") { Sex = PSex.Female; Age = PAge.Classic; Index = 29; Cost = 30; NewGeneral = true; Tips = "定位:攻击\n" + "难度:简单\n" + "史实:汉高祖刘邦的皇后,惠帝、二少帝时的皇太后。统治时期实行与民休息的政策,为文景之治奠定了基础。\n" + "攻略:\n-"; PSkill ZhenSha = new PSkill("鸩杀") { Initiative = true }; PPlayer ZhenShaTarget(PGame Game, PPlayer Player) { List <PPlayer> PossibleTargets = Game.AlivePlayers(Player).FindAll((PPlayer _Player) => _Player.Distance(Player) <= 1); PPlayer Target = PMath.Max(PossibleTargets, (PPlayer _Player) => { int InjureValue = PAiTargetChooser.InjureExpect(Game, Player, Player, _Player, ZhenShaInjure, ZhenSha); if (_Player.TeamIndex == Player.TeamIndex) { KeyValuePair <PCard, int> MaxValueCard = PAiCardExpectation.FindMostValuable(Game, _Player, Player, true, false, false, true); int MaxValue = MaxValueCard.Value - MaxValueCard.Key.AIInHandExpectation(Game, Player); return(MaxValue + InjureValue); } else { KeyValuePair <PCard, int> MinValueCard = PAiCardExpectation.FindLeastValuable(Game, _Player, Player, true, false, false, true); int MinValue = MinValueCard.Value + MinValueCard.Key.AIInHandExpectation(Game, Player); return(-MinValue + InjureValue); } }, true).Key; return(Target); } SkillList.Add(ZhenSha .AnnounceTurnOnce() .AddTimeTrigger( new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(ZhenSha.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 40, CanRepeat = true, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.RemainLimit(ZhenSha.Name) && Player.Area.HandCardArea.CardNumber > 0 && Game.AlivePlayers(Player).Exists((PPlayer _Player) => _Player.Distance(Player) <= 1); }, AICondition = (PGame Game) => { return ZhenShaTarget(Game, Player) != null; }, Effect = (PGame Game) => { ZhenSha.AnnouceUseSkill(Player); PPlayer Target = null; if (Player.IsAI) { Target = ZhenShaTarget(Game, Player); } else { Target = PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayer(Player, (PGame _Game, PPlayer _Player) => _Player.Distance(Player) <= 1 && !_Player.Equals(Player), ZhenSha.Name, true); } if (Target != null) { Game.GiveCardTo(Player, Target, true, false); Game.Injure(Player, Target, 1500, ZhenSha); ZhenSha.DeclareUse(Player); } } }); })); PSkill XuMou = new PSkill("蓄谋") { Lock = true }; SkillList.Add(XuMou .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(XuMou.Name) { IsLocked = true, Player = Player, Time = PTime.LeaveDyingTime, AIPriority = 100, Condition = (PGame Game) => { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); return Player.Equals(DyingTag.Killer) && !Player.Equals(DyingTag.Player); }, Effect = (PGame Game) => { XuMou.AnnouceUseSkill(Player); PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); DyingTag.Player.Money = 0; Game.Die(DyingTag.Player, DyingTag.Killer); } }); })); }
public PLandArch() : base("土地类成就") { TriggerList.Add(new PTrigger("地产大亨") { IsLocked = true, Time = PTime.EndGameTime, Effect = (PGame Game) => { Game.GetWinner().ForEach((PPlayer Player) => { if (Game.Map.BlockList.FindAll((PBlock Block) => Player.Equals(Block.Lord)).Count >= 15) { Announce(Game, Player, "地产大亨"); } }); } }); TriggerList.Add(new PTrigger("大包工头") { IsLocked = true, Time = PTime.EndGameTime, Effect = (PGame Game) => { Game.GetWinner().ForEach((PPlayer Player) => { if (PMath.Sum(Game.Map.BlockList.FindAll((PBlock Block) => Player.Equals(Block.Lord)).ConvertAll((PBlock Block) => (double)Block.HouseNumber)) >= 30) { Announce(Game, Player, "大包工头"); } }); } }); TriggerList.Add(new PTrigger("双11剁手") { IsLocked = true, Time = PTime.DieTime, Effect = (PGame Game) => { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).BusinessType.Equals(PBusinessType.ShoppingCenter)) { Announce(Game, DyingTag.Player, "双11剁手"); } } }); TriggerList.Add(new PTrigger("化学爆炸") { IsLocked = true, Time = PTime.DieTime, Effect = (PGame Game) => { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).BusinessType.Equals(PBusinessType.Institute)) { Announce(Game, DyingTag.Player, "化学爆炸"); } } }); TriggerList.Add(new PTrigger("舍身饲虎") { IsLocked = true, Time = PTime.DieTime, Effect = (PGame Game) => { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).BusinessType.Equals(PBusinessType.Park)) { Announce(Game, DyingTag.Player, "舍身饲虎"); } } }); TriggerList.Add(new PTrigger("撞墙") { IsLocked = true, Time = PTime.DieTime, Effect = (PGame Game) => { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).BusinessType.Equals(PBusinessType.Castle)) { Announce(Game, DyingTag.Player, "撞墙"); } } }); TriggerList.Add(new PTrigger("卖身") { IsLocked = true, Time = PTime.DieTime, Effect = (PGame Game) => { PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).BusinessType.Equals(PBusinessType.Pawnshop)) { Announce(Game, DyingTag.Player, "卖身"); } } }); TriggerList.Add(new PTrigger("连锁商城") { IsLocked = true, Time = PTime.EndGameTime, Effect = (PGame Game) => { Game.GetWinner().ForEach((PPlayer Player) => { if (Game.Map.BlockList.FindAll((PBlock Block) => Player.Equals(Block.Lord) && Block.BusinessType.Equals(PBusinessType.ShoppingCenter)).Count >= 3) { Announce(Game, Player, "连锁商城"); } }); } }); TriggerList.Add(new PTrigger("5A级景区") { IsLocked = true, Time = PTime.EndGameTime, Effect = (PGame Game) => { Game.GetWinner().ForEach((PPlayer Player) => { if (Game.Map.BlockList.Exists((PBlock Block) => Player.Equals(Block.Lord) && Block.BusinessType.Equals(PBusinessType.Park) && Block.HouseNumber >= 5)) { Announce(Game, Player, "5A级景区"); } }); } }); TriggerList.Add(new PTrigger("十三太堡") { IsLocked = true, Time = PTime.EndGameTime, Effect = (PGame Game) => { Game.GetWinner().ForEach((PPlayer Player) => { if (Game.Map.BlockList.Exists((PBlock Block) => Player.Equals(Block.Lord) && Block.BusinessType.Equals(PBusinessType.Castle) && Block.HouseNumber >= 13)) { Announce(Game, Player, "十三太堡"); } }); } }); }