mirror of
https://github.com/kwsch/PKHeX
synced 2025-01-28 20:25:05 +00:00
Cleanup
Use S/M met locations for Pokémon GO origin Changing to VC1 or GO now autofills met location Un-alphabetize RGBY games and move to end of games list (+go) Mark unused region names (Kanto string appears twice in text bank 3, 30013 is used) Move hypertraining stat toggling to pkm object shift 1->7 logic to repeat less operations add more 1->7 logic pertaining to memories add RefreshAbility method (0 based input, not 1/2/4)
This commit is contained in:
parent
ae8f929f97
commit
f282711e35
8 changed files with 261 additions and 283 deletions
|
@ -238,8 +238,9 @@ namespace PKHeX.WinForms
|
|||
public static string DatabasePath => Path.Combine(WorkingDirectory, "pkmdb");
|
||||
public static string MGDatabasePath => Path.Combine(WorkingDirectory, "mgdb");
|
||||
private static string BackupPath => Path.Combine(WorkingDirectory, "bak");
|
||||
private static string ThreadPath => @"https://projectpokemon.org/PKHeX/";
|
||||
private static string VersionPath => @"https://raw.githubusercontent.com/kwsch/PKHeX/master/PKHeX/Resources/text/version.txt";
|
||||
private const string ThreadPath = @"https://projectpokemon.org/PKHeX/";
|
||||
private const string VersionPath = @"https://raw.githubusercontent.com/kwsch/PKHeX/master/PKHeX/Resources/text/version.txt";
|
||||
private const string QR6Path = @"http://loadcode.projectpokemon.org/b1s1.html#"; // Rehosted with permission from LC/MS -- massive thanks!
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -1193,7 +1194,7 @@ namespace PKHeX.WinForms
|
|||
updateOriginGame(null, null);
|
||||
|
||||
// Refresh PK* conversion info
|
||||
PKMConverter.updateConfig(SAV.SubRegion, SAV.Country, SAV.ConsoleRegion, SAV.OT, SAV.Gender);
|
||||
PKMConverter.updateConfig(SAV.SubRegion, SAV.Country, SAV.ConsoleRegion, SAV.OT, SAV.Gender, SAV.Language);
|
||||
|
||||
if (WindowTranslationRequired) // force update -- re-added controls may be untranslated
|
||||
WinFormsUtil.TranslateInterface(this, curlanguage);
|
||||
|
@ -1593,22 +1594,23 @@ namespace PKHeX.WinForms
|
|||
}
|
||||
private void setMarkings()
|
||||
{
|
||||
Func<bool, double> getOpacity = b => b ? 1 : 0.175;
|
||||
PictureBox[] pba = { PB_Mark1, PB_Mark2, PB_Mark3, PB_Mark4, PB_Mark5, PB_Mark6 };
|
||||
for (int i = 0; i < pba.Length; i++)
|
||||
pba[i].Image = ImageUtil.ChangeOpacity(pba[i].InitialImage, pkm.Markings[i] != 0 ? 1 : 0.1);
|
||||
pba[i].Image = ImageUtil.ChangeOpacity(pba[i].InitialImage, getOpacity(pkm.Markings[i] != 0));
|
||||
|
||||
PB_MarkShiny.Image = ImageUtil.ChangeOpacity(PB_MarkShiny.InitialImage, !BTN_Shinytize.Enabled ? 1 : 0.1);
|
||||
PB_MarkCured.Image = ImageUtil.ChangeOpacity(PB_MarkCured.InitialImage, CHK_Cured.Checked ? 1 : 0.1);
|
||||
PB_MarkShiny.Image = ImageUtil.ChangeOpacity(PB_MarkShiny.InitialImage, getOpacity(!BTN_Shinytize.Enabled));
|
||||
PB_MarkCured.Image = ImageUtil.ChangeOpacity(PB_MarkCured.InitialImage, getOpacity(CHK_Cured.Checked));
|
||||
|
||||
PB_MarkPentagon.Image = ImageUtil.ChangeOpacity(PB_MarkPentagon.InitialImage, pkm.Gen6 ? 1 : 0.1);
|
||||
PB_MarkPentagon.Image = ImageUtil.ChangeOpacity(PB_MarkPentagon.InitialImage, getOpacity(pkm.Gen6));
|
||||
|
||||
// Gen7 Markings
|
||||
if (pkm.Format != 7)
|
||||
return;
|
||||
|
||||
PB_MarkAlola.Image = ImageUtil.ChangeOpacity(PB_MarkAlola.InitialImage, pkm.Gen7 ? 1 : 0.1);
|
||||
PB_MarkVC.Image = ImageUtil.ChangeOpacity(PB_MarkVC.InitialImage, pkm.VC ? 1 : 0.1);
|
||||
PB_MarkHorohoro.Image = ImageUtil.ChangeOpacity(PB_MarkHorohoro.InitialImage, pkm.Horohoro ? 1 : 0.1);
|
||||
PB_MarkAlola.Image = ImageUtil.ChangeOpacity(PB_MarkAlola.InitialImage, getOpacity(pkm.Gen7));
|
||||
PB_MarkVC.Image = ImageUtil.ChangeOpacity(PB_MarkVC.InitialImage, getOpacity(pkm.VC));
|
||||
PB_MarkHorohoro.Image = ImageUtil.ChangeOpacity(PB_MarkHorohoro.InitialImage, getOpacity(pkm.Horohoro));
|
||||
|
||||
for (int i = 0; i < pba.Length; i++)
|
||||
{
|
||||
|
@ -1657,8 +1659,7 @@ namespace PKHeX.WinForms
|
|||
if (!verifiedPKM()) return;
|
||||
PKM pkx = preparePKM();
|
||||
byte[] ekx = pkx.EncryptedBoxData;
|
||||
|
||||
const string server = "http://loadcode.projectpokemon.org/b1s1.html#"; // Rehosted with permission from LC/MS -- massive thanks!
|
||||
|
||||
Image qr;
|
||||
switch (pkx.Format)
|
||||
{
|
||||
|
@ -1666,7 +1667,7 @@ namespace PKHeX.WinForms
|
|||
qr = QR.GenerateQRCode7((PK7) pkx);
|
||||
break;
|
||||
default:
|
||||
qr = QR.getQRImage(ekx, pkx.Format == 6 ? server : "null/#");
|
||||
qr = QR.getQRImage(ekx, pkx.Format == 6 ? QR6Path : "null/#");
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1780,27 +1781,7 @@ namespace PKHeX.WinForms
|
|||
else
|
||||
{
|
||||
var index = Array.IndexOf(new[] {TB_HPIV, TB_ATKIV, TB_DEFIV, TB_SPAIV, TB_SPDIV, TB_SPEIV}, sender);
|
||||
switch (index)
|
||||
{
|
||||
case 0:
|
||||
pkm.HT_HP ^= true;
|
||||
break;
|
||||
case 1:
|
||||
pkm.HT_ATK ^= true;
|
||||
break;
|
||||
case 2:
|
||||
pkm.HT_DEF ^= true;
|
||||
break;
|
||||
case 3:
|
||||
pkm.HT_SPA ^= true;
|
||||
break;
|
||||
case 4:
|
||||
pkm.HT_SPD ^= true;
|
||||
break;
|
||||
case 5:
|
||||
pkm.HT_SPE ^= true;
|
||||
break;
|
||||
}
|
||||
pkm.HyperTrainInvert(index);
|
||||
updateIVs(sender, e);
|
||||
}
|
||||
else if (ModifierKeys == Keys.Alt)
|
||||
|
@ -2160,26 +2141,13 @@ namespace PKHeX.WinForms
|
|||
private void updateRandomEVs(object sender, EventArgs e)
|
||||
{
|
||||
changingFields = true;
|
||||
if (ModifierKeys == Keys.Control || ModifierKeys == Keys.Shift)
|
||||
{
|
||||
// Max EVs
|
||||
TB_HPEV.Text = 0.ToString();
|
||||
TB_ATKEV.Text = 0.ToString();
|
||||
TB_DEFEV.Text = 0.ToString();
|
||||
TB_SPAEV.Text = 0.ToString();
|
||||
TB_SPDEV.Text = 0.ToString();
|
||||
TB_SPEEV.Text = 0.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
var evs = PKX.getRandomEVs(SAV.Generation);
|
||||
TB_HPEV.Text = evs[0].ToString();
|
||||
TB_ATKEV.Text = evs[1].ToString();
|
||||
TB_DEFEV.Text = evs[2].ToString();
|
||||
TB_SPAEV.Text = evs[3].ToString();
|
||||
TB_SPDEV.Text = evs[4].ToString();
|
||||
TB_SPEEV.Text = evs[5].ToString();
|
||||
}
|
||||
|
||||
var tb = new[] {TB_HPEV, TB_ATKEV, TB_DEFEV, TB_SPAEV, TB_SPDEV, TB_SPEEV};
|
||||
bool zero = ModifierKeys == Keys.Control || ModifierKeys == Keys.Shift;
|
||||
var evs = zero ? new uint[6] : PKX.getRandomEVs(SAV.Generation);
|
||||
for (int i = 0; i < 6; i++)
|
||||
tb[i].Text = evs[i].ToString();
|
||||
|
||||
changingFields = false;
|
||||
updateEVs(null, null);
|
||||
}
|
||||
|
@ -2426,7 +2394,17 @@ namespace PKHeX.WinForms
|
|||
CB_MetLocation.DisplayMember = "Text";
|
||||
CB_MetLocation.ValueMember = "Value";
|
||||
CB_MetLocation.DataSource = new BindingSource(met_list, null);
|
||||
CB_MetLocation.SelectedIndex = 0; // transporter or pal park for past gen pkm
|
||||
|
||||
int metLoc = 0; // transporter or pal park for past gen pkm
|
||||
switch (newTrack)
|
||||
{
|
||||
case GameVersion.GO: metLoc = 30012; break;
|
||||
case GameVersion.RBY: metLoc = 30013; break;
|
||||
}
|
||||
if (metLoc != 0)
|
||||
CB_MetLocation.SelectedValue = metLoc;
|
||||
else
|
||||
CB_MetLocation.SelectedIndex = metLoc;
|
||||
|
||||
var egg_list = GameInfo.getLocationList(Version, SAV.Generation, egg:true);
|
||||
CB_EggLocation.DisplayMember = "Text";
|
||||
|
@ -3116,13 +3094,10 @@ namespace PKHeX.WinForms
|
|||
|
||||
private void Main_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (SAV.Edited)
|
||||
{
|
||||
if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Any unsaved changes will be lost.", "Are you sure you want to close PKHeX?") != DialogResult.Yes)
|
||||
{
|
||||
e.Cancel = true;
|
||||
}
|
||||
}
|
||||
if (!SAV.Edited)
|
||||
return;
|
||||
if (DialogResult.Yes != WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Any unsaved changes will be lost.", "Are you sure you want to close PKHeX?"))
|
||||
e.Cancel = true;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
@ -3953,10 +3928,17 @@ namespace PKHeX.WinForms
|
|||
}
|
||||
|
||||
// Subfunction Save Buttons //
|
||||
private void B_OpenWondercards_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_Wondercard(sender as MysteryGift).ShowDialog();
|
||||
}
|
||||
private void B_OpenWondercards_Click(object sender, EventArgs e) => new SAV_Wondercard(sender as MysteryGift).ShowDialog();
|
||||
private void B_OpenPokepuffs_Click(object sender, EventArgs e) => new SAV_Pokepuff().ShowDialog();
|
||||
private void B_OpenPokeBeans_Click(object sender, EventArgs e) => new SAV_Pokebean().ShowDialog();
|
||||
private void B_OpenItemPouch_Click(object sender, EventArgs e) => new SAV_Inventory().ShowDialog();
|
||||
private void B_OpenBerryField_Click(object sender, EventArgs e) => new SAV_BerryFieldXY().ShowDialog();
|
||||
private void B_OpenPokeblocks_Click(object sender, EventArgs e) => new SAV_PokeBlockORAS().ShowDialog();
|
||||
private void B_OpenEventFlags_Click(object sender, EventArgs e) => new SAV_EventFlags().ShowDialog();
|
||||
private void B_OpenSuperTraining_Click(object sender, EventArgs e) => new SAV_SuperTrain().ShowDialog();
|
||||
private void B_OpenSecretBase_Click(object sender, EventArgs e) => new SAV_SecretBase().ShowDialog();
|
||||
private void B_OpenZygardeCells_Click(object sender, EventArgs e) => new SAV_ZygardeCell().ShowDialog();
|
||||
private void B_LinkInfo_Click(object sender, EventArgs e) => new SAV_Link6().ShowDialog();
|
||||
private void B_OpenBoxLayout_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_BoxLayout(CB_BoxSelect.SelectedIndex).ShowDialog();
|
||||
|
@ -3973,35 +3955,7 @@ namespace PKHeX.WinForms
|
|||
else if (SAV.Generation == 7)
|
||||
new SAV_Trainer7().ShowDialog();
|
||||
// Refresh conversion info
|
||||
PKMConverter.updateConfig(SAV.SubRegion, SAV.Country, SAV.ConsoleRegion, SAV.OT, SAV.Gender);
|
||||
}
|
||||
private void B_OpenPokepuffs_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_Pokepuff().ShowDialog();
|
||||
}
|
||||
private void B_OpenPokeBeans_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_Pokebean().ShowDialog();
|
||||
}
|
||||
private void B_OpenItemPouch_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_Inventory().ShowDialog();
|
||||
}
|
||||
private void B_OpenBerryField_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_BerryFieldXY().ShowDialog();
|
||||
}
|
||||
private void B_OpenPokeblocks_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_PokeBlockORAS().ShowDialog();
|
||||
}
|
||||
private void B_OpenEventFlags_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_EventFlags().ShowDialog();
|
||||
}
|
||||
private void B_OpenSuperTraining_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_SuperTrain().ShowDialog();
|
||||
PKMConverter.updateConfig(SAV.SubRegion, SAV.Country, SAV.ConsoleRegion, SAV.OT, SAV.Gender, SAV.Language);
|
||||
}
|
||||
private void B_OpenOPowers_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
@ -4098,18 +4052,6 @@ namespace PKHeX.WinForms
|
|||
else if (SAV.SM)
|
||||
new SAV_HallOfFame7().ShowDialog();
|
||||
}
|
||||
private void B_OpenSecretBase_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_SecretBase().ShowDialog();
|
||||
}
|
||||
private void B_OpenZygardeCells_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_ZygardeCell().ShowDialog();
|
||||
}
|
||||
private void B_LinkInfo_Click(object sender, EventArgs e)
|
||||
{
|
||||
new SAV_Link6().ShowDialog();
|
||||
}
|
||||
private void B_CGearSkin_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (SAV.Generation != 5)
|
||||
|
@ -4144,10 +4086,8 @@ namespace PKHeX.WinForms
|
|||
// Drag and drop related functions
|
||||
private void pbBoxSlot_MouseClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (DragInfo.slotDragDropInProgress)
|
||||
return;
|
||||
|
||||
clickSlot(sender, e);
|
||||
if (!DragInfo.slotDragDropInProgress)
|
||||
clickSlot(sender, e);
|
||||
}
|
||||
private void pbBoxSlot_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
|
@ -4168,83 +4108,83 @@ namespace PKHeX.WinForms
|
|||
if (DragInfo.slotDragDropInProgress)
|
||||
return;
|
||||
|
||||
if (DragInfo.slotLeftMouseIsDown)
|
||||
if (!DragInfo.slotLeftMouseIsDown)
|
||||
return;
|
||||
|
||||
// The goal is to create a temporary PKX file for the underlying Pokemon
|
||||
// and use that file to perform a drag drop operation.
|
||||
|
||||
// Abort if there is no Pokemon in the given slot.
|
||||
PictureBox pb = (PictureBox)sender;
|
||||
if (pb.Image == null)
|
||||
return;
|
||||
|
||||
int slot = getSlot(pb);
|
||||
int box = slot >= 30 ? -1 : CB_BoxSelect.SelectedIndex;
|
||||
if (SAV.getIsSlotLocked(box, slot))
|
||||
return;
|
||||
|
||||
// Set flag to prevent re-entering.
|
||||
DragInfo.slotDragDropInProgress = true;
|
||||
|
||||
DragInfo.slotSource = this;
|
||||
DragInfo.slotSourceSlotNumber = slot;
|
||||
DragInfo.slotSourceBoxNumber = box;
|
||||
DragInfo.slotSourceOffset = getPKXOffset(DragInfo.slotSourceSlotNumber);
|
||||
|
||||
// Prepare Data
|
||||
DragInfo.slotPkmSource = SAV.getData(DragInfo.slotSourceOffset, SAV.SIZE_STORED);
|
||||
|
||||
// Make a new file name based off the PID
|
||||
bool encrypt = ModifierKeys == Keys.Control;
|
||||
byte[] dragdata = SAV.decryptPKM(DragInfo.slotPkmSource);
|
||||
Array.Resize(ref dragdata, SAV.SIZE_STORED);
|
||||
PKM pkx = SAV.getPKM(dragdata);
|
||||
string fn = pkx.FileName; fn = fn.Substring(0, fn.LastIndexOf('.'));
|
||||
string filename = $"{fn}{(encrypt ? ".ek" + pkx.Format : "." + pkx.Extension)}";
|
||||
|
||||
// Make File
|
||||
string newfile = Path.Combine(Path.GetTempPath(), Util.CleanFileName(filename));
|
||||
try
|
||||
{
|
||||
// The goal is to create a temporary PKX file for the underlying Pokemon
|
||||
// and use that file to perform a drag drop operation.
|
||||
|
||||
// Abort if there is no Pokemon in the given slot.
|
||||
PictureBox pb = (PictureBox)sender;
|
||||
if (pb.Image == null)
|
||||
return;
|
||||
|
||||
int slot = getSlot(pb);
|
||||
int box = slot >= 30 ? -1 : CB_BoxSelect.SelectedIndex;
|
||||
if (SAV.getIsSlotLocked(box, slot))
|
||||
return;
|
||||
|
||||
// Set flag to prevent re-entering.
|
||||
DragInfo.slotDragDropInProgress = true;
|
||||
|
||||
DragInfo.slotSource = this;
|
||||
DragInfo.slotSourceSlotNumber = slot;
|
||||
DragInfo.slotSourceBoxNumber = box;
|
||||
DragInfo.slotSourceOffset = getPKXOffset(DragInfo.slotSourceSlotNumber);
|
||||
|
||||
// Prepare Data
|
||||
DragInfo.slotPkmSource = SAV.getData(DragInfo.slotSourceOffset, SAV.SIZE_STORED);
|
||||
|
||||
// Make a new file name based off the PID
|
||||
bool encrypt = ModifierKeys == Keys.Control;
|
||||
byte[] dragdata = SAV.decryptPKM(DragInfo.slotPkmSource);
|
||||
Array.Resize(ref dragdata, SAV.SIZE_STORED);
|
||||
PKM pkx = SAV.getPKM(dragdata);
|
||||
string fn = pkx.FileName; fn = fn.Substring(0, fn.LastIndexOf('.'));
|
||||
string filename = $"{fn}{(encrypt ? ".ek" + pkx.Format : "." + pkx.Extension)}";
|
||||
|
||||
// Make File
|
||||
string newfile = Path.Combine(Path.GetTempPath(), Util.CleanFileName(filename));
|
||||
try
|
||||
{
|
||||
File.WriteAllBytes(newfile, encrypt ? pkx.EncryptedBoxData : pkx.DecryptedBoxData);
|
||||
var img = (Bitmap)pb.Image;
|
||||
DragInfo.Cursor = Cursor.Current = new Cursor(img.GetHicon());
|
||||
pb.Image = null;
|
||||
pb.BackgroundImage = Resources.slotDrag;
|
||||
// Thread Blocks on DoDragDrop
|
||||
DragInfo.CurrentPath = newfile;
|
||||
DragDropEffects result = pb.DoDragDrop(new DataObject(DataFormats.FileDrop, new[] { newfile }), DragDropEffects.Move);
|
||||
if (!DragInfo.SourceValid || result != DragDropEffects.Link) // not dropped to another box slot, restore img
|
||||
pb.Image = img;
|
||||
else // refresh image
|
||||
getQuickFiller(pb, SAV.getStoredSlot(DragInfo.slotSourceOffset));
|
||||
pb.BackgroundImage = null;
|
||||
File.WriteAllBytes(newfile, encrypt ? pkx.EncryptedBoxData : pkx.DecryptedBoxData);
|
||||
var img = (Bitmap)pb.Image;
|
||||
DragInfo.Cursor = Cursor.Current = new Cursor(img.GetHicon());
|
||||
pb.Image = null;
|
||||
pb.BackgroundImage = Resources.slotDrag;
|
||||
// Thread Blocks on DoDragDrop
|
||||
DragInfo.CurrentPath = newfile;
|
||||
DragDropEffects result = pb.DoDragDrop(new DataObject(DataFormats.FileDrop, new[] { newfile }), DragDropEffects.Move);
|
||||
if (!DragInfo.SourceValid || result != DragDropEffects.Link) // not dropped to another box slot, restore img
|
||||
pb.Image = img;
|
||||
else // refresh image
|
||||
getQuickFiller(pb, SAV.getStoredSlot(DragInfo.slotSourceOffset));
|
||||
pb.BackgroundImage = null;
|
||||
|
||||
if (DragInfo.SameBox && DragInfo.DestinationValid)
|
||||
SlotPictureBoxes[DragInfo.slotDestinationSlotNumber].Image = img;
|
||||
if (DragInfo.SameBox && DragInfo.DestinationValid)
|
||||
SlotPictureBoxes[DragInfo.slotDestinationSlotNumber].Image = img;
|
||||
|
||||
if (result == DragDropEffects.Copy) // viewed in tabs, apply 'view' highlight
|
||||
getSlotColor(DragInfo.slotSourceSlotNumber, Resources.slotView);
|
||||
}
|
||||
catch (Exception x)
|
||||
{
|
||||
WinFormsUtil.Error("Drag & Drop Error", x);
|
||||
}
|
||||
notifyBoxViewerRefresh();
|
||||
DragInfo.Reset();
|
||||
Cursor = DefaultCursor;
|
||||
|
||||
// Browser apps need time to load data since the file isn't moved to a location on the user's local storage.
|
||||
// Tested 10ms -> too quick, 100ms was fine. 500ms should be safe?
|
||||
new Thread(() =>
|
||||
{
|
||||
Thread.Sleep(500);
|
||||
if (File.Exists(newfile) && DragInfo.CurrentPath == null)
|
||||
File.Delete(newfile);
|
||||
}).Start();
|
||||
if (DragInfo.SourceParty || DragInfo.DestinationParty)
|
||||
setParty();
|
||||
if (result == DragDropEffects.Copy) // viewed in tabs, apply 'view' highlight
|
||||
getSlotColor(DragInfo.slotSourceSlotNumber, Resources.slotView);
|
||||
}
|
||||
catch (Exception x)
|
||||
{
|
||||
WinFormsUtil.Error("Drag & Drop Error", x);
|
||||
}
|
||||
notifyBoxViewerRefresh();
|
||||
DragInfo.Reset();
|
||||
Cursor = DefaultCursor;
|
||||
|
||||
// Browser apps need time to load data since the file isn't moved to a location on the user's local storage.
|
||||
// Tested 10ms -> too quick, 100ms was fine. 500ms should be safe?
|
||||
new Thread(() =>
|
||||
{
|
||||
Thread.Sleep(500);
|
||||
if (File.Exists(newfile) && DragInfo.CurrentPath == null)
|
||||
File.Delete(newfile);
|
||||
}).Start();
|
||||
if (DragInfo.SourceParty || DragInfo.DestinationParty)
|
||||
setParty();
|
||||
}
|
||||
private void pbBoxSlot_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
|
|
|
@ -164,76 +164,76 @@ namespace PKHeX.WinForms
|
|||
if (DragInfo.slotDragDropInProgress)
|
||||
return;
|
||||
|
||||
if (DragInfo.slotLeftMouseIsDown)
|
||||
if (!DragInfo.slotLeftMouseIsDown)
|
||||
return;
|
||||
|
||||
// The goal is to create a temporary PKX file for the underlying Pokemon
|
||||
// and use that file to perform a drag drop operation.
|
||||
|
||||
// Abort if there is no Pokemon in the given slot.
|
||||
PictureBox pb = (PictureBox)sender;
|
||||
if (pb.Image == null)
|
||||
return;
|
||||
|
||||
int slot = getSlot(pb);
|
||||
int box = slot >= 30 ? -1 : CB_BoxSelect.SelectedIndex;
|
||||
if (SAV.getIsSlotLocked(box, slot))
|
||||
return;
|
||||
|
||||
// Set flag to prevent re-entering.
|
||||
DragInfo.slotDragDropInProgress = true;
|
||||
|
||||
DragInfo.slotSource = this;
|
||||
DragInfo.slotSourceSlotNumber = slot;
|
||||
DragInfo.slotSourceBoxNumber = box;
|
||||
DragInfo.slotSourceOffset = getPKXOffset(DragInfo.slotSourceSlotNumber);
|
||||
|
||||
// Prepare Data
|
||||
DragInfo.slotPkmSource = SAV.getData(DragInfo.slotSourceOffset, SAV.SIZE_STORED);
|
||||
|
||||
// Make a new file name based off the PID
|
||||
byte[] dragdata = SAV.decryptPKM(DragInfo.slotPkmSource);
|
||||
Array.Resize(ref dragdata, SAV.SIZE_STORED);
|
||||
PKM pkx = SAV.getPKM(dragdata);
|
||||
string filename = pkx.FileName;
|
||||
|
||||
// Make File
|
||||
string newfile = Path.Combine(Path.GetTempPath(), Util.CleanFileName(filename));
|
||||
try
|
||||
{
|
||||
// The goal is to create a temporary PKX file for the underlying Pokemon
|
||||
// and use that file to perform a drag drop operation.
|
||||
File.WriteAllBytes(newfile, dragdata);
|
||||
var img = (Bitmap)pb.Image;
|
||||
DragInfo.Cursor = Cursor.Current = new Cursor(img.GetHicon());
|
||||
pb.Image = null;
|
||||
pb.BackgroundImage = Core.Properties.Resources.slotDrag;
|
||||
// Thread Blocks on DoDragDrop
|
||||
DragInfo.CurrentPath = newfile;
|
||||
DragDropEffects result = pb.DoDragDrop(new DataObject(DataFormats.FileDrop, new[] { newfile }), DragDropEffects.Move);
|
||||
if (!DragInfo.SourceValid || result != DragDropEffects.Link) // not dropped to another box slot, restore img
|
||||
pb.Image = img;
|
||||
else // refresh image
|
||||
getQuickFiller(pb, SAV.getStoredSlot(DragInfo.slotSourceOffset));
|
||||
pb.BackgroundImage = null;
|
||||
|
||||
// Abort if there is no Pokemon in the given slot.
|
||||
PictureBox pb = (PictureBox)sender;
|
||||
if (pb.Image == null)
|
||||
return;
|
||||
|
||||
int slot = getSlot(pb);
|
||||
int box = slot >= 30 ? -1 : CB_BoxSelect.SelectedIndex;
|
||||
if (SAV.getIsSlotLocked(box, slot))
|
||||
return;
|
||||
|
||||
// Set flag to prevent re-entering.
|
||||
DragInfo.slotDragDropInProgress = true;
|
||||
|
||||
DragInfo.slotSource = this;
|
||||
DragInfo.slotSourceSlotNumber = slot;
|
||||
DragInfo.slotSourceBoxNumber = box;
|
||||
DragInfo.slotSourceOffset = getPKXOffset(DragInfo.slotSourceSlotNumber);
|
||||
|
||||
// Prepare Data
|
||||
DragInfo.slotPkmSource = SAV.getData(DragInfo.slotSourceOffset, SAV.SIZE_STORED);
|
||||
|
||||
// Make a new file name based off the PID
|
||||
byte[] dragdata = SAV.decryptPKM(DragInfo.slotPkmSource);
|
||||
Array.Resize(ref dragdata, SAV.SIZE_STORED);
|
||||
PKM pkx = SAV.getPKM(dragdata);
|
||||
string filename = pkx.FileName;
|
||||
|
||||
// Make File
|
||||
string newfile = Path.Combine(Path.GetTempPath(), Util.CleanFileName(filename));
|
||||
try
|
||||
{
|
||||
File.WriteAllBytes(newfile, dragdata);
|
||||
var img = (Bitmap)pb.Image;
|
||||
DragInfo.Cursor = Cursor.Current = new Cursor(img.GetHicon());
|
||||
pb.Image = null;
|
||||
pb.BackgroundImage = Core.Properties.Resources.slotDrag;
|
||||
// Thread Blocks on DoDragDrop
|
||||
DragInfo.CurrentPath = newfile;
|
||||
DragDropEffects result = pb.DoDragDrop(new DataObject(DataFormats.FileDrop, new[] { newfile }), DragDropEffects.Move);
|
||||
if (!DragInfo.SourceValid || result != DragDropEffects.Link) // not dropped to another box slot, restore img
|
||||
pb.Image = img;
|
||||
else // refresh image
|
||||
getQuickFiller(pb, SAV.getStoredSlot(DragInfo.slotSourceOffset));
|
||||
pb.BackgroundImage = null;
|
||||
|
||||
if (DragInfo.SameBox && DragInfo.DestinationValid)
|
||||
SlotPictureBoxes[DragInfo.slotDestinationSlotNumber].Image = img;
|
||||
}
|
||||
catch (Exception x)
|
||||
{
|
||||
WinFormsUtil.Error("Drag & Drop Error", x);
|
||||
}
|
||||
parent.notifyBoxViewerRefresh();
|
||||
DragInfo.Reset();
|
||||
Cursor = DefaultCursor;
|
||||
|
||||
// Browser apps need time to load data since the file isn't moved to a location on the user's local storage.
|
||||
// Tested 10ms -> too quick, 100ms was fine. 500ms should be safe?
|
||||
new Thread(() =>
|
||||
{
|
||||
Thread.Sleep(500);
|
||||
if (File.Exists(newfile) && DragInfo.CurrentPath == null)
|
||||
File.Delete(newfile);
|
||||
}).Start();
|
||||
if (DragInfo.SameBox && DragInfo.DestinationValid)
|
||||
SlotPictureBoxes[DragInfo.slotDestinationSlotNumber].Image = img;
|
||||
}
|
||||
catch (Exception x)
|
||||
{
|
||||
WinFormsUtil.Error("Drag & Drop Error", x);
|
||||
}
|
||||
parent.notifyBoxViewerRefresh();
|
||||
DragInfo.Reset();
|
||||
Cursor = DefaultCursor;
|
||||
|
||||
// Browser apps need time to load data since the file isn't moved to a location on the user's local storage.
|
||||
// Tested 10ms -> too quick, 100ms was fine. 500ms should be safe?
|
||||
new Thread(() =>
|
||||
{
|
||||
Thread.Sleep(500);
|
||||
if (File.Exists(newfile) && DragInfo.CurrentPath == null)
|
||||
File.Delete(newfile);
|
||||
}).Start();
|
||||
}
|
||||
private void pbBoxSlot_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
|
|
|
@ -218,6 +218,9 @@ namespace PKHeX.Core
|
|||
}
|
||||
metSM_00000_good.CopyTo(metSM_00000, 0);
|
||||
|
||||
for (int i = 2; i <= 5; i++) // distinguish first set of regions (unused) from second (used)
|
||||
metSM_30000[i] += " (-)";
|
||||
|
||||
// Set the first entry of a met location to "" (nothing)
|
||||
// Fix (None) tags
|
||||
abilitylist[0] = itemlist[0] = movelist[0] = metXY_00000[0] = metBW2_00000[0] = metHGSS_00000[0] = "(" + itemlist[0] + ")";
|
||||
|
@ -276,7 +279,9 @@ namespace PKHeX.Core
|
|||
SpeciesDataSource = Util.getCBList(s.specieslist, null);
|
||||
NatureDataSource = Util.getCBList(s.natures, null);
|
||||
AbilityDataSource = Util.getCBList(s.abilitylist, null);
|
||||
VersionDataSource = Util.getCBList(s.gamelist, Legal.Games_7vc, Legal.Games_7go, Legal.Games_7sm, Legal.Games_6oras, Legal.Games_6xy, Legal.Games_5, Legal.Games_4, Legal.Games_4e, Legal.Games_4r, Legal.Games_3, Legal.Games_3e, Legal.Games_3r, Legal.Games_3s);
|
||||
VersionDataSource = Util.getCBList(s.gamelist, Legal.Games_7sm, Legal.Games_6oras, Legal.Games_6xy, Legal.Games_5, Legal.Games_4, Legal.Games_4e, Legal.Games_4r, Legal.Games_3, Legal.Games_3e, Legal.Games_3r, Legal.Games_3s);
|
||||
VersionDataSource.AddRange(Util.getCBList(s.gamelist, Legal.Games_7vc1).OrderBy(g => g.Value)); // stuff to end unsorted
|
||||
VersionDataSource.AddRange(Util.getCBList(s.gamelist, Legal.Games_7go).OrderBy(g => g.Value)); // stuff to end unsorted
|
||||
|
||||
HaXMoveDataSource = Util.getCBList(s.movelist, null);
|
||||
MoveDataSource = HaXMoveDataSource.Where(m => !Legal.Z_Moves.Contains(m.Value)).ToList();
|
||||
|
@ -416,10 +421,12 @@ namespace PKHeX.Core
|
|||
|
||||
case GameVersion.SN:
|
||||
case GameVersion.MN:
|
||||
|
||||
case GameVersion.GO:
|
||||
case GameVersion.RD:
|
||||
case GameVersion.BU:
|
||||
case GameVersion.YW:
|
||||
case GameVersion.GN:
|
||||
case GameVersion.YW:
|
||||
return metGen7.Take(3).Concat(metGen7.Skip(3).OrderByDescending(loc => loc.Value < 200)).ToList(); // Secret Base
|
||||
}
|
||||
|
||||
|
|
|
@ -215,7 +215,8 @@
|
|||
|
||||
#region Games
|
||||
|
||||
public static readonly int[] Games_7vc = { 35, 36, 37, 38 };
|
||||
public static readonly int[] Games_7vc2 = { 39, 40, 41 }; // Gold, Silver, Crystal
|
||||
public static readonly int[] Games_7vc1 = { 35, 36, 37, 38 }; // Red, Blue, Green, Yellow
|
||||
public static readonly int[] Games_7go = { 34 };
|
||||
public static readonly int[] Games_7sm = { 30, 31 };
|
||||
public static readonly int[] Games_6xy = { 24, 25 };
|
||||
|
|
|
@ -317,12 +317,11 @@ namespace PKHeX.Core
|
|||
EncryptionConstant = Util.rnd32(),
|
||||
Species = Species,
|
||||
TID = TID,
|
||||
EXP = EXP,
|
||||
CurrentLevel = CurrentLevel,
|
||||
EXP = EXP,
|
||||
Met_Level = CurrentLevel,
|
||||
Nature = (int) (EXP%25),
|
||||
PID = Util.rnd32(),
|
||||
AbilityNumber = 4,
|
||||
Ball = 4,
|
||||
MetDate = DateTime.Now,
|
||||
Version = (int)GameVersion.RD, // Default to red, for now?
|
||||
|
@ -338,19 +337,29 @@ namespace PKHeX.Core
|
|||
Move2_PP = Move2_PP,
|
||||
Move3_PP = Move3_PP,
|
||||
Move4_PP = Move4_PP,
|
||||
CurrentFriendship = PersonalTable.SM[Species].BaseFriendship,
|
||||
Met_Location = 30013, // "Kanto region", hardcoded.
|
||||
Gender = PersonalTable.SM[Species].RandomGender,
|
||||
OT_Name = PKX.getG1ConvertedString(otname, Japanese),
|
||||
Nickname = Util.getSpeciesList(Japanese ? "jp" : "en")[Species],
|
||||
IsNicknamed = false
|
||||
};
|
||||
IsNicknamed = false,
|
||||
|
||||
|
||||
|
||||
Country = PKMConverter.Country,
|
||||
Region = PKMConverter.Region,
|
||||
ConsoleRegion = PKMConverter.ConsoleRegion,
|
||||
CurrentHandler = 1,
|
||||
HT_Name = PKMConverter.OT_Name,
|
||||
HT_Gender = PKMConverter.OT_Gender,
|
||||
Language = PKMConverter,
|
||||
};
|
||||
pk7.OT_Friendship = pk7.HT_Friendship = PersonalTable.SM[Species].BaseFriendship;
|
||||
|
||||
// IVs
|
||||
var new_ivs = new int[6];
|
||||
int flawless = Species == 151 ? 5 : 3;
|
||||
for (var i = 0; i < new_ivs.Length; i++) new_ivs[i] = (int)(Util.rnd32() & 31);
|
||||
for (var i = 0; i < (Species == 151 ? 5 : 3); i++) new_ivs[i] = 31;
|
||||
for (var i = 0; i < flawless; i++) new_ivs[i] = 31;
|
||||
Util.Shuffle(new_ivs);
|
||||
pk7.IVs = new_ivs;
|
||||
|
||||
|
@ -358,26 +367,21 @@ namespace PKHeX.Core
|
|||
if (IsShiny)
|
||||
pk7.setShinyPID();
|
||||
|
||||
if (new[] {92, 93, 94, 151, 109, 110}.Contains(Species))
|
||||
pk7.AbilityNumber = 1;
|
||||
int abil = 2; // Hidden
|
||||
if (new[] {92, 93, 94, 109, 110, 151}.Contains(Species))
|
||||
abil = 0; // Reset
|
||||
pk7.RefreshAbility(abil); // 0/1/2 (not 1/2/4)
|
||||
|
||||
if (IsNicknamedBank)
|
||||
if (Species == 151) // Mew gets special treatment.
|
||||
pk7.FatefulEncounter = true;
|
||||
else if (IsNicknamedBank)
|
||||
{
|
||||
pk7.IsNicknamed = true;
|
||||
pk7.Nickname = PKX.getG1ConvertedString(nick, Japanese);
|
||||
}
|
||||
|
||||
// TODO: Language, 3DS Country/Region Info, Memories (Link Trade/Somewhere, remembers feeling {rnd})
|
||||
|
||||
if (Species == 151) // Mew gets special treatment.
|
||||
{
|
||||
pk7.FatefulEncounter = true;
|
||||
pk7.AbilityNumber = 1;
|
||||
pk7.Egg_Location = 0;
|
||||
pk7.Nickname = Util.getSpeciesList(Japanese ? "jp" : "en")[Species];
|
||||
pk7.IsNicknamed = false;
|
||||
}
|
||||
|
||||
|
||||
pk7.TradeMemory(Bank:true); // oh no, memories on gen7 pkm
|
||||
|
||||
pk7.RefreshChecksum();
|
||||
return pk7;
|
||||
}
|
||||
|
|
|
@ -586,11 +586,13 @@ namespace PKHeX.Core
|
|||
}
|
||||
public void TradeMemory(bool Bank)
|
||||
{
|
||||
return; // appears no memories are set, ever?
|
||||
// HT_Memory = 4; // Link trade to [VAR: General Location]
|
||||
// HT_TextVar = Bank ? 0 : 9; // Somewhere (Bank) : Pokécenter (Trade)
|
||||
// HT_Intensity = 1;
|
||||
// HT_Feeling = Util.rand.Next(0, Bank ? 9 : 19); // 0-9 Bank, 0-19 Trade
|
||||
if (!Bank)
|
||||
return;
|
||||
|
||||
HT_Memory = 4; // Link trade to [VAR: General Location]
|
||||
HT_TextVar = 0; // Somewhere (Bank)
|
||||
HT_Intensity = 1;
|
||||
HT_Feeling = Util.rand.Next(0, 9); // 0-9 Bank
|
||||
}
|
||||
|
||||
// Legality Properties
|
||||
|
|
|
@ -261,13 +261,15 @@ namespace PKHeX.Core
|
|||
public virtual bool IsShiny => TSV == PSV;
|
||||
public virtual bool Locked { get { return false; } set { } }
|
||||
public int TrainerID7 => (int)((uint)(TID | (SID << 16)) % 1000000);
|
||||
public bool VC => Version >= 35 && Version <= 41;
|
||||
public bool VC2 => Version >= 39 && Version <= 41;
|
||||
public bool VC1 => Version >= 35 && Version <= 38;
|
||||
public bool Horohoro => Version == 34;
|
||||
public bool XY => Version == (int)GameVersion.X || Version == (int)GameVersion.Y;
|
||||
public bool AO => Version == (int)GameVersion.AS || Version == (int)GameVersion.OR;
|
||||
public bool SM => Version == (int)GameVersion.SN || Version == (int)GameVersion.MN;
|
||||
protected bool PtHGSS => GameVersion.Pt == (GameVersion)Version || HGSS;
|
||||
protected bool HGSS => new[] {GameVersion.HG, GameVersion.SS}.Contains((GameVersion)Version);
|
||||
public bool VC => VC1 || VC2;
|
||||
public bool Gen7 => Version >= 30 && Version <= 33;
|
||||
public bool Gen6 => Version >= 24 && Version <= 29;
|
||||
public bool Gen5 => Version >= 20 && Version <= 23;
|
||||
|
@ -428,6 +430,18 @@ namespace PKHeX.Core
|
|||
public virtual bool HT_SPA { get { return false; } set { } }
|
||||
public virtual bool HT_SPD { get { return false; } set { } }
|
||||
public virtual bool HT_SPE { get { return false; } set { } }
|
||||
public void HyperTrainInvert(int stat)
|
||||
{
|
||||
switch (stat)
|
||||
{
|
||||
case 0: HT_HP ^= true; break;
|
||||
case 1: HT_ATK ^= true; break;
|
||||
case 2: HT_DEF ^= true; break;
|
||||
case 3: HT_SPA ^= true; break;
|
||||
case 4: HT_SPD ^= true; break;
|
||||
case 5: HT_SPE ^= true; break;
|
||||
}
|
||||
}
|
||||
|
||||
public bool InhabitedGeneration(int Generation)
|
||||
{
|
||||
|
@ -489,6 +503,14 @@ namespace PKHeX.Core
|
|||
ReorderMoves();
|
||||
}
|
||||
}
|
||||
public void RefreshAbility(int n)
|
||||
{
|
||||
AbilityNumber = 1 << n;
|
||||
int[] abilities = PersonalInfo.Abilities;
|
||||
if (n < abilities.Length)
|
||||
Ability = abilities[n];
|
||||
}
|
||||
|
||||
|
||||
public int PotentialRating
|
||||
{
|
||||
|
|
|
@ -9,15 +9,17 @@ namespace PKHeX.Core
|
|||
public static int Region = 7;
|
||||
public static int ConsoleRegion = 1;
|
||||
public static string OT_Name = "PKHeX";
|
||||
public static int OT_Gender;
|
||||
public static int OT_Gender; // Male
|
||||
public static int Language = 1; // en
|
||||
|
||||
public static void updateConfig(int SUBREGION, int COUNTRY, int _3DSREGION, string TRAINERNAME, int TRAINERGENDER)
|
||||
public static void updateConfig(int SUBREGION, int COUNTRY, int _3DSREGION, string TRAINERNAME, int TRAINERGENDER, int LANGUAGE)
|
||||
{
|
||||
Region = SUBREGION;
|
||||
Country = COUNTRY;
|
||||
ConsoleRegion = _3DSREGION;
|
||||
OT_Name = TRAINERNAME;
|
||||
OT_Gender = TRAINERGENDER;
|
||||
Language = LANGUAGE;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
Loading…
Reference in a new issue