From d7a501c168ef0238b08ddef6312229237ea58f2c Mon Sep 17 00:00:00 2001 From: Kurt Date: Tue, 18 Dec 2018 17:15:35 -0800 Subject: [PATCH] Relocate some logic to interfaces --- PKHeX.Core/Saves/SAV3.cs | 5 +- PKHeX.Core/Saves/SAV6.cs | 14 +++-- PKHeX.Core/Saves/SAV7.cs | 10 ++-- PKHeX.Core/Saves/SAV7b.cs | 10 ++-- PKHeX.Core/Saves/SaveFile.cs | 8 --- .../Saves/Substructures/Gen6/IPokePuff.cs | 9 +++ .../Substructures/{Misc => Gen6}/PSS6.cs | 0 .../Saves/Substructures/{Misc => Gen7}/QR7.cs | 0 .../Substructures/Misc/ISecureValueStorage.cs | 8 +++ .../Controls/SAV Editor/SAVEditor.cs | 18 +++--- PKHeX.WinForms/MainWindow/Main.cs | 9 ++- .../Gen6/SAV_Pokepuff.Designer.cs | 30 +--------- .../Save Editors/Gen6/SAV_Pokepuff.cs | 56 +++++++++---------- 13 files changed, 80 insertions(+), 97 deletions(-) create mode 100644 PKHeX.Core/Saves/Substructures/Gen6/IPokePuff.cs rename PKHeX.Core/Saves/Substructures/{Misc => Gen6}/PSS6.cs (100%) rename PKHeX.Core/Saves/Substructures/{Misc => Gen7}/QR7.cs (100%) create mode 100644 PKHeX.Core/Saves/Substructures/Misc/ISecureValueStorage.cs diff --git a/PKHeX.Core/Saves/SAV3.cs b/PKHeX.Core/Saves/SAV3.cs index 78995a96f..4a8e4a927 100644 --- a/PKHeX.Core/Saves/SAV3.cs +++ b/PKHeX.Core/Saves/SAV3.cs @@ -240,7 +240,6 @@ protected override byte[] Write(bool DSV) // Configuration public override SaveFile Clone() { return new SAV3(Write(DSV:false), Version) {Japanese = Japanese}; } - public override bool IndeterminateSubVersion => Version == GameVersion.FRLG; public override int SIZE_STORED => PKX.SIZE_3STORED; protected override int SIZE_PARTY => PKX.SIZE_3PARTY; @@ -794,7 +793,7 @@ public override byte[] SetString(string value, int maxLength, int PadToSize = 0, private uint EBerryChecksum => BitConverter.ToUInt32(Data, BlockOfs[4] + OFFSET_EBERRY + SIZE_EBERRY - 4); private bool IsEBerryChecksumValid { get; set; } - public override string EBerryName + public string EBerryName { get { @@ -804,7 +803,7 @@ public override string EBerryName } } - public override bool IsEBerryIsEnigma => string.IsNullOrEmpty(EBerryName.Trim()); + public bool IsEBerryIsEnigma => string.IsNullOrEmpty(EBerryName.Trim()); private void LoadEReaderBerryData() { diff --git a/PKHeX.Core/Saves/SAV6.cs b/PKHeX.Core/Saves/SAV6.cs index a2192742a..3062662f7 100644 --- a/PKHeX.Core/Saves/SAV6.cs +++ b/PKHeX.Core/Saves/SAV6.cs @@ -7,7 +7,7 @@ namespace PKHeX.Core /// /// Generation 6 object. /// - public sealed class SAV6 : SaveFile, ITrainerStatRecord + public sealed class SAV6 : SaveFile, ITrainerStatRecord, IPokePuff, ISecureValueStorage { // Save Data Attributes protected override string BAKText => $"{OT} ({Version}) - {LastSavedTime}"; @@ -56,6 +56,8 @@ public SAV6(byte[] data = null) public override int MaxGameID => Legal.MaxGameID_6; // OR // Feature Overrides + public int Puff { get; set; } = -1; + public bool HasPuffData => Puff >= 0; // Blocks & Offsets private readonly int BlockInfoOffset; @@ -64,16 +66,16 @@ public SAV6(byte[] data = null) public override bool ChecksumsValid => Blocks.GetChecksumsValid(Data); public override string ChecksumInfo => Blocks.GetChecksumInfo(Data); - public override ulong? Secure1 + public ulong TimeStampCurrent { get => BitConverter.ToUInt64(Data, BlockInfoOffset - 0x14); - set => BitConverter.GetBytes(value ?? 0).CopyTo(Data, BlockInfoOffset - 0x14); + set => BitConverter.GetBytes(value).CopyTo(Data, BlockInfoOffset - 0x14); } - public override ulong? Secure2 + public ulong TimeStampPrevious { get => BitConverter.ToUInt64(Data, BlockInfoOffset - 0xC); - set => BitConverter.GetBytes(value ?? 0).CopyTo(Data, BlockInfoOffset - 0xC); + set => BitConverter.GetBytes(value).CopyTo(Data, BlockInfoOffset - 0xC); } private void GetSAVOffsets() @@ -632,7 +634,7 @@ public override void SetDaycareHasEgg(int loc, bool hasEgg) Data[ofs + 0x1E0] = (byte)(hasEgg ? 1 : 0); } - public byte[] Puffs { get => GetData(Puff, 100); set => value.CopyTo(Data, Puff); } + public byte[] Puffs { get => GetData(Puff, 100); set => SetData(value, Puff); } public int PuffCount { get => BitConverter.ToInt32(Data, Puff + 100); set => BitConverter.GetBytes(value).CopyTo(Data, Puff + 100); } public int[] SelectItems diff --git a/PKHeX.Core/Saves/SAV7.cs b/PKHeX.Core/Saves/SAV7.cs index 3949f8dbb..5d43830de 100644 --- a/PKHeX.Core/Saves/SAV7.cs +++ b/PKHeX.Core/Saves/SAV7.cs @@ -8,7 +8,7 @@ namespace PKHeX.Core /// /// Generation 7 object. /// - public sealed class SAV7 : SaveFile, ITrainerStatRecord + public sealed class SAV7 : SaveFile, ITrainerStatRecord, ISecureValueStorage { // Save Data Attributes protected override string BAKText => $"{OT} ({Version}) - {LastSavedTime}"; @@ -109,16 +109,16 @@ protected override void SetChecksums() IsMemeCryptoApplied = true; } - public override ulong? Secure1 + public ulong TimeStampCurrent { get => BitConverter.ToUInt64(Data, BlockInfoOffset - 0x14); - set => BitConverter.GetBytes(value ?? 0).CopyTo(Data, BlockInfoOffset - 0x14); + set => BitConverter.GetBytes(value).CopyTo(Data, BlockInfoOffset - 0x14); } - public override ulong? Secure2 + public ulong TimeStampPrevious { get => BitConverter.ToUInt64(Data, BlockInfoOffset - 0xC); - set => BitConverter.GetBytes(value ?? 0).CopyTo(Data, BlockInfoOffset - 0xC); + set => BitConverter.GetBytes(value).CopyTo(Data, BlockInfoOffset - 0xC); } private void GetSAVOffsets() diff --git a/PKHeX.Core/Saves/SAV7b.cs b/PKHeX.Core/Saves/SAV7b.cs index a72d22a6d..523038d56 100644 --- a/PKHeX.Core/Saves/SAV7b.cs +++ b/PKHeX.Core/Saves/SAV7b.cs @@ -5,7 +5,7 @@ namespace PKHeX.Core { - public sealed class SAV7b : SaveFile + public sealed class SAV7b : SaveFile, ISecureValueStorage { protected override string BAKText => $"{OT} ({Version}) - {Played.LastSavedTime}"; public override string Filter => "savedata|*.bin"; @@ -195,16 +195,16 @@ public override byte[] SetString(string value, int maxLength, int PadToSize = 0, return StringConverter.SetString7b(value, maxLength, Language, PadToSize, PadWith); } - public override ulong? Secure1 + public ulong TimeStampCurrent { get => BitConverter.ToUInt64(Data, BlockInfoOffset - 0x14); - set => BitConverter.GetBytes(value ?? 0).CopyTo(Data, BlockInfoOffset - 0x14); + set => BitConverter.GetBytes(value).CopyTo(Data, BlockInfoOffset - 0x14); } - public override ulong? Secure2 + public ulong TimeStampPrevious { get => BitConverter.ToUInt64(Data, BlockInfoOffset - 0xC); - set => BitConverter.GetBytes(value ?? 0).CopyTo(Data, BlockInfoOffset - 0xC); + set => BitConverter.GetBytes(value).CopyTo(Data, BlockInfoOffset - 0xC); } public override GameVersion Version diff --git a/PKHeX.Core/Saves/SaveFile.cs b/PKHeX.Core/Saves/SaveFile.cs index a48063ccf..5d572be63 100644 --- a/PKHeX.Core/Saves/SaveFile.cs +++ b/PKHeX.Core/Saves/SaveFile.cs @@ -28,7 +28,6 @@ public abstract class SaveFile : ITrainerInfo, IGameValueLimit public bool Japanese { get; protected set; } public virtual string PlayTimeString => $"{PlayedHours}ː{PlayedMinutes:00}ː{PlayedSeconds:00}"; // not : public bool IndeterminateGame => Version == GameVersion.Unknown; - public virtual bool IndeterminateSubVersion => false; public abstract string Extension { get; } public virtual string[] PKMExtensions => PKM.Extensions.Where(f => @@ -103,7 +102,6 @@ protected virtual byte[] Write(bool DSV) public bool HasBerryField => BerryField > -1; public bool HasHoF => HoF > -1; public bool HasSecretBase => SecretBase > -1; - public bool HasPuff => Puff > -1; public bool HasPSS => PSS > -1; public bool HasOPower => OPower > -1; public bool HasJPEG => JPEGData != null; @@ -148,7 +146,6 @@ protected virtual byte[] Write(bool DSV) public int PokeDex { get; protected set; } = int.MinValue; public int SuperTrain { get; protected set; } = int.MinValue; public int SecretBase { get; protected set; } = int.MinValue; - public int Puff { get; protected set; } = int.MinValue; public int PSS { get; protected set; } = int.MinValue; public int BerryField { get; protected set; } = int.MinValue; public int OPower { get; protected set; } = int.MinValue; @@ -430,8 +427,6 @@ public bool IsPartyAllEggs(params int[] except) public abstract void SetBoxName(int box, string value); public virtual int GameSyncIDSize { get; } = 8; public virtual string GameSyncID { get => null; set { } } - public virtual ulong? Secure1 { get => null; set { } } - public virtual ulong? Secure2 { get => null; set { } } // Daycare public int DaycareIndex = 0; @@ -839,9 +834,6 @@ public bool IsRangeAll(int Offset, int Length, int value) public string GetString(int offset, int length) => GetString(Data, offset, length); public abstract byte[] SetString(string value, int maxLength, int PadToSize = 0, ushort PadWith = 0); - public virtual string EBerryName => string.Empty; - public virtual bool IsEBerryIsEnigma => true; - /// /// Compresses the by pulling out the empty storage slots and putting them at the end, retaining all existing data. /// diff --git a/PKHeX.Core/Saves/Substructures/Gen6/IPokePuff.cs b/PKHeX.Core/Saves/Substructures/Gen6/IPokePuff.cs new file mode 100644 index 000000000..293e91116 --- /dev/null +++ b/PKHeX.Core/Saves/Substructures/Gen6/IPokePuff.cs @@ -0,0 +1,9 @@ +namespace PKHeX.Core +{ + public interface IPokePuff + { + bool HasPuffData { get; } + byte[] Puffs { get; set; } + int PuffCount { get; set; } + } +} \ No newline at end of file diff --git a/PKHeX.Core/Saves/Substructures/Misc/PSS6.cs b/PKHeX.Core/Saves/Substructures/Gen6/PSS6.cs similarity index 100% rename from PKHeX.Core/Saves/Substructures/Misc/PSS6.cs rename to PKHeX.Core/Saves/Substructures/Gen6/PSS6.cs diff --git a/PKHeX.Core/Saves/Substructures/Misc/QR7.cs b/PKHeX.Core/Saves/Substructures/Gen7/QR7.cs similarity index 100% rename from PKHeX.Core/Saves/Substructures/Misc/QR7.cs rename to PKHeX.Core/Saves/Substructures/Gen7/QR7.cs diff --git a/PKHeX.Core/Saves/Substructures/Misc/ISecureValueStorage.cs b/PKHeX.Core/Saves/Substructures/Misc/ISecureValueStorage.cs new file mode 100644 index 000000000..13a74c909 --- /dev/null +++ b/PKHeX.Core/Saves/Substructures/Misc/ISecureValueStorage.cs @@ -0,0 +1,8 @@ +namespace PKHeX.Core +{ + public interface ISecureValueStorage + { + ulong TimeStampPrevious { get; set; } + ulong TimeStampCurrent { get; set; } + } +} \ No newline at end of file diff --git a/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs b/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs index f1cda5ccf..5890f797c 100644 --- a/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs +++ b/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs @@ -500,13 +500,13 @@ private void UpdateStringSeed(object sender, EventArgs e) SAV.GameSyncID = value; SAV.Edited = true; } - else if (SAV.Generation >= 6) + else if (SAV is ISecureValueStorage s) { var value = Convert.ToUInt64(filterText, 16); if (tb == TB_Secure1) - SAV.Secure1 = value; + s.TimeStampCurrent = value; else if (tb == TB_Secure2) - SAV.Secure2 = value; + s.TimeStampPrevious = value; SAV.Edited = true; } } @@ -966,7 +966,7 @@ private void ToggleViewSubEditors(SaveFile sav) PAN_BattleBox.Visible = L_BattleBox.Visible = L_ReadOnlyPBB.Visible = sav.HasBattleBox; GB_Daycare.Visible = sav.HasDaycare; B_OpenSecretBase.Enabled = sav.HasSecretBase; - B_OpenPokepuffs.Enabled = sav.HasPuff; + B_OpenPokepuffs.Enabled = sav is IPokePuff p && p.HasPuffData; B_OUTPasserby.Enabled = sav.HasPSS; B_OpenBoxLayout.Enabled = sav.HasNamableBoxes; B_OpenWondercards.Enabled = sav.HasWondercards; @@ -1020,21 +1020,23 @@ private void ToggleViewMisc(SaveFile sav) L_SaveSlot.Visible = CB_SaveSlot.Visible = false; } + if (sav is ISecureValueStorage s) + { + TB_Secure1.Text = s.TimeStampCurrent.ToString("X16"); + TB_Secure2.Text = s.TimeStampPrevious.ToString("X16"); + } + switch (sav.Generation) { case 6: TB_GameSync.Enabled = sav.GameSyncID != null; TB_GameSync.MaxLength = sav.GameSyncIDSize; TB_GameSync.Text = (sav.GameSyncID ?? 0.ToString()).PadLeft(sav.GameSyncIDSize, '0'); - TB_Secure1.Text = sav.Secure1?.ToString("X16"); - TB_Secure2.Text = sav.Secure2?.ToString("X16"); break; case 7: TB_GameSync.Enabled = sav.GameSyncID != null; TB_GameSync.MaxLength = sav.GameSyncIDSize; TB_GameSync.Text = (sav.GameSyncID ?? 0.ToString()).PadLeft(sav.GameSyncIDSize, '0'); - TB_Secure1.Text = sav.Secure1?.ToString("X16"); - TB_Secure2.Text = sav.Secure2?.ToString("X16"); break; } } diff --git a/PKHeX.WinForms/MainWindow/Main.cs b/PKHeX.WinForms/MainWindow/Main.cs index 50c007424..55ebd4809 100644 --- a/PKHeX.WinForms/MainWindow/Main.cs +++ b/PKHeX.WinForms/MainWindow/Main.cs @@ -674,8 +674,11 @@ private static bool CheckGCMemoryCard(SAV3GCMemoryCard MC, string path) private static void StoreLegalSaveGameData(SaveFile sav) { - Legal.EReaderBerryIsEnigma = sav.IsEBerryIsEnigma; - Legal.EReaderBerryName = sav.EBerryName; + if (sav is SAV3 sav3) + { + Legal.EReaderBerryIsEnigma = sav3.IsEBerryIsEnigma; + Legal.EReaderBerryName = sav3.EBerryName; + } } private static PKM LoadTemplate(SaveFile sav) @@ -827,7 +830,7 @@ private static bool SanityCheckSAV(ref SaveFile sav) if (sav.Version == GameVersion.FRLG) sav.Personal = dialog.Result == GameVersion.FR ? PersonalTable.FR : PersonalTable.LG; } - else if (sav.IndeterminateSubVersion && sav.Version == GameVersion.FRLG) + else if (sav.Version == GameVersion.FRLG) // IndeterminateSubVersion { string fr = GameInfo.VersionDataSource.First(r => r.Value == (int) GameVersion.FR).Text; string lg = GameInfo.VersionDataSource.First(l => l.Value == (int) GameVersion.LG).Text; diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.Designer.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.Designer.cs index 388d72a40..cc43430d1 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.Designer.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.Designer.cs @@ -35,8 +35,6 @@ private void InitializeComponent() this.B_All = new System.Windows.Forms.Button(); this.B_Sort = new System.Windows.Forms.Button(); this.B_None = new System.Windows.Forms.Button(); - this.L_Count = new System.Windows.Forms.Label(); - this.MT_CNT = new System.Windows.Forms.MaskedTextBox(); ((System.ComponentModel.ISupportInitialize)(this.dgv)).BeginInit(); this.SuspendLayout(); // @@ -61,7 +59,7 @@ private void InitializeComponent() this.dgv.ShowEditingIcon = false; this.dgv.Size = new System.Drawing.Size(200, 186); this.dgv.TabIndex = 11; - this.dgv.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(SAV_Pokepuff.DropClick); + this.dgv.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DropClick); // // B_Save // @@ -115,34 +113,11 @@ private void InitializeComponent() this.B_None.UseVisualStyleBackColor = true; this.B_None.Click += new System.EventHandler(this.B_None_Click); // - // L_Count - // - this.L_Count.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.L_Count.AutoSize = true; - this.L_Count.Location = new System.Drawing.Point(12, 240); - this.L_Count.Name = "L_Count"; - this.L_Count.Size = new System.Drawing.Size(32, 13); - this.L_Count.TabIndex = 17; - this.L_Count.Text = "CNT:"; - // - // MT_CNT - // - this.MT_CNT.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.MT_CNT.Location = new System.Drawing.Point(50, 237); - this.MT_CNT.Mask = "00000"; - this.MT_CNT.Name = "MT_CNT"; - this.MT_CNT.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - this.MT_CNT.Size = new System.Drawing.Size(39, 20); - this.MT_CNT.TabIndex = 18; - this.MT_CNT.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - // // SAV_Pokepuff // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(224, 272); - this.Controls.Add(this.MT_CNT); - this.Controls.Add(this.L_Count); this.Controls.Add(this.B_None); this.Controls.Add(this.B_Sort); this.Controls.Add(this.B_All); @@ -159,7 +134,6 @@ private void InitializeComponent() this.Text = "‎Poké Puffs Editor"; ((System.ComponentModel.ISupportInitialize)(this.dgv)).EndInit(); this.ResumeLayout(false); - this.PerformLayout(); } @@ -171,7 +145,5 @@ private void InitializeComponent() private System.Windows.Forms.Button B_All; private System.Windows.Forms.Button B_Sort; private System.Windows.Forms.Button B_None; - private System.Windows.Forms.Label L_Count; - private System.Windows.Forms.MaskedTextBox MT_CNT; } } \ No newline at end of file diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs index 9cbcd32f2..ad3cba476 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_Pokepuff.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Windows.Forms; using PKHeX.Core; @@ -7,16 +8,17 @@ namespace PKHeX.WinForms { public partial class SAV_Pokepuff : Form { - private readonly SaveFile Origin; - private readonly SAV6 SAV; + private readonly IPokePuff SAV; public SAV_Pokepuff(SaveFile sav) { InitializeComponent(); WinFormsUtil.TranslateInterface(this, Main.CurrentLanguage); - SAV = (SAV6)(Origin = sav).Clone(); + SAV = (SAV6)sav; - Setup(); + var puffs = SAV.Puffs; + Setup(puffs.Length); + LoadPuffs(puffs); new ToolTip().SetToolTip(B_Sort, "Hold CTRL to reverse sort."); new ToolTip().SetToolTip(B_All, "Hold CTRL to best instead of varied."); @@ -25,7 +27,7 @@ public SAV_Pokepuff(SaveFile sav) private readonly string[] pfa = GameInfo.Strings.puffs; private int PuffCount { get; set; } - private void Setup() + private void Setup(int rowCount) { dgv.Rows.Clear(); dgv.Columns.Clear(); @@ -52,10 +54,12 @@ private void Setup() } dgv.Columns.Add(dgvIndex); dgv.Columns.Add(dgvPuff); + dgv.Rows.Add(rowCount); + } - var Puffs = SAV.Puffs; + private void LoadPuffs(byte[] Puffs) + { PuffCount = Puffs.Length; - dgv.Rows.Add(Puffs.Length); for (int i = 0; i < Puffs.Length; i++) { dgv.Rows[i].Cells[0].Value = (i + 1).ToString(); @@ -67,12 +71,12 @@ private void Setup() } dgv.Rows[i].Cells[1].Value = pfa[puffval]; } - MT_CNT.Text = SAV.PuffCount.ToString(); } - private static void DropClick(object sender, DataGridViewCellEventArgs e) + private void DropClick(object sender, DataGridViewCellEventArgs e) { - if (e.ColumnIndex != 1) return; + if (e.ColumnIndex != 1) + return; ((ComboBox)((DataGridView) sender).EditingControl).DroppedDown = true; } @@ -98,8 +102,7 @@ private void B_All_Click(object sender, EventArgs e) Util.Shuffle(newpuffs); } - Array.Copy(newpuffs, 0, SAV.Data, SAV.Puff, PuffCount); - Setup(); + LoadPuffs(newpuffs); } private void B_None_Click(object sender, EventArgs e) @@ -110,41 +113,34 @@ private void B_None_Click(object sender, EventArgs e) newpuffs[2] = 3; newpuffs[3] = 4; newpuffs[4] = 5; - Array.Copy(newpuffs, 0, SAV.Data, SAV.Puff, PuffCount); - Setup(); + LoadPuffs(newpuffs); } private void B_Sort_Click(object sender, EventArgs e) { - var puffs = GetPuffs(false); - Array.Sort(puffs); - if (ModifierKeys == Keys.Control) - Array.Reverse(puffs); - - Array.Copy(puffs, 0, SAV.Data, SAV.Puff, PuffCount); - Setup(); + bool reverse = ModifierKeys == Keys.Control; + var puffs = GetPuffs().GroupBy(z => z != 0); + var result = puffs.SelectMany(z => reverse ? z.OrderByDescending(x => x) : z.OrderBy(x => x)).ToArray(); + LoadPuffs(result); } - private byte[] GetPuffs(bool resize = true) + private byte[] GetPuffs() { - List puffs = new List(); + var puffs = new List(); for (int i = 0; i < dgv.Rows.Count; i++) { string puff = dgv.Rows[i].Cells[1].Value.ToString(); int index = (byte)Array.IndexOf(pfa, puff); puffs.Add((byte)index); } - var arr = puffs.ToArray(); - if (resize && arr.Length != PuffCount) - Array.Resize(ref arr, PuffCount); - return arr; + return puffs.ToArray(); } private void B_Save_Click(object sender, EventArgs e) { - SAV.Puffs = GetPuffs(); - SAV.PuffCount = Util.ToInt32(MT_CNT.Text); - Origin.SetData(SAV.Data, 0); + var puffs = GetPuffs(); + SAV.Puffs = puffs; + SAV.PuffCount = puffs.Length; Close(); } }