mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-03-21 17:48:28 -05:00
Check unsaved entity on sav export
Add setting to skip the unsaved entity check Add setting to skip the overwrite? prompt and always call Save As Change Overwrite prompt to have distinct buttons rather than rows that can be mis-clicked. fix some comments/strings from Pokemon=>Pokémon add some underline shortcut key for main menu for English translation
This commit is contained in:
parent
1aedb012ac
commit
d690f1c5d3
|
|
@ -1,4 +1,4 @@
|
|||
namespace PKHeX.Core;
|
||||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Simple interface representing a <see cref="PKM"/> viewer.
|
||||
|
|
@ -44,4 +44,10 @@ public interface IPKMView
|
|||
/// <param name="focus">Cause the viewer to give focus to itself.</param>
|
||||
/// <param name="skipConversionCheck">Cause the viewer to skip converting the data. Faster if it is known that the format is the same as the previous format.</param>
|
||||
void PopulateFields(PKM pk, bool focus = true, bool skipConversionCheck = false);
|
||||
|
||||
/// <summary>
|
||||
/// Messages back that the entity has been saved.
|
||||
/// </summary>
|
||||
/// <param name="pk">Pokémon data that was saved.</param>
|
||||
void NotifyWasExported(PKM pk);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,12 @@ namespace PKHeX.Core;
|
|||
|
||||
public sealed class AdvancedSettings
|
||||
{
|
||||
[LocalizedDescription("Skip the Overwrite prompt when exporting a save file, to always Save As...")]
|
||||
public bool SaveExportForceSaveAs { get; set; }
|
||||
|
||||
[LocalizedDescription("Check if the Pokémon in the editor has unsaved changes before exporting the save file.")]
|
||||
public bool SaveExportCheckUnsavedEntity { get; set; } = true;
|
||||
|
||||
[LocalizedDescription("Folder path that contains dump(s) of block hash-names. If a specific dump file does not exist, only names defined within the program's code will be loaded.")]
|
||||
public string PathBlockKeyList { get; set; } = string.Empty;
|
||||
|
||||
|
|
|
|||
|
|
@ -13,4 +13,5 @@ public sealed class FakePKMEditor(PKM template) : IPKMView
|
|||
|
||||
public PKM PreparePKM(bool click = true) => Data;
|
||||
public void PopulateFields(PKM pk, bool focus = true, bool skipConversionCheck = false) => Data = pk;
|
||||
public void NotifyWasExported(PKM pk) { }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ public static class Encounters5B2W2
|
|||
|
||||
public static readonly EncounterStatic5N[] Encounter_B2W2_N =
|
||||
[
|
||||
// N's Pokemon
|
||||
// N's Pokémon
|
||||
new(0xFF01007F) { Species = 509, Level = 07, Location = 015, Ability = OnlySecond, Nature = Nature.Timid }, // Purloin @ Route 2
|
||||
new(0xFF01007F) { Species = 519, Level = 13, Location = 033, Ability = OnlySecond, Nature = Nature.Sassy }, // Pidove @ Pinwheel Forest
|
||||
new(0xFF00003F) { Species = 532, Level = 13, Location = 033, Ability = OnlyFirst, Nature = Nature.Rash }, // Timburr @ Pinwheel Forest
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ public sealed class EvolutionRuleTweak
|
|||
public static readonly EvolutionRuleTweak Default = new();
|
||||
|
||||
/// <summary>
|
||||
/// In Sword & Shield (Generation 8+), level 100 Pokemon can trigger evolution methods via Rare Candy level up.
|
||||
/// In Sword & Shield (Generation 8+), level 100 Pokémon can trigger evolution methods via Rare Candy level up.
|
||||
/// </summary>
|
||||
public static readonly EvolutionRuleTweak Level100 = new() { AllowLevelUpEvolution100 = true };
|
||||
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ private static bool IsValidMemory29(Species encountered, Species species, GameVe
|
|||
return true;
|
||||
|
||||
// OT Memory checks from here on.
|
||||
// Zacian and Zamazenta being in an OT memory need to match the Pokemon's version.
|
||||
// Zacian and Zamazenta being in an OT memory need to match the Pokémon's version.
|
||||
if (version == GameVersion.SW && encountered == Zamazenta)
|
||||
return false;
|
||||
if (version == GameVersion.SH && encountered == Zacian)
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ public static bool IsRibbonValidFootprint(PKM pk, EvolutionHistory evos)
|
|||
public static bool IsRibbonValidMasterRank(PKM pk, IEncounterTemplate enc, EvolutionHistory evos)
|
||||
{
|
||||
// Legends can compete in Ranked starting from Series 10.
|
||||
// Past gen Pokemon can get the ribbon only if they've been reset.
|
||||
// Past gen Pokémon can get the ribbon only if they've been reset.
|
||||
if (evos.HasVisitedSWSH && IsRibbonValidMasterRankSWSH(pk, enc))
|
||||
return true;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
namespace PKHeX.Core;
|
||||
|
||||
/// <summary>
|
||||
/// Pokemon Link Data Storage
|
||||
/// Pokémon Link Data Storage
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This Template object is very similar to the <see cref="PCD"/> structure in that it stores more data than just the gift.
|
||||
|
|
@ -37,7 +37,7 @@ public byte Flags
|
|||
/// </summary>
|
||||
public string Origin { get => StringConverter6.GetString(Source); set => StringConverter6.SetString(Source, value, 54, 0, StringConverterOption.ClearZero); }
|
||||
|
||||
// Pokemon transfer flags?
|
||||
// transfer flags?
|
||||
public uint Flags1 { get => ReadUInt32LittleEndian(Data[0x099..]); set => WriteUInt32LittleEndian(Data[0x099..], value); }
|
||||
public uint Flags2 { get => ReadUInt32LittleEndian(Data[0x141..]); set => WriteUInt32LittleEndian(Data[0x141..], value); }
|
||||
public uint Flags3 { get => ReadUInt32LittleEndian(Data[0x1E9..]); set => WriteUInt32LittleEndian(Data[0x1E9..], value); }
|
||||
|
|
|
|||
|
|
@ -38,20 +38,20 @@ public static string[] GetExtensions(byte maxGeneration = Latest.Generation)
|
|||
for (int i = min; i <= maxGeneration; i++)
|
||||
result.Add($"pk{i}");
|
||||
if (min < 3)
|
||||
result.Add(ExtensionSK2); // stadium
|
||||
result.Add(ExtensionSK2); // Stadium
|
||||
|
||||
if (maxGeneration >= 3)
|
||||
{
|
||||
result.Add(ExtensionCK3); // colosseum
|
||||
result.Add(ExtensionXK3); // xd
|
||||
result.Add(ExtensionCK3); // Colosseum
|
||||
result.Add(ExtensionXK3); // XD
|
||||
}
|
||||
if (maxGeneration >= 4)
|
||||
{
|
||||
result.Add(ExtensionBK4); // battle revolution
|
||||
result.Add(ExtensionRK4); // My Pokemon Ranch
|
||||
result.Add(ExtensionRK4); // My Pokémon Ranch
|
||||
}
|
||||
if (maxGeneration >= 7)
|
||||
result.Add(ExtensionPB7); // let's go
|
||||
result.Add(ExtensionPB7); // Let's Go, Pikachu/Eevee
|
||||
if (maxGeneration >= 8)
|
||||
result.Add(ExtensionPB8); // Brilliant Diamond & Shining Pearl
|
||||
if (maxGeneration >= 8)
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ MsgProgramIllegalModeActive = Illegaler Modus aktiviert.
|
|||
MsgProgramUpdateAvailable = Neues Update verfügbar!
|
||||
MsgProgramCloseUnsaved = Nicht gespeicherte Änderungen gehen verloren.
|
||||
MsgProgramCloseConfirm = Bist du sicher, dass du PKHeX schließen möchtest?
|
||||
MsgProgramSaveUnsaved = The Pokémon in the editor has unsaved changes.
|
||||
MsgProgramSaveFileConfirm = Bist du sicher, dass du einen Spielstand laden möchtest?
|
||||
MsgProgramError = FEHLER
|
||||
MsgProgramErrorExpectedHex = Die erwartete Eingabe darf nur die folgenden Zeichen enthalten (0-9, A-F).
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ MsgProgramIllegalModeActive = Illegal mode activated.
|
|||
MsgProgramUpdateAvailable = New Update Available!
|
||||
MsgProgramCloseUnsaved = Any unsaved changes will be lost.
|
||||
MsgProgramCloseConfirm = Are you sure you want to close PKHeX?
|
||||
MsgProgramSaveUnsaved = The Pokémon in the editor has unsaved changes.
|
||||
MsgProgramSaveFileConfirm = Are you sure you want to load a new save file?
|
||||
MsgProgramError = ERROR
|
||||
MsgProgramErrorExpectedHex = Expected Text containing only the following characters (0-9, A-F).
|
||||
|
|
@ -56,7 +57,7 @@ MsgFileWriteProtected = File's location is write protected:
|
|||
MsgFileWriteProtectedAdvice = If the file is on a removable disk (SD card), please ensure the write protection switch is not set.
|
||||
MsgFileInUse = Unable to load file. It could be in use by another program.
|
||||
MsgFileUnsupported = Attempted to load an unsupported file type/size. This could mean PKHeX doesn't support your save file or your save file is corrupt.
|
||||
MsgPKMUnsupported = Attempted to load an unsupported file type/size. This could be caused by loading a different generation Pokemon file on an unsupported generation or your file is corrupt.
|
||||
MsgPKMUnsupported = Attempted to load an unsupported file type/size. This could be caused by loading a different generation Pokémon file on an unsupported generation or your file is corrupt.
|
||||
MsgPKMConvertSuccess = Converted from {0} to {1}.
|
||||
MsgPKMConvertFail = Conversion failed.
|
||||
MsgPKMMysteryGiftFail = Mystery Gift is not a Pokémon.
|
||||
|
|
@ -109,7 +110,7 @@ MsgSaveSlotBadData = Unable to set to this slot.
|
|||
MsgSaveBackup = Saved Backup of current SAV to:
|
||||
MsgSaveBackupNotFound = Original file has been moved; unable to copy a backup.
|
||||
MsgSaveCurrentGeneration = Current SAV Generation: {0}
|
||||
MsgSaveBoxCloneFromTabs = Clone Pokemon from Editing Tabs to all slots in {0}?
|
||||
MsgSaveBoxCloneFromTabs = Clone Pokémon from Editing Tabs to all slots in {0}?
|
||||
MsgSaveBoxSortCurrent = Sort Current Box?
|
||||
MsgSaveBoxSortCurrentFailBattle = Battle Box slots prevent the sorting of box.
|
||||
MsgSaveBoxSortCurrentSuccess = Current Box sorted!
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ MsgProgramIllegalModeActive = Modo Ilegal activado.
|
|||
MsgProgramUpdateAvailable = ¡Actualización disponible!
|
||||
MsgProgramCloseUnsaved = Cualquier cambio no guardado se perderá.
|
||||
MsgProgramCloseConfirm = ¿Estás seguro de que quieres cerrar PKHeX?
|
||||
MsgProgramSaveUnsaved = The Pokémon in the editor has unsaved changes.
|
||||
MsgProgramSaveFileConfirm = ¿Estás seguro de que quieres cargar un nuevo archivo de guardado?
|
||||
MsgProgramError = ERROR
|
||||
MsgProgramErrorExpectedHex = Se esperaba texto conteniendo solamente los siguiente caracteres (0-9, A-F).
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ MsgProgramIllegalModeActive = Modo Ilegal activado.
|
|||
MsgProgramUpdateAvailable = ¡Actualización disponible!
|
||||
MsgProgramCloseUnsaved = Cualquier cambio no guardado se perderá.
|
||||
MsgProgramCloseConfirm = ¿Estás seguro de que quieres cerrar PKHeX?
|
||||
MsgProgramSaveUnsaved = The Pokémon in the editor has unsaved changes.
|
||||
MsgProgramSaveFileConfirm = ¿Estás seguro de que quieres cargar un nuevo archivo de guardado?
|
||||
MsgProgramError = ERROR
|
||||
MsgProgramErrorExpectedHex = Se esperaba texto conteniendo solamente los siguiente caracteres (0-9, A-F).
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ MsgProgramIllegalModeActive = Mode illégal activé.
|
|||
MsgProgramUpdateAvailable = Nouvelle mise à jour disponible !
|
||||
MsgProgramCloseUnsaved = Tout changement non sauvegardé sera perdu.
|
||||
MsgProgramCloseConfirm = Êtes-vous sûr de vouloir fermer PKHeX ?
|
||||
MsgProgramSaveUnsaved = The Pokémon in the editor has unsaved changes.
|
||||
MsgProgramSaveFileConfirm = Voulez-vous vraiment charger un nouveau fichier de sauvegarde ?
|
||||
MsgProgramError = Erreur
|
||||
MsgProgramErrorExpectedHex = Le texte ne doit contenir que les caractères suivants (0-9, A-F).
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ MsgProgramIllegalModeActive = Modalità illegale attivata.
|
|||
MsgProgramUpdateAvailable = Nuovo aggiornamento disponibile!
|
||||
MsgProgramCloseUnsaved = Tutte le modifiche non salvate andranno perse.
|
||||
MsgProgramCloseConfirm = Sei scuro di voler chiudere PKHeX?
|
||||
MsgProgramSaveUnsaved = The Pokémon in the editor has unsaved changes.
|
||||
MsgProgramSaveFileConfirm = Sei sicuro di voler caricare un nuovo file di salvataggio?
|
||||
MsgProgramError = ERRORE
|
||||
MsgProgramErrorExpectedHex = Previsto testo contenente i caratteri seguenti (0-9, A-F).
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ MsgProgramIllegalModeActive = チートモードがアクティブ化してい
|
|||
MsgProgramUpdateAvailable = 新しいバージョンがあります!
|
||||
MsgProgramCloseUnsaved = 保存されていない変更は失われます。
|
||||
MsgProgramCloseConfirm = PKHeXを閉じてもよろしいですか?
|
||||
MsgProgramSaveUnsaved = The Pokémon in the editor has unsaved changes.
|
||||
MsgProgramSaveFileConfirm = 新しいセーブファイルをロードしてもよろしいですか?
|
||||
MsgProgramError = ERROR
|
||||
MsgProgramErrorExpectedHex = 次の文字(0-9,A-F)のみを含むテキストが必要です。
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ MsgProgramIllegalModeActive = 불법 모드를 사용합니다.
|
|||
MsgProgramUpdateAvailable = 새 업데이트가 있습니다!
|
||||
MsgProgramCloseUnsaved = 저장하지 않은 변경 사항은 손실됩니다.
|
||||
MsgProgramCloseConfirm = 정말 PKHeX를 종료하시겠습니까?
|
||||
MsgProgramSaveUnsaved = The Pokémon in the editor has unsaved changes.
|
||||
MsgProgramSaveFileConfirm = 새로운 저장 파일을 불러오시겠다는 확신이 있습니까?
|
||||
MsgProgramError = 오류
|
||||
MsgProgramErrorExpectedHex = 숫자(0-9)와 일부 알파벳(A-F)만 사용할 수 있습니다.
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ MsgProgramIllegalModeActive = 非法模式启动。
|
|||
MsgProgramUpdateAvailable = 有新版本!
|
||||
MsgProgramCloseUnsaved = 未保存的更改将会丢失。
|
||||
MsgProgramCloseConfirm = 你确定要关闭 PKHeX 吗?
|
||||
MsgProgramSaveUnsaved = The Pokémon in the editor has unsaved changes.
|
||||
MsgProgramSaveFileConfirm = 确定要加载新的存档文件吗?
|
||||
MsgProgramError = 错误
|
||||
MsgProgramErrorExpectedHex = 文本仅能包含以下字符(0-9, A-F)。
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ MsgProgramIllegalModeActive = 使用不合法模式啟動。
|
|||
MsgProgramUpdateAvailable = 新版本經已發佈!
|
||||
MsgProgramCloseUnsaved = 未保存之更改將會丟失。
|
||||
MsgProgramCloseConfirm = 你確定要關閉 PKHeX 嗎?
|
||||
MsgProgramSaveUnsaved = The Pokémon in the editor has unsaved changes.
|
||||
MsgProgramSaveFileConfirm = 確定要載入新的儲存資料檔案嗎?
|
||||
MsgProgramError = 錯誤
|
||||
MsgProgramErrorExpectedHex = 文本僅能包含以下字元(0-9, A-F)。
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
0190 * Kurt can check GS Ball
|
||||
0191 * Kurt ready to return GS Ball (combine with above Flag)
|
||||
0192 * GS Ball can be inserted into Ilex Forest Shrine
|
||||
1809 * No Mystery Gift item is waiting in the Pokemon Center
|
||||
1809 * No Mystery Gift item is waiting in the Pokémon Center
|
||||
0672 * Ho-Oh puzzle solved in Ruins of Alph
|
||||
0673 * Kabuto puzzle solved in Ruins of Alph
|
||||
0674 * Omanyte puzzle solved in Ruins of Alph
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
0x4021 m Repel Step Counter
|
||||
0x4023 * Starter Pokemon 00:Treecko,01:Torchic,02:Mudkip
|
||||
0x4023 * Starter Pokémon 00:Treecko,01:Torchic,02:Mudkip
|
||||
0x4024 r Mirage Island RND (High)
|
||||
0x4025 r Mirage Island RND (Low)
|
||||
0x4026 * Current Secret Base
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
0x402C * Reset RTC 00:Disabled,2336:Enabled
|
||||
0x402D * Enigma Berry Available
|
||||
|
||||
0x403E r Wild Pokemon in Altering Cave 00:Zubat,01:Mareep (Illegal),02:Pineco (Illegal),03:Houndour (Illegal),04:Teddiursa (Illegal),05:Aipom (Illegal),06:Shuckle (Illegal),07:Stantler (Illegal),08:Smeargle (Illegal)
|
||||
0x403E r Wild Pokémon in Altering Cave 00:Zubat,01:Mareep (Illegal),02:Pineco (Illegal),03:Houndour (Illegal),04:Teddiursa (Illegal),05:Aipom (Illegal),06:Shuckle (Illegal),07:Stantler (Illegal),08:Smeargle (Illegal)
|
||||
|
||||
0x4040 * Days Passed
|
||||
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@
|
|||
0x405B s Defeated Rival (S.S. Anne) 0:No,1:Yes
|
||||
0x405C s Defeated Rival (Silph Co.) 0:No,1:Yes
|
||||
0x405D s Defeated Rival (Pokemon Tower) 0:No,1:Yes
|
||||
0x4089 s Rival Met (Six Island Pokemon Center) 0:No,1:Yes
|
||||
0x4089 s Rival Met (Six Island Pokémon Center) 0:No,1:Yes
|
||||
|
||||
0x4024 r Wild Pokemon in Altering Cave 00:Zubat,01:Mareep (Illegal),02:Pineco (Illegal),03:Houndour (Illegal),04:Teddiursa (Illegal),05:Aipom (Illegal),06:Shuckle (Illegal),07:Stantler (Illegal),08:Smeargle (Illegal)
|
||||
0x4024 r Wild Pokémon in Altering Cave 00:Zubat,01:Mareep (Illegal),02:Pineco (Illegal),03:Houndour (Illegal),04:Teddiursa (Illegal),05:Aipom (Illegal),06:Shuckle (Illegal),07:Stantler (Illegal),08:Smeargle (Illegal)
|
||||
|
||||
0x4049 a Hall of Fame Trainer Card Sticker 0:None,1:Level 1,2:Level 2,3:Level 3
|
||||
0x404A a Hatched Eggs Trainer Card Sticker 0:None,1:Level 1,2:Level 2,3:Level 3
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
0x4021 m Repel Step Counter
|
||||
0x4023 * Starter Pokemon 00:Treecko,01:Torchic,02:Mudkip
|
||||
0x4023 * Starter Pokémon 00:Treecko,01:Torchic,02:Mudkip
|
||||
0x4024 r Mirage Island RND (High)
|
||||
0x4025 r Mirage Island RND (Low)
|
||||
0x4026 * Current Secret Base
|
||||
|
|
|
|||
|
|
@ -469,7 +469,7 @@
|
|||
759 r Defeated Deoxys
|
||||
760 m Change text of old woman in Celadon Mansion (after HoF)
|
||||
761 s Spoke to Prof. Oak's Aide in Vermilion City
|
||||
762 * Received Everstone (Oak's Aide, Rock Tunnel Pokemon Center)
|
||||
762 * Received Everstone (Oak's Aide, Rock Tunnel Pokémon Center)
|
||||
763 s Gave Meteorite and received Moon Stone from Lostelle's daddy
|
||||
764 * Full Restore from man for driving off bikers on Three Island received
|
||||
765 * Received Amulet Coin (Oak's Aide, Route 16)
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@
|
|||
0x2D8 s Zafiro Robado
|
||||
0x2D6 s Puerta Abierta de la Guarida Rocket
|
||||
0x2DC s Recibido Zafiro
|
||||
0x2FA s Recibida Piedra Eterna (Ayudante de Oak, Centro Pokemon del Túnel Roca)
|
||||
0x2FA s Recibida Piedra Eterna (Ayudante de Oak, Centro Pokémon del Túnel Roca)
|
||||
0x252 s Recibido Buscaobjetos (Ayudante de Oak, Ruta 11)
|
||||
0x256 s Recibido Rep. Exp. (Ayudante de Oak, Ruta 15)
|
||||
0x2FD s Recibido Amuleto Suerte (Ayudante de Oak, Ruta 16)
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@
|
|||
0x2D8 s Zafiro Robado
|
||||
0x2D6 s Puerta Abierta de la Guarida Rocket
|
||||
0x2DC s Recibido Zafiro
|
||||
0x2FA s Recibida Piedra Eterna (Ayudante de Oak, Centro Pokemon del Túnel Roca)
|
||||
0x2FA s Recibida Piedra Eterna (Ayudante de Oak, Centro Pokémon del Túnel Roca)
|
||||
0x252 s Recibido Buscaobjetos (Ayudante de Oak, Ruta 11)
|
||||
0x256 s Recibido Rep. Exp. (Ayudante de Oak, Ruta 15)
|
||||
0x2FD s Recibido Amuleto Suerte (Ayudante de Oak, Ruta 16)
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
0x3D1 r Overworld Hidden (Electrode 1 in Hideout)
|
||||
0x3D2 r Overworld Hidden (Electrode 2 in Hideout)
|
||||
|
||||
0x800 s Received Starter Pokemon
|
||||
0x800 s Received Starter Pokémon
|
||||
0x801 s Received Pokedex
|
||||
0x802 s Received PokeNav
|
||||
0x804 s Entered Hall of Fame
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
0669 r Team Plasma Guide (Pokemon League Pokemon Center) Disappeared
|
||||
0669 r Team Plasma Guide (Pokémon League Pokémon Center) Disappeared
|
||||
0661 r Reshiram/Zekrom (N's Castle) Disappeared
|
||||
0307 r Reshiram/Zekrom Captured
|
||||
0766 r Reshiram/Zekrom (Dragonspiral Tower) Disappeared
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public SAV4Ranch(Memory<byte> data) : base(data, typeof(RK4), 0)
|
|||
// 00: size, ???
|
||||
// 01: size, count, Mii data[count]
|
||||
// 02: size, count, Mii Link data[count]
|
||||
// 03: size, count, Pokemon (PK4 + metadata)[count]
|
||||
// 03: size, count, Pokémon (PK4 + metadata)[count]
|
||||
// 04: size, count, ???
|
||||
|
||||
MiiCountOffset = ReadInt32BigEndian(Data[0x24..]) + 4;
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ public static void SetQRData(PK7 pk7, Span<byte> span, int box = 0, int slot = 0
|
|||
WriteInt32LittleEndian(span[0x0C..], slot);
|
||||
WriteInt32LittleEndian(span[0x10..], num_copies); // No need to check max num_copies, payload parser handles it on-console.
|
||||
|
||||
pk7.EncryptedPartyData.CopyTo(span[0x30..]); // Copy in pokemon data
|
||||
pk7.EncryptedPartyData.CopyTo(span[0x30..]); // Copy in Pokémon data
|
||||
SetDexData(span[0x140..], pk7.Species, pk7.Form, pk7.IsShiny, pk7.Gender);
|
||||
|
||||
var chk = Checksums.CRC16Invert(span[..0x1A0]);
|
||||
|
|
|
|||
|
|
@ -137,8 +137,8 @@ public static class RecordLists
|
|||
{073, "Used Splash"},
|
||||
{074, "Used Struggle"},
|
||||
{075, "Noneffective move used on you"},
|
||||
{076, "Own Pokemon Attacked"},
|
||||
{077, "Own Pokemon Fainted"},
|
||||
{076, "Own Pokémon Attacked"},
|
||||
{077, "Own Pokémon Fainted"},
|
||||
{078, "Failed to Run"},
|
||||
{079, "Pokemon Fled"},
|
||||
{080, "Failed Fishing"},
|
||||
|
|
@ -375,7 +375,7 @@ public static class RecordLists
|
|||
{177, "Trainer's Eye Rematches"},
|
||||
{178, "FUREAI Interest ???"}, // similar to US/UM idb
|
||||
|
||||
{179, "Shiny Pokemon Encountered"},
|
||||
{179, "Shiny Pokémon Encountered"},
|
||||
{180, "Trick House Clears"},
|
||||
{181, "Eon Ticket 1 (SpotPass)"},
|
||||
{182, "Eon Ticket 2 (Mystery Gift)"},
|
||||
|
|
@ -487,7 +487,7 @@ public static class RecordLists
|
|||
{124, "PP Raised"},
|
||||
{125, "Amie Used"},
|
||||
{126, "Fishing Chains"},
|
||||
{127, "Shiny Pokemon Encountered"},
|
||||
{127, "Shiny Pokémon Encountered"},
|
||||
{128, "Missions Participated In"},
|
||||
{129, "Facilities Hosted"},
|
||||
{130, "QR Code Scans"},
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ public static class MessageStrings
|
|||
public static string MsgProgramUpdateAvailable { get; set; } = "New Update Available!";
|
||||
public static string MsgProgramCloseUnsaved { get; set; } = "Any unsaved changes will be lost.";
|
||||
public static string MsgProgramCloseConfirm { get; set; } = "Are you sure you want to close PKHeX?";
|
||||
public static string MsgProgramSaveUnsaved { get; set; } = "The Pokémon in the editor has unsaved changes.";
|
||||
public static string MsgProgramSaveFileConfirm { get; set; } = "Are you sure you want to load a new save file?";
|
||||
public static string MsgProgramError { get; set; } = "ERROR";
|
||||
public static string MsgProgramErrorExpectedHex { get; set; } = "Expected Text containing only the following characters (0-9, A-F).";
|
||||
|
|
@ -85,7 +86,7 @@ public static class MessageStrings
|
|||
public static string MsgFileWriteProtectedAdvice { get; set; } = "If the file is on a removable disk (SD card), please ensure the write protection switch is not set.";
|
||||
public static string MsgFileInUse { get; set; } = "Unable to load file. It could be in use by another program.";
|
||||
public static string MsgFileUnsupported { get; set; } = "Attempted to load an unsupported file type/size. This could mean PKHeX doesn't support your save file or your save file is corrupt.";
|
||||
public static string MsgPKMUnsupported { get; set; } = "Attempted to load an unsupported file type/size. This could be caused by loading a different generation Pokemon file on an unsupported generation or your file is corrupt.";
|
||||
public static string MsgPKMUnsupported { get; set; } = "Attempted to load an unsupported file type/size. This could be caused by loading a different generation Pokémon file on an unsupported generation or your file is corrupt.";
|
||||
|
||||
public static string MsgPKMConvertSuccess { get; set; } = "Converted from {0} to {1}.";
|
||||
public static string MsgPKMConvertFail { get; set; } = "Conversion failed.";
|
||||
|
|
@ -157,7 +158,7 @@ public static class MessageStrings
|
|||
public static string MsgSaveBackupNotFound { get; set; } = "Original file has been moved; unable to copy a backup.";
|
||||
public static string MsgSaveCurrentGeneration { get; set; } = "Current SAV Generation: {0}";
|
||||
|
||||
public static string MsgSaveBoxCloneFromTabs { get; set; } = "Clone Pokemon from Editing Tabs to all slots in {0}?";
|
||||
public static string MsgSaveBoxCloneFromTabs { get; set; } = "Clone Pokémon from Editing Tabs to all slots in {0}?";
|
||||
public static string MsgSaveBoxSortCurrent { get; set; } = "Sort Current Box?";
|
||||
public static string MsgSaveBoxSortCurrentFailBattle { get; set; } = "Battle Box slots prevent the sorting of box.";
|
||||
public static string MsgSaveBoxSortCurrentSuccess { get; set; } = "Current Box sorted!";
|
||||
|
|
|
|||
|
|
@ -166,7 +166,8 @@ public bool HaX
|
|||
set => field = Stats.HaX = value;
|
||||
}
|
||||
|
||||
private byte[] LastData = [];
|
||||
private byte[] LastData { get; set; } = [];
|
||||
public void NotifyWasExported(PKM pk) => LastData = pk.Data.ToArray();
|
||||
|
||||
public PKM Data => Entity;
|
||||
public PKM Entity { get; private set; } = null!;
|
||||
|
|
@ -233,7 +234,6 @@ public PKM PreparePKM(bool click = true)
|
|||
}
|
||||
|
||||
var pk = GetPKMfromFields();
|
||||
LastData = pk.Data.ToArray();
|
||||
return pk.Clone();
|
||||
}
|
||||
|
||||
|
|
@ -355,7 +355,7 @@ private void LoadFieldsFromPKM(PKM pk, bool focus = true, bool skipConversionChe
|
|||
SetMarkings();
|
||||
UpdateLegality();
|
||||
UpdateSprite();
|
||||
LastData = PreparePKM().Data.ToArray();
|
||||
NotifyWasExported(PreparePKM());
|
||||
RefreshFontWarningButton();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ private void ClickSet(object sender, EventArgs e)
|
|||
if (!editor.EditsComplete)
|
||||
return;
|
||||
PKM pk = editor.PreparePKM();
|
||||
var preModify = pk.Clone();
|
||||
|
||||
var info = GetSenderInfo(sender);
|
||||
var sav = info.View.SAV;
|
||||
|
|
@ -69,6 +70,7 @@ private void ClickSet(object sender, EventArgs e)
|
|||
return;
|
||||
}
|
||||
|
||||
editor.NotifyWasExported(preModify);
|
||||
Manager.Hover.Stop();
|
||||
Editor.Slots.Set(info.Slot, pk);
|
||||
Manager.SE.UpdateUndoRedo();
|
||||
|
|
|
|||
|
|
@ -1029,7 +1029,8 @@ public bool ExportSaveFile()
|
|||
bool reload = SAV is IStorageCleanup b && b.FixStoragePreWrite();
|
||||
if (reload)
|
||||
ReloadSlots();
|
||||
return WinFormsUtil.ExportSAVDialog(this, SAV, SAV.CurrentBox);
|
||||
bool forceSaveAs = Main.Settings.Advanced.SaveExportForceSaveAs;
|
||||
return WinFormsUtil.ExportSAVDialog(this, SAV, SAV.CurrentBox, forceSaveAs);
|
||||
}
|
||||
|
||||
public bool ExportBackup()
|
||||
|
|
|
|||
|
|
@ -1226,6 +1226,7 @@ private async void Dragout_MouseDown(object sender, MouseEventArgs e)
|
|||
|
||||
// Gather data
|
||||
var pk = PreparePKM();
|
||||
var preModify = pk.Clone();
|
||||
var encrypt = ModifierKeys == Keys.Control;
|
||||
var data = encrypt ? pk.EncryptedPartyData : pk.DecryptedPartyData;
|
||||
|
||||
|
|
@ -1249,6 +1250,7 @@ private async void Dragout_MouseDown(object sender, MouseEventArgs e)
|
|||
C_SAV.M.Drag.ResetCursor(this);
|
||||
await DeleteAsync(newfile, 20_000).ConfigureAwait(false);
|
||||
}
|
||||
PKME_Tabs.NotifyWasExported(preModify); // restore pre-modify state, in case the user drags into the same program window
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
|
@ -1322,6 +1324,13 @@ private void ClickExportSAV(object sender, EventArgs e)
|
|||
if (!Menu_ExportSAV.Enabled)
|
||||
return; // hot-keys can't cheat the system!
|
||||
|
||||
if (Settings.Advanced.SaveExportCheckUnsavedEntity && PKME_Tabs.PKMIsUnsaved)
|
||||
{
|
||||
var prompt = WinFormsUtil.Prompt(MessageBoxButtons.YesNo, MsgProgramSaveUnsaved, MsgContinue);
|
||||
if (prompt != DialogResult.Yes)
|
||||
return;
|
||||
}
|
||||
|
||||
C_SAV.ExportSaveFile();
|
||||
Text = GetProgramTitle(C_SAV.SAV);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -301,6 +301,8 @@ LocalizedDescription.RetainMetDateTransfer45=Retain the Met Date when transferri
|
|||
LocalizedDescription.ReturnNoneIfEmptySearch=Überspringt die Suche, wenn vergessen wurde ein Pokémon / Attacken in die Suchkriterien einzugeben.
|
||||
LocalizedDescription.RNGFrameNotFound3=Zeigt in der Legalitäts Analyse an, wenn der RNG Frame Check keine Übereinstimmung findet.
|
||||
LocalizedDescription.RNGFrameNotFound4=Zeigt in der Legalitäts Analyse an, wenn der RNG Frame Check keine Übereinstimmung findet.
|
||||
LocalizedDescription.SaveExportCheckUnsavedEntity=Prüft, ob das Pokémon im Editor ungespeicherte Änderungen hat, bevor die Speicherdatei exportiert wird.
|
||||
LocalizedDescription.SaveExportForceSaveAs=Überspringt die Überschreiben-Abfrage beim Exportieren einer Speicherdatei, um immer Speichern unter... zu verwenden.
|
||||
LocalizedDescription.SearchBackups=Suche beim Laden der PKM Datenbank auch in den Backup Spielständen.
|
||||
LocalizedDescription.SearchExtraSaves=Durchsuche beim Laden der PKM Datenbank auch Backup Verzeichnisse.
|
||||
LocalizedDescription.SearchExtraSavesDeep=Durchsuche beim Laden der PKM Datenbank auch Unterverzeichmisse der Backup Verzeichnisse.
|
||||
|
|
|
|||
|
|
@ -301,6 +301,8 @@ LocalizedDescription.RetainMetDateTransfer45=Retain the Met Date when transferri
|
|||
LocalizedDescription.ReturnNoneIfEmptySearch=Skips searching if the user forgot to enter Species / Move(s) into the search criteria.
|
||||
LocalizedDescription.RNGFrameNotFound3=Severity to flag a Legality Check if the RNG Frame Checking logic does not find a match for Generation 3 encounters.
|
||||
LocalizedDescription.RNGFrameNotFound4=Severity to flag a Legality Check if the RNG Frame Checking logic does not find a match for Generation 4 encounters.
|
||||
LocalizedDescription.SaveExportCheckUnsavedEntity=Check if the Pokémon in the editor has unsaved changes before exporting the save file.
|
||||
LocalizedDescription.SaveExportForceSaveAs=Skip the Overwrite prompt when exporting a save file, to always Save As...
|
||||
LocalizedDescription.SearchBackups=When loading content for the PKM Database, search within backup save files.
|
||||
LocalizedDescription.SearchExtraSaves=When loading content for the PKM Database, search within OtherBackupPaths.
|
||||
LocalizedDescription.SearchExtraSavesDeep=When loading content for the PKM Database, search subfolders within OtherBackupPaths.
|
||||
|
|
@ -529,36 +531,36 @@ Main.Label_SubRegion=Sub Region:
|
|||
Main.Label_TID=TID:
|
||||
Main.Label_Total=Total:
|
||||
Main.Label_Tough=Tough
|
||||
Main.Menu_About=About PKHeX
|
||||
Main.Menu_BatchEditor=Batch Editor
|
||||
Main.Menu_Data=Data
|
||||
Main.Menu_Database=PKM Database
|
||||
Main.Menu_DumpBox=Dump Box
|
||||
Main.Menu_DumpBoxes=Dump Boxes
|
||||
Main.Menu_About=&About PKHeX
|
||||
Main.Menu_BatchEditor=&Batch Editor
|
||||
Main.Menu_Data=&Data
|
||||
Main.Menu_Database=PKM &Database
|
||||
Main.Menu_DumpBox=Dump Bo&x
|
||||
Main.Menu_DumpBoxes=Dump Bo&xes
|
||||
Main.Menu_EncDatabase=E&ncounter Database
|
||||
Main.Menu_Exit=Quit
|
||||
Main.Menu_Exit=&Quit
|
||||
Main.Menu_ExportBAK=Export Backup
|
||||
Main.Menu_ExportSAV=Export SAV...
|
||||
Main.Menu_File=File
|
||||
Main.Menu_Folder=Open Folder
|
||||
Main.Menu_Language=Language
|
||||
Main.Menu_LoadBoxes=Load Boxes
|
||||
Main.Menu_MGDatabase=Mystery Gift Database
|
||||
Main.Menu_Open=Open...
|
||||
Main.Menu_Options=Options
|
||||
Main.Menu_PopoutBoxAll=All Boxes
|
||||
Main.Menu_PopoutBoxSingle=Single Box
|
||||
Main.Menu_Redo=Redo Last Change
|
||||
Main.Menu_Report=Box Data Report
|
||||
Main.Menu_Save=Save PKM...
|
||||
Main.Menu_Settings=Settings
|
||||
Main.Menu_Showdown=Showdown
|
||||
Main.Menu_ShowdownExportCurrentBox=Export Current Box to Clipboard
|
||||
Main.Menu_ShowdownExportParty=Export Party to Clipboard
|
||||
Main.Menu_ShowdownExportPKM=Export Set to Clipboard
|
||||
Main.Menu_ShowdownImportPKM=Import Set from Clipboard
|
||||
Main.Menu_Tools=Tools
|
||||
Main.Menu_Undo=Undo Last Change
|
||||
Main.Menu_ExportSAV=&Export SAV...
|
||||
Main.Menu_File=&File
|
||||
Main.Menu_Folder=Open &Folder
|
||||
Main.Menu_Language=&Language
|
||||
Main.Menu_LoadBoxes=&Load Boxes
|
||||
Main.Menu_MGDatabase=Mystery &Gift Database
|
||||
Main.Menu_Open=&Open...
|
||||
Main.Menu_Options=&Options
|
||||
Main.Menu_PopoutBoxAll=&All Boxes
|
||||
Main.Menu_PopoutBoxSingle=&Single Box
|
||||
Main.Menu_Redo=&Redo Last Change
|
||||
Main.Menu_Report=Box Data &Report
|
||||
Main.Menu_Save=&Save PKM...
|
||||
Main.Menu_Settings=&Settings
|
||||
Main.Menu_Showdown=&Showdown
|
||||
Main.Menu_ShowdownExportCurrentBox=Export Current &Box to Clipboard
|
||||
Main.Menu_ShowdownExportParty=Export &Party to Clipboard
|
||||
Main.Menu_ShowdownExportPKM=&Export Set to Clipboard
|
||||
Main.Menu_ShowdownImportPKM=&Import Set from Clipboard
|
||||
Main.Menu_Tools=&Tools
|
||||
Main.Menu_Undo=&Undo Last Change
|
||||
Main.mnu_Delete=Delete
|
||||
Main.mnu_DeleteAll=Clear
|
||||
Main.mnu_DeleteClones=Clones
|
||||
|
|
|
|||
|
|
@ -301,6 +301,8 @@ LocalizedDescription.RetainMetDateTransfer45=Mantener la Fecha (de encuentro) al
|
|||
LocalizedDescription.ReturnNoneIfEmptySearch=Salta la búsqueda si el usuario olvidó ingresar la especie/movimiento(s) en el criterio de búsqueda.
|
||||
LocalizedDescription.RNGFrameNotFound3=En la validación de legalidad, marcar Severidad si se detecta que la lógica de verificación de tramas RNG no encuentra una coincidencia.
|
||||
LocalizedDescription.RNGFrameNotFound4=En la validación de legalidad, marcar Severidad si se detecta que la lógica de verificación de tramas RNG no encuentra una coincidencia.
|
||||
LocalizedDescription.SaveExportCheckUnsavedEntity=Comprueba si el Pokémon en el editor tiene cambios sin guardar antes de exportar el archivo de guardado.
|
||||
LocalizedDescription.SaveExportForceSaveAs=Omite el aviso de sobrescritura al exportar un archivo de guardado, para usar siempre Guardar como...
|
||||
LocalizedDescription.SearchBackups=Cuando se carga contenido para la base de datos PKM, buscar entre los archivos de guardado de respaldo.
|
||||
LocalizedDescription.SearchExtraSaves=Cuando se carga contenido para la base de datos PKM, buscar entre OtherBackupPaths.
|
||||
LocalizedDescription.SearchExtraSavesDeep=Cuando se carga contenido para la base de datos PKM, buscar subcarpetas entre OtherBackupPaths.
|
||||
|
|
|
|||
|
|
@ -301,6 +301,8 @@ LocalizedDescription.RetainMetDateTransfer45=Mantener la Fecha (de encuentro) al
|
|||
LocalizedDescription.ReturnNoneIfEmptySearch=Salta la búsqueda si el usuario olvidó ingresar la especie/movimiento(s) en el criterio de búsqueda.
|
||||
LocalizedDescription.RNGFrameNotFound3=En la validación de legalidad, marcar Severidad si se detecta que la lógica de verificación de tramas RNG no encuentra una coincidencia.
|
||||
LocalizedDescription.RNGFrameNotFound4=En la validación de legalidad, marcar Severidad si se detecta que la lógica de verificación de tramas RNG no encuentra una coincidencia.
|
||||
LocalizedDescription.SaveExportCheckUnsavedEntity=Comprueba si el Pokémon en el editor tiene cambios sin guardar antes de exportar el archivo de guardado.
|
||||
LocalizedDescription.SaveExportForceSaveAs=Omite el aviso de sobrescritura al exportar un archivo de guardado, para usar siempre Guardar como...
|
||||
LocalizedDescription.SearchBackups=Cuando se carga contenido para la base de datos PKM, buscar entre los archivos de guardado de respaldo.
|
||||
LocalizedDescription.SearchExtraSaves=Cuando se carga contenido para la base de datos PKM, buscar entre OtherBackupPaths.
|
||||
LocalizedDescription.SearchExtraSavesDeep=Cuando se carga contenido para la base de datos PKM, buscar subcarpetas entre OtherBackupPaths.
|
||||
|
|
|
|||
|
|
@ -301,6 +301,8 @@ LocalizedDescription.RetainMetDateTransfer45=Retain the Met Date when transferri
|
|||
LocalizedDescription.ReturnNoneIfEmptySearch=Saute la recherche si l'utilisateur a oublié de saisir Espèce / Capacité(s) dans les critères de recherche.
|
||||
LocalizedDescription.RNGFrameNotFound3=Severity to flag a Legality Check if the RNG Frame Checking logic does not find a match for Generation 3 encounters.
|
||||
LocalizedDescription.RNGFrameNotFound4=Severity to flag a Legality Check if the RNG Frame Checking logic does not find a match for Generation 4 encounters.
|
||||
LocalizedDescription.SaveExportCheckUnsavedEntity=Vérifie si le Pokémon dans l'éditeur a des modifications non enregistrées avant d'exporter le fichier de sauvegarde.
|
||||
LocalizedDescription.SaveExportForceSaveAs=Ignore l'invite d'écrasement lors de l'exportation d'un fichier de sauvegarde, pour toujours utiliser Enregistrer sous...
|
||||
LocalizedDescription.SearchBackups=When loading content for the PKM Database, search within backup save files.
|
||||
LocalizedDescription.SearchExtraSaves=When loading content for the PKM Database, search within OtherBackupPaths.
|
||||
LocalizedDescription.SearchExtraSavesDeep=When loading content for the PKM Database, search subfolders within OtherBackupPaths.
|
||||
|
|
|
|||
|
|
@ -301,6 +301,8 @@ LocalizedDescription.RetainMetDateTransfer45=Retain the Met Date when transferri
|
|||
LocalizedDescription.ReturnNoneIfEmptySearch=Salta il processo di ricerca se l'utente non ha inserito la Specie o le Mosse nei filtri di ricerca.
|
||||
LocalizedDescription.RNGFrameNotFound3=Forza una segnalazione di Legalità se la logica di controllo RNG non trova una corrispondenza.
|
||||
LocalizedDescription.RNGFrameNotFound4=Forza una segnalazione di Legalità se la logica di controllo RNG non trova una corrispondenza.
|
||||
LocalizedDescription.SaveExportCheckUnsavedEntity=Controlla se il Pokémon nell'editor ha modifiche non salvate prima di esportare il file di salvataggio.
|
||||
LocalizedDescription.SaveExportForceSaveAs=Salta la richiesta di sovrascrittura quando si esporta un file di salvataggio, per usare sempre Salva con nome...
|
||||
LocalizedDescription.SearchBackups=Cerca nei backup dei salvataggi quando carica il contenuto per il Database Pokémon.
|
||||
LocalizedDescription.SearchExtraSaves=Cerca in OtherBackupPaths quando carica il contenuto per il Database Pokémon.
|
||||
LocalizedDescription.SearchExtraSavesDeep=Cerca nelle sottocartelle di OtherBackupPaths quando carica il contenuto per il Database Pokémon.
|
||||
|
|
|
|||
|
|
@ -301,6 +301,8 @@ LocalizedDescription.RetainMetDateTransfer45=4世代から5世代に送っ
|
|||
LocalizedDescription.ReturnNoneIfEmptySearch=ユーザーがポケモンや技の入力をしなかった場合、検索をスキップする。
|
||||
LocalizedDescription.RNGFrameNotFound3=第3世代の乱数生成にはない個体が見つかった場合、正規チェックにフラグを立てる。
|
||||
LocalizedDescription.RNGFrameNotFound4=第4世代の乱数生成にはない個体が見つかった場合、正規チェックにフラグを立てる。
|
||||
LocalizedDescription.SaveExportCheckUnsavedEntity=保存データをエクスポートする前に、エディター内のポケモンに未保存の変更があるか確認します。
|
||||
LocalizedDescription.SaveExportForceSaveAs=保存データのエクスポート時に上書き確認を表示せず、常に「名前を付けて保存...」を使用します。
|
||||
LocalizedDescription.SearchBackups=When loading content for the PKM Database, search within backup save files.
|
||||
LocalizedDescription.SearchExtraSaves=When loading content for the PKM Database, search within OtherBackupPaths.
|
||||
LocalizedDescription.SearchExtraSavesDeep=When loading content for the PKM Database, search subfolders within OtherBackupPaths.
|
||||
|
|
|
|||
|
|
@ -301,6 +301,8 @@ LocalizedDescription.RetainMetDateTransfer45=Retain the Met Date when transferri
|
|||
LocalizedDescription.ReturnNoneIfEmptySearch=Skips searching if the user forgot to enter Species / Move(s) into the search criteria.
|
||||
LocalizedDescription.RNGFrameNotFound3=Severity to flag a Legality Check if the RNG Frame Checking logic does not find a match for Generation 3 encounters.
|
||||
LocalizedDescription.RNGFrameNotFound4=Severity to flag a Legality Check if the RNG Frame Checking logic does not find a match for Generation 4 encounters.
|
||||
LocalizedDescription.SaveExportCheckUnsavedEntity=세이브 파일을 내보내기 전에 편집기에서 포켓몬에 저장되지 않은 변경 사항이 있는지 확인합니다.
|
||||
LocalizedDescription.SaveExportForceSaveAs=세이브 파일을 내보낼 때 덮어쓰기 확인을 건너뛰어 항상 다른 이름으로 저장...을 사용합니다.
|
||||
LocalizedDescription.SearchBackups=When loading content for the PKM Database, search within backup save files.
|
||||
LocalizedDescription.SearchExtraSaves=When loading content for the PKM Database, search within OtherBackupPaths.
|
||||
LocalizedDescription.SearchExtraSavesDeep=When loading content for the PKM Database, search subfolders within OtherBackupPaths.
|
||||
|
|
|
|||
|
|
@ -301,6 +301,8 @@ LocalizedDescription.RetainMetDateTransfer45=在从第4代转移到第5代时保
|
|||
LocalizedDescription.ReturnNoneIfEmptySearch=如果用户忘记在搜索条件中输入种类/招式,则跳过搜索。
|
||||
LocalizedDescription.RNGFrameNotFound3=如果 RNG 帧检查逻辑未找到第3代遭遇的匹配项,则标记合法性检查的严重性。
|
||||
LocalizedDescription.RNGFrameNotFound4=如果 RNG 帧检查逻辑未找到第4代遭遇的匹配项,则标记合法性检查的严重性。
|
||||
LocalizedDescription.SaveExportCheckUnsavedEntity=在导出存档文件之前,检查编辑器中的宝可梦是否有未保存的更改。
|
||||
LocalizedDescription.SaveExportForceSaveAs=导出存档文件时跳过覆盖提示,始终使用“另存为...”。
|
||||
LocalizedDescription.SearchBackups=当加载 PKM 数据库内容时,包含其他备份储存资料档案。
|
||||
LocalizedDescription.SearchExtraSaves=当加载 PKM数据库属性时,包含其他备份路径内档案。
|
||||
LocalizedDescription.SearchExtraSavesDeep=当加载 PKM 数据库内容时,包含其他备份路径内子资料夹。
|
||||
|
|
|
|||
|
|
@ -301,6 +301,8 @@ LocalizedDescription.RetainMetDateTransfer45=Retain the Met Date when transferri
|
|||
LocalizedDescription.ReturnNoneIfEmptySearch=Skips searching if the user forgot to enter Species / Move(s) into the search criteria.
|
||||
LocalizedDescription.RNGFrameNotFound3=RNG幀匹配度合法性檢查等級。
|
||||
LocalizedDescription.RNGFrameNotFound4=RNG幀匹配度合法性檢查等級。
|
||||
LocalizedDescription.SaveExportCheckUnsavedEntity=在匯出儲存資料檔之前,檢查編輯器中的寶可夢是否有未儲存的變更。
|
||||
LocalizedDescription.SaveExportForceSaveAs=匯出儲存資料檔時跳過覆寫提示,始終使用「另存為...」。
|
||||
LocalizedDescription.SearchBackups=當加載 PKM 數據庫内容時,包含其他備份儲存資料檔案
|
||||
LocalizedDescription.SearchExtraSaves=當加載 PKM 數據庫内容時,包含其他備份路徑内檔案
|
||||
LocalizedDescription.SearchExtraSavesDeep=當加載 PKM 數據庫内容時,包含其他備份路徑内子資料夾
|
||||
|
|
|
|||
16
PKHeX.WinForms/Subforms/SAV_FolderList.Designer.cs
generated
16
PKHeX.WinForms/Subforms/SAV_FolderList.Designer.cs
generated
|
|
@ -30,6 +30,8 @@ protected override void Dispose(bool disposing)
|
|||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||
FLP_Buttons = new System.Windows.Forms.FlowLayoutPanel();
|
||||
TC_Tabs = new System.Windows.Forms.TabControl();
|
||||
Tab_Recent = new System.Windows.Forms.TabPage();
|
||||
|
|
@ -54,7 +56,7 @@ private void InitializeComponent()
|
|||
FLP_Buttons.Location = new Point(0, 0);
|
||||
FLP_Buttons.Name = "FLP_Buttons";
|
||||
FLP_Buttons.Padding = new System.Windows.Forms.Padding(3);
|
||||
FLP_Buttons.Size = new Size(601, 331);
|
||||
FLP_Buttons.Size = new Size(616, 331);
|
||||
FLP_Buttons.TabIndex = 0;
|
||||
//
|
||||
// TC_Tabs
|
||||
|
|
@ -86,6 +88,8 @@ private void InitializeComponent()
|
|||
dgDataRecent.AllowUserToOrderColumns = true;
|
||||
dgDataRecent.AllowUserToResizeColumns = false;
|
||||
dgDataRecent.AllowUserToResizeRows = false;
|
||||
dataGridViewCellStyle1.BackColor = SystemColors.ControlLight;
|
||||
dgDataRecent.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1;
|
||||
dgDataRecent.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
|
||||
dgDataRecent.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
|
||||
dgDataRecent.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
|
|
@ -102,7 +106,7 @@ private void InitializeComponent()
|
|||
Tab_Backup.Controls.Add(dgDataBackup);
|
||||
Tab_Backup.Location = new Point(4, 26);
|
||||
Tab_Backup.Name = "Tab_Backup";
|
||||
Tab_Backup.Size = new Size(601, 331);
|
||||
Tab_Backup.Size = new Size(616, 331);
|
||||
Tab_Backup.TabIndex = 2;
|
||||
Tab_Backup.Text = "Backups";
|
||||
Tab_Backup.UseVisualStyleBackColor = true;
|
||||
|
|
@ -114,13 +118,15 @@ private void InitializeComponent()
|
|||
dgDataBackup.AllowUserToOrderColumns = true;
|
||||
dgDataBackup.AllowUserToResizeColumns = false;
|
||||
dgDataBackup.AllowUserToResizeRows = false;
|
||||
dataGridViewCellStyle2.BackColor = SystemColors.ControlLight;
|
||||
dgDataBackup.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle2;
|
||||
dgDataBackup.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
|
||||
dgDataBackup.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
|
||||
dgDataBackup.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
dgDataBackup.Location = new Point(0, 0);
|
||||
dgDataBackup.Name = "dgDataBackup";
|
||||
dgDataBackup.RowHeadersVisible = false;
|
||||
dgDataBackup.Size = new Size(601, 331);
|
||||
dgDataBackup.Size = new Size(616, 331);
|
||||
dgDataBackup.TabIndex = 1;
|
||||
dgDataBackup.CellMouseDown += DataGridCellMouseDown;
|
||||
//
|
||||
|
|
@ -129,7 +135,7 @@ private void InitializeComponent()
|
|||
Tab_Folders.Controls.Add(FLP_Buttons);
|
||||
Tab_Folders.Location = new Point(4, 26);
|
||||
Tab_Folders.Name = "Tab_Folders";
|
||||
Tab_Folders.Size = new Size(601, 331);
|
||||
Tab_Folders.Size = new Size(616, 331);
|
||||
Tab_Folders.TabIndex = 0;
|
||||
Tab_Folders.Text = "Folders";
|
||||
Tab_Folders.UseVisualStyleBackColor = true;
|
||||
|
|
@ -160,12 +166,14 @@ private void InitializeComponent()
|
|||
Controls.Add(CB_FilterColumn);
|
||||
Controls.Add(TC_Tabs);
|
||||
Icon = Properties.Resources.Icon;
|
||||
KeyPreview = true;
|
||||
MaximizeBox = false;
|
||||
MinimizeBox = false;
|
||||
MinimumSize = new Size(640, 400);
|
||||
Name = "SAV_FolderList";
|
||||
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
Text = "Folder List";
|
||||
KeyDown += OnKeyDown;
|
||||
TC_Tabs.ResumeLayout(false);
|
||||
Tab_Recent.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)dgDataRecent).EndInit();
|
||||
|
|
|
|||
|
|
@ -72,6 +72,13 @@ public SAV_FolderList(Action<SaveFile> openSaveFile)
|
|||
}
|
||||
}
|
||||
|
||||
private void OnKeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
// Quick close with Ctrl+W
|
||||
if (e.KeyCode == Keys.W && ModifierKeys == Keys.Control)
|
||||
Close();
|
||||
}
|
||||
|
||||
private static List<INamedFolderPath> GetPathList(IReadOnlyList<string> drives, string backupPath)
|
||||
{
|
||||
List<INamedFolderPath> locs =
|
||||
|
|
|
|||
|
|
@ -65,8 +65,8 @@ public DualDiffSelection SelectNewOld(string file, string asNew, string asOld)
|
|||
|
||||
public DialogResult RequestOverwrite(string exist)
|
||||
{
|
||||
var taskButtonOverwrite = new TaskDialogCommandLinkButton(MessageStrings.MsgDialogFileOverwrite) { AllowCloseDialog = true };
|
||||
var taskButtonSelect = new TaskDialogCommandLinkButton(MessageStrings.MsgDialogFileSaveAs) { AllowCloseDialog = true };
|
||||
var taskButtonOverwrite = new TaskDialogButton(MessageStrings.MsgDialogFileOverwrite) { AllowCloseDialog = true };
|
||||
var taskButtonSelect = new TaskDialogButton(MessageStrings.MsgDialogFileSaveAs) { AllowCloseDialog = true };
|
||||
var page = new TaskDialogPage
|
||||
{
|
||||
Caption = MessageStrings.MsgDialogFileSaveReplace,
|
||||
|
|
|
|||
|
|
@ -387,11 +387,12 @@ private static void SaveBackup(string path)
|
|||
/// <param name="c">Control to anchor dialog to.</param>
|
||||
/// <param name="sav"><see cref="SaveFile"/> to be saved.</param>
|
||||
/// <param name="currentBox">Box the player will be greeted with when accessing the PC in-game.</param>
|
||||
/// <param name="forceSaveAs">Whether to force the Save As dialog even if the file exists.</param>
|
||||
/// <returns>True if the file was saved.</returns>
|
||||
public static bool ExportSAVDialog(Control c, SaveFile sav, int currentBox = 0)
|
||||
public static bool ExportSAVDialog(Control c, SaveFile sav, int currentBox = 0, bool forceSaveAs = false)
|
||||
{
|
||||
// Try to request an overwrite first; if they defer, do the save file dialog.
|
||||
if (!sav.Metadata.IsBackup && File.Exists(sav.Metadata.FilePath))
|
||||
if (!forceSaveAs && !sav.Metadata.IsBackup && File.Exists(sav.Metadata.FilePath))
|
||||
{
|
||||
var exist = sav.Metadata.FilePath;
|
||||
var task = c.FindForm()!.RequestOverwrite(exist);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user