Beispiel #1
0
    public void PurchaseLand(PPlayer Player, PBlock Block)
    {
        PPurchaseLandTag PurchaseLandTag = Monitor.CallTime(PTime.PurchaseLandTime, new PPurchaseLandTag(Player, Block));

        Player = PurchaseLandTag.Player;
        Block  = PurchaseLandTag.Block;
        int LandPrice = PurchaseLandTag.LandPrice;

        if (Player != null && Block != null && Player.IsAlive)
        {
            LoseMoney(Player, LandPrice);
            Block.Lord = Player;
            GetHouse(Block, 1);
            PNetworkManager.NetworkServer.TellClients(new PRefreshBlockBasicOrder(Block));
            if (Block.IsBusinessLand && Block.BusinessType.Equals(PBusinessType.NoType))
            {
                PBusinessType        ChosenType = PBusinessType.NoType;
                List <PBusinessType> Types      = new List <PBusinessType>()
                {
                    PBusinessType.ShoppingCenter, PBusinessType.Institute,
                    PBusinessType.Altar, PBusinessType.Castle, PBusinessType.Park
                };
                if (Player.IsUser)
                {
                    ChosenType = Types[PNetworkManager.NetworkServer.ChooseManager.Ask(Player, "选择商业用地的发展方向", Types.ConvertAll((PBusinessType BusinessType) => BusinessType.Name).ToArray(), Types.ConvertAll((PBusinessType BusinessType) => BusinessType.ToolTip).ToArray())];
                }
                else
                {
                    ChosenType = PAiBusinessChooser.ChooseDirection(this, Player, Block);
                }
                Block.BusinessType = ChosenType;
                if (ChosenType.Equals(PBusinessType.Park))
                {
                    GetMoney(Player, PMath.Percent(Block.Price, 50));
                }
                else if (ChosenType.Equals(PBusinessType.Castle))
                {
                    GetHouse(Block, GetBonusHouseNumberOfCastle(Player, Block));
                }
                PNetworkManager.NetworkServer.TellClients(new PRefreshBlockBasicOrder(Block));
            }
            else
            {
                Block.BusinessType = PBusinessType.NoType;
            }
            PNetworkManager.NetworkServer.TellClients(new PShowInformationOrder(Player.Name + "购买了" + Block.Name));
        }
    }
Beispiel #2
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
 }
Beispiel #3
0
    public P_HeShen() : base("和珅")
    {
        Sex   = PSex.Male;
        Age   = PAge.Industrial;
        Index = 24;
        Cost  = 30;
        Tips  = "定位:防御\n" +
                "难度:简单\n" +
                "史实:清朝中期权臣,中国历史上有名的巨贪,聚敛了约十亿两白银的巨大财富。\n" +
                "攻略:\n和珅是一名拥有不错防御力的武将。【贪污】使和珅的起始资金变相增加,而【受贿】可用于关键击杀,但一般都用于辅助队友。和珅的技能使用基本没有任何难度,因此十分适合新手使用。";

        PSkill TanWu = new PSkill("贪污")
        {
            Lock = true
        };

        SkillList.Add(TanWu
                      .AddTrigger(
                          (PPlayer Player, PSkill Skill) => {
            return(new PTrigger(TanWu.Name)
            {
                IsLocked = true,
                Player = Player,
                Time = PTime.PurchaseLandTime,
                Condition = (PGame Game) => {
                    PPurchaseLandTag PurchaseLandTag = Game.TagManager.FindPeekTag <PPurchaseLandTag>(PPurchaseLandTag.TagName);
                    return Player.Equals(PurchaseLandTag.Player);
                },
                Effect = (PGame Game) => {
                    TanWu.AnnouceUseSkill(Player);
                    PPurchaseLandTag PurchaseLandTag = Game.TagManager.FindPeekTag <PPurchaseLandTag>(PPurchaseLandTag.TagName);
                    PurchaseLandTag.LandPrice = PMath.Percent(PurchaseLandTag.LandPrice, 50);
                }
            });
        })
                      .AddTrigger(
                          (PPlayer Player, PSkill Skill) => {
            return(new PTrigger(TanWu.Name)
            {
                IsLocked = true,
                Player = Player,
                Time = PTime.PurchaseHouseTime,
                Condition = (PGame Game) => {
                    PPurchaseHouseTag PurchaseHouseTag = Game.TagManager.FindPeekTag <PPurchaseHouseTag>(PPurchaseHouseTag.TagName);
                    return Player.Equals(PurchaseHouseTag.Player);
                },
                Effect = (PGame Game) => {
                    TanWu.AnnouceUseSkill(Player);
                    PPurchaseHouseTag PurchaseHouseTag = Game.TagManager.FindPeekTag <PPurchaseHouseTag>(PPurchaseHouseTag.TagName);
                    PurchaseHouseTag.HousePrice = PMath.Percent(PurchaseHouseTag.HousePrice, 50);
                }
            });
        }));
        PSkill ShouHui = new PSkill("受贿")
        {
            Initiative = true
        };

        int ShouHuiExpect(PGame Game, PPlayer Player)
        {
            int Sum = 0;
            int Cnt = 0;

            foreach (PBlock Block in PAiMapAnalyzer.NextBlocks(Game, Player))
            {
                if (Block.CanPurchase && Block.Lord == null)
                {
                    Sum += Block.Price;
                    Cnt++;
                }
                else if (Player.Equals(Block.Lord))
                {
                    Sum += Block.HousePrice;
                    Cnt++;
                }
            }
            if (Cnt == 0)
            {
                return(-1);
            }
            else
            {
                return(Sum / Cnt);
            }
        }

        PPlayer ShouHuiTarget(PGame Game, PPlayer Player)
        {
            foreach (PPlayer Target in Game.Teammates(Player))
            {
                if (ShouHuiExpect(Game, Target) >= 1500 && Target.Money >= 2000 && Player.RemainLimit(ShouHui.Name, Target))
                {
                    return(Target);
                }
            }
            foreach (PPlayer Target in Game.Enemies(Player))
            {
                if (Player.RemainLimit(ShouHui.Name, Target))
                {
                    int Expect = ShouHuiExpect(Game, Target);
                    if (Expect < 0)
                    {
                        Expect = 3000; // 无法判断下次购买土地或房屋的收益
                    }
                    Expect -= PAiTargetChooser.InjureExpect(Game, Player, Player, Target, 1000, ShouHui);
                    if (Expect <= -1000)
                    {
                        return(Target);
                    }
                }
            }
            return(null);
        }

        SkillList.Add(ShouHui
                      .AnnounceEachPlayerOnce()
                      .AddTimeTrigger(
                          new PTime[] {
            PPeriod.FirstFreeTime.During,
            PPeriod.SecondFreeTime.During
        },
                          (PTime Time, PPlayer Player, PSkill Skill) => {
            return(new PTrigger(ShouHui.Name)
            {
                IsLocked = false,
                Player = Player,
                Time = Time,
                AIPriority = 10,
                CanRepeat = true,
                Condition = (PGame Game) => {
                    return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Game.AlivePlayers().Exists((PPlayer _Player) => Player.RemainLimit(ShouHui.Name, _Player));
                },
                AICondition = (PGame Game) => {
                    return ShouHuiTarget(Game, Player) != null;
                },
                Effect = (PGame Game) => {
                    ShouHui.AnnouceUseSkill(Player);
                    PPlayer Target = null;
                    if (Player.IsAI)
                    {
                        Target = ShouHuiTarget(Game, Player);
                    }
                    else
                    {
                        Target = PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayer(Player, (PGame _Game, PPlayer _Player) => Player.RemainLimit(ShouHui.Name, _Player), ShouHui.Name, true);
                    }
                    if (Target != null)
                    {
                        Game.Injure(Player, Target, 1000, ShouHui);
                        Target.Tags.CreateTag(new PShouHuiTag());
                        ShouHui.DeclareUseFor(Player, Target);
                    }
                }
            });
        })
                      .AddTrigger(
                          (PPlayer Player, PSkill Skill) => {
            return(new PTrigger(ShouHui.Name)
            {
                IsLocked = true,
                Player = null,
                Time = PTime.PurchaseLandTime,
                Condition = (PGame Game) => {
                    PPurchaseLandTag PurchaseLandTag = Game.TagManager.FindPeekTag <PPurchaseLandTag>(PPurchaseLandTag.TagName);
                    return PurchaseLandTag.Player.Tags.ExistTag(PShouHuiTag.TagName);
                },
                Effect = (PGame Game) => {
                    PPurchaseLandTag PurchaseLandTag = Game.TagManager.FindPeekTag <PPurchaseLandTag>(PPurchaseLandTag.TagName);
                    PurchaseLandTag.LandPrice = 0;
                    ShouHui.AnnouceUseSkill(PurchaseLandTag.Player);
                    PurchaseLandTag.Player.Tags.PopTag <PShouHuiTag>(PShouHuiTag.TagName);
                }
            });
        })
                      .AddTrigger(
                          (PPlayer Player, PSkill Skill) => {
            return(new PTrigger(ShouHui.Name)
            {
                IsLocked = true,
                Player = null,
                Time = PTime.PurchaseHouseTime,
                Condition = (PGame Game) => {
                    PPurchaseHouseTag PurchaseHouseTag = Game.TagManager.FindPeekTag <PPurchaseHouseTag>(PPurchaseHouseTag.TagName);
                    return PurchaseHouseTag.Player.Tags.ExistTag(PShouHuiTag.TagName);
                },
                Effect = (PGame Game) => {
                    PPurchaseHouseTag PurchaseHouseTag = Game.TagManager.FindPeekTag <PPurchaseHouseTag>(PPurchaseHouseTag.TagName);
                    PurchaseHouseTag.HousePrice = 0;
                    ShouHui.AnnouceUseSkill(PurchaseHouseTag.Player);
                    PurchaseHouseTag.Player.Tags.PopTag <PShouHuiTag>(PShouHuiTag.TagName);
                }
            });
        }));
    }