PKHeX/PKHeX.Core/Editing/Bulk/Suggestion/BatchModifications.cs
2021-12-20 19:16:23 -08:00

85 lines
2.9 KiB
C#

using System;
using System.Globalization;
namespace PKHeX.Core
{
/// <summary>
/// Modifications using <see cref="BatchInfo"/> legality.
/// </summary>
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.Format >= 8)
{
pk.ClearRecordFlags();
if (IsAll(propValue))
pk.SetRecordFlags(); // all
else if (!IsNone(propValue))
pk.SetRecordFlags(pk.Moves); // whatever fit the current moves
}
pk.SetRelearnMoves(info.SuggestedRelearn);
return ModifyResult.Modified;
}
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;
}
/// <summary>
/// Sets the provided moves in a random order.
/// </summary>
/// <param name="pk">Pokémon to modify.</param>
/// <param name="moves">Moves to apply.</param>
public static ModifyResult SetMoves(PKM pk, int[] moves)
{
pk.SetMoves(moves);
pk.HealPP();
return ModifyResult.Modified;
}
/// <summary>
/// Sets the contests stats as requested.
/// </summary>
/// <param name="pk">Pokémon to modify.</param>
/// <param name="enc">Encounter matched to.</param>
/// <param name="option">Option to apply with</param>
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;
}
}
}