예제 #1
0
        static AutoLegalityExtensions()
        {
            Task.Run(() => {
                var lang = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName.Substring(0, 2);
                Util.SetLocalization(typeof(LegalityCheckStrings), lang);
                Util.SetLocalization(typeof(MessageStrings), lang);
                RibbonStrings.ResetDictionary(GameInfo.Strings.ribbons);
            });

            // Seed the Trainer Database with enough fake save files so that we return a generation sensitive format when needed.
            for (int i = 1; i < PKX.Generation; i++)
            {
                const string OT       = "PKHeX-D";
                var          blankSAV = SaveUtil.GetBlankSAV(i, OT);
                TrainerSettings.Register(blankSAV);
            }

            var trainer = TrainerSettings.GetSavedTrainerData(7);

            PKMConverter.SetPrimaryTrainer(trainer);

            // Legalizer.AllowBruteForce = false;

            // Update Legality Analysis strings
            LegalityAnalysis.MoveStrings    = GameInfo.Strings.movelist;
            LegalityAnalysis.SpeciesStrings = GameInfo.Strings.specieslist;
        }
예제 #2
0
        public dynamic Showdown([FromForm][Required] string set, [FromForm] string generation)
        {
            ShowdownSet showdown;

            try
            {
                showdown = new ShowdownSet(set);
                var            sav    = SaveUtil.GetBlankSAV(Utils.GetGameVersion(generation), "Scatman");
                PKM            newPKM = sav.GetLegalFromSet(showdown, out var result);
                PokemonSummary pks    = new PokemonSummary(newPKM, GameInfo.Strings);
                if (pks.Species == "")
                {
                    throw new System.ArgumentException("Your Pokemon does not exist!");
                }

                DefaultContractResolver contractResolver = new DefaultContractResolver
                {
                    NamingStrategy = new SnakeCaseNamingStrategy()
                };


                Response.ContentType = "application/json";
                return(JsonConvert.DeserializeObject(JsonConvert.SerializeObject(pks, new JsonSerializerSettings
                {
                    ContractResolver = contractResolver,
                    Formatting = Formatting.Indented
                })));
            } catch (Exception e) {
                dynamic error = new JObject();
                error.message = e.Message;
                return(StatusCode(400, error));
            }
        }
예제 #3
0
        public PKM Legalize(PKM pk, GameVersion ver)
        {
            var ot_name = pk.OT_Name;
            var ht_name = pk.HT_Name;

            var keep_original_data = true;

            if (debug)
            {
                Console.WriteLine(lc.Report);
            }
            if (lc.Report.ToLower().Contains("wordfilter") || lc.Report.Contains("SID") || lc.Report.Contains("TID"))
            {
                keep_original_data = false;
                ht_name            = "PKHeX";
            }
            var sav          = SaveUtil.GetBlankSAV(ver, ht_name);
            var updated      = sav.Legalize(pk);
            var new_sid      = updated.SID;
            var old_new_name = updated.OT_Name;
            var new_tid      = updated.TID;

            if (keep_original_data)
            {
                updated.TID     = pk.TID;
                updated.SID     = pk.SID;
                updated.OT_Name = ot_name;
            }
            lc = new LegalityCheck(updated);
            if (Legal)
            {
                legalpk = updated;
            }
            else
            {
                if (keep_original_data)
                {
                    updated.TID     = new_tid;
                    updated.OT_Name = old_new_name;
                    updated.SID     = new_sid;
                    lc = new LegalityCheck(updated);
                    if (Legal)
                    {
                        legalpk = updated;
                    }
                }
            }
            return(updated);
        }
예제 #4
0
        private static void VerifyFile(string path)
        {
            var lines = File.ReadAllLines(path);
            var sets  = ShowdownSet.GetShowdownSets(lines);
            var game  = GetGameFromFile(path);
            var sav   = SaveUtil.GetBlankSAV(game, "ALM");

            sav.Should().NotBeNull();
            foreach (var s in sets)
            {
                var pk = sav.GetLegalFromSet(s, out _);
                var la = new LegalityAnalysis(pk);
                la.Valid.Should().BeTrue($"{path}'s set for {GameInfo.Strings.Species[s.Species]} should generate a legal mon");
            }
        }
    private static void InitializeTrainerDatabase()
    {
        var ot           = GetEnvOrThrow("PKHEX_DEFAULT_OT");
        var trainerId    = int.Parse(GetEnvOrThrow("PKHEX_DEFAULT_TID"));
        var secretId     = int.Parse(GetEnvOrThrow("PKHEX_DEFAULT_SID"));
        var languageName = GetEnvOrThrow("PKHEX_DEFAULT_LANGUAGE");

        if (!Enum.TryParse <LanguageID>(languageName, true, out var language))
        {
            throw new Exception($"Invalid default language {languageName}");
        }

        SaveFile GetFallbackBlank(int generation)
        {
            var blankSav = SaveUtil.GetBlankSAV(generation, ot);

            blankSav.Language = (int)language;
            blankSav.TID      = trainerId;
            blankSav.SID      = secretId;
            blankSav.OT       = ot;
            return(blankSav);
        }

        for (var i = 1; i < PKX.Generation + 1; i++)
        {
            var versions = GameUtil.GetVersionsInGeneration(i, PKX.Generation);
            foreach (var v in versions)
            {
                var fallback = new SimpleTrainerInfo(v)
                {
                    Language = (int)language,
                    TID      = trainerId,
                    SID      = secretId,
                    OT       = ot,
                };
                var exist = TrainerSettings.GetSavedTrainerData(v, i, fallback);
                if (exist is SimpleTrainerInfo)
                {
                    TrainerSettings.Register(fallback);
                }
            }
        }

        var trainer = TrainerSettings.GetSavedTrainerData(PKX.Generation);

        PKMConverter.SetPrimaryTrainer(trainer);
    }
예제 #6
0
        private static Tuple <bool, int, int> SingleSaveTest(this GameVersion s, bool includeforms, bool shiny, ref bool passed)
        {
            ModLogic.IncludeForms = includeforms;
            ModLogic.SetShiny     = shiny;
            var sav = SaveUtil.GetBlankSAV(s, "ALMUT");

            PKMConverter.SetPrimaryTrainer(sav);
            var pkms   = sav.GenerateLivingDex(out int attempts);
            var genned = pkms.Count();
            var val    = new Tuple <bool, int, int>(genned == attempts, attempts, genned);

            if (genned != attempts)
            {
                passed = false;
            }
            return(val);
        }
예제 #7
0
        public PKM Legalize(PKM pk, GameVersion ver)
        {
            if (debug)
            {
                Console.WriteLine(lc.Report);
            }
            var sav     = SaveUtil.GetBlankSAV(ver, "PKHeX");
            var updated = sav.Legalize(pk);

            lc = new LegalityCheck(updated);
            if (Legal)
            {
                legalpk = updated;
                Console.WriteLine("====================================");
                Console.WriteLine("= Legalized with Auto Legality Mod =");
                Console.WriteLine("====================================");
                Console.WriteLine(lc.VerboseReport);
            }
            return(updated);
        }
예제 #8
0
        private PKM Legalize(PKM pk, GameVersion ver)
        {
            Report = la.Report();
            var sav = SaveUtil.GetBlankSAV(ver, pk.OT_Name);

            sav.TID      = pk.TID;
            sav.SID      = pk.SID;
            sav.Language = pk.Language;
            PKM upd = sav.Legalize(pk.Clone());

            upd.SetTrainerData(GetTrainerInfo(pk, ver));
            la = new LegalityAnalysis(upd);
            if (la.Valid)
            {
                legalpk    = upd;
                Successful = true;
                return(legalpk);
            }
            return(null);
        }
        private static void InitializeTrainerDatabase()
        {
            // Seed the Trainer Database with enough fake save files so that we return a generation sensitive format when needed.
            var    cfg  = SysCordInstance.Self.Hub.Config;
            string OT   = cfg.GenerateOT;
            int    TID  = cfg.GenerateTID16;
            int    SID  = cfg.GenerateSID16;
            int    lang = (int)cfg.GenerateLanguage;

            var externalSource = cfg.GeneratePathTrainerInfo;

            if (!string.IsNullOrWhiteSpace(externalSource) && Directory.Exists(externalSource))
            {
                TrainerSettings.LoadTrainerDatabaseFromPath(externalSource);
            }

            SaveFile GetFallbackBlank(int generation)
            {
                var blankSav = SaveUtil.GetBlankSAV(generation, OT);

                blankSav.Language = lang;
                blankSav.TID      = TID;
                blankSav.SID      = SID;
                blankSav.OT       = OT;
                return(blankSav);
            }

            for (int i = 1; i < PKX.Generation; i++)
            {
                var fallback = GetFallbackBlank(i);
                var exist    = TrainerSettings.GetSavedTrainerData(i, fallback);
                if (exist == fallback)
                {
                    TrainerSettings.Register(fallback);
                }
            }

            var trainer = TrainerSettings.GetSavedTrainerData(7);

            PKMConverter.SetPrimaryTrainer(trainer);
        }
예제 #10
0
        public static PKM Legalize(PKM pk, GameVersion ver, LegalityAnalysis old = null)
        {
            if (old != null)
            {
                Debug.WriteLine(old.Report());
            }

            var sav     = SaveUtil.GetBlankSAV(ver, "PKHeX");
            var updated = sav.Legalize(pk);
            var la      = new LegalityAnalysis(updated);

            if (!la.Valid)
            {
                return(pk);
            }

            Console.WriteLine("====================================");
            Console.WriteLine("= Legalized with Auto Legality Mod =");
            Console.WriteLine("====================================");
            Console.WriteLine(la.Report(true));
            return(updated);
        }
예제 #11
0
    public void CanMakeBlankSAV8()
    {
        var sav = SaveUtil.GetBlankSAV(GameVersion.SW, "PKHeX");

        sav.Should().NotBeNull();
    }