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:
Kurt 2018-01-26 09:19:20 -08:00
parent 48564d7e30
commit c066df243f
7 changed files with 40 additions and 21 deletions

View File

@ -139,7 +139,8 @@ private void ParsePK1(PKM pk)
VerifyNickname();
VerifyDVs();
VerifyEVs();
VerifyG1OT();
VerifyLevelG1();
VerifyOTG1();
VerifyMiscG1();
}
private void ParsePK3(PKM pk)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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