Example #1
0
        public override void Verify(LegalityAnalysis data)
        {
            var pkm            = data.pkm;
            var EncounterMatch = data.EncounterMatch;

            // If the Pokémon is not nicknamed, it should match one of the language strings.
            if (pkm.Nickname.Length == 0)
            {
                data.AddLine(GetInvalid(V2));
                return;
            }
            if (pkm.Species > PKX.SpeciesLang[0].Length)
            {
                data.AddLine(Get(V2, Severity.Indeterminate));
                return;
            }

            if (pkm.VC && pkm.IsNicknamed)
            {
                VerifyG1NicknameWithinBounds(data, pkm.Nickname);
            }
            else if (EncounterMatch is MysteryGift m)
            {
                if (pkm.IsNicknamed && !m.IsEgg)
                {
                    data.AddLine(Get(V0, Severity.Fishy));
                }
            }

            if (EncounterMatch is EncounterTrade)
            {
                VerifyNicknameTrade(data);
                return;
            }

            if (pkm.IsEgg)
            {
                VerifyNicknameEgg(data);
                return;
            }

            string nickname = pkm.Nickname.Replace("'", "’");

            if (VerifyUnNicknamedEncounter(data, pkm, nickname))
            {
                return;
            }

            // Non-nicknamed strings have already been checked.
            if (Legal.CheckWordFilter && pkm.IsNicknamed && WordFilter.IsFiltered(nickname, out string bad))
            {
                data.AddLine(GetInvalid($"Wordfilter: {bad}"));
            }
        }
Example #2
0
        public override void Verify(LegalityAnalysis data)
        {
            var pkm = data.pkm;
            var enc = data.EncounterMatch;

            if (!IsPlayerOriginalTrainer(enc))
            {
                return; // already verified
            }
            var ot = pkm.OT_Name;

            if (ot.Length == 0)
            {
                data.AddLine(GetInvalid(LOTShort));
            }

            if (IsOTNameSuspicious(ot))
            {
                data.AddLine(Get(LOTSuspicious, Severity.Fishy));
            }

            if (pkm.VC)
            {
                VerifyOTG1(data);
            }
            else if (ot.Length > Legal.GetMaxLengthOT(data.Info.Generation, (LanguageID)pkm.Language))
            {
                if (!IsEdgeCaseLength(pkm, data.EncounterOriginal, ot))
                {
                    data.AddLine(Get(LOTLong, Severity.Invalid));
                }
            }

            if (ParseSettings.CheckWordFilter)
            {
                if (WordFilter.IsFiltered(ot, out string bad))
                {
                    data.AddLine(GetInvalid($"Wordfilter: {bad}"));
                }
                if (ContainsTooManyNumbers(ot, data.Info.Generation))
                {
                    data.AddLine(GetInvalid("Wordfilter: Too many numbers."));
                }

                if (WordFilter.IsFiltered(pkm.HT_Name, out bad))
                {
                    data.AddLine(GetInvalid($"Wordfilter: {bad}"));
                }
            }
        }
Example #3
0
        public override void Verify(LegalityAnalysis data)
        {
            var pkm = data.pkm;

            switch (data.EncounterMatch)
            {
            case EncounterTrade _:
            case MysteryGift g when !g.IsEgg:
            case EncounterStatic5N _:
                return;     // already verified
            }

            var ot = pkm.OT_Name;

            if (ot.Length == 0)
            {
                data.AddLine(GetInvalid(LOTShort));
            }

            if (pkm.TID == 0 && pkm.SID == 0)
            {
                data.AddLine(Get(LOT_IDs0, Severity.Fishy));
            }
            else if (pkm.VC)
            {
                if (pkm.SID != 0)
                {
                    data.AddLine(GetInvalid(LOT_SID0Invalid));
                }
            }
            else if (pkm.TID == pkm.SID)
            {
                data.AddLine(Get(LOT_IDEqual, Severity.Fishy));
            }
            else if (pkm.TID == 0)
            {
                data.AddLine(Get(LOT_TID0, Severity.Fishy));
            }
            else if (pkm.SID == 0)
            {
                data.AddLine(Get(LOT_SID0, Severity.Fishy));
            }
            else if ((pkm.TID == 12345 && pkm.SID == 54321) || IsOTNameSuspicious(ot))
            {
                data.AddLine(Get(LOTSuspicious, Severity.Fishy));
            }

            if (pkm.VC)
            {
                VerifyOTG1(data);
            }
            else if (ot.Length > Legal.GetMaxLengthOT(data.Info.Generation, (LanguageID)pkm.Language))
            {
                if (!IsEdgeCaseLength(pkm, data.EncounterOriginal, ot))
                {
                    data.AddLine(Get(LOTLong, Severity.Invalid));
                }
            }

            if (ParseSettings.CheckWordFilter)
            {
                if (WordFilter.IsFiltered(ot, out string bad))
                {
                    data.AddLine(GetInvalid($"Wordfilter: {bad}"));
                }
                if (WordFilter.IsFiltered(pkm.HT_Name, out bad))
                {
                    data.AddLine(GetInvalid($"Wordfilter: {bad}"));
                }
                if (ContainsTooManyNumbers(ot, data.Info.Generation))
                {
                    data.AddLine(GetInvalid($"Wordfilter: Too many numbers."));
                }
            }
        }
Example #4
0
        public override void Verify(LegalityAnalysis data)
        {
            var pkm            = data.pkm;
            var EncounterMatch = data.EncounterOriginal;

            // If the Pokémon is not nicknamed, it should match one of the language strings.
            if (pkm.Nickname.Length == 0)
            {
                data.AddLine(GetInvalid(LNickLengthShort));
                return;
            }
            if (pkm.Species > SpeciesName.SpeciesLang[0].Count)
            {
                data.AddLine(Get(LNickLengthShort, Severity.Indeterminate));
                return;
            }

            if (pkm.VC && pkm.IsNicknamed)
            {
                VerifyG1NicknameWithinBounds(data, pkm.Nickname);
            }
            else if (EncounterMatch is MysteryGift m)
            {
                if (pkm.IsNicknamed && !m.IsEgg)
                {
                    data.AddLine(Get(LEncGiftNicknamed, ParseSettings.NicknamedMysteryGift));
                }
            }

            if (EncounterMatch is EncounterTrade t)
            {
                VerifyNicknameTrade(data, t);
                return;
            }

            if (pkm.IsEgg)
            {
                VerifyNicknameEgg(data);
                return;
            }

            string nickname = pkm.Nickname.Replace('\'', '’');

            if (VerifyUnNicknamedEncounter(data, pkm, nickname))
            {
                return;
            }

            // Non-nicknamed strings have already been checked.
            if (ParseSettings.CheckWordFilter && pkm.IsNicknamed)
            {
                if (WordFilter.IsFiltered(nickname, out string bad))
                {
                    data.AddLine(GetInvalid($"Wordfilter: {bad}"));
                }
                if (TrainerNameVerifier.ContainsTooManyNumbers(nickname, data.Info.Generation))
                {
                    data.AddLine(GetInvalid("Wordfilter: Too many numbers."));
                }
            }
        }
Example #5
0
        public override void Verify(LegalityAnalysis data)
        {
            var pkm = data.pkm;

            switch (data.EncounterMatch)
            {
            case EncounterTrade _:
            case MysteryGift g when !g.IsEgg:
            case EncounterStaticPID s when s.NSparkle:
                return;     // already verified
            }

            var ot = pkm.OT_Name;

            if (ot.Length == 0)
            {
                data.AddLine(GetInvalid(V106));
            }

            if (pkm.TID == 0 && pkm.SID == 0)
            {
                data.AddLine(Get(V33, Severity.Fishy));
            }
            else if (pkm.VC)
            {
                if (pkm.SID != 0)
                {
                    data.AddLine(GetInvalid(V34));
                }
            }
            else if (pkm.TID == pkm.SID)
            {
                data.AddLine(Get(V35, Severity.Fishy));
            }
            else if (pkm.TID == 0)
            {
                data.AddLine(Get(V36, Severity.Fishy));
            }
            else if (pkm.SID == 0)
            {
                data.AddLine(Get(V37, Severity.Fishy));
            }
            else if (pkm.TID == 12345 && pkm.SID == 54321 || SuspiciousOTNames.Any(z => ot.StartsWith(z)))
            {
                data.AddLine(Get(V417, Severity.Fishy));
            }

            if (pkm.VC)
            {
                VerifyOTG1(data);
            }

            if (Legal.CheckWordFilter)
            {
                if (WordFilter.IsFiltered(ot, out string bad))
                {
                    data.AddLine(GetInvalid($"Wordfilter: {bad}"));
                }
                if (WordFilter.IsFiltered(pkm.HT_Name, out bad))
                {
                    data.AddLine(GetInvalid($"Wordfilter: {bad}"));
                }
            }
        }
Example #6
0
        public override void Verify(LegalityAnalysis data)
        {
            var pkm = data.pkm;

            switch (data.EncounterMatch)
            {
            case EncounterTrade _:
            case MysteryGift g when !g.IsEgg:
            case EncounterStaticPID s when s.NSparkle:
                return;     // already verified
            }

            var ot = pkm.OT_Name;

            if (ot.Length == 0)
            {
                data.AddLine(GetInvalid(LOTShort));
            }

            if (pkm.TID == 0 && pkm.SID == 0)
            {
                data.AddLine(Get(LOT_IDs0, Severity.Fishy));
            }
            else if (pkm.VC)
            {
                if (pkm.SID != 0)
                {
                    data.AddLine(GetInvalid(LOT_SID0Invalid));
                }
            }
            else if (pkm.TID == pkm.SID)
            {
                data.AddLine(Get(LOT_IDEqual, Severity.Fishy));
            }
            else if (pkm.TID == 0)
            {
                data.AddLine(Get(LOT_TID0, Severity.Fishy));
            }
            else if (pkm.SID == 0)
            {
                data.AddLine(Get(LOT_SID0, Severity.Fishy));
            }
            else if ((pkm.TID == 12345 && pkm.SID == 54321) || IsOTNameSuspicious(ot))
            {
                data.AddLine(Get(LOTSuspicious, Severity.Fishy));
            }

            if (pkm.VC)
            {
                VerifyOTG1(data);
            }
            else if (ot.Length > Legal.GetNicknameOTMaxLength(data.Info.Generation, (LanguageID)pkm.Language))
            {
                if (!pkm.IsEgg) // ignore eggs, on trade, OT is not updated if language is
                {
                    data.AddLine(Get(LOTLong, data.EncounterOriginal.EggEncounter ? Severity.Fishy : Severity.Invalid));
                }
            }

            if (Legal.CheckWordFilter)
            {
                if (WordFilter.IsFiltered(ot, out string bad))
                {
                    data.AddLine(GetInvalid($"Wordfilter: {bad}"));
                }
                if (WordFilter.IsFiltered(pkm.HT_Name, out bad))
                {
                    data.AddLine(GetInvalid($"Wordfilter: {bad}"));
                }
            }
        }