mirror of
https://github.com/kwsch/PKHeX
synced 2024-09-21 14:51:55 +00:00
Refactoring
discards, Array.Find over FirstOrDefault
This commit is contained in:
parent
5a3c8f4147
commit
e2f11edc43
16 changed files with 79 additions and 86 deletions
|
@ -196,8 +196,8 @@ namespace PKHeX.Core
|
|||
}
|
||||
|
||||
// Korean Gen4 games can not trade with other Gen4 languages, but can use Pal Park with any Gen3 game/language.
|
||||
if (pkm.Format == 4 && pkm.Gen4 &&
|
||||
(pkm.Language == (int)LanguageID.Korean) ^ (Legal.SavegameLanguage == (int)LanguageID.Korean))
|
||||
if (pkm.Format == 4 && pkm.Gen4
|
||||
&& (pkm.Language == (int)LanguageID.Korean) ^ (Legal.SavegameLanguage == (int)LanguageID.Korean))
|
||||
{
|
||||
bool kor = pkm.Language == (int) LanguageID.Korean;
|
||||
var currentpkm = kor ? V611 : V612;
|
||||
|
@ -616,7 +616,7 @@ namespace PKHeX.Core
|
|||
if (IVs != null)
|
||||
{
|
||||
var pkIVs = pkm.IVs;
|
||||
var ivflag = IVs.FirstOrDefault(iv => (byte)(iv - 0xFC) < 3);
|
||||
var ivflag = Array.Find(IVs, iv => (byte)(iv - 0xFC) < 3);
|
||||
if (ivflag == 0) // Random IVs
|
||||
{
|
||||
bool valid = true;
|
||||
|
@ -1690,7 +1690,7 @@ namespace PKHeX.Core
|
|||
untraded &= gift.IsEgg;
|
||||
}
|
||||
|
||||
if (EncounterMatch is EncounterLink link && link.OT == false)
|
||||
if (EncounterMatch is EncounterLink link && !link.OT)
|
||||
untraded = false;
|
||||
else if (Info.Generation < 6)
|
||||
untraded = false;
|
||||
|
@ -2497,6 +2497,6 @@ namespace PKHeX.Core
|
|||
}
|
||||
public static string[] MoveStrings { internal get; set; } = Util.GetMovesList("en");
|
||||
public static string[] SpeciesStrings { internal get; set; } = Util.GetSpeciesList("en");
|
||||
internal static IEnumerable<string> getMoveNames(IEnumerable<int> moves) => moves.Select(m => m >= MoveStrings.Length ? V190 : MoveStrings[m]);
|
||||
internal static IEnumerable<string> GetMoveNames(IEnumerable<int> moves) => moves.Select(m => m >= MoveStrings.Length ? V190 : MoveStrings[m]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -622,7 +622,7 @@ namespace PKHeX.Core
|
|||
private static int GetRequiredMoveSlotsRegular(PKM pk, int[] moves, List<int>[] learn, int[] initialmoves)
|
||||
{
|
||||
int species = pk.Species;
|
||||
int catch_rate = (pk as PK1).Catch_Rate;
|
||||
int catch_rate = ((PK1) pk).Catch_Rate;
|
||||
// Caterpie and Metapod evolution lines have different count of possible slots available if captured in different evolutionary phases
|
||||
// Example: a level 7 caterpie evolved into metapod will have 3 learned moves, a captured metapod will have only 1 move
|
||||
if ((species == 011 || species == 012) && catch_rate == 120)
|
||||
|
@ -1070,7 +1070,7 @@ namespace PKHeX.Core
|
|||
if (pkm.IsEgg)
|
||||
return false;
|
||||
|
||||
return GetValidPreEvolutions(pkm).Count() > 1;
|
||||
return GetValidPreEvolutions(pkm).Count > 1;
|
||||
}
|
||||
private static bool IsEvolvedFormChange(PKM pkm)
|
||||
{
|
||||
|
@ -1129,7 +1129,7 @@ namespace PKHeX.Core
|
|||
|
||||
// Check also if the current encounter include the evolve move as an special move
|
||||
// That means the pokemon have the move from the encounter level
|
||||
if (info.EncounterMatch is IMoveset s && s.Moves != null && s.Moves.Any(m => moves.Contains(m)))
|
||||
if (info.EncounterMatch is IMoveset s && s.Moves?.Any(m => moves.Contains(m)) == true)
|
||||
LearnLevel = Math.Min(LearnLevel, info.EncounterMatch.LevelMin);
|
||||
|
||||
// If the encounter is a player hatched egg check if the move could be an egg move or inherited level up move
|
||||
|
@ -1269,9 +1269,9 @@ namespace PKHeX.Core
|
|||
var table = EvolutionTree.GetEvolutionTree(tree);
|
||||
int maxSpeciesOrigin = generation != -1 ? GetMaxSpeciesOrigin(generation) : -1;
|
||||
var evos = table.GetValidPreEvolutions(pkm, maxLevel: 100, maxSpeciesOrigin: maxSpeciesOrigin, skipChecks: true);
|
||||
return GetBaseSpecies(pkm, evos, skipOption, generation);
|
||||
return GetBaseSpecies(pkm, evos, skipOption);
|
||||
}
|
||||
internal static int GetBaseSpecies(PKM pkm, IList<DexLevel> evos, int skipOption = 0, int generation = -1)
|
||||
internal static int GetBaseSpecies(PKM pkm, IList<DexLevel> evos, int skipOption = 0)
|
||||
{
|
||||
if (pkm.Species == 292)
|
||||
return 290;
|
||||
|
@ -1687,8 +1687,8 @@ namespace PKHeX.Core
|
|||
}
|
||||
if (Machine)
|
||||
{
|
||||
r.AddRange(TMHM_RBY.Where((t, m) => pi_rb.TMHM[m]));
|
||||
r.AddRange(TMHM_RBY.Where((t, m) => pi_y.TMHM[m]));
|
||||
r.AddRange(TMHM_RBY.Where((_, m) => pi_rb.TMHM[m]));
|
||||
r.AddRange(TMHM_RBY.Where((_, m) => pi_y.TMHM[m]));
|
||||
}
|
||||
if (moveTutor)
|
||||
r.AddRange(GetTutorMoves(pkm, species, form, specialTutors, Generation));
|
||||
|
@ -1708,7 +1708,7 @@ namespace PKHeX.Core
|
|||
if (Machine)
|
||||
{
|
||||
var pi_c = (PersonalInfoG2)PersonalTable.C[index];
|
||||
r.AddRange(TMHM_GSC.Where((t, m) => pi_c.TMHM[m]));
|
||||
r.AddRange(TMHM_GSC.Where((_, m) => pi_c.TMHM[m]));
|
||||
}
|
||||
if (moveTutor)
|
||||
r.AddRange(GetTutorMoves(pkm, species, form, specialTutors, Generation));
|
||||
|
@ -1745,9 +1745,9 @@ namespace PKHeX.Core
|
|||
if (Machine)
|
||||
{
|
||||
var pi_c = PersonalTable.E[index];
|
||||
r.AddRange(TM_3.Where((t, m) => pi_c.TMHM[m]));
|
||||
r.AddRange(TM_3.Where((_, m) => pi_c.TMHM[m]));
|
||||
if (!RemoveTransferHM || pkm.Format == 3) // HM moves must be removed for 3->4, only give if current format.
|
||||
r.AddRange(HM_3.Where((t, m) => pi_c.TMHM[m+50]));
|
||||
r.AddRange(HM_3.Where((_, m) => pi_c.TMHM[m+50]));
|
||||
}
|
||||
if (moveTutor)
|
||||
r.AddRange(GetTutorMoves(pkm, species, form, specialTutors, Generation));
|
||||
|
@ -1771,7 +1771,7 @@ namespace PKHeX.Core
|
|||
{
|
||||
var pi_hgss = PersonalTable.HGSS[index];
|
||||
var pi_dppt = PersonalTable.Pt[index];
|
||||
r.AddRange(TM_4.Where((t, m) => pi_hgss.TMHM[m]));
|
||||
r.AddRange(TM_4.Where((_, m) => pi_hgss.TMHM[m]));
|
||||
if (RemoveTransferHM && pkm.Format > 4)
|
||||
{
|
||||
// The combination of both these moves is illegal, it should be checked that the pokemon only learn one
|
||||
|
@ -1783,8 +1783,8 @@ namespace PKHeX.Core
|
|||
}
|
||||
else
|
||||
{
|
||||
r.AddRange(HM_DPPt.Where((t, m) => pi_dppt.TMHM[m + 92]));
|
||||
r.AddRange(HM_HGSS.Where((t, m) => pi_hgss.TMHM[m + 92]));
|
||||
r.AddRange(HM_DPPt.Where((_, m) => pi_dppt.TMHM[m + 92]));
|
||||
r.AddRange(HM_HGSS.Where((_, m) => pi_hgss.TMHM[m + 92]));
|
||||
}
|
||||
}
|
||||
if (moveTutor)
|
||||
|
@ -1809,7 +1809,7 @@ namespace PKHeX.Core
|
|||
if (Machine)
|
||||
{
|
||||
var pi_c = PersonalTable.B2W2[index2];
|
||||
r.AddRange(TMHM_BW.Where((t, m) => pi_c.TMHM[m]));
|
||||
r.AddRange(TMHM_BW.Where((_, m) => pi_c.TMHM[m]));
|
||||
}
|
||||
if (moveTutor)
|
||||
r.AddRange(GetTutorMoves(pkm, species, form, specialTutors, Generation));
|
||||
|
@ -1832,7 +1832,7 @@ namespace PKHeX.Core
|
|||
if (Machine)
|
||||
{
|
||||
PersonalInfo pi = PersonalTable.XY[index];
|
||||
r.AddRange(TMHM_XY.Where((t, m) => pi.TMHM[m]));
|
||||
r.AddRange(TMHM_XY.Where((_, m) => pi.TMHM[m]));
|
||||
}
|
||||
|
||||
if (ver == GameVersion.Any) // Fall Through
|
||||
|
@ -1853,7 +1853,7 @@ namespace PKHeX.Core
|
|||
if (Machine)
|
||||
{
|
||||
PersonalInfo pi = PersonalTable.AO[index];
|
||||
r.AddRange(TMHM_AO.Where((t, m) => pi.TMHM[m]));
|
||||
r.AddRange(TMHM_AO.Where((_, m) => pi.TMHM[m]));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1877,7 +1877,7 @@ namespace PKHeX.Core
|
|||
if (Machine)
|
||||
{
|
||||
PersonalInfo pi = PersonalTable.SM.GetFormeEntry(species, form);
|
||||
r.AddRange(TMHM_SM.Where((t, m) => pi.TMHM[m]));
|
||||
r.AddRange(TMHM_SM.Where((_, m) => pi.TMHM[m]));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1895,7 +1895,7 @@ namespace PKHeX.Core
|
|||
if (Machine)
|
||||
{
|
||||
PersonalInfo pi = PersonalTable.USUM.GetFormeEntry(species, form);
|
||||
r.AddRange(TMHM_SM.Where((t, m) => pi.TMHM[m]));
|
||||
r.AddRange(TMHM_SM.Where((_, m) => pi.TMHM[m]));
|
||||
}
|
||||
if (ver == GameVersion.Any) // Fall Through
|
||||
goto case GameVersion.SM;
|
||||
|
@ -1980,24 +1980,24 @@ namespace PKHeX.Core
|
|||
return moves;
|
||||
var pi_rb = (PersonalInfoG1)PersonalTable.RB[index];
|
||||
var pi_y = (PersonalInfoG1)PersonalTable.Y[index];
|
||||
moves.AddRange(TMHM_RBY.Where((t, m) => pi_rb.TMHM[m]));
|
||||
moves.AddRange(TMHM_RBY.Where((t, m) => pi_y.TMHM[m]));
|
||||
moves.AddRange(TMHM_RBY.Where((_, m) => pi_rb.TMHM[m]));
|
||||
moves.AddRange(TMHM_RBY.Where((_, m) => pi_y.TMHM[m]));
|
||||
break;
|
||||
case 2:
|
||||
index = PersonalTable.C.GetFormeIndex(species, 0);
|
||||
if (index == 0)
|
||||
return moves;
|
||||
var pi_c = (PersonalInfoG2)PersonalTable.C[index];
|
||||
moves.AddRange(TMHM_GSC.Where((t, m) => pi_c.TMHM[m]));
|
||||
moves.AddRange(TMHM_GSC.Where((_, m) => pi_c.TMHM[m]));
|
||||
if (Version == GameVersion.Any)
|
||||
goto case 1; // rby
|
||||
break;
|
||||
case 3:
|
||||
index = PersonalTable.E.GetFormeIndex(species, 0);
|
||||
var pi_e = PersonalTable.E[index];
|
||||
moves.AddRange(TM_3.Where((t, m) => pi_e.TMHM[m]));
|
||||
moves.AddRange(TM_3.Where((_, m) => pi_e.TMHM[m]));
|
||||
if (!RemoveTransferHM || pkm.Format == 3) // HM moves must be removed for 3->4, only give if current format.
|
||||
moves.AddRange(HM_3.Where((t, m) => pi_e.TMHM[m + 50]));
|
||||
moves.AddRange(HM_3.Where((_, m) => pi_e.TMHM[m + 50]));
|
||||
break;
|
||||
case 4:
|
||||
index = PersonalTable.HGSS.GetFormeIndex(species, 0);
|
||||
|
@ -2005,7 +2005,7 @@ namespace PKHeX.Core
|
|||
return moves;
|
||||
var pi_hgss = PersonalTable.HGSS[index];
|
||||
var pi_dppt = PersonalTable.Pt[index];
|
||||
moves.AddRange(TM_4.Where((t, m) => pi_hgss.TMHM[m]));
|
||||
moves.AddRange(TM_4.Where((_, m) => pi_hgss.TMHM[m]));
|
||||
// The combination of both these moves is illegal, it should be checked that the pokemon only learn one
|
||||
// except if it can learn any of these moves in gen 5 or later
|
||||
if (Version == GameVersion.Any || Version == GameVersion.DP || Version == GameVersion.D || Version == GameVersion.P || Version == GameVersion.Pt)
|
||||
|
@ -2017,7 +2017,7 @@ namespace PKHeX.Core
|
|||
}
|
||||
else
|
||||
{
|
||||
moves.AddRange(HM_DPPt.Where((t, m) => pi_dppt.TMHM[m + 92]));
|
||||
moves.AddRange(HM_DPPt.Where((_, m) => pi_dppt.TMHM[m + 92]));
|
||||
}
|
||||
}
|
||||
if (Version == GameVersion.Any || Version == GameVersion.HGSS || Version == GameVersion.HG || Version == GameVersion.SS)
|
||||
|
@ -2029,7 +2029,7 @@ namespace PKHeX.Core
|
|||
}
|
||||
else
|
||||
{
|
||||
moves.AddRange(HM_HGSS.Where((t, m) => pi_dppt.TMHM[m + 92]));
|
||||
moves.AddRange(HM_HGSS.Where((_, m) => pi_dppt.TMHM[m + 92]));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -2039,7 +2039,7 @@ namespace PKHeX.Core
|
|||
return moves;
|
||||
|
||||
var pi_bw = PersonalTable.B2W2[index];
|
||||
moves.AddRange(TMHM_BW.Where((t, m) => pi_bw.TMHM[m]));
|
||||
moves.AddRange(TMHM_BW.Where((_, m) => pi_bw.TMHM[m]));
|
||||
break;
|
||||
case 6:
|
||||
switch (Version)
|
||||
|
@ -2054,7 +2054,7 @@ namespace PKHeX.Core
|
|||
return moves;
|
||||
|
||||
PersonalInfo pi_xy = PersonalTable.XY[index];
|
||||
moves.AddRange(TMHM_XY.Where((t, m) => pi_xy.TMHM[m]));
|
||||
moves.AddRange(TMHM_XY.Where((_, m) => pi_xy.TMHM[m]));
|
||||
|
||||
if (Version == GameVersion.Any) // Fall Through
|
||||
goto case GameVersion.ORAS;
|
||||
|
@ -2069,7 +2069,7 @@ namespace PKHeX.Core
|
|||
return moves;
|
||||
|
||||
PersonalInfo pi_ao = PersonalTable.AO[index];
|
||||
moves.AddRange(TMHM_AO.Where((t, m) => pi_ao.TMHM[m]));
|
||||
moves.AddRange(TMHM_AO.Where((_, m) => pi_ao.TMHM[m]));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -2080,7 +2080,7 @@ namespace PKHeX.Core
|
|||
return moves;
|
||||
|
||||
PersonalInfo pi_sm = PersonalTable.USUM[index];
|
||||
moves.AddRange(TMHM_SM.Where((t, m) => pi_sm.TMHM[m]));
|
||||
moves.AddRange(TMHM_SM.Where((_, m) => pi_sm.TMHM[m]));
|
||||
break;
|
||||
}
|
||||
return moves.Distinct();
|
||||
|
@ -2099,18 +2099,18 @@ namespace PKHeX.Core
|
|||
if (!AllowGen2Crystal(pkm))
|
||||
break;
|
||||
info = PersonalTable.C[species];
|
||||
moves.AddRange(Tutors_GSC.Where((t, i) => info.TMHM[57 + i]));
|
||||
moves.AddRange(Tutors_GSC.Where((_, i) => info.TMHM[57 + i]));
|
||||
goto case 1;
|
||||
case 3:
|
||||
// E Tutors (Free)
|
||||
// E Tutors (BP)
|
||||
info = PersonalTable.E[species];
|
||||
moves.AddRange(Tutor_E.Where((t, i) => info.TypeTutors[i]));
|
||||
moves.AddRange(Tutor_E.Where((_, i) => info.TypeTutors[i]));
|
||||
// FRLG Tutors
|
||||
// Only special tutor moves, normal tutor moves are already included in Emerald data
|
||||
moves.AddRange(SpecialTutors_FRLG.Where((t, i) => SpecialTutors_Compatibility_FRLG[i].Any(e => e == species)));
|
||||
moves.AddRange(SpecialTutors_FRLG.Where((_, i) => SpecialTutors_Compatibility_FRLG[i].Any(e => e == species)));
|
||||
// XD
|
||||
moves.AddRange(SpecialTutors_XD_Exclusive.Where((t, i) => SpecialTutors_Compatibility_XD_Exclusive[i].Any(e => e == species)));
|
||||
moves.AddRange(SpecialTutors_XD_Exclusive.Where((_, i) => SpecialTutors_Compatibility_XD_Exclusive[i].Any(e => e == species)));
|
||||
// XD (Mew)
|
||||
if (species == 151)
|
||||
moves.AddRange(Tutor_3Mew);
|
||||
|
@ -2118,24 +2118,24 @@ namespace PKHeX.Core
|
|||
break;
|
||||
case 4:
|
||||
info = PersonalTable.HGSS.GetFormeEntry(species, form);
|
||||
moves.AddRange(Tutors_4.Where((t, i) => info.TypeTutors[i]));
|
||||
moves.AddRange(SpecialTutors_4.Where((t, i) => SpecialTutors_Compatibility_4[i].Any(e => e == species)));
|
||||
moves.AddRange(Tutors_4.Where((_, i) => info.TypeTutors[i]));
|
||||
moves.AddRange(SpecialTutors_4.Where((_, i) => SpecialTutors_Compatibility_4[i].Any(e => e == species)));
|
||||
break;
|
||||
case 5:
|
||||
info = PersonalTable.B2W2[species];
|
||||
moves.AddRange(TypeTutor6.Where((t, i) => info.TypeTutors[i]));
|
||||
moves.AddRange(TypeTutor6.Where((_, i) => info.TypeTutors[i]));
|
||||
if (pkm.InhabitedGeneration(5) && specialTutors)
|
||||
moves.AddRange(GetTutors(PersonalTable.B2W2, Tutors_B2W2));
|
||||
break;
|
||||
case 6:
|
||||
info = PersonalTable.AO[species];
|
||||
moves.AddRange(TypeTutor6.Where((t, i) => info.TypeTutors[i]));
|
||||
moves.AddRange(TypeTutor6.Where((_, i) => info.TypeTutors[i]));
|
||||
if (pkm.InhabitedGeneration(6) && specialTutors && (pkm.AO || !pkm.IsUntraded))
|
||||
moves.AddRange(GetTutors(PersonalTable.AO, Tutors_AO));
|
||||
break;
|
||||
case 7:
|
||||
info = PersonalTable.USUM.GetFormeEntry(species, form);
|
||||
moves.AddRange(TypeTutor6.Where((t, i) => info.TypeTutors[i]));
|
||||
moves.AddRange(TypeTutor6.Where((_, i) => info.TypeTutors[i]));
|
||||
if (pkm.InhabitedGeneration(7) && specialTutors && (pkm.USUM || !pkm.IsUntraded))
|
||||
moves.AddRange(GetTutors(PersonalTable.USUM, Tutors_USUM));
|
||||
break;
|
||||
|
@ -2197,7 +2197,7 @@ namespace PKHeX.Core
|
|||
|
||||
internal static TreeEncounterAvailable GetGSCHeadbuttAvailability(EncounterSlot encounter, int TID)
|
||||
{
|
||||
var Area = HeadbuttTreesC.FirstOrDefault(a => a.Location == encounter.Location);
|
||||
var Area = Array.Find(HeadbuttTreesC, a => a.Location == encounter.Location);
|
||||
if (Area == null) // Failsafe, every area with headbutt encounters has a tree area
|
||||
return TreeEncounterAvailable.Impossible;
|
||||
|
||||
|
|
|
@ -280,10 +280,10 @@ namespace PKHeX.Core
|
|||
switch (slot.Generation)
|
||||
{
|
||||
case 2:
|
||||
if (slot.Type.HasFlag(SlotType.Safari)) // Safari Zone is unavailable in Gen 2.
|
||||
if ((slot.Type & SlotType.Safari) != 0) // Safari Zone is unavailable in Gen 2.
|
||||
return true;
|
||||
|
||||
if (slot.Type.HasFlag(SlotType.Headbutt))
|
||||
if ((slot.Type & SlotType.Headbutt) != 0)
|
||||
if (Legal.GetGSCHeadbuttAvailability(slot, pk.TID) != TreeEncounterAvailable.ValidTree) // Unreachable Headbutt Trees.
|
||||
return true;
|
||||
break;
|
||||
|
|
|
@ -705,7 +705,7 @@ namespace PKHeX.Core
|
|||
res[z] = new CheckMoveResult(MoveSource.Initial, gen, Severity.Invalid, V180, CheckIdentifier.Move);
|
||||
|
||||
// provide the list of suggested base moves for the last required slot
|
||||
em = string.Join(", ", getMoveNames(infoset.Base));
|
||||
em = string.Join(", ", GetMoveNames(infoset.Base));
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -726,9 +726,9 @@ namespace PKHeX.Core
|
|||
|
||||
// provide the list of suggested base moves and species moves for the last required slot
|
||||
if (string.IsNullOrEmpty(em))
|
||||
em = string.Join(", ", getMoveNames(infoset.Base));
|
||||
em = string.Join(", ", GetMoveNames(infoset.Base));
|
||||
em += ", ";
|
||||
em += string.Join(", ", getMoveNames(infoset.Special));
|
||||
em += string.Join(", ", GetMoveNames(infoset.Special));
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -136,7 +136,7 @@ namespace PKHeX.Core
|
|||
res[z] = new CheckResult(Severity.Invalid, V180, CheckIdentifier.RelearnMove);
|
||||
|
||||
// provide the list of suggested base moves for the last required slot
|
||||
string em = string.Join(", ", getMoveNames(baseMoves));
|
||||
string em = string.Join(", ", GetMoveNames(baseMoves));
|
||||
res[required - 1].Comment += string.Format(Environment.NewLine + V181, em);
|
||||
}
|
||||
private static bool FlagInvalidInheritedMoves(CheckResult[] res, int required, EncounterEgg e, IReadOnlyList<int> RelearnMoves, IReadOnlyList<int> inheritMoves, IReadOnlyList<int> splitMoves)
|
||||
|
|
|
@ -8,7 +8,6 @@ namespace PKHeX.Core
|
|||
/// </summary>
|
||||
public static class LegalityCheckStrings
|
||||
{
|
||||
|
||||
#region General Strings
|
||||
|
||||
/// <summary>Default text for indicating validity.</summary>
|
||||
|
|
|
@ -80,10 +80,10 @@ namespace PKHeX.Core
|
|||
// Since the prior(next) lock is generated 7+2*n frames after, the worst case break is 7 frames after the PID.
|
||||
// Continue reversing until a sequential generation case is found.
|
||||
|
||||
// Check
|
||||
// Check
|
||||
|
||||
int start = ctr;
|
||||
do
|
||||
while (true)
|
||||
{
|
||||
int p7 = ctr - 7;
|
||||
if (p7 > start)
|
||||
|
@ -94,10 +94,10 @@ namespace PKHeX.Core
|
|||
}
|
||||
uint pid = cache[ctr + 1] << 16 | cache[ctr];
|
||||
if (MatchesLock(l, pid, PKX.GetGenderFromPID(l.Species, pid)))
|
||||
yield return new SeedFrame { FrameID = ctr + 6, PID = pid};
|
||||
yield return new SeedFrame { FrameID = ctr + 6, PID = pid };
|
||||
|
||||
ctr += 2;
|
||||
} while (true);
|
||||
}
|
||||
}
|
||||
|
||||
private static bool VerifyNPC(FrameCache cache, int ctr, IEnumerable<uint> PIDs, bool XD, out int originFrame)
|
||||
|
@ -143,11 +143,10 @@ namespace PKHeX.Core
|
|||
var rng = RNG.XDRNG;
|
||||
var SIDf = rng.Reverse(seed, rev);
|
||||
int ctr = 0;
|
||||
while (true)
|
||||
uint temp = 0;
|
||||
while (SIDf >> 16 != SID || (temp = rng.Prev(SIDf)) >> 16 != TID)
|
||||
{
|
||||
if (SIDf >> 16 == SID && rng.Prev(SIDf) >> 16 == TID)
|
||||
break;
|
||||
SIDf = rng.Prev(SIDf);
|
||||
SIDf = temp;
|
||||
if (ctr > 32) // arbitrary
|
||||
return false;
|
||||
ctr++;
|
||||
|
|
|
@ -156,7 +156,6 @@ namespace PKHeX.Core
|
|||
return (int)LanguageID.English;
|
||||
}
|
||||
|
||||
|
||||
#region Stored Attributes
|
||||
public int SpeciesID1 { get => Data[0]; set => Data[0] = (byte)value; } // raw access
|
||||
public override int Species
|
||||
|
|
|
@ -369,7 +369,7 @@ namespace PKHeX.Core
|
|||
private string ParseLineMove(string line)
|
||||
{
|
||||
string moveString = line.Substring(line[1] == ' ' ? 2 : 1);
|
||||
if (!moveString.Contains("Hidden Power"))
|
||||
if (!moveString.Contains(moves[237])) // Hidden Power
|
||||
return moveString;
|
||||
|
||||
// Defined Hidden Power
|
||||
|
@ -389,8 +389,7 @@ namespace PKHeX.Core
|
|||
else
|
||||
InvalidLines.Add($"Invalid Hidden Power Type: {type}");
|
||||
}
|
||||
moveString = "Hidden Power";
|
||||
return moveString;
|
||||
return moves[237];
|
||||
}
|
||||
private void ParseLineEVs(string line)
|
||||
{
|
||||
|
@ -498,7 +497,7 @@ namespace PKHeX.Core
|
|||
return "Dawn";
|
||||
|
||||
default:
|
||||
if (Legal.Totem_USUM.Contains(spec) && form != null && form.EndsWith("Totem"))
|
||||
if (Legal.Totem_USUM.Contains(spec) && form?.EndsWith("Totem") == true)
|
||||
return "Large";
|
||||
return form;
|
||||
}
|
||||
|
|
|
@ -279,7 +279,7 @@ namespace PKHeX.Core
|
|||
set
|
||||
{
|
||||
int len = Japanese ? 5 : OTLength;
|
||||
SetString(value, len, PadWith: 0xFF, PadToSize: len).CopyTo(Data, BlockOfs[0]);
|
||||
SetString(value, len, PadToSize: len, PadWith: 0xFF).CopyTo(Data, BlockOfs[0]);
|
||||
}
|
||||
}
|
||||
public override int Gender
|
||||
|
@ -476,7 +476,6 @@ namespace PKHeX.Core
|
|||
if (GameVersion.FRLG != Version)
|
||||
ofs += 0x200;
|
||||
return Data[BlockOfs[1] + ofs];
|
||||
|
||||
}
|
||||
protected set
|
||||
{
|
||||
|
|
|
@ -143,7 +143,7 @@ namespace PKHeX.Core
|
|||
/* 05 */ EventConst = Blocks[05].Offset; // 0x01C00 // [E00] EventWork
|
||||
/* 06 */ PokeDex = Blocks[06].Offset; // 0x02A00 // [F78] ZukanData
|
||||
/* 07 */ GTS = Blocks[07].Offset; // 0x03A00 // [228] GtsData
|
||||
/* 08 */ Fused = Blocks[08].Offset; // 0x03E00 // [104] UnionPokemon
|
||||
/* 08 */ Fused = Blocks[08].Offset; // 0x03E00 // [104] UnionPokemon
|
||||
/* 09 */ Misc = Blocks[09].Offset; // 0x04000 // [200] Misc
|
||||
/* 10 */ Trainer2 = Blocks[10].Offset; // 0x04200 // [020] FieldMenu
|
||||
/* 11 */ ConfigSave = Blocks[11].Offset; // 0x04400 // [004] ConfigSave
|
||||
|
@ -1455,7 +1455,7 @@ namespace PKHeX.Core
|
|||
set => Data[TrainerCard + 0x78] = (byte)((Data[TrainerCard + 0x78] & ~2) | (value ? 2 : 0)); // in battle
|
||||
}
|
||||
|
||||
public override string GetString(int Offset, int Count) => StringConverter.GetString7(Data, Offset, Count);
|
||||
public override string GetString(int Offset, int Length) => StringConverter.GetString7(Data, Offset, Length);
|
||||
public override byte[] SetString(string value, int maxLength, int PadToSize = 0, ushort PadWith = 0)
|
||||
{
|
||||
if (PadToSize == 0)
|
||||
|
|
|
@ -433,8 +433,8 @@ namespace PKHeX.Core
|
|||
|
||||
int len = BoxSlotCount*SIZE_STORED;
|
||||
byte[] boxdata = GetData(GetBoxOffset(0), len*BoxCount); // get all boxes
|
||||
string[] boxNames = new int[BoxCount].Select((x, i) => GetBoxName(i)).ToArray();
|
||||
int[] boxWallpapers = new int[BoxCount].Select((x, i) => GetBoxWallpaper(i)).ToArray();
|
||||
string[] boxNames = new int[BoxCount].Select((_, i) => GetBoxName(i)).ToArray();
|
||||
int[] boxWallpapers = new int[BoxCount].Select((_, i) => GetBoxWallpaper(i)).ToArray();
|
||||
|
||||
min /= BoxSlotCount;
|
||||
max /= BoxSlotCount;
|
||||
|
@ -504,12 +504,12 @@ namespace PKHeX.Core
|
|||
return box;
|
||||
return Data[offset];
|
||||
}
|
||||
public virtual void SetBoxWallpaper(int box, int val)
|
||||
public virtual void SetBoxWallpaper(int box, int value)
|
||||
{
|
||||
int offset = GetBoxWallpaperOffset(box);
|
||||
if (offset < 0 || box > BoxCount)
|
||||
return;
|
||||
Data[offset] = (byte)val;
|
||||
Data[offset] = (byte)value;
|
||||
}
|
||||
|
||||
public virtual PKM GetPartySlot(int offset)
|
||||
|
@ -579,7 +579,7 @@ namespace PKHeX.Core
|
|||
SetData(GetData(slotFrom, SIZE_PARTY), slotTo);
|
||||
}
|
||||
SetStoredSlot(BlankPKM, GetPartyOffset(5), false, false);
|
||||
PartyCount -= 1;
|
||||
PartyCount--;
|
||||
}
|
||||
public virtual bool IsSlotLocked(int box, int slot) => false;
|
||||
public bool IsAnySlotLockedInBox(int BoxStart, int BoxEnd)
|
||||
|
|
|
@ -124,7 +124,7 @@ namespace PKHeX.WinForms.Controls
|
|||
if (!src.Editable || SAV.IsSlotLocked(src.Box, src.Slot))
|
||||
return;
|
||||
bool encrypt = Control.ModifierKeys == Keys.Control;
|
||||
HandleMovePKM(pb, src.Slot, src.Box, encrypt);
|
||||
HandleMovePKM(pb, encrypt);
|
||||
}
|
||||
public void DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
|
@ -174,7 +174,7 @@ namespace PKHeX.WinForms.Controls
|
|||
private static ISlotViewer<T> GetViewParent<T>(T pb) where T : Control
|
||||
=> WinFormsUtil.FindFirstControlOfType<ISlotViewer<T>>(pb);
|
||||
|
||||
public void HandleMovePKM(PictureBox pb, int slot, int box, bool encrypt)
|
||||
public void HandleMovePKM(PictureBox pb, bool encrypt)
|
||||
{
|
||||
// Create a temporary PKM file to perform a drag drop operation.
|
||||
|
||||
|
@ -186,7 +186,7 @@ namespace PKHeX.WinForms.Controls
|
|||
DragInfo.Source.OriginalData = SAV.GetData(DragInfo.Source.Offset, SAV.SIZE_STORED);
|
||||
|
||||
// Make a new file name based off the PID
|
||||
string newfile = CreateDragDropPKM(pb, box, encrypt, out bool external);
|
||||
string newfile = CreateDragDropPKM(pb, encrypt, out bool external);
|
||||
DragInfo.Reset();
|
||||
SetCursor(SE.GetDefaultCursor, pb);
|
||||
|
||||
|
@ -199,11 +199,11 @@ namespace PKHeX.WinForms.Controls
|
|||
}
|
||||
private async void DeleteAsync(string path, int delay)
|
||||
{
|
||||
await Task.Delay(delay);
|
||||
await Task.Delay(delay).ConfigureAwait(false);
|
||||
if (File.Exists(path) && DragInfo.CurrentPath == null)
|
||||
File.Delete(path);
|
||||
}
|
||||
private string CreateDragDropPKM(PictureBox pb, int box, bool encrypt, out bool external)
|
||||
private string CreateDragDropPKM(PictureBox pb, bool encrypt, out bool external)
|
||||
{
|
||||
byte[] dragdata = SAV.DecryptPKM(DragInfo.Source.OriginalData);
|
||||
Array.Resize(ref dragdata, SAV.SIZE_STORED);
|
||||
|
@ -487,6 +487,7 @@ namespace PKHeX.WinForms.Controls
|
|||
OriginalBackground?.Dispose();
|
||||
CurrentBackground?.Dispose();
|
||||
ColorizedColor?.Dispose();
|
||||
Sounds?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,14 +30,14 @@ namespace PKHeX.WinForms
|
|||
const int stretch = 50;
|
||||
Height += stretch;
|
||||
|
||||
if (pkm != null && pkm.Format == 7)
|
||||
if (pkm?.Format == 7)
|
||||
Height += 40;
|
||||
|
||||
this.qr = qr;
|
||||
this.icon = icon;
|
||||
Lines = lines;
|
||||
|
||||
if (pkm != null && pkm.Format == 7)
|
||||
if (pkm?.Format == 7)
|
||||
UpdateBoxSlotCopies(null, null);
|
||||
else
|
||||
RefreshImage();
|
||||
|
@ -80,7 +80,7 @@ namespace PKHeX.WinForms
|
|||
|
||||
// QR Utility
|
||||
private const string QR6PathBad = "null/#"; // prefix to prevent URL from loading
|
||||
private const string QR6Path = @"http://lunarcookies.github.io/b1s1.html#";
|
||||
private const string QR6Path = "http://lunarcookies.github.io/b1s1.html#";
|
||||
private const string DecodeAPI = "http://api.qrserver.com/v1/read-qr-code/?fileurl=";
|
||||
private const int QRSize = 365;
|
||||
private static readonly string EncodeAPI = $"http://chart.apis.google.com/chart?chs={QRSize}x{QRSize}&cht=qr&chl=";
|
||||
|
@ -122,7 +122,7 @@ namespace PKHeX.WinForms
|
|||
string fstr = Regex.Unescape(pkstr);
|
||||
byte[] raw = Encoding.Unicode.GetBytes(fstr);
|
||||
// Remove 00 interstitials and retrieve from offset 0x30, take PK7 Stored Size (always)
|
||||
return raw.ToList().Where((c, i) => i % 2 == 0).Skip(0x30).Take(0xE8).ToArray();
|
||||
return raw.ToList().Where((_, i) => i % 2 == 0).Skip(0x30).Take(0xE8).ToArray();
|
||||
}
|
||||
// All except G7
|
||||
pkstr = pkstr.Substring(pkstr.IndexOf("#", StringComparison.Ordinal) + 1); // Trim URL
|
||||
|
|
|
@ -9,8 +9,6 @@ namespace PKHeX.WinForms
|
|||
{
|
||||
public static class FontUtil
|
||||
{
|
||||
|
||||
// Font Related
|
||||
#if WINDOWS
|
||||
[DllImport("gdi32.dll")]
|
||||
private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, IntPtr pdv, [In] ref uint pcFonts);
|
||||
|
|
|
@ -30,7 +30,6 @@ namespace QRCoder
|
|||
{
|
||||
this.ModuleMatrix = null;
|
||||
this.Version = 0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue