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:
Kurt 2017-01-25 22:51:52 -08:00
parent ae8f929f97
commit f282711e35
8 changed files with 261 additions and 283 deletions

View file

@ -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)
{

View file

@ -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)
{

View file

@ -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
}

View file

@ -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 };

View file

@ -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;
}

View file

@ -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

View file

@ -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
{

View file

@ -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>