public override WrappedCard AskForNullification(CardEffectStruct effect, bool positive, CardEffectStruct real) { Player from = effect.From, to = effect.To; WrappedCard trick = effect.Card; Choice[HegNullification.ClassName] = null; if (!to.Alive) { return(null); } List <WrappedCard> nullcards = GetCards(Nullification.ClassName, self); if (nullcards.Count == 0) { return(null); } int null_num = nullcards.Count; SortByUseValue(ref nullcards); WrappedCard null_card = null; foreach (WrappedCard c in nullcards) { if (!RoomLogic.IsCardLimited(room, self, c, HandlingMethod.MethodUse)) { null_card = c; } } if (null_card == null) { return(null); } if (null_num > 1) { foreach (WrappedCard card in nullcards) { if (card.Name != HegNullification.ClassName && !RoomLogic.IsCardLimited(room, self, card, HandlingMethod.MethodUse)) { null_card = card; break; } } } if (RoomLogic.IsCardLimited(room, self, null_card, FunctionCard.HandlingMethod.MethodUse)) { return(null); } if (null_num == 1 && HasSkill("kanpo") && self.Phase == Player.PlayerPhase.NotActive && self.IsLastHandCard(null_card)) { foreach (Player p in GetFriends(self)) { if (HasSkill("shouchen", p)) { null_num = 2; break; } } } bool keep = false; if (null_num == 1) { bool only = true; foreach (Player p in FriendNoSelf) { if (GetKnownCardsNums(Nullification.ClassName, "he", p, self) > 0) { only = false; break; } } if (only) { foreach (Player p in GetFriends(self)) { if (RoomLogic.PlayerContainsTrick(room, p, Indulgence.ClassName) && !HasSkill("guanxing|yizhi|shensu|qiaobian") && p.HandcardNum >= p.Hp && (trick.Name != Indulgence.ClassName) || p.Name != to.Name) { keep = true; break; } } } } UseCard use = Engine.GetCardUsage(trick.Name); if (use != null) { UseCard.NulliResult result = use.OnNullification(this, effect, positive, keep); if (result.Null) { if (result.Heg) { foreach (WrappedCard card in nullcards) { if (card.Name == HegNullification.ClassName && !RoomLogic.IsCardLimited(room, self, card, HandlingMethod.MethodUse)) { Choice[HegNullification.ClassName] = "all"; null_card = card; break; } } } return(null_card); } } return(null); }
public virtual bool IsAvailable(Room room, Player player, WrappedCard card) => !RoomLogic.IsCardLimited(room, player, card, handling_method) || CanRecast(room, player, card);