Example #1
0
 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
 }
Example #2
0
    public P_JeanneDarc() : base("贞德")
    {
        Sex   = PSex.Female;
        Age   = PAge.Medieval;
        Index = 30;
        Cost  = 40;
        Tips  = "定位:辅助\n" +
                "难度:简单\n" +
                "史实:法国民族英雄,天主教圣人,被称为“奥尔良的圣女”。在英法百年战争中,她带领法国军队对抗英军的入侵,屡战屡胜,扭转了战争的局势。\n" +
                "攻略:\n-";

        PSkill ShengNv = new PSkill("圣女");

        SkillList.Add(ShengNv
                      .AddTrigger(
                          (PPlayer Player, PSkill Skill) => {
            return(new PTrigger(ShengNv.Name)
            {
                IsLocked = true,
                Player = Player,
                Time = PTime.EnterDyingTime,
                AIPriority = 5,
                Condition = (PGame Game) => {
                    PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName);
                    return Player.Area.OwnerCardNumber > 0 && DyingTag.Source != null && DyingTag.Source is PBlock;
                },
                AICondition = (PGame Game) => {
                    PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName);
                    if (DyingTag.Killer.General is P_LvZhi)
                    {
                        return false;
                    }
                    if (DyingTag.Player.TeamIndex == Player.TeamIndex)
                    {
                        if (Player.Equals(DyingTag.Player))
                        {
                            return true;
                        }
                        else
                        {
                            if (DyingTag.Player.Money <= -10000)
                            {
                                return false;
                            }
                            if (Player.Money > 5000)
                            {
                                return true;
                            }
                            else
                            {
                                return Player.Area.OwnerCardNumber <= 3;
                            }
                        }
                    }
                    else
                    {
                        return false;
                    }
                },
                Effect = (PGame Game) => {
                    ShengNv.AnnouceUseSkill(Player);
                    PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName);
                    Game.CardManager.ThrowAll(Player.Area);
                    PCard Card = new P_ChiehTaoShaJevn().Instantiate();
                    Card.Point = 0;
                    PTrigger Trigger = Card.Model.MoveInHandTriggerList.Find((Func <PPlayer, PCard, PTrigger> TriggerGenerator) => TriggerGenerator(DyingTag.Player, Card).Time.Equals(PTime.EnterDyingTime))?.Invoke(DyingTag.Player, Card);
                    if (Trigger != null)
                    {
                        Game.Logic.StartSettle(new PSettle("圣女[借尸还魂]", Trigger.Effect));
                        Game.LoseMoney(Player, 5000);
                        if (!Player.Equals(DyingTag.Player))
                        {
                            Game.GetCard(DyingTag.Player);
                        }
                    }
                }
            });
        }));
    }
Example #3
0
    // 宣布一个时机的到来
    public void CallTime(PTime Time)
    {
        PLogger.Log("时机到来:" + Time.Name);
        if (Time.IsPeroidTime() && EndTurnDirectly)
        {
            PLogger.Log("阶段立刻结束");
            return;
        }
        List <PPlayer>  Sequence = SettleSequence();
        List <PTrigger> ValidTriggerList;
        List <PTrigger> AlreadyTriggerList = new List <PTrigger>();

        foreach (PPlayer Judger in Sequence)
        {
            AlreadyTriggerList.Clear();
            PLogger.Log("开始启动" + (Judger == null ? "null" : Judger.Name) + "的响应");
            while ((ValidTriggerList = TriggerList.FindAll((PTrigger Trigger) => {
                if (Trigger.Time.Equals(Time) && Trigger.Player == Judger && !AlreadyTriggerList.Contains(Trigger) && (Judger == null || Judger.IsAlive))
                {
                    PLogger.Log("    执行判定:" + Trigger.Name);
                    bool Condition = Trigger.Condition(Game);
                    bool AiCondition = Condition && (Judger == null || Judger.IsUser || Trigger.AICondition(Game));
                    return(AiCondition);
                }
                else
                {
                    return(false);
                }
            })).Count > 0)
            {
                PTrigger ChosenTrigger = null;
                if (Judger == null || Judger.IsAI)
                {
                    ChosenTrigger = PMath.Max(ValidTriggerList, (PTrigger Trigger) => Trigger.AIPriority).Key;
                }
                else
                {
                    if (ValidTriggerList.Count == 1 && ValidTriggerList[0].IsLocked)
                    {
                        ChosenTrigger = ValidTriggerList[0];
                    }
                    else
                    {
                        string[] TriggerNames = ValidTriggerList.ConvertAll((PTrigger Trigger) => Trigger.Name + (Trigger.IsLocked ? "(锁定)" : string.Empty)).ToArray();
                        if (ValidTriggerList.TrueForAll((PTrigger Trigger) => !Trigger.IsLocked))
                        {
                            TriggerNames = TriggerNames.Concat(new string[] { "取消" }).ToArray();
                        }
                        int ChosenResult = PNetworkManager.NetworkServer.ChooseManager.Ask(Judger, "选择以下效果发动", TriggerNames);
                        if (ChosenResult < ValidTriggerList.Count)
                        {
                            ChosenTrigger = ValidTriggerList[ChosenResult];
                        }
                    }
                }
                if (ChosenTrigger != null)
                {
                    Game.Logic.StartSettle(new PSettle("于[" + Time.Name + "]触发[" + ChosenTrigger.Name + "]", (PGame Game) => {
                        ChosenTrigger.Effect(Game);
                    }));
                    if (!ChosenTrigger.CanRepeat)
                    {
                        AlreadyTriggerList.Add(ChosenTrigger);
                    }
                    if (Time.IsPeroidTime() && EndTurnDirectly)
                    {
                        PLogger.Log("阶段立刻结束");
                        return;
                    }
                    if (Time.Equals(PTime.EnterDyingTime))
                    {
                        PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName);
                        if (DyingTag.Player != null && DyingTag.Player.Money > 0)
                        {
                            PLogger.Log("脱离濒死状态");
                            return;
                        }
                    }
                }
                else
                {
                    break;
                }
            }
        }
        PLogger.Log("时机结束:" + Time.Name);
    }
Example #4
0
    public P_LvZhi() : base("吕雉")
    {
        Sex        = PSex.Female;
        Age        = PAge.Classic;
        Index      = 29;
        Cost       = 30;
        NewGeneral = true;
        Tips       = "定位:攻击\n" +
                     "难度:简单\n" +
                     "史实:汉高祖刘邦的皇后,惠帝、二少帝时的皇太后。统治时期实行与民休息的政策,为文景之治奠定了基础。\n" +
                     "攻略:\n-";

        PSkill ZhenSha = new PSkill("鸩杀")
        {
            Initiative = true
        };

        PPlayer ZhenShaTarget(PGame Game, PPlayer Player)
        {
            List <PPlayer> PossibleTargets = Game.AlivePlayers(Player).FindAll((PPlayer _Player) => _Player.Distance(Player) <= 1);
            PPlayer        Target          = PMath.Max(PossibleTargets, (PPlayer _Player) => {
                int InjureValue = PAiTargetChooser.InjureExpect(Game, Player, Player, _Player, ZhenShaInjure, ZhenSha);
                if (_Player.TeamIndex == Player.TeamIndex)
                {
                    KeyValuePair <PCard, int> MaxValueCard = PAiCardExpectation.FindMostValuable(Game, _Player, Player, true, false, false, true);
                    int MaxValue = MaxValueCard.Value - MaxValueCard.Key.AIInHandExpectation(Game, Player);
                    return(MaxValue + InjureValue);
                }
                else
                {
                    KeyValuePair <PCard, int> MinValueCard = PAiCardExpectation.FindLeastValuable(Game, _Player, Player, true, false, false, true);
                    int MinValue = MinValueCard.Value + MinValueCard.Key.AIInHandExpectation(Game, Player);
                    return(-MinValue + InjureValue);
                }
            }, true).Key;

            return(Target);
        }

        SkillList.Add(ZhenSha
                      .AnnounceTurnOnce()
                      .AddTimeTrigger(
                          new PTime[] {
            PPeriod.FirstFreeTime.During,
            PPeriod.SecondFreeTime.During
        },
                          (PTime Time, PPlayer Player, PSkill Skill) => {
            return(new PTrigger(ZhenSha.Name)
            {
                IsLocked = false,
                Player = Player,
                Time = Time,
                AIPriority = 40,
                CanRepeat = true,
                Condition = (PGame Game) => {
                    return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.RemainLimit(ZhenSha.Name) && Player.Area.HandCardArea.CardNumber > 0 && Game.AlivePlayers(Player).Exists((PPlayer _Player) => _Player.Distance(Player) <= 1);
                },
                AICondition = (PGame Game) => {
                    return ZhenShaTarget(Game, Player) != null;
                },
                Effect = (PGame Game) => {
                    ZhenSha.AnnouceUseSkill(Player);
                    PPlayer Target = null;
                    if (Player.IsAI)
                    {
                        Target = ZhenShaTarget(Game, Player);
                    }
                    else
                    {
                        Target = PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayer(Player, (PGame _Game, PPlayer _Player) => _Player.Distance(Player) <= 1 && !_Player.Equals(Player), ZhenSha.Name, true);
                    }
                    if (Target != null)
                    {
                        Game.GiveCardTo(Player, Target, true, false);
                        Game.Injure(Player, Target, 1500, ZhenSha);
                        ZhenSha.DeclareUse(Player);
                    }
                }
            });
        }));
        PSkill XuMou = new PSkill("蓄谋")
        {
            Lock = true
        };

        SkillList.Add(XuMou
                      .AddTrigger(
                          (PPlayer Player, PSkill Skill) => {
            return(new PTrigger(XuMou.Name)
            {
                IsLocked = true,
                Player = Player,
                Time = PTime.LeaveDyingTime,
                AIPriority = 100,
                Condition = (PGame Game) => {
                    PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName);
                    return Player.Equals(DyingTag.Killer) && !Player.Equals(DyingTag.Player);
                },
                Effect = (PGame Game) => {
                    XuMou.AnnouceUseSkill(Player);
                    PDyingTag DyingTag = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName);
                    DyingTag.Player.Money = 0;
                    Game.Die(DyingTag.Player, DyingTag.Killer);
                }
            });
        }));
    }
Example #5
0
 public PLandArch() : base("土地类成就")
 {
     TriggerList.Add(new PTrigger("地产大亨")
     {
         IsLocked = true,
         Time     = PTime.EndGameTime,
         Effect   = (PGame Game) => {
             Game.GetWinner().ForEach((PPlayer Player) => {
                 if (Game.Map.BlockList.FindAll((PBlock Block) => Player.Equals(Block.Lord)).Count >= 15)
                 {
                     Announce(Game, Player, "地产大亨");
                 }
             });
         }
     });
     TriggerList.Add(new PTrigger("大包工头")
     {
         IsLocked = true,
         Time     = PTime.EndGameTime,
         Effect   = (PGame Game) => {
             Game.GetWinner().ForEach((PPlayer Player) => {
                 if (PMath.Sum(Game.Map.BlockList.FindAll((PBlock Block) => Player.Equals(Block.Lord)).ConvertAll((PBlock Block) => (double)Block.HouseNumber)) >= 30)
                 {
                     Announce(Game, Player, "大包工头");
                 }
             });
         }
     });
     TriggerList.Add(new PTrigger("双11剁手")
     {
         IsLocked = true,
         Time     = PTime.DieTime,
         Effect   = (PGame Game) => {
             PDyingTag DyingTag   = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName);
             PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
             if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).BusinessType.Equals(PBusinessType.ShoppingCenter))
             {
                 Announce(Game, DyingTag.Player, "双11剁手");
             }
         }
     });
     TriggerList.Add(new PTrigger("化学爆炸")
     {
         IsLocked = true,
         Time     = PTime.DieTime,
         Effect   = (PGame Game) => {
             PDyingTag DyingTag   = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName);
             PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
             if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).BusinessType.Equals(PBusinessType.Institute))
             {
                 Announce(Game, DyingTag.Player, "化学爆炸");
             }
         }
     });
     TriggerList.Add(new PTrigger("舍身饲虎")
     {
         IsLocked = true,
         Time     = PTime.DieTime,
         Effect   = (PGame Game) => {
             PDyingTag DyingTag   = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName);
             PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
             if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).BusinessType.Equals(PBusinessType.Park))
             {
                 Announce(Game, DyingTag.Player, "舍身饲虎");
             }
         }
     });
     TriggerList.Add(new PTrigger("撞墙")
     {
         IsLocked = true,
         Time     = PTime.DieTime,
         Effect   = (PGame Game) => {
             PDyingTag DyingTag   = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName);
             PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
             if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).BusinessType.Equals(PBusinessType.Castle))
             {
                 Announce(Game, DyingTag.Player, "撞墙");
             }
         }
     });
     TriggerList.Add(new PTrigger("卖身")
     {
         IsLocked = true,
         Time     = PTime.DieTime,
         Effect   = (PGame Game) => {
             PDyingTag DyingTag   = Game.TagManager.FindPeekTag <PDyingTag>(PDyingTag.TagName);
             PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
             if (InjureTag != null && DyingTag != null && DyingTag.Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).BusinessType.Equals(PBusinessType.Pawnshop))
             {
                 Announce(Game, DyingTag.Player, "卖身");
             }
         }
     });
     TriggerList.Add(new PTrigger("连锁商城")
     {
         IsLocked = true,
         Time     = PTime.EndGameTime,
         Effect   = (PGame Game) => {
             Game.GetWinner().ForEach((PPlayer Player) => {
                 if (Game.Map.BlockList.FindAll((PBlock Block) => Player.Equals(Block.Lord) && Block.BusinessType.Equals(PBusinessType.ShoppingCenter)).Count >= 3)
                 {
                     Announce(Game, Player, "连锁商城");
                 }
             });
         }
     });
     TriggerList.Add(new PTrigger("5A级景区")
     {
         IsLocked = true,
         Time     = PTime.EndGameTime,
         Effect   = (PGame Game) => {
             Game.GetWinner().ForEach((PPlayer Player) => {
                 if (Game.Map.BlockList.Exists((PBlock Block) => Player.Equals(Block.Lord) && Block.BusinessType.Equals(PBusinessType.Park) && Block.HouseNumber >= 5))
                 {
                     Announce(Game, Player, "5A级景区");
                 }
             });
         }
     });
     TriggerList.Add(new PTrigger("十三太堡")
     {
         IsLocked = true,
         Time     = PTime.EndGameTime,
         Effect   = (PGame Game) => {
             Game.GetWinner().ForEach((PPlayer Player) => {
                 if (Game.Map.BlockList.Exists((PBlock Block) => Player.Equals(Block.Lord) && Block.BusinessType.Equals(PBusinessType.Castle) && Block.HouseNumber >= 13))
                 {
                     Announce(Game, Player, "十三太堡");
                 }
             });
         }
     });
 }