示例#1
0
        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);
        }
示例#2
0
 public virtual bool IsAvailable(Room room, Player player, WrappedCard card) => !RoomLogic.IsCardLimited(room, player, card, handling_method) ||
 CanRecast(room, player, card);