/// <summary> /// Checks the input <see cref="PKM"/> data for legality. /// </summary> /// <param name="pk">Input data to check</param> /// <param name="table"><see cref="SaveFile"/> specific personal data</param> public LegalityAnalysis(PKM pk, PersonalTable table = null) { pkm = pk; #if SUPPRESS try #endif { PersonalInfo = table?.GetFormeEntry(pkm.Species, pkm.AltForm) ?? pkm.PersonalInfo; ParseLegality(); if (Parse.Count <= 0) { return; } Valid = Parse.All(chk => chk.Valid) && Info.Moves.All(m => m.Valid) && Info.Relearn.All(m => m.Valid); if (pkm.FatefulEncounter && Info.Relearn.Any(chk => !chk.Valid) && EncounterMatch is EncounterInvalid) { AddLine(Severity.Indeterminate, LFatefulGiftMissing, CheckIdentifier.Fateful); } } #if SUPPRESS catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); Valid = false; AddLine(Severity.Invalid, L_AError, CheckIdentifier.Misc); Error = true; } #endif Parsed = true; }
/// <summary> /// Checks the input <see cref="PKM"/> data for legality. /// </summary> /// <param name="pk">Input data to check</param> /// <param name="table"><see cref="SaveFile"/> specific personal data</param> public LegalityAnalysis(PKM pk, PersonalTable?table = null) { pkm = pk; PersonalInfo = table?.GetFormeEntry(pkm.Species, pkm.AltForm) ?? pkm.PersonalInfo; if (pkm.Format <= 2) // prior to storing GameVersion { pkm.TradebackStatus = GBRestrictions.GetTradebackStatusInitial(pkm); } #if SUPPRESS try #endif { Info = EncounterFinder.FindVerifiedEncounter(pkm); if (!pkm.IsOriginValid) { AddLine(Severity.Invalid, LEncConditionBadSpecies, CheckIdentifier.GameOrigin); } GetParseMethod()(); if (Parse.Count == 0) // shouldn't ever happen as at least one is yielded above. { AddLine(Severity.Invalid, L_AError, CheckIdentifier.Misc); return; } Valid = Parse.All(chk => chk.Valid) && Info.Moves.All(m => m.Valid) && Info.Relearn.All(m => m.Valid); if (!Valid && pkm.FatefulEncounter && Info.Relearn.Any(chk => !chk.Valid) && EncounterMatch is EncounterInvalid) { AddLine(Severity.Indeterminate, LFatefulGiftMissing, CheckIdentifier.Fateful); } Parsed = true; } #if SUPPRESS catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); Info = new LegalInfo(pkm); Valid = false; AddLine(Severity.Invalid, L_AError, CheckIdentifier.Misc); } #endif }
/// <summary> /// Checks the input <see cref="PKM"/> data for legality. This is the best method for checking with context, as some games do not have all Alternate Form data available. /// </summary> /// <param name="pk">Input data to check</param> /// <param name="table"><see cref="SaveFile"/> specific personal data</param> public LegalityAnalysis(PKM pk, PersonalTable table) : this(pk, table.GetFormeEntry(pk.Species, pk.AltForm)) { }
/// <summary> /// Checks the input <see cref="PKM"/> data for legality. /// </summary> /// <param name="pk">Input data to check</param> /// <param name="table"><see cref="SaveFile"/> specific personal data</param> public LegalityAnalysis(PKM pk, PersonalTable table = null) { #if SUPPRESS try #endif { PersonalInfo = table?.GetFormeEntry(pk.Species, pk.AltForm) ?? pk.PersonalInfo; switch (pk.Format) // prior to storing GameVersion { case 1: ParsePK1(pk); break; case 2: ParsePK1(pk); break; } if (!Parse.Any()) { switch (pk.GenNumber) { case 3: ParsePK3(pk); break; case 4: ParsePK4(pk); break; case 5: ParsePK5(pk); break; case 6: ParsePK6(pk); break; case 1: case 2: case 7: ParsePK7(pk); break; } } if (Parse.Count > 0) { if (Parse.Any(chk => !chk.Valid)) { Valid = false; } else if (Info.Moves.Any(m => m.Valid != true)) { Valid = false; } else if (Info.Relearn.Any(m => m.Valid != true)) { Valid = false; } else { Valid = true; } if (pkm.FatefulEncounter && Info.Relearn.Any(chk => !chk.Valid) && EncounterMatch == null) { AddLine(Severity.Indeterminate, V188, CheckIdentifier.Fateful); } } } #if SUPPRESS catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.Message); Valid = false; AddLine(Severity.Invalid, V190, CheckIdentifier.Misc); pkm = pk; Error = true; } #endif Parsed = true; }