protected override bool?AdditionalVerify(Player source, List <Card> cards, List <Player> players) { if (source[XueJiUsed] != 0 || source.LostHealth == 0) { return(false); } if (players != null && players.Count > 0 && (cards == null || cards.Count == 0)) { return(false); } if (players != null && source.LostHealth < players.Count) { return(false); } var temp = new Sha(); temp.HoldInTemp(cards); if (players.Any(p => Game.CurrentGame.DistanceTo(source, p) > source[Player.AttackRange] + 1)) { temp.ReleaseHoldInTemp(); return(false); } temp.ReleaseHoldInTemp(); return(true); }
public override VerifierResult FastVerify(Player source, ISkill skill, List <Card> cards, List <Player> players) { if (skill != null) { return(VerifierResult.Fail); } if (players != null && players.Count > 1) { return(VerifierResult.Fail); } if (players != null && players.Count != 0 && (players[0] == source || players[0] == ShaSource)) { return(VerifierResult.Fail); } if (cards != null && cards.Count > 1) { return(VerifierResult.Fail); } if ((cards == null || cards.Count == 0) && players != null && players.Count > 0) { // if we have players but we don't have cards. it's not allowed return(VerifierResult.Fail); } if (cards == null || cards.Count == 0) { return(VerifierResult.Partial); } if (!Game.CurrentGame.PlayerCanDiscardCard(source, cards[0])) { return(VerifierResult.Fail); } CardHandler handler = new Sha(); handler.HoldInTemp(cards); if (players != null && players.Count != 0 && Game.CurrentGame.DistanceTo(source, players[0]) > source[Player.AttackRange] + 1) { handler.ReleaseHoldInTemp(); return(VerifierResult.Fail); } handler.ReleaseHoldInTemp(); if (players == null || players.Count == 0) { return(VerifierResult.Partial); } return(VerifierResult.Success); }
protected override bool?AdditionalVerify(Player source, List <Card> cards, List <Player> players) { if (source[DuWuUsed] != 0) { return(false); } if ((players == null || players.Count == 0) && (cards != null && cards.Count > 0)) { return(false); } if (players == null || players.Count == 0) { return(null); } int req = players[0].Health; if (players.Any(p => Game.CurrentGame.DistanceTo(source, p) > source[Player.AttackRange] + 1)) { return(false); } if (req > 0 && (cards == null || cards.Count < req)) { return(null); } if (req > 0 && (cards != null && cards.Count > req)) { return(false); } if (req > 0 && cards != null && cards.Count > 0) { var temp = new Sha(); temp.HoldInTemp(cards); if (players.Any(p => Game.CurrentGame.DistanceTo(source, p) > source[Player.AttackRange] + 1)) { temp.ReleaseHoldInTemp(); return(false); } temp.ReleaseHoldInTemp(); } return(true); }