Пример #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
        private void PopulateRibbons()
        {
            TLP_Ribbons.ColumnCount = 2;
            TLP_Ribbons.RowCount    = 0;

            // Add Ribbons
            foreach (var rib in riblist)
            {
                AddRibbonSprite(rib);
            }
            foreach (var rib in riblist.OrderBy(z => RibbonStrings.GetName(z.Name)))
            {
                AddRibbonChoice(rib);
            }

            // Force auto-size
            foreach (RowStyle style in TLP_Ribbons.RowStyles)
            {
                style.SizeType = SizeType.AutoSize;
            }
            foreach (ColumnStyle style in TLP_Ribbons.ColumnStyles)
            {
                style.SizeType = SizeType.AutoSize;
            }
        }
Пример #3
0
        private void AddRibbonChoice(RibbonInfo rib)
        {
            // Get row we add to
            int row = TLP_Ribbons.RowCount;

            TLP_Ribbons.RowCount++;

            var label = new Label
            {
                Anchor   = AnchorStyles.Left,
                Name     = PrefixLabel + rib.Name,
                Text     = RibbonStrings.GetName(rib.Name),
                Padding  = Padding.Empty,
                Margin   = Padding.Empty,
                AutoSize = true,
            };

            TLP_Ribbons.Controls.Add(label, 1, row);

            if (rib.RibbonCount >= 0) // numeric count ribbon
            {
                AddRibbonNumericUpDown(rib, row);
            }
            else // boolean ribbon
            {
                AddRibbonCheckBox(rib, row, label);
            }
        }
Пример #4
0
        public static void RunLivingDexTests()
        {
            EncounterEvent.RefreshMGDB(Path.Combine(Directory.GetCurrentDirectory(), "mgdb"));
            RibbonStrings.ResetDictionary(GameInfo.Strings.ribbons);
            var  dir = Directory.GetCurrentDirectory();
            bool legalizer_settings = Legalizer.EnableEasterEggs;
            bool ribbon_settings    = APILegality.SetAllLegalRibbons;
            int  set_timeout        = APILegality.Timeout;
            bool inc_forms          = ModLogic.IncludeForms;
            bool set_shiny          = ModLogic.SetShiny;

            Legalizer.EnableEasterEggs     = false;
            APILegality.SetAllLegalRibbons = false;
            APILegality.Timeout            = 99999;
            var result_f_f = TestLivingDex(false, false, out bool p1);
            var result_f_t = TestLivingDex(false, true, out bool p2);
            var result_t_f = TestLivingDex(true, false, out bool p3);
            var result_t_t = TestLivingDex(true, true, out bool p4);
            var passed     = p1 && p2 && p3 && p4;

            Legalizer.EnableEasterEggs     = legalizer_settings;
            APILegality.SetAllLegalRibbons = ribbon_settings;
            APILegality.Timeout            = set_timeout;
            ModLogic.IncludeForms          = inc_forms;
            ModLogic.SetShiny = set_shiny;
            Directory.CreateDirectory(Path.Combine(dir, "logs"));

            var res = Status(result_f_f, false, false) + Environment.NewLine +
                      Status(result_t_f, true, false) + Environment.NewLine +
                      Status(result_f_t, false, true) + Environment.NewLine +
                      Status(result_t_t, true, true);

            File.WriteAllText(Path.Combine(dir, "logs", "output_livingdex.txt"), res);
            passed.Should().BeTrue($"Living Dex Successfully Genned (Output: \n\n{res}\n\n)");
        }
Пример #5
0
        public RibbonEditor(PKM pk)
        {
            pkm = pk;
            InitializeComponent();
            WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage);
            riblist = RibbonInfo.GetRibbonInfo(pkm);
            int vertScrollWidth = SystemInformation.VerticalScrollBarWidth;

            TLP_Ribbons.Padding = FLP_Ribbons.Padding = new Padding(0, 0, vertScrollWidth, 0);

            // Updating a Control display with autosized elements on every row addition is cpu intensive. Disable layout updates while populating.
            TLP_Ribbons.SuspendLayout();
            FLP_Ribbons.Scroll += WinFormsUtil.PanelScroll;
            TLP_Ribbons.Scroll += WinFormsUtil.PanelScroll;
            PopulateRibbons();
            TLP_Ribbons.ResumeLayout();

            if (pk is PK8 pk8)
            {
                var names  = Enum.GetNames(typeof(RibbonIndex));
                var values = (RibbonIndex[])Enum.GetValues(typeof(RibbonIndex));
                var items  = names.Select((z, i) => new ComboItem(RibbonStrings.GetName("Ribbon" + z), (int)values[i])).OrderBy(z => z.Text);
                var ds     = new List <ComboItem> {
                    new(GameInfo.GetStrings(Main.CurrentLanguage).Move[0], -1)
                };
                ds.AddRange(items.ToArray());
                CB_Affixed.InitializeBinding();
                CB_Affixed.DataSource    = ds;
                CB_Affixed.SelectedValue = (int)pk8.AffixedRibbon;
            }
            else
            {
                CB_Affixed.Visible = false;
            }
        }
Пример #6
0
 private static void InitializePKHeXEnvironment()
 {
     if (!EncounterEvent.Initialized)
     {
         EncounterEvent.RefreshMGDB();
     }
     RibbonStrings.ResetDictionary(GameInfo.Strings.ribbons);
 }
        private static void InitializeCoreStrings()
        {
            var lang = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName.Substring(0, 2);

            Util.SetLocalization(typeof(LegalityCheckStrings), lang);
            Util.SetLocalization(typeof(MessageStrings), lang);
            RibbonStrings.ResetDictionary(GameInfo.Strings.ribbons);
            LegalityAnalysis.ChangeLocalizationStrings(GameInfo.Strings.movelist, GameInfo.Strings.specieslist);
        }
Пример #8
0
        static LegalityTest()
        {
            if (EncounterEvent.Initialized)
            {
                return;
            }

            RibbonStrings.ResetDictionary(GameInfo.Strings.ribbons);
            EncounterEvent.RefreshMGDB();
        }
Пример #9
0
        /// <summary>
        /// Fix invalid and missing ribbons. (V600 and V601)
        /// </summary>
        /// <param name="pk">PKM whose ribbons need to be fixed</param>
        public static void FixRibbons(PKM pk)
        {
            string Report = new LegalityAnalysis(pk).Report();

            if (Report.Contains(String.Format(V600, "")))
            {
                string[]      ribbonList     = Report.Split(new string[] { String.Format(V600, "") }, StringSplitOptions.None)[1].Split(new string[] { "\r\n" }, StringSplitOptions.None)[0].Split(new string[] { ", " }, StringSplitOptions.None);
                var           RibbonNames    = ReflectUtil.GetPropertiesStartWithPrefix(pk.GetType(), "Ribbon").Distinct();
                List <string> missingRibbons = new List <string>();
                foreach (var RibbonName in RibbonNames)
                {
                    string v = RibbonStrings.GetName(RibbonName).Replace("Ribbon", "");
                    if (ribbonList.Contains(v))
                    {
                        missingRibbons.Add(RibbonName);
                    }
                }
                foreach (string missing in missingRibbons)
                {
                    if (missing == "RibbonCountMemoryBattle" || missing == "RibbonCountMemoryContest")
                    {
                        ReflectUtil.SetValue(pk, missing, 0);
                    }
                    else
                    {
                        ReflectUtil.SetValue(pk, missing, -1);
                    }
                }
            }
            if (Report.Contains(String.Format(V601, "")))
            {
                string[]      ribbonList     = Report.Split(new string[] { String.Format(V601, "") }, StringSplitOptions.None)[1].Split(new string[] { "\r\n" }, StringSplitOptions.None)[0].Split(new string[] { ", " }, StringSplitOptions.None);
                var           RibbonNames    = ReflectUtil.GetPropertiesStartWithPrefix(pk.GetType(), "Ribbon").Distinct();
                List <string> invalidRibbons = new List <string>();
                foreach (var RibbonName in RibbonNames)
                {
                    string v = RibbonStrings.GetName(RibbonName).Replace("Ribbon", "");
                    if (ribbonList.Contains(v))
                    {
                        invalidRibbons.Add(RibbonName);
                    }
                }
                foreach (string invalid in invalidRibbons)
                {
                    if (invalid == "RibbonCountMemoryBattle" || invalid == "RibbonCountMemoryContest")
                    {
                        ReflectUtil.SetValue(pk, invalid, 0);
                    }
                    else
                    {
                        ReflectUtil.SetValue(pk, invalid, false);
                    }
                }
            }
        }
Пример #10
0
 /// <summary>
 /// Method to get ribbons from ribbon string array
 /// </summary>
 /// <param name="pk">pokemon</param>
 /// <param name="ribbonList">string array of ribbons</param>
 /// <returns>IEnumberable of all ribbons</returns>
 private static IEnumerable <string> GetRibbonsRequired(PKM pk, string[] ribbonList)
 {
     foreach (var RibbonName in GetRibbonNames(pk))
     {
         string v = RibbonStrings.GetName(RibbonName).Replace("Ribbon", "");
         if (ribbonList.Contains(v))
         {
             yield return(RibbonName);
         }
     }
 }
Пример #11
0
 public static string GetMarkName(IRibbonIndex pk)
 {
     for (var mark = RibbonIndex.MarkLunchtime; mark <= RibbonIndex.MarkSlump; mark++)
     {
         if (pk.GetRibbon((int)mark))
         {
             return(RibbonStrings.GetName($"Ribbon{mark}"));
         }
     }
     return("");
 }
Пример #12
0
        //[Theory]
        //[InlineData(B2, true, true)]
        //[InlineData(B, true, true)]
        //[InlineData(Pt, true, true)]
#pragma warning disable xUnit1013 // Only for internal debugging
        public static void VerifyManually(GameVersion s, bool includeforms, bool shiny)
#pragma warning restore xUnit1013 // Only for internal debugging
        {
            EncounterEvent.RefreshMGDB(Path.Combine(Directory.GetCurrentDirectory(), "mgdb"));
            RibbonStrings.ResetDictionary(GameInfo.Strings.ribbons);
            APILegality.Timeout = 99999;
            var passed = true;
            var res    = s.SingleSaveTest(includeforms, shiny, ref passed);

            passed.Should().BeTrue();
        }
Пример #13
0
 public static string GetMarkName(IRibbonIndex pk)
 {
     for (var mark = RibbonIndex.MarkLunchtime; mark <= RibbonIndex.MarkSlump; mark++)
     {
         if (pk.GetRibbon((int)mark))
         {
             return($"\nPokémon found to have **{RibbonStrings.GetName($"Ribbon{mark}")}**!");
         }
     }
     return("");
 }
Пример #14
0
        static Legalizer()
        {
            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);
            });

            // Update Legality Analysis strings
            LegalityAnalysis.MoveStrings    = GameInfo.Strings.movelist;
            LegalityAnalysis.SpeciesStrings = GameInfo.Strings.specieslist;
        }
Пример #15
0
 public static void InitializePKHeXEnvironment()
 {
     if (Initialized)
     {
         return;
     }
     if (!EncounterEvent.Initialized)
     {
         EncounterEvent.RefreshMGDB();
     }
     RibbonStrings.ResetDictionary(GameInfo.Strings.ribbons);
     Initialized = true;
 }
Пример #16
0
        public Startup(IConfiguration configuration)
        {
            // Initalize everything needed
            Helpers.MoveType.MT = File.ReadAllLines("./Moves.csv").Skip(1).Select(m => Helpers.MoveType.ReadCsv(m)).ToList();
            Helpers.Sprite.loadJSON();
            EncounterEvent.RefreshMGDB(string.Empty);
            RibbonStrings.ResetDictionary(GameInfo.Strings.ribbons);

            /*LegalityAnalysis.ChangeLocalizationStrings.
             * LegalityAnalysis.MoveStrings = GameInfo.Strings.movelist;
             * LegalityAnalysis.SpeciesStrings = GameInfo.Strings.specieslist;*/

            Configuration = configuration;
        }
Пример #17
0
        private void AddRibbonSprite(RibbonInfo rib)
        {
            var name = rib.Name;
            var pb   = new PictureBox {
                AutoSize = false, Size = new Size(40, 40), BackgroundImageLayout = ImageLayout.Center, Visible = false, Name = PrefixPB + name
            };
            var img = SpriteUtil.GetRibbonSprite(name);

            pb.BackgroundImage = img;

            var display = RibbonStrings.GetName(name);

            pb.MouseEnter += (s, e) => tipName.SetToolTip(pb, display);
            FLP_Ribbons.Controls.Add(pb);
        }
Пример #18
0
 public static void InitializePKHeXEnvironment()
 {
     lock (_lock)
     {
         if (Initialized)
         {
             return;
         }
         if (!EncounterEvent.Initialized)
         {
             EncounterEvent.RefreshMGDB();
         }
         RibbonStrings.ResetDictionary(GameInfo.Strings.ribbons);
         Legalizer.EnableEasterEggs     = false;
         APILegality.SetAllLegalRibbons = false;
         APILegality.Timeout            = 99999;
         Initialized = true;
     }
 }
Пример #19
0
    /// <summary>
    /// Initializes PKHeX's runtime strings to the specified language.
    /// </summary>
    /// <param name="lang">2-char language ID</param>
    /// <param name="sav">Save data (optional)</param>
    /// <param name="hax">Permit illegal things (items, only)</param>
    public static void InitializeStrings(string lang, SaveFile?sav = null, bool hax = false)
    {
        var str = GameInfo.Strings = GameInfo.GetStrings(lang);

        if (sav != null)
        {
            GameInfo.FilteredSources = new FilteredGameDataSource(sav, GameInfo.Sources, hax);
        }

        // Update Legality Analysis strings
        ParseSettings.ChangeLocalizationStrings(str.movelist, str.specieslist);

        // Update Legality Strings
        Task.Run(() =>
        {
            RibbonStrings.ResetDictionary(str.ribbons);
            LocalizationUtil.SetLocalization(typeof(LegalityCheckStrings), lang);
            LocalizationUtil.SetLocalization(typeof(MessageStrings), lang);
        });
    }
Пример #20
0
    private void InitializeAffixed(PKM pk)
    {
        if (pk is not IRibbonSetAffixed affixed)
        {
            CB_Affixed.Visible = false;
            return;
        }

        var ds = new List <ComboItem> {
            new(GameInfo.GetStrings(Main.CurrentLanguage).Move[0], -1)
        };
        var list = Enumerable.Range(0, (int)RibbonIndex.MAX_COUNT)
                   .Select(z => new ComboItem(RibbonStrings.GetName($"Ribbon{(RibbonIndex)z}"), z))
                   .OrderBy(z => z.Text);

        ds.AddRange(list);

        CB_Affixed.InitializeBinding();
        CB_Affixed.DataSource    = ds;
        CB_Affixed.SelectedValue = (int)affixed.AffixedRibbon;
    }
Пример #21
0
        private void PopulateRibbons()
        {
            // Get a list of all Ribbon Attributes in the PKM
            var RibbonNames = ReflectUtil.GetPropertiesStartWithPrefix(pkm.GetType(), "Ribbon").Distinct();

            foreach (var RibbonName in RibbonNames)
            {
                object RibbonValue = ReflectUtil.GetValue(pkm, RibbonName);
                if (RibbonValue is int x)
                {
                    riblist.Add(new RibbonInfo(RibbonName, x));
                }
                if (RibbonValue is bool b)
                {
                    riblist.Add(new RibbonInfo(RibbonName, b));
                }
            }
            TLP_Ribbons.ColumnCount = 2;
            TLP_Ribbons.RowCount    = 0;

            // Add Ribbons
            foreach (var rib in riblist)
            {
                AddRibbonSprite(rib);
            }
            foreach (var rib in riblist.OrderBy(z => RibbonStrings.GetName(z.Name)))
            {
                AddRibbonChoice(rib);
            }

            // Force auto-size
            foreach (RowStyle style in TLP_Ribbons.RowStyles)
            {
                style.SizeType = SizeType.AutoSize;
            }
            foreach (ColumnStyle style in TLP_Ribbons.ColumnStyles)
            {
                style.SizeType = SizeType.AutoSize;
            }
        }
Пример #22
0
        static void Main(string[] args)
        {
            string appPath = Environment.CurrentDirectory;

            mt = File.ReadAllLines("./coreconsole/Moves.csv").Skip(1).Select(m => MoveType.ReadCsv(m)).ToList();

            if (args.Contains("-server"))
            {
                // Init the database
                EncounterEvent.RefreshMGDB(string.Empty);
                RibbonStrings.ResetDictionary(GameInfo.Strings.ribbons);
                LegalityAnalysis.MoveStrings    = GameInfo.Strings.movelist;
                LegalityAnalysis.SpeciesStrings = GameInfo.Strings.specieslist;
                moveNames = Util.GetMovesList(GameLanguage.DefaultLanguage);
                // Init Move Types DB

                var server1 = new Server();
                server1.Server_start(7272, "legality_check", false);
                var server2 = new Server();
                server2.Server_start(7273, "info_get", false);
                var server3 = new Server();
                server3.Server_start(7274, "legal_fix", false);
                var server4 = new Server();
                server4.Server_start(7275, "bot_info", true);
            }
            else
            {
                Initialize(args);
                if (args.Contains("-l"))
                {
                    // Legality API calls
                    var lc = new LegalityCheck(pk);
                    if (args.Contains("--verbose"))
                    {
                        Console.WriteLine(lc.VerboseReport);
                    }
                    else
                    {
                        Console.WriteLine(lc.Report);
                    }
                }
                if (args.Contains("-alm"))
                {
                    if (!args.Contains("--version"))
                    {
                        Console.WriteLine("Specify version with the [--version] tag");
                    }
                    else
                    {
                        var alm = new AutoLegality(pk, args[Array.IndexOf(args, "--version") + 1]);
                        if (alm != null)
                        {
                            if (!args.Contains("-o"))
                            {
                                string output = Util.CleanFileName(alm.GetLegalPKM().FileName);
                                File.WriteAllBytes(Path.Combine(appPath, "output", output), alm.GetLegalPKM().DecryptedBoxData);
                            }
                            else
                            {
                                string output = GetOutputPath(args);
                                File.WriteAllBytes(output, alm.GetLegalPKM().DecryptedBoxData);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Invalid version");
                        }
                    }
                }
            }
        }
Пример #23
0
 public RibbonResult(string prop, bool invalid = true)
 {
     Name    = RibbonStrings.GetName(prop);
     Invalid = invalid;
 }
Пример #24
0
        public PokemonSummary(PKM pkm, GameStrings strings) : base(pkm, strings)
        {
            Ribbons = new List <string>();
            foreach (var ribbon in RibbonInfo.GetRibbonInfo(pkm))
            {
                if (ribbon.HasRibbon)
                {
                    Ribbons.Add(RibbonStrings.GetName(ribbon.Name));
                }
            }
            Moves = new List <Move>
            {
                new Move()
                {
                    Move_Name = Move1, Move_Type = MoveType.MT[pkm.Move1].Type, Move_PP = Move1_PP, Move_PP_Up = Move1_PPUp
                },
                new Move()
                {
                    Move_Name = Move2, Move_Type = MoveType.MT[pkm.Move2].Type, Move_PP = Move2_PP, Move_PP_Up = Move2_PPUp
                },
                new Move()
                {
                    Move_Name = Move3, Move_Type = MoveType.MT[pkm.Move3].Type, Move_PP = Move3_PP, Move_PP_Up = Move3_PPUp
                },
                new Move()
                {
                    Move_Name = Move4, Move_Type = MoveType.MT[pkm.Move4].Type, Move_PP = Move4_PP, Move_PP_Up = Move4_PPUp
                }
            };

            Stats = new List <Stat>
            {
                new Stat()
                {
                    Stat_Name = "HP", Stat_IV = HP_IV, Stat_EV = HP_EV, Stat_Total = HP
                },
                new Stat()
                {
                    Stat_Name = "Attack", Stat_IV = ATK_IV, Stat_EV = ATK_EV, Stat_Total = ATK
                },
                new Stat()
                {
                    Stat_Name = "Defense", Stat_IV = DEF_IV, Stat_EV = DEF_EV, Stat_Total = DEF
                },
                new Stat()
                {
                    Stat_Name = "Speed", Stat_IV = SPE_IV, Stat_EV = SPE_EV, Stat_Total = SPE
                },
                new Stat()
                {
                    Stat_Name = "Special Attack", Stat_IV = SPA_IV, Stat_EV = SPA_EV, Stat_Total = SPA
                },
                new Stat()
                {
                    Stat_Name = "Special Defense", Stat_IV = SPD_IV, Stat_EV = SPD_EV, Stat_Total = SPD
                },
            };
            Generation        = Utils.GetGeneration(pkm);
            Form              = Utils.GetForm(pkm, pkm.Form);
            HeldItemSpriteURL = "";
            HT        = pkm.HT_Name;
            DexNumber = pkm.Species;
            Size      = pkm.SIZE_STORED;
            ItemNum   = pkm.HeldItem;
            var LC = new LegalityAnalysis(pkm);

            IllegalReasons   = LC.Report();
            IsLegal          = LC.Valid;
            QR               = Utils.GenerateQR(QRMessageUtil.GetMessage(pkm));
            Base64           = System.Convert.ToBase64String(pkm.DecryptedBoxData);
            SpeciesSpriteURL = Helpers.Sprite.getFormURL(DexNumber, Generation, Form, IsShiny, Gender, Species);
        }