예제 #1
0
        internal static EncounterTrade getValidIngameTrade(PKM pkm)
        {
            if (!pkm.WasIngameTrade)
            {
                return(null);
            }
            int lang = pkm.Language;

            if (lang == 0 || lang == 6)
            {
                return(null);
            }

            // Get valid pre-evolutions
            IEnumerable <DexLevel> p = getValidPreEvolutions(pkm);

            EncounterTrade[] table = null;
            if (pkm.XY)
            {
                table = TradeGift_XY;
            }
            if (pkm.AO)
            {
                table = TradeGift_AO;
            }
            if (pkm.SM)
            {
                table = TradeGift_SM;
            }

            EncounterTrade z = table?.FirstOrDefault(f => p.Any(r => r.Species == f.Species));

            if (z == null)
            {
                return(null);
            }

            for (int i = 0; i < 6; i++)
            {
                if (z.IVs[i] != -1 && z.IVs[i] != pkm.IVs[i])
                {
                    return(null);
                }
            }

            if (z.Shiny ^ pkm.IsShiny) // Are PIDs static?
            {
                return(null);
            }
            if (z.TID != pkm.TID)
            {
                return(null);
            }
            if (z.SID != pkm.SID)
            {
                return(null);
            }
            if (z.Location != pkm.Met_Location)
            {
                return(null);
            }
            if (z.Level != pkm.Met_Level)
            {
                return(null);
            }
            if (z.Nature != Nature.Random && (int)z.Nature != pkm.Nature)
            {
                return(null);
            }
            if (z.Gender != pkm.Gender)
            {
                return(null);
            }
            if (z.OTGender != -1 && z.OTGender != pkm.OT_Gender)
            {
                return(null);
            }
            // if (z.Ability == 4 ^ pkm.AbilityNumber == 4) // defer to Ability
            //    return null;

            return(z);
        }
예제 #2
0
파일: Checks.cs 프로젝트: kawatzaki/PKHeX
        private LegalityCheck verifyEncounter()
        {
            if (!pk6.Gen6)
            {
                return new LegalityCheck {
                           Judgement = Severity.NotImplemented
                }
            }
            ;

            if (pk6.WasLink)
            {
                // Should NOT be Fateful, and should be in Database
                return(pk6.FatefulEncounter || Legal.getLinkMoves(pk6).Length == 0
                    ? new LegalityCheck(Severity.Invalid, "Not a valid Link gift.")
                    : new LegalityCheck(Severity.Valid, "Valid Link gift."));
            }
            if (pk6.WasEvent || pk6.WasEventEgg)
            {
                return(MatchedWC6 != null // Matched in RelearnMoves check.
                    ? new LegalityCheck(Severity.Valid, $"Matches #{MatchedWC6.CardID.ToString("0000")} ({MatchedWC6.CardTitle})")
                    : new LegalityCheck(Severity.Invalid, "Not a valid Wonder Card gift."));
            }
            if (pk6.WasEgg)
            {
                // Check Hatch Locations
                if (pk6.Met_Level != 1)
                {
                    return(new LegalityCheck(Severity.Invalid, "Invalid met level, expected 1."));
                }
                if (pk6.IsEgg)
                {
                    return(pk6.Met_Location == 0
                        ? new LegalityCheck(Severity.Valid, "Valid un-hatched egg.")
                        : new LegalityCheck(Severity.Invalid, "Invalid location for un-hatched egg (expected ID:0)"));
                }
                if (pk6.XY)
                {
                    return(Legal.ValidMet_XY.Contains(pk6.Met_Location)
                        ? new LegalityCheck(Severity.Valid, "Valid X/Y hatched egg.")
                        : new LegalityCheck(Severity.Invalid, "Invalid X/Y location for hatched egg."));
                }
                if (pk6.AO)
                {
                    return(Legal.ValidMet_AO.Contains(pk6.Met_Location)
                        ? new LegalityCheck(Severity.Valid, "Valid OR/AS hatched egg.")
                        : new LegalityCheck(Severity.Invalid, "Invalid OR/AS location for hatched egg."));
                }
                return(new LegalityCheck(Severity.Invalid, "Invalid location for hatched egg."));
            }

            EncounterStatic z = Legal.getStaticEncounter(pk6);

            if (z != null)
            {
                return(new LegalityCheck(Severity.Valid, "Valid gift/static encounter."));
            }

            if (Legal.getIsFossil(pk6))
            {
                return(pk6.AbilityNumber != 4
                    ? new LegalityCheck(Severity.Valid, "Valid revived fossil.")
                    : new LegalityCheck(Severity.Invalid, "Hidden ability on revived fossil."));
            }
            int FriendSafari = Legal.getFriendSafariValid(pk6);

            if (FriendSafari > 0)
            {
                if (pk6.Species == 670 || pk6.Species == 671) // Floette
                {
                    if (pk6.AltForm % 2 != 0)                 // 0/2/4
                    {
                        return(new LegalityCheck(Severity.Invalid, "Friend Safari: Not valid color."));
                    }
                    else if (pk6.Species == 710 || pk6.Species == 711) // Pumpkaboo
                    {
                        if (pk6.AltForm != 1)                          // Average
                        {
                            return(new LegalityCheck(Severity.Invalid, "Friend Safari: Not average sized."));
                        }
                        else if (pk6.Species == 586) // Sawsbuck
                        {
                            if (pk6.AltForm != 0)
                            {
                                return(new LegalityCheck(Severity.Invalid, "Friend Safari: Not Spring form."));
                            }
                        }
                    }
                }

                return(new LegalityCheck(Severity.Valid, "Valid friend safari encounter."));
            }

            if (Legal.getDexNavValid(pk6))
            {
                return(new LegalityCheck(Severity.Valid, "Valid (DexNav) encounter at location."));
            }
            if (Legal.getWildEncounterValid(pk6))
            {
                return(pk6.AbilityNumber != 4
                    ? new LegalityCheck(Severity.Valid, "Valid encounter at location.")
                    : new LegalityCheck(Severity.Invalid, "Hidden ability on valid encounter."));
            }
            EncounterTrade t = Legal.getIngameTrade(pk6);

            if (t != null)
            {
                EncounterMatch = t; // Check in individual methods
                return(new LegalityCheck(Severity.Valid, "Valid ingame trade."));
            }
            return(new LegalityCheck(Severity.Invalid, "Not a valid encounter."));
        }