diff --git a/PKHeX.Core/Saves/SAV1.cs b/PKHeX.Core/Saves/SAV1.cs
index 6c07eb6b5..8a98e2698 100644
--- a/PKHeX.Core/Saves/SAV1.cs
+++ b/PKHeX.Core/Saves/SAV1.cs
@@ -515,7 +515,7 @@ namespace PKHeX.Core
return GetFlag(Offsets.DexCaught + ofs, bit & 7);
}
- public override void SetStoredSlot(PKM pkm, int offset, bool? trade = null, bool? dex = null)
+ public override void SetStoredSlot(PKM pkm, int offset, PKMImportSetting trade = PKMImportSetting.UseDefault, PKMImportSetting dex = PKMImportSetting.UseDefault)
{
// pkm that have never been boxed have yet to save the 'current level' for box indication
// set this value at this time
diff --git a/PKHeX.Core/Saves/SAV3RSBox.cs b/PKHeX.Core/Saves/SAV3RSBox.cs
index de7ac79c5..9c0855e05 100644
--- a/PKHeX.Core/Saves/SAV3RSBox.cs
+++ b/PKHeX.Core/Saves/SAV3RSBox.cs
@@ -181,21 +181,11 @@ namespace PKHeX.Core
protected override void SetDex(PKM pkm) { /* No Pokedex for this game, do nothing */ }
- public override void SetStoredSlot(PKM pkm, int offset, bool? trade = null, bool? dex = null)
+ public override void SetStoredSlot(PKM pkm, int offset, PKMImportSetting trade = PKMImportSetting.UseDefault, PKMImportSetting dex = PKMImportSetting.UseDefault)
{
- if (pkm == null) return;
- if (pkm.GetType() != PKMType)
- throw new InvalidCastException($"PKM Format needs to be {PKMType} when setting to a Gen{Generation} Save File.");
- if (trade ?? SetUpdatePKM)
- SetPKM(pkm);
- if (dex ?? SetUpdateDex)
- SetDex(pkm);
- byte[] data = pkm.EncryptedBoxData;
- SetData(data, offset);
-
- BitConverter.GetBytes((ushort)pkm.TID).CopyTo(Data, offset + data.Length + 0);
- BitConverter.GetBytes((ushort)pkm.SID).CopyTo(Data, offset + data.Length + 2);
- Edited = true;
+ base.SetStoredSlot(pkm, offset, trade, dex);
+ BitConverter.GetBytes((ushort)pkm.TID).CopyTo(Data, offset + PKX.SIZE_3STORED + 0);
+ BitConverter.GetBytes((ushort)pkm.SID).CopyTo(Data, offset + PKX.SIZE_3STORED + 2);
}
public override string GetString(byte[] data, int offset, int length) => StringConverter3.GetString3(data, offset, length, Japanese);
diff --git a/PKHeX.Core/Saves/SaveFile.cs b/PKHeX.Core/Saves/SaveFile.cs
index 6b4344956..8b9c9f4d7 100644
--- a/PKHeX.Core/Saves/SaveFile.cs
+++ b/PKHeX.Core/Saves/SaveFile.cs
@@ -10,8 +10,8 @@ namespace PKHeX.Core
///
public abstract class SaveFile : ITrainerInfo, IGameValueLimit
{
- public static bool SetUpdateDex { protected get; set; } = true;
- public static bool SetUpdatePKM { protected get; set; } = true;
+ public static PKMImportSetting SetUpdateDex { protected get; set; } = PKMImportSetting.Update;
+ public static PKMImportSetting SetUpdatePKM { protected get; set; } = PKMImportSetting.Update;
// General Object Properties
public byte[] Data;
@@ -586,9 +586,14 @@ namespace PKHeX.Core
return GetBoxSlotOffset(box, slot);
}
- public void SetBoxSlotAtIndex(PKM pkm, int box, int slot, bool? trade, bool? dex = null) => SetStoredSlot(pkm, GetBoxSlotOffset(box, slot), trade, dex);
- public void SetBoxSlotAtIndex(PKM pkm, int index, bool? trade, bool? dex = null) => SetStoredSlot(pkm, GetBoxSlotOffset(index), trade, dex);
- public void SetPartySlotAtIndex(PKM pkm, int index, bool? trade = null, bool? dex = null) => SetPartySlot(pkm, GetPartyOffset(index), trade, dex);
+ public void SetBoxSlotAtIndex(PKM pkm, int box, int slot, PKMImportSetting trade = PKMImportSetting.UseDefault, PKMImportSetting dex = PKMImportSetting.UseDefault)
+ => SetStoredSlot(pkm, GetBoxSlotOffset(box, slot), trade, dex);
+
+ public void SetBoxSlotAtIndex(PKM pkm, int index, PKMImportSetting trade = PKMImportSetting.UseDefault, PKMImportSetting dex = PKMImportSetting.UseDefault)
+ => SetStoredSlot(pkm, GetBoxSlotOffset(index), trade, dex);
+
+ public void SetPartySlotAtIndex(PKM pkm, int index, PKMImportSetting trade = PKMImportSetting.UseDefault, PKMImportSetting dex = PKMImportSetting.UseDefault)
+ => SetPartySlot(pkm, GetPartyOffset(index), trade, dex);
public virtual PKM GetPartySlot(int offset) => GetPKM(DecryptPKM(GetData(offset, SIZE_PARTY)));
@@ -597,15 +602,12 @@ namespace PKHeX.Core
return GetPKM(DecryptPKM(GetData(offset, SIZE_STORED)));
}
- public void SetPartySlot(PKM pkm, int offset, bool? trade = null, bool? dex = null)
+ public void SetPartySlot(PKM pkm, int offset, PKMImportSetting trade = PKMImportSetting.UseDefault, PKMImportSetting dex = PKMImportSetting.UseDefault)
{
if (pkm == null) return;
if (pkm.GetType() != PKMType)
throw new ArgumentException($"PKM Format needs to be {PKMType} when setting to this Save File.");
- if (trade ?? SetUpdatePKM)
- SetPKM(pkm);
- if (dex ?? SetUpdateDex)
- SetDex(pkm);
+ UpdatePKM(pkm, trade, dex);
SetPartyValues(pkm, isParty: true);
int i = GetPartyIndex(offset);
@@ -627,6 +629,28 @@ namespace PKHeX.Core
Edited = true;
}
+ protected void UpdatePKM(PKM pkm, PKMImportSetting trade, PKMImportSetting dex)
+ {
+ if (GetTradeUpdateSetting(trade))
+ SetPKM(pkm);
+ if (GetDexUpdateSetting(dex))
+ SetDex(pkm);
+ }
+
+ private static bool GetTradeUpdateSetting(PKMImportSetting trade = PKMImportSetting.UseDefault)
+ {
+ if (trade == PKMImportSetting.UseDefault)
+ trade = SetUpdatePKM;
+ return trade == PKMImportSetting.Update;
+ }
+
+ private static bool GetDexUpdateSetting(PKMImportSetting trade = PKMImportSetting.UseDefault)
+ {
+ if (trade == PKMImportSetting.UseDefault)
+ trade = SetUpdateDex;
+ return trade == PKMImportSetting.Update;
+ }
+
private int GetPartyIndex(int offset)
{
for (int i = 0; i < 6; i++)
@@ -637,15 +661,12 @@ namespace PKHeX.Core
return -1;
}
- public virtual void SetStoredSlot(PKM pkm, int offset, bool? trade = null, bool? dex = null)
+ public virtual void SetStoredSlot(PKM pkm, int offset, PKMImportSetting trade = PKMImportSetting.UseDefault, PKMImportSetting dex = PKMImportSetting.UseDefault)
{
if (pkm == null) return;
if (pkm.GetType() != PKMType)
throw new ArgumentException($"PKM Format needs to be {PKMType} when setting to this Save File.");
- if (trade ?? SetUpdatePKM)
- SetPKM(pkm);
- if (dex ?? SetUpdateDex)
- SetDex(pkm);
+ UpdatePKM(pkm, trade, dex);
SetPartyValues(pkm, isParty: false);
SetData(pkm.EncryptedBoxData, offset);
Edited = true;
@@ -662,7 +683,7 @@ namespace PKHeX.Core
int slotFrom = GetPartyOffset(i);
SetData(GetData(slotFrom, SIZE_PARTY), slotTo);
}
- SetStoredSlot(BlankPKM, GetPartyOffset(5), false, false);
+ SetStoredSlot(BlankPKM, GetPartyOffset(5), PKMImportSetting.Skip, PKMImportSetting.Skip);
PartyCount--;
}
@@ -784,7 +805,7 @@ namespace PKHeX.Core
var pk = GetStoredSlot(ofs);
action(pk);
++modified;
- SetStoredSlot(pk, ofs, false, false);
+ SetStoredSlot(pk, ofs, PKMImportSetting.Skip, PKMImportSetting.Skip);
}
}
return modified;
diff --git a/PKHeX.Core/Saves/Storage/PKMImportSetting.cs b/PKHeX.Core/Saves/Storage/PKMImportSetting.cs
new file mode 100644
index 000000000..184f9b6a2
--- /dev/null
+++ b/PKHeX.Core/Saves/Storage/PKMImportSetting.cs
@@ -0,0 +1,9 @@
+namespace PKHeX.Core
+{
+ public enum PKMImportSetting
+ {
+ UseDefault,
+ Update,
+ Skip,
+ }
+}
\ No newline at end of file
diff --git a/PKHeX.Core/Saves/Util/BoxUtil.cs b/PKHeX.Core/Saves/Util/BoxUtil.cs
index 874019db1..f51ec8c5f 100644
--- a/PKHeX.Core/Saves/Util/BoxUtil.cs
+++ b/PKHeX.Core/Saves/Util/BoxUtil.cs
@@ -90,7 +90,7 @@ namespace PKHeX.Core
/// Bypass option to not modify properties when setting to Save File.
/// Enumerate all files even in sub-folders.
/// Count of files imported.
- public static int LoadBoxes(this SaveFile SAV, string path, out string result, int boxStart = 0, bool boxClear = false, bool overwrite = false, bool? noSetb = null, bool all = false)
+ public static int LoadBoxes(this SaveFile SAV, string path, out string result, int boxStart = 0, bool boxClear = false, bool overwrite = false, PKMImportSetting noSetb = PKMImportSetting.UseDefault, bool all = false)
{
if (string.IsNullOrWhiteSpace(path) || !Directory.Exists(path))
{ result = MsgSaveBoxExportPathInvalid; return -1; }
@@ -111,7 +111,7 @@ namespace PKHeX.Core
/// Overwrite existing full slots. If true, will only overwrite empty slots.
/// Bypass option to not modify properties when setting to Save File.
/// Count of files imported.
- public static int LoadBoxes(this SaveFile SAV, IEnumerable filepaths, out string result, int boxStart = 0, bool boxClear = false, bool overwrite = false, bool? noSetb = null)
+ public static int LoadBoxes(this SaveFile SAV, IEnumerable filepaths, out string result, int boxStart = 0, bool boxClear = false, bool overwrite = false, PKMImportSetting noSetb = PKMImportSetting.UseDefault)
{
var pks = GetPossiblePKMsFromPaths(SAV, filepaths);
return SAV.LoadBoxes(pks, out result, boxStart, boxClear, overwrite, noSetb);
@@ -128,7 +128,7 @@ namespace PKHeX.Core
/// Overwrite existing full slots. If true, will only overwrite empty slots.
/// Bypass option to not modify properties when setting to Save File.
/// Count of files imported.
- public static int LoadBoxes(this SaveFile SAV, IEnumerable encounters, out string result, int boxStart = 0, bool boxClear = false, bool overwrite = false, bool? noSetb = null)
+ public static int LoadBoxes(this SaveFile SAV, IEnumerable encounters, out string result, int boxStart = 0, bool boxClear = false, bool overwrite = false, PKMImportSetting noSetb = PKMImportSetting.UseDefault)
{
var pks = encounters.Select(z => z.ConvertToPKM(SAV));
return SAV.LoadBoxes(pks, out result, boxStart, boxClear, overwrite, noSetb);
@@ -145,7 +145,7 @@ namespace PKHeX.Core
/// Overwrite existing full slots. If true, will only overwrite empty slots.
/// Bypass option to not modify properties when setting to Save File.
/// True if any files are imported.
- public static int LoadBoxes(this SaveFile SAV, IEnumerable pks, out string result, int boxStart = 0, bool boxClear = false, bool overwrite = false, bool? noSetb = null)
+ public static int LoadBoxes(this SaveFile SAV, IEnumerable pks, out string result, int boxStart = 0, bool boxClear = false, bool overwrite = false, PKMImportSetting noSetb = PKMImportSetting.UseDefault)
{
if (!SAV.HasBox)
{ result = MsgSaveBoxFailNone; return -1; }
diff --git a/PKHeX.Core/Saves/Util/SaveExtensions.cs b/PKHeX.Core/Saves/Util/SaveExtensions.cs
index 17eded4be..159e30647 100644
--- a/PKHeX.Core/Saves/Util/SaveExtensions.cs
+++ b/PKHeX.Core/Saves/Util/SaveExtensions.cs
@@ -116,7 +116,7 @@ namespace PKHeX.Core
/// First box to start loading to. All prior boxes are not modified.
/// Bypass option to not modify properties when setting to Save File.
/// Count of injected .
- public static int ImportPKMs(this SaveFile SAV, IEnumerable compat, bool overwrite = false, int boxStart = 0, bool? noSetb = null)
+ public static int ImportPKMs(this SaveFile SAV, IEnumerable compat, bool overwrite = false, int boxStart = 0, PKMImportSetting noSetb = PKMImportSetting.UseDefault)
{
int startCount = boxStart * SAV.BoxSlotCount;
int maxCount = SAV.SlotCount;
diff --git a/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs b/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs
index 4896d5a02..8fa73f305 100644
--- a/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs
+++ b/PKHeX.WinForms/Controls/SAV Editor/SAVEditor.cs
@@ -695,9 +695,9 @@ namespace PKHeX.WinForms.Controls
}
// File I/O
- public bool GetBulkImportSettings(out bool clearAll, out bool overwrite, out bool? noSetb)
+ public bool GetBulkImportSettings(out bool clearAll, out bool overwrite, out PKMImportSetting noSetb)
{
- clearAll = false; noSetb = false; overwrite = false;
+ clearAll = false; noSetb = PKMImportSetting.UseDefault; overwrite = false;
var dr = WinFormsUtil.Prompt(MessageBoxButtons.YesNoCancel, MsgSaveBoxImportClear, MsgSaveBoxImportClearNo);
if (dr == DialogResult.Cancel)
return false;
@@ -709,7 +709,7 @@ namespace PKHeX.WinForms.Controls
private static bool IsFolderPath(out string path)
{
- FolderBrowserDialog fbd = new FolderBrowserDialog();
+ var fbd = new FolderBrowserDialog();
var result = fbd.ShowDialog() == DialogResult.OK;
path = fbd.SelectedPath;
return result;
@@ -785,7 +785,7 @@ namespace PKHeX.WinForms.Controls
return false;
}
- bool? noSetb = GetPKMSetOverride(ModifyPKM);
+ var noSetb = GetPKMSetOverride(ModifyPKM);
PKM[] data = b.BattlePKMs;
int offset = SAV.GetBoxOffset(Box.CurrentBox);
int slotSkipped = 0;
@@ -1121,7 +1121,7 @@ namespace PKHeX.WinForms.Controls
ReloadSlots();
}
- private static bool? GetPKMSetOverride(bool currentSetting)
+ private static PKMImportSetting GetPKMSetOverride(bool currentSetting)
{
var yn = currentSetting ? MsgYes : MsgNo;
DialogResult noSet = WinFormsUtil.Prompt(MessageBoxButtons.YesNoCancel,
@@ -1131,9 +1131,9 @@ namespace PKHeX.WinForms.Controls
string.Format(MsgSaveBoxImportModifyCurrent, yn));
switch (noSet)
{
- case DialogResult.Yes: return true;
- case DialogResult.No: return false;
- default: return null;
+ case DialogResult.Yes: return PKMImportSetting.Update;
+ case DialogResult.No: return PKMImportSetting.Skip;
+ default: return PKMImportSetting.UseDefault;
}
}
diff --git a/PKHeX.WinForms/MainWindow/Main.cs b/PKHeX.WinForms/MainWindow/Main.cs
index 19fc77ebd..1f80348be 100644
--- a/PKHeX.WinForms/MainWindow/Main.cs
+++ b/PKHeX.WinForms/MainWindow/Main.cs
@@ -428,8 +428,9 @@ namespace PKHeX.WinForms
PKME_Tabs.Unicode = Unicode = settings.Unicode;
PKME_Tabs.UpdateUnicode(GenderSymbols);
PKX.AllowShinySprite = settings.ShinySprites;
- SaveFile.SetUpdateDex = settings.SetUpdateDex;
- SaveFile.SetUpdatePKM = C_SAV.ModifyPKM = PKME_Tabs.ModifyPKM = settings.SetUpdatePKM;
+ SaveFile.SetUpdateDex = settings.SetUpdateDex ? PKMImportSetting.Update : PKMImportSetting.Skip;
+ SaveFile.SetUpdatePKM = settings.SetUpdatePKM ? PKMImportSetting.Update : PKMImportSetting.Skip;
+ C_SAV.ModifyPKM = PKME_Tabs.ModifyPKM = settings.SetUpdatePKM;
CommonEdits.ShowdownSetIVMarkings = settings.ApplyMarkings;
C_SAV.FlagIllegal = settings.FlagIllegal;
C_SAV.M.GlowHover = settings.HoverSlotGlowEdges;