Beispiel #1
0
        protected virtual void ApplyDetails(ITrainerInfo sav, EncounterCriteria criteria, PKM pk)
        {
            pk.EncryptionConstant = Util.Rand32();
            pk.Species            = Species;
            pk.AltForm            = Form;

            int lang    = (int)Language.GetSafeLanguage(Generation, (LanguageID)sav.Language);
            int level   = GetMinimalLevel();
            var version = this.GetCompatibleVersion((GameVersion)sav.Game);

            SanityCheckVersion(ref version);

            pk.Language = lang = GetEdgeCaseLanguage(pk, lang);
            pk.Nickname = SpeciesName.GetSpeciesNameGeneration(Species, lang, Generation);

            pk.CurrentLevel  = level;
            pk.Version       = (int)version;
            pk.Ball          = Ball;
            pk.HeldItem      = HeldItem;
            pk.OT_Friendship = pk.PersonalInfo.BaseFriendship;

            var today = DateTime.Today;

            SetMetData(pk, level, today);
            if (EggEncounter)
            {
                SetEggMetData(pk, sav, today);
            }

            SetPINGA(pk, criteria);
            SetEncounterMoves(pk, version, level);

            if (Fateful)
            {
                pk.FatefulEncounter = true;
            }

            if (pk.Format < 6)
            {
                return;
            }

            if (this is IRelearn relearn)
            {
                pk.SetRelearnMoves(relearn.Relearn);
            }

            sav.ApplyHandlingTrainerInfo(pk);
            pk.SetRandomEC();

            if (this is IGigantamax g && pk is IGigantamax pg)
            {
                pg.CanGigantamax = g.CanGigantamax;
            }
            if (this is IDynamaxLevel d && pk is IDynamaxLevel pd)
            {
                pd.DynamaxLevel = d.DynamaxLevel;
            }
        }
Beispiel #2
0
        public PKM ConvertToPKM(ITrainerInfo SAV, EncounterCriteria criteria)
        {
            int gen     = Version.GetGeneration();
            var version = Version;

            if (gen < 2)
            {
                gen     = 2;
                version = GameVersion.C;
            }
            var pk = PKMConverter.GetBlank(gen, version);

            SAV.ApplyToPKM(pk);

            pk.Species       = Species;
            pk.Nickname      = SpeciesName.GetSpeciesNameGeneration(Species, SAV.Language, gen);
            pk.CurrentLevel  = Level;
            pk.Version       = (int)version;
            pk.Ball          = 4;
            pk.OT_Friendship = pk.PersonalInfo.BaseFriendship;

            int[] moves = SetEncounterMoves(pk, version);
            SetPINGA(pk, criteria);

            if (pk.Format <= 2 && version != GameVersion.C)
            {
                return(pk);
            }

            SetMetData(pk);

            if (pk.Format < 3)
            {
                return(pk);
            }

            if (pk.GenNumber >= 4)
            {
                pk.SetEggMetData(version, (GameVersion)SAV.Game);
            }

            if (pk.Format < 6)
            {
                return(pk);
            }
            if (pk.Format == 6)
            {
                pk.SetHatchMemory6();
            }

            SetAltForm(pk, SAV);

            pk.SetRandomEC();
            pk.RelearnMoves = moves;

            return(pk);
        }
Beispiel #3
0
        /// <summary>
        /// Clears the <see cref="PKM.Nickname"/> to the default value.
        /// </summary>
        /// <param name="pk"></param>
        public static string ClearNickname(this PKM pk)
        {
            pk.IsNicknamed = false;
            string nick = SpeciesName.GetSpeciesNameGeneration(pk.Species, pk.Language, pk.Format);

            pk.Nickname = nick;
            if (pk is _K12 pk12)
            {
                pk12.SetNotNicknamed();
            }
            return(nick);
        }
Beispiel #4
0
        public PKM ConvertToPKM(ITrainerInfo sav, EncounterCriteria criteria)
        {
            int gen     = Generation;
            var version = Version;
            var pk      = PKMConverter.GetBlank(gen, version);

            sav.ApplyTo(pk);

            pk.Species       = Species;
            pk.Nickname      = SpeciesName.GetSpeciesNameGeneration(Species, sav.Language, gen);
            pk.CurrentLevel  = Level;
            pk.Version       = (int)version;
            pk.Ball          = (int)Ball.Poke;
            pk.OT_Friendship = pk.PersonalInfo.BaseFriendship;

            int[] moves = SetEncounterMoves(pk, version);
            SetPINGA(pk, criteria);

            if (gen <= 2 && version != GameVersion.C)
            {
                return(pk);
            }

            SetMetData(pk);

            if (gen < 3)
            {
                return(pk);
            }

            if (gen >= 4)
            {
                pk.SetEggMetData(version, (GameVersion)sav.Game);
            }

            if (gen < 6)
            {
                return(pk);
            }
            if (gen == 6)
            {
                pk.SetHatchMemory6();
            }

            SetAltForm(pk, sav);

            pk.SetRandomEC();
            pk.RelearnMoves = moves;

            return(pk);
        }
Beispiel #5
0
        private string GetSpeciesNickname(string specForm)
        {
            if (Nickname.Length == 0)
            {
                return(specForm);
            }
            var name = SpeciesName.GetSpeciesNameGeneration(Species, LanguageID, Format);

            if (name == Nickname)
            {
                return(specForm);
            }
            return($"{Nickname} ({specForm})");
        }
Beispiel #6
0
        private static bool IsNicknameValid(PKM pkm, IEncounterable EncounterMatch, string nickname)
        {
            int species  = pkm.Species;
            int format   = pkm.Format;
            int language = pkm.Language;

            if (SpeciesName.GetSpeciesNameGeneration(species, language, format) == nickname)
            {
                return(true);
            }

            // Can't have another language name if it hasn't evolved or wasn't a language-traded egg.
            // Starting in Generation 8, hatched language-traded eggs will take the Language from the trainer that hatched it.
            // Also in Generation 8, evolving in a foreign language game will retain the original language as the source for the newly evolved species name.
            // Transferring from Gen7->Gen8 realigns the Nickname string to the Language, if not nicknamed.
            bool canHaveAnyLanguage = pkm.Format <= 7 && (EncounterMatch.Species != species || pkm.WasTradedEgg);

            if (canHaveAnyLanguage && !SpeciesName.IsNicknamedAnyLanguage(species, nickname, format))
            {
                return(true);
            }

            switch (EncounterMatch)
            {
            case WC7 wc7 when wc7.IsAshGreninjaWC7(pkm):
                return(true);

            case ILangNick loc:
                if (loc.Language != 0 && !loc.IsNicknamed && !SpeciesName.IsNicknamedAnyLanguage(species, nickname, format))
                {
                    return(true);    // fixed language without nickname, nice job event maker!
                }
                break;
            }

            if (pkm.Format == 5 && !pkm.IsNative) // transfer
            {
                if (canHaveAnyLanguage)
                {
                    return(!SpeciesName.IsNicknamedAnyLanguage(species, nickname, 4));
                }
                return(SpeciesName.GetSpeciesNameGeneration(species, language, 4) == nickname);
            }

            return(false);
        }
Beispiel #7
0
        private void VerifyNicknameEgg(LegalityAnalysis data)
        {
            var Info           = data.Info;
            var pkm            = data.pkm;
            var EncounterMatch = Info.EncounterMatch;

            switch (pkm.Format)
            {
            case 4:
                if (pkm.IsNicknamed)     // gen4 doesn't use the nickname flag for eggs
                {
                    data.AddLine(GetInvalid(LNickFlagEggNo, CheckIdentifier.Egg));
                }
                break;

            case 7:
                if (EncounterMatch is EncounterStatic ^ !pkm.IsNicknamed)     // gen7 doesn't use for ingame gifts
                {
                    data.AddLine(GetInvalid(pkm.IsNicknamed ? LNickFlagEggNo : LNickFlagEggYes, CheckIdentifier.Egg));
                }
                break;

            default:
                if (!pkm.IsNicknamed)
                {
                    data.AddLine(GetInvalid(LNickFlagEggYes, CheckIdentifier.Egg));
                }
                break;
            }

            if (pkm.Format == 2 && pkm.IsEgg && !SpeciesName.IsNicknamedAnyLanguage(0, pkm.Nickname, 2))
            {
                data.AddLine(GetValid(LNickMatchLanguageEgg, CheckIdentifier.Egg));
            }
            else if (SpeciesName.GetSpeciesNameGeneration(0, pkm.Language, Info.Generation) != pkm.Nickname)
            {
                data.AddLine(GetInvalid(LNickMatchLanguageEggFail, CheckIdentifier.Egg));
            }
            else
            {
                data.AddLine(GetValid(LNickMatchLanguageEgg, CheckIdentifier.Egg));
            }
        }
Beispiel #8
0
        protected override byte[] GetNonNickname(int language)
        {
            var name = SpeciesName.GetSpeciesNameGeneration(Species, language, Format);
            var len  = Nickname_Trash.Length;

            byte[] data = new byte[len];
            SetString(name.AsSpan(), data, len, StringConverterOption.Clear50);
            if (!Korean)
            {
                // Decimal point<->period fix
                for (int i = 0; i < data.Length; i++)
                {
                    if (data[i] == 0xF2)
                    {
                        data[i] = 0xE8;
                    }
                }
            }
            return(data);
        }
Beispiel #9
0
        private bool IsNicknameValid(PKM pkm, IEncounterable EncounterMatch, string nickname)
        {
            if (SpeciesName.GetSpeciesNameGeneration(pkm.Species, pkm.Language, pkm.Format) == nickname)
            {
                return(true);
            }

            // Can't have another language name if it hasn't evolved or wasn't a language-traded egg.
            bool evolved            = EncounterMatch.Species != pkm.Species;
            bool canHaveAnyLanguage = evolved || pkm.WasTradedEgg;

            if (canHaveAnyLanguage && !SpeciesName.IsNicknamedAnyLanguage(pkm.Species, nickname, pkm.Format))
            {
                return(true);
            }

            switch (EncounterMatch)
            {
            case WC7 wc7 when wc7.IsAshGreninjaWC7(pkm):
                return(true);

            case ILangNick loc:
                if (loc.Language != 0 && !loc.IsNicknamed && !SpeciesName.IsNicknamedAnyLanguage(pkm.Species, nickname, pkm.Format))
                {
                    return(true);    // fixed language without nickname, nice job event maker!
                }
                break;
            }

            if (pkm.Format == 5 && !pkm.IsNative) // transfer
            {
                if (canHaveAnyLanguage)
                {
                    return(!SpeciesName.IsNicknamedAnyLanguage(pkm.Species, nickname, 4));
                }
                return(SpeciesName.GetSpeciesNameGeneration(pkm.Species, pkm.Language, 4) == nickname);
            }

            return(false);
        }