public override void Verify(LegalityAnalysis data) { var pkm = data.pkm; var EncounterMatch = data.EncounterMatch; // If the Pokémon is not nicknamed, it should match one of the language strings. if (pkm.Nickname.Length == 0) { data.AddLine(GetInvalid(V2)); return; } if (pkm.Species > PKX.SpeciesLang[0].Length) { data.AddLine(Get(V2, Severity.Indeterminate)); return; } if (pkm.VC && pkm.IsNicknamed) { VerifyG1NicknameWithinBounds(data, pkm.Nickname); } else if (EncounterMatch is MysteryGift m) { if (pkm.IsNicknamed && !m.IsEgg) { data.AddLine(Get(V0, Severity.Fishy)); } } if (EncounterMatch is EncounterTrade) { VerifyNicknameTrade(data); return; } if (pkm.IsEgg) { VerifyNicknameEgg(data); return; } string nickname = pkm.Nickname.Replace("'", "’"); if (VerifyUnNicknamedEncounter(data, pkm, nickname)) { return; } // Non-nicknamed strings have already been checked. if (Legal.CheckWordFilter && pkm.IsNicknamed && WordFilter.IsFiltered(nickname, out string bad)) { data.AddLine(GetInvalid($"Wordfilter: {bad}")); } }
public override void Verify(LegalityAnalysis data) { var pkm = data.pkm; var enc = data.EncounterMatch; if (!IsPlayerOriginalTrainer(enc)) { return; // already verified } var ot = pkm.OT_Name; if (ot.Length == 0) { data.AddLine(GetInvalid(LOTShort)); } if (IsOTNameSuspicious(ot)) { data.AddLine(Get(LOTSuspicious, Severity.Fishy)); } if (pkm.VC) { VerifyOTG1(data); } else if (ot.Length > Legal.GetMaxLengthOT(data.Info.Generation, (LanguageID)pkm.Language)) { if (!IsEdgeCaseLength(pkm, data.EncounterOriginal, ot)) { data.AddLine(Get(LOTLong, Severity.Invalid)); } } if (ParseSettings.CheckWordFilter) { if (WordFilter.IsFiltered(ot, out string bad)) { data.AddLine(GetInvalid($"Wordfilter: {bad}")); } if (ContainsTooManyNumbers(ot, data.Info.Generation)) { data.AddLine(GetInvalid("Wordfilter: Too many numbers.")); } if (WordFilter.IsFiltered(pkm.HT_Name, out bad)) { data.AddLine(GetInvalid($"Wordfilter: {bad}")); } } }
public override void Verify(LegalityAnalysis data) { var pkm = data.pkm; switch (data.EncounterMatch) { case EncounterTrade _: case MysteryGift g when !g.IsEgg: case EncounterStatic5N _: return; // already verified } var ot = pkm.OT_Name; if (ot.Length == 0) { data.AddLine(GetInvalid(LOTShort)); } if (pkm.TID == 0 && pkm.SID == 0) { data.AddLine(Get(LOT_IDs0, Severity.Fishy)); } else if (pkm.VC) { if (pkm.SID != 0) { data.AddLine(GetInvalid(LOT_SID0Invalid)); } } else if (pkm.TID == pkm.SID) { data.AddLine(Get(LOT_IDEqual, Severity.Fishy)); } else if (pkm.TID == 0) { data.AddLine(Get(LOT_TID0, Severity.Fishy)); } else if (pkm.SID == 0) { data.AddLine(Get(LOT_SID0, Severity.Fishy)); } else if ((pkm.TID == 12345 && pkm.SID == 54321) || IsOTNameSuspicious(ot)) { data.AddLine(Get(LOTSuspicious, Severity.Fishy)); } if (pkm.VC) { VerifyOTG1(data); } else if (ot.Length > Legal.GetMaxLengthOT(data.Info.Generation, (LanguageID)pkm.Language)) { if (!IsEdgeCaseLength(pkm, data.EncounterOriginal, ot)) { data.AddLine(Get(LOTLong, Severity.Invalid)); } } if (ParseSettings.CheckWordFilter) { if (WordFilter.IsFiltered(ot, out string bad)) { data.AddLine(GetInvalid($"Wordfilter: {bad}")); } if (WordFilter.IsFiltered(pkm.HT_Name, out bad)) { data.AddLine(GetInvalid($"Wordfilter: {bad}")); } if (ContainsTooManyNumbers(ot, data.Info.Generation)) { data.AddLine(GetInvalid($"Wordfilter: Too many numbers.")); } } }
public override void Verify(LegalityAnalysis data) { var pkm = data.pkm; var EncounterMatch = data.EncounterOriginal; // If the Pokémon is not nicknamed, it should match one of the language strings. if (pkm.Nickname.Length == 0) { data.AddLine(GetInvalid(LNickLengthShort)); return; } if (pkm.Species > SpeciesName.SpeciesLang[0].Count) { data.AddLine(Get(LNickLengthShort, Severity.Indeterminate)); return; } if (pkm.VC && pkm.IsNicknamed) { VerifyG1NicknameWithinBounds(data, pkm.Nickname); } else if (EncounterMatch is MysteryGift m) { if (pkm.IsNicknamed && !m.IsEgg) { data.AddLine(Get(LEncGiftNicknamed, ParseSettings.NicknamedMysteryGift)); } } if (EncounterMatch is EncounterTrade t) { VerifyNicknameTrade(data, t); return; } if (pkm.IsEgg) { VerifyNicknameEgg(data); return; } string nickname = pkm.Nickname.Replace('\'', '’'); if (VerifyUnNicknamedEncounter(data, pkm, nickname)) { return; } // Non-nicknamed strings have already been checked. if (ParseSettings.CheckWordFilter && pkm.IsNicknamed) { if (WordFilter.IsFiltered(nickname, out string bad)) { data.AddLine(GetInvalid($"Wordfilter: {bad}")); } if (TrainerNameVerifier.ContainsTooManyNumbers(nickname, data.Info.Generation)) { data.AddLine(GetInvalid("Wordfilter: Too many numbers.")); } } }
public override void Verify(LegalityAnalysis data) { var pkm = data.pkm; switch (data.EncounterMatch) { case EncounterTrade _: case MysteryGift g when !g.IsEgg: case EncounterStaticPID s when s.NSparkle: return; // already verified } var ot = pkm.OT_Name; if (ot.Length == 0) { data.AddLine(GetInvalid(V106)); } if (pkm.TID == 0 && pkm.SID == 0) { data.AddLine(Get(V33, Severity.Fishy)); } else if (pkm.VC) { if (pkm.SID != 0) { data.AddLine(GetInvalid(V34)); } } else if (pkm.TID == pkm.SID) { data.AddLine(Get(V35, Severity.Fishy)); } else if (pkm.TID == 0) { data.AddLine(Get(V36, Severity.Fishy)); } else if (pkm.SID == 0) { data.AddLine(Get(V37, Severity.Fishy)); } else if (pkm.TID == 12345 && pkm.SID == 54321 || SuspiciousOTNames.Any(z => ot.StartsWith(z))) { data.AddLine(Get(V417, Severity.Fishy)); } if (pkm.VC) { VerifyOTG1(data); } if (Legal.CheckWordFilter) { if (WordFilter.IsFiltered(ot, out string bad)) { data.AddLine(GetInvalid($"Wordfilter: {bad}")); } if (WordFilter.IsFiltered(pkm.HT_Name, out bad)) { data.AddLine(GetInvalid($"Wordfilter: {bad}")); } } }
public override void Verify(LegalityAnalysis data) { var pkm = data.pkm; switch (data.EncounterMatch) { case EncounterTrade _: case MysteryGift g when !g.IsEgg: case EncounterStaticPID s when s.NSparkle: return; // already verified } var ot = pkm.OT_Name; if (ot.Length == 0) { data.AddLine(GetInvalid(LOTShort)); } if (pkm.TID == 0 && pkm.SID == 0) { data.AddLine(Get(LOT_IDs0, Severity.Fishy)); } else if (pkm.VC) { if (pkm.SID != 0) { data.AddLine(GetInvalid(LOT_SID0Invalid)); } } else if (pkm.TID == pkm.SID) { data.AddLine(Get(LOT_IDEqual, Severity.Fishy)); } else if (pkm.TID == 0) { data.AddLine(Get(LOT_TID0, Severity.Fishy)); } else if (pkm.SID == 0) { data.AddLine(Get(LOT_SID0, Severity.Fishy)); } else if ((pkm.TID == 12345 && pkm.SID == 54321) || IsOTNameSuspicious(ot)) { data.AddLine(Get(LOTSuspicious, Severity.Fishy)); } if (pkm.VC) { VerifyOTG1(data); } else if (ot.Length > Legal.GetNicknameOTMaxLength(data.Info.Generation, (LanguageID)pkm.Language)) { if (!pkm.IsEgg) // ignore eggs, on trade, OT is not updated if language is { data.AddLine(Get(LOTLong, data.EncounterOriginal.EggEncounter ? Severity.Fishy : Severity.Invalid)); } } if (Legal.CheckWordFilter) { if (WordFilter.IsFiltered(ot, out string bad)) { data.AddLine(GetInvalid($"Wordfilter: {bad}")); } if (WordFilter.IsFiltered(pkm.HT_Name, out bad)) { data.AddLine(GetInvalid($"Wordfilter: {bad}")); } } }