コード例 #1
0
    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);
                }
            }
        }
    }
コード例 #2
0
 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);
                 }
             });
         });
     }
 }
コード例 #3
0
ファイル: P_KuTingTao.cs プロジェクト: ClazyChen/Richer-4
 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;
                 }
             });
         });
     }
 }
コード例 #4
0
ファイル: P_NanManHsiang.cs プロジェクト: ClazyChen/Richer-4
 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;
                 }
             });
         });
     }
 }
コード例 #5
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);
                 }
             });
         });
     }
 }
コード例 #6
0
ファイル: P_LienHuanChi.cs プロジェクト: ClazyChen/Richer-4
 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));
         }
     });
 }
コード例 #7
0
    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));
                }
            });
        }));
    }
コード例 #8
0
ファイル: P_FanKeevWeiChu.cs プロジェクト: ClazyChen/Richer-4
    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));
                    }
                });
            });
        }
    }
コード例 #9
0
 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
                         }
                     }
                 })
             });
         });
     }
 }
コード例 #10
0
    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
        });
    }
コード例 #11
0
ファイル: P_Temujin.cs プロジェクト: ClazyChen/Richer-4
    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));
                        }
                    }
                }
            });
        }));
    }
コード例 #12
0
 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;
                     }
                 })
             });
         });
     }
 }
コード例 #13
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);
        }
    }
コード例 #14
0
 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));
                 }
             });
         });
     }
 }
コード例 #15
0
 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 + ":失败"));
                     }
                 }
             });
         });
     }
 }
コード例 #16
0
 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
                 })
             });
         });
     }
 }
コード例 #17
0
 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 + "空城,伤害防止"));
         }
     });
 }
コード例 #18
0
 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);
                 })
             });
         });
     }
 }
コード例 #19
0
 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);
                 }
             });
         });
     }
 }
コード例 #20
0
 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
                 })
             });
         });
     }
 }
コード例 #21
0
    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;
                    }
                }
            });
        })
                      );
    }
コード例 #22
0
    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);
                }
            });
        }));
    }
コード例 #23
0
    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);
                }
            });
        }));
    }
コード例 #24
0
    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);
                }
            });
        }));
    }
コード例 #25
0
ファイル: P_XdYu.cs プロジェクト: ClazyChen/Richer-4
    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);
                }
            });
        }));
    }
コード例 #26
0
ファイル: P_ChenYuanYuan.cs プロジェクト: ClazyChen/Richer-4
    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);
                    }
                }
            });
        }));
    }
コード例 #27
0
ファイル: P_ZhaoYun.cs プロジェクト: ClazyChen/Richer-4
    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);
                }
            });
        }));
    }
コード例 #28
0
ファイル: P_BaiHu.cs プロジェクト: ClazyChen/Richer-4
    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);
                        }
                    });
                }
            });
        }));
    }
コード例 #29
0
    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++;
                }
            });
        }));
    }
コード例 #30
0
ファイル: PCardArch.cs プロジェクト: ClazyChen/Richer-4
 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
 }