示例#1
0
文件: Checks.cs 项目: kawatzaki/PKHeX
        private LegalityCheck verifyNickname()
        {
            // If the Pokémon is not nicknamed, it should match one of the language strings.
            if (pk6.Nickname.Length == 0)
            {
                return(new LegalityCheck(Severity.Indeterminate, "Nickname is empty."));
            }
            if (pk6.Species > PKX.SpeciesLang[0].Length)
            {
                return(new LegalityCheck(Severity.Indeterminate, "Species index invalid for Nickname comparison."));
            }
            if (!Encounter.Valid)
            {
                return(new LegalityCheck(Severity.Valid, "Skipped Nickname check due to other check being invalid."));
            }

            if (pk6.IsEgg)
            {
                if (!pk6.IsNicknamed)
                {
                    return(new LegalityCheck(Severity.Invalid, "Eggs must be nicknamed."));
                }
                return(PKX.SpeciesLang[pk6.Language][0] == pk6.Nickname
                    ? new LegalityCheck(Severity.Valid, "Egg matches language Egg name.")
                    : new LegalityCheck(Severity.Invalid, "Egg name does not match language Egg name."));
            }
            string nickname = pk6.Nickname.Replace("'", "’");

            if (pk6.IsNicknamed)
            {
                for (int i = 0; i < PKX.SpeciesLang.Length; i++)
                {
                    string[] lang  = PKX.SpeciesLang[i];
                    int      index = Array.IndexOf(lang, nickname);
                    if (index < 0)
                    {
                        continue;
                    }

                    return(index == pk6.Species && i != pk6.Language
                        ? new LegalityCheck(Severity.Fishy, "Nickname matches another species name (+language).")
                        : new LegalityCheck(Severity.Fishy, "Nickname flagged, matches species name."));
                }
                return(new LegalityCheck(Severity.Valid, "Nickname does not match another species name."));
            }
            // else
            {
                // Can't have another language name if it hasn't evolved.
                return(Legal.getHasEvolved(pk6) && PKX.SpeciesLang.Any(lang => lang[pk6.Species] == nickname) ||
                       PKX.SpeciesLang[pk6.Language][pk6.Species] == nickname
                    ? new LegalityCheck(Severity.Valid, "Nickname matches species name.")
                    : new LegalityCheck(Severity.Invalid, "Nickname does not match species name."));
            }
        }
示例#2
0
        private LegalityCheck verifyNickname()
        {
            // If the Pokémon is not nicknamed, it should match one of the language strings.
            if (pk6.Nickname.Length == 0)
            {
                return(new LegalityCheck(Severity.Indeterminate, "Nickname is empty."));
            }
            if (pk6.Species > PKX.SpeciesLang[0].Length)
            {
                return(new LegalityCheck(Severity.Indeterminate, "Species index invalid for Nickname comparison."));
            }
            if (!Encounter.Valid)
            {
                return(new LegalityCheck(Severity.Valid, "Skipped Nickname check due to other check being invalid."));
            }

            if (pk6.Language > 8)
            {
                return(new LegalityCheck(Severity.Indeterminate, "Language ID > 8."));
            }

            if (EncounterType == typeof(EncounterTrade))
            {
                string[] validOT = new string[0];
                int      index   = -1;
                if (pk6.XY)
                {
                    validOT = Legal.TradeXY[pk6.Language];
                    index   = Array.IndexOf(Legal.TradeGift_XY, EncounterMatch);
                }
                else if (pk6.AO)
                {
                    validOT = Legal.TradeAO[pk6.Language];
                    index   = Array.IndexOf(Legal.TradeGift_AO, EncounterMatch);
                }
                if (validOT.Length == 0)
                {
                    return(new LegalityCheck(Severity.Indeterminate, "Ingame Trade invalid version?"));
                }
                if (index == -1 || validOT.Length < index * 2)
                {
                    return(new LegalityCheck(Severity.Indeterminate, "Ingame Trade invalid lookup?"));
                }

                string nick = validOT[index];
                string OT   = validOT[validOT.Length / 2 + index];

                if (nick != pk6.Nickname)
                {
                    return(new LegalityCheck(Severity.Fishy, "Ingame Trade nickname has been altered."));
                }
                if (OT != pk6.OT_Name)
                {
                    return(new LegalityCheck(Severity.Invalid, "Ingame Trade OT has been altered."));
                }

                return(new LegalityCheck(Severity.Valid, "Ingame Trade OT/Nickname have not been altered."));
            }

            if (pk6.IsEgg)
            {
                if (!pk6.IsNicknamed)
                {
                    return(new LegalityCheck(Severity.Invalid, "Eggs must be nicknamed."));
                }
                return(PKX.SpeciesLang[pk6.Language][0] == pk6.Nickname
                    ? new LegalityCheck(Severity.Valid, "Egg matches language Egg name.")
                    : new LegalityCheck(Severity.Invalid, "Egg name does not match language Egg name."));
            }
            string nickname = pk6.Nickname.Replace("'", "’");

            if (pk6.IsNicknamed)
            {
                for (int i = 0; i < PKX.SpeciesLang.Length; i++)
                {
                    string[] lang  = PKX.SpeciesLang[i];
                    int      index = Array.IndexOf(lang, nickname);
                    if (index < 0)
                    {
                        continue;
                    }

                    return(index == pk6.Species && i != pk6.Language
                        ? new LegalityCheck(Severity.Fishy, "Nickname matches another species name (+language).")
                        : new LegalityCheck(Severity.Fishy, "Nickname flagged, matches species name."));
                }
                return(new LegalityCheck(Severity.Valid, "Nickname does not match another species name."));
            }
            // else
            {
                // Can't have another language name if it hasn't evolved.
                return(Legal.getHasEvolved(pk6) && PKX.SpeciesLang.Any(lang => lang[pk6.Species] == nickname) ||
                       PKX.SpeciesLang[pk6.Language][pk6.Species] == nickname
                    ? new LegalityCheck(Severity.Valid, "Nickname matches species name.")
                    : new LegalityCheck(Severity.Invalid, "Nickname does not match species name."));
            }
        }