public void LoseMoney(PPlayer Player, int Money, bool IsInjure = false) { PLoseMoneyTag LoseMoneyTag = Monitor.CallTime(PTime.LoseMoneyTime, new PLoseMoneyTag(Player, Money, IsInjure)); PPlayer LoseMoneyPlayer = LoseMoneyTag.Player; int MoneyCount = LoseMoneyTag.Money; if (LoseMoneyPlayer != null && LoseMoneyPlayer.IsAlive && MoneyCount > 0) { LoseMoneyPlayer.Money -= MoneyCount; PNetworkManager.NetworkServer.TellClients(new PPushTextOrder(LoseMoneyPlayer.Index.ToString(), "-" + MoneyCount.ToString(), LoseMoneyTag.IsInjure ? PPushType.Injure.Name : PPushType.Throw.Name)); PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder(LoseMoneyPlayer.Name + "失去金钱" + MoneyCount.ToString())); PNetworkManager.NetworkServer.TellClients(new PRefreshMoneyOrder(LoseMoneyPlayer)); if (LoseMoneyPlayer.Money <= 0) { if (IsInjure) { PInjureTag InjureTag = TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); Dying(LoseMoneyPlayer, InjureTag.FromPlayer, InjureTag.InjureSource); } else { Dying(LoseMoneyPlayer, null, null); } } } }
public P_LoFevngKung() : base(CardName, PCardType.WeaponCard) { Point = 5; Index = 47; foreach (PTime Time in new PTime[] { PTime.Injure.EmitInjure }) { MoveInEquipTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.FromPlayer) && InjureTag.Injure > 0 && InjureTag.ToPlayer != null && InjureTag.ToPlayer.Area.EquipmentCardArea.CardNumber > 0; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return InjureTag.ToPlayer.TeamIndex != Player.TeamIndex; }, Effect = (PGame Game) => { AnnouceUseEquipmentSkill(Player); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); Game.ThrowCard(Player, InjureTag.ToPlayer, false); } }); }); } }
public P_KuTingTao() : base(CardName, PCardType.WeaponCard) { Point = 2; Index = 44; foreach (PTime Time in new PTime[] { PTime.Injure.EmitInjure }) { MoveInEquipTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = true, Player = Player, Time = Time, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.FromPlayer) && InjureTag.Injure > 0 && InjureTag.ToPlayer != null && InjureTag.ToPlayer.Area.HandCardArea.CardNumber == 0 && InjureTag.InjureSource is PBlock; }, Effect = (PGame Game ) => { AnnouceUseEquipmentSkill(Player); Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName).Injure *= 2; } }); }); } }
public P_NanManHsiang() : base(CardName, PCardType.TrafficCard) { Point = 5; Index = 59; foreach (PTime Time in new PTime[] { PTime.Injure.StartSettle }) { MoveInEquipTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = true, Player = Player, Time = Time, AIPriority = 100, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.ToPlayer) && InjureTag.Injure > 0 && InjureTag.Injure <= 1000; }, Effect = (PGame Game ) => { AnnouceUseEquipmentSkill(Player); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); InjureTag.Injure = 0; } }); }); } }
public P_PaiHuaChooon() : base(CardName, PCardType.DefensorCard) { Point = 2; Index = 50; foreach (PTime Time in new PTime[] { PTime.Injure.AcceptInjure }) { MoveInEquipTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 150, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.ToPlayer) && InjureTag.Injure > 0 && InjureTag.FromPlayer != null && !InjureTag.FromPlayer.Sex.Equals(Player.Sex); }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return InjureTag.Injure > 500; }, Effect = (PGame Game ) => { AnnouceUseEquipmentSkill(Player); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); InjureTag.Injure = PMath.Percent(InjureTag.Injure, 50); } }); }); } }
public PLockTriggerInstaller() : base("连环传递伤害") { TriggerList.Add(new PTrigger("连环传递伤害") { IsLocked = true, Time = PTime.Injure.EndSettle, 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)); }, Effect = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); InjureTag.ToPlayer.Tags.PopTag <PTag>(PTag.LockedTag.Name); bool Invoke = false; Game.Traverse((PPlayer _Player) => { if (!Invoke && _Player.Tags.ExistTag(PTag.LockedTag.Name)) { Invoke = true; PNetworkManager.NetworkServer.TellClients(new PPushTextOrder(_Player.Index.ToString(), "触发连锁伤害", PPushType.Injure.Name)); Game.Injure(InjureTag.FromPlayer, _Player, InjureTag.Injure, InjureTag.InjureSource); } }, Game.GetNextPlayer(InjureTag.ToPlayer)); } }); }
public P_BaiQi() : base("白起") { Sex = PSex.Male; Age = PAge.Classic; Index = 9; Cost = 25; Tips = "定位:爆发\n" + "难度:简单\n" + "史实:战国时期秦国名将,“战国四大名将”之一,曾在伊阙之战、长平之战中大败三晋军队,歼敌数十万,功封武安君。\n" + "攻略:\n白起是一个强制命中系武将,白起的存在使得对方无法通过【李代桃僵】、【指桑骂槐】一类的牌免除伤害,或通过【八卦阵】、【龙胆】等方式减少伤害,而必须硬吃下伤害的100%(通常这个数字比伤害值高)。随之带来的损失则是收费地的地价永久性减少,很多时候这是不值的,但在必杀一击上,白起一点都不会含糊。"; PSkill CanSha = new PSkill("残杀"); SkillList.Add(CanSha .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(CanSha.Name) { IsLocked = false, Player = Player, Time = PTime.Injure.EmitInjure, AIPriority = 100, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return InjureTag.Injure > 0 && InjureTag.ToPlayer != null && Player.Equals(InjureTag.FromPlayer) && InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).Price >= 1000; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag.ToPlayer.TeamIndex != Player.TeamIndex) { int Benefit = PMath.Percent(InjureTag.Injure, 100); if (Benefit + InjureTag.Injure >= InjureTag.ToPlayer.Money) { // 一击必杀 return true; } if (Benefit >= 2000) { PBlock Source = (PBlock)InjureTag.InjureSource; int Cost = 1000 + PAiMapAnalyzer.HouseValue(Game, Player, Source) * Source.HouseNumber * 1000 / Source.Price; if (Cost < Benefit) { return true; } } } return false; }, Effect = (PGame Game) => { CanSha.AnnouceUseSkill(Player); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PBlock Source = (PBlock)InjureTag.InjureSource; Source.Price -= 1000; PNetworkManager.NetworkServer.TellClients(new PRefreshBlockBasicOrder(Source)); Game.LoseMoney(InjureTag.ToPlayer, PMath.Percent(InjureTag.Injure, 100)); } }); })); }
public P_FanKeevWeiChu() : base(CardName) { Point = 5; Index = 30; foreach (PTime Time in new PTime[] { PTime.Injure.AfterAcceptInjure }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 100, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (!(InjureTag.InjureSource is PBlock)) { return false; } else { PBlock Block = (PBlock)InjureTag.InjureSource; return Player.Equals(InjureTag.ToPlayer) && InjureTag.Injure > 0 && InjureTag.InjureSource != null && !Player.Equals(Block.Lord) && Block.HouseNumber == 1; } }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PBlock Block = (PBlock)InjureTag.InjureSource; return Player.TeamIndex != Block.Lord.TeamIndex; }, Effect = (PGame Game) => { List <PPlayer> Targets = new List <PPlayer>(); Game.Monitor.CallTime(PTime.Card.AfterEmitTargetTime, new PUseCardTag(Card, Player, Targets)); Game.CardManager.MoveCard(Card, Player.Area.HandCardArea, Game.CardManager.SettlingArea); Game.Monitor.CallTime(PTime.Card.AfterBecomeTargetTime, new PUseCardTag(Card, Player, Targets)); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PBlock Block = (PBlock)InjureTag.InjureSource; Block.Lord = Player; PNetworkManager.NetworkServer.TellClients(new PHighlightBlockOrder(Block.Index.ToString())); PNetworkManager.NetworkServer.TellClients(new PRefreshBlockBasicOrder(Block)); #region 成就:我的地盘我做主 if (Block.BusinessType.Equals(PBusinessType.Castle)) { PArch.Announce(Game, Player, "我的地盘我做主"); } #endregion Game.CardManager.MoveCard(Card, Game.CardManager.SettlingArea, Game.CardManager.ThrownCardHeap); Game.Monitor.CallTime(PTime.Card.EndSettleTime, new PUseCardTag(Card, Player, Targets)); } }); }); } }
public P_YooChiinKuTsung() : base(CardName) { Point = 3; Index = 16; foreach (PTime Time in new PTime[] { PTime.Injure.EmitInjure }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 10, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.FromPlayer) && InjureTag.Injure > 0 && InjureTag.ToPlayer != null && InjureTag.ToPlayer.Area.HandCardArea.CardNumber > 0; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (Player.TeamIndex == InjureTag.ToPlayer.TeamIndex) { if (Player.General is P_IzayoiMiku && InjureTag.ToPlayer.General is P_Gabriel) { return false; } return InjureTag.Injure >= InjureTag.ToPlayer.Money || (InjureTag.Injure >= 6000 && InjureTag.Injure + Player.Money >= 2 * (InjureTag.ToPlayer.Money - InjureTag.Injure)); } else { return InjureTag.Injure < InjureTag.ToPlayer.Money && InjureTag.Injure <= 1000 && InjureTag.ToPlayer.Area.HandCardArea.CardNumber >= 2 && PAiCardExpectation.FindMostValuableToGet(Game, Player, InjureTag.ToPlayer).Value > 3000; } }, Effect = MakeNormalEffect(Player, Card, AIEmitTargets, AIEmitTargets, (PGame Game, PPlayer User, PPlayer Target) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PNetworkManager.NetworkServer.TellClients(new PPushTextOrder(User.Index.ToString(), "欲擒故纵:防止伤害", PPushType.Information.Name)); InjureTag.Injure = 0; for (int i = 0; i < 2; ++i) { if (Target.Area.HandCardArea.CardNumber > 0) { PCard Got = Game.GetCardFrom(User, Target, true, false); #region 成就:七擒七纵 if (Got.Model is P_NanManHsiang && User.Area.HandCardArea.CardList.Contains(Got)) { PArch.Announce(Game, User, "七擒七纵"); } #endregion } } }) }); }); } }
private List <PPlayer> AIEmitTargets(PGame Game, PPlayer Player) { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PPlayer Target = PAiTargetChooser.InjureTarget(Game, InjureTag.FromPlayer, Player, (PGame _Game, PPlayer _Player) => { return(_Player.IsAlive && !_Player.Equals(Player) && !_Player.Equals(InjureTag.FromPlayer)); }, InjureTag.Injure, InjureTag.InjureSource); return(new List <PPlayer>() { Target }); }
public P_Temujin() : base("铁木真") { Sex = PSex.Male; Age = PAge.Renaissance; Index = 11; Cost = 20; Tips = "定位:控制\n" + "难度:简单\n" + "史实:大蒙古国可汗,杰出的军事家、政治家,统一了蒙古诸部,开疆拓土,远至东欧,被尊为“成吉思汗”。\n" + "攻略:\n铁木真是一个新手推荐武将,基本上使用没有任何难度。"; PSkill QiangLve = new PSkill("抢掠") { SoftLockOpen = true }; SkillList.Add(QiangLve .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(QiangLve.Name) { IsLocked = false, Player = Player, Time = PTime.Injure.EmitInjure, AIPriority = 15, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return InjureTag.Injure > 0 && InjureTag.ToPlayer != null && Player.Equals(InjureTag.FromPlayer) && InjureTag.InjureSource is PBlock && !Player.Equals(InjureTag.ToPlayer) && InjureTag.ToPlayer.Area.HandCardArea.CardNumber + InjureTag.ToPlayer.Area.EquipmentCardArea.CardNumber > 0; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return InjureTag.ToPlayer.TeamIndex != Player.TeamIndex; }, Effect = (PGame Game) => { QiangLve.AnnouceUseSkill(Player); int Result = Game.Judge(Player, 6); if (Result % 2 == 0) { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PCard Card = new P_CheevnHuoTaChieh().Instantiate(); Card.Point = 0; PTrigger Trigger = Card.Model.MoveInHandTriggerList.Find((Func <PPlayer, PCard, PTrigger> TriggerGenerator) => TriggerGenerator(Player, Card).Time.Equals(PTime.Injure.AcceptInjure))?.Invoke(Player, Card); if (Trigger != null) { Game.Logic.StartSettle(new PSettle("抢掠[趁火打劫]", Trigger.Effect)); } } } }); })); }
public P_WeiWeiChiuChao() : base(CardName) { Point = 1; Index = 2; foreach (PTime Time in new PTime[] { PTime.Injure.AcceptInjure }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 100, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.ToPlayer) && InjureTag.FromPlayer != null && InjureTag.Injure > 0; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag.FromPlayer.General is P_LiuJi) { if (InjureTag.FromPlayer.TeamIndex == Player.TeamIndex) { return InjureTag.FromPlayer.Money <= 3600; } else { return false; } } return Player.Money <= InjureTag.Injure || (InjureTag.Injure >= 3000 && InjureTag.FromPlayer.TeamIndex != Player.TeamIndex); }, Effect = MakeNormalEffect(Player, Card, AIEmitTargets, AIEmitTargets, (PGame Game, PPlayer User, PPlayer Target) => { if (Game.PkPoint(User, Target) == 1) { PNetworkManager.NetworkServer.TellClients(new PPushTextOrder(User.Index.ToString(), "围魏救赵:防止伤害", PPushType.Information.Name)); #region 成就:千钧一发 if (Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName).Injure >= 10000) { PArch.Announce(Game, User, "千钧一发"); } #endregion Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName).Injure = 0; } }) }); }); } }
public void Injure(PPlayer FromPlayer, PPlayer ToPlayer, int Count, PObject InjureSource) { PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder((FromPlayer == null ? "null" : FromPlayer.Name) + "对" + ToPlayer.Name + "造成" + Count + "点伤害")); PInjureTag InjureTag = Monitor.CallTime(PTime.Injure.StartSettle, new PInjureTag(FromPlayer, ToPlayer, Count, InjureSource)); foreach (PTime InjureTime in new PTime[] { PTime.Injure.BeforeEmitInjure, PTime.Injure.BeforeAcceptInjure, PTime.Injure.EmitInjure, PTime.Injure.AcceptInjure, PTime.Injure.AfterEmitInjure, PTime.Injure.AfterAcceptInjure }) { if (InjureTag.ToPlayer != null && InjureTag.Injure > 0) { if (InjureTime.Equals(PTime.Injure.AfterEmitInjure)) { if (InjureTag.FromPlayer != null && InjureTag.FromPlayer.IsAlive) { TagManager.CreateTag(InjureTag); GetMoney(InjureTag.FromPlayer, InjureTag.Injure); InjureTag = TagManager.PopTag <PInjureTag>(PInjureTag.TagName); } } else if (InjureTime.Equals(PTime.Injure.AfterAcceptInjure)) { if (InjureTag.ToPlayer.IsAlive) { TagManager.CreateTag(InjureTag); LoseMoney(InjureTag.ToPlayer, InjureTag.Injure, true); InjureTag = TagManager.PopTag <PInjureTag>(PInjureTag.TagName); } } InjureTag = Monitor.CallTime(InjureTime, InjureTag); } else { break; } } if (InjureTag.ToPlayer != null && InjureTag.Injure > 0) { Monitor.CallTime(PTime.Injure.EndSettle, InjureTag); } }
public P_FuTiChoouHsin() : base(CardName) { Point = 4; Index = 19; foreach (PTime Time in new PTime[] { PTime.Injure.AfterAcceptInjure }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 60, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.ToPlayer) && InjureTag.FromPlayer != null && InjureTag.Injure > 0 && InjureTag.InjureSource != null && (InjureTag.InjureSource is PBlock) && ((PBlock)InjureTag.InjureSource).HouseNumber > 0; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PBlock Block = (PBlock)InjureTag.InjureSource; return Block.Lord != null && Block.Lord.TeamIndex != Player.TeamIndex && (PAiMapAnalyzer.HouseValue(Game, Block.Lord, Block) >= 5400 || Player.Money <= 3000); }, Effect = (PGame Game) => { List <PPlayer> Targets = new List <PPlayer>(); Game.Monitor.CallTime(PTime.Card.AfterEmitTargetTime, new PUseCardTag(Card, Player, Targets)); Game.CardManager.MoveCard(Card, Player.Area.HandCardArea, Game.CardManager.SettlingArea); Game.Monitor.CallTime(PTime.Card.AfterBecomeTargetTime, new PUseCardTag(Card, Player, Targets)); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PBlock Block = (PBlock)InjureTag.InjureSource; #region 成就:破釜沉舟 if (Block.HouseNumber >= 10) { PArch.Announce(Game, Player, "破釜沉舟"); } #endregion Game.LoseHouse(Block, Block.HouseNumber); Game.CardManager.MoveCard(Card, Game.CardManager.SettlingArea, Game.CardManager.ThrownCardHeap); Game.Monitor.CallTime(PTime.Card.EndSettleTime, new PUseCardTag(Card, Player, Targets)); } }); }); } }
public P_PaKuaChevn() : base(CardName, PCardType.DefensorCard) { Point = 1; Index = 49; foreach (PTime Time in new PTime[] { PTime.Injure.AcceptInjure }) { MoveInEquipTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 150, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.ToPlayer) && InjureTag.Injure > 0; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); if (InjureTag.FromPlayer != null && InjureTag.FromPlayer.General is P_IzayoiMiku && Player.General is P_Gabriel) { return false; } return InjureTag.Injure > 500 || Player.General is P_LiuJi; }, Effect = (PGame Game ) => { AnnouceUseEquipmentSkill(Player); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); int Result = Game.Judge(Player, InjureTag.Injure > 500 ? 5 : 6); if (Result % 2 == 1) { PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder(CardName + ":成功")); InjureTag.Injure = PMath.Percent(InjureTag.Injure, 50); } else { PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder(CardName + ":失败")); } } }); }); } }
public P_ChihSangMaHuai() : base(CardName) { Point = 5; Index = 26; foreach (PTime Time in new PTime[] { PTime.Injure.AcceptInjure }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 200, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.ToPlayer) && InjureTag.FromPlayer != null && InjureTag.Injure > 0 && Game.PlayerList.Exists((PPlayer _Player) => !_Player.Equals(InjureTag.FromPlayer) && !_Player.Equals(Player)); }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Money <= InjureTag.Injure || (InjureTag.FromPlayer.TeamIndex != Player.TeamIndex && Game.Enemies(Player).Count < 2 && InjureTag.Injure >= 3000) && AIEmitTargets(Game, Player)[0] != null; }, Effect = MakeNormalEffect(Player, Card, AIEmitTargets, (PGame Game, PPlayer _Player) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return !_Player.Equals(InjureTag.FromPlayer) && !_Player.Equals(Player); }, (PGame Game, PPlayer User, PPlayer Target) => { PNetworkManager.NetworkServer.TellClients(new PPushTextOrder(User.Index.ToString(), "转移伤害给" + Target.Name, PPushType.Information.Name)); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); InjureTag.ToPlayer = Target; #region 成就:弹弹弹 if (Target.Money <= InjureTag.Injure) { PArch.Announce(Game, User, "弹弹弹"); } #endregion }) }); }); } }
public POutOfGameTriggerInstaller() : base("防止伤害") { TriggerList.Add(new PTrigger("移出游戏[防止伤害]") { IsLocked = true, Time = PTime.Injure.StartSettle, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return((InjureTag.FromPlayer != null && InjureTag.FromPlayer.OutOfGame) || (InjureTag.ToPlayer != null && InjureTag.ToPlayer.OutOfGame) && InjureTag.Injure > 0); }, Effect = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); InjureTag.Injure = 0; string Name = string.Empty; if (InjureTag.FromPlayer != null && InjureTag.FromPlayer.OutOfGame) { Name = InjureTag.FromPlayer.Name; } else if (InjureTag.ToPlayer != null && InjureTag.ToPlayer.OutOfGame) { Name = InjureTag.ToPlayer.Name; } PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder("因" + Name + "移出游戏,伤害防止")); } }); 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(PKuungCheevngChiTag.TagName)) && InjureTag.Injure > 0); }, Effect = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); InjureTag.Injure = 0; PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder("因" + InjureTag.ToPlayer.Name + "空城,伤害防止")); } }); }
public P_LiTaiTaaoChiang() : base(CardName) { Point = 2; Index = 11; foreach (PTime Time in new PTime[] { PTime.Injure.AcceptInjure }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 80, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.ToPlayer) && InjureTag.FromPlayer != null && InjureTag.Injure > 0 && Player.HasHouse; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Money <= InjureTag.Injure || (InjureTag.Injure >= 1000 + PAiMapAnalyzer.MaxValueHouse(Game, Player).Value&& InjureTag.FromPlayer.TeamIndex != Player.TeamIndex); }, Effect = MakeNormalEffect(Player, Card, AIEmitTargets, AIEmitTargets, (PGame Game, PPlayer User, PPlayer Target) => { PNetworkManager.NetworkServer.TellClients(new PPushTextOrder(User.Index.ToString(), "李代桃僵:防止伤害", PPushType.Information.Name)); #region 成就:桃李不言 if (Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName).Injure >= User.Money) { PArch.Announce(Game, User, "桃李不言"); } #endregion Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName).Injure = 0; Game.ThrowHouse(Target, User, CardName); }) }); }); } }
public P_TsaangLang() : base(CardName, PCardType.TrafficCard) { Point = 3; Index = 57; foreach (PTime Time in new PTime[] { PTime.Injure.EmitInjure }) { MoveInEquipTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 50, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); bool CardSource = InjureTag.InjureSource != null && InjureTag.InjureSource is PCard && ((PCard)InjureTag.InjureSource).Model is PSchemeCardModel; if (CardSource) { PUseCardTag UseCardTag = Game.TagManager.FindPeekTag <PUseCardTag>(PUseCardTag.TagName); if (UseCardTag != null && UseCardTag.TargetList.Count == 1 && UseCardTag.Card.Type.Equals(PCardType.SchemeCard)) { return Player.Equals(InjureTag.FromPlayer) && InjureTag.Injure > 0 && InjureTag.ToPlayer != null && InjureTag.ToPlayer.Area.OwnerCardNumber > 0; } } return false; }, Effect = (PGame Game ) => { AnnouceUseEquipmentSkill(Player); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); Game.GetCardFrom(Player, InjureTag.ToPlayer); } }); }); } }
public P_CheevnHuoTaChieh() : base(CardName) { Point = 1; Index = 5; foreach (PTime Time in new PTime[] { PTime.Injure.AcceptInjure }) { MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => { return(new PTrigger(CardName) { IsLocked = false, Player = Player, Time = Time, AIPriority = 10, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return !Player.Equals(InjureTag.ToPlayer) && InjureTag.Injure > 0 && InjureTag.ToPlayer != null && InjureTag.ToPlayer.Area.HandCardArea.CardNumber + InjureTag.ToPlayer.Area.EquipmentCardArea.CardNumber > 0; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.TeamIndex != InjureTag.ToPlayer.TeamIndex && PAiCardExpectation.FindMostValuableToGet(Game, Player, InjureTag.ToPlayer).Value > 3000; }, Effect = MakeNormalEffect(Player, Card, AIEmitTargets, AIEmitTargets, (PGame Game, PPlayer User, PPlayer Target) => { PCard Got = Game.GetCardFrom(User, Target); #region 成就:分一杯羹 if (Got.Model is P_MuNiuLiuMa && User.Area.HandCardArea.CardList.Contains(Got)) { PArch.Announce(Game, User, "分一杯羹"); } #endregion }) }); }); } }
public P_TangYin() : base("唐寅") { Sex = PSex.Male; Age = PAge.Industrial; Index = 20; Cost = 25; Tips = "定位:攻击\n" + "难度:简单\n" + "史实:明代画家、书法家、诗人,“明四家”和“吴中四才子”之一。以风流之名传于世,后代有“唐伯虎点秋香”等传说。\n" + "攻略:\n唐寅是一个上手简单的攻击型武将,并且具有一定的防御能力。【风流】作为主要输出技能,能够保持前期的经济压制和后期的装备压制,并可通过伤害类计策触发,因此【浑水摸鱼】【关门捉贼】等牌都是关键牌。【浪子】作为防御技能,能够在后期积累了一定装备的基础上避开关键区域,防止崩盘,因此唐寅对装备牌的需求也较大。唐寅可通过对队友造成伤害以获得装备;反之,【风流】的输出也会受到装备的限制,对手可以通过给唐寅没用的装备,替换唐寅原本的装备,降低【风流】的收益甚至令其变为负收益。"; PSkill LangZi = new PSkill("浪子"); SkillList.Add(LangZi .AddTimeTrigger( new PTime[] { PPeriod.DiceStage.Start }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(LangZi.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 10, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && Player.HasEquipInArea(); }, AICondition = (PGame Game) => { KeyValuePair <PCard, int> CardValue = PAiCardExpectation.EquipToThrow(Game, Player); KeyValuePair <int, int> SkillValue = LangZiBannedNumber(Game, Player); return CardValue.Key != null && SkillValue.Key > 0 && SkillValue.Value >= 100 && SkillValue.Value + CardValue.Value >= 300; }, Effect = (PGame Game) => { LangZi.AnnouceUseSkill(Player); PCard TargetCard = null; if (Player.IsAI) { TargetCard = PAiCardExpectation.EquipToThrow(Game, Player).Key; } else { do { TargetCard = PNetworkManager.NetworkServer.ChooseManager.AskToChooseOwnCard(Player, LangZi.Name + "[选择一张装备牌]", true, true); } while (!TargetCard.Type.IsEquipment()); } if (TargetCard != null) { int BannedNumber = 0; if (Player.IsAI) { BannedNumber = LangZiBannedNumber(Game, Player).Key; } else { BannedNumber = PNetworkManager.NetworkServer.ChooseManager.Ask1To6(Player, LangZi.Name + "[选择不会被掷出的数字]"); } if (BannedNumber > 0) { Game.CardManager.MoveCard(TargetCard, Player.Area.HandCardArea.CardList.Contains(TargetCard) ? Player.Area.HandCardArea : Player.Area.EquipmentCardArea, Game.CardManager.ThrownCardHeap); Player.Tags.CreateTag(new PNumberedTag(LangZi.Name, BannedNumber)); } } } }); }) .AddTrigger((PPlayer Player, PSkill Skill) => { return(new PTrigger(LangZi.Name + "[掷骰无效触发]") { IsLocked = true, Player = Player, Time = PPeriod.DiceStage.During, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && Player.Tags.ExistTag(LangZi.Name); }, Effect = (PGame Game) => { int BannedNumber = Player.Tags.PopTag <PNumberedTag>(LangZi.Name).Value; PDiceResultTag DiceResult = Game.TagManager.FindPeekTag <PDiceResultTag>(PDiceResultTag.TagName); if (BannedNumber == DiceResult.DiceResult) { LangZi.AnnouceUseSkill(Player); int NewNumber = BannedNumber; while (NewNumber == BannedNumber) { NewNumber = PMath.RandInt(1, 6); } PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder("掷骰结果更改为" + NewNumber.ToString())); DiceResult.DiceResult = NewNumber; } } }); }) ); PSkill FengLiu = new PSkill("风流"); const int FengLiuInjure = 600; SkillList.Add(FengLiu .AddTimeTrigger( new PTime[] { PTime.Injure.EmitInjure }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(FengLiu.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 150, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return InjureTag.Injure > 0 && Player.Equals(InjureTag.FromPlayer) && InjureTag.ToPlayer != null && !Player.Equals(InjureTag.ToPlayer); }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PPlayer ToPlayer = InjureTag.ToPlayer; if (ToPlayer.TeamIndex == Player.TeamIndex) { if (ToPlayer.Money > FengLiuInjure + InjureTag.Injure && ToPlayer.Money > Player.Money) { return true; } else if (ToPlayer.Money <= InjureTag.Injure) { return true; } else if (ToPlayer.Area.EquipmentCardArea.CardNumber == 0) { return false; } } foreach (PCardType CardType in new PCardType[] { PCardType.WeaponCard, PCardType.DefensorCard, PCardType.TrafficCard }) { PCard CurrentCard = Player.GetEquipment(CardType); PCard TestCard = ToPlayer.GetEquipment(CardType); if (ToPlayer.TeamIndex == Player.TeamIndex) { if (CurrentCard == null && TestCard != null && TestCard.Model.AIInEquipExpectation(Game, Player) > TestCard.Model.AIInEquipExpectation(Game, ToPlayer)) { return true; } } else if (CurrentCard != null && TestCard != null && CurrentCard.Model.AIInEquipExpectation(Game, Player) >= TestCard.Model.AIInEquipExpectation(Game, Player) + TestCard.Model.AIInEquipExpectation(Game, ToPlayer)) { return false; } } return ToPlayer.TeamIndex != Player.TeamIndex; }, Effect = (PGame Game) => { FengLiu.AnnouceUseSkill(Player); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PPlayer ToPlayer = InjureTag.ToPlayer; int Answer = 0; PCard TargetCard = null; if (ToPlayer.Area.EquipmentCardArea.CardNumber == 0) { Answer = 1; } else { if (ToPlayer.IsAI) { if (ToPlayer.TeamIndex == Player.TeamIndex) { if (ToPlayer.Money <= InjureTag.Injure) { Answer = 1; } else if (PAiCardExpectation.FindMostValuable(Game, Player, ToPlayer, false, true, false, true).Value > 0) { Answer = 1; } } else { int Value = FengLiuInjure * 2; if (ToPlayer.Money <= InjureTag.Injure) { Value -= FengLiuInjure; } else if (ToPlayer.Money <= InjureTag.Injure + FengLiuInjure) { Value += 30000; } foreach (PCard TestCard in ToPlayer.Area.EquipmentCardArea.CardList) { int NowValue = TestCard.Model.AIInEquipExpectation(Game, ToPlayer); int GiveValue = TestCard.Model.AIInEquipExpectation(Game, Player); int OverrideValue = 0; if (Player.GetEquipment(TestCard.Type) != null) { OverrideValue = Player.GetEquipment(TestCard.Type).Model.AIInEquipExpectation(Game, Player); } int ExtraValue = ToPlayer.General is P_HuaMulan ? 3500 : 0; if (Value > NowValue + GiveValue - OverrideValue - ExtraValue) { Value = NowValue + GiveValue - OverrideValue - ExtraValue; TargetCard = TestCard; } } if (TargetCard == null) { Answer = 1; } } } else { Answer = PNetworkManager.NetworkServer.ChooseManager.Ask(ToPlayer, FengLiu.Name, new string[] { "交给" + Player.Name + "一件装备", "受到的伤害+" + FengLiuInjure.ToString() }); } } if (Answer == 0) { Game.GiveCardTo(ToPlayer, Player, false, true, false, true); } else { InjureTag.Injure += FengLiuInjure; } } }); }) ); }
public P_WuZhao() : base("武瞾") { Sex = PSex.Female; Age = PAge.Renaissance; Index = 15; Cost = 30; Tips = "定位:攻击\n" + "难度:困难\n" + "史实:武周皇帝,中国历史上唯一统一王朝女皇帝。在位期间以酷吏政治闻名,晚年骄奢淫逸,致使唐朝中衰。\n" + "攻略:\n武瞾有且仅有两个限定技,对两个限定技的使用能力决定了她的存在感和强度。武瞾玩家对于局势的观察能力非常重要,因为发动时机的选择直接影响到武瞾的强度。\n如果选择的发动时机得当,武瞾的强度是很高的。【女权】在储存了大量伤害类计策的情况下,可以带来惊人的爆发伤害,因此在【女权】发动之前,【瞒天过海】、【关门捉贼】等牌并不建议使用。使用【以逸待劳】加【浑水摸鱼】的组合精准打击敌人也是优秀的策略。\n【迁都】的发动时机更依靠于玩家把握力,原则上越晚【迁都】可以赠送的房屋越多,但如果【迁都】过晚,则可能建造的城堡不够发挥输出。【迁都】和【上屋抽梯】也是很好的组合。"; PSkill NvQuan = new PSkill("女权") { Initiative = true }; SkillList.Add(NvQuan .AnnounceGameOnce() .AddTimeTrigger( new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(NvQuan.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 250, CanRepeat = true, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.RemainLimit(NvQuan.Name); }, AICondition = (PGame Game) => { /* * 女权的发动条件: * 【只会在第一个空闲时间点发动】 * 观察场上所有女性直到你的下回合开始的过程 * 即,对场上所有人的下一回合行动,如果领主为女性,记录相应的伤害收益 * 然后,对 * 注:在没发动女权的情况下,武瞾将不会使用以下牌: * 瞒天过海、关门捉贼、笑里藏刀、反间计、打草惊蛇、抛砖引玉、以逸待劳、浑水摸鱼 * * 当有女权状态且有浑水摸鱼的情况下,女性角色的以逸待劳将指定所有敌方角色为目标 */ if (!Game.NowPeriod.Equals(PPeriod.FirstFreeTime)) { return false; } int ExpectSum = 0; Game.AlivePlayers().FindAll((PPlayer _Player) => !_Player.Equals(Player)).ForEach((PPlayer _Player) => { List <PBlock> NextBlocks = PAiMapAnalyzer.NextBlocks(Game, _Player); int TempSum = 0; NextBlocks.ForEach((PBlock Block) => { if (Block.Lord != null && Block.Lord.TeamIndex != _Player.TeamIndex && Block.Lord.Sex.Equals(PSex.Female)) { TempSum += 4000 * (Block.Lord.TeamIndex == Player.TeamIndex ? 1 : -1); } }); TempSum /= Math.Max(1, NextBlocks.Count); ExpectSum += TempSum; }); ExpectSum += 4000 * Player.Area.HandCardArea.CardList.FindAll((PCard Card) => Card.Model is P_ManTiienKuoHai).Count; ExpectSum += Game.Enemies(Player).FindAll((PPlayer _Player) => _Player.Position.HouseNumber == 0).Count * 4000 * Player.Area.HandCardArea.CardList.FindAll((PCard Card) => Card.Model is P_KuanMevnChoTsev).Count; ExpectSum += 4000 * Math.Min(Player.Area.HandCardArea.CardList.FindAll((PCard Card) => Card.Type.IsEquipment()).Count, Player.Area.HandCardArea.CardList.FindAll((PCard Card) => Card.Model is P_HsiaoLiTsaangTao).Count); if (Player.Area.HandCardArea.CardList.Exists((PCard Card) => { return Card.Model is P_FanChienChi || Card.Model is P_TaTsaaoChingShev || Card.Model is P_PaaoChuanYinYoo || Card.Model is P_IITaiLao; })) { ExpectSum += 4000 * Game.Enemies(Player).Count * Player.Area.HandCardArea.CardList.FindAll((PCard Card) => Card.Model is P_HunShuiMoYoo).Count; } return ExpectSum > 6000; }, Effect = (PGame Game) => { NvQuan.AnnouceUseSkill(Player); Game.AlivePlayers().ForEach((PPlayer _Player) => { if (_Player.Sex.Equals(PSex.Female)) { _Player.Tags.CreateTag(NvQuanTag); } }); NvQuan.DeclareUse(Player); } }); }) .AddTrigger((PPlayer Player, PSkill Skill) => { return(new PTrigger(NvQuan.Name + "[增加伤害]") { IsLocked = true, Player = null, Time = PTime.Injure.EmitInjure, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return (InjureTag.FromPlayer != null && InjureTag.FromPlayer.Tags.ExistTag(NvQuanTag.Name)) && (InjureTag.InjureSource is PCard || InjureTag.InjureSource is PBlock); }, Effect = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); NvQuan.AnnouceUseSkill(InjureTag.FromPlayer); InjureTag.Injure += 2000; } }); }).AddTrigger((PPlayer Player, PSkill Skill) => { return(new PTrigger(NvQuan.Name + "[效果结束]") { IsLocked = true, Player = null, Time = PPeriod.StartTurn.Start, Condition = (PGame Game) => { return Game.NowPlayer.Equals(Player); }, Effect = (PGame Game) => { Game.AlivePlayers().ForEach((PPlayer _Player) => { _Player.Tags.PopTag <PTag>(NvQuanTag.Name); }); } }); })); KeyValuePair <PBlock, int> QianDuTarget(PGame Game, PPlayer Player) { int BusinessLandCount = Game.Map.BlockList.FindAll((PBlock Block) => Player.Equals(Block.Lord) && Block.IsBusinessLand).Count; return(PMath.Max(Game.Map.BlockList.FindAll((PBlock Block) => Player.Equals(Block.Lord) && !Block.IsBusinessLand), (PBlock Block) => { int HouseNumber = Game.GetBonusHouseNumberOfCastle(Player, Block); HouseNumber += BusinessLandCount; return HouseNumber * PAiMapAnalyzer.HouseValue(Game, Player, Block); })); } PSkill QianDu = new PSkill("迁都") { Initiative = true }; SkillList.Add(QianDu .AnnounceGameOnce() .AddTimeTrigger( new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(QianDu.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 280, CanRepeat = true, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.RemainLimit(QianDu.Name) && Game.Map.BlockList.Exists((PBlock Block) => Player.Equals(Block.Lord) && !Block.IsBusinessLand); }, AICondition = (PGame Game) => { if (!Game.NowPeriod.Equals(PPeriod.FirstFreeTime)) { return false; } return QianDuTarget(Game, Player).Value > 12000; }, Effect = (PGame Game) => { QianDu.AnnouceUseSkill(Player); PBlock TargetBlock = null; if (Player.IsAI) { TargetBlock = QianDuTarget(Game, Player).Key; } else { TargetBlock = PNetworkManager.NetworkServer.ChooseManager.AskToChooseBlock(Player, QianDu.Name, (PBlock Block) => { return Player.Equals(Block.Lord) && !Block.IsBusinessLand; }); } if (TargetBlock != null) { int BusinessLandCount = Game.Map.BlockList.FindAll((PBlock Block) => Player.Equals(Block.Lord) && Block.IsBusinessLand).Count; int HouseNumber = Game.GetBonusHouseNumberOfCastle(Player, TargetBlock) + BusinessLandCount; Game.MovePosition(Player, Player.Position, TargetBlock); PNetworkManager.NetworkServer.TellClients(new PHighlightBlockOrder(TargetBlock.Index.ToString())); TargetBlock.BusinessType = PBusinessType.Castle; Game.GetHouse(TargetBlock, HouseNumber); } QianDu.DeclareUse(Player); } }); })); }
public P_QingLong() : base("青龙") { Sex = PSex.Male; Age = PAge.Ancient; Index = 1001; Cost = 1; Tips = string.Empty; CanBeChoose = false; //PSkill ShenShou = new PSkill("神兽") { // Lock = true //}; //SkillList.Add(ShenShou // .AddTrigger( // (PPlayer Player, PSkill Skill) => { // return new PTrigger(ShenShou.Name) { // IsLocked = true, // Player = Player, // Time = PTime.StartGameTime, // AIPriority = 100, // Effect = (PGame Game) => { // ShenShou.AnnouceUseSkill(Player); // Game.GetMoney(Player, 30000); // } // }; // }) // .AddTrigger( // (PPlayer Player, PSkill Skill) => { // return new PTrigger(ShenShou.Name) { // IsLocked = true, // Player = Player, // Time = PPeriod.StartTurn.During, // AIPriority = 100, // Condition = (PGame Game) => { // return Player.Equals(Game.NowPlayer); // }, // Effect = (PGame Game) => { // ShenShou.AnnouceUseSkill(Player); // Game.GetMoney(Player, 500); // } // }; // })); PSkill QingLong = new PSkill("青龙") { Lock = true }; SkillList.Add(QingLong .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(QingLong.Name) { IsLocked = true, Player = Player, Time = PTime.Injure.AcceptInjure, AIPriority = 250, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PPlayer FromPlayer = InjureTag.FromPlayer; return InjureTag.Injure > 0 && Player.Equals(InjureTag.ToPlayer) && FromPlayer != null && FromPlayer.Area.OwnerCardNumber > 0; }, Effect = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PPlayer FromPlayer = InjureTag.FromPlayer; QingLong.AnnouceUseSkill(Player); Game.GetCardFrom(Player, FromPlayer); } }); })); }
public P_IzayoiMiku() : base("诱宵美九") { Sex = PSex.Female; Age = PAge.Industrial; Index = 28; Cost = 50; Tips = "定位:攻击\n" + "难度:简单\n" + "史实:轻小说《约会大作战》中女主角。龙胆寺女子学院学生,歌手,偶像。\n" + "攻略:\n【独奏】可以压制住全部的防御牌,既不能被闪避也不能被减伤,还无法通过【借尸还魂】、【走为上计】自救,一定程度上使得项羽、廉颇、屈原一类的自伤角色不敢铤而走险。贞德的【圣女】能够对【独奏】形成一定程度的克制。如果美九有【古锭刀】,则每一次过路费都触发【古锭刀】技能的效果,从而成为很强的火力点。新版美九的【独奏】无法触发花木兰的【枭姬】,但花木兰仍可以通过【易装】给她【古锭刀】来形成配合。\n美九的团队通常需要建一座城堡来发动【轮舞曲】。如果在未来大概率拿不到新的商业用地的情况下,即使是3级城堡,在【轮舞曲】之后也相当于免费升了2级的购物中心。"; NewGeneral = true; PSkill Solo = new PSkill("独奏"); SkillList.Add(Solo .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(Solo.Name) { IsLocked = false, Player = Player, Time = PTime.Injure.BeforeEmitInjure, AIPriority = 200, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.FromPlayer) && InjureTag.Injure > 0 && InjureTag.ToPlayer != null && InjureTag.ToPlayer.Area.OwnerCardNumber > 0; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PPlayer ToPlayer = InjureTag.ToPlayer; return ToPlayer.TeamIndex != Player.TeamIndex || (ToPlayer.General is P_Gabriel); }, Effect = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PPlayerCardArea ToPlayerArea = InjureTag.ToPlayer.Area; Solo.AnnouceUseSkill(Player); Game.CardManager.MoveAll(ToPlayerArea.HandCardArea, ToPlayerArea.OutOfGameArea); // Game.CardManager.MoveAll(ToPlayerArea.EquipmentCardArea, ToPlayerArea.OutOfGameArea); Player.Tags.CreateTag(new PSoloTag()); } }); }) .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(Solo.Name) { IsLocked = true, Player = Player, Time = PTime.Injure.EndSettle, AIPriority = 200, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(InjureTag.FromPlayer) && InjureTag.Injure > 0 && InjureTag.ToPlayer != null && Player.Tags.ExistTag(PSoloTag.TagName); }, Effect = (PGame Game) => { Solo.AnnouceUseSkill(Player); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PPlayer ToPlayer = InjureTag.ToPlayer; Player.Tags.PopTag <PSoloTag>(PSoloTag.TagName); if (ToPlayer.IsAlive) { Game.CardManager.MoveAll(ToPlayer.Area.OutOfGameArea, ToPlayer.Area.HandCardArea); } else { Game.CardManager.MoveAll(ToPlayer.Area.OutOfGameArea, Player.Area.HandCardArea); PPlayer ExtraTarget = null; int ExtraInjure = PMath.Percent(InjureTag.Injure, 50); if (Player.IsAI) { ExtraTarget = PAiTargetChooser.InjureTarget(Game, Player, Player, PTrigger.Except(Player), ExtraInjure, Solo); } else { ExtraTarget = PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayer(Player, PTrigger.Except(Player), Solo.Name + "[造成" + ExtraInjure.ToString() + "点伤害]", true); } if (ExtraTarget != null) { Game.Injure(Player, ExtraTarget, ExtraInjure, Solo); } } } }); })); PSkill Rando = new PSkill("轮舞曲") { Initiative = true }; SkillList.Add(Rando .AnnounceGameOnce() .AddTimeTrigger( new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(Rando.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 280, CanRepeat = true, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.RemainLimit(Rando.Name) && Game.Map.BlockList.Exists((PBlock Block) => Block.Lord != null && Block.IsBusinessLand); }, AICondition = (PGame Game) => { PBlock MaxHouseBlock = PMath.Max(Game.Map.BlockList.FindAll((PBlock Block) => Block.Lord != null && Block.IsBusinessLand && Block.Lord.TeamIndex == Player.TeamIndex && !Block.BusinessType.Equals(PBusinessType.ShoppingCenter)), (PBlock Block) => Block.HouseNumber, true).Key; if (MaxHouseBlock == null) { return false; } int ClubBonus = PMath.Percent(MaxHouseBlock.Price, 40) * Game.Enemies(Player).Count *MaxHouseBlock.HouseNumber; if (MaxHouseBlock.BusinessType.Equals(PBusinessType.Institute)) { ClubBonus -= 4000 * Game.Teammates(Player).Count; } int TeammateCardBonus = -2000 * PMath.Sum(Game.Teammates(Player, false).ConvertAll((PPlayer _Player) => Math.Min(2, _Player.Area.HandCardArea.CardNumber))); int EnemyCardBonus = 2000 * PMath.Sum(Game.Enemies(Player).ConvertAll((PPlayer _Player) => Math.Min(2, _Player.Area.HandCardArea.CardNumber))); int SumBonus = ClubBonus + TeammateCardBonus + EnemyCardBonus; return SumBonus >= 8000 * (1 + Game.Map.BlockList.FindAll((PBlock _Block) => _Block.IsBusinessLand && _Block.Lord == null).Count); }, Effect = (PGame Game) => { Rando.AnnouceUseSkill(Player); Game.Traverse((PPlayer _Player) => { if (_Player != Player) { for (int i = 0; i < 2; ++i) { if (_Player.Area.HandCardArea.CardNumber > 0) { Game.ThrowCard(_Player, _Player, true, false, false); } } } }, Player); PBlock Target = null; if (Player.IsAI) { PBlock MaxHouseBlock = PMath.Max(Game.Map.BlockList.FindAll((PBlock Block) => Block.Lord != null && Block.IsBusinessLand && Block.Lord.TeamIndex == Player.TeamIndex && !Block.BusinessType.Equals(PBusinessType.ShoppingCenter)), (PBlock Block) => Block.HouseNumber, true).Key; Target = MaxHouseBlock; } else { Target = PNetworkManager.NetworkServer.ChooseManager.AskToChooseBlock(Player, Rando.Name + "-选择一处商业用地", (PBlock Block) => Block.IsBusinessLand && Block.Lord != null); } Target.BusinessType = PBusinessType.Club; PNetworkManager.NetworkServer.TellClients(new PRefreshBlockBasicOrder(Target)); Rando.DeclareUse(Player); } }); })); }
public P_Xdyu() : base("项羽") { Sex = PSex.Male; Age = PAge.Classic; Index = 17; Cost = 30; Tips = "定位:攻击\n" + "难度:中等\n" + "史实:秦末西楚霸王。曾在巨鹿之战中破釜沉舟,大破秦军。\n" + "攻略:\n项羽是一个十分考验玩家判断力的武将,【霸王】在小图的发挥显著强于大图,能够配合虞姬的【剑舞】,也可以增加天灾对敌人的伤害,还可以在一定程度上辅助队友的输出,范围为1限制了项羽的跨队列输出,但敌人越多就越强,颇有乌江快战之风范。\n" + "【沉舟】是一个爆发力极强的技能,相应地也要付出较大的代价。要想达到正收益,技能发动往往是在中后期,而购物中心往往是项羽的不二选择,当现金小于18000时【沉舟】已经是正收益,而对于领地来说只需花费小于正常花费即可一试。当然,在现金较低的情况下,项羽甚至可以连续【沉舟】,在高风险的同时可能获得极高的回报,或可重振西楚霸业。\n"; PSkill Bawh = new PSkill("霸王"); SkillList.Add(Bawh .AddTimeTrigger( new PTime[] { PTime.Injure.AcceptInjure }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(Bawh.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 200, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return InjureTag.Injure > 0 && InjureTag.ToPlayer != null && !Player.Equals(InjureTag.ToPlayer) && InjureTag.ToPlayer.Distance(Player) <= 1; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return InjureTag.ToPlayer.TeamIndex != Player.TeamIndex; }, Effect = (PGame Game) => { Bawh.AnnouceUseSkill(Player); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); InjureTag.Injure += 800; } }); })); PSkill Ifvb = new PSkill("沉舟") { Initiative = true }; SkillList.Add(Ifvb .AnnounceTurnOnce() .AddTimeTrigger( new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(Ifvb.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 200, CanRepeat = true, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.RemainLimit(Ifvb.Name) && Player.Position.Lord != null; }, AICondition = (PGame Game) => { if (Player.Money <= 1000) { return false; } return PMath.Percent(Player.Money, 50) + 1500 < 3 * PAiMapAnalyzer.HouseValue(Game, Player, Player.Position); }, Effect = (PGame Game) => { Ifvb.AnnouceUseSkill(Player); Game.LoseMoney(Player, PMath.Percent(Player.Money, 50)); Game.GetHouse(Player.Position, 3); Ifvb.DeclareUse(Player); } }); })); }
public P_ChenYuanYuan() : base("陈圆圆") { Sex = PSex.Female; Age = PAge.Industrial; Index = 4; Tips = "定位:防御\n" + "难度:简单\n" + "史实:明末清初戏曲演艺家,作为吴三桂向农民军的宣战理由而闻名于世。\n" + "攻略:\n陈圆圆是新手推荐的武将,使用简单,且具有一定的强度,过牌量较高,可以用来练习对牌的使用能力。\n【风云】的收益取决于在场上的存在感,而【楚楚】平均6回合摸一张牌,因此在人数少、回合频繁的1v1模式中,陈圆圆的强度非常高。但陈圆圆和队友的配合能力相对较差,在人数多、回合被稀释的4v4模式下,表现就不是很好了。"; PSkill FengYun = new PSkill("风云") { SoftLockOpen = true }; SkillList.Add(FengYun .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(FengYun.Name) { IsLocked = false, Player = Player, Time = PTime.Injure.EndSettle, AIPriority = 120, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return (Player.Equals(InjureTag.ToPlayer) || Player.Equals(InjureTag.FromPlayer)) && InjureTag.Injure > 0; }, Effect = (PGame Game) => { FengYun.AnnouceUseSkill(Player); Game.GetMoney(Player, 200); } }); })); PSkill ChuChu = new PSkill("楚楚") { SoftLockOpen = true }; SkillList.Add(ChuChu .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(ChuChu.Name) { IsLocked = false, Player = Player, Time = PPeriod.EndTurnStage.During, AIPriority = 50, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer); }, Effect = (PGame Game) => { ChuChu.AnnouceUseSkill(Player); int X = Game.Judge(Player, 4); if (X == 4) { Game.GetCard(Player, 1); } } }); })); }
public P_ZhaoYun() : base("赵云") { Sex = PSex.Male; Age = PAge.Medieval; Index = 6; Tips = "定位:攻防兼备\n" + "难度:中等\n" + "史实:三国时期蜀汉名将,初从公孙瓒,后随刘备四处征战,曾多次救护后主刘禅,被誉为“一身都是胆”。\n" + "攻略:\n赵云和张三丰相似,都拥有控制伤害的技能。\n赵云的技能是需要消耗房屋的,一般来说,赵云可以把低价值土地上的房屋全部转换成【胆】,而留下几个城堡、购物中心之类的高伤害地点。【胆】的进攻收益和伤害基数有直接关系,留下高伤害地点可以让【胆】的效果有最大的发挥。当然,赵云也要留存一些【胆】来防御敌人的高额伤害。"; PSkill LongDan = new PSkill("龙胆") { Initiative = true }; SkillList.Add(LongDan .AnnounceTurnOnce() .AddTimeTrigger( new PTime[] { PPeriod.FirstFreeTime.During, PPeriod.SecondFreeTime.During }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(LongDan.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 20, CanRepeat = true, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.RemainLimit(LongDan.Name) && Player.HasHouse; }, AICondition = (PGame Game) => { PBlock Block = PAiMapAnalyzer.MinValueHouse(Game, Player, false, true).Key; if (Block == null) { return false; } else if (!Player.Tags.ExistTag(PDanTag.TagName)) { return Block.Price <= 2000; } return Block.Price <= 1000; }, Effect = (PGame Game) => { LongDan.AnnouceUseSkill(Player); Game.ThrowHouse(Player, Player, LongDan.Name); Player.Tags.CreateTag(new PDanTag()); LongDan.DeclareUse(Player); } }); }) .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(LongDan.Name + "I") { IsLocked = false, Player = Player, Time = PTime.Injure.EmitInjure, AIPriority = 100, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Tags.ExistTag(PDanTag.TagName) && InjureTag.Injure > 0 && Player.Equals(InjureTag.FromPlayer) && InjureTag.ToPlayer != null; }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return LongDanICondition(Game, Player, InjureTag.ToPlayer, InjureTag.Injure); }, Effect = (PGame Game) => { LongDan.AnnouceUseSkill(Player); Player.Tags.MinusTag(PDanTag.TagName, 1); Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName).Injure = PMath.Percent(Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName).Injure, 150); } }); }) .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(LongDan.Name + "II") { IsLocked = false, Player = Player, Time = PTime.Injure.AcceptInjure, AIPriority = 100, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Tags.ExistTag(PDanTag.TagName) && InjureTag.Injure > 0 && Player.Equals(InjureTag.ToPlayer); }, AICondition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return LongDanIICondition(Game, Player, InjureTag.FromPlayer, InjureTag.Injure); }, Effect = (PGame Game) => { LongDan.AnnouceUseSkill(Player); Player.Tags.MinusTag(PDanTag.TagName, 1); Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName).Injure = PMath.Percent(Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName).Injure, 50); } }); })); }
public P_BaiHu() : base("白虎") { Sex = PSex.Male; Age = PAge.Ancient; Index = 1002; Cost = 1; Tips = string.Empty; CanBeChoose = false; //PSkill ShenShou = new PSkill("神兽") { // Lock = true //}; //SkillList.Add(ShenShou // .AddTrigger( // (PPlayer Player, PSkill Skill) => { // return new PTrigger(ShenShou.Name) { // IsLocked = true, // Player = Player, // Time = PTime.StartGameTime, // AIPriority = 100, // Effect = (PGame Game) => { // ShenShou.AnnouceUseSkill(Player); // Game.GetMoney(Player, 30000); // } // }; // }) // .AddTrigger( // (PPlayer Player, PSkill Skill) => { // return new PTrigger(ShenShou.Name) { // IsLocked = true, // Player = Player, // Time = PPeriod.StartTurn.During, // AIPriority = 100, // Condition = (PGame Game) => { // return Player.Equals(Game.NowPlayer); // }, // Effect = (PGame Game) => { // ShenShou.AnnouceUseSkill(Player); // Game.GetMoney(Player, 500); // } // }; // })); PSkill BaiHu = new PSkill("白虎") { Lock = true }; SkillList.Add(BaiHu .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(BaiHu.Name) { IsLocked = true, Player = Player, Time = PPeriod.EndTurn.During, AIPriority = 250, Condition = (PGame Game) => { PChiaTaoFaKuoTag ChiaTaoFaKuoTag = Game.TagManager.FindPeekTag <PChiaTaoFaKuoTag>(PChiaTaoFaKuoTag.TagName); return Player.Equals(Game.NowPlayer) && ChiaTaoFaKuoTag.LordList.Count >= 1; }, Effect = (PGame Game) => { BaiHu.AnnouceUseSkill(Player); PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); PChiaTaoFaKuoTag ChiaTaoFaKuoTag = Game.TagManager.FindPeekTag <PChiaTaoFaKuoTag>(PChiaTaoFaKuoTag.TagName); ChiaTaoFaKuoTag.LordList.ForEach((PPlayer _Player) => { if (!_Player.Tags.ExistTag(PTag.LockedTag.Name)) { _Player.Tags.CreateTag(PTag.LockedTag); } }); } }); })); }
public P_PanYue() : base("潘岳") { Sex = PSex.Male; Age = PAge.Medieval; Index = 2; Tips = "定位:辅助\n" + "难度:简单\n" + "史实:西晋文学家、政治家,著名美男子,“金谷二十四友”之一,代表作是《闲居赋》。\n" + "攻略:\n潘岳是十分适合新手的一个武将,两个技能都非常简单。即使是新手使用,也可以在竞技模式中发挥出出色的实力。\n对于潘岳玩家而言,伤害类计策建议放到第二个空闲时间点使用,这样根据所在土地是否为队友的土地及是否受到伤害,可以判断是放出伤害计策,还是发动【闲居】。"; PSkill YingZi = new PSkill("英姿") { SoftLockOpen = true }; SkillList.Add(YingZi .AddTimeTrigger( new PTime[] { PPeriod.StartTurn.During }, (PTime Time, PPlayer Player, PSkill Skill) => { return(new PTrigger(YingZi.Name) { IsLocked = false, Player = Player, Time = Time, AIPriority = 100, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer); }, Effect = (PGame Game) => { YingZi.AnnouceUseSkill(Player); Game.GetMoney(Player, 200); } }); })); PSkill XianJu = new PSkill("闲居"); SkillList.Add(XianJu // 用每回合限一次这个模板控制条件 .AnnounceTurnOnce() // 回合结束时触发技能 .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(XianJu.Name) { IsLocked = false, Player = Player, Time = PPeriod.EndTurn.During, AIPriority = 100, Condition = (PGame Game) => { return Player.Equals(Game.NowPlayer) && Player.Position.Lord != null && !Player.Equals(Player.Position.Lord) && Player.RemainLimit(XianJu.Name); }, AICondition = (PGame Game) => { return Player.Position.Lord.TeamIndex == Player.TeamIndex; }, Effect = (PGame Game) => { XianJu.AnnouceUseSkill(Player); Game.GetHouse(Player.Position, 1); } }); }) // 伤害结算结束时,如果造成或受到伤害,将每回合限一次的模板打上标记 .AddTrigger( (PPlayer Player, PSkill Skill) => { return(new PTrigger(XianJu.Name + "[条件记录]") { IsLocked = true, Player = Player, Time = PTime.Injure.EndSettle, Condition = (PGame Game) => { PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName); return Player.Equals(Game.NowPlayer) && (Player.Equals(InjureTag.ToPlayer) || Player.Equals(InjureTag.FromPlayer)) && InjureTag.Injure > 0; }, Effect = (PGame Game) => { Player.Tags.FindPeekTag <PUsedTag>(PUsedTag.TagNamePrefix + XianJu.Name).Count++; } }); })); }
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 }