private bool VerifyUnNicknamedEncounter(LegalityAnalysis data, PKM pkm, string nickname) { if (pkm.IsNicknamed) { for (int i = 0; i < PKX.SpeciesLang.Length; i++) { if (!PKX.SpeciesDict[i].TryGetValue(nickname, out int index)) { continue; } var msg = index == pkm.Species && i != pkm.Language ? V15 : V16; data.AddLine(Get(msg, Severity.Fishy)); return(true); } if (StringConverter.HasEastAsianScriptCharacters(nickname)) // East Asian Scripts { data.AddLine(GetInvalid(V222)); return(true); } data.AddLine(GetValid(V17)); } else if (pkm.Format < 3) { // pk1/pk2 IsNicknamed getter checks for match, logic should only reach here if matches. data.AddLine(GetValid(V18)); } else { var EncounterMatch = data.EncounterMatch; // Can't have another language name if it hasn't evolved or wasn't a language-traded egg. bool evolved = EncounterMatch.Species != pkm.Species; bool match = PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, pkm.Format) == nickname; if (pkm.WasTradedEgg || evolved) { match |= !PKX.IsNicknamedAnyLanguage(pkm.Species, nickname, pkm.Format); } if (!match && pkm.Format == 5 && !pkm.IsNative) // transfer { if (evolved) { match |= !PKX.IsNicknamedAnyLanguage(pkm.Species, nickname, 4); } else { match |= PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, 4) == nickname; } } if (!match) { if (EncounterMatch is WC7 wc7 && wc7.IsAshGreninjaWC7(pkm)) { data.AddLine(GetValid(V19)); } else { data.AddLine(GetInvalid(V20)); } }
private void VerifyNicknameEgg(LegalityAnalysis data) { var Info = data.Info; var pkm = data.pkm; var EncounterMatch = Info.EncounterMatch; switch (pkm.Format) { case 4: if (pkm.IsNicknamed) // gen4 doesn't use the nickname flag for eggs { data.AddLine(GetInvalid(LNickFlagEggNo, CheckIdentifier.Egg)); } break; case 7: if (EncounterMatch is EncounterStatic ^ !pkm.IsNicknamed) // gen7 doesn't use for ingame gifts { data.AddLine(GetInvalid(pkm.IsNicknamed ? LNickFlagEggNo : LNickFlagEggYes, CheckIdentifier.Egg)); } break; default: if (!pkm.IsNicknamed) { data.AddLine(GetInvalid(LNickFlagEggYes, CheckIdentifier.Egg)); } break; } if (pkm.Format == 2 && pkm.IsEgg && !PKX.IsNicknamedAnyLanguage(0, pkm.Nickname, 2)) { data.AddLine(GetValid(LNickMatchLanguageEgg, CheckIdentifier.Egg)); } else if (PKX.GetSpeciesNameGeneration(0, pkm.Language, Info.Generation) != pkm.Nickname) { data.AddLine(GetInvalid(LNickMatchLanguageEggFail, CheckIdentifier.Egg)); } else { data.AddLine(GetValid(LNickMatchLanguageEgg, CheckIdentifier.Egg)); } }
private bool IsNicknameValid(PKM pkm, IEncounterable EncounterMatch, string nickname) { if (PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, pkm.Format) == nickname) { return(true); } // Can't have another language name if it hasn't evolved or wasn't a language-traded egg. bool evolved = EncounterMatch.Species != pkm.Species; bool canHaveAnyLanguage = evolved || pkm.WasTradedEgg; if (canHaveAnyLanguage && !PKX.IsNicknamedAnyLanguage(pkm.Species, nickname, pkm.Format)) { return(true); } switch (EncounterMatch) { case WC7 wc7 when wc7.IsAshGreninjaWC7(pkm): return(true); case ILangNick loc: if (loc.Language != 0 && !loc.IsNicknamed && !PKX.IsNicknamedAnyLanguage(pkm.Species, nickname, pkm.Format)) { return(true); // fixed language without nickname, nice job event maker! } break; } if (pkm.Format == 5 && !pkm.IsNative) // transfer { if (canHaveAnyLanguage) { return(!PKX.IsNicknamedAnyLanguage(pkm.Species, nickname, 4)); } return(PKX.GetSpeciesNameGeneration(pkm.Species, pkm.Language, 4) == nickname); } return(false); }