using System; using System.Globalization; namespace PKHeX.Core { /// /// Modifications using legality. /// internal static class BatchModifications { private static bool IsAll(string p) => p.EndsWith("All", true, CultureInfo.CurrentCulture); private static bool IsNone(string p) => p.EndsWith("None", true, CultureInfo.CurrentCulture); public static ModifyResult SetSuggestedRelearnData(BatchInfo info, string propValue) { var pk = info.Entity; if (pk is ITechRecord8 t) { t.ClearRecordFlags(); if (IsAll(propValue)) t.SetRecordFlags(); // all else if (!IsNone(propValue)) t.SetRecordFlags(pk.Moves); // whatever fit the current moves } pk.SetRelearnMoves(info.SuggestedRelearn); return ModifyResult.Modified; } public static ModifyResult SetSuggestedMasteryData(BatchInfo info, string propValue) { var pk = info.Entity; if (pk is IMoveShop8Mastery t) { if (IsAll(propValue)) { t.SetMoveShopFlags(); t.SetMoveShopFlagsMastered(); } else if (!IsNone(propValue)) { // whatever fit the current moves t.SetMoveShopFlags(pk.Moves); t.SetMoveShopFlagsMastered(); } else { t.ClearMoveShopFlags(); } return ModifyResult.Modified; } return ModifyResult.Invalid; } public static ModifyResult SetSuggestedRibbons(BatchInfo info, string value) { var pk = info.Entity; if (IsNone(value)) RibbonApplicator.RemoveAllValidRibbons(pk); else // All RibbonApplicator.SetAllValidRibbons(pk); return ModifyResult.Modified; } public static ModifyResult SetSuggestedMetData(BatchInfo info) { var pk = info.Entity; var encounter = EncounterSuggestion.GetSuggestedMetInfo(pk); if (encounter == null) return ModifyResult.Error; int level = encounter.LevelMin; int location = encounter.Location; int minimumLevel = EncounterSuggestion.GetLowestLevel(pk, encounter.LevelMin); pk.Met_Level = level; pk.Met_Location = location; pk.CurrentLevel = Math.Max(minimumLevel, level); return ModifyResult.Modified; } /// /// Sets the provided moves in a random order. /// /// Pokémon to modify. /// Moves to apply. public static ModifyResult SetMoves(PKM pk, int[] moves) { pk.SetMoves(moves); pk.HealPP(); return ModifyResult.Modified; } /// /// Sets the contests stats as requested. /// /// Pokémon to modify. /// Encounter matched to. /// Option to apply with public static ModifyResult SetContestStats(PKM pk, IEncounterTemplate enc, string option) { if (option.Length != 0 && option[BatchEditing.CONST_SUGGEST.Length..] is not "0") pk.SetMaxContestStats(enc); else pk.SetSuggestedContestStats(enc); return ModifyResult.Modified; } } }