mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-05-11 14:14:57 -05:00
Misc fixes/updates
Fix crystal lacking met level<->current level checks Fix met location loading for gen2 saves (gen7 sav loaded gen1/2 pkm -> load gen2 sav) refactor some logic with pattern matching/consistent method names
This commit is contained in:
parent
48564d7e30
commit
c066df243f
|
|
@ -139,7 +139,8 @@ private void ParsePK1(PKM pk)
|
|||
VerifyNickname();
|
||||
VerifyDVs();
|
||||
VerifyEVs();
|
||||
VerifyG1OT();
|
||||
VerifyLevelG1();
|
||||
VerifyOTG1();
|
||||
VerifyMiscG1();
|
||||
}
|
||||
private void ParsePK3(PKM pk)
|
||||
|
|
|
|||
|
|
@ -628,7 +628,7 @@ private void VerifyOT()
|
|||
AddLine(Severity.Fishy, V417, CheckIdentifier.Trainer);
|
||||
|
||||
if (pkm.VC)
|
||||
VerifyG1OT();
|
||||
VerifyOTG1();
|
||||
|
||||
if (Legal.CheckWordFilter)
|
||||
{
|
||||
|
|
@ -638,7 +638,7 @@ private void VerifyOT()
|
|||
AddLine(Severity.Invalid, $"Wordfilter: {bad}", CheckIdentifier.Trainer);
|
||||
}
|
||||
}
|
||||
private void VerifyG1OT()
|
||||
private void VerifyOTG1()
|
||||
{
|
||||
string tr = pkm.OT_Name;
|
||||
|
||||
|
|
@ -907,6 +907,22 @@ private void VerifyLevel()
|
|||
AddLine(Severity.Fishy, V87, CheckIdentifier.Level);
|
||||
else
|
||||
AddLine(Severity.Valid, V88, CheckIdentifier.Level);
|
||||
}
|
||||
private void VerifyLevelG1()
|
||||
{
|
||||
if (pkm.IsEgg)
|
||||
{
|
||||
int elvl = Legal.GetEggHatchLevel(pkm);
|
||||
if (elvl != pkm.CurrentLevel)
|
||||
AddLine(Severity.Invalid, string.Format(V52, elvl), CheckIdentifier.Level);
|
||||
return;
|
||||
}
|
||||
if (pkm.Met_Location != 0) // crystal
|
||||
{
|
||||
int lvl = pkm.CurrentLevel;
|
||||
if (lvl < pkm.Met_Level)
|
||||
AddLine(Severity.Invalid, V85, CheckIdentifier.Level);
|
||||
}
|
||||
|
||||
// There is no way to prevent a gen1 trade evolution as held items (everstone) did not exist.
|
||||
// Machoke, Graveler, Haunter and Kadabra captured in the second phase evolution, excluding in-game trades, are already checked
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ public static LegalInfo FindVerifiedEncounter(PKM pkm)
|
|||
LegalInfo info = new LegalInfo(pkm);
|
||||
var encounters = EncounterGenerator.GetEncounters(pkm, info);
|
||||
|
||||
using (var encounter = new PeekEnumerator<IEncounterable>(encounters.GetEnumerator()))
|
||||
using (var encounter = new PeekEnumerator<IEncounterable>(encounters))
|
||||
{
|
||||
if (!encounter.PeekIsNext())
|
||||
return VerifyWithoutEncounter(pkm, info);
|
||||
|
|
|
|||
|
|
@ -182,8 +182,8 @@ private static IEnumerable<GBEncounterData> GenerateRawEncounters12(PKM pkm, Gam
|
|||
private static IEnumerable<GBEncounterData> GenerateFilteredEncounters(PKM pkm)
|
||||
{
|
||||
bool crystal = pkm.Format == 2 && pkm.Met_Location != 0 || pkm.Format >= 7 && pkm.OT_Gender == 1;
|
||||
var g1i = new PeekEnumerator<GBEncounterData>(get1().GetEnumerator());
|
||||
var g2i = new PeekEnumerator<GBEncounterData>(get2().GetEnumerator());
|
||||
var g1i = new PeekEnumerator<GBEncounterData>(get1());
|
||||
var g2i = new PeekEnumerator<GBEncounterData>(get2());
|
||||
var deferred = new List<GBEncounterData>();
|
||||
while (g2i.PeekIsNext() || g1i.PeekIsNext())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ public void Reset()
|
|||
#endregion
|
||||
|
||||
public PeekEnumerator(IEnumerator<T> enumerator) => Enumerator = enumerator ?? throw new ArgumentNullException(nameof(enumerator));
|
||||
public PeekEnumerator(IEnumerable<T> enumerable) => Enumerator = enumerable.GetEnumerator();
|
||||
|
||||
/// <summary>
|
||||
/// Fetch the next element, if not already performed.
|
||||
|
|
|
|||
|
|
@ -16,19 +16,19 @@ public static CheckResult[] VerifyRelearn(PKM pkm, LegalInfo info)
|
|||
if (info.Generation < 6 || pkm.VC1)
|
||||
return VerifyRelearnNone(pkm, info);
|
||||
|
||||
if (info.EncounterMatch is EncounterLink l)
|
||||
return VerifyRelearnSpecifiedMoveset(pkm, info, l.RelearnMoves);
|
||||
if (info.EncounterMatch is MysteryGift g)
|
||||
return VerifyRelearnSpecifiedMoveset(pkm, info, g.RelearnMoves);
|
||||
if (info.EncounterMatch is EncounterStatic s)
|
||||
return VerifyRelearnSpecifiedMoveset(pkm, info, s.Relearn);
|
||||
|
||||
if (info.EncounterMatch is EncounterEgg e)
|
||||
return VerifyRelearnEggBase(pkm, info, e);
|
||||
|
||||
if (pkm.RelearnMove1 != 0 && info.EncounterMatch is EncounterSlot z && z.Permissions.DexNav && EncounterGenerator.IsDexNavValid(pkm))
|
||||
return VerifyRelearnDexNav(pkm, info);
|
||||
|
||||
switch (info.EncounterMatch)
|
||||
{
|
||||
case EncounterLink l:
|
||||
return VerifyRelearnSpecifiedMoveset(pkm, info, l.RelearnMoves);
|
||||
case MysteryGift g:
|
||||
return VerifyRelearnSpecifiedMoveset(pkm, info, g.RelearnMoves);
|
||||
case EncounterStatic s:
|
||||
return VerifyRelearnSpecifiedMoveset(pkm, info, s.Relearn);
|
||||
case EncounterEgg e:
|
||||
return VerifyRelearnEggBase(pkm, info, e);
|
||||
case EncounterSlot z when pkm.RelearnMove1 != 0 && z.Permissions.DexNav && EncounterGenerator.IsDexNavValid(pkm):
|
||||
return VerifyRelearnDexNav(pkm, info);
|
||||
}
|
||||
return VerifyRelearnNone(pkm, info);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1261,10 +1261,11 @@ private void UpdateSpecies(object sender, EventArgs e)
|
|||
private void UpdateOriginGame(object sender, EventArgs e)
|
||||
{
|
||||
GameVersion Version = (GameVersion)WinFormsUtil.GetIndex(CB_GameOrigin);
|
||||
|
||||
// check if differs
|
||||
GameVersion newTrack = GameUtil.GetMetLocationVersionGroup(Version);
|
||||
if (pkm.Format < 3)
|
||||
if (newTrack == GameVersion.GSC && pkm.Format >= 7)
|
||||
newTrack = GameVersion.USUM;
|
||||
else if (pkm.Format < 3)
|
||||
newTrack = GameVersion.GSC;
|
||||
if (newTrack != origintrack)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user