コード例 #1
0
    public static bool XianJuTest(PGame Game, PPlayer Player)
    {
        string XianJu = "闲居";

        // 依据闲居,优化使用伤害类计策牌的条件
        if (Player.General is P_PanYue && Game.NowPlayer.Equals(Player))
        {
            if (!Game.NowPeriod.IsAfter(PPeriod.WalkingStage))
            {
                List <PBlock> NextBlocks = PAiMapAnalyzer.NextBlocks(Game, Player);
                return(NextBlocks.Exists((PBlock Block) => Block.Lord != null && Block.Lord.TeamIndex != Player.TeamIndex && Block.Toll >= Player.Money) || !NextBlocks.Exists((PBlock Block) => Block.Lord != null && Block.Lord.TeamIndex == Player.TeamIndex) || !Player.RemainLimit(XianJu));
            }
            else
            {
                return(Player.Position.Lord == null || Player.Position.Lord.TeamIndex != Player.TeamIndex || Player.Money <= 2000 || !Player.RemainLimit(XianJu));
            }
        }
        return(true);
    }
コード例 #2
0
ファイル: P_WangXu.cs プロジェクト: ClazyChen/Richer-4
    public P_WangXu() : base("王诩")
    {
        Sex   = PSex.Male;
        Age   = PAge.Classic;
        Index = 5;
        Tips  = "定位:全能\n" +
                "难度:困难\n" +
                "史实:战国时期思想家、纵横家,号“鬼谷子”。\n" +
                "攻略:\n王诩具有两个技能,在免费武将里是一个较为难用的武将,建议对游戏有一定了解之后使用。\n【纵横】可以将牌转化成【远交近攻】,但3和6两个点数里有不少高价值的牌,如【借尸还魂】、【欲擒故纵】、【抛砖引玉】、【走为上计】等,是否将这些牌转化成显性1000收益、隐性收益视队友状况而定的【远交近攻】,需要结合场上形势进行把握。\n【隐居】提高了王诩的生存能力,但【隐居】本身是负收益技能,移出游戏的王诩失去了收取过路费的能力,还会亏一座房屋,如果每回合都使用,必定只能苟延残喘片刻。所以,【隐居】的目的地需要给自己留出几个回合较为安全的空间,让自己在【隐居】的间隙可以造成输出。\n对于新手而言,也可以选择无脑【纵横】给大神队友补牌,后期保持【隐居】牵制敌人的打法。";

        PSkill ZongHeng = new PSkill("纵横")
        {
            Initiative = true
        };

        SkillList.Add(ZongHeng
                      .AddTimeTrigger(
                          new PTime[] {
            PPeriod.FirstFreeTime.During,
            PPeriod.SecondFreeTime.During
        },
                          (PTime Time, PPlayer Player, PSkill Skill) => {
            return(new PTrigger(ZongHeng.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.Area.HandCardArea.CardList.Exists((PCard Card) => Card.Point % 3 == 0);
                },
                AICondition = (PGame Game) => {
                    return Player.Area.HandCardArea.CardList.Exists((PCard Card) => {
                        return Card.Point % 3 == 0 && Card.Model.AIInHandExpectation(Game, Player) < 3000;
                    }) && P_YooenChiaoChinKung.AIEmitTargets(Game, Player)[0] != null;
                },
                Effect = (PGame Game) => {
                    ZongHeng.AnnouceUseSkill(Player);
                    PCard TargetCard = null;
                    if (Player.IsAI)
                    {
                        TargetCard = PAiCardExpectation.FindLeastValuable(Game, Player, Player, true, false, false, true, (PCard Card) => Card.Point % 3 == 0).Key;
                    }
                    else
                    {
                        List <PCard> Waiting = Player.Area.HandCardArea.CardList.FindAll((PCard Card) => Card.Point % 3 == 0);
                        int Result = PNetworkManager.NetworkServer.ChooseManager.Ask(Player, ZongHeng.Name, Waiting.ConvertAll((PCard Card) => Card.Name).Concat(new List <string> {
                            "取消"
                        }).ToArray());
                        if (Result >= 0 && Result < Waiting.Count)
                        {
                            TargetCard = Waiting[Result];
                        }
                    }
                    if (TargetCard != null)
                    {
                        TargetCard.Model = new P_YooenChiaoChinKung();
                        PTrigger Trigger = TargetCard.Model.MoveInHandTriggerList.Find((Func <PPlayer, PCard, PTrigger> TriggerGenerator) => TriggerGenerator(Player, TargetCard).Time.Equals(PPeriod.FirstFreeTime.During))?.Invoke(Player, TargetCard);
                        if (Trigger != null)
                        {
                            Game.Logic.StartSettle(new PSettle("纵横[远交近攻]", Trigger.Effect));
                        }
                    }
                }
            });
        }));
        PSkill YinJu = new PSkill("隐居")
        {
            Initiative = true
        };

        SkillList.Add(YinJu
                      .AnnounceTurnOnce()
                      .AddTimeTrigger(
                          new PTime[] {
            PPeriod.FirstFreeTime.During,
            PPeriod.SecondFreeTime.During
        },
                          (PTime Time, PPlayer Player, PSkill Skill) => {
            return(new PTrigger(YinJu.Name)
            {
                IsLocked = false,
                Player = Player,
                Time = Time,
                AIPriority = 10,
                CanRepeat = true,
                Condition = (PGame Game) => {
                    return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.RemainLimit(YinJu.Name) && Player.HasHouse;
                },
                AICondition = (PGame Game) => {
                    if (!Player.CanBeInjured)
                    {
                        return false;
                    }
                    if (Game.NowPeriod.Equals(PPeriod.FirstFreeTime))
                    {
                        bool CanGo = false;
                        PAiMapAnalyzer.NextBlocks(Game, Player).ForEach((PBlock Block) => {
                            if (Block.Lord != null && Block.Lord.TeamIndex != Player.TeamIndex && Block.Toll >= Player.Money)
                            {
                                CanGo = true;
                            }
                            if (Block.GetMoneyStopSolid < 0 && -Block.GetMoneyStopSolid >= Player.Money)
                            {
                                CanGo = true;
                            }
                            if (Block.GetMoneyStopPercent < 0 && PMath.Percent(Player.Money, -Block.GetMoneyStopPercent) >= Player.Money)
                            {
                                CanGo = true;
                            }
                        });
                        return CanGo || PAiMapAnalyzer.OutOfGameExpect(Game, Player, true) - PAiMapAnalyzer.MinValueHouse(Game, Player).Value > 0;
                    }
                    else
                    {
                        return false;
                    }
                },
                Effect = (PGame Game) => {
                    YinJu.AnnouceUseSkill(Player);
                    PBlock Block = null;
                    if (Player.IsAI)
                    {
                        Block = PAiMapAnalyzer.MinValueHouse(Game, Player).Key;
                    }
                    else
                    {
                        Block = PNetworkManager.NetworkServer.ChooseManager.AskToChooseBlock(Player, YinJu.Name, (PBlock _Block) => {
                            return Player.Equals(_Block.Lord) && _Block.HouseNumber > 0;
                        });
                    }
                    if (Block != null)
                    {
                        Game.MovePosition(Player, Player.Position, Block);
                        PNetworkManager.NetworkServer.TellClients(new PHighlightBlockOrder(Block.Index.ToString()));
                        Game.LoseHouse(Block, 1);
                        Player.Tags.CreateTag(PTag.OutOfGameTag);
                        YinJu.DeclareUse(Player);
                    }
                }
            });
        }));
    }
コード例 #3
0
ファイル: P_HeShen.cs プロジェクト: ClazyChen/Richer-4
    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);
                }
            });
        }));
    }
コード例 #4
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);
                }
            });
        }));
    }
コード例 #5
0
ファイル: P_LianPo.cs プロジェクト: ClazyChen/Richer-4
    public P_LianPo() : base("廉颇")
    {
        Sex   = PSex.Male;
        Age   = PAge.Classic;
        Index = 1;
        Tips  = "定位:辅助\n" +
                "难度:中等\n" +
                "史实:战国时期赵国名将,被誉为“战国四大名将”之一,曾击退燕国入侵,斩杀栗腹。\n" +
                "攻略:\n廉颇可以把自己的现金转移给队友,同时让队友摸牌。和王诩、虞姬等技能依赖于手牌的武将组队时,廉颇是一个不错的选择,提高队友的技能发动频率。\n" +
                "新人推荐使用廉颇,给大神队友更多的牌,让队友有更大的发挥空间。\n" +
                "因为廉颇的现金可以给队友提供每回合2000(一张牌)的收益,廉颇很容易成为敌人的集火对象,在这种情况下,可以减少房屋的建造(除购物中心外,建房收益均不及负荆收益),让自己的现金发挥更大的价值。";

        PSkill FuJing = new PSkill("负荆")
        {
            Initiative = true
        };

        SkillList.Add(FuJing
                      .AnnounceTurnOnce()
                      .AddTimeTrigger(
                          new PTime[] {
            PPeriod.FirstFreeTime.During,
            PPeriod.SecondFreeTime.During
        },
                          (PTime Time, PPlayer Player, PSkill Skill) => {
            return(new PTrigger(FuJing.Name)
            {
                IsLocked = false,
                Player = Player,
                Time = Time,
                AIPriority = 180,
                CanRepeat = true,
                Condition = (PGame Game) => {
                    return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Player.RemainLimit(FuJing.Name);
                },
                AICondition = (PGame Game) => {
                    if (Game.Teammates(Player, false).Count == 0 || Player.Money < 6000)
                    {
                        return false;
                    }
                    if (Player.Money >= 15000 || !Player.CanBeInjured)
                    {
                        return true;
                    }
                    else
                    {
                        bool CanGo = true;
                        PAiMapAnalyzer.NextBlocks(Game, Player).ForEach((PBlock Block) => {
                            if (Block.Lord == null && Block.CanPurchase && Block.Price >= Player.Money - 8000)
                            {
                                CanGo = false;
                            }
                            if (Block.Lord != null && Block.Lord.TeamIndex != Player.TeamIndex && Block.Toll >= Player.Money - 8000)
                            {
                                CanGo = false;
                            }
                        });
                        return CanGo;
                    }
                },
                Effect = (PGame Game) => {
                    FuJing.AnnouceUseSkill(Player);
                    PPlayer Target = null;
                    if (Player.IsAI)
                    {
                        Target = PMath.Max(Game.Teammates(Player, false), (PPlayer _Player) => _Player.AiCardExpectation + PMath.RandInt(0, 5) + ((Player.Defensor != null && Player.Defensor.Model is P_PaiHuaChooon && !Player.Sex.Equals(_Player.Sex)) ? 1500 : 0)).Key;
                    }
                    else
                    {
                        Target = PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayer(Player, PTrigger.Except(Player), FuJing.Name, true);
                    }
                    if (Target != null)
                    {
                        Game.Injure(Target, Player, 3000, FuJing);
                        Game.GetCard(Target, 1);
                        FuJing.DeclareUse(Player);
                    }
                }
            });
        }));
    }