Exemplo n.º 1
0
    /// <summary>
    /// 选择一个目标玩家
    /// </summary>
    /// <param name="Chooser">谁来选择</param>
    /// <param name="Condition">筛选目标玩家的函数(无满足结果返回null)</param>
    /// <param name="Title">出现在选择框标题“为Title选择目标”</param>
    /// <param name="Cancel">是否允许取消(取消返回null)</param>
    /// <returns></returns>
    public PPlayer AskForTargetPlayer(PPlayer Chooser, PTrigger.PlayerCondition Condition, string Title, bool Cancel = false)
    {
        PGame          Game = PNetworkManager.NetworkServer.Game;
        List <PPlayer> SatisfiedPlayerList = Game.PlayerList.FindAll((PPlayer Player) => Player.IsAlive && Condition(Game, Player));

        if (SatisfiedPlayerList.Count == 0)
        {
            return(null);
        }
        if (Cancel)
        {
            SatisfiedPlayerList.Add(null);
        }
        int ChosenResult = Ask(Chooser, "为" + Title + "选择目标", SatisfiedPlayerList.ConvertAll((PPlayer Player) => Player == null ? "取消" : Player.Name).ToArray());

        return(SatisfiedPlayerList[ChosenResult]);
    }
Exemplo n.º 2
0
    public List <PPlayer> AskForTargetPlayers(PPlayer Chooser, PTrigger.PlayerCondition Condition, string Title, int MaxNumber = -1)
    {
        List <PPlayer> PlayerList = new List <PPlayer>();
        int            Chosen     = 0;

        for (PPlayer _Player = null; _Player != null || PlayerList.Count == 0;)
        {
            _Player = AskForTargetPlayer(Chooser, (PGame Game, PPlayer Player) => {
                return(Condition(Game, Player) && !PlayerList.Contains(Player));
            }, Title, PlayerList.Count > 0);
            if (_Player != null)
            {
                PlayerList.Add(_Player);
                if (MaxNumber > 0 && ++Chosen >= MaxNumber)
                {
                    break;
                }
            }
        }
        return(PlayerList);
    }
Exemplo n.º 3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="Game"></param>
 /// <param name="Player"></param>
 /// <param name="Condition"></param>
 /// <param name="ExpectedMoney"></param>
 /// <returns></returns>
 public static PPlayer InjureTarget(PGame Game, PPlayer FromPlayer, PPlayer Player, PTrigger.PlayerCondition Condition = null, int ExpectedMoney = 0, PObject Source = null, bool AllowNegative = false)
 {
     return(PMath.Max(Game.PlayerList.FindAll((PPlayer Target) => Target.IsAlive && (Condition == null || Condition(Game, Target))), (PPlayer Target) => {
         return InjureExpect(Game, Player, FromPlayer, Target, ExpectedMoney, Source) + PMath.RandInt(0, 10);
     }, !AllowNegative).Key);
 }
Exemplo n.º 4
0
 protected static Action <PGame> MakeMultiTargetNormalEffect(PPlayer Player, PCard Card, TargetChooser AITargetChooser, PTrigger.PlayerCondition TargetCondition, EffectFunc Effect, int MaxNumber = -1)
 {
     return(MakeNormalEffect(Player, Card, AITargetChooser, (PGame Game, PPlayer _Player) => {
         return PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayers(_Player, TargetCondition, Card.Name, MaxNumber);
     }, Effect));
 }
Exemplo n.º 5
0
 protected static Action <PGame> MakeNormalEffect(PPlayer Player, PCard Card, TargetChooser AITargetChooser, PTrigger.PlayerCondition TargetCondition, EffectFunc Effect)
 {
     return(MakeNormalEffect(Player, Card, AITargetChooser, (PGame Game, PPlayer _Player) => {
         return new List <PPlayer> {
             PNetworkManager.NetworkServer.ChooseManager.AskForTargetPlayer(_Player, TargetCondition, Card.Name)
         };
     }, Effect));
 }