diff --git a/ARKBreedingStats/ARKBreedingStats.csproj b/ARKBreedingStats/ARKBreedingStats.csproj index 1592ce5d..d7025388 100644 --- a/ARKBreedingStats/ARKBreedingStats.csproj +++ b/ARKBreedingStats/ARKBreedingStats.csproj @@ -135,6 +135,12 @@ ParentStatValues.cs + + UserControl + + + SpeciesSelector.cs + @@ -320,6 +326,9 @@ TagSelectorList.cs + + Component + UserControl @@ -357,6 +366,9 @@ customSoundChooser.cs + + SpeciesSelector.cs + dhmsInput.cs @@ -393,6 +405,9 @@ TagSelectorList.cs + + PreserveNewest + PreserveNewest diff --git a/ARKBreedingStats/App.config b/ARKBreedingStats/App.config index c6b86294..bf35f2d5 100644 --- a/ARKBreedingStats/App.config +++ b/ARKBreedingStats/App.config @@ -43,9 +43,6 @@ True - - - False diff --git a/ARKBreedingStats/BreedingPlan.cs b/ARKBreedingStats/BreedingPlan.cs index a7bf038f..5d4eb240 100644 --- a/ARKBreedingStats/BreedingPlan.cs +++ b/ARKBreedingStats/BreedingPlan.cs @@ -16,6 +16,7 @@ public partial class BreedingPlan : UserControl public event PedigreeCreature.CreaturePartnerEventHandler BestBreedingPartners; public event PedigreeCreature.ExportToClipboardEventHandler exportToClipboard; public event Raising.createIncubationEventHandler createIncubationTimer; + public event Form1.setMessageLabelTextEventHandler setMessageLabelText; private List females = new List(); private List males = new List(); private List[] combinedTops = new List[2]; @@ -418,11 +419,11 @@ public void drawBestParents(BreedingMode breedingMode, bool updateBreedingData = } if (bestCreatureAlreadyAvailable) - if (MessageBox.Show("There is already a creature in your library that has all the available top-stats (" + setMessageLabelText("There is already a creature in your library that has all the available top-stats (" + bestCreature.name + " " + Utils.sexSymbol(bestCreature.gender) + ")." - + "\nThe currently selected conservative-breeding-mode might show some suggestions that may seem non-optimal.\n\n" - + "Change the breeding-mode to \"High Stats\" for better suggestions.\nDo you want to change the breeding-mode to \"High Stats\"?", - "Top-creature already available", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) radioButtonBPHighStats.Checked = true; + + "\nThe currently selected conservative-breeding-mode might show some suggestions that may seem non-optimal.\n" + + "Change the breeding-mode to \"High Stats\" for better suggestions."); + else setMessageLabelText(""); } } else diff --git a/ARKBreedingStats/Extraction.cs b/ARKBreedingStats/Extraction.cs index 61b51560..dd1750ae 100644 --- a/ARKBreedingStats/Extraction.cs +++ b/ARKBreedingStats/Extraction.cs @@ -208,7 +208,8 @@ public void extractLevels(int speciesI, int level, List statIOs, double // assuming food has no dom-levels, extract the exact imprinting from this stat. If the difference is less than 0.01, take this (probably more precise) value for the imprinting. (food has higher values and yields more precise results) int wildLevelsFromImprintedFood = (int)Math.Round(((((statIOs[3].Input / (1 + stats[3].MultAffinity)) - stats[3].AddWhenTamed) / ((1 + imprintingBonusRounded * 0.2 * imprintingBonusMultiplier) * stats[3].BaseValue)) - 1) / stats[3].IncPerWildLevel); double imprintingBonusFromFood = ((statIOs[3].Input / (1 + stats[3].MultAffinity) - stats[3].AddWhenTamed) / Stats.calculateValue(speciesI, 3, wildLevelsFromImprintedFood, 0, false, 0, 0) - 1) / (0.2 * imprintingBonusMultiplier); - if (Math.Abs(imprintingBonus - imprintingBonusFromFood) < 0.01) + + if (Stats.calculateValue(speciesI, 7, wildLevelsFromImprintedTorpor, 0, true, 1, imprintingBonusFromFood) == statIOs[7].Input) imprintingBonus = imprintingBonusFromFood; } else if (Values.V.species[speciesI].breeding != null && Values.V.species[speciesI].breeding.maturationTimeAdjusted > 0) diff --git a/ARKBreedingStats/FileSync.cs b/ARKBreedingStats/FileSync.cs index 8066b4db..ce204937 100644 --- a/ARKBreedingStats/FileSync.cs +++ b/ARKBreedingStats/FileSync.cs @@ -14,12 +14,12 @@ class FileSync FileSystemWatcher file_watcher; DateTime lastUpdated; Action callbackFunction; - + public FileSync(string fileName, Action callback) { currentFile = fileName; callbackFunction = callback; - + file_watcher = new FileSystemWatcher(); // Add the handler for file changes @@ -89,5 +89,19 @@ private void updateProperties() file_watcher.EnableRaisingEvents = false; } } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + file_watcher.Dispose(); + } + } } } diff --git a/ARKBreedingStats/Form1.Designer.cs b/ARKBreedingStats/Form1.Designer.cs index 3d812898..347665c6 100644 --- a/ARKBreedingStats/Form1.Designer.cs +++ b/ARKBreedingStats/Form1.Designer.cs @@ -288,12 +288,14 @@ private void InitializeComponent() this.toolStripCBTempCreatures = new System.Windows.Forms.ToolStripComboBox(); this.toolStripButtonDeleteTempCreature = new System.Windows.Forms.ToolStripButton(); this.panelToolBar = new System.Windows.Forms.Panel(); + this.pbSpecies = new System.Windows.Forms.PictureBox(); + this.tbSpeciesGlobal = new ARKBreedingStats.uiControls.TextBoxSuggest(); this.cbGuessSpecies = new System.Windows.Forms.CheckBox(); - this.lbLibrarySelectionInfo = new System.Windows.Forms.Label(); this.chkbToggleOverlay = new System.Windows.Forms.CheckBox(); this.labelListening = new System.Windows.Forms.Label(); this.label9 = new System.Windows.Forms.Label(); - this.comboBoxSpeciesGlobal = new System.Windows.Forms.ComboBox(); + this.lbLibrarySelectionInfo = new System.Windows.Forms.Label(); + this.speciesSelector1 = new ARKBreedingStats.SpeciesSelector(); this.groupBox1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numericUpDownImprintingBonusTester)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.NumericUpDownTestingTE)).BeginInit(); @@ -343,6 +345,7 @@ private void InitializeComponent() this.statusStrip1.SuspendLayout(); this.toolStrip2.SuspendLayout(); this.panelToolBar.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbSpecies)).BeginInit(); this.SuspendLayout(); // // aboutToolStripMenuItem @@ -880,7 +883,7 @@ private void InitializeComponent() this.toolStripMenuItem1}); this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Size = new System.Drawing.Size(994, 24); + this.menuStrip1.Size = new System.Drawing.Size(1158, 24); this.menuStrip1.TabIndex = 0; this.menuStrip1.Text = "menuStrip1"; // @@ -1227,7 +1230,7 @@ private void InitializeComponent() this.tabControlMain.Location = new System.Drawing.Point(0, 103); this.tabControlMain.Name = "tabControlMain"; this.tabControlMain.SelectedIndex = 1; - this.tabControlMain.Size = new System.Drawing.Size(994, 655); + this.tabControlMain.Size = new System.Drawing.Size(1158, 655); this.tabControlMain.TabIndex = 0; this.tabControlMain.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged); // @@ -1244,7 +1247,7 @@ private void InitializeComponent() this.tabPageStatTesting.Location = new System.Drawing.Point(4, 22); this.tabPageStatTesting.Name = "tabPageStatTesting"; this.tabPageStatTesting.Padding = new System.Windows.Forms.Padding(3); - this.tabPageStatTesting.Size = new System.Drawing.Size(986, 629); + this.tabPageStatTesting.Size = new System.Drawing.Size(1150, 629); this.tabPageStatTesting.TabIndex = 1; this.tabPageStatTesting.Text = "Stat Testing"; this.tabPageStatTesting.UseVisualStyleBackColor = true; @@ -1547,7 +1550,7 @@ private void InitializeComponent() // // creatureInfoInputTester // - this.creatureInfoInputTester.Cooldown = new System.DateTime(2018, 2, 18, 23, 16, 53, 209); + this.creatureInfoInputTester.Cooldown = new System.DateTime(2018, 3, 3, 21, 53, 31, 728); this.creatureInfoInputTester.CreatureName = ""; this.creatureInfoInputTester.CreatureNote = ""; this.creatureInfoInputTester.CreatureOwner = ""; @@ -1557,7 +1560,7 @@ private void InitializeComponent() this.creatureInfoInputTester.CreatureTribe = ""; this.creatureInfoInputTester.domesticatedAt = new System.DateTime(2016, 7, 5, 13, 11, 41, 997); this.creatureInfoInputTester.father = null; - this.creatureInfoInputTester.Grown = new System.DateTime(2018, 2, 18, 23, 16, 53, 210); + this.creatureInfoInputTester.Grown = new System.DateTime(2018, 3, 3, 21, 53, 31, 729); this.creatureInfoInputTester.Location = new System.Drawing.Point(321, 184); this.creatureInfoInputTester.mother = null; this.creatureInfoInputTester.MutationCounter = 0; @@ -1593,7 +1596,7 @@ private void InitializeComponent() this.tabPageExtractor.Location = new System.Drawing.Point(4, 22); this.tabPageExtractor.Name = "tabPageExtractor"; this.tabPageExtractor.Padding = new System.Windows.Forms.Padding(3); - this.tabPageExtractor.Size = new System.Drawing.Size(986, 629); + this.tabPageExtractor.Size = new System.Drawing.Size(1150, 629); this.tabPageExtractor.TabIndex = 0; this.tabPageExtractor.Text = "Extractor"; this.tabPageExtractor.UseVisualStyleBackColor = true; @@ -1881,7 +1884,7 @@ private void InitializeComponent() // // creatureInfoInputExtractor // - this.creatureInfoInputExtractor.Cooldown = new System.DateTime(2018, 2, 18, 23, 16, 53, 237); + this.creatureInfoInputExtractor.Cooldown = new System.DateTime(2018, 3, 3, 21, 53, 31, 773); this.creatureInfoInputExtractor.CreatureName = ""; this.creatureInfoInputExtractor.CreatureNote = ""; this.creatureInfoInputExtractor.CreatureOwner = ""; @@ -1891,7 +1894,7 @@ private void InitializeComponent() this.creatureInfoInputExtractor.CreatureTribe = ""; this.creatureInfoInputExtractor.domesticatedAt = new System.DateTime(2016, 7, 5, 13, 12, 15, 968); this.creatureInfoInputExtractor.father = null; - this.creatureInfoInputExtractor.Grown = new System.DateTime(2018, 2, 18, 23, 16, 53, 238); + this.creatureInfoInputExtractor.Grown = new System.DateTime(2018, 3, 3, 21, 53, 31, 774); this.creatureInfoInputExtractor.Location = new System.Drawing.Point(321, 184); this.creatureInfoInputExtractor.mother = null; this.creatureInfoInputExtractor.MutationCounter = 0; @@ -1910,7 +1913,7 @@ private void InitializeComponent() this.tabPageLibrary.Location = new System.Drawing.Point(4, 22); this.tabPageLibrary.Name = "tabPageLibrary"; this.tabPageLibrary.Padding = new System.Windows.Forms.Padding(3); - this.tabPageLibrary.Size = new System.Drawing.Size(986, 629); + this.tabPageLibrary.Size = new System.Drawing.Size(1150, 629); this.tabPageLibrary.TabIndex = 2; this.tabPageLibrary.Text = "Library"; this.tabPageLibrary.UseVisualStyleBackColor = true; @@ -1931,7 +1934,7 @@ private void InitializeComponent() this.tableLayoutPanelLibrary.RowCount = 2; this.tableLayoutPanelLibrary.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 396F)); this.tableLayoutPanelLibrary.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanelLibrary.Size = new System.Drawing.Size(980, 623); + this.tableLayoutPanelLibrary.Size = new System.Drawing.Size(1144, 623); this.tableLayoutPanelLibrary.TabIndex = 4; // // tabControlLibFilter @@ -2255,7 +2258,7 @@ private void InitializeComponent() this.listViewLibrary.Location = new System.Drawing.Point(204, 3); this.listViewLibrary.Name = "listViewLibrary"; this.tableLayoutPanelLibrary.SetRowSpan(this.listViewLibrary, 2); - this.listViewLibrary.Size = new System.Drawing.Size(773, 617); + this.listViewLibrary.Size = new System.Drawing.Size(937, 617); this.listViewLibrary.TabIndex = 2; this.listViewLibrary.UseCompatibleStateImageBehavior = false; this.listViewLibrary.View = System.Windows.Forms.View.Details; @@ -2604,7 +2607,7 @@ private void InitializeComponent() this.tabPagePedigree.Location = new System.Drawing.Point(4, 22); this.tabPagePedigree.Name = "tabPagePedigree"; this.tabPagePedigree.Padding = new System.Windows.Forms.Padding(3); - this.tabPagePedigree.Size = new System.Drawing.Size(986, 629); + this.tabPagePedigree.Size = new System.Drawing.Size(1150, 629); this.tabPagePedigree.TabIndex = 3; this.tabPagePedigree.Text = "Pedigree"; this.tabPagePedigree.UseVisualStyleBackColor = true; @@ -2615,7 +2618,7 @@ private void InitializeComponent() this.pedigree1.Dock = System.Windows.Forms.DockStyle.Fill; this.pedigree1.Location = new System.Drawing.Point(3, 3); this.pedigree1.Name = "pedigree1"; - this.pedigree1.Size = new System.Drawing.Size(980, 623); + this.pedigree1.Size = new System.Drawing.Size(1144, 623); this.pedigree1.TabIndex = 0; // // tabPageTaming @@ -2624,7 +2627,7 @@ private void InitializeComponent() this.tabPageTaming.Location = new System.Drawing.Point(4, 22); this.tabPageTaming.Name = "tabPageTaming"; this.tabPageTaming.Padding = new System.Windows.Forms.Padding(3); - this.tabPageTaming.Size = new System.Drawing.Size(986, 629); + this.tabPageTaming.Size = new System.Drawing.Size(1150, 629); this.tabPageTaming.TabIndex = 8; this.tabPageTaming.Text = "Taming"; this.tabPageTaming.UseVisualStyleBackColor = true; @@ -2635,7 +2638,7 @@ private void InitializeComponent() this.tamingControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.tamingControl1.Location = new System.Drawing.Point(3, 3); this.tamingControl1.Name = "tamingControl1"; - this.tamingControl1.Size = new System.Drawing.Size(980, 623); + this.tamingControl1.Size = new System.Drawing.Size(1144, 623); this.tamingControl1.TabIndex = 0; this.tamingControl1.weaponDamages = new double[] { 100D, @@ -2652,7 +2655,7 @@ private void InitializeComponent() this.tabPageBreedingPlan.Location = new System.Drawing.Point(4, 22); this.tabPageBreedingPlan.Name = "tabPageBreedingPlan"; this.tabPageBreedingPlan.Padding = new System.Windows.Forms.Padding(3); - this.tabPageBreedingPlan.Size = new System.Drawing.Size(986, 629); + this.tabPageBreedingPlan.Size = new System.Drawing.Size(1150, 629); this.tabPageBreedingPlan.TabIndex = 4; this.tabPageBreedingPlan.Text = "Breeding Plan"; this.tabPageBreedingPlan.UseVisualStyleBackColor = true; @@ -2664,7 +2667,7 @@ private void InitializeComponent() this.breedingPlan1.Dock = System.Windows.Forms.DockStyle.Fill; this.breedingPlan1.Location = new System.Drawing.Point(3, 3); this.breedingPlan1.Name = "breedingPlan1"; - this.breedingPlan1.Size = new System.Drawing.Size(980, 623); + this.breedingPlan1.Size = new System.Drawing.Size(1144, 623); this.breedingPlan1.TabIndex = 0; // // tabPageRaising @@ -2673,7 +2676,7 @@ private void InitializeComponent() this.tabPageRaising.Location = new System.Drawing.Point(4, 22); this.tabPageRaising.Name = "tabPageRaising"; this.tabPageRaising.Padding = new System.Windows.Forms.Padding(3); - this.tabPageRaising.Size = new System.Drawing.Size(986, 629); + this.tabPageRaising.Size = new System.Drawing.Size(1150, 629); this.tabPageRaising.TabIndex = 9; this.tabPageRaising.Text = "Raising"; this.tabPageRaising.UseVisualStyleBackColor = true; @@ -2684,7 +2687,7 @@ private void InitializeComponent() this.raisingControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.raisingControl1.Location = new System.Drawing.Point(3, 3); this.raisingControl1.Name = "raisingControl1"; - this.raisingControl1.Size = new System.Drawing.Size(980, 623); + this.raisingControl1.Size = new System.Drawing.Size(1144, 623); this.raisingControl1.TabIndex = 0; // // tabPageTimer @@ -2693,7 +2696,7 @@ private void InitializeComponent() this.tabPageTimer.Location = new System.Drawing.Point(4, 22); this.tabPageTimer.Name = "tabPageTimer"; this.tabPageTimer.Padding = new System.Windows.Forms.Padding(3); - this.tabPageTimer.Size = new System.Drawing.Size(986, 629); + this.tabPageTimer.Size = new System.Drawing.Size(1150, 629); this.tabPageTimer.TabIndex = 6; this.tabPageTimer.Text = "Timer"; this.tabPageTimer.UseVisualStyleBackColor = true; @@ -2703,7 +2706,7 @@ private void InitializeComponent() this.timerList1.Dock = System.Windows.Forms.DockStyle.Fill; this.timerList1.Location = new System.Drawing.Point(3, 3); this.timerList1.Name = "timerList1"; - this.timerList1.Size = new System.Drawing.Size(980, 623); + this.timerList1.Size = new System.Drawing.Size(1144, 623); this.timerList1.TabIndex = 0; this.timerList1.TimerAlertsCSV = ""; // @@ -2713,7 +2716,7 @@ private void InitializeComponent() this.tabPagePlayerTribes.Location = new System.Drawing.Point(4, 22); this.tabPagePlayerTribes.Name = "tabPagePlayerTribes"; this.tabPagePlayerTribes.Padding = new System.Windows.Forms.Padding(3); - this.tabPagePlayerTribes.Size = new System.Drawing.Size(986, 629); + this.tabPagePlayerTribes.Size = new System.Drawing.Size(1150, 629); this.tabPagePlayerTribes.TabIndex = 7; this.tabPagePlayerTribes.Text = "Player"; this.tabPagePlayerTribes.UseVisualStyleBackColor = true; @@ -2723,7 +2726,7 @@ private void InitializeComponent() this.tribesControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.tribesControl1.Location = new System.Drawing.Point(3, 3); this.tribesControl1.Name = "tribesControl1"; - this.tribesControl1.Size = new System.Drawing.Size(980, 623); + this.tribesControl1.Size = new System.Drawing.Size(1144, 623); this.tribesControl1.TabIndex = 0; // // tabPageNotes @@ -2732,7 +2735,7 @@ private void InitializeComponent() this.tabPageNotes.Location = new System.Drawing.Point(4, 22); this.tabPageNotes.Name = "tabPageNotes"; this.tabPageNotes.Padding = new System.Windows.Forms.Padding(3); - this.tabPageNotes.Size = new System.Drawing.Size(986, 629); + this.tabPageNotes.Size = new System.Drawing.Size(1150, 629); this.tabPageNotes.TabIndex = 10; this.tabPageNotes.Text = "Notes"; this.tabPageNotes.UseVisualStyleBackColor = true; @@ -2742,7 +2745,7 @@ private void InitializeComponent() this.notesControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.notesControl1.Location = new System.Drawing.Point(3, 3); this.notesControl1.Name = "notesControl1"; - this.notesControl1.Size = new System.Drawing.Size(980, 623); + this.notesControl1.Size = new System.Drawing.Size(1144, 623); this.notesControl1.TabIndex = 0; // // TabPageOCR @@ -2751,7 +2754,7 @@ private void InitializeComponent() this.TabPageOCR.Location = new System.Drawing.Point(4, 22); this.TabPageOCR.Name = "TabPageOCR"; this.TabPageOCR.Padding = new System.Windows.Forms.Padding(3); - this.TabPageOCR.Size = new System.Drawing.Size(986, 629); + this.TabPageOCR.Size = new System.Drawing.Size(1150, 629); this.TabPageOCR.TabIndex = 5; this.TabPageOCR.Text = "Experimental OCR"; this.TabPageOCR.UseVisualStyleBackColor = true; @@ -2761,12 +2764,12 @@ private void InitializeComponent() this.ocrControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.ocrControl1.Location = new System.Drawing.Point(3, 3); this.ocrControl1.Name = "ocrControl1"; - this.ocrControl1.Size = new System.Drawing.Size(980, 623); + this.ocrControl1.Size = new System.Drawing.Size(1144, 623); this.ocrControl1.TabIndex = 2; // // btnReadValuesFromArk // - this.btnReadValuesFromArk.Location = new System.Drawing.Point(212, 3); + this.btnReadValuesFromArk.Location = new System.Drawing.Point(262, 3); this.btnReadValuesFromArk.Name = "btnReadValuesFromArk"; this.btnReadValuesFromArk.Size = new System.Drawing.Size(174, 45); this.btnReadValuesFromArk.TabIndex = 41; @@ -2777,7 +2780,7 @@ private void InitializeComponent() // cbEventMultipliers // this.cbEventMultipliers.AutoSize = true; - this.cbEventMultipliers.Location = new System.Drawing.Point(12, 30); + this.cbEventMultipliers.Location = new System.Drawing.Point(53, 29); this.cbEventMultipliers.Name = "cbEventMultipliers"; this.cbEventMultipliers.Size = new System.Drawing.Size(54, 17); this.cbEventMultipliers.TabIndex = 51; @@ -2792,7 +2795,7 @@ private void InitializeComponent() this.toolStripStatusLabel}); this.statusStrip1.Location = new System.Drawing.Point(0, 758); this.statusStrip1.Name = "statusStrip1"; - this.statusStrip1.Size = new System.Drawing.Size(994, 22); + this.statusStrip1.Size = new System.Drawing.Size(1158, 22); this.statusStrip1.TabIndex = 44; this.statusStrip1.Text = "statusStrip1"; // @@ -2833,7 +2836,7 @@ private void InitializeComponent() this.toolStripButtonDeleteTempCreature}); this.toolStrip2.Location = new System.Drawing.Point(0, 24); this.toolStrip2.Name = "toolStrip2"; - this.toolStrip2.Size = new System.Drawing.Size(994, 25); + this.toolStrip2.Size = new System.Drawing.Size(1158, 25); this.toolStrip2.TabIndex = 1; this.toolStrip2.Text = "toolStrip2"; // @@ -3024,43 +3027,59 @@ private void InitializeComponent() // // panelToolBar // + this.panelToolBar.Controls.Add(this.pbSpecies); + this.panelToolBar.Controls.Add(this.tbSpeciesGlobal); this.panelToolBar.Controls.Add(this.cbGuessSpecies); - this.panelToolBar.Controls.Add(this.lbLibrarySelectionInfo); this.panelToolBar.Controls.Add(this.chkbToggleOverlay); this.panelToolBar.Controls.Add(this.labelListening); this.panelToolBar.Controls.Add(this.cbEventMultipliers); this.panelToolBar.Controls.Add(this.label9); this.panelToolBar.Controls.Add(this.btnReadValuesFromArk); - this.panelToolBar.Controls.Add(this.comboBoxSpeciesGlobal); + this.panelToolBar.Controls.Add(this.lbLibrarySelectionInfo); this.panelToolBar.Dock = System.Windows.Forms.DockStyle.Top; this.panelToolBar.Location = new System.Drawing.Point(0, 49); this.panelToolBar.Name = "panelToolBar"; - this.panelToolBar.Size = new System.Drawing.Size(994, 54); + this.panelToolBar.Size = new System.Drawing.Size(1158, 54); this.panelToolBar.TabIndex = 45; // + // pbSpecies + // + this.pbSpecies.Location = new System.Drawing.Point(3, 3); + this.pbSpecies.Name = "pbSpecies"; + this.pbSpecies.Size = new System.Drawing.Size(44, 44); + this.pbSpecies.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pbSpecies.TabIndex = 13; + this.pbSpecies.TabStop = false; + this.pbSpecies.Click += new System.EventHandler(this.pbSpecies_Click); + // + // tbSpeciesGlobal + // + this.tbSpeciesGlobal.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Append; + this.tbSpeciesGlobal.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource; + this.tbSpeciesGlobal.Location = new System.Drawing.Point(104, 3); + this.tbSpeciesGlobal.Name = "tbSpeciesGlobal"; + this.tbSpeciesGlobal.Size = new System.Drawing.Size(152, 20); + this.tbSpeciesGlobal.TabIndex = 13; + this.tbSpeciesGlobal.Click += new System.EventHandler(this.tbSpeciesGlobal_Click); + this.tbSpeciesGlobal.Enter += new System.EventHandler(this.tbSpeciesGlobal_Enter); + this.tbSpeciesGlobal.KeyUp += new System.Windows.Forms.KeyEventHandler(this.tbSpeciesGlobal_KeyUp); + // // cbGuessSpecies // this.cbGuessSpecies.AutoSize = true; - this.cbGuessSpecies.Location = new System.Drawing.Point(109, 30); + this.cbGuessSpecies.Location = new System.Drawing.Point(155, 29); this.cbGuessSpecies.Name = "cbGuessSpecies"; this.cbGuessSpecies.Size = new System.Drawing.Size(97, 17); this.cbGuessSpecies.TabIndex = 55; this.cbGuessSpecies.Text = "Guess Species"; this.cbGuessSpecies.UseVisualStyleBackColor = true; // - // lbLibrarySelectionInfo - // - this.lbLibrarySelectionInfo.Location = new System.Drawing.Point(392, 3); - this.lbLibrarySelectionInfo.Name = "lbLibrarySelectionInfo"; - this.lbLibrarySelectionInfo.Size = new System.Drawing.Size(311, 45); - this.lbLibrarySelectionInfo.TabIndex = 54; - // // chkbToggleOverlay // this.chkbToggleOverlay.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.chkbToggleOverlay.Appearance = System.Windows.Forms.Appearance.Button; this.chkbToggleOverlay.AutoSize = true; - this.chkbToggleOverlay.Location = new System.Drawing.Point(929, 28); + this.chkbToggleOverlay.Location = new System.Drawing.Point(1093, 28); this.chkbToggleOverlay.Name = "chkbToggleOverlay"; this.chkbToggleOverlay.Size = new System.Drawing.Size(53, 23); this.chkbToggleOverlay.TabIndex = 53; @@ -3074,7 +3093,7 @@ private void InitializeComponent() this.labelListening.AutoSize = true; this.labelListening.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.labelListening.ForeColor = System.Drawing.SystemColors.GrayText; - this.labelListening.Location = new System.Drawing.Point(961, 3); + this.labelListening.Location = new System.Drawing.Point(1125, 3); this.labelListening.Name = "labelListening"; this.labelListening.Size = new System.Drawing.Size(21, 20); this.labelListening.TabIndex = 52; @@ -3085,30 +3104,36 @@ private void InitializeComponent() // label9 // this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(3, 6); + this.label9.Location = new System.Drawing.Point(53, 6); this.label9.Name = "label9"; this.label9.Size = new System.Drawing.Size(45, 13); this.label9.TabIndex = 2; this.label9.Text = "Species"; // - // comboBoxSpeciesGlobal + // lbLibrarySelectionInfo + // + this.lbLibrarySelectionInfo.Location = new System.Drawing.Point(442, 3); + this.lbLibrarySelectionInfo.Name = "lbLibrarySelectionInfo"; + this.lbLibrarySelectionInfo.Size = new System.Drawing.Size(547, 45); + this.lbLibrarySelectionInfo.TabIndex = 54; + // + // speciesSelector1 // - this.comboBoxSpeciesGlobal.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; - this.comboBoxSpeciesGlobal.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; - this.comboBoxSpeciesGlobal.FormattingEnabled = true; - this.comboBoxSpeciesGlobal.Location = new System.Drawing.Point(57, 3); - this.comboBoxSpeciesGlobal.Name = "comboBoxSpeciesGlobal"; - this.comboBoxSpeciesGlobal.Size = new System.Drawing.Size(149, 21); - this.comboBoxSpeciesGlobal.TabIndex = 1; - this.comboBoxSpeciesGlobal.SelectedIndexChanged += new System.EventHandler(this.comboBoxSpeciesGlobal_SelectedIndexChanged); + this.speciesSelector1.Dock = System.Windows.Forms.DockStyle.Fill; + this.speciesSelector1.LastSpecies = new string[0]; + this.speciesSelector1.Location = new System.Drawing.Point(0, 103); + this.speciesSelector1.Name = "speciesSelector1"; + this.speciesSelector1.Size = new System.Drawing.Size(1158, 655); + this.speciesSelector1.TabIndex = 0; // // Form1 // this.AcceptButton = this.buttonExtract; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(994, 780); + this.ClientSize = new System.Drawing.Size(1158, 780); this.Controls.Add(this.tabControlMain); + this.Controls.Add(this.speciesSelector1); this.Controls.Add(this.panelToolBar); this.Controls.Add(this.statusStrip1); this.Controls.Add(this.toolStrip2); @@ -3185,6 +3210,7 @@ private void InitializeComponent() this.toolStrip2.PerformLayout(); this.panelToolBar.ResumeLayout(false); this.panelToolBar.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbSpecies)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -3409,7 +3435,6 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem removeCooldownGrowingToolStripMenuItem; private System.Windows.Forms.Panel panelToolBar; private System.Windows.Forms.Label label9; - private System.Windows.Forms.ComboBox comboBoxSpeciesGlobal; private BreedingPlan breedingPlan1; private System.Windows.Forms.Label labelListening; private System.Windows.Forms.CheckBox chkbToggleOverlay; @@ -3455,5 +3480,8 @@ private void InitializeComponent() private System.Windows.Forms.TabPage tabPageServer; private System.Windows.Forms.CheckedListBox checkedListBoxFilterServers; private System.Windows.Forms.CheckBox cbServerFilterAll; + private SpeciesSelector speciesSelector1; + private uiControls.TextBoxSuggest tbSpeciesGlobal; + private System.Windows.Forms.PictureBox pbSpecies; } } diff --git a/ARKBreedingStats/Form1.cs b/ARKBreedingStats/Form1.cs index 8c4659b4..e4d151b9 100644 --- a/ARKBreedingStats/Form1.cs +++ b/ARKBreedingStats/Form1.cs @@ -20,7 +20,6 @@ public partial class Form1 : Form private Dictionary topStats = new Dictionary(); // list of top stats of all creatures per species private List statIOs = new List(); private List testingIOs = new List(); - private int speciesIndex = 0; private int activeStat = -1; private bool[] activeStats = new bool[] { true, true, true, true, true, true, true, true }; // stats used by the creature (some don't use oxygen) private bool pedigreeNeedsUpdate = false; @@ -29,6 +28,7 @@ public partial class Form1 : Form public delegate void InputValueChangedEventHandler(StatIO s); public delegate void collectionChangedEventHandler(bool changed = true, string species = "0"); // if "0" is passed as species, breeding-related controls are not updated public delegate void setSpeciesIndexEventHandler(int speciesIndex); + public delegate void setMessageLabelTextEventHandler(string text); private bool updateTorporInTester, filterListAllowed; private bool[] considerStatHighlight = new bool[] { true, true, false, false, true, true, false, false }; // consider this stat for color-highlighting, topness etc private bool autoSave; @@ -77,6 +77,7 @@ public Form1() breedingPlan1.createIncubationTimer += new Raising.createIncubationEventHandler(createIncubationTimer); breedingPlan1.BestBreedingPartners += new PedigreeCreature.CreaturePartnerEventHandler(showBestBreedingPartner); breedingPlan1.exportToClipboard += new PedigreeCreature.ExportToClipboardEventHandler(exportAsTextToClipboard); + breedingPlan1.setMessageLabelText += new setMessageLabelTextEventHandler(setMessageLabelText); breedingPlan1.bindEvents(); timerList1.onTimerChange += new collectionChangedEventHandler(setCollectionChanged); raisingControl1.onChange += new collectionChangedEventHandler(setCollectionChanged); @@ -88,6 +89,9 @@ public Form1() notesControl1.changed += new collectionChangedEventHandler(setCollectionChanged); creatureInfoInputExtractor.CreatureDataRequested += CreatureInfoInput_CreatureDataRequested; creatureInfoInputTester.CreatureDataRequested += CreatureInfoInput_CreatureDataRequested; + speciesSelector1.onSpeciesChanged += SpeciesSelector1_onSpeciesChanged; + + speciesSelector1.SetTextBox(tbSpeciesGlobal); extractor = new Extraction(); @@ -243,7 +247,7 @@ private void Form1_Load(object sender, EventArgs e) tt.SetToolTip(this.checkBoxJustTamed, "Check this if there was no server-restart or if you didn't logout since you tamed the creature.\nUncheck this if you know there was a server-restart (many servers restart every night).\nIf it is some days ago (IRL) you tamed the creature you should probably uncheck this checkbox.\nThe reason for this is a bug in the game, that displays a too high Torpor-value after a creature is tamed."); //tt.SetToolTip(checkBoxWildTamedAuto, "For most creatures the tool recognizes if they are wild or tamed.\nFor Giganotosaurus and maybe if you have custom server-settings you have to select manually if the creature is wild or tamed."); tt.SetToolTip(checkBoxQuickWildCheck, "Check this if you just want a quick check of the levels of a wild (untamed) creature.\nThe levels are then shown without the extraction-process (and without validation)."); - tt.SetToolTip(labelImprintedCount, "Number of cuddles given to get to this Imprinting-Bonus.\nClick to set to the closest valid integer."); + tt.SetToolTip(labelImprintedCount, "Number of cuddles given to get to this Imprinting-Bonus.\nClick left to set to the closest valid integer.\nClick right to set the imprinting to the value so for the torpor the levels in the tester and the value in the extractor match."); tt.SetToolTip(labelImprintingCuddleCountExtractor, "Number of cuddles given to get to this Imprinting-Bonus."); tt.SetToolTip(labelSumWild, "This is an indicator if the sum of the wild levels is valid.\nIf a number with a plus sign is shown, the sum is too high and you need to choose another possibility from the lists of yellow stats."); tt.SetToolTip(labelSumDom, "This is the sum of all manual levelups of this creature, it should exactly match the number below.\nIf it's not matching, click on a stat that is yellow and choose another possible level distribution."); @@ -270,9 +274,6 @@ private void Form1_Load(object sender, EventArgs e) if (Properties.Settings.Default.LastSaveFile == "" || !loadCollectionFile(Properties.Settings.Default.LastSaveFile)) newCollection(); - // set species comboboxes - updateSpeciesComboboxes(); - for (int s = 0; s < 8; s++) { statIOs[s].Input = 0; @@ -289,14 +290,17 @@ private void Form1_Load(object sender, EventArgs e) MessageBox.Show("The kibbles-file couldn't be loaded, the kibble-recipes will not be available. You can redownload the tool to get this file.", "Error: Kibble-file not found", MessageBoxButtons.OK, MessageBoxIcon.Error); } - int selectedSpecies = Values.V.speciesNames.IndexOf(Properties.Settings.Default.lastSpecies); - if (selectedSpecies >= 0) + speciesSelector1.setSpeciesList(Values.V.speciesNames); + speciesSelector1.LastSpecies = Properties.Settings.Default.lastSpecies; + speciesSelector1.lastTabPage = tabPageExtractor; + + if (Properties.Settings.Default.lastSpecies != null && Properties.Settings.Default.lastSpecies.Length > 0 && Values.V.speciesNames.IndexOf(Properties.Settings.Default.lastSpecies[0]) >= 0) { - comboBoxSpeciesGlobal.SelectedIndex = selectedSpecies; - tamingControl1.setSpeciesIndex(selectedSpecies); + speciesSelector1.setSpecies(Properties.Settings.Default.lastSpecies[0]); + tamingControl1.setSpeciesIndex(speciesSelector1.speciesIndex); } - else if (comboBoxSpeciesGlobal.Items.Count > 0) - comboBoxSpeciesGlobal.SelectedIndex = 0; + else if (Values.V.speciesNames.Count > 0) + speciesSelector1.setSpecies(Values.V.speciesNames[0]); extractor.activeStats = activeStats; @@ -329,6 +333,9 @@ private void Form1_Load(object sender, EventArgs e) radarChartExtractor.initializeVariables(creatureCollection.maxChartLevel); radarChartLibrary.initializeVariables(creatureCollection.maxChartLevel); + // set TLS-protocol (github needs at least TLS 1.2) for update-check + System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; + // check for updates DateTime lastUpdateCheck = Properties.Settings.Default.lastUpdateCheck; if (DateTime.Now.AddDays(-2) > lastUpdateCheck) @@ -354,8 +361,7 @@ private void Form1_Load(object sender, EventArgs e) private void setSpeciesIndex(int speciesIndex) { - if (speciesIndex >= 0 && speciesIndex < comboBoxSpeciesGlobal.Items.Count) - comboBoxSpeciesGlobal.SelectedIndex = speciesIndex; + speciesSelector1.setSpeciesIndex(speciesIndex); } private void tellTamingData(string species, int level) @@ -363,7 +369,7 @@ private void tellTamingData(string species, int level) int sI = Values.V.speciesNames.IndexOf(species); if (sI >= 0 && Values.V.species[sI].taming != null && Values.V.species[sI].taming.eats != null && Values.V.species[sI].taming.eats.Count > 0) { - comboBoxSpeciesGlobal.SelectedIndex = sI; + speciesSelector1.setSpeciesIndex(sI); tamingControl1.setLevel(level, false); tamingControl1.setSpeciesIndex(sI); if (overlay != null) @@ -456,7 +462,7 @@ private bool extractLevels(bool autoExtraction = false) if (numericUpDownImprintingBonusExtractor.Value == 100 && !cbExactlyImprinting.Checked) cbExactlyImprinting.BackColor = Color.LightSalmon; - extractor.extractLevels(speciesIndex, (int)numericUpDownLevel.Value, statIOs, + extractor.extractLevels(speciesSelector1.speciesIndex, (int)numericUpDownLevel.Value, statIOs, (double)numericUpDownLowerTEffBound.Value / 100, (double)numericUpDownUpperTEffBound.Value / 100, !radioButtonBred.Checked, radioButtonTamed.Checked, radioButtonBred.Checked, (double)numericUpDownImprintingBonusExtractor.Value / 100, !cbExactlyImprinting.Checked, creatureCollection.allowMoreThanHundredImprinting, cbExtractImprintingFromTorpor.Checked, creatureCollection.imprintingMultiplier, Values.V.babyCuddleIntervalMultiplier, @@ -470,7 +476,10 @@ private bool extractLevels(bool autoExtraction = false) if (cbExtractImprintingFromTorpor.Checked) MessageBox.Show("The imprinting-percentage given is not possible with the current multipliers and may cause wrong values during the extraction-process.\n\nMake sure the BabyImprintingStatScaleMultiplier ist set correctly.\nIt may have to be set to the value when the creature hatched/was born, even if they were changed.", "Imprinting-Value or multiplier probably wrong", MessageBoxButtons.OK, MessageBoxIcon.Warning); else - MessageBox.Show("The imprinting-percentage given is not possible with the current multipliers and may cause wrong values during the extraction-process.\n\nMake sure the BabyCuddleIntervallMultiplier and the BabyMatureSpeedMultiplier are set correctly.\nThey may have to be set to the value when the creature hatched/was born, even if they were changed.", "Imprinting-Value or multipliers probably wrong", MessageBoxButtons.OK, MessageBoxIcon.Warning); + MessageBox.Show("The imprinting-percentage given is not possible with the current multipliers and may cause wrong values during the extraction-process.\n\n" + + "Make sure the BabyCuddleIntervallMultiplier and the BabyMatureSpeedMultiplier are set correctly.\n" + + "They may have to be set to the value when the creature hatched/was born, even if they were changed.\n\n" + + "You can try the extraction with the \"Partial Imprint\"-enabled, this might work.", "Imprinting-Value or multipliers probably wrong", MessageBoxButtons.OK, MessageBoxIcon.Warning); } bool everyStatHasAtLeastOneResult = extractor.EveryStatHasAtLeastOneResult; @@ -648,10 +657,10 @@ private void extractionFailed() labelImprintingFailInfo.Text = "If the creature is imprinted the extraction may fail because the game sometimes \"forgets\" to increase some stat-values during the imprinting-process. Usually it works after a server-restart."; labelImprintingFailInfo.Visible = true; } - else if (radioButtonTamed.Checked && "Procoptodon,Pulmonoscorpius,Troodon".Split(',').ToList().IndexOf(comboBoxSpeciesGlobal.SelectedItem.ToString()) >= 0) + else if (radioButtonTamed.Checked && "Procoptodon,Pulmonoscorpius,Troodon".Split(',').ToList().IndexOf(speciesSelector1.species) >= 0) { // creatures that display wrong stat-values after taming - labelImprintingFailInfo.Text = "The " + comboBoxSpeciesGlobal.SelectedItem.ToString() + " is known for displaying wrong stat-values after taming. Please try the extraction again after the server restarted."; + labelImprintingFailInfo.Text = "The " + speciesSelector1.species + " is known for displaying wrong stat-values after taming. Please try the extraction again after the server restarted."; labelImprintingFailInfo.Visible = true; } toolStripButtonSaveCreatureValuesTemp.Visible = true; @@ -884,62 +893,84 @@ private void setPossibilitiesListview(int s) } } - private void updateSpeciesComboboxes() + private void tbSpeciesGlobal_Click(object sender, EventArgs e) { - string selectedSpecies = ""; - if (comboBoxSpeciesGlobal.SelectedIndex >= 0) selectedSpecies = comboBoxSpeciesGlobal.SelectedItem.ToString(); - comboBoxSpeciesGlobal.Items.Clear(); - for (int s = 0; s < Values.V.speciesNames.Count; s++) - comboBoxSpeciesGlobal.Items.Add(Values.V.speciesNames[s]); + showSpeciesSelector(); + } + + private void tbSpeciesGlobal_Enter(object sender, EventArgs e) + { + showSpeciesSelector(); + } - if (comboBoxSpeciesGlobal.Items.Count > 0) + private void pbSpecies_Click(object sender, EventArgs e) + { + if (tabControlMain.Visible) { - int ssi = Values.V.speciesNames.IndexOf(selectedSpecies); - if (ssi >= 0) comboBoxSpeciesGlobal.SelectedIndex = ssi; - else comboBoxSpeciesGlobal.SelectedIndex = 0; + if (tbSpeciesGlobal.Focused) + pbSpecies.Focus(); + tbSpeciesGlobal.Focus(); + } + else + { + tabControlMain.Show(); + } + } + + private void showSpeciesSelector() + { + tabControlMain.Hide(); + } + + private void tbSpeciesGlobal_KeyUp(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab) + { + speciesSelector1.setSpecies(tbSpeciesGlobal.Text); } } // global species changed / globalspecieschanged - private void comboBoxSpeciesGlobal_SelectedIndexChanged(object sender, EventArgs e) + private void SpeciesSelector1_onSpeciesChanged() { - if (comboBoxSpeciesGlobal.SelectedIndex >= 0) + tbSpeciesGlobal.Text = speciesSelector1.species; + pbSpecies.Image = speciesSelector1.speciesImage(); + tabControlMain.Show(); + + creatureInfoInputExtractor.SpeciesIndex = speciesSelector1.speciesIndex; + creatureInfoInputTester.SpeciesIndex = speciesSelector1.speciesIndex; + bool isglowSpecies = (Values.V.glowSpecies.IndexOf(speciesSelector1.species) != -1); + for (int s = 0; s < 8; s++) { - speciesIndex = comboBoxSpeciesGlobal.SelectedIndex; - creatureInfoInputExtractor.SpeciesIndex = speciesIndex; - creatureInfoInputTester.SpeciesIndex = speciesIndex; - bool isglowSpecies = (Values.V.glowSpecies.IndexOf(Values.V.species[speciesIndex].name) != -1); - for (int s = 0; s < 8; s++) - { - activeStats[s] = (Values.V.species[speciesIndex].stats[s].BaseValue > 0) && (s != 2 || !Values.V.species[speciesIndex].doesNotUseOxygen || oxygenForAll); - statIOs[s].Enabled = activeStats[s]; - statIOs[s].Title = Utils.statName(s, false, isglowSpecies); - testingIOs[s].Title = Utils.statName(s, false, isglowSpecies); - if (isglowSpecies && ((s == 1 || s == 2 || s == 5))) - { - statIOs[s].DomLevelZero = false; - } - } - if (tabControlMain.SelectedTab == tabPageExtractor) - { - clearAll(); - } - else if (tabControlMain.SelectedTab == tabPageStatTesting) - { - updateAllTesterValues(); - statPotentials1.speciesIndex = speciesIndex; - statPotentials1.setLevels(testingIOs.Select(s => s.LevelWild).ToArray(), true); - setTesterInfoInputCreature(); - } - else if (tabControlMain.SelectedTab == tabPageTaming) + activeStats[s] = (Values.V.species[speciesSelector1.speciesIndex].stats[s].BaseValue > 0) && (s != 2 || !Values.V.species[speciesSelector1.speciesIndex].doesNotUseOxygen || oxygenForAll); + statIOs[s].Enabled = activeStats[s]; + statIOs[s].Title = Utils.statName(s, false, isglowSpecies); + testingIOs[s].Title = Utils.statName(s, false, isglowSpecies); + if (isglowSpecies && ((s == 1 || s == 2 || s == 5))) { - tamingControl1.setSpeciesIndex(comboBoxSpeciesGlobal.SelectedIndex); - } - else if (tabControlMain.SelectedTab == tabPageRaising) - { - raisingControl1.updateRaisingData(comboBoxSpeciesGlobal.SelectedIndex); + statIOs[s].DomLevelZero = false; } } + if (tabControlMain.SelectedTab == tabPageExtractor) + { + clearAll(); + } + else if (tabControlMain.SelectedTab == tabPageStatTesting) + { + updateAllTesterValues(); + statPotentials1.speciesIndex = speciesSelector1.speciesIndex; + statPotentials1.setLevels(testingIOs.Select(s => s.LevelWild).ToArray(), true); + setTesterInfoInputCreature(); + } + else if (tabControlMain.SelectedTab == tabPageTaming) + { + tamingControl1.setSpeciesIndex(speciesSelector1.speciesIndex); + } + else if (tabControlMain.SelectedTab == tabPageRaising) + { + raisingControl1.updateRaisingData(speciesSelector1.speciesIndex); + } + hiddenLevelsCreatureTester = 0; } @@ -1008,10 +1039,10 @@ private void CopyExtractionToClipboard() { bool header = true; bool table = (MessageBox.Show("Results can be copied as own table or as a long table-row. Should it be copied as own table?", "Copy as own table?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes); - if (extractor.validResults && speciesIndex >= 0) + if (extractor.validResults && speciesSelector1.speciesIndex >= 0) { List tsv = new List(); - string rowLevel = Values.V.speciesNames[speciesIndex] + "\t\t", rowValues = ""; + string rowLevel = Values.V.speciesNames[speciesSelector1.speciesIndex] + "\t\t", rowValues = ""; // if taming effectiveness is unique, display it, too string effString = ""; double eff = extractor.uniqueTE(); @@ -1024,7 +1055,7 @@ private void CopyExtractionToClipboard() { if (table) { - tsv.Add(Values.V.speciesNames[speciesIndex] + "\tLevel " + numericUpDownLevel.Value.ToString() + effString); + tsv.Add(Values.V.speciesNames[speciesSelector1.speciesIndex] + "\tLevel " + numericUpDownLevel.Value.ToString() + effString); tsv.Add("Stat\tWildLevel\tDomLevel\tBreedingValue"); } else { tsv.Add("Species\tName\tSex\tHP-Level\tSt-Level\tOx-Level\tFo-Level\tWe-Level\tDm-Level\tSp-Level\tTo-Level\tHP-Value\tSt-Value\tOx-Value\tFo-Value\tWe-Value\tDm-Value\tSp-Value\tTo-Value"); } @@ -1061,7 +1092,7 @@ private double breedingValue(int s, int r) { if (r >= 0 && r < extractor.results[s].Count) { - return Stats.calculateValue(speciesIndex, s, extractor.results[s][r].levelWild, 0, true, 1, 0); + return Stats.calculateValue(speciesSelector1.speciesIndex, s, extractor.results[s][r].levelWild, 0, true, 1, 0); } } return -1; @@ -1109,7 +1140,7 @@ private void add2Lib(bool fromExtractor = true) if (fromExtractor) { input = creatureInfoInputExtractor; - species = Values.V.speciesNames[speciesIndex]; + species = Values.V.speciesNames[speciesSelector1.speciesIndex]; bred = radioButtonBred.Checked; te = extractor.uniqueTE(); imprinting = extractor.imprintingBonus; @@ -1117,7 +1148,7 @@ private void add2Lib(bool fromExtractor = true) else { input = creatureInfoInputTester; - species = Values.V.speciesNames[speciesIndex]; + species = Values.V.speciesNames[speciesSelector1.speciesIndex]; bred = radioButtonTesterBred.Checked; te = (double)NumericUpDownTestingTE.Value / 100; imprinting = (double)numericUpDownImprintingBonusTester.Value / 100; @@ -1250,7 +1281,7 @@ private void applySettingsToValues() // update enabled stats for (int s = 0; s < 8; s++) { - activeStats[s] = (Values.V.species[speciesIndex].stats[s].BaseValue > 0) && (s != 2 || !Values.V.species[speciesIndex].doesNotUseOxygen || oxygenForAll); + activeStats[s] = (Values.V.species[speciesSelector1.speciesIndex].stats[s].BaseValue > 0) && (s != 2 || !Values.V.species[speciesSelector1.speciesIndex].doesNotUseOxygen || oxygenForAll); statIOs[s].Enabled = activeStats[s]; } } @@ -1526,7 +1557,7 @@ private void updateCreatureListings(int speciesIndex = -1) } createOwnerList(); calculateTopStats(creatures); - updateTreeListSpecies(creatureCollection.creatures); + updateSpeciesLists(creatureCollection.creatures); filterLib(); updateStatusBar(); breedingPlan1.CurrentSpecies = ""; // set to empty so creatures are loaded again if breeding plan is created @@ -1535,9 +1566,9 @@ private void updateCreatureListings(int speciesIndex = -1) } /// - /// This function should be called if the creatureCollection is changed, i.e. after loading a file or adding/removing a creature. It updated the listed species in the treelist. + /// This function should be called if the creatureCollection is changed, i.e. after loading a file or adding/removing a creature. It updated the listed species in the treelist and in the speciesSelector. /// - private void updateTreeListSpecies(List creatures) + private void updateSpeciesLists(List creatures) { string selectedSpecies = ""; if (listBoxSpeciesLib.SelectedIndex >= 0) @@ -1565,6 +1596,7 @@ private void updateTreeListSpecies(List creatures) listBoxSpeciesLib.SelectedIndex = listBoxSpeciesLib.Items.IndexOf(selectedSpecies); breedingPlan1.setSpeciesList(availableSpeciesNames, creatures); + speciesSelector1.setLibrarySpecies(availableSpeciesNames); } private void createOwnerList() @@ -1674,6 +1706,11 @@ private void showCreaturesInListView(List creatures) /// private void updateCreatureValues(Creature cr, bool creatureStatusChanged) { + // if row is selected, save and reselect later + List selectedCreatures = new List(); + foreach (ListViewItem i in listViewLibrary.SelectedItems) + selectedCreatures.Add((Creature)i.Tag); + // data of the selected creature changed, update listview cr.recalculateCreatureValues(creatureCollection.getWildLevelStep()); // if creaturestatus (available/dead) changed, recalculate topstats (dead creatures are not considered there) @@ -1700,6 +1737,25 @@ private void updateCreatureValues(Creature cr, bool creatureStatusChanged) // recreate ownerlist createOwnerList(); setCollectionChanged(true, cr.species); + + // select previous selecteded again + int selectedCount = selectedCreatures.Count; + if (selectedCount > 0) + { + for (int i = 0; i < listViewLibrary.Items.Count; i++) + { + if (selectedCreatures.Contains((Creature)listViewLibrary.Items[i].Tag)) + { + listViewLibrary.Items[i].Focused = true; + listViewLibrary.Items[i].Selected = true; + if (--selectedCount == 0) + { + listViewLibrary.EnsureVisible(i); + break; + } + } + } + } } private ListViewItem createCreatureLVItem(Creature cr, ListViewGroup g) @@ -1793,8 +1849,7 @@ private ListViewItem createCreatureLVItem(Creature cr, ListViewGroup g) lvi.SubItems[10].ForeColor = Color.LightGray; // color for cooldown - Color forecolor, backcolor; - cooldownColors(cr, out forecolor, out backcolor); + cooldownColors(cr, out Color forecolor, out Color backcolor); lvi.SubItems[11].ForeColor = forecolor; lvi.SubItems[11].BackColor = backcolor; @@ -1942,7 +1997,7 @@ private void checkForUpdates(bool silentCheck = false) if (Values.V.loadValues()) { applySettingsToValues(); - updateSpeciesComboboxes(); + speciesSelector1.setSpeciesList(Values.V.speciesNames); MessageBox.Show("Download and update of new creature-stats successful", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); updateStatusBar(); } @@ -1967,8 +2022,7 @@ private void updateParentListInput(CreatureInfoInput input) { // set possible parents bool fromExtractor = input == creatureInfoInputExtractor; - string species = Values.V.speciesNames[speciesIndex]; - Creature creature = new Creature(species, "", "", "", 0, getCurrentWildLevels(fromExtractor), levelStep: creatureCollection.getWildLevelStep()); + Creature creature = new Creature(speciesSelector1.species, "", "", "", 0, getCurrentWildLevels(fromExtractor), levelStep: creatureCollection.getWildLevelStep()); List[] parents = findPossibleParents(creature); input.ParentsSimilarities = findParentSimilarities(parents, creature); input.Parents = parents; @@ -2066,8 +2120,7 @@ private void Form1_FormClosed(object sender, FormClosedEventArgs e) Properties.Settings.Default.weaponDamagesEnabled = tamingControl1.weaponDamagesEnabled; // save last selected species in combobox - if (comboBoxSpeciesGlobal.SelectedIndex >= 0) - Properties.Settings.Default.lastSpecies = comboBoxSpeciesGlobal.SelectedItem.ToString(); + Properties.Settings.Default.lastSpecies = speciesSelector1.LastSpecies; // save settings for next session Properties.Settings.Default.Save(); @@ -2118,19 +2171,24 @@ private void listViewLibrary_SelectedIndexChanged(object sender, EventArgs e) } tagList.Sort(); - lbLibrarySelectionInfo.Text = cnt.ToString() + " creatures selected, " + setMessageLabelText(cnt.ToString() + " creatures selected, " + selCrs.Count(cr => cr.gender == Sex.Female).ToString() + " females, " + selCrs.Count(cr => cr.gender == Sex.Male).ToString() + " males\n" + "level-range: " + selCrs.Min(cr => cr.level).ToString() + " - " + selCrs.Max(cr => cr.level).ToString() - + "\nTags: " + String.Join(", ", tagList); + + "\nTags: " + String.Join(", ", tagList)); } else { - lbLibrarySelectionInfo.Text = ""; + setMessageLabelText(); creatureBoxListView.Clear(); } } + private void setMessageLabelText(string text = "") + { + lbLibrarySelectionInfo.Text = text; + } + private void checkBoxShowDead_CheckedChanged(object sender, EventArgs e) { setLibraryFilter("Dead", checkBoxShowDead.Checked); @@ -2486,8 +2544,7 @@ private void calculateTopStats(List creatures) } else if (c.levelsWild[s] > bestStat[s]) { - bestCreatures[s] = new List(); - bestCreatures[s].Add(c); + bestCreatures[s] = new List() { c }; bestStat[s] = c.levelsWild[s]; } } @@ -2802,7 +2859,7 @@ private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) toolStripButtonClear.Visible = (tabControlMain.SelectedTab == tabPageExtractor || tabControlMain.SelectedTab == tabPageStatTesting); forARKChatToolStripMenuItem.Visible = (tabControlMain.SelectedTab == tabPageLibrary); //creatureToolStripMenuItem.Enabled = (tabControlMain.SelectedTab == tabPageLibrary); - lbLibrarySelectionInfo.Visible = (tabControlMain.SelectedTab == tabPageLibrary); + setMessageLabelText(); copyCreatureToolStripMenuItem.Visible = (tabControlMain.SelectedTab == tabPageLibrary); toolStripButtonAddNote.Visible = tabControlMain.SelectedTab == tabPageNotes; toolStripButtonRemoveNote.Visible = tabControlMain.SelectedTab == tabPageNotes; @@ -2812,7 +2869,7 @@ private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) if (tabControlMain.SelectedTab == tabPageStatTesting) { updateAllTesterValues(); - statPotentials1.speciesIndex = speciesIndex; + statPotentials1.speciesIndex = speciesSelector1.speciesIndex; statPotentials1.setLevels(testingIOs.Select(s => s.LevelWild).ToArray(), true); } else if (tabControlMain.SelectedTab == tabPageLibrary) @@ -2837,20 +2894,20 @@ private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) } else if (tabControlMain.SelectedTab == tabPageTaming) { - tamingControl1.setSpeciesIndex(comboBoxSpeciesGlobal.SelectedIndex); + tamingControl1.setSpeciesIndex(speciesSelector1.speciesIndex); } else if (tabControlMain.SelectedTab == tabPageBreedingPlan) { - if (breedingPlan1.CurrentSpecies == comboBoxSpeciesGlobal.SelectedItem.ToString()) + if (breedingPlan1.CurrentSpecies == speciesSelector1.species) breedingPlan1.updateIfNeeded(); else { - breedingPlan1.setSpecies(comboBoxSpeciesGlobal.SelectedItem.ToString()); + breedingPlan1.setSpecies(speciesSelector1.species); } } else if (tabControlMain.SelectedTab == tabPageRaising) { - raisingControl1.updateRaisingData(speciesIndex); + raisingControl1.updateRaisingData(speciesSelector1.speciesIndex); } } @@ -2904,7 +2961,7 @@ private void editCreatureInTester(Creature c, bool virtualCreature = false) { if (c != null) { - comboBoxSpeciesGlobal.SelectedIndex = Values.V.speciesNames.IndexOf(c.species); + speciesSelector1.setSpecies(c.species); NumericUpDownTestingTE.Value = (c.tamingEff >= 0 ? (decimal)c.tamingEff * 100 : 0); numericUpDownImprintingBonusTester.Value = (decimal)c.imprintingBonus * 100; if (c.isBred) @@ -2934,7 +2991,7 @@ private void extractBaby(Creature mother, Creature father) { if (mother != null && father != null) { - comboBoxSpeciesGlobal.SelectedIndex = Values.V.speciesNames.IndexOf(mother.species); + speciesSelector1.setSpecies(mother.species); radioButtonBred.Checked = true; numericUpDownImprintingBonusTester.Value = 0; @@ -2969,16 +3026,16 @@ private void numericUpDownImprintingBonusTester_ValueChanged(object sender, Even { updateAllTesterValues(); // calculate number of imprintings - if (Values.V.species[speciesIndex].breeding != null && Values.V.species[speciesIndex].breeding.maturationTimeAdjusted > 0) - labelImprintedCount.Text = "(" + Math.Round((double)numericUpDownImprintingBonusTester.Value / (100 * Utils.imprintingGainPerCuddle(Values.V.species[speciesIndex].breeding.maturationTimeAdjusted, Values.V.babyCuddleIntervalMultiplier)), 2) + "×)"; + if (Values.V.species[speciesSelector1.speciesIndex].breeding != null && Values.V.species[speciesSelector1.speciesIndex].breeding.maturationTimeAdjusted > 0) + labelImprintedCount.Text = "(" + Math.Round((double)numericUpDownImprintingBonusTester.Value / (100 * Utils.imprintingGainPerCuddle(Values.V.species[speciesSelector1.speciesIndex].breeding.maturationTimeAdjusted, Values.V.babyCuddleIntervalMultiplier)), 2) + "×)"; else labelImprintedCount.Text = ""; } private void numericUpDownImprintingBonusExtractor_ValueChanged(object sender, EventArgs e) { // calculate number of imprintings - if (Values.V.species[speciesIndex].breeding != null && Values.V.species[speciesIndex].breeding.maturationTimeAdjusted > 0) - labelImprintingCuddleCountExtractor.Text = "(" + Math.Round((double)numericUpDownImprintingBonusExtractor.Value / (100 * Utils.imprintingGainPerCuddle(Values.V.species[speciesIndex].breeding.maturationTimeAdjusted, Values.V.babyCuddleIntervalMultiplier))) + "×)"; + if (Values.V.species[speciesSelector1.speciesIndex].breeding != null && Values.V.species[speciesSelector1.speciesIndex].breeding.maturationTimeAdjusted > 0) + labelImprintingCuddleCountExtractor.Text = "(" + Math.Round((double)numericUpDownImprintingBonusExtractor.Value / (100 * Utils.imprintingGainPerCuddle(Values.V.species[speciesSelector1.speciesIndex].breeding.maturationTimeAdjusted, Values.V.babyCuddleIntervalMultiplier))) + "×)"; else labelImprintingCuddleCountExtractor.Text = ""; } @@ -2998,13 +3055,13 @@ private void checkBoxQuickWildCheck_CheckedChanged(object sender, EventArgs e) for (int s = 0; s < 8; s++) { - int lvlWild = (int)Math.Round((statIOs[s].Input - Values.V.species[speciesIndex].stats[s].BaseValue) / (Values.V.species[speciesIndex].stats[s].BaseValue * Values.V.species[speciesIndex].stats[s].IncPerWildLevel)); + int lvlWild = (int)Math.Round((statIOs[s].Input - Values.V.species[speciesSelector1.speciesIndex].stats[s].BaseValue) / (Values.V.species[speciesSelector1.speciesIndex].stats[s].BaseValue * Values.V.species[speciesSelector1.speciesIndex].stats[s].IncPerWildLevel)); statIOs[s].LevelWild = (lvlWild < 0 ? 0 : lvlWild); statIOs[s].LevelDom = 0; } tamingControl1.setLevel(statIOs[7].LevelWild + 1, false); - tamingControl1.setSpeciesIndex(comboBoxSpeciesGlobal.SelectedIndex); + tamingControl1.setSpeciesIndex(speciesSelector1.speciesIndex); labelTamingInfo.Text = tamingControl1.quickTamingInfos; } toolStripButtonExtract.Enabled = enabled; @@ -3056,8 +3113,8 @@ private void testingStatIOValueUpdate(StatIO sIo) private void testingStatIOsRecalculateValue(StatIO sIo) { - sIo.BreedingValue = Stats.calculateValue(speciesIndex, sIo.statIndex, sIo.LevelWild, 0, true, 1, 0); - sIo.Input = Stats.calculateValue(speciesIndex, sIo.statIndex, sIo.LevelWild, sIo.LevelDom, (radioButtonTesterTamed.Checked || radioButtonTesterBred.Checked), (radioButtonTesterBred.Checked ? 1 : (double)NumericUpDownTestingTE.Value / 100), (radioButtonTesterBred.Checked ? (double)numericUpDownImprintingBonusTester.Value / 100 : 0)); + sIo.BreedingValue = Stats.calculateValue(speciesSelector1.speciesIndex, sIo.statIndex, sIo.LevelWild, 0, true, 1, 0); + sIo.Input = Stats.calculateValue(speciesSelector1.speciesIndex, sIo.statIndex, sIo.LevelWild, sIo.LevelDom, (radioButtonTesterTamed.Checked || radioButtonTesterBred.Checked), (radioButtonTesterBred.Checked ? 1 : (double)NumericUpDownTestingTE.Value / 100), (radioButtonTesterBred.Checked ? (double)numericUpDownImprintingBonusTester.Value / 100 : 0)); } private void onlinehelpToolStripMenuItem_Click(object sender, EventArgs e) @@ -3165,7 +3222,7 @@ private void exportSelectedCreatureToClipboard(bool breeding = true, bool ARKml if (fromExtractor) { input = creatureInfoInputExtractor; - species = Values.V.speciesNames[speciesIndex]; + species = speciesSelector1.species; bred = radioButtonBred.Checked; te = extractor.uniqueTE(); imprinting = extractor.imprintingBonus; @@ -3173,7 +3230,7 @@ private void exportSelectedCreatureToClipboard(bool breeding = true, bool ARKml else { input = creatureInfoInputTester; - species = Values.V.speciesNames[speciesIndex]; + species = speciesSelector1.species; bred = radioButtonTesterBred.Checked; te = (double)NumericUpDownTestingTE.Value / 100; imprinting = (double)numericUpDownImprintingBonusTester.Value / 100; @@ -3314,8 +3371,7 @@ private void removeCooldownGrowingToolStripMenuItem_Click(object sender, EventAr i.SubItems[10].Text = "-"; // color for cooldown - Color forecolor, backcolor; - cooldownColors(c, out forecolor, out backcolor); + cooldownColors(c, out Color forecolor, out Color backcolor); i.SubItems[10].ForeColor = forecolor; i.SubItems[10].BackColor = backcolor; } @@ -3449,7 +3505,7 @@ private void showBestBreedingPartner(Creature c) { breedingPlan1.breedingPlanNeedsUpdate = true; } - comboBoxSpeciesGlobal.SelectedIndex = Values.V.speciesNames.IndexOf(c.species); + speciesSelector1.setSpecies(c.species); breedingPlan1.determineBestBreeding(c); tabControlMain.SelectedTab = tabPageBreedingPlan; } @@ -3584,13 +3640,13 @@ private void statIOQuickWildLevelCheck(StatIO sIO) { if (checkBoxQuickWildCheck.Checked) { - int lvlWild = (int)Math.Round((sIO.Input - Values.V.species[speciesIndex].stats[sIO.statIndex].BaseValue) / (Values.V.species[speciesIndex].stats[sIO.statIndex].BaseValue * Values.V.species[speciesIndex].stats[sIO.statIndex].IncPerWildLevel)); + int lvlWild = (int)Math.Round((sIO.Input - Values.V.species[speciesSelector1.speciesIndex].stats[sIO.statIndex].BaseValue) / (Values.V.species[speciesSelector1.speciesIndex].stats[sIO.statIndex].BaseValue * Values.V.species[speciesSelector1.speciesIndex].stats[sIO.statIndex].IncPerWildLevel)); sIO.LevelWild = (lvlWild < 0 ? 0 : lvlWild); sIO.LevelDom = 0; if (sIO.statIndex == 7) { tamingControl1.setLevel(statIOs[7].LevelWild + 1, false); - tamingControl1.setSpeciesIndex(comboBoxSpeciesGlobal.SelectedIndex); + tamingControl1.setSpeciesIndex(speciesSelector1.speciesIndex); labelTamingInfo.Text = tamingControl1.quickTamingInfos; } } @@ -3656,7 +3712,7 @@ private void setCreatureValuesToExtractor(Creature c, bool onlyWild = false) // copy values over to extractor for (int s = 0; s < 8; s++) statIOs[s].Input = (onlyWild ? Stats.calculateValue(sI, s, c.levelsWild[s], 0, true, c.tamingEff, c.imprintingBonus) : c.valuesDom[s]); - comboBoxSpeciesGlobal.SelectedIndex = sI; + speciesSelector1.setSpeciesIndex(sI); if (c.isBred) radioButtonBred.Checked = true; else if (c.tamingEff >= 0) radioButtonTamed.Checked = true; @@ -3692,10 +3748,7 @@ public void doOCR(string imageFilePath = "", bool manuallyTriggered = true) { checkBoxQuickWildCheck.Checked = false; - string debugText; - string dinoName, ownerName, tribeName, species; - Sex sex; - float[] OCRvalues = ArkOCR.OCR.doOCR(out debugText, out dinoName, out species, out ownerName, out tribeName, out sex, imageFilePath, manuallyTriggered); + float[] OCRvalues = ArkOCR.OCR.doOCR(out string debugText, out string dinoName, out string species, out string ownerName, out string tribeName, out Sex sex, imageFilePath, manuallyTriggered); ocrControl1.output.Text = debugText; if (OCRvalues.Length <= 1) @@ -3726,7 +3779,7 @@ public void doOCR(string imageFilePath = "", bool manuallyTriggered = true) } else { radioButtonTamed.Checked = true; } - // fixing ocr species names + // fixing ocr species names. TODO: global name-fixing? switch (species) { case "DireBear": species = "Dire Bear"; break; @@ -3742,8 +3795,8 @@ public void doOCR(string imageFilePath = "", bool manuallyTriggered = true) if (possibleDinos.Count == 1) { - if (possibleDinos[0] >= 0 && possibleDinos[0] < comboBoxSpeciesGlobal.Items.Count) - comboBoxSpeciesGlobal.SelectedIndex = possibleDinos[0]; + if (possibleDinos[0] >= 0 && possibleDinos[0] < Values.V.speciesNames.Count) + speciesSelector1.setSpeciesIndex(possibleDinos[0]); extractLevels(true); // only one possible dino, use that one } else @@ -3763,7 +3816,7 @@ public void doOCR(string imageFilePath = "", bool manuallyTriggered = true) if (manuallyTriggered && sameValues) { int newindex = (possibleDinos.IndexOf(lastOCRSpecies) + 1) % possibleDinos.Count; - comboBoxSpeciesGlobal.SelectedIndex = possibleDinos[newindex]; + speciesSelector1.setSpeciesIndex(possibleDinos[newindex]); lastOCRSpecies = possibleDinos[newindex]; lastOCRValues = OCRvalues; extractLevels(true); @@ -3775,7 +3828,7 @@ public void doOCR(string imageFilePath = "", bool manuallyTriggered = true) { // if the last OCR'ed values are the same as this one, the user may not be happy with the dino species selection and want another one // so we'll cycle to the next one, but only if the OCR is manually triggered, on autotrigger (ie, overlay), don't change - comboBoxSpeciesGlobal.SelectedIndex = possibleDinos[dinooption]; + speciesSelector1.setSpeciesIndex(possibleDinos[dinooption]); lastOCRSpecies = possibleDinos[dinooption]; lastOCRValues = OCRvalues; foundPossiblyGood = extractLevels(); @@ -3826,7 +3879,7 @@ private List determineSpeciesFromStats(float[] stats, string species) if (stats.Length > 8 && stats[8] > 0) { // creature is imprinted, the following algorithm cannot handle this yet. use current selected species - possibleDinos.Add(comboBoxSpeciesGlobal.SelectedIndex); + possibleDinos.Add(speciesSelector1.speciesIndex); return possibleDinos; } @@ -3837,7 +3890,7 @@ private List determineSpeciesFromStats(float[] stats, string species) for (int i = 0; i < Values.V.species.Count; i++) { - if (i == comboBoxSpeciesGlobal.SelectedIndex) continue; // the currently selected species is ignored here and set as top priority at the end + if (i == speciesSelector1.speciesIndex) continue; // the currently selected species is ignored here and set as top priority at the end possible = true; // check that all stats are possible (no negative levels) @@ -3905,8 +3958,8 @@ private List determineSpeciesFromStats(float[] stats, string species) possibleDinos.Add(i); } - if (comboBoxSpeciesGlobal.SelectedIndex >= 0) - possibleDinos.Insert(0, comboBoxSpeciesGlobal.SelectedIndex); // adding the currently selected creature in the combobox as first priority. the user might already have that selected + if (speciesSelector1.speciesIndex >= 0) + possibleDinos.Insert(0, speciesSelector1.speciesIndex); // adding the currently selected creature in the combobox as first priority. the user might already have that selected return possibleDinos; } @@ -3927,12 +3980,13 @@ private void chkbToggleOverlay_CheckedChanged(object sender, EventArgs e) if (p.Length == 0) { - MessageBox.Show("Process for capturing screenshots and for overlay not found. Start the game or change the process in the settings.", "Game started?", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show("Process for capturing screenshots and for overlay (e.g. the game, or a stream of the game) not found. Start the game or change the process in the settings.", "Game started?", MessageBoxButtons.OK, MessageBoxIcon.Error); chkbToggleOverlay.Checked = false; return; } IntPtr mwhd = p[0].MainWindowHandle; + var tttt = Screen.AllScreens; Screen scr = Screen.FromHandle(mwhd); overlay.Location = scr.WorkingArea.Location; } @@ -4045,19 +4099,19 @@ private void showStatsInOverlay() } wildLevels[9]++; // startlevel - string extraText = Values.V.speciesNames[speciesIndex]; + string extraText = Values.V.speciesNames[speciesSelector1.speciesIndex]; if (!extractor.postTamed) { - string foodName = Values.V.species[speciesIndex].taming.eats[0]; + string foodName = Values.V.species[speciesSelector1.speciesIndex].taming.eats[0]; double tamingFoodRateMultiplier = cbEventMultipliers.Checked ? creatureCollection.tamingFoodRateMultiplierEvent : creatureCollection.tamingFoodRateMultiplier; - int foodNeeded = Taming.foodAmountNeeded(speciesIndex, (int)wildLevels[9], Values.V.tamingSpeedMultiplier, foodName, Values.V.species[speciesIndex].taming.nonViolent); + int foodNeeded = Taming.foodAmountNeeded(speciesSelector1.speciesIndex, (int)wildLevels[9], Values.V.tamingSpeedMultiplier, foodName, Values.V.species[speciesSelector1.speciesIndex].taming.nonViolent); List foodAmountUsed; bool enoughFood; double te, hunger; TimeSpan duration; int narcotics, narcoBerries, bioToxines, bonusLevel; - Taming.tamingTimes(speciesIndex, (int)wildLevels[9], Values.V.tamingSpeedMultiplier, tamingFoodRateMultiplier, foodName, foodNeeded, out foodAmountUsed, out duration, out narcoBerries, out narcotics, out bioToxines, out te, out hunger, out bonusLevel, out enoughFood); - string foodNameDisplay = (foodName == "Kibble" ? Values.V.species[speciesIndex].taming.favoriteKibble + " Egg Kibble" : foodName); + Taming.tamingTimes(speciesSelector1.speciesIndex, (int)wildLevels[9], Values.V.tamingSpeedMultiplier, tamingFoodRateMultiplier, foodName, foodNeeded, out foodAmountUsed, out duration, out narcoBerries, out narcotics, out bioToxines, out te, out hunger, out bonusLevel, out enoughFood); + string foodNameDisplay = (foodName == "Kibble" ? Values.V.species[speciesSelector1.speciesIndex].taming.favoriteKibble + " Egg Kibble" : foodName); extraText += "\nTaming takes " + duration.ToString(@"hh\:mm\:ss") + " with " + foodNeeded + "×" + foodNameDisplay + "\n" + narcoBerries + " Narcoberries or " + narcotics + " Narcotics or " + bioToxines + " Bio Toxines are needed" + "\nTaming Effectiveness: " + Math.Round(100 * te, 1).ToString() + " % (+" + bonusLevel.ToString() + " lvl)"; @@ -4067,9 +4121,9 @@ private void showStatsInOverlay() overlay.setExtraText(extraText); // currently disabled, as current weight is not shown. TODO remove if there's no way to tell maturating-progress - //if (Values.V.species[speciesIndex].breeding != null && lastOCRValues != null && lastOCRValues.Length > 10 && lastOCRValues[10] > 0) + //if (Values.V.species[speciesSelector1.speciesIndex].breeding != null && lastOCRValues != null && lastOCRValues.Length > 10 && lastOCRValues[10] > 0) //{ - // int maxTime = (int)Values.V.species[speciesIndex].breeding.maturationTimeAdjusted; + // int maxTime = (int)Values.V.species[speciesSelector1.speciesIndex].breeding.maturationTimeAdjusted; // if (maxTime > 0 && lastOCRValues[4] > 0) // overlay.setBreedingProgressValues((float)Math.Round(lastOCRValues[10] / lastOCRValues[4], 1), maxTime); // current weight // else @@ -4137,7 +4191,7 @@ private void toolStripButtonAddTribe_Click(object sender, EventArgs e) private void button2TamingCalc_Click(object sender, EventArgs e) { - tamingControl1.setSpeciesIndex(comboBoxSpeciesGlobal.SelectedIndex); + tamingControl1.setSpeciesIndex(speciesSelector1.speciesIndex); if (checkBoxQuickWildCheck.Checked) tamingControl1.setLevel(statIOs[7].LevelWild + 1); else @@ -4150,9 +4204,9 @@ private void labelImprintedCount_MouseClick(object sender, MouseEventArgs e) if (e.Button == MouseButtons.Left) { // set imprinting-count to closes integer - if (Values.V.species[speciesIndex].breeding != null && Values.V.species[speciesIndex].breeding.maturationTimeAdjusted > 0) + if (Values.V.species[speciesSelector1.speciesIndex].breeding != null && Values.V.species[speciesSelector1.speciesIndex].breeding.maturationTimeAdjusted > 0) { - double imprintingGainPerCuddle = Utils.imprintingGainPerCuddle(Values.V.species[speciesIndex].breeding.maturationTimeAdjusted, Values.V.babyCuddleIntervalMultiplier); + double imprintingGainPerCuddle = Utils.imprintingGainPerCuddle(Values.V.species[speciesSelector1.speciesIndex].breeding.maturationTimeAdjusted, Values.V.babyCuddleIntervalMultiplier); int cuddleCount = (int)Math.Round((double)numericUpDownImprintingBonusTester.Value / (100 * imprintingGainPerCuddle)); double imprintingBonus; do @@ -4166,7 +4220,7 @@ private void labelImprintedCount_MouseClick(object sender, MouseEventArgs e) else if (e.Button == MouseButtons.Right) { // set imprinting value so the set levels in the tester yield the value in the extractor - double imprintingBonus = (statIOs[7].Input / Stats.calculateValue(speciesIndex, 7, testingIOs[7].LevelWild, 0, true, 1, 0) - 1) / (0.2 * creatureCollection.imprintingMultiplier); + double imprintingBonus = (statIOs[7].Input / Stats.calculateValue(speciesSelector1.speciesIndex, 7, testingIOs[7].LevelWild, 0, true, 1, 0) - 1) / (0.2 * creatureCollection.imprintingMultiplier); if (imprintingBonus < 0) imprintingBonus = 0; if (!creatureCollection.allowMoreThanHundredImprinting && imprintingBonus > 1) imprintingBonus = 1; numericUpDownImprintingBonusTester.Value = 100 * (decimal)imprintingBonus; @@ -4178,7 +4232,7 @@ private bool loadAdditionalValues(string file, bool showResult = false) if (Values.V.loadAdditionalValues(file, showResult)) { applySettingsToValues(); - updateSpeciesComboboxes(); + speciesSelector1.setSpeciesList(Values.V.speciesNames); creatureCollection.additionalValues = Path.GetFileName(file); updateStatusBar(); return true; @@ -4289,7 +4343,7 @@ private void toolStripCBTempCreatures_SelectedIndexChanged(object sender, EventA species.CreatureValues cv = creatureCollection.creaturesValues[toolStripCBTempCreatures.SelectedIndex]; for (int s = 0; s < 8; s++) statIOs[s].Input = cv.statValues[s]; - comboBoxSpeciesGlobal.SelectedIndex = Values.V.speciesNames.IndexOf(cv.species); + speciesSelector1.setSpecies(cv.species); creatureInfoInputExtractor.CreatureName = cv.name; creatureInfoInputExtractor.CreatureOwner = cv.owner; creatureInfoInputExtractor.CreatureTribe = cv.tribe; @@ -4321,7 +4375,7 @@ private void toolStripButtonSaveCreatureValuesTemp_Click(object sender, EventArg species.CreatureValues cv = new species.CreatureValues(); for (int s = 0; s < 8; s++) cv.statValues[s] = statIOs[s].Input; - cv.species = comboBoxSpeciesGlobal.SelectedItem.ToString(); + cv.species = speciesSelector1.species; cv.name = creatureInfoInputExtractor.CreatureName; cv.owner = creatureInfoInputExtractor.CreatureOwner; cv.tribe = creatureInfoInputExtractor.CreatureTribe; diff --git a/ARKBreedingStats/Importer.cs b/ARKBreedingStats/Importer.cs index f89cde78..5ec9e76d 100644 --- a/ARKBreedingStats/Importer.cs +++ b/ARKBreedingStats/Importer.cs @@ -22,7 +22,9 @@ public Importer(string classesJson) BasePath = Path.GetDirectoryName(ClassesJson); nameReplacing = new Dictionary(){ - { "Paraceratherium","Paracer" } + { "Paraceratherium", "Paracer" }, + { "Ichthyosaurus", "Ichthy" }, + { "Bigfoot_Character_BP_Aberrant_C", "Aberrant Gigantopithecus" } // TODO more general fix? }; } @@ -148,7 +150,13 @@ private string ConvertSpecies(string species) private static int[] ConvertColors(Colors colors) { - return new int[] { colors.Color0, colors.Color1, colors.Color2, colors.Color3, colors.Color4, colors.Color5 }; + return new int[] { colorModulo(colors.Color0), colorModulo(colors.Color1), colorModulo(colors.Color2), colorModulo(colors.Color3), colorModulo(colors.Color4), colorModulo(colors.Color5) }; + } + + private static int colorModulo(int color) + { + // color ids ingame can be stored as higher numbers, it appears the colors just repeat + return ((color - 1) % 56) + 1; } public static Guid ConvertIdToGuid(long id) diff --git a/ARKBreedingStats/PedigreeCreature.cs b/ARKBreedingStats/PedigreeCreature.cs index 77bd87e6..672854f1 100644 --- a/ARKBreedingStats/PedigreeCreature.cs +++ b/ARKBreedingStats/PedigreeCreature.cs @@ -168,7 +168,7 @@ public bool highlight private void PedigreeCreature_MouseClick(object sender, MouseEventArgs e) { if (CreatureClicked != null && e.Button == MouseButtons.Left) - CreatureClicked(this.creature, comboId, e); + CreatureClicked(creature, comboId, e); } private void element_MouseClick(object sender, MouseEventArgs e) diff --git a/ARKBreedingStats/Properties/AssemblyInfo.cs b/ARKBreedingStats/Properties/AssemblyInfo.cs index 65540ba6..f1a13a5c 100644 --- a/ARKBreedingStats/Properties/AssemblyInfo.cs +++ b/ARKBreedingStats/Properties/AssemblyInfo.cs @@ -33,4 +33,4 @@ // übernehmen, indem Sie "*" eingeben: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("0.25.3")] +[assembly: AssemblyFileVersion("0.26.0")] diff --git a/ARKBreedingStats/Properties/Settings.Designer.cs b/ARKBreedingStats/Properties/Settings.Designer.cs index 70773e28..0cb415ee 100644 --- a/ARKBreedingStats/Properties/Settings.Designer.cs +++ b/ARKBreedingStats/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace ARKBreedingStats.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.1.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -190,10 +190,9 @@ public bool celsius { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string lastSpecies { + public string[] lastSpecies { get { - return ((string)(this["lastSpecies"])); + return ((string[])(this["lastSpecies"])); } set { this["lastSpecies"] = value; diff --git a/ARKBreedingStats/Properties/Settings.settings b/ARKBreedingStats/Properties/Settings.settings index a804daf5..e9f6540e 100644 --- a/ARKBreedingStats/Properties/Settings.settings +++ b/ARKBreedingStats/Properties/Settings.settings @@ -44,7 +44,7 @@ True - + diff --git a/ARKBreedingStats/SpeciesSelector.Designer.cs b/ARKBreedingStats/SpeciesSelector.Designer.cs new file mode 100644 index 00000000..e0a1aad1 --- /dev/null +++ b/ARKBreedingStats/SpeciesSelector.Designer.cs @@ -0,0 +1,204 @@ +namespace ARKBreedingStats +{ + partial class SpeciesSelector + { + /// + /// Erforderliche Designervariable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Verwendete Ressourcen bereinigen. + /// + /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Vom Komponenten-Designer generierter Code + + /// + /// Erforderliche Methode für die Designerunterstützung. + /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. + /// + private void InitializeComponent() + { + this.lvLastSpecies = new System.Windows.Forms.ListView(); + this.lbSpecies = new System.Windows.Forms.ListBox(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.label1 = new System.Windows.Forms.Label(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.label2 = new System.Windows.Forms.Label(); + this.lvSpeciesInLibrary = new System.Windows.Forms.ListView(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.SuspendLayout(); + // + // lvLastSpecies + // + this.lvLastSpecies.Dock = System.Windows.Forms.DockStyle.Fill; + this.lvLastSpecies.Location = new System.Drawing.Point(3, 23); + this.lvLastSpecies.Name = "lvLastSpecies"; + this.lvLastSpecies.Size = new System.Drawing.Size(638, 209); + this.lvLastSpecies.TabIndex = 1; + this.lvLastSpecies.UseCompatibleStateImageBehavior = false; + this.lvLastSpecies.SelectedIndexChanged += new System.EventHandler(this.lvOftenUsed_SelectedIndexChanged); + // + // lbSpecies + // + this.lbSpecies.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbSpecies.FormattingEnabled = true; + this.lbSpecies.Location = new System.Drawing.Point(0, 0); + this.lbSpecies.Name = "lbSpecies"; + this.lbSpecies.Size = new System.Drawing.Size(208, 473); + this.lbSpecies.TabIndex = 3; + this.lbSpecies.SelectedIndexChanged += new System.EventHandler(this.lbSpecies_SelectedIndexChanged); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tableLayoutPanel2); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.tableLayoutPanel3); + this.splitContainer1.Size = new System.Drawing.Size(644, 473); + this.splitContainer1.SplitterDistance = 235; + this.splitContainer1.TabIndex = 7; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel2.Controls.Add(this.label1, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.lvLastSpecies, 0, 1); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 2; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(644, 235); + this.tableLayoutPanel2.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(3, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(78, 16); + this.label1.TabIndex = 5; + this.label1.Text = "Last Used"; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 1; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel3.Controls.Add(this.label2, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.lvSpeciesInLibrary, 0, 1); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 2; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(644, 234); + this.tableLayoutPanel3.TabIndex = 1; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(3, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(72, 16); + this.label2.TabIndex = 6; + this.label2.Text = "In Library"; + // + // lvSpeciesInLibrary + // + this.lvSpeciesInLibrary.Dock = System.Windows.Forms.DockStyle.Fill; + this.lvSpeciesInLibrary.Location = new System.Drawing.Point(3, 23); + this.lvSpeciesInLibrary.Name = "lvSpeciesInLibrary"; + this.lvSpeciesInLibrary.Size = new System.Drawing.Size(638, 208); + this.lvSpeciesInLibrary.TabIndex = 4; + this.lvSpeciesInLibrary.UseCompatibleStateImageBehavior = false; + this.lvSpeciesInLibrary.View = System.Windows.Forms.View.Tile; + this.lvSpeciesInLibrary.SelectedIndexChanged += new System.EventHandler(this.lvSpeciesInLibrary_SelectedIndexChanged); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.lbSpecies); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.splitContainer1); + this.splitContainer2.Size = new System.Drawing.Size(856, 473); + this.splitContainer2.SplitterDistance = 208; + this.splitContainer2.TabIndex = 4; + // + // SpeciesSelector + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.splitContainer2); + this.Name = "SpeciesSelector"; + this.Size = new System.Drawing.Size(856, 473); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.ListView lvLastSpecies; + private System.Windows.Forms.ListBox lbSpecies; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ListView lvSpeciesInLibrary; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.SplitContainer splitContainer2; + } +} diff --git a/ARKBreedingStats/SpeciesSelector.cs b/ARKBreedingStats/SpeciesSelector.cs new file mode 100644 index 00000000..7f02f665 --- /dev/null +++ b/ARKBreedingStats/SpeciesSelector.cs @@ -0,0 +1,249 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Runtime.Serialization.Json; +using System.Text.RegularExpressions; +using System.IO; + +namespace ARKBreedingStats +{ + public partial class SpeciesSelector : UserControl + { + public delegate void speciesChangedEventHandler(); + public event speciesChangedEventHandler onSpeciesChanged; + public int speciesIndex; + public string species; + private List speciesList; + private Dictionary aliases; + public List speciesWithAliasesList; + public TabPage lastTabPage; + private uiControls.TextBoxSuggest textbox; + private List lastSpecies; + private List iconIndices; + public int keepNrLastSpecies; + + public SpeciesSelector() + { + InitializeComponent(); + speciesList = new List(); + aliases = new Dictionary(); + speciesWithAliasesList = new List(); + lastSpecies = new List(); + iconIndices = new List(); + keepNrLastSpecies = 20; + + // imageList + ImageList lImgList = new ImageList(); + if (Directory.Exists("img")) + { + string[] speciesImageFiles = Directory.GetFiles("img", "*.png", SearchOption.TopDirectoryOnly); + foreach (string icon in speciesImageFiles) + { + int i = icon.IndexOf("_"); + if (i == -1) + { + lImgList.Images.Add(Image.FromFile(icon)); + iconIndices.Add(Path.GetFileNameWithoutExtension(icon)); + } + } + + lImgList.ImageSize = new Size(64, 64); + lvLastSpecies.LargeImageList = lImgList; + } + } + + public void setSpeciesList(List speciesL) + { + speciesList.Clear(); + speciesWithAliasesList.Clear(); + foreach (string s in speciesL) + { + speciesList.Add(s); + speciesWithAliasesList.Add(s); + } + + loadAliases(); + filterList(); + + // autocomplete for species-input + var al = new AutoCompleteStringCollection(); + al.AddRange(speciesWithAliasesList.ToArray()); + textbox.AutoCompleteCustomSource = al; + } + + private void loadAliases() + { + aliases.Clear(); + string fileName = "json/aliases.json"; + if (System.IO.File.Exists(fileName)) + { + string aliasesRaw = System.IO.File.ReadAllText(fileName); + + Regex r = new Regex(@"""([^""]+)"" ?: ?""([^""]+)"""); + MatchCollection matches = r.Matches(aliasesRaw); + foreach (Match match in matches) + { + if (speciesList.IndexOf(match.Groups[1].Value) == -1 + && speciesList.IndexOf(match.Groups[2].Value) != -1 + && !aliases.ContainsKey(match.Groups[1].Value)) + { + aliases.Add(match.Groups[1].Value, match.Groups[2].Value); + speciesWithAliasesList.Add(match.Groups[1].Value); + } + } + } + speciesWithAliasesList.Sort(); + } + + public void setLibrarySpecies(List librarySpeciesList) + { + lvSpeciesInLibrary.Items.Clear(); + foreach (string s in librarySpeciesList) + lvSpeciesInLibrary.Items.Add(s); + } + + public string speciesName(string alias) + { + if (speciesList.IndexOf(alias) != -1) + return alias; + else if (aliases.ContainsKey(alias)) + return aliases[alias]; + else return ""; + } + + public void filterList(string part = "") + { + lbSpecies.BeginUpdate(); + lbSpecies.Items.Clear(); + if (string.IsNullOrWhiteSpace(part)) + { + foreach (string s in speciesWithAliasesList) + lbSpecies.Items.Add(s); + } + else + { + foreach (string s in speciesWithAliasesList) + { + if (s.ToLower().Contains(part.ToLower())) + lbSpecies.Items.Add(s); + } + } + lbSpecies.EndUpdate(); + } + + private void lbSpecies_SelectedIndexChanged(object sender, EventArgs e) + { + if (lbSpecies.SelectedItems.Count > 0) + { + setSpecies(lbSpecies.SelectedItem.ToString()); + } + } + + private void lvOftenUsed_SelectedIndexChanged(object sender, EventArgs e) + { + if (lvLastSpecies.SelectedItems.Count > 0) + setSpecies(lvLastSpecies.SelectedItems[0].Text); + } + + private void lvSpeciesInLibrary_SelectedIndexChanged(object sender, EventArgs e) + { + if (lvSpeciesInLibrary.SelectedItems.Count > 0) + setSpecies(lvSpeciesInLibrary.SelectedItems[0].Text); + } + + public void setSpecies(string species) + { + System.Globalization.TextInfo textInfo = new System.Globalization.CultureInfo("en-US", false).TextInfo; + species = textInfo.ToTitleCase(species.ToLower()); + if (speciesWithAliasesList.Contains(species)) + { + this.species = speciesName(species); + speciesIndex = speciesList.IndexOf(this.species); + + lastSpecies.Remove(species); + if (lastSpecies.Count > keepNrLastSpecies) // only keep keepNrLastSpecies of the last species in this list + lastSpecies.RemoveRange(keepNrLastSpecies, lastSpecies.Count - keepNrLastSpecies); + lastSpecies.Insert(0, species); + updateLastSpecies(); + + onSpeciesChanged?.Invoke(); + } + } + + public void setSpeciesIndex(int sI) + { + if (sI >= 0 && sI < speciesList.Count) + { + setSpecies(speciesList[sI]); + } + } + + public void SetTextBox(uiControls.TextBoxSuggest textbox) + { + this.textbox = textbox; + textbox.TextChanged += Textbox_TextChanged; + } + + private async void Textbox_TextChanged(object sender, EventArgs e) + { + await Task.Delay(200); // give the textbox time to apply the selection for the appended text + filterList(textbox.Text.Substring(0, textbox.SelectionStart)); + } + + private void updateLastSpecies() + { + lvLastSpecies.Items.Clear(); + ListViewItem lvi; + foreach (string s in lastSpecies) + { + lvi = new ListViewItem(s); + int ii = speciesImageIndex(s); + if (ii != -1) + lvi.ImageIndex = ii; + lvLastSpecies.Items.Add(lvi); + } + } + + public string[] LastSpecies + { + set + { + if (value == null) + lastSpecies.Clear(); + else + { + lastSpecies = value.ToList(); + updateLastSpecies(); + } + } + get + { + return lastSpecies.ToArray(); + } + } + + private int speciesImageIndex(string species = "") + { + if (String.IsNullOrWhiteSpace(species)) + species = this.species; + species = speciesName(species); + if (species.IndexOf("Aberrant ") != -1) + species = species.Substring(9); + return iconIndices.IndexOf(species); + } + + public Image speciesImage(string species = "") + { + int ii = speciesImageIndex(species); + if (ii != -1 && ii < lvLastSpecies.LargeImageList.Images.Count) + return lvLastSpecies.LargeImageList.Images[ii]; + return null; + } + } +} diff --git a/ARKBreedingStats/SpeciesSelector.resx b/ARKBreedingStats/SpeciesSelector.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/ARKBreedingStats/SpeciesSelector.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ARKBreedingStats/SpeechRecognition.cs b/ARKBreedingStats/SpeechRecognition.cs index bf2fb850..a3c578c9 100644 --- a/ARKBreedingStats/SpeechRecognition.cs +++ b/ARKBreedingStats/SpeechRecognition.cs @@ -151,5 +151,19 @@ public enum Commands TamingInfo, Extract } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + recognizer.Dispose(); + } + } } } diff --git a/ARKBreedingStats/json/aliases.json b/ARKBreedingStats/json/aliases.json new file mode 100644 index 00000000..e2772ce9 --- /dev/null +++ b/ARKBreedingStats/json/aliases.json @@ -0,0 +1,168 @@ +{ +"Achatina Aberration":"Aberrant Achatina" +"Allo":"Allosaurus" +"Allosaur":"Allosaurus" +"Angler":"Anglerfish" +"Anglerfish Aberration":"Aberrant Anglerfish" +"Anky":"Ankylosaurus" +"Ankylo":"Ankylosaurus" +"Ankylosaur":"Ankylosaurus" +"Ankylosaurus Aberration":"Aberrant Ankylosaurus" +"Ape":"Gigantopithecus" +"Araneo Aberration":"Aberrant Araneo" +"Araneomorphus":"Araneo" +"Archa":"Archaeopteryx" +"Argent":"Argentavis" +"Argy":"Argentavis" +"Arthropleura":"Arthropluera" +"Arthropluera Aberration":"Aberrant Arthropluera" +"Baryonyx Aberration":"Aberrant Baryonyx" +"Basil":"Basilosaurus" +"Basilosaur":"Basilosaurus" +"Bat":"Onyc" +"Bear":"Direbear" +"Beaver":"Castoroides" +"Bee":"Giant Bee" +"Beelze":"Beelzebufo" +"Beelzebufo Aberration":"Aberrant Beelzebufo" +"Beetle":"Dung Beetle" +"Bigfoot":"Gigantopithecus" +"Bronto":"Brontosaurus" +"Brontosaur":"Brontosaurus" +"Camel":"Morellatops" +"Camelsaurus":"Morellatops" +"Carbonemys Aberration":"Aberrant Carbonemys" +"Carno":"Carnotaurus" +"Carnotaur":"Carnotaurus" +"Carnotaurus Aberration":"Aberrant Carnotaurus" +"Cat":"Sabertooth" +"Chalico":"Chalicotherium" +"Cnidaria Aberration":"Aberrant Cnidaria" +"Compsognathus":"Compy" +"Crab":"Karkinos" +"Dilo":"Dilophosaur" +"Dimetrodon Aberration":"Aberrant Dimetrodon" +"Dimorph":"Dimorphodon" +"Dimorphodon Aberration":"Aberrant Dimorphodon" +"Diplocaulus Aberration":"Aberrant Diplocaulus" +"Diplodocus Aberration":"Aberrant Diplodocus" +"Dire Bear Aberration":"Aberrant Dire Bear" +"Dodo Aberration":"Aberrant Dodo" +"Doed":"Doedicurus" +"Doedicurus Aberration":"Aberrant Doedicurus" +"Dolphin":"Ichthy" +"Duck":"Hesperornis" +"Dung Beetle Aberration":"Aberrant Dung Beetle" +"Dunkle":"Dunkleosteus" +"Eel":"Electrophorus" +"Electro":"Electrophorus" +"Electrophorus Aberration":"Aberrant Electrophorus" +"Equus Aberration":"Aberrant Equus" +"Frog":"Beelzebufo" +"Galli":"Gallimimus" +"Giga":"Giganotosaurus" +"Giganotosaur":"Giganotosaurus" +"Gigantopithecus Aberration":"Aberrant Gigantopithecus" +"Golem":"Rock Elemental" +"Gorilla":"Gigantopithecus" +"Hesper":"Hesperornis" +"Horse":"Equus" +"Hyena":"Hyaenodon" +"Ichthyosaurus":"Ichthy" +"Iguanodon Aberration":"Aberrant Iguanodon" +"Kangaroo":"Procoptodon" +"Kapro":"Kaprosuchus" +"Kentro":"Kentrosaurus" +"Kentrosaur":"Kentrosaurus" +"Lystro":"Lystrosaurus" +"Lystrosaur":"Lystrosaurus" +"Lystrosaurus Aberration":"Aberrant Lystrosaurus" +"Manta Aberration":"Aberrant Manta" +"Mantaray":"Manta" +"Megalania Aberration":"Aberrant Megalania" +"Megalosaur":"Megalosaurus" +"Megalosaurus Aberration":"Aberrant Megalosaurus" +"Meganeura Aberration":"Aberrant Meganeura" +"Micro":"Microraptor" +"Monkey":"Mesopithecus" +"Moose":"Megaloceros" +"Mosa":"Mosasaurus" +"Mosasaur":"Mosasaurus" +"Moschops Aberration":"Aberrant Moschops" +"Moth":"Lymantria" +"Onychonycteris":"Onyc" +"Otter Aberration":"Aberrant Otter" +"Ovi":"Oviraptor" +"Ovis Aberration":"Aberrant Ovis" +"Pachycephalosaur":"Pachy" +"Pachyrhino":"Pachyrhinosaurus" +"Pachyrhinosaur":"Pachyrhinosaurus" +"Paraceratherium":"Paracer" +"Paraceratherium Aberration":"Aberrant Paraceratherium" +"Parasaur Aberration":"Aberrant Parasaur" +"Parasaurolophus":"Parasaur" +"Pego":"Pegomastax" +"Pela":"Pelagornis" +"Pelican":"Pelagornis" +"Penguin":"Kairuku" +"Pig":"Daeodon" +"Plesio":"Plesiosaur" +"Plesiosaurus":"Plesiosaur" +"Ptera":"Pteranodon" +"Ptero":"Pteranodon" +"Pulmonoscorpius Aberration":"Aberrant Pulmonoscorpius" +"Purlovia Aberration":"Aberrant Purlovia" +"Quetz":"Quetzal" +"Quetzalcoatl":"Quetzal" +"Quetzalcoatlus":"Quetzal" +"Raptor Aberration":"Aberrant Raptor" +"Rhino":"Woolly Rhino" +"Rhinoceros":"Woolly Rhino" +"Rockgolem":"Rock Elemental" +"Roo":"Procoptodon" +"Saber":"Sabertooth" +"Sabre":"Sabertooth" +"Sabretooth":"Sabertooth" +"Sarco Aberration":"Aberrant Sarco" +"Sarcosuchus":"Sarco" +"Scorpion":"Pulmonoscorpius" +"Seagull":"Ichthyornis" +"Shark":"Megalodon" +"Sheep":"Ovis" +"Snail":"Achatina" +"Snake":"Titanoboa" +"Spider":"Araneo" +"Spino Aberration":"Aberrant Spino" +"Spinosaur":"Spino" +"Spinosaurus":"Spino" +"Squid":"Tusoteuthis" +"Stag":"Megaloceros" +"Stego":"Stegosaurus" +"Stegosaur":"Stegosaurus" +"Stegosaurus Aberration":"Aberrant Stegosaurus" +"Tape":"Tapejara" +"Tapy":"Tapejara" +"Therizino":"Therizinosaur" +"Thief":"Pegomastax" +"Titan":"Titanosaur" +"Titanboa":"Titanoboa" +"Titanoboa Aberration":"Aberrant Titanoboa" +"Titanosaurus":"Titanosaur" +"Toad":"Beelzebufo" +"Trex":"Rex" +"Triceratops Aberration":"Aberrant Triceratops" +"Trike":"Triceratops" +"Turtle":"Carbonemys" +"Tuso":"Tusoteuthis" +"Tyrannosaur":"Rex" +"Tyrannosaurus":"Rex" +"Tyrannosaurus Rex":"Rex" +"Utahraptor":"Raptor" +"Whale":"Basilosaurus" +"Wolf":"Direwolf" +"Wyvern Fire":"Fire Wyvern" +"Wyvern Ice":"Ice Wyvern" +"Wyvern Lightning":"Lightning Wyvern" +"Wyvern Poison":"Poison Wyvern" +"Yuty":"Yutyrannus" +} diff --git a/ARKBreedingStats/json/ocr_2560x1440_100.json b/ARKBreedingStats/json/ocr_2560x1440_100.json index 0a4968fc..5218b6a7 100644 --- a/ARKBreedingStats/json/ocr_2560x1440_100.json +++ b/ARKBreedingStats/json/ocr_2560x1440_100.json @@ -1 +1 @@ -{"description":"","fontSizes":[13,15,23,18],"guiZoom":100,"labelRectangles":[{"height":15,"width":200,"x":1288,"y":679},{"height":15,"width":200,"x":1288,"y":736},{"height":15,"width":200,"x":1288,"y":793},{"height":15,"width":200,"x":1288,"y":851},{"height":15,"width":200,"x":1288,"y":908},{"height":15,"width":142,"x":1346,"y":965},{"height":15,"width":200,"x":1288,"y":1023},{"height":15,"width":200,"x":1288,"y":1080},{"height":15,"width":164,"x":1324,"y":1137},{"height":23,"width":132,"x":1219,"y":262},{"height":23,"width":270,"x":1144,"y":216},{"height":18,"width":202,"x":1178,"y":310},{"height":13,"width":92,"x":1238,"y":291}],"letterArrays":[[[2,0,3,3,3,3,1,1,0,3,3],[8,0,72,40,40,254,36,127,20,20,18],[5,4,30,7,5,7,28,20,28,15,4],[9,0,71,69,37,501,341,335,328,324,452],[8,0,30,50,18,30,142,155,113,115,158],[1,0,1,1,1],[2,0,2,3,1,1,1,1,1,1,1,3,2],[2,0,1,3,2,2,2,2,2,2,2,3,1],[5,4,4,31,14,10,10],[5,0,0,4,4,4,31,4,4,4],[1,0,0,0,0,0,0,0,0,0,1,1,1],[2,0,0,0,0,0,0,3],[2,0,0,0,0,0,0,0,0,3,3],[5,0,24,8,8,12,4,6,2,2,3],[5,0,14,27,17,17,17,17,17,27,14],[4,0,12,14,13,12,12,12,12,12,12],[5,0,14,25,16,24,8,4,2,3,31],[5,0,15,25,16,24,14,24,16,24,15],[7,0,48,56,56,52,54,50,127,48,48],[5,0,31,3,1,15,24,16,16,24,15],[5,0,28,2,1,13,19,17,17,27,14],[5,0,31,16,24,8,8,12,4,6,2],[5,0,14,25,17,27,14,27,17,17,14],[5,0,14,27,17,17,27,22,16,24,7],[2,0,0,0,3,3,0,0,0,3,3],[2,0,0,0,3,3,0,0,0,0,3,1,1],[5,0,0,0,24,6,3,7,28],[5,0,0,0,31,0,0,31],[5,0,0,0,3,12,24,28,7],[4,0,15,8,8,12,6,2,0,2,2],[10,0,248,390,626,585,589,581,585,441,6,124],[9,0,16,56,40,108,68,254,198,130,387],[7,0,63,99,99,99,63,99,67,99,63],[6,0,60,38,3,1,1,1,3,6,60],[8,0,63,99,195,195,131,195,195,99,63],[5,0,31,3,3,3,31,3,3,3,31],[5,0,31,3,3,3,31,3,3,3,3],[7,0,60,6,3,1,113,97,67,102,124],[8,0,195,195,195,195,255,195,195,195,195],[2,0,3,3,3,3,3,3,3,3,3],[3,0,0,4,4,4,4,4,4,4,4,4,6,3],[7,0,35,51,27,15,15,27,19,51,99],[6,0,3,3,3,3,3,3,3,3,63],[10,0,771,903,903,975,843,843,827,819,819],[8,0,195,199,207,203,219,211,243,227,195],[8,0,60,102,195,129,129,129,195,102,60],[6,0,31,51,35,51,31,3,3,3,3],[8,0,60,102,195,129,129,129,195,102,60,96,64],[6,0,31,63,49,49,29,25,25,49],[5,0,30,19,1,3,14,24,16,25,15],[7,0,127,8,8,8,8,8,8,8,8],[8,0,195,195,195,195,195,195,195,102,60],[8,0,195,66,66,102,36,36,60,24,24],[12,0,3171,1122,1122,1266,1686,660,924,780,780],[8,0,66,102,36,24,24,60,36,102,195],[8,0,195,66,38,60,24,24,24,24,24],[5,0,31,24,24,12,4,6,3,3,31],[3,0,7,1,1,1,1,1,1,1,1,1,7],[5,0,3,2,2,6,4,12,8,8,24],[3,0,7,4,4,4,4,4,4,4,4,4,7],[5,0,4,6,10,9,17,17],[6,0,0,0,0,0,0,0,0,0,0,0,63],[2,1,2],[6,0,0,0,30,48,48,62,49,49,47],[6,1,1,1,31,51,35,35,35,51,29],[4,0,0,0,14,3,1,1,1,3,14],[6,32,32,32,62,51,49,33,49,51,46],[5,0,0,0,14,31,19,31,3,31,4],[4,14,2,2,15,3,2,2,2,2,2],[7,0,0,0,124,50,34,50,28,2,62,99,35,30],[6,1,1,1,31,51,35,33,33,33,33],[2,0,3,0,3,3,3,3,3,3],[3,6,6,0,6,6,6,6,6,6,6,6,6,3],[5,1,1,1,17,9,13,7,11,25,17],[2,3,3,3,3,3,3,3,3,3,3],[9,0,0,0,0,511,307,273,273,273,273,273],[6,0,0,0,29,51,35,33,33,33,33],[6,0,0,0,30,51,33,33,33,51,30],[6,0,0,0,29,51,35,35,35,51,31,1,1,1],[6,0,0,0,46,51,49,33,49,51,62,32,32,32],[5,0,0,0,25,7,3,3,3,3,3],[4,0,0,0,15,1,3,14,8,8,15],[3,0,2,3,7,3,3,3,3,3,6],[6,0,0,0,33,33,33,33,49,51,46],[7,0,0,0,99,34,34,54,20,28,8],[11,0,0,0,1571,626,594,854,476,396,396],[5,0,0,0,17,27,14,14,14,27,17],[7,0,0,0,99,34,34,54,20,28,8,8,12,7],[4,0,0,0,15,12,4,6,2,1,15],[5,0,24,12,4,4,4,3,6,4,4,12,24],[2,3,3,3,3,3,3,3,3,3,3,3,3,3],[5,0,3,6,4,4,4,24,12,4,4,14,7],[2,0,0,0,0,3,1]],[[3,0,0,7,7,7,7,7,7,7,0,7,7],[12,0,0,952,408,4095,4095,460,204,2047,204,230,102],[7,0,0,28,63,55,3,63,126,112,127,31,28],[13,3710,3687,1895,1023,1022,448,224,4080,8176,6584,6556,8092,8078,1024],[10,0,0,127,7,3,199,1022,199,195,231,255,126],[2,0,0,3,3,3],[4,0,0,14,7,7,7,7,3,3,3,7,7,7,6,14],[4,0,0,7,7,7,6,14,14,14,14,14,6,7,7,3],[5,0,0,23,31,15,11],[6,0,0,0,0,0,12,12,63,63,12,12],[3,0,0,0,0,0,0,0,0,0,0,0,7,3,3],[4,0,0,0,0,0,0,0,15,15],[3,0,0,0,0,0,0,0,0,0,0,0,7,7,7],[10,960,448,480,224,240,112,120,56,28,28,30,14,7,7],[13,1016,4092,3870,7694,7183,7175,7175,7175,7175,7183,3598,4094,2044,1016],[5,30,31,28,28,28,28,28,28,28,28,28,28,28,12],[10,510,511,967,896,896,896,448,480,240,120,60,927,1023,1023],[10,254,511,963,896,896,448,508,508,896,896,896,963,511,254],[11,480,224,112,120,952,924,926,910,975,2047,2047,896,896,896],[10,1022,510,6,7,7,255,1023,962,896,896,896,511,511,126],[11,240,248,60,30,207,1023,2047,1799,1799,1799,1927,1023,510,248],[10,1023,1023,896,384,448,192,224,96,112,56,56,28,28,14],[11,1022,2047,1799,1799,1935,1022,510,2047,1799,1799,1799,2047,1022,248],[11,1022,1935,1799,1799,1799,1807,2046,2046,896,960,496,248,56,16],[3,0,0,0,0,7,7,0,0,0,0,0,0,0,7,7],[4,0,0,0,0,14,14,0,0,0,0,0,15,7,7],[7,0,0,0,0,0,112,124,31,15,62,112,64],[6,0,0,0,0,0,0,63,63,0,63],[7,0,0,0,0,0,3,31,124,120,63,7,1],[7,0,0,127,112,96,112,126,30,14,0,14,14],[15,0,480,4092,7710,14823,16375,30471,30691,30707,30527,14335,16375,7694,124,112],[11,0,0,120,120,252,252,462,510,502,911,903,1795],[9,0,0,255,455,455,231,127,487,455,455,511,255],[9,0,112,510,271,7,7,7,7,7,15,510,508],[10,0,0,511,455,903,903,903,903,903,967,511,255],[11,2047,2047,7,7,7,7,2047,2047,1023,7,7,7,7,2047,2047],[8,0,0,255,7,7,7,127,127,7,7,7,7],[9,0,112,510,271,7,7,7,455,455,455,510,508],[10,0,0,903,903,903,903,1023,1023,903,903,903,903],[3,0,0,7,7,7,7,7,7,7,7,7,7],[4,0,0,14,14,14,14,14,14,14,14,15,7],[11,0,0,967,231,119,127,63,127,247,231,455,1927],[9,7,7,7,7,7,7,7,7,7,7,7,7,7,511,511],[12,0,0,3591,3855,3855,3999,3999,4095,4095,3831,3831,3687],[10,0,0,903,911,927,959,951,1015,999,967,967,903],[11,0,112,510,911,1799,1799,1799,1799,1799,903,1022,508],[9,0,0,255,487,455,455,247,127,7,7,7,7],[11,0,112,510,911,1799,1799,1799,1799,1799,903,1022,508,224,448,384],[10,0,0,255,455,455,455,255,63,119,231,487,967],[9,0,56,255,135,3,7,255,254,448,448,255,127],[8,0,0,255,28,28,28,28,28,28,28,28,28],[10,0,0,903,903,903,903,903,903,903,903,510,252],[16,61447,28687,30735,30750,14366,15388,7228,7740,3704,3704,3952,2032,2016,992,992],[13,0,0,7395,7411,7667,7671,3519,3999,3999,3855,3854,1550],[11,0,0,1927,462,254,252,120,120,252,494,463,1927],[10,0,0,967,455,238,238,124,56,56,56,56,56],[8,0,0,255,224,96,112,56,28,14,6,255,255],[4,0,0,15,3,3,3,3,3,3,3,3,3,3,15,15],[7,0,0,7,7,14,14,28,28,56,56,112,112],[5,0,0,31,28,28,28,28,28,28,28,28,28,28,31,31],[7,0,0,28,30,62,51,115],[7,0,0,0,0,0,0,0,0,0,0,0,0,127,127],[4,0,0,15],[7,0,0,0,0,30,127,112,126,127,115,127,127],[8,0,0,7,7,63,127,231,231,231,231,127,63],[6,0,0,0,0,60,63,7,3,3,7,63,62],[7,0,0,96,96,124,127,103,99,99,103,127,126],[7,0,0,0,0,28,127,119,127,127,3,127,126],[6,0,62,63,7,31,31,7,7,7,7,7,7],[8,0,0,0,0,124,255,231,227,227,231,255,254,96,127,31],[8,0,0,7,7,63,127,231,231,231,231,231,231],[3,0,0,7,0,7,7,7,7,7,7,7,7],[3,0,0,7,0,7,7,7,7,7,7,7,7,7,3,3],[8,0,0,7,7,127,255,231,231,127,63,119,231],[3,0,0,7,7,7,7,7,7,7,7,7,7],[12,0,0,0,0,1979,4095,3703,3703,3703,3703,3703,3703],[8,0,0,0,0,59,127,231,231,231,231,231,231],[8,0,0,0,0,60,127,231,227,227,227,127,62],[8,0,0,0,0,30,127,231,231,231,231,127,63,7,7,7],[8,0,0,0,0,124,255,231,227,227,227,255,254,224,224,224],[5,0,0,0,0,27,31,7,7,7,7,7,7],[7,0,0,0,0,62,63,3,31,127,112,127,63],[4,0,0,0,3,15,15,7,7,7,7,15,15],[8,0,0,0,0,231,231,231,231,231,231,255,254],[8,0,0,0,0,227,115,119,55,62,62,30,28],[11,0,0,0,0,1843,1907,1915,1023,1023,991,974,462],[8,0,0,0,0,227,119,62,30,28,62,119,243],[8,0,0,0,0,227,115,119,55,62,62,30,28,12,14,7],[7,0,0,0,0,127,127,56,28,14,6,7,63],[5,0,0,28,14,14,14,14,7,7,14,14,14,14,14,28],[3,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7],[5,0,0,7,7,7,7,7,30,30,7,7,7,7,7,3],[6,0,0,0,0,0,0,0,47,63],[11,136,260,260,260,136,112,32,32,2047,32,32,32,32],[13,6144,5120,4608,4352,4224,4188,34,65,65,65,34,28]],[[3,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,7,7,7],[19,0,0,0,57792,29120,29120,28864,524286,524286,14561,14432,6256,7280,262143,131071,3128,3640,3640,3612],[11,0,0,0,120,120,508,1022,991,7,15,511,1022,1984,1920,967,1023,510,120,120],[16,0,0,0,30846,15615,7399,7911,4071,2046,1980,960,480,16096,32752,30712,25528,62396,32542,15887],[15,0,0,0,2044,2046,1823,15,15,3599,7710,32764,32766,7711,7695,7695,7695,4031,4094,1016],[4,0,0,0,15,15,7,7,7],[6,0,0,0,60,28,30,30,30,14,15,15,15,15,15,15,15,15,15,14,30,30,28,60],[5,0,0,0,7,7,15,15,15,14,30,30,30,30,30,30,30,30,14,15,15,15,7,7],[7,0,0,0,12,45,127,78,30,63],[8,0,0,0,0,0,0,0,0,0,28,28,28,255,255,28,28,28],[5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,15,15,7,7],[5,0,0,0,0,0,0,0,0,0,0,0,0,31,31],[3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7],[11,0,0,0,1920,1920,960,960,480,480,240,240,120,124,60,62,30,31,15,7],[15,0,0,0,2032,8188,16254,15390,31759,30735,30735,30735,30735,30735,30735,31759,15390,16254,8188,2032],[5,0,0,0,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[12,0,0,0,1020,2047,4063,3843,3840,3840,3840,1920,1984,992,496,248,124,4095,4095,4095],[12,0,0,0,511,2047,1999,3840,3840,1792,1984,1020,1020,1920,3840,3840,3840,2047,2047,511],[13,0,0,0,960,480,480,240,120,3960,3900,3870,3870,3855,4095,8191,8191,3840,3840,3840],[12,0,0,0,2046,2046,14,14,14,14,511,2047,1991,3841,3840,3840,3840,1927,2047,510],[13,0,0,256,448,992,1016,124,60,30,2046,4095,7951,7695,7695,7695,7695,7998,4092,1016],[11,0,0,0,2047,2047,2047,1920,960,960,480,480,240,240,120,60,60,30,30,15],[13,0,0,0,2044,4094,8127,7695,7695,7695,4094,2044,4094,7695,7695,7695,7695,8127,4094,2044],[13,0,0,0,2040,4094,7966,7695,7695,7183,7183,7711,8190,8188,3840,3968,1984,1008,504,112],[4,0,0,0,0,0,0,0,15,15,15,0,0,0,0,0,0,15,15,15],[5,0,0,0,0,0,0,0,30,30,30,0,0,0,0,0,0,0,30,15,15,7,7],[10,0,0,0,0,0,0,0,0,896,992,1016,255,31,15,127,1020,992,896],[8,0,0,0,0,0,0,0,0,0,0,255,255,0,0,255,255],[11,0,0,0,0,0,0,0,0,7,31,127,1020,2016,1984,1016,255,31,7],[10,0,0,0,255,511,995,960,896,960,960,510,254,30,30,30,0,30,30,30],[23,0,0,0,131008,524272,1032696,2031740,1982238,3997598,4063119,3792911,3792911,7995279,7995343,3793871,3793871,4060111,4063198,2097054,2080828,491772,2032,2016],[17,0,0,0,960,2016,2016,4080,4080,3696,7800,7800,15420,16316,32732,32734,28766,61455,61455,122887],[13,0,0,0,2047,4095,4095,7687,3591,3847,1927,999,4071,3847,7687,7687,7687,4095,4095,1023],[14,0,0,0,16368,16376,15612,62,30,15,15,15,15,15,15,30,62,15868,16376,16352],[15,0,0,0,1023,4095,8191,15879,15367,30727,30727,30727,30727,30727,15367,15367,15879,8191,4095,1023],[12,0,0,0,2047,2047,2047,7,7,7,7,2047,2047,7,7,7,7,4095,4095,4095],[11,0,0,0,2047,2047,2047,7,7,7,7,2047,2047,7,7,7,7,7,7,7],[14,0,0,0,16368,16376,15612,62,30,15,15,15,15,15375,15375,15390,15422,16124,16376,16352],[14,0,0,0,15367,15367,15367,15367,15367,15367,15367,16383,16383,15367,15367,15367,15367,15367,15367,15367],[3,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],[6,0,0,0,56,56,56,56,56,56,56,56,56,56,56,56,60,63,31,15],[15,0,0,0,31751,7687,3847,1927,1991,999,503,247,503,999,1991,1927,3847,7943,15879,31751],[10,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,1023,1023,1023],[17,0,0,0,122895,122895,127007,127007,129087,129087,129087,121983,121975,122615,118503,118759,118759,116679,116679,115591],[15,0,0,0,30735,30751,30751,30783,30847,30847,30967,31207,31687,31687,32647,32519,32519,32263,31751,30727],[17,0,0,0,8176,32764,32508,63550,61470,122895,122895,122895,122895,122895,122895,61470,63550,32508,16376,8176],[13,0,0,0,1023,4095,4095,3847,7687,3847,3847,4039,2023,487,7,7,7,7,7,7],[17,0,0,0,8176,32764,32508,63550,61470,122895,122895,122895,122895,122895,122895,61470,63550,65276,32760,8176,3840,7680,15360,15360],[14,0,0,0,2047,4095,4095,7687,7687,3847,3847,2023,1015,487,999,1991,1927,3847,7943,15879],[13,0,0,0,4088,8190,7999,15,15,15,31,4095,8190,7680,7680,7680,7680,8095,4095,1022],[12,0,0,0,4095,4095,4095,112,112,112,112,112,112,112,112,112,112,112,112,112],[14,0,0,0,15367,15367,15367,15367,15367,15367,15367,15367,15367,15367,15367,15375,15375,8190,8190,2040],[17,0,0,0,126991,61455,63503,30751,30750,15422,15420,7740,7800,7800,4088,4080,2032,2016,992,992],[21,0,0,0,1969927,921351,991119,991119,999311,999375,473551,489966,522478,520446,520446,258174,254078,254076,254012,245820],[16,0,0,0,63503,30751,15422,15932,8056,4080,2032,992,2016,2032,4080,8056,15932,15422,30751,63503],[15,0,0,0,30735,15375,15390,7710,7740,3900,1912,2032,1008,992,480,480,480,480,480,480],[12,0,0,0,4095,4095,4095,1920,1920,960,480,240,120,120,60,30,15,4095,4095,4095],[7,0,0,0,127,127,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,127,127],[11,0,0,0,15,15,31,30,60,60,120,120,240,240,480,480,960,960,1920,1920],[6,0,0,0,63,63,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,63,63],[11,0,0,0,112,120,248,252,478,974,911,1927],[11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2047,2047],[5,0,0,0,15,15,30],[11,0,0,0,0,0,0,0,252,1022,2046,1920,1920,2046,2047,1935,1935,1999,2047,1918],[12,0,0,0,15,15,15,15,511,2047,2047,3855,3855,3855,3855,3855,3855,2015,2047,511],[10,0,0,0,0,0,0,0,1016,1022,1022,15,15,15,15,15,15,830,1022,1016],[12,0,0,0,3840,3840,3840,3840,4088,4094,4095,3855,3855,3855,3855,3855,3855,4094,4094,2040],[12,0,0,0,0,0,0,0,248,1022,2046,1935,1807,2047,4095,15,15,1598,2046,2040],[9,0,0,240,508,510,30,15,255,255,255,15,15,15,15,15,15,15,15,15],[12,0,0,0,0,0,0,0,1008,4092,4094,3855,3855,3855,3855,3855,3855,4095,4094,4088,3840,1922,2046,510],[12,0,0,0,15,15,15,15,1007,2047,4095,3855,3855,3855,3855,3855,3855,3855,3855,3855],[4,0,0,0,15,15,0,0,15,15,15,15,15,15,15,15,15,15,15,15],[4,0,0,0,15,15,0,0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,7],[13,0,0,0,15,15,15,15,1007,4095,4095,3599,7695,3855,2031,495,975,1935,3983,7951],[4,0,0,0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15],[19,0,0,0,0,0,0,0,61935,262143,262143,233359,231311,493455,493455,493455,493455,493455,493455,493455],[12,0,0,0,0,0,0,0,1007,2047,4095,3855,3855,3855,3855,3855,3855,3855,3855,3855],[12,0,0,0,0,0,0,0,504,2046,2046,3855,3855,3855,3855,3855,3855,3999,2046,504],[12,0,0,0,0,0,0,0,510,2047,2047,3855,3855,3855,3855,3855,3855,2047,2047,511,15,15,15,15],[12,0,0,0,0,0,0,0,2032,4092,4094,3855,3855,3855,3855,3855,3855,4095,4094,4092,3840,3840,3840,3840],[7,0,0,0,0,0,0,0,111,127,127,31,15,15,15,15,15,15,15,15],[11,0,0,0,0,0,0,0,508,1022,991,7,15,511,1022,1984,1920,967,1023,510],[7,0,0,0,0,0,7,7,127,127,127,15,15,15,15,15,15,31,127,126],[12,0,0,0,0,0,0,0,3855,3855,3855,3855,3855,3855,3855,3855,3855,4062,4094,3964],[12,0,0,0,0,0,0,0,3847,1927,1935,1935,974,990,478,508,508,252,248,120],[17,0,0,0,0,0,0,0,123847,123847,124879,59375,59375,61422,65278,32382,32382,31868,31804,15420],[12,0,0,0,0,0,0,0,3847,1935,990,510,508,248,248,508,508,990,1935,3975],[12,0,0,0,0,0,0,0,3847,1799,1935,1935,974,990,478,508,508,252,248,120,120,60,62,30],[10,0,0,0,0,0,0,0,1023,1023,1023,480,480,240,120,60,30,15,1023,1023],[7,0,0,0,124,60,60,28,30,30,30,30,31,15,7,15,30,30,30,30,30,28,60,124],[3,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],[7,0,0,0,15,15,14,30,30,30,30,30,62,124,124,60,30,30,30,30,30,14,15,15],[8,0,0,0,0,0,0,0,0,0,0,0,3,255,255,240],[32,4261539840,4279238144,3753901952,3758096320,2415919088,134088696,66585592,132120828,130023548,264241214,260046910,260046911,528482335,528482335,528482335,528482335,260046911,260046911,264241214,130023550,132120828,66060792,66979832],[32,534774780,532677116,1065353470,1056964734,2130706559,2130706559,2113929279,2113929279,2113929279,2130706495,2130706559,2130706687,1065353470,532677116,535824380,536838140,268435448,134217712,67108800,16777088,4193792,1046528,520192]],[[3,0,7,7,7,7,7,7,7,7,7,7,0,7,7],[15,0,3168,3696,1648,1584,32767,1849,824,792,792,8191,412,396,462],[8,0,60,60,126,255,135,7,127,254,224,227,255,60,60],[12,0,3614,1855,947,947,511,254,240,112,4088,3804,3292,4046,1991],[11,0,56,254,143,7,391,911,2046,2047,903,903,967,511,252],[3,0,7,7,7,7],[5,0,28,14,14,15,7,7,7,7,7,7,7,7,7,14,14,30],[5,0,7,7,15,14,14,14,14,14,30,14,14,14,14,14,7,7],[5,0,6,6,31,22,15,13],[6,0,0,0,0,0,0,14,14,63,63,14,14,14],[4,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7],[4,0,0,0,0,0,0,0,0,15,15],[2,0,0,0,0,0,0,0,0,0,0,0,0,3,3],[9,0,480,224,240,112,120,56,60,28,30,14,15,7,7],[12,0,240,1020,2014,1807,1799,3847,3847,3847,3847,1799,1935,1022,508],[3,0,6,7,7,7,7,7,7,7,7,7,7,7,7],[9,0,60,255,487,448,448,448,480,240,120,60,30,511,511],[9,0,62,255,487,448,448,480,254,254,448,448,481,255,127],[10,0,224,112,120,56,476,478,462,463,511,1023,960,448,448],[9,0,511,511,7,7,7,127,255,480,448,448,448,511,127],[10,0,96,240,252,30,14,511,1023,903,903,903,911,1022,252],[9,0,511,511,224,224,112,112,56,56,28,30,14,15,7],[10,0,120,510,975,903,903,510,510,1023,903,903,903,1023,510],[10,0,120,510,975,903,903,903,975,1022,960,480,240,124,60],[3,0,0,0,0,0,7,7,0,0,0,0,0,7,7],[3,0,0,0,0,0,7,7,0,0,0,0,0,7,7,7,3],[8,0,0,0,0,0,192,240,126,31,7,31,252,240,128],[7,0,0,0,0,0,0,0,127,127,0,127,127],[9,0,0,0,0,0,1,15,63,248,480,252,63,7,1],[8,0,14,127,113,224,224,112,127,31,7,7,0,7,7],[16,0,1984,16376,63612,57374,53231,57319,56327,57223,57319,56567,56439,57335,65518,63518,508,504],[13,0,240,240,496,504,1016,924,924,1822,2030,4094,3607,7687,7175],[11,0,255,1023,967,1927,903,967,503,967,1927,1927,1927,1023,511],[11,0,480,2044,1854,15,7,7,7,7,7,15,1054,2044,2040],[12,0,127,1023,1991,3847,3591,3591,3591,3591,3591,3847,1927,2047,511],[10,0,1023,1023,7,7,7,7,511,511,7,7,7,1023,1023],[9,0,511,511,7,7,7,7,511,511,7,7,7,7,7],[11,0,480,2044,1854,15,7,7,7,1799,1799,1807,1822,2046,2040],[12,0,3591,3591,3591,3591,3591,3591,4095,4095,3591,3591,3591,3591,3591],[3,0,7,7,7,7,7,7,7,7,7,7,7,7,7],[5,0,28,28,28,28,28,28,28,28,28,28,30,15,7],[13,0,3591,1799,903,455,487,247,119,247,487,967,1927,1799,7943],[8,0,7,7,7,7,7,7,7,7,7,7,7,255,255],[14,0,14351,14351,15375,15391,15903,15935,16191,16247,15223,15351,15335,14823,14791],[12,0,3591,3599,3615,3647,3647,3703,3815,4071,4039,3975,3975,3847,3591],[13,0,496,2044,4030,7695,7175,7175,7175,7175,7175,7695,3870,4094,1016],[11,0,255,1023,967,1927,1927,903,1015,503,55,7,7,7,7],[13,0,496,2044,4030,7695,7175,7175,7175,7175,7175,7695,3870,4094,1016,960,1920,1792,768],[12,0,255,1023,967,1927,1927,903,503,247,231,487,967,1927,3847],[10,0,248,1022,911,7,7,15,511,1020,896,896,897,1023,255],[9,0,511,511,56,56,56,56,56,56,56,56,56,56,56],[12,0,3591,3591,3591,3591,3591,3591,3591,3591,3591,3855,1806,2046,1016],[13,0,7687,7687,3591,3855,1806,1950,926,924,1020,504,504,240,240],[16,0,57795,58311,58343,29671,30695,30583,30583,32311,32318,15934,15390,15390,15390],[13,0,7687,3855,1934,924,1020,504,240,248,504,1020,1950,3855,7687],[12,0,3847,1799,1935,910,476,476,248,248,112,112,112,112,112],[10,0,1023,1023,896,448,480,224,112,56,28,30,15,1023,1023],[5,0,31,31,7,7,7,7,7,7,7,7,7,7,7,7,31,31],[9,0,7,7,15,14,30,28,60,56,120,112,240,224,480],[6,0,63,63,56,56,56,56,56,56,56,56,56,56,56,56,63,63],[9,0,24,60,60,126,118,231,451],[9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,511,511],[4,0,3,7,14],[9,0,0,0,0,0,255,255,480,508,511,487,487,511,510],[9,0,7,7,7,7,255,511,455,455,455,455,455,511,127],[8,0,0,0,0,0,254,255,7,7,7,7,7,255,252],[9,0,448,448,448,448,510,511,455,455,455,455,455,511,508],[9,0,0,0,0,0,254,255,455,455,511,7,7,254,252],[5,0,30,31,7,3,31,31,3,3,3,3,3,3,3],[9,0,0,0,0,0,510,511,455,455,455,455,455,511,508,448,511,255],[9,0,7,7,7,7,255,511,455,455,455,455,455,455,455],[3,0,7,7,0,0,7,7,7,7,7,7,7,7,7],[3,0,7,7,0,0,7,7,7,7,7,7,7,7,7,7,7,3,3],[10,0,7,7,7,7,511,1023,903,967,487,119,231,487,967],[3,0,7,7,7,7,7,7,7,7,7,7,7,7,7],[14,0,0,0,0,0,8191,16383,14823,14791,14791,14791,14791,14791,14791],[9,0,0,0,0,0,255,511,455,455,455,455,455,455,455],[10,0,0,0,0,0,254,511,455,455,967,455,455,511,124],[9,0,0,0,0,0,255,511,455,455,455,455,455,511,127,7,7,7],[9,0,0,0,0,0,510,511,455,455,455,455,455,511,510,448,448,448],[6,0,0,0,0,0,63,63,7,7,7,7,7,7,7],[8,0,0,0,0,0,255,255,7,63,255,224,224,255,127],[5,0,0,0,3,7,31,31,7,7,7,7,7,31,30],[9,0,0,0,0,0,455,455,455,455,455,455,455,511,510],[9,0,0,0,0,0,451,487,231,239,126,126,126,60,60],[14,0,0,0,0,0,15591,7415,7671,7671,4031,4030,3998,1822,1822],[9,0,0,0,0,0,487,239,126,60,60,124,126,231,487],[9,0,0,0,0,0,451,487,231,239,126,126,126,60,60,28,30,15,6],[8,0,0,0,0,0,255,255,112,56,28,30,15,255,255],[5,0,28,14,14,14,14,14,15,7,3,7,15,14,14,14,14,30],[3,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],[6,0,7,7,7,15,15,14,14,62,60,30,14,14,15,15,7,7],[6,0,0,0,0,0,0,0,0,39,63,56]]],"letters":[["!","#","$","%","&","'","(",")","*","+",",","-",".","\/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"],["!","#","$","%","&","'","(",")","*","+",",","-",".","\/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","♀","♂"],["!","#","$","%","&","'","(",")","*","+",",","-",".","\/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","♂","♀"],["!","#","$","%","&","'","(",")","*","+",",","-",".","\/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"]],"resolutionHeight":1440,"resolutionWidth":2560,"statDistance":0} \ No newline at end of file +{"description":"","fontSizes":[13,15,23,18],"guiZoom":100,"labelRectangles":[{"height":15,"width":200,"x":1288,"y":679},{"height":15,"width":200,"x":1288,"y":736},{"height":15,"width":200,"x":1288,"y":793},{"height":15,"width":200,"x":1288,"y":851},{"height":15,"width":200,"x":1288,"y":908},{"height":15,"width":142,"x":1346,"y":965},{"height":15,"width":200,"x":1288,"y":1023},{"height":15,"width":200,"x":1288,"y":1080},{"height":15,"width":164,"x":1324,"y":1137},{"height":23,"width":132,"x":1219,"y":262},{"height":23,"width":306,"x":1126,"y":216},{"height":18,"width":202,"x":1178,"y":310},{"height":13,"width":92,"x":1238,"y":291}],"letterArrays":[[[2,0,3,3,3,3,1,1,0,3,3],[8,0,72,40,40,254,36,127,20,20,18],[5,4,30,7,5,7,28,20,28,15,4],[9,0,71,69,37,501,341,335,328,324,452],[8,0,30,50,18,30,142,155,113,115,158],[1,0,1,1,1],[2,0,2,3,1,1,1,1,1,1,1,3,2],[2,0,1,3,2,2,2,2,2,2,2,3,1],[5,4,4,31,14,10,10],[5,0,0,4,4,4,31,4,4,4],[1,0,0,0,0,0,0,0,0,0,1,1,1],[2,0,0,0,0,0,0,3],[2,0,0,0,0,0,0,0,0,3,3],[5,0,24,8,8,12,4,6,2,2,3],[5,0,14,27,17,17,17,17,17,27,14],[4,0,12,14,13,12,12,12,12,12,12],[5,0,14,25,16,24,8,4,2,3,31],[5,0,15,25,16,24,14,24,16,24,15],[7,0,48,56,56,52,54,50,127,48,48],[5,0,31,3,1,15,24,16,16,24,15],[5,0,28,2,1,13,19,17,17,27,14],[5,0,31,16,24,8,8,12,4,6,2],[5,0,14,25,17,27,14,27,17,17,14],[5,0,14,27,17,17,27,22,16,24,7],[2,0,0,0,3,3,0,0,0,3,3],[2,0,0,0,3,3,0,0,0,0,3,1,1],[5,0,0,0,24,6,3,7,28],[5,0,0,0,31,0,0,31],[5,0,0,0,3,12,24,28,7],[4,0,15,8,8,12,6,2,0,2,2],[10,0,248,390,626,585,589,581,585,441,6,124],[9,0,16,56,40,108,68,254,198,130,387],[7,0,63,99,99,99,63,99,67,99,63],[6,0,60,38,3,1,1,1,3,6,60],[8,0,63,99,195,195,131,195,195,99,63],[5,0,31,3,3,3,31,3,3,3,31],[5,0,31,3,3,3,31,3,3,3,3],[7,0,60,6,3,1,113,97,67,102,124],[8,0,195,195,195,195,255,195,195,195,195],[2,0,3,3,3,3,3,3,3,3,3],[3,0,0,4,4,4,4,4,4,4,4,4,6,3],[7,0,35,51,27,15,15,27,19,51,99],[6,0,3,3,3,3,3,3,3,3,63],[10,0,771,903,903,975,843,843,827,819,819],[8,0,195,199,207,203,219,211,243,227,195],[8,0,60,102,195,129,129,129,195,102,60],[6,0,31,51,35,51,31,3,3,3,3],[8,0,60,102,195,129,129,129,195,102,60,96,64],[6,0,31,63,49,49,29,25,25,49],[5,0,30,19,1,3,14,24,16,25,15],[7,0,127,8,8,8,8,8,8,8,8],[8,0,195,195,195,195,195,195,195,102,60],[8,0,195,66,66,102,36,36,60,24,24],[12,0,3171,1122,1122,1266,1686,660,924,780,780],[8,0,66,102,36,24,24,60,36,102,195],[8,0,195,66,38,60,24,24,24,24,24],[5,0,31,24,24,12,4,6,3,3,31],[3,0,7,1,1,1,1,1,1,1,1,1,7],[5,0,3,2,2,6,4,12,8,8,24],[3,0,7,4,4,4,4,4,4,4,4,4,7],[5,0,4,6,10,9,17,17],[6,0,0,0,0,0,0,0,0,0,0,0,63],[2,1,2],[6,0,0,0,30,48,48,62,49,49,47],[6,1,1,1,31,51,35,35,35,51,29],[4,0,0,0,14,3,1,1,1,3,14],[6,32,32,32,62,51,49,33,49,51,46],[5,0,0,0,14,31,19,31,3,31,4],[4,14,2,2,15,3,2,2,2,2,2],[7,0,0,0,124,50,34,50,28,2,62,99,35,30],[6,1,1,1,31,51,35,33,33,33,33],[2,0,3,0,3,3,3,3,3,3],[3,6,6,0,6,6,6,6,6,6,6,6,6,3],[5,1,1,1,17,9,13,7,11,25,17],[2,3,3,3,3,3,3,3,3,3,3],[9,0,0,0,0,511,307,273,273,273,273,273],[6,0,0,0,29,51,35,33,33,33,33],[6,0,0,0,30,51,33,33,33,51,30],[6,0,0,0,29,51,35,35,35,51,31,1,1,1],[6,0,0,0,46,51,49,33,49,51,62,32,32,32],[5,0,0,0,25,7,3,3,3,3,3],[4,0,0,0,15,1,3,14,8,8,15],[3,0,2,3,7,3,3,3,3,3,6],[6,0,0,0,33,33,33,33,49,51,46],[7,0,0,0,99,34,34,54,20,28,8],[11,0,0,0,1571,626,594,854,476,396,396],[5,0,0,0,17,27,14,14,14,27,17],[7,0,0,0,99,34,34,54,20,28,8,8,12,7],[4,0,0,0,15,12,4,6,2,1,15],[5,0,24,12,4,4,4,3,6,4,4,12,24],[2,3,3,3,3,3,3,3,3,3,3,3,3,3],[5,0,3,6,4,4,4,24,12,4,4,14,7],[2,0,0,0,0,3,1]],[[3,0,0,7,7,7,7,7,7,7,0,7,7],[12,0,0,952,408,4095,4095,460,204,2047,204,230,102],[7,0,0,28,63,55,3,63,126,112,127,31,28],[13,3710,3687,1895,1023,1022,448,224,4080,8176,6584,6556,8092,8078,1024],[10,0,0,127,7,3,199,1022,199,195,231,255,126],[2,0,0,3,3,3],[4,0,0,14,7,7,7,7,3,3,3,7,7,7,6,14],[4,0,0,7,7,7,6,14,14,14,14,14,6,7,7,3],[5,0,0,23,31,15,11],[6,0,0,0,0,0,12,12,63,63,12,12],[3,0,0,0,0,0,0,0,0,0,0,0,7,3,3],[4,0,0,0,0,0,0,0,15,15],[3,0,0,0,0,0,0,0,0,0,0,0,7,7,7],[10,960,448,480,224,240,112,120,56,28,28,30,14,7,7],[13,1016,4092,3870,7694,7183,7175,7175,7175,7175,7183,3598,4094,2044,1016],[5,30,31,28,28,28,28,28,28,28,28,28,28,28,12],[10,510,511,967,896,896,896,448,480,240,120,60,927,1023,1023],[10,254,511,963,896,896,448,508,508,896,896,896,963,511,254],[11,480,224,112,120,952,924,926,910,975,2047,2047,896,896,896],[10,1022,510,6,7,7,255,1023,962,896,896,896,511,511,126],[11,240,248,60,30,207,1023,2047,1799,1799,1799,1927,1023,510,248],[10,1023,1023,896,384,448,192,224,96,112,56,56,28,28,14],[11,1022,2047,1799,1799,1935,1022,510,2047,1799,1799,1799,2047,1022,248],[11,1022,1935,1799,1799,1799,1807,2046,2046,896,960,496,248,56,16],[3,0,0,0,0,7,7,0,0,0,0,0,0,0,7,7],[4,0,0,0,0,14,14,0,0,0,0,0,15,7,7],[7,0,0,0,0,0,112,124,31,15,62,112,64],[6,0,0,0,0,0,0,63,63,0,63],[7,0,0,0,0,0,3,31,124,120,63,7,1],[7,0,0,127,112,96,112,126,30,14,0,14,14],[15,0,480,4092,7710,14823,16375,30471,30691,30707,30527,14335,16375,7694,124,112],[11,0,0,120,120,252,252,462,510,502,911,903,1795],[9,0,0,255,455,455,231,127,487,455,455,511,255],[9,0,112,510,271,7,7,7,7,7,15,510,508],[10,0,0,511,455,903,903,903,903,903,967,511,255],[11,2047,2047,7,7,7,7,2047,2047,1023,7,7,7,7,2047,2047],[8,0,0,255,7,7,7,127,127,7,7,7,7],[9,0,112,510,271,7,7,7,455,455,455,510,508],[10,0,0,903,903,903,903,1023,1023,903,903,903,903],[3,0,0,7,7,7,7,7,7,7,7,7,7],[4,0,0,14,14,14,14,14,14,14,14,15,7],[11,0,0,967,231,119,127,63,127,247,231,455,1927],[9,7,7,7,7,7,7,7,7,7,7,7,7,7,511,511],[12,0,0,3591,3855,3855,3999,3999,4095,4095,3831,3831,3687],[10,0,0,903,911,927,959,951,1015,999,967,967,903],[11,0,112,510,911,1799,1799,1799,1799,1799,903,1022,508],[9,0,0,255,487,455,455,247,127,7,7,7,7],[11,0,112,510,911,1799,1799,1799,1799,1799,903,1022,508,224,448,384],[10,0,0,255,455,455,455,255,63,119,231,487,967],[9,0,56,255,135,3,7,255,254,448,448,255,127],[8,0,0,255,28,28,28,28,28,28,28,28,28],[10,0,0,903,903,903,903,903,903,903,903,510,252],[16,61447,28687,30735,30750,14366,15388,7228,7740,3704,3704,3952,2032,2016,992,992],[13,0,0,7395,7411,7667,7671,3519,3999,3999,3855,3854,1550],[11,0,0,1927,462,254,252,120,120,252,494,463,1927],[10,0,0,967,455,238,238,124,56,56,56,56,56],[8,0,0,255,224,96,112,56,28,14,6,255,255],[4,0,0,15,3,3,3,3,3,3,3,3,3,3,15,15],[7,0,0,7,7,14,14,28,28,56,56,112,112],[5,0,0,31,28,28,28,28,28,28,28,28,28,28,31,31],[7,0,0,28,30,62,51,115],[7,0,0,0,0,0,0,0,0,0,0,0,0,127,127],[4,0,0,15],[7,0,0,0,0,30,127,112,126,127,115,127,127],[8,0,0,7,7,63,127,231,231,231,231,127,63],[6,0,0,0,0,60,63,7,3,3,7,63,62],[7,0,0,96,96,124,127,103,99,99,103,127,126],[7,0,0,0,0,28,127,119,127,127,3,127,126],[6,0,62,63,7,31,31,7,7,7,7,7,7],[8,0,0,0,0,124,255,231,227,227,231,255,254,96,127,31],[8,0,0,7,7,63,127,231,231,231,231,231,231],[3,0,0,7,0,7,7,7,7,7,7,7,7],[3,0,0,7,0,7,7,7,7,7,7,7,7,7,3,3],[8,0,0,7,7,127,255,231,231,127,63,119,231],[3,0,0,7,7,7,7,7,7,7,7,7,7],[12,0,0,0,0,1979,4095,3703,3703,3703,3703,3703,3703],[8,0,0,0,0,59,127,231,231,231,231,231,231],[8,0,0,0,0,60,127,231,227,227,227,127,62],[8,0,0,0,0,30,127,231,231,231,231,127,63,7,7,7],[8,0,0,0,0,124,255,231,227,227,227,255,254,224,224,224],[5,0,0,0,0,27,31,7,7,7,7,7,7],[7,0,0,0,0,62,63,3,31,127,112,127,63],[4,0,0,0,3,15,15,7,7,7,7,15,15],[8,0,0,0,0,231,231,231,231,231,231,255,254],[8,0,0,0,0,227,115,119,55,62,62,30,28],[11,0,0,0,0,1843,1907,1915,1023,1023,991,974,462],[8,0,0,0,0,227,119,62,30,28,62,119,243],[8,0,0,0,0,227,115,119,55,62,62,30,28,12,14,7],[7,0,0,0,0,127,127,56,28,14,6,7,63],[5,0,0,28,14,14,14,14,7,7,14,14,14,14,14,28],[3,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7],[5,0,0,7,7,7,7,7,30,30,7,7,7,7,7,3],[6,0,0,0,0,0,0,0,47,63],[11,136,260,260,260,136,112,32,32,2047,32,32,32,32],[13,6144,5120,4608,4352,4224,4188,34,65,65,65,34,28]],[[3,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,7,7,7],[19,0,0,0,57792,29120,29120,28864,524286,524286,14561,14432,6256,7280,262143,131071,3128,3640,3640,3612],[11,0,0,0,120,120,508,1022,991,7,15,511,1022,1984,1920,967,1023,510,120,120],[16,0,0,0,30846,15615,7399,7911,4071,2046,1980,960,480,16096,32752,30712,25528,62396,32542,15887],[15,0,0,0,2044,2046,1823,15,15,3599,7710,32764,32766,7711,7695,7695,7695,4031,4094,1016],[4,0,0,0,15,15,7,7,7],[6,0,0,0,60,28,30,30,30,14,15,15,15,15,15,15,15,15,15,14,30,30,28,60],[5,0,0,0,7,7,15,15,15,14,30,30,30,30,30,30,30,30,14,15,15,15,7,7],[7,0,0,0,12,45,127,78,30,63],[8,0,0,0,0,0,0,0,0,0,28,28,28,255,255,28,28,28],[5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,15,15,7,7],[5,0,0,0,0,0,0,0,0,0,0,0,0,31,31],[3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,7],[11,0,0,0,1920,1920,960,960,480,480,240,240,120,124,60,62,30,31,15,7],[15,0,0,0,2032,8188,16254,15390,31759,30735,30735,30735,30735,30735,30735,31759,15390,16254,8188,2032],[5,0,0,0,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[12,0,0,0,1020,2047,4063,3843,3840,3840,3840,1920,1984,992,496,248,124,4095,4095,4095],[12,0,0,0,511,2047,1999,3840,3840,1792,1984,1020,1020,1920,3840,3840,3840,2047,2047,511],[13,0,0,0,960,480,480,240,120,3960,3900,3870,3870,3855,4095,8191,8191,3840,3840,3840],[12,0,0,0,2046,2046,14,14,14,14,511,2047,1991,3841,3840,3840,3840,1927,2047,510],[13,0,0,256,448,992,1016,124,60,30,2046,4095,7951,7695,7695,7695,7695,7998,4092,1016],[11,0,0,0,2047,2047,2047,1920,960,960,480,480,240,240,120,60,60,30,30,15],[13,0,0,0,2044,4094,8127,7695,7695,7695,4094,2044,4094,7695,7695,7695,7695,8127,4094,2044],[13,0,0,0,2040,4094,7966,7695,7695,7183,7183,7711,8190,8188,3840,3968,1984,1008,504,112],[4,0,0,0,0,0,0,0,7,7,7,0,0,0,0,0,0,7,7,7],[5,0,0,0,0,0,0,0,30,30,30,0,0,0,0,0,0,0,30,15,15,7,7],[10,0,0,0,0,0,0,0,0,896,992,1016,255,31,15,127,1020,992,896],[8,0,0,0,0,0,0,0,0,0,0,255,255,0,0,255,255],[11,0,0,0,0,0,0,0,0,7,31,127,1020,2016,1984,1016,255,31,7],[10,0,0,0,255,511,995,960,896,960,960,510,254,30,30,30,0,30,30,30],[23,0,0,0,131008,524272,1032696,2031740,1982238,3997598,4063119,3792911,3792911,7995279,7995343,3793871,3793871,4060111,4063198,2097054,2080828,491772,2032,2016],[17,0,0,0,960,2016,2016,4080,4080,3696,7800,7800,15420,16316,32732,32734,28766,61455,61455,122887],[13,0,0,0,2047,4095,4095,7687,3591,3847,1927,999,4071,3847,7687,7687,7687,4095,4095,1023],[14,0,0,0,16368,16376,15612,62,30,15,15,15,15,15,15,30,62,15868,16376,16352],[15,0,0,0,1023,4095,8191,15879,15367,30727,30727,30727,30727,30727,15367,15367,15879,8191,4095,1023],[12,0,0,0,2047,2047,2047,7,7,7,7,2047,2047,7,7,7,7,4095,4095,4095],[11,0,0,0,2047,2047,2047,7,7,7,7,2047,2047,7,7,7,7,7,7,7],[14,0,0,0,16368,16376,15612,62,30,15,15,15,15,15375,15375,15390,15422,16124,16376,16352],[14,0,0,0,15367,15367,15367,15367,15367,15367,15367,16383,16383,15367,15367,15367,15367,15367,15367,15367],[3,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],[6,0,0,0,56,56,56,56,56,56,56,56,56,56,56,56,60,63,31,15],[15,0,0,0,31751,7687,3847,1927,1991,999,503,247,503,999,1991,1927,3847,7943,15879,31751],[10,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,1023,1023,1023],[17,0,0,0,122895,122895,127007,127007,129087,129087,129087,121983,121975,122615,118503,118759,118759,116679,116679,115591],[15,0,0,0,30735,30751,30751,30783,30847,30847,30967,31207,31687,31687,32647,32519,32519,32263,31751,30727],[17,0,0,0,8176,32764,32508,63550,61470,122895,122895,122895,122895,122895,122895,61470,63550,32508,16376,8176],[13,0,0,0,1023,4095,4095,3847,7687,3847,3847,4039,2023,487,7,7,7,7,7,7],[17,0,0,0,8176,32764,32508,63550,61470,122895,122895,122895,122895,122895,122895,61470,63550,65276,32760,8176,3840,7680,15360,15360],[14,0,0,0,2047,4095,4095,7687,7687,3847,3847,2023,1015,487,999,1991,1927,3847,7943,15879],[13,0,0,0,4088,8190,7999,15,15,15,31,4095,8190,7680,7680,7680,7680,8095,4095,1022],[12,0,0,0,4095,4095,4095,112,112,112,112,112,112,112,112,112,112,112,112,112],[14,0,0,0,15367,15367,15367,15367,15367,15367,15367,15367,15367,15367,15367,15375,15375,8190,8190,2040],[17,0,0,0,126991,61455,63503,30751,30750,15422,15420,7740,7800,7800,4088,4080,2032,2016,992,992],[21,0,0,0,1969927,921351,991119,991119,999311,999375,473551,489966,522478,520446,520446,258174,254078,254076,254012,245820],[16,0,0,0,63503,30751,15422,15932,8056,4080,2032,992,2016,2032,4080,8056,15932,15422,30751,63503],[15,0,0,0,30735,15375,15390,7710,7740,3900,1912,2032,1008,992,480,480,480,480,480,480],[12,0,0,0,4095,4095,4095,1920,1920,960,480,240,120,120,60,30,15,4095,4095,4095],[7,0,0,0,127,127,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,127,127],[11,0,0,0,15,15,31,30,60,60,120,120,240,240,480,480,960,960,1920,1920],[6,0,0,0,63,63,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,63,63],[11,0,0,0,112,120,248,252,478,974,911,1927],[11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2047,2047],[5,0,0,0,15,15,30],[11,0,0,0,0,0,0,0,252,1022,2046,1920,1920,2046,2047,1935,1935,1999,2047,1918],[12,0,0,0,15,15,15,15,511,2047,2047,3855,3855,3855,3855,3855,3855,2015,2047,511],[10,0,0,0,0,0,0,0,1016,1022,1022,15,15,15,15,15,15,830,1022,1016],[12,0,0,0,3840,3840,3840,3840,4088,4094,4095,3855,3855,3855,3855,3855,3855,4094,4094,2040],[12,0,0,0,0,0,0,0,248,1022,2046,1935,1807,2047,4095,15,15,1598,2046,2040],[9,0,0,240,508,510,30,15,255,255,255,15,15,15,15,15,15,15,15,15],[12,0,0,0,0,0,0,0,1008,4092,4094,3855,3855,3855,3855,3855,3855,4095,4094,4088,3840,1922,2046,510],[12,0,0,0,15,15,15,15,1007,2047,4095,3855,3855,3855,3855,3855,3855,3855,3855,3855],[4,0,0,0,15,15,0,0,15,15,15,15,15,15,15,15,15,15,15,15],[4,0,0,0,15,15,0,0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,7],[13,0,0,0,15,15,15,15,1007,4095,4095,3599,7695,3855,2031,495,975,1935,3983,7951],[4,0,0,0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15],[19,0,0,0,0,0,0,0,61935,262143,262143,233359,231311,493455,493455,493455,493455,493455,493455,493455],[12,0,0,0,0,0,0,0,1007,2047,4095,3855,3855,3855,3855,3855,3855,3855,3855,3855],[12,0,0,0,0,0,0,0,504,2046,2046,3855,3855,3855,3855,3855,3855,3999,2046,504],[12,0,0,0,0,0,0,0,510,2047,2047,3855,3855,3855,3855,3855,3855,2047,2047,511,15,15,15,15],[12,0,0,0,0,0,0,0,2032,4092,4094,3855,3855,3855,3855,3855,3855,4095,4094,4092,3840,3840,3840,3840],[7,0,0,0,0,0,0,0,111,127,127,31,15,15,15,15,15,15,15,15],[11,0,0,0,0,0,0,0,508,1022,991,7,15,511,1022,1984,1920,967,1023,510],[7,0,0,0,0,0,7,7,127,127,127,15,15,15,15,15,15,31,127,126],[12,0,0,0,0,0,0,0,3855,3855,3855,3855,3855,3855,3855,3855,3855,4062,4094,3964],[12,0,0,0,0,0,0,0,3847,1927,1935,1935,974,990,478,508,508,252,248,120],[17,0,0,0,0,0,0,0,123847,123847,124879,59375,59375,61422,65278,32382,32382,31868,31804,15420],[12,0,0,0,0,0,0,0,3847,1935,990,510,508,248,248,508,508,990,1935,3975],[12,0,0,0,0,0,0,0,3847,1799,1935,1935,974,990,478,508,508,252,248,120,120,60,62,30],[10,0,0,0,0,0,0,0,1023,1023,1023,480,480,240,120,60,30,15,1023,1023],[7,0,0,0,124,60,60,28,30,30,30,30,31,15,7,15,30,30,30,30,30,28,60,124],[3,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],[7,0,0,0,15,15,14,30,30,30,30,30,62,124,124,60,30,30,30,30,30,14,15,15],[8,0,0,0,0,0,0,0,0,0,0,0,3,255,255,240],[32,4261539840,4279238144,3753901952,3758096320,2415919088,134088696,66585592,132120828,130023548,264241214,260046910,260046911,528482335,528482335,528482335,528482335,260046911,260046911,264241214,130023550,132120828,66060792,66979832],[32,534774780,532677116,1065353470,1056964734,2130706559,2130706559,2113929279,2113929279,2113929279,2130706495,2130706559,2130706687,1065353470,532677116,535824380,536838140,268435448,134217712,67108800,16777088,4193792,1046528,520192]],[[3,0,7,7,7,7,7,7,7,7,7,7,0,7,7],[15,0,3168,3696,1648,1584,32767,1849,824,792,792,8191,412,396,462],[8,0,60,60,126,255,135,7,127,254,224,227,255,60,60],[12,0,3614,1855,947,947,511,254,240,112,4088,3804,3292,4046,1991],[11,0,56,254,143,7,391,911,2046,2047,903,903,967,511,252],[3,0,7,7,7,7],[5,0,28,14,14,15,7,7,7,7,7,7,7,7,7,14,14,30],[5,0,7,7,15,14,14,14,14,14,30,14,14,14,14,14,7,7],[5,0,6,6,31,22,15,13],[6,0,0,0,0,0,0,14,14,63,63,14,14,14],[4,0,0,0,0,0,0,0,0,0,0,0,0,15,7,7,7],[4,0,0,0,0,0,0,0,0,15,15],[2,0,0,0,0,0,0,0,0,0,0,0,0,3,3],[9,0,480,224,240,112,120,56,60,28,30,14,15,7,7],[12,0,240,1020,2014,1807,1799,3847,3847,3847,3847,1799,1935,1022,508],[3,0,6,7,7,7,7,7,7,7,7,7,7,7,7],[9,0,60,255,487,448,448,448,480,240,120,60,30,511,511],[9,0,62,255,487,448,448,480,254,254,448,448,481,255,127],[10,0,224,112,120,56,476,478,462,463,511,1023,960,448,448],[9,0,511,511,7,7,7,127,255,480,448,448,448,511,127],[10,0,96,240,252,30,14,511,1023,903,903,903,911,1022,252],[9,0,511,511,224,224,112,112,56,56,28,30,14,15,7],[10,0,120,510,975,903,903,510,510,1023,903,903,903,1023,510],[10,0,120,510,975,903,903,903,975,1022,960,480,240,124,60],[3,0,0,0,0,0,7,7,0,0,0,0,0,7,7],[3,0,0,0,0,0,7,7,0,0,0,0,0,7,7,7,3],[8,0,0,0,0,0,192,240,126,31,7,31,252,240,128],[7,0,0,0,0,0,0,0,127,127,0,127,127],[9,0,0,0,0,0,1,15,63,248,480,252,63,7,1],[8,0,14,127,113,224,224,112,127,31,7,7,0,7,7],[16,0,1984,16376,63612,57374,53231,57319,56327,57223,57319,56567,56439,57335,65518,63518,508,504],[13,0,240,240,496,504,1016,924,924,1822,2030,4094,3607,7687,7175],[11,0,255,1023,967,1927,903,967,503,967,1927,1927,1927,1023,511],[11,0,480,2044,1854,15,7,7,7,7,7,15,1054,2044,2040],[12,0,127,1023,1991,3847,3591,3591,3591,3591,3591,3847,1927,2047,511],[10,0,1023,1023,7,7,7,7,511,511,7,7,7,1023,1023],[9,0,511,511,7,7,7,7,511,511,7,7,7,7,7],[11,0,480,2044,1854,15,7,7,7,1799,1799,1807,1822,2046,2040],[12,0,3591,3591,3591,3591,3591,3591,4095,4095,3591,3591,3591,3591,3591],[3,0,7,7,7,7,7,7,7,7,7,7,7,7,7],[5,0,28,28,28,28,28,28,28,28,28,28,30,15,7],[13,0,3591,1799,903,455,487,247,119,247,487,967,1927,1799,7943],[8,0,7,7,7,7,7,7,7,7,7,7,7,255,255],[14,0,14351,14351,15375,15391,15903,15935,16191,16247,15223,15351,15335,14823,14791],[12,0,3591,3599,3615,3647,3647,3703,3815,4071,4039,3975,3975,3847,3591],[13,0,496,2044,4030,7695,7175,7175,7175,7175,7175,7695,3870,4094,1016],[11,0,255,1023,967,1927,1927,903,1015,503,55,7,7,7,7],[13,0,496,2044,4030,7695,7175,7175,7175,7175,7175,7695,3870,4094,1016,960,1920,1792,768],[12,0,255,1023,967,1927,1927,903,503,247,231,487,967,1927,3847],[10,0,248,1022,911,7,7,15,511,1020,896,896,897,1023,255],[9,0,511,511,56,56,56,56,56,56,56,56,56,56,56],[12,0,3591,3591,3591,3591,3591,3591,3591,3591,3591,3855,1806,2046,1016],[13,0,7687,7687,3591,3855,1806,1950,926,924,1020,504,504,240,240],[16,0,57795,58311,58343,29671,30695,30583,30583,32311,32318,15934,15390,15390,15390],[13,0,7687,3855,1934,924,1020,504,240,248,504,1020,1950,3855,7687],[12,0,3847,1799,1935,910,476,476,248,248,112,112,112,112,112],[10,0,1023,1023,896,448,480,224,112,56,28,30,15,1023,1023],[5,0,31,31,7,7,7,7,7,7,7,7,7,7,7,7,31,31],[9,0,7,7,15,14,30,28,60,56,120,112,240,224,480],[6,0,63,63,56,56,56,56,56,56,56,56,56,56,56,56,63,63],[9,0,24,60,60,126,118,231,451],[9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,511,511],[4,0,3,7,14],[9,0,0,0,0,0,255,255,480,508,511,487,487,511,510],[9,0,7,7,7,7,255,511,455,455,455,455,455,511,127],[8,0,0,0,0,0,254,255,7,7,7,7,7,255,252],[9,0,448,448,448,448,510,511,455,455,455,455,455,511,508],[9,0,0,0,0,0,254,255,455,455,511,7,7,254,252],[5,0,30,31,7,3,31,31,3,3,3,3,3,3,3],[9,0,0,0,0,0,510,511,455,455,455,455,455,511,508,448,511,255],[9,0,7,7,7,7,255,511,455,455,455,455,455,455,455],[3,0,7,7,0,0,7,7,7,7,7,7,7,7,7],[3,0,7,7,0,0,7,7,7,7,7,7,7,7,7,7,7,3,3],[10,0,7,7,7,7,511,1023,903,967,487,119,231,487,967],[3,0,7,7,7,7,7,7,7,7,7,7,7,7,7],[14,0,0,0,0,0,8191,16383,14823,14791,14791,14791,14791,14791,14791],[9,0,0,0,0,0,255,511,455,455,455,455,455,455,455],[10,0,0,0,0,0,254,511,455,455,967,455,455,511,124],[9,0,0,0,0,0,255,511,455,455,455,455,455,511,127,7,7,7],[9,0,0,0,0,0,510,511,455,455,455,455,455,511,510,448,448,448],[6,0,0,0,0,0,63,63,7,7,7,7,7,7,7],[8,0,0,0,0,0,255,255,7,63,255,224,224,255,127],[5,0,0,0,3,7,31,31,7,7,7,7,7,31,30],[9,0,0,0,0,0,455,455,455,455,455,455,455,511,510],[9,0,0,0,0,0,451,487,231,239,126,126,126,60,60],[14,0,0,0,0,0,15591,7415,7671,7671,4031,4030,3998,1822,1822],[9,0,0,0,0,0,487,239,126,60,60,124,126,231,487],[9,0,0,0,0,0,451,487,231,239,126,126,126,60,60,28,30,15,6],[8,0,0,0,0,0,255,255,112,56,28,30,15,255,255],[5,0,28,14,14,14,14,14,15,7,3,7,15,14,14,14,14,30],[3,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],[6,0,7,7,7,15,15,14,14,62,60,30,14,14,15,15,7,7],[6,0,0,0,0,0,0,0,0,39,63,56]]],"letters":[["!","#","$","%","&","'","(",")","*","+",",","-",".","\/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"],["!","#","$","%","&","'","(",")","*","+",",","-",".","\/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","♀","♂"],["!","#","$","%","&","'","(",")","*","+",",","-",".","\/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","♂","♀"],["!","#","$","%","&","'","(",")","*","+",",","-",".","\/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"]],"resolutionHeight":1440,"resolutionWidth":2560,"statDistance":0} \ No newline at end of file diff --git a/ARKBreedingStats/ocr/ArkOCR.cs b/ARKBreedingStats/ocr/ArkOCR.cs index a251fa51..b7435685 100644 --- a/ARKBreedingStats/ocr/ArkOCR.cs +++ b/ARKBreedingStats/ocr/ArkOCR.cs @@ -587,10 +587,10 @@ public float[] doOCR(out string OCRText, out string dinoName, out string species else if (statName == "Owner" || statName == "Tribe") r = new Regex(@"(.*)"); else if (statName == "Level") - r = new Regex(@".*:(\d+)"); + r = new Regex(@".*\D(\d+)"); else { - r = new Regex(@"(?:\d+[\.,'][\d\/]%?[\/1])?(\d+[\.,']?\d?)(%)?"); // only the second numbers is interesting after the current weight is not shown anymore + r = new Regex(@"(?:[\d.,%\/]*\/)?(\d+[\.,']?\d?)(%)?"); // only the second numbers is interesting after the current weight is not shown anymore //if (onlyNumbers) //r = new Regex(@"((\d*[\.,']?\d?\d?)\/)?(\d*[\.,']?\d?\d?)"); diff --git a/ARKBreedingStats/species/Kibble.cs b/ARKBreedingStats/species/Kibble.cs index d4f0b89b..6e8c8bc8 100644 --- a/ARKBreedingStats/species/Kibble.cs +++ b/ARKBreedingStats/species/Kibble.cs @@ -1,13 +1,19 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Runtime.Serialization; -namespace ARKBreedingStats { - public class Kibble: Dictionary { - public string RecipeAsText() { +namespace ARKBreedingStats +{ + [Serializable] + public class Kibble : Dictionary + { + public string RecipeAsText() + { string result = ""; - foreach(string s in Keys) { + foreach (string s in Keys) + { result += "\n " + this[s] + " x " + s; } diff --git a/ARKBreedingStats/uiControls/TextBoxSuggest.cs b/ARKBreedingStats/uiControls/TextBoxSuggest.cs new file mode 100644 index 00000000..0d0a71b6 --- /dev/null +++ b/ARKBreedingStats/uiControls/TextBoxSuggest.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ARKBreedingStats.uiControls +{ + public class TextBoxSuggest : TextBox + { + + public TextBoxSuggest() + { + Enter += TextBoxSuggest_Enter; + } + + private void TextBoxSuggest_Enter(object sender, EventArgs e) + { + BeginInvoke((Action)SelectAll); + } + + } +} diff --git a/ARKBreedingStats/ver.txt b/ARKBreedingStats/ver.txt index 536c9ddf..524eabdf 100644 --- a/ARKBreedingStats/ver.txt +++ b/ARKBreedingStats/ver.txt @@ -1 +1 @@ -278.42.1,0.25.3 +278.42.1,0.26.0 diff --git a/images.zip b/images.zip index 828404be..f7c956f6 100644 Binary files a/images.zip and b/images.zip differ