mirror of
https://github.com/kwsch/PKHeX
synced 2024-11-13 15:57:09 +00:00
parent
75d460e502
commit
b86321c142
5 changed files with 32 additions and 21 deletions
|
@ -707,7 +707,7 @@ namespace PKHeX.WinForms
|
||||||
{
|
{
|
||||||
openSAV(sav, path);
|
openSAV(sav, path);
|
||||||
}
|
}
|
||||||
else if ((temp = PKMConverter.getPKMfromBytes(input)) != null)
|
else if ((temp = PKMConverter.getPKMfromBytes(input, prefer: SAV.Generation)) != null)
|
||||||
{
|
{
|
||||||
PKM pk = PKMConverter.convertToFormat(temp, SAV.PKMType, out c);
|
PKM pk = PKMConverter.convertToFormat(temp, SAV.PKMType, out c);
|
||||||
if (pk == null)
|
if (pk == null)
|
||||||
|
@ -1640,7 +1640,7 @@ namespace PKHeX.WinForms
|
||||||
|
|
||||||
if (ekx == null) return;
|
if (ekx == null) return;
|
||||||
|
|
||||||
PKM pk = PKMConverter.getPKMfromBytes(ekx);
|
PKM pk = PKMConverter.getPKMfromBytes(ekx, prefer: SAV.Generation);
|
||||||
if (pk == null) { WinFormsUtil.Alert("Decoded data not a valid PKM.", $"QR Data Size: {ekx.Length}"); }
|
if (pk == null) { WinFormsUtil.Alert("Decoded data not a valid PKM.", $"QR Data Size: {ekx.Length}"); }
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -3860,7 +3860,7 @@ namespace PKHeX.WinForms
|
||||||
foreach (byte[] data in from file in filepaths where PKX.getIsPKM(new FileInfo(file).Length) select File.ReadAllBytes(file))
|
foreach (byte[] data in from file in filepaths where PKX.getIsPKM(new FileInfo(file).Length) select File.ReadAllBytes(file))
|
||||||
{
|
{
|
||||||
string c;
|
string c;
|
||||||
PKM temp = PKMConverter.getPKMfromBytes(data);
|
PKM temp = PKMConverter.getPKMfromBytes(data, prefer: SAV.Generation);
|
||||||
PKM pk = PKMConverter.convertToFormat(temp, SAV.PKMType, out c);
|
PKM pk = PKMConverter.convertToFormat(temp, SAV.PKMType, out c);
|
||||||
|
|
||||||
if (pk != null) // Write to save
|
if (pk != null) // Write to save
|
||||||
|
@ -4215,7 +4215,7 @@ namespace PKHeX.WinForms
|
||||||
|
|
||||||
byte[] data = File.ReadAllBytes(file);
|
byte[] data = File.ReadAllBytes(file);
|
||||||
MysteryGift mg = MysteryGift.getMysteryGift(data, fi.Extension);
|
MysteryGift mg = MysteryGift.getMysteryGift(data, fi.Extension);
|
||||||
PKM temp = mg != null ? mg.convertToPKM(SAV) : PKMConverter.getPKMfromBytes(data);
|
PKM temp = mg?.convertToPKM(SAV) ?? PKMConverter.getPKMfromBytes(data, prefer: SAV.Generation);
|
||||||
string c;
|
string c;
|
||||||
|
|
||||||
PKM pk = PKMConverter.convertToFormat(temp, SAV.PKMType, out c);
|
PKM pk = PKMConverter.convertToFormat(temp, SAV.PKMType, out c);
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace PKHeX.WinForms
|
||||||
public BatchEditor(PKM pk)
|
public BatchEditor(PKM pk)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
pkm = pk;
|
pkmref = pk;
|
||||||
DragDrop += tabMain_DragDrop;
|
DragDrop += tabMain_DragDrop;
|
||||||
DragEnter += tabMain_DragEnter;
|
DragEnter += tabMain_DragEnter;
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ namespace PKHeX.WinForms
|
||||||
return p1;
|
return p1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly PKM pkm;
|
private readonly PKM pkmref;
|
||||||
private const string CONST_RAND = "$rand";
|
private const string CONST_RAND = "$rand";
|
||||||
private const string CONST_SHINY = "$shiny";
|
private const string CONST_SHINY = "$shiny";
|
||||||
private int currentFormat = -1;
|
private int currentFormat = -1;
|
||||||
|
@ -232,7 +232,7 @@ namespace PKHeX.WinForms
|
||||||
}
|
}
|
||||||
|
|
||||||
byte[] data = File.ReadAllBytes(file);
|
byte[] data = File.ReadAllBytes(file);
|
||||||
var pkm = PKMConverter.getPKMfromBytes(data);
|
var pkm = PKMConverter.getPKMfromBytes(data, prefer: Main.SAV.Generation);
|
||||||
|
|
||||||
if (!pkm.Valid)
|
if (!pkm.Valid)
|
||||||
{
|
{
|
||||||
|
@ -316,8 +316,8 @@ namespace PKHeX.WinForms
|
||||||
private void CB_Property_SelectedIndexChanged(object sender, EventArgs e)
|
private void CB_Property_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
L_PropType.Text = getPropertyType(CB_Property.Text);
|
L_PropType.Text = getPropertyType(CB_Property.Text);
|
||||||
L_PropValue.Text = pkm.GetType().HasProperty(CB_Property.Text)
|
L_PropValue.Text = pkmref.GetType().HasProperty(CB_Property.Text)
|
||||||
? ReflectUtil.GetValue(pkm, CB_Property.Text).ToString()
|
? ReflectUtil.GetValue(pkmref, CB_Property.Text).ToString()
|
||||||
: "";
|
: "";
|
||||||
}
|
}
|
||||||
private string getPropertyType(string propertyName)
|
private string getPropertyType(string propertyName)
|
||||||
|
|
|
@ -89,7 +89,7 @@ namespace PKHeX.WinForms
|
||||||
{
|
{
|
||||||
FileInfo fi = new FileInfo(file);
|
FileInfo fi = new FileInfo(file);
|
||||||
if (!fi.Extension.Contains(".pk") || !PKX.getIsPKM(fi.Length)) return;
|
if (!fi.Extension.Contains(".pk") || !PKX.getIsPKM(fi.Length)) return;
|
||||||
var pk = PKMConverter.getPKMfromBytes(File.ReadAllBytes(file), file);
|
var pk = PKMConverter.getPKMfromBytes(File.ReadAllBytes(file), file, prefer: Main.SAV.Generation);
|
||||||
if (pk != null)
|
if (pk != null)
|
||||||
dbTemp.Add(pk);
|
dbTemp.Add(pk);
|
||||||
});
|
});
|
||||||
|
|
|
@ -262,7 +262,7 @@ namespace PKHeX.WinForms
|
||||||
|
|
||||||
byte[] data = File.ReadAllBytes(file);
|
byte[] data = File.ReadAllBytes(file);
|
||||||
MysteryGift mg = MysteryGift.getMysteryGift(data, fi.Extension);
|
MysteryGift mg = MysteryGift.getMysteryGift(data, fi.Extension);
|
||||||
PKM temp = mg != null ? mg.convertToPKM(SAV) : PKMConverter.getPKMfromBytes(data);
|
PKM temp = mg != null ? mg.convertToPKM(SAV) : PKMConverter.getPKMfromBytes(data, prefer: SAV.Generation);
|
||||||
string c;
|
string c;
|
||||||
|
|
||||||
PKM pk = PKMConverter.convertToFormat(temp, SAV.PKMType, out c);
|
PKM pk = PKMConverter.convertToFormat(temp, SAV.PKMType, out c);
|
||||||
|
|
|
@ -75,8 +75,9 @@ namespace PKHeX.Core
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="data">Raw data of the Pokemon file.</param>
|
/// <param name="data">Raw data of the Pokemon file.</param>
|
||||||
/// <param name="ident">Optional identifier for the Pokemon. Usually the full path of the source file.</param>
|
/// <param name="ident">Optional identifier for the Pokemon. Usually the full path of the source file.</param>
|
||||||
|
/// <param name="prefer">Optional identifier for the preferred generation. Usually the generation of the destination save file.</param>
|
||||||
/// <returns>An instance of <see cref="PKM"/> created from the given <paramref name="data"/>, or null if <paramref name="data"/> is invalid.</returns>
|
/// <returns>An instance of <see cref="PKM"/> created from the given <paramref name="data"/>, or null if <paramref name="data"/> is invalid.</returns>
|
||||||
public static PKM getPKMfromBytes(byte[] data, string ident = null)
|
public static PKM getPKMfromBytes(byte[] data, string ident = null, int prefer = 7)
|
||||||
{
|
{
|
||||||
checkEncrypted(ref data);
|
checkEncrypted(ref data);
|
||||||
switch (getPKMDataFormat(data))
|
switch (getPKMDataFormat(data))
|
||||||
|
@ -110,7 +111,7 @@ namespace PKHeX.Core
|
||||||
return new PK5(data, ident);
|
return new PK5(data, ident);
|
||||||
case 6:
|
case 6:
|
||||||
var pkx = new PK6(data, ident);
|
var pkx = new PK6(data, ident);
|
||||||
return checkPKMFormat7(pkx);
|
return checkPKMFormat7(pkx, prefer);
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -120,14 +121,16 @@ namespace PKHeX.Core
|
||||||
/// Checks if the input PK6 file is really a PK7, if so, updates the object.
|
/// Checks if the input PK6 file is really a PK7, if so, updates the object.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="pk">PKM to check</param>
|
/// <param name="pk">PKM to check</param>
|
||||||
|
/// <param name="prefer">Prefer a certain generation over another</param>
|
||||||
/// <returns>Updated PKM if actually PK7</returns>
|
/// <returns>Updated PKM if actually PK7</returns>
|
||||||
private static PKM checkPKMFormat7(PK6 pk) => checkPK6is7(pk) ? new PK7(pk.Data, pk.Identifier) : (PKM)pk;
|
private static PKM checkPKMFormat7(PK6 pk, int prefer) => checkPK6is7(pk, prefer) ? new PK7(pk.Data, pk.Identifier) : (PKM)pk;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks if the input PK6 file is really a PK7.
|
/// Checks if the input PK6 file is really a PK7.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="pk">PKM to check</param>
|
/// <param name="pk">PK6 to check</param>
|
||||||
|
/// <param name="prefer">Prefer a certain generation over another</param>
|
||||||
/// <returns>Boolean is a PK7</returns>
|
/// <returns>Boolean is a PK7</returns>
|
||||||
private static bool checkPK6is7(PK6 pk)
|
private static bool checkPK6is7(PK6 pk, int prefer)
|
||||||
{
|
{
|
||||||
if (pk.Version > Legal.MaxGameID_6)
|
if (pk.Version > Legal.MaxGameID_6)
|
||||||
return true;
|
return true;
|
||||||
|
@ -146,11 +149,19 @@ namespace PKHeX.Core
|
||||||
if (pk.HeldItem > Legal.MaxItemID_6_AO)
|
if (pk.HeldItem > Legal.MaxItemID_6_AO)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
int lvl = pk.CurrentLevel;
|
int et = pk.EncounterType;
|
||||||
if (lvl < 100 && pk.EncounterType != 0)
|
if (et != 0)
|
||||||
return false;
|
{
|
||||||
if (pk.EncounterType > 24)
|
if (pk.CurrentLevel < 100) // can't be hyper trained
|
||||||
return true;
|
return false;
|
||||||
|
|
||||||
|
if (pk.GenNumber != 4) // can't have encounter type
|
||||||
|
return true;
|
||||||
|
if (et > 24) // invalid encountertype
|
||||||
|
return true;
|
||||||
|
if (prefer > 6) // preferential treatment
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false; // 6
|
return false; // 6
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue