Пример #1
0
        public bool Compare(Frame frame)
        {
            //  Check the nature first
            if (Natures != null)
            {
                // If the frame can be synchronized, it doesn't need to pass the check
                if (frame.EncounterMod != EncounterMod.Synchronize)
                {
                    bool test = Natures.Any(nature => nature == frame.Nature);
                    if (!test)
                    {
                        return(false);
                    }
                }
            }

            if (synchOnly)
            {
                if (!frame.Synchable)
                {
                    return(false);
                }
            }

            if (!GenderFilter.Filter(frame.GenderValue))
            {
                return(false);
            }

            if (!GenderFilter.Filter(frame.EncounterMod))
            {
                return(false);
            }

            // For 3rd Gen eggs - if an egg is not generated on that frame, ignore it
            if (frame.FrameType == FrameType.RSBredLower)
            {
                // need to replace this now that we're using numbered natures
                if (frame.Number == 0)
                {
                    return(false);
                }
            }

            //  Go through and check each IV against what the user has required.
            //  Skip if it's a FrameType that doesn't use IVs
            if (frame.FrameType != FrameType.Method5Natures &&
                frame.FrameType != FrameType.Gen4Normal &&
                frame.FrameType != FrameType.Gen4International &&
                frame.FrameType != FrameType.RSBredLower)
            {
                if (ABcheck)
                {
                    uint frameIv = frame.Hp;

                    if (frame.DisplayHp == "A")
                    {
                        frameIv = compareHpA;
                    }
                    if (frame.DisplayHp == "B")
                    {
                        frameIv = compareHpB;
                    }

                    if (!CompareIV(hpCompare, frameIv, hpValue))
                    {
                        return(false);
                    }


                    frameIv = frame.Atk;
                    if (frame.DisplayAtk == "A")
                    {
                        frameIv = compareAtkA;
                    }
                    if (frame.DisplayAtk == "B")
                    {
                        frameIv = compareAtkB;
                    }

                    if (!CompareIV(atkCompare, frameIv, atkValue))
                    {
                        return(false);
                    }


                    frameIv = frame.Def;
                    if (frame.DisplayDef == "A")
                    {
                        frameIv = compareDefA;
                    }
                    if (frame.DisplayDef == "B")
                    {
                        frameIv = compareDefB;
                    }


                    if (!CompareIV(defCompare, frameIv, defValue))
                    {
                        return(false);
                    }


                    frameIv = frame.Spa;
                    if (frame.DisplaySpa == "A")
                    {
                        frameIv = compareSpaA;
                    }
                    if (frame.DisplaySpa == "B")
                    {
                        frameIv = compareSpaB;
                    }


                    if (!CompareIV(spaCompare, frameIv, spaValue))
                    {
                        return(false);
                    }


                    frameIv = frame.Spd;
                    if (frame.DisplaySpd == "A")
                    {
                        frameIv = compareSpdA;
                    }
                    if (frame.DisplaySpd == "B")
                    {
                        frameIv = compareSpdB;
                    }


                    if (!CompareIV(spdCompare, frameIv, spdValue))
                    {
                        return(false);
                    }


                    frameIv = frame.Spe;
                    if (frame.DisplaySpe == "A")
                    {
                        frameIv = compareSpeA;
                    }
                    if (frame.DisplaySpe == "B")
                    {
                        frameIv = compareSpeB;
                    }


                    if (!CompareIV(speCompare, frameIv, speValue))
                    {
                        return(false);
                    }
                }

                else
                {
                    if (frame.DisplayHp != "A" && frame.DisplayHp != "B")
                    {
                        if (!CompareIV(hpCompare, frame.Hp, hpValue))
                        {
                            return(false);
                        }
                    }

                    if (frame.DisplayAtk != "A" && frame.DisplayAtk != "B")
                    {
                        if (!CompareIV(atkCompare, frame.Atk, atkValue))
                        {
                            return(false);
                        }
                    }

                    if (frame.DisplayDef != "A" && frame.DisplayDef != "B")
                    {
                        if (!CompareIV(defCompare, frame.Def, defValue))
                        {
                            return(false);
                        }
                    }

                    if (frame.DisplaySpa != "A" && frame.DisplaySpa != "B")
                    {
                        if (!CompareIV(spaCompare, frame.Spa, spaValue))
                        {
                            return(false);
                        }
                    }

                    if (frame.DisplaySpd != "A" && frame.DisplaySpd != "B")
                    {
                        if (!CompareIV(spdCompare, frame.Spd, spdValue))
                        {
                            return(false);
                        }
                    }

                    if (frame.DisplaySpe != "A" && frame.DisplaySpe != "B")
                    {
                        if (!CompareIV(speCompare, frame.Spe, speValue))
                        {
                            return(false);
                        }
                    }
                }
            }
            if (shinyOnly)
            {
                if (!frame.Shiny)
                {
                    return(false);
                }
            }

            if (dreamWorld)
            {
                if (!frame.DreamAbility)
                {
                    return(false);
                }
            }

            if (encounterSlots != null)
            {
                bool test = false;
                foreach (int slot in encounterSlots)
                {
                    if (slot == frame.EncounterSlot)
                    {
                        test = true;
                        break;
                    }
                }

                if (!test)
                {
                    return(false);
                }
            }

            if (ability != -1)
            {
                if ((ability == 0) && (frame.Ability != 0))
                {
                    return(false);
                }

                if ((ability == 1) && (frame.Ability != 1))
                {
                    return(false);
                }
            }

            return(true);
        }