Esempio n. 1
0
    public int AIExpect(PGame Game, PPlayer Player, PBlock Block)
    {
        int[] dx = { 1, -1, 0, 0 };
        int[] dy = { 0, 0, 1, -1 };
        int   OriginalX = Block.X;
        int   OriginalY = Block.Y;
        int   sum, x, y;

        sum = PAiMapAnalyzer.HouseValue(Game, Player, Block);
        for (int i = 0; i < 4; ++i)
        {
            x = OriginalX;
            y = OriginalY;
            do
            {
                x += dx[i];
                y += dy[i];
                PBlock TempBlock = Game.Map.FindBlockByCoordinate(x, y);
                if (TempBlock != null)
                {
                    if (TempBlock.Lord != null)
                    {
                        sum += PAiMapAnalyzer.HouseValue(Game, Player, TempBlock);
                    }
                }
                else
                {
                    break;
                }
            } while (true);
        }
        return(sum);
    }
Esempio n. 2
0
    private KeyValuePair <KeyValuePair <PBlock, PBlock>, int> MaxLandPair(PGame Game, PPlayer Player)
    {
        int           Test     = int.MinValue;
        List <PBlock> LandList = Game.Map.BlockList.FindAll((PBlock Block) => Block.Lord != null && !Block.IsBusinessLand);
        PBlock        Ans1     = null;
        PBlock        Ans2     = null;

        foreach (PBlock Land1 in LandList)
        {
            foreach (PBlock Land2 in LandList)
            {
                if (Land1.Index < Land2.Index)
                {
                    int HouseCount1 = Land1.HouseNumber;
                    int HouseCount2 = Land2.HouseNumber;
                    int ValueBefore = PAiMapAnalyzer.HouseValue(Game, Player, Land1) * HouseCount1 +
                                      PAiMapAnalyzer.HouseValue(Game, Player, Land2) * HouseCount2;
                    int ValueAfter = PAiMapAnalyzer.HouseValue(Game, Player, Land1) * HouseCount2 +
                                     PAiMapAnalyzer.HouseValue(Game, Player, Land2) * HouseCount1;
                    if (ValueAfter - ValueBefore > Test)
                    {
                        Test = ValueAfter - ValueBefore;
                        Ans1 = Land1;
                        Ans2 = Land2;
                    }
                }
            }
        }
        return(new KeyValuePair <KeyValuePair <PBlock, PBlock>, int>(new KeyValuePair <PBlock, PBlock>(Ans1, Ans2), Test));
    }
Esempio n. 3
0
    public P_BaiQi() : base("白起")
    {
        Sex   = PSex.Male;
        Age   = PAge.Classic;
        Index = 9;
        Cost  = 25;
        Tips  = "定位:爆发\n" +
                "难度:简单\n" +
                "史实:战国时期秦国名将,“战国四大名将”之一,曾在伊阙之战、长平之战中大败三晋军队,歼敌数十万,功封武安君。\n" +
                "攻略:\n白起是一个强制命中系武将,白起的存在使得对方无法通过【李代桃僵】、【指桑骂槐】一类的牌免除伤害,或通过【八卦阵】、【龙胆】等方式减少伤害,而必须硬吃下伤害的100%(通常这个数字比伤害值高)。随之带来的损失则是收费地的地价永久性减少,很多时候这是不值的,但在必杀一击上,白起一点都不会含糊。";

        PSkill CanSha = new PSkill("残杀");

        SkillList.Add(CanSha
                      .AddTrigger(
                          (PPlayer Player, PSkill Skill) => {
            return(new PTrigger(CanSha.Name)
            {
                IsLocked = false,
                Player = Player,
                Time = PTime.Injure.EmitInjure,
                AIPriority = 100,
                Condition = (PGame Game) => {
                    PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
                    return InjureTag.Injure > 0 && InjureTag.ToPlayer != null && Player.Equals(InjureTag.FromPlayer) &&
                    InjureTag.InjureSource is PBlock && ((PBlock)InjureTag.InjureSource).Price >= 1000;
                },
                AICondition = (PGame Game) => {
                    PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
                    if (InjureTag.ToPlayer.TeamIndex != Player.TeamIndex)
                    {
                        int Benefit = PMath.Percent(InjureTag.Injure, 100);
                        if (Benefit + InjureTag.Injure >= InjureTag.ToPlayer.Money)
                        {
                            // 一击必杀
                            return true;
                        }
                        if (Benefit >= 2000)
                        {
                            PBlock Source = (PBlock)InjureTag.InjureSource;
                            int Cost = 1000 + PAiMapAnalyzer.HouseValue(Game, Player, Source) * Source.HouseNumber * 1000 / Source.Price;
                            if (Cost < Benefit)
                            {
                                return true;
                            }
                        }
                    }
                    return false;
                },
                Effect = (PGame Game) => {
                    CanSha.AnnouceUseSkill(Player);
                    PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
                    PBlock Source = (PBlock)InjureTag.InjureSource;
                    Source.Price -= 1000;
                    PNetworkManager.NetworkServer.TellClients(new PRefreshBlockBasicOrder(Source));
                    Game.LoseMoney(InjureTag.ToPlayer, PMath.Percent(InjureTag.Injure, 100));
                }
            });
        }));
    }
Esempio n. 4
0
    public override int AIInHandExpectation(PGame Game, PPlayer Player)
    {
        int Basic = 2500;
        int Test  = PMath.Max(Game.Map.BlockList.FindAll((PBlock Block) => Block.Lord != null && Block.Lord.TeamIndex == Player.TeamIndex), (PBlock Block) => {
            return(PAiMapAnalyzer.HouseValue(Game, Block.Lord, Block));
        }).Value;

        Basic = Math.Max(Basic, Test);
        return(Math.Max(Basic, base.AIInHandExpectation(Game, Player)));
    }
Esempio n. 5
0
 public static PBlock AIEmitTarget(PGame Game, PPlayer Player)
 {
     return(PMath.Max(Game.Map.BlockList.FindAll((PBlock Block) => Block.Lord != null && Block.Lord.TeamIndex == Player.TeamIndex), (PBlock Block) => {
         return PAiMapAnalyzer.HouseValue(Game, Block.Lord, Block);
     }).Key);
 }
Esempio n. 6
0
    public P_ShuShangKaaiHua() : base(CardName)
    {
        Point = 5;
        Index = 29;
        foreach (PTime Time in new PTime[] {
            PPeriod.FirstFreeTime.During,
            PPeriod.SecondFreeTime.During
        })
        {
            MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => {
                return(new PTrigger(CardName)
                {
                    IsLocked = false,
                    Player = Player,
                    Time = Time,
                    AIPriority = 100,
                    Condition = (PGame Game) => {
                        return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) && Game.Map.BlockList.Exists((PBlock Block) => Block.Lord != null);
                    },
                    AICondition = (PGame Game) => {
                        return PMath.Max(Game.Map.BlockList.FindAll((PBlock Block) => Block.Lord != null && Block.Lord.TeamIndex == Player.TeamIndex), (PBlock Block) => {
                            return PAiMapAnalyzer.HouseValue(Game, Block.Lord, Block);
                        }).Value >= 2500;
                    },
                    Effect = (PGame Game) => {
                        List <PPlayer> Targets = new List <PPlayer>();
                        Game.Monitor.CallTime(PTime.Card.AfterEmitTargetTime, new PUseCardTag(Card, Player, Targets));
                        if (Player.Area.EquipmentCardArea.CardList.Contains(Card))
                        {
                            Game.CardManager.MoveCard(Card, Player.Area.EquipmentCardArea, Game.CardManager.SettlingArea);
                        }
                        else
                        {
                            Game.CardManager.MoveCard(Card, Player.Area.HandCardArea, Game.CardManager.SettlingArea);
                        }
                        Game.Monitor.CallTime(PTime.Card.AfterBecomeTargetTime, new PUseCardTag(Card, Player, Targets));

                        PBlock Target = null;
                        if (Player.IsAI)
                        {
                            Target = AIEmitTarget(Game, Player);
                        }
                        else
                        {
                            Target = PNetworkManager.NetworkServer.ChooseManager.AskToChooseBlock(Player, "树上开花[选择有主土地]", (PBlock Block) => Block.Lord != null);
                        }
                        if (Target != null)
                        {
                            PNetworkManager.NetworkServer.TellClients(new PHighlightBlockOrder(Target.Index.ToString()));
                            Game.GetHouse(Target, 1);
                            #region 成就:花开富贵
                            if (Target.BusinessType.Equals(PBusinessType.Park))
                            {
                                PArch.Announce(Game, Player, "花开富贵");
                            }
                            #endregion
                        }

                        Game.CardManager.MoveCard(Card, Game.CardManager.SettlingArea, Game.CardManager.ThrownCardHeap);
                        Game.Monitor.CallTime(PTime.Card.EndSettleTime, new PUseCardTag(Card, Player, Targets));
                    }
                });
            });
        }
    }
Esempio n. 7
0
 public P_FuTiChoouHsin() : base(CardName)
 {
     Point = 4;
     Index = 19;
     foreach (PTime Time in new PTime[] {
         PTime.Injure.AfterAcceptInjure
     })
     {
         MoveInHandTriggerList.Add((PPlayer Player, PCard Card) => {
             return(new PTrigger(CardName)
             {
                 IsLocked = false,
                 Player = Player,
                 Time = Time,
                 AIPriority = 60,
                 Condition = (PGame Game) => {
                     PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
                     return Player.Equals(InjureTag.ToPlayer) && InjureTag.FromPlayer != null && InjureTag.Injure > 0 && InjureTag.InjureSource != null && (InjureTag.InjureSource is PBlock) && ((PBlock)InjureTag.InjureSource).HouseNumber > 0;
                 },
                 AICondition = (PGame Game) => {
                     PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
                     PBlock Block = (PBlock)InjureTag.InjureSource;
                     return Block.Lord != null && Block.Lord.TeamIndex != Player.TeamIndex && (PAiMapAnalyzer.HouseValue(Game, Block.Lord, Block) >= 5400 || Player.Money <= 3000);
                 },
                 Effect = (PGame Game) => {
                     List <PPlayer> Targets = new List <PPlayer>();
                     Game.Monitor.CallTime(PTime.Card.AfterEmitTargetTime, new PUseCardTag(Card, Player, Targets));
                     Game.CardManager.MoveCard(Card, Player.Area.HandCardArea, Game.CardManager.SettlingArea);
                     Game.Monitor.CallTime(PTime.Card.AfterBecomeTargetTime, new PUseCardTag(Card, Player, Targets));
                     PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
                     PBlock Block = (PBlock)InjureTag.InjureSource;
                     #region 成就:破釜沉舟
                     if (Block.HouseNumber >= 10)
                     {
                         PArch.Announce(Game, Player, "破釜沉舟");
                     }
                     #endregion
                     Game.LoseHouse(Block, Block.HouseNumber);
                     Game.CardManager.MoveCard(Card, Game.CardManager.SettlingArea, Game.CardManager.ThrownCardHeap);
                     Game.Monitor.CallTime(PTime.Card.EndSettleTime, new PUseCardTag(Card, Player, Targets));
                 }
             });
         });
     }
 }
Esempio n. 8
0
    public P_Xdyu() : base("项羽")
    {
        Sex   = PSex.Male;
        Age   = PAge.Classic;
        Index = 17;
        Cost  = 30;
        Tips  = "定位:攻击\n" +
                "难度:中等\n" +
                "史实:秦末西楚霸王。曾在巨鹿之战中破釜沉舟,大破秦军。\n" +
                "攻略:\n项羽是一个十分考验玩家判断力的武将,【霸王】在小图的发挥显著强于大图,能够配合虞姬的【剑舞】,也可以增加天灾对敌人的伤害,还可以在一定程度上辅助队友的输出,范围为1限制了项羽的跨队列输出,但敌人越多就越强,颇有乌江快战之风范。\n" +
                "【沉舟】是一个爆发力极强的技能,相应地也要付出较大的代价。要想达到正收益,技能发动往往是在中后期,而购物中心往往是项羽的不二选择,当现金小于18000时【沉舟】已经是正收益,而对于领地来说只需花费小于正常花费即可一试。当然,在现金较低的情况下,项羽甚至可以连续【沉舟】,在高风险的同时可能获得极高的回报,或可重振西楚霸业。\n";

        PSkill Bawh = new PSkill("霸王");

        SkillList.Add(Bawh
                      .AddTimeTrigger(
                          new PTime[] {
            PTime.Injure.AcceptInjure
        },
                          (PTime Time, PPlayer Player, PSkill Skill) => {
            return(new PTrigger(Bawh.Name)
            {
                IsLocked = false,
                Player = Player,
                Time = Time,
                AIPriority = 200,
                Condition = (PGame Game) => {
                    PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
                    return InjureTag.Injure > 0 && InjureTag.ToPlayer != null && !Player.Equals(InjureTag.ToPlayer) && InjureTag.ToPlayer.Distance(Player) <= 1;
                },
                AICondition = (PGame Game) => {
                    PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
                    return InjureTag.ToPlayer.TeamIndex != Player.TeamIndex;
                },
                Effect = (PGame Game) => {
                    Bawh.AnnouceUseSkill(Player);
                    PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
                    InjureTag.Injure += 800;
                }
            });
        }));

        PSkill Ifvb = new PSkill("沉舟")
        {
            Initiative = true
        };

        SkillList.Add(Ifvb
                      .AnnounceTurnOnce()
                      .AddTimeTrigger(
                          new PTime[] {
            PPeriod.FirstFreeTime.During,
            PPeriod.SecondFreeTime.During
        },
                          (PTime Time, PPlayer Player, PSkill Skill) => {
            return(new PTrigger(Ifvb.Name)
            {
                IsLocked = false,
                Player = Player,
                Time = Time,
                AIPriority = 200,
                CanRepeat = true,
                Condition = (PGame Game) => {
                    return Player.Equals(Game.NowPlayer) && (Player.IsAI || Game.Logic.WaitingForEndFreeTime()) &&
                    Player.RemainLimit(Ifvb.Name) &&
                    Player.Position.Lord != null;
                },
                AICondition = (PGame Game) => {
                    if (Player.Money <= 1000)
                    {
                        return false;
                    }
                    return PMath.Percent(Player.Money, 50) + 1500 < 3 * PAiMapAnalyzer.HouseValue(Game, Player, Player.Position);
                },
                Effect = (PGame Game) => {
                    Ifvb.AnnouceUseSkill(Player);
                    Game.LoseMoney(Player, PMath.Percent(Player.Money, 50));
                    Game.GetHouse(Player.Position, 3);
                    Ifvb.DeclareUse(Player);
                }
            });
        }));
    }
Esempio n. 9
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);
                }
            });
        }));
    }
Esempio n. 10
0
    public P_XuanWu() : base("玄武")
    {
        Sex         = PSex.Male;
        Age         = PAge.Ancient;
        Index       = 1004;
        Cost        = 1;
        Tips        = string.Empty;
        CanBeChoose = false;

        //PSkill ShenShou = new PSkill("神兽") {
        //    Lock = true
        //};
        //SkillList.Add(ShenShou
        //    .AddTrigger(
        //    (PPlayer Player, PSkill Skill) => {
        //        return new PTrigger(ShenShou.Name) {
        //            IsLocked = true,
        //            Player = Player,
        //            Time = PTime.StartGameTime,
        //            AIPriority = 100,
        //            Effect = (PGame Game) => {
        //                ShenShou.AnnouceUseSkill(Player);
        //                Game.GetMoney(Player, 30000);
        //            }
        //        };
        //    })
        //    .AddTrigger(
        //    (PPlayer Player, PSkill Skill) => {
        //        return new PTrigger(ShenShou.Name) {
        //            IsLocked = true,
        //            Player = Player,
        //            Time = PPeriod.StartTurn.During,
        //            AIPriority = 100,
        //            Condition = (PGame Game) => {
        //                return Player.Equals(Game.NowPlayer);
        //            },
        //            Effect = (PGame Game) => {
        //                ShenShou.AnnouceUseSkill(Player);
        //                Game.GetMoney(Player, 500);
        //            }
        //        };
        //    }));

        PSkill XuanWu = new PSkill("玄武")
        {
            Lock = true
        };

        SkillList.Add(XuanWu
                      .AddTrigger(
                          (PPlayer Player, PSkill Skill) => {
            return(new PTrigger(XuanWu.Name)
            {
                IsLocked = true,
                Player = Player,
                Time = PTime.Injure.AcceptInjure,
                AIPriority = 250,
                Condition = (PGame Game) => {
                    PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
                    return InjureTag.Injure > 0 && Player.Equals(InjureTag.ToPlayer) && InjureTag.InjureSource is PBlock && Player.LandNumber > 0;
                },
                Effect = (PGame Game) => {
                    PInjureTag InjureTag = Game.TagManager.FindPeekTag <PInjureTag>(PInjureTag.TagName);
                    XuanWu.AnnouceUseSkill(Player);
                    int MinHouse = PMath.Min(Game.Map.FindBlock(Player), (PBlock Block) => Block.HouseNumber).Value;
                    PBlock Target = PMath.Max(Game.Map.FindBlock(Player).FindAll((PBlock Block) => Block.HouseNumber == MinHouse), (PBlock Block) => PAiMapAnalyzer.HouseValue(Game, Player, Block)).Key;
                    Game.GetHouse(Target, 1);
                }
            });
        }));
    }