private string getVerboseLegalityReport() { if (!Parsed) { return(V189); } const string separator = "==="; string[] br = { separator, "" }; var lines = new List <string> { br[1] }; lines.AddRange(br); int rl = lines.Count; for (int i = 0; i < 4; i++) { if (vMoves[i].Valid) { lines.Add(string.Format(V191, getString(vMoves[i].Judgement), i + 1, vMoves[i].Comment)); } } if (pkm.Format >= 6) { for (int i = 0; i < 4; i++) { if (vRelearn[i].Valid) { lines.Add(string.Format(V192, getString(vRelearn[i].Judgement), i + 1, vRelearn[i].Comment)); } } } if (rl != lines.Count) // move info added, break for next section { lines.Add(br[1]); } var outputLines = Parse.Where(chk => chk != null && chk.Valid && chk.Comment != V).OrderBy(chk => chk.Judgement); // Fishy sorted to top lines.AddRange(outputLines.Select(chk => string.Format(V196, getString(chk.Judgement), chk.Comment))); lines.AddRange(br); lines.Add(string.Format(V195, EncounterName)); var pidiv = MethodFinder.Analyze(pkm); if (pidiv != null) { if (!pidiv.NoSeed) { lines.Add(string.Format(V248, pidiv.OriginSeed.ToString("X8"))); } lines.Add(string.Format(V249, pidiv.Type)); } return(getLegalityReport() + string.Join(Environment.NewLine, lines)); }
private static IEnumerable <IEncounterable> GetEncounters3(PKM pkm, LegalInfo info) { info.PIDIV = MethodFinder.Analyze(pkm); var deferred = new List <IEncounterable>(); foreach (var z in GenerateRawEncounters3(pkm, info)) { if (z is EncounterSlot w && pkm.Version == 15) { info.PIDIV = MethodFinder.GetPokeSpotSeeds(pkm, w.SlotNumber).FirstOrDefault() ?? info.PIDIV; } if (info.PIDIV.Type.IsCompatible3(z, pkm)) { yield return(z); } else { deferred.Add(z); } } if (deferred.Count == 0) { yield break; } info.PIDIVMatches = false; foreach (var z in deferred) { yield return(z); } }
public static IEnumerable <IEncounterable> GetEncounters(PKM pkm, LegalInfo info) { info.PIDIV = MethodFinder.Analyze(pkm); var deferredPIDIV = new List <IEncounterable>(); var deferredEType = new List <IEncounterable>(); foreach (var z in GenerateRawEncounters4(pkm, info)) { if (!info.PIDIV.Type.IsCompatible4(z, pkm)) { deferredPIDIV.Add(z); } else if (pkm is IGroundTile e && !(z is IGroundTypeTile t ? t.GroundTile.Contains(e.GroundTile) : e.GroundTile == 0)) { deferredEType.Add(z); }
private string GetVerboseLegalityReport() { if (!Parsed) return V189; const string separator = "==="; string[] br = {separator, ""}; var lines = new List<string> {br[1]}; lines.AddRange(br); int rl = lines.Count; var vMoves = Info.Moves; var vRelearn = Info.Relearn; for (int i = 0; i < 4; i++) if (vMoves[i].Valid) lines.Add(string.Format(V191, vMoves[i].Judgement.Description(), i + 1, vMoves[i].Comment)); if (pkm.Format >= 6) for (int i = 0; i < 4; i++) if (vRelearn[i].Valid) lines.Add(string.Format(V192, vRelearn[i].Judgement.Description(), i + 1, vRelearn[i].Comment)); if (rl != lines.Count) // move info added, break for next section lines.Add(br[1]); var outputLines = Parse.Where(chk => chk != null && chk.Valid && chk.Comment != V).OrderBy(chk => chk.Judgement); // Fishy sorted to top lines.AddRange(outputLines.Select(chk => string.Format(V196, chk.Judgement.Description(), chk.Comment))); lines.AddRange(br); lines.Add(string.Format(V195, EncounterName)); var pidiv = Info.PIDIV ?? MethodFinder.Analyze(pkm); if (pidiv != null) { if (!pidiv.NoSeed) lines.Add(string.Format(V248, pidiv.OriginSeed.ToString("X8"))); lines.Add(string.Format(V249, pidiv.Type)); } if (!Valid && Info.InvalidMatches != null) { lines.Add("Other match(es):"); lines.AddRange(Info.InvalidMatches.Select(z => $"{z.Name}: {z.Reason}")); } return GetLegalityReport() + string.Join(Environment.NewLine, lines); }
private static IEnumerable <IEncounterable> GetEncounters3(PKM pkm, LegalInfo info) { info.PIDIV = MethodFinder.Analyze(pkm); var deferred = new List <IEncounterable>(); foreach (var z in GenerateRawEncounters3(pkm, info)) { if (pkm.Version == (int)GameVersion.CXD) // C/XD { if (z is EncounterSlot w) { var seeds = MethodFinder.GetPokeSpotSeeds(pkm, w.SlotNumber).FirstOrDefault(); info.PIDIV = seeds ?? info.PIDIV; } else if (z is EncounterStaticShadow s) { bool valid = GetIsShadowLockValid(pkm, info, s); if (!valid) { deferred.Add(s); continue; } } } if (info.PIDIV.Type.IsCompatible3(z, pkm)) { yield return(z); } else { deferred.Add(z); } } if (deferred.Count == 0) { yield break; } info.PIDIVMatches = false; foreach (var z in deferred) { yield return(z); } }
private static IEnumerable <IEncounterable> GetEncounters3CXD(PKM pkm, LegalInfo info) { info.PIDIV = MethodFinder.Analyze(pkm); IEncounterable?Partial = null; foreach (var z in GenerateRawEncounters3CXD(pkm)) { if (z is EncounterSlot3PokeSpot w) { var seeds = MethodFinder.GetPokeSpotSeeds(pkm, w.SlotNumber); foreach (var s in seeds) { info.PIDIV = s; break; } } else if (z is EncounterStaticShadow s) { bool valid = GetIsShadowLockValid(pkm, info, s); if (!valid) { Partial ??= s; continue; } } if (info.PIDIV.Type.IsCompatible3(z, pkm)) { yield return(z); } else { Partial ??= z; } } if (Partial == null) { yield break; } info.PIDIVMatches = false; yield return(Partial); }
private static void VerifyFatefulMysteryGift(LegalityAnalysis data, MysteryGift g) { var pkm = data.pkm; if (g is PGF p && p.IsShiny) { var Info = data.Info; Info.PIDIV = MethodFinder.Analyze(pkm); if (Info.PIDIV.Type != PIDType.G5MGShiny && pkm.Egg_Location != 30003) { data.AddLine(GetInvalid(LPIDTypeMismatch, CheckIdentifier.PID)); } } var result = pkm.FatefulEncounter ? GetValid(LFatefulMystery, CheckIdentifier.Fateful) : GetInvalid(LFatefulMysteryMissing, CheckIdentifier.Fateful); data.AddLine(result); }
private static IEnumerable <IEncounterable> GetEncounters3(PKM pkm, LegalInfo info) { info.PIDIV = MethodFinder.Analyze(pkm); var deferred = new List <IEncounterable>(); foreach (var z in GenerateRawEncounters3(pkm, info)) { if (pkm.Version == 15) { if (z is EncounterSlot w) { var seeds = MethodFinder.GetPokeSpotSeeds(pkm, w.SlotNumber).FirstOrDefault(); info.PIDIV = seeds ?? info.PIDIV; } else if (ParseSettings.FlagCXDShadowFirstLockMismatch && z is EncounterStaticShadow s && !LockFinder.IsFirstShadowLockValid(s, info.PIDIV)) { deferred.Add(s); continue; } } if (info.PIDIV.Type.IsCompatible3(z, pkm)) { yield return(z); } else { deferred.Add(z); } } if (deferred.Count == 0) { yield break; } info.PIDIVMatches = false; foreach (var z in deferred) { yield return(z); } }
private static IEnumerable <IEncounterable> GetEncounters4(PKM pkm, LegalInfo info) { info.PIDIV = MethodFinder.Analyze(pkm); var deferredPIDIV = new List <IEncounterable>(); var deferredEType = new List <IEncounterable>(); foreach (var z in GenerateRawEncounters4(pkm, info)) { if (!info.PIDIV.Type.IsCompatible4(z, pkm)) { deferredPIDIV.Add(z); } else if (pkm.Format <= 6 && !IsEncounterTypeMatch(z, pkm.EncounterType)) { deferredEType.Add(z); } else { yield return(z); } } foreach (var z in deferredEType) { yield return(z); } if (deferredPIDIV.Count == 0) { yield break; } info.PIDIVMatches = false; foreach (var z in deferredPIDIV) { yield return(z); } }
private void VerifyFatefulMysteryGift(LegalityAnalysis data, MysteryGift g) { var pkm = data.pkm; if (g is PGF p && p.IsShiny) { var Info = data.Info; Info.PIDIV = MethodFinder.Analyze(pkm); if (Info.PIDIV.Type != PIDType.G5MGShiny && pkm.Egg_Location != 30003) { data.AddLine(GetInvalid(V411, CheckIdentifier.PID)); } } if (pkm.FatefulEncounter) { data.AddLine(GetValid(V321, CheckIdentifier.Fateful)); } else { data.AddLine(GetInvalid(V322, CheckIdentifier.Fateful)); } }
private static IEnumerable <IEncounterable> GetEncounters3(PKM pkm, LegalInfo info) { info.PIDIV = MethodFinder.Analyze(pkm); IEncounterable?Partial = null; foreach (var z in GenerateRawEncounters3(pkm, info)) { if (info.PIDIV.Type.IsCompatible3(z, pkm)) { yield return(z); } else { Partial ??= z; } } if (Partial == null) { yield break; } info.PIDIVMatches = false; yield return(Partial); }
private string GetVerboseLegalityReport() { if (!Parsed || Info == null) { return(L_AnalysisUnavailable); } const string separator = "==="; string[] br = { separator, string.Empty }; var lines = new List <string> { br[1] }; lines.AddRange(br); int rl = lines.Count; var vMoves = Info.Moves; var vRelearn = Info.Relearn; for (int i = 0; i < 4; i++) { var move = vMoves[i]; if (!move.Valid) { continue; } var msg = string.Format(L_F0_M_1_2, move.Rating, i + 1, move.Comment); if (pkm.Format != move.Generation) { msg += $" [Gen{move.Generation}]"; } lines.Add(msg); } if (pkm.Format >= 6) { for (int i = 0; i < 4; i++) { if (vRelearn[i].Valid) { lines.Add(string.Format(L_F0_RM_1_2, vRelearn[i].Rating, i + 1, vRelearn[i].Comment)); } } } if (rl != lines.Count) // move info added, break for next section { lines.Add(br[1]); } var outputLines = Parse.Where(chk => chk?.Valid == true && chk.Comment != L_AValid).OrderBy(chk => chk.Judgement); // Fishy sorted to top lines.AddRange(outputLines.Select(chk => string.Format(L_F0_1, chk.Rating, chk.Comment))); lines.AddRange(br); lines.Add(string.Format(L_FEncounterType_0, EncounterName)); var loc = EncounterLocation; if (!string.IsNullOrEmpty(loc)) { lines.Add(string.Format(L_F0_1, "Location", loc)); } if (pkm.VC) { lines.Add(string.Format(L_F0_1, nameof(GameVersion), Info.Game)); } var pidiv = Info.PIDIV ?? MethodFinder.Analyze(pkm); if (pidiv != null) { if (!pidiv.NoSeed) { lines.Add(string.Format(L_FOriginSeed_0, pidiv.OriginSeed.ToString("X8"))); } lines.Add(string.Format(L_FPIDType_0, pidiv.Type)); } if (!Valid && Info.InvalidMatches != null) { lines.Add("Other match(es):"); lines.AddRange(Info.InvalidMatches.Select(z => $"{z.LongName}: {z.Reason}")); } return(GetLegalityReport() + string.Join(Environment.NewLine, lines)); }
private static IEnumerable <IEncounterable> GetEncounters3(PKM pkm, LegalInfo info) { info.PIDIV = MethodFinder.Analyze(pkm); var deferred = new List <IEncounterable>(); foreach (var z in GenerateRawEncounters3(pkm, info)) { if (pkm.Version == (int)GameVersion.CXD) // C/XD { if (z is EncounterSlot w) { var seeds = MethodFinder.GetPokeSpotSeeds(pkm, w.SlotNumber).FirstOrDefault(); info.PIDIV = seeds ?? info.PIDIV; } else if (z is EncounterStaticShadow s) { bool valid = false; if (s.IVs == null) // not ereader { valid = LockFinder.IsAllShadowLockValid(s, info.PIDIV, pkm); } else { var possible = MethodFinder.GetColoEReaderMatches(pkm.EncryptionConstant); foreach (var poss in possible) { if (!LockFinder.IsAllShadowLockValid(s, poss, pkm)) { continue; } valid = true; info.PIDIV = poss; break; } } if (!valid) { deferred.Add(s); continue; } } } if (info.PIDIV.Type.IsCompatible3(z, pkm)) { yield return(z); } else { deferred.Add(z); } } if (deferred.Count == 0) { yield break; } info.PIDIVMatches = false; foreach (var z in deferred) { yield return(z); } }
private string GetVerboseLegalityReport() { if (!Parsed || Info == null) { return(V189); } const string separator = "==="; string[] br = { separator, "" }; var lines = new List <string> { br[1] }; lines.AddRange(br); int rl = lines.Count; var vMoves = Info.Moves; var vRelearn = Info.Relearn; for (int i = 0; i < 4; i++) { if (vMoves[i].Valid) { lines.Add(string.Format(V191, vMoves[i].Rating, i + 1, vMoves[i].Comment)); } } if (pkm.Format >= 6) { for (int i = 0; i < 4; i++) { if (vRelearn[i].Valid) { lines.Add(string.Format(V192, vRelearn[i].Rating, i + 1, vRelearn[i].Comment)); } } } if (rl != lines.Count) // move info added, break for next section { lines.Add(br[1]); } var outputLines = Parse.Where(chk => chk?.Valid == true && chk.Comment != V).OrderBy(chk => chk.Judgement); // Fishy sorted to top lines.AddRange(outputLines.Select(chk => string.Format(V196, chk.Rating, chk.Comment))); lines.AddRange(br); lines.Add(string.Format(V195, EncounterName)); var loc = EncounterLocation; if (!string.IsNullOrEmpty(loc)) { lines.Add(string.Format(V196, "Location", loc)); } if (pkm.VC) { lines.Add(string.Format(V196, nameof(GameVersion), Info.Game)); } var pidiv = Info.PIDIV ?? MethodFinder.Analyze(pkm); if (pidiv != null) { if (!pidiv.NoSeed) { lines.Add(string.Format(V248, pidiv.OriginSeed.ToString("X8"))); } lines.Add(string.Format(V249, pidiv.Type)); } if (!Valid && Info.InvalidMatches != null) { lines.Add("Other match(es):"); lines.AddRange(Info.InvalidMatches.Select(z => $"{z.Name}: {z.Reason}")); } return(GetLegalityReport() + string.Join(Environment.NewLine, lines)); }