Пример #1
0
        private string getVerboseLegalityReport()
        {
            if (!Parsed)
            {
                return(V189);
            }

            const string separator = "===";

            string[] br    = { separator, "" };
            var      lines = new List <string> {
                br[1]
            };

            lines.AddRange(br);
            int rl = lines.Count;

            for (int i = 0; i < 4; i++)
            {
                if (vMoves[i].Valid)
                {
                    lines.Add(string.Format(V191, getString(vMoves[i].Judgement), i + 1, vMoves[i].Comment));
                }
            }

            if (pkm.Format >= 6)
            {
                for (int i = 0; i < 4; i++)
                {
                    if (vRelearn[i].Valid)
                    {
                        lines.Add(string.Format(V192, getString(vRelearn[i].Judgement), i + 1, vRelearn[i].Comment));
                    }
                }
            }

            if (rl != lines.Count) // move info added, break for next section
            {
                lines.Add(br[1]);
            }

            var outputLines = Parse.Where(chk => chk != null && chk.Valid && chk.Comment != V).OrderBy(chk => chk.Judgement); // Fishy sorted to top

            lines.AddRange(outputLines.Select(chk => string.Format(V196, getString(chk.Judgement), chk.Comment)));

            lines.AddRange(br);
            lines.Add(string.Format(V195, EncounterName));
            var pidiv = MethodFinder.Analyze(pkm);

            if (pidiv != null)
            {
                if (!pidiv.NoSeed)
                {
                    lines.Add(string.Format(V248, pidiv.OriginSeed.ToString("X8")));
                }
                lines.Add(string.Format(V249, pidiv.Type));
            }

            return(getLegalityReport() + string.Join(Environment.NewLine, lines));
        }
Пример #2
0
        private static IEnumerable <IEncounterable> GetEncounters3(PKM pkm, LegalInfo info)
        {
            info.PIDIV = MethodFinder.Analyze(pkm);
            var deferred = new List <IEncounterable>();

            foreach (var z in GenerateRawEncounters3(pkm, info))
            {
                if (z is EncounterSlot w && pkm.Version == 15)
                {
                    info.PIDIV = MethodFinder.GetPokeSpotSeeds(pkm, w.SlotNumber).FirstOrDefault() ?? info.PIDIV;
                }
                if (info.PIDIV.Type.IsCompatible3(z, pkm))
                {
                    yield return(z);
                }
                else
                {
                    deferred.Add(z);
                }
            }
            if (deferred.Count == 0)
            {
                yield break;
            }

            info.PIDIVMatches = false;
            foreach (var z in deferred)
            {
                yield return(z);
            }
        }
Пример #3
0
        public static IEnumerable <IEncounterable> GetEncounters(PKM pkm, LegalInfo info)
        {
            info.PIDIV = MethodFinder.Analyze(pkm);
            var deferredPIDIV = new List <IEncounterable>();
            var deferredEType = new List <IEncounterable>();

            foreach (var z in GenerateRawEncounters4(pkm, info))
            {
                if (!info.PIDIV.Type.IsCompatible4(z, pkm))
                {
                    deferredPIDIV.Add(z);
                }
                else if (pkm is IGroundTile e && !(z is IGroundTypeTile t ? t.GroundTile.Contains(e.GroundTile) : e.GroundTile == 0))
                {
                    deferredEType.Add(z);
                }
Пример #4
0
        private string GetVerboseLegalityReport()
        {
            if (!Parsed)
                return V189;

            const string separator = "===";
            string[] br = {separator, ""};
            var lines = new List<string> {br[1]};
            lines.AddRange(br);
            int rl = lines.Count;

            var vMoves = Info.Moves;
            var vRelearn = Info.Relearn;
            for (int i = 0; i < 4; i++)
                if (vMoves[i].Valid)
                    lines.Add(string.Format(V191, vMoves[i].Judgement.Description(), i + 1, vMoves[i].Comment));

            if (pkm.Format >= 6)
            for (int i = 0; i < 4; i++)
                if (vRelearn[i].Valid)
                    lines.Add(string.Format(V192, vRelearn[i].Judgement.Description(), i + 1, vRelearn[i].Comment));

            if (rl != lines.Count) // move info added, break for next section
                lines.Add(br[1]);
            
            var outputLines = Parse.Where(chk => chk != null && chk.Valid && chk.Comment != V).OrderBy(chk => chk.Judgement); // Fishy sorted to top
            lines.AddRange(outputLines.Select(chk => string.Format(V196, chk.Judgement.Description(), chk.Comment)));

            lines.AddRange(br);
            lines.Add(string.Format(V195, EncounterName));
            var pidiv = Info.PIDIV ?? MethodFinder.Analyze(pkm);
            if (pidiv != null)
            {
                if (!pidiv.NoSeed)
                    lines.Add(string.Format(V248, pidiv.OriginSeed.ToString("X8")));
                lines.Add(string.Format(V249, pidiv.Type));
            }
            if (!Valid && Info.InvalidMatches != null)
            {
                lines.Add("Other match(es):");
                lines.AddRange(Info.InvalidMatches.Select(z => $"{z.Name}: {z.Reason}"));
            }
            
            return GetLegalityReport() + string.Join(Environment.NewLine, lines);
        }
Пример #5
0
        private static IEnumerable <IEncounterable> GetEncounters3(PKM pkm, LegalInfo info)
        {
            info.PIDIV = MethodFinder.Analyze(pkm);
            var deferred = new List <IEncounterable>();

            foreach (var z in GenerateRawEncounters3(pkm, info))
            {
                if (pkm.Version == (int)GameVersion.CXD) // C/XD
                {
                    if (z is EncounterSlot w)
                    {
                        var seeds = MethodFinder.GetPokeSpotSeeds(pkm, w.SlotNumber).FirstOrDefault();
                        info.PIDIV = seeds ?? info.PIDIV;
                    }
                    else if (z is EncounterStaticShadow s)
                    {
                        bool valid = GetIsShadowLockValid(pkm, info, s);
                        if (!valid)
                        {
                            deferred.Add(s);
                            continue;
                        }
                    }
                }
                if (info.PIDIV.Type.IsCompatible3(z, pkm))
                {
                    yield return(z);
                }
                else
                {
                    deferred.Add(z);
                }
            }
            if (deferred.Count == 0)
            {
                yield break;
            }

            info.PIDIVMatches = false;
            foreach (var z in deferred)
            {
                yield return(z);
            }
        }
Пример #6
0
        private static IEnumerable <IEncounterable> GetEncounters3CXD(PKM pkm, LegalInfo info)
        {
            info.PIDIV = MethodFinder.Analyze(pkm);
            IEncounterable?Partial = null;

            foreach (var z in GenerateRawEncounters3CXD(pkm))
            {
                if (z is EncounterSlot3PokeSpot w)
                {
                    var seeds = MethodFinder.GetPokeSpotSeeds(pkm, w.SlotNumber);
                    foreach (var s in seeds)
                    {
                        info.PIDIV = s;
                        break;
                    }
                }
                else if (z is EncounterStaticShadow s)
                {
                    bool valid = GetIsShadowLockValid(pkm, info, s);
                    if (!valid)
                    {
                        Partial ??= s;
                        continue;
                    }
                }

                if (info.PIDIV.Type.IsCompatible3(z, pkm))
                {
                    yield return(z);
                }
                else
                {
                    Partial ??= z;
                }
            }
            if (Partial == null)
            {
                yield break;
            }

            info.PIDIVMatches = false;
            yield return(Partial);
        }
Пример #7
0
        private static void VerifyFatefulMysteryGift(LegalityAnalysis data, MysteryGift g)
        {
            var pkm = data.pkm;

            if (g is PGF p && p.IsShiny)
            {
                var Info = data.Info;
                Info.PIDIV = MethodFinder.Analyze(pkm);
                if (Info.PIDIV.Type != PIDType.G5MGShiny && pkm.Egg_Location != 30003)
                {
                    data.AddLine(GetInvalid(LPIDTypeMismatch, CheckIdentifier.PID));
                }
            }

            var result = pkm.FatefulEncounter
                ? GetValid(LFatefulMystery, CheckIdentifier.Fateful)
                : GetInvalid(LFatefulMysteryMissing, CheckIdentifier.Fateful);

            data.AddLine(result);
        }
Пример #8
0
        private static IEnumerable <IEncounterable> GetEncounters3(PKM pkm, LegalInfo info)
        {
            info.PIDIV = MethodFinder.Analyze(pkm);
            var deferred = new List <IEncounterable>();

            foreach (var z in GenerateRawEncounters3(pkm, info))
            {
                if (pkm.Version == 15)
                {
                    if (z is EncounterSlot w)
                    {
                        var seeds = MethodFinder.GetPokeSpotSeeds(pkm, w.SlotNumber).FirstOrDefault();
                        info.PIDIV = seeds ?? info.PIDIV;
                    }
                    else if (ParseSettings.FlagCXDShadowFirstLockMismatch &&
                             z is EncounterStaticShadow s && !LockFinder.IsFirstShadowLockValid(s, info.PIDIV))
                    {
                        deferred.Add(s);
                        continue;
                    }
                }
                if (info.PIDIV.Type.IsCompatible3(z, pkm))
                {
                    yield return(z);
                }
                else
                {
                    deferred.Add(z);
                }
            }
            if (deferred.Count == 0)
            {
                yield break;
            }

            info.PIDIVMatches = false;
            foreach (var z in deferred)
            {
                yield return(z);
            }
        }
Пример #9
0
        private static IEnumerable <IEncounterable> GetEncounters4(PKM pkm, LegalInfo info)
        {
            info.PIDIV = MethodFinder.Analyze(pkm);
            var deferredPIDIV = new List <IEncounterable>();
            var deferredEType = new List <IEncounterable>();

            foreach (var z in GenerateRawEncounters4(pkm, info))
            {
                if (!info.PIDIV.Type.IsCompatible4(z, pkm))
                {
                    deferredPIDIV.Add(z);
                }
                else if (pkm.Format <= 6 && !IsEncounterTypeMatch(z, pkm.EncounterType))
                {
                    deferredEType.Add(z);
                }
                else
                {
                    yield return(z);
                }
            }

            foreach (var z in deferredEType)
            {
                yield return(z);
            }

            if (deferredPIDIV.Count == 0)
            {
                yield break;
            }

            info.PIDIVMatches = false;
            foreach (var z in deferredPIDIV)
            {
                yield return(z);
            }
        }
Пример #10
0
        private void VerifyFatefulMysteryGift(LegalityAnalysis data, MysteryGift g)
        {
            var pkm = data.pkm;

            if (g is PGF p && p.IsShiny)
            {
                var Info = data.Info;
                Info.PIDIV = MethodFinder.Analyze(pkm);
                if (Info.PIDIV.Type != PIDType.G5MGShiny && pkm.Egg_Location != 30003)
                {
                    data.AddLine(GetInvalid(V411, CheckIdentifier.PID));
                }
            }

            if (pkm.FatefulEncounter)
            {
                data.AddLine(GetValid(V321, CheckIdentifier.Fateful));
            }
            else
            {
                data.AddLine(GetInvalid(V322, CheckIdentifier.Fateful));
            }
        }
Пример #11
0
        private static IEnumerable <IEncounterable> GetEncounters3(PKM pkm, LegalInfo info)
        {
            info.PIDIV = MethodFinder.Analyze(pkm);
            IEncounterable?Partial = null;

            foreach (var z in GenerateRawEncounters3(pkm, info))
            {
                if (info.PIDIV.Type.IsCompatible3(z, pkm))
                {
                    yield return(z);
                }
                else
                {
                    Partial ??= z;
                }
            }
            if (Partial == null)
            {
                yield break;
            }

            info.PIDIVMatches = false;
            yield return(Partial);
        }
Пример #12
0
        private string GetVerboseLegalityReport()
        {
            if (!Parsed || Info == null)
            {
                return(L_AnalysisUnavailable);
            }

            const string separator = "===";

            string[] br    = { separator, string.Empty };
            var      lines = new List <string> {
                br[1]
            };

            lines.AddRange(br);
            int rl = lines.Count;

            var vMoves   = Info.Moves;
            var vRelearn = Info.Relearn;

            for (int i = 0; i < 4; i++)
            {
                var move = vMoves[i];
                if (!move.Valid)
                {
                    continue;
                }
                var msg = string.Format(L_F0_M_1_2, move.Rating, i + 1, move.Comment);
                if (pkm.Format != move.Generation)
                {
                    msg += $" [Gen{move.Generation}]";
                }
                lines.Add(msg);
            }

            if (pkm.Format >= 6)
            {
                for (int i = 0; i < 4; i++)
                {
                    if (vRelearn[i].Valid)
                    {
                        lines.Add(string.Format(L_F0_RM_1_2, vRelearn[i].Rating, i + 1, vRelearn[i].Comment));
                    }
                }
            }

            if (rl != lines.Count) // move info added, break for next section
            {
                lines.Add(br[1]);
            }

            var outputLines = Parse.Where(chk => chk?.Valid == true && chk.Comment != L_AValid).OrderBy(chk => chk.Judgement); // Fishy sorted to top

            lines.AddRange(outputLines.Select(chk => string.Format(L_F0_1, chk.Rating, chk.Comment)));

            lines.AddRange(br);
            lines.Add(string.Format(L_FEncounterType_0, EncounterName));
            var loc = EncounterLocation;

            if (!string.IsNullOrEmpty(loc))
            {
                lines.Add(string.Format(L_F0_1, "Location", loc));
            }
            if (pkm.VC)
            {
                lines.Add(string.Format(L_F0_1, nameof(GameVersion), Info.Game));
            }
            var pidiv = Info.PIDIV ?? MethodFinder.Analyze(pkm);

            if (pidiv != null)
            {
                if (!pidiv.NoSeed)
                {
                    lines.Add(string.Format(L_FOriginSeed_0, pidiv.OriginSeed.ToString("X8")));
                }
                lines.Add(string.Format(L_FPIDType_0, pidiv.Type));
            }
            if (!Valid && Info.InvalidMatches != null)
            {
                lines.Add("Other match(es):");
                lines.AddRange(Info.InvalidMatches.Select(z => $"{z.LongName}: {z.Reason}"));
            }

            return(GetLegalityReport() + string.Join(Environment.NewLine, lines));
        }
Пример #13
0
        private static IEnumerable <IEncounterable> GetEncounters3(PKM pkm, LegalInfo info)
        {
            info.PIDIV = MethodFinder.Analyze(pkm);
            var deferred = new List <IEncounterable>();

            foreach (var z in GenerateRawEncounters3(pkm, info))
            {
                if (pkm.Version == (int)GameVersion.CXD) // C/XD
                {
                    if (z is EncounterSlot w)
                    {
                        var seeds = MethodFinder.GetPokeSpotSeeds(pkm, w.SlotNumber).FirstOrDefault();
                        info.PIDIV = seeds ?? info.PIDIV;
                    }
                    else if (z is EncounterStaticShadow s)
                    {
                        bool valid = false;
                        if (s.IVs == null) // not ereader
                        {
                            valid = LockFinder.IsAllShadowLockValid(s, info.PIDIV, pkm);
                        }
                        else
                        {
                            var possible = MethodFinder.GetColoEReaderMatches(pkm.EncryptionConstant);
                            foreach (var poss in possible)
                            {
                                if (!LockFinder.IsAllShadowLockValid(s, poss, pkm))
                                {
                                    continue;
                                }
                                valid      = true;
                                info.PIDIV = poss;
                                break;
                            }
                        }

                        if (!valid)
                        {
                            deferred.Add(s);
                            continue;
                        }
                    }
                }
                if (info.PIDIV.Type.IsCompatible3(z, pkm))
                {
                    yield return(z);
                }
                else
                {
                    deferred.Add(z);
                }
            }
            if (deferred.Count == 0)
            {
                yield break;
            }

            info.PIDIVMatches = false;
            foreach (var z in deferred)
            {
                yield return(z);
            }
        }
Пример #14
0
        private string GetVerboseLegalityReport()
        {
            if (!Parsed || Info == null)
            {
                return(V189);
            }

            const string separator = "===";

            string[] br    = { separator, "" };
            var      lines = new List <string> {
                br[1]
            };

            lines.AddRange(br);
            int rl = lines.Count;

            var vMoves   = Info.Moves;
            var vRelearn = Info.Relearn;

            for (int i = 0; i < 4; i++)
            {
                if (vMoves[i].Valid)
                {
                    lines.Add(string.Format(V191, vMoves[i].Rating, i + 1, vMoves[i].Comment));
                }
            }

            if (pkm.Format >= 6)
            {
                for (int i = 0; i < 4; i++)
                {
                    if (vRelearn[i].Valid)
                    {
                        lines.Add(string.Format(V192, vRelearn[i].Rating, i + 1, vRelearn[i].Comment));
                    }
                }
            }

            if (rl != lines.Count) // move info added, break for next section
            {
                lines.Add(br[1]);
            }

            var outputLines = Parse.Where(chk => chk?.Valid == true && chk.Comment != V).OrderBy(chk => chk.Judgement); // Fishy sorted to top

            lines.AddRange(outputLines.Select(chk => string.Format(V196, chk.Rating, chk.Comment)));

            lines.AddRange(br);
            lines.Add(string.Format(V195, EncounterName));
            var loc = EncounterLocation;

            if (!string.IsNullOrEmpty(loc))
            {
                lines.Add(string.Format(V196, "Location", loc));
            }
            if (pkm.VC)
            {
                lines.Add(string.Format(V196, nameof(GameVersion), Info.Game));
            }
            var pidiv = Info.PIDIV ?? MethodFinder.Analyze(pkm);

            if (pidiv != null)
            {
                if (!pidiv.NoSeed)
                {
                    lines.Add(string.Format(V248, pidiv.OriginSeed.ToString("X8")));
                }
                lines.Add(string.Format(V249, pidiv.Type));
            }
            if (!Valid && Info.InvalidMatches != null)
            {
                lines.Add("Other match(es):");
                lines.AddRange(Info.InvalidMatches.Select(z => $"{z.Name}: {z.Reason}"));
            }

            return(GetLegalityReport() + string.Join(Environment.NewLine, lines));
        }