mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-08-20 03:05:34 -05:00
@@ -102,14 +102,14 @@ public static void SetMasteredFlag(this IMoveShop8Mastery shop, Learnset learn,
|
||||
if (shop.GetMasteredRecordFlag(index))
|
||||
return;
|
||||
|
||||
if (level < (uint)learn.GetLevelLearnMove(move)) // Can't learn it yet; must purchase.
|
||||
if (learn.TryGetLevelLearnMove(move, out var learnLevel) && level < learnLevel) // Can't learn it yet; must purchase.
|
||||
{
|
||||
shop.SetPurchasedRecordFlag(index, true);
|
||||
shop.SetMasteredRecordFlag(index, true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (level < (uint)mastery.GetLevelLearnMove(move)) // Can't master it yet; must Seed of Mastery
|
||||
if (mastery.TryGetLevelLearnMove(move, out var masterLevel) && level < masterLevel) // Can't master it yet; must Seed of Mastery
|
||||
shop.SetMasteredRecordFlag(index, true);
|
||||
}
|
||||
|
||||
@@ -131,8 +131,8 @@ public static void SetEncounterMasteryFlags(this IMoveShop8Mastery shop, ReadOnl
|
||||
// If the Pokémon is caught with any move shop move in its learnset,
|
||||
// and it is high enough level to master it, the game will automatically
|
||||
// give it the "Mastered" flag but not the "Purchased" flag
|
||||
// For moves that are not in the learnset, it returns -1 which is true, thus set as mastered.
|
||||
if (level >= mastery.GetLevelLearnMove(move))
|
||||
// For moves that are not in the learnset, set as mastered.
|
||||
if (!mastery.TryGetLevelLearnMove(move, out var masteryLevel) || level >= masteryLevel)
|
||||
shop.SetMasteredRecordFlag(index, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -256,34 +256,32 @@ public byte GetGender(Gender gender, IGenderDetail pkPersonalInfo)
|
||||
/// <summary>
|
||||
/// Gets the gender to generate, random if unspecified.
|
||||
/// </summary>
|
||||
public byte GetGender(IGenderDetail pkPersonalInfo)
|
||||
public byte GetGender(IGenderDetail info)
|
||||
{
|
||||
if (!pkPersonalInfo.IsDualGender)
|
||||
return pkPersonalInfo.FixedGender();
|
||||
if (pkPersonalInfo.Genderless)
|
||||
if (!info.IsDualGender)
|
||||
return info.FixedGender();
|
||||
if (info.Genderless)
|
||||
return 2;
|
||||
if (Gender is not Gender.Random)
|
||||
return (byte)Gender;
|
||||
return pkPersonalInfo.RandomGender();
|
||||
return info.RandomGender();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a random ability index (0/1/2) to generate, based off an encounter's <see cref="num"/>.
|
||||
/// Gets a random ability index (0/1/2) to generate, based off an encounter's <see cref="encounter"/>.
|
||||
/// </summary>
|
||||
public int GetAbilityFromNumber(AbilityPermission num)
|
||||
public int GetAbilityFromNumber(AbilityPermission encounter)
|
||||
{
|
||||
if (num.IsSingleValue(out int index)) // fixed number
|
||||
if (encounter.IsSingleValue(out int index)) // fixed number
|
||||
return index;
|
||||
|
||||
bool canBeHidden = num.CanBeHidden();
|
||||
return GetAbilityIndexPreference(canBeHidden);
|
||||
return GetAbilityIndexPreference(encounter);
|
||||
}
|
||||
|
||||
private int GetAbilityIndexPreference(bool canBeHidden = false) => Ability switch
|
||||
private int GetAbilityIndexPreference(AbilityPermission perm) => Ability switch
|
||||
{
|
||||
OnlyFirst => 0,
|
||||
OnlySecond => 1,
|
||||
OnlyHidden or Any12H when canBeHidden => 2, // hidden allowed
|
||||
OnlyHidden or Any12H when perm.CanBeHidden() => 2, // hidden allowed
|
||||
_ => Util.Rand.Next(2),
|
||||
};
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace PKHeX.Core;
|
||||
|
||||
public bool RequiresLvlUp => LevelUpRequired != 0;
|
||||
|
||||
public bool InsideLevelRange(int level) => LevelMin <= level && level <= LevelMax;
|
||||
public bool InsideLevelRange(byte level) => LevelMin <= level && level <= LevelMax;
|
||||
|
||||
public override string ToString() => $"{(Species) Species}{(Form != 0 ? $"-{Form}" : "")}}} [{LevelMin},{LevelMax}] via {Method}";
|
||||
|
||||
|
||||
@@ -55,11 +55,12 @@ private static void CheckNincadaMoves(Span<MoveResult> result, ReadOnlySpan<usho
|
||||
if (move == 0)
|
||||
break;
|
||||
|
||||
var level = moves.GetLevelLearnMove(move);
|
||||
if (level == -1 || !nincada.InsideLevelRange(level))
|
||||
if (!moves.TryGetLevelLearnMove(move, out var level))
|
||||
continue;
|
||||
if (!nincada.InsideLevelRange(level))
|
||||
continue;
|
||||
|
||||
var info = new MoveLearnInfo(LearnMethod.ShedinjaEvo, LearnEnvironment.E, (byte)level);
|
||||
var info = new MoveLearnInfo(LearnMethod.ShedinjaEvo, LearnEnvironment.E, level);
|
||||
result[i] = new MoveResult(info, 0, Generation);
|
||||
break; // Can only have one Ninjask move.
|
||||
}
|
||||
|
||||
@@ -47,11 +47,12 @@ private static void CheckNincadaMoves(Span<MoveResult> result, ReadOnlySpan<usho
|
||||
if (move == 0)
|
||||
break;
|
||||
|
||||
var level = moves.GetLevelLearnMove(move);
|
||||
if (level == -1 || !nincada.InsideLevelRange(level))
|
||||
if (!moves.TryGetLevelLearnMove(move, out var level))
|
||||
continue;
|
||||
if (!nincada.InsideLevelRange(level))
|
||||
continue;
|
||||
|
||||
var info = new MoveLearnInfo(LearnMethod.ShedinjaEvo, LearnEnvironment.Pt, (byte)level);
|
||||
var info = new MoveLearnInfo(LearnMethod.ShedinjaEvo, LearnEnvironment.Pt, level);
|
||||
result[i] = new MoveResult(info, 0, Generation);
|
||||
break; // Can only have one Ninjask move.
|
||||
}
|
||||
|
||||
@@ -46,9 +46,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo1 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = Learnsets[evo.Species];
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && evo.InsideLevelRange(level))
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && evo.InsideLevelRange(level))
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
return default;
|
||||
|
||||
@@ -46,9 +46,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo1 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = Learnsets[evo.Species];
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && evo.InsideLevelRange(level))
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && evo.InsideLevelRange(level))
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
return default;
|
||||
|
||||
@@ -62,9 +62,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo2 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && evo.InsideLevelRange(level))
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && evo.InsideLevelRange(level))
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
return default;
|
||||
|
||||
@@ -85,13 +85,12 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo2 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = Learnsets[evo.Species];
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1)
|
||||
if (learn.TryGetLevelLearnMove(move, out var level))
|
||||
{
|
||||
if (evo.InsideLevelRange(level))
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
return new(LevelUp, Game, level);
|
||||
if (level == 1 && types.HasFlag(MoveSourceType.Evolve)) // Evolution
|
||||
return new(Evolution, Game, (byte)level);
|
||||
return new(Evolution, Game, level);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -53,9 +53,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo3 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine))
|
||||
|
||||
@@ -53,9 +53,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo3 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine))
|
||||
|
||||
@@ -53,9 +53,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo3 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine))
|
||||
|
||||
@@ -52,9 +52,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo3 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine))
|
||||
|
||||
@@ -52,9 +52,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo4 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine))
|
||||
|
||||
@@ -52,9 +52,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo4 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine))
|
||||
|
||||
@@ -51,9 +51,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo4 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine))
|
||||
|
||||
@@ -50,9 +50,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo5B2W2 pi, EvoCriteria evo,
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine) && GetIsTM(pi, move))
|
||||
|
||||
@@ -50,9 +50,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo5BW pi, EvoCriteria evo, us
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine) && GetIsTM(pi, move))
|
||||
|
||||
@@ -50,9 +50,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo6AO pi, EvoCriteria evo, us
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine) && GetIsTM(pi, move))
|
||||
|
||||
@@ -50,9 +50,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo6XY pi, EvoCriteria evo, us
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine) && pi.GetIsLearnTM(MachineMoves.IndexOf(move)))
|
||||
|
||||
@@ -35,9 +35,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo7GG pi, EvoCriteria evo, us
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1) // Can relearn at any level!
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level)) // Can relearn at any level!
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine) && pi.GetIsLearnTM(MachineMoves.IndexOf(move)))
|
||||
|
||||
@@ -52,9 +52,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo7 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1) // Can relearn at any level!
|
||||
return new(LevelUp, Game, 1);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level)) // Can relearn at any level!
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine) && pi.GetIsLearnTM(MachineMoves.IndexOf(move)))
|
||||
|
||||
@@ -52,9 +52,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo7 pi, EvoCriteria evo, usho
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1) // Can relearn at any level!
|
||||
return new(LevelUp, Game, 1);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level)) // Can relearn at any level!
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine) && pi.GetIsLearnTM(MachineMoves.IndexOf(move)))
|
||||
|
||||
@@ -53,9 +53,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo8BDSP pi, EvoCriteria evo,
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.SharedEggMove) && GetIsSharedEggMove(pi, move))
|
||||
@@ -138,9 +137,8 @@ public MoveLearnInfo GetCanLearnHOME(PKM pk, EvoCriteria evo, ushort move, MoveS
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level))
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.SharedEggMove) && GetIsSharedEggMove(pi, move))
|
||||
|
||||
@@ -42,9 +42,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo8LA pi, EvoCriteria evo, us
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine) && pi.GetIsLearnMoveShop(move))
|
||||
@@ -102,9 +101,8 @@ public MoveLearnInfo GetCanLearnHOME(PKM pk, EvoCriteria evo, ushort move, MoveS
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level))
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.Machine) && pi.GetIsLearnMoveShop(move))
|
||||
|
||||
@@ -48,9 +48,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo8SWSH pi, EvoCriteria evo,
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.SharedEggMove) && GetIsSharedEggMove(pi, move))
|
||||
@@ -188,9 +187,8 @@ public MoveLearnInfo GetCanLearnHOME(PKM pk, EvoCriteria evo, ushort move, MoveS
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level))
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.SharedEggMove) && GetIsSharedEggMove(pi, move))
|
||||
|
||||
@@ -68,9 +68,8 @@ public MoveLearnInfo GetCanLearn(PKM pk, PersonalInfo9SV pi, EvoCriteria evo, us
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1 && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level) && level <= evo.LevelMax)
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.SharedEggMove) && GetIsSharedEggMove(pi, move))
|
||||
@@ -205,9 +204,8 @@ public MoveLearnInfo GetCanLearnHOME(PKM pk, EvoCriteria evo, ushort move, MoveS
|
||||
if (types.HasFlag(MoveSourceType.LevelUp))
|
||||
{
|
||||
var learn = GetLearnset(evo.Species, evo.Form);
|
||||
var level = learn.GetLevelLearnMove(move);
|
||||
if (level != -1)
|
||||
return new(LevelUp, Game, (byte)level);
|
||||
if (learn.TryGetLevelLearnMove(move, out var level))
|
||||
return new(LevelUp, Game, level);
|
||||
}
|
||||
|
||||
if (types.HasFlag(MoveSourceType.SharedEggMove) && GetIsSharedEggMove(pi, move))
|
||||
|
||||
@@ -221,15 +221,22 @@ public void SetEvolutionMoves(Span<ushort> moves, ReadOnlySpan<ushort> ignore, i
|
||||
/// <param name="move">Move ID</param>
|
||||
public bool GetIsLearn(ushort move) => Moves.AsSpan().Contains(move);
|
||||
|
||||
/// <summary>Returns the level that a Pokémon can learn the specified move.</summary>
|
||||
/// <summary>
|
||||
/// Checks if the specified move is learned by level up.
|
||||
/// </summary>
|
||||
/// <param name="move">Move ID</param>
|
||||
/// <returns>Level the move is learned at. If the result is below 0, the move cannot be learned by leveling up.</returns>
|
||||
public int GetLevelLearnMove(ushort move)
|
||||
/// <param name="level">Level at which the move is learned</param>
|
||||
/// <returns>True if the move is learned by level up, false otherwise.</returns>
|
||||
public bool TryGetLevelLearnMove(ushort move, out byte level)
|
||||
{
|
||||
var index = Array.IndexOf(Moves, move);
|
||||
if (index == -1)
|
||||
return -1;
|
||||
return Levels[index];
|
||||
{
|
||||
level = 0;
|
||||
return false;
|
||||
}
|
||||
level = Levels[index];
|
||||
return true;
|
||||
}
|
||||
|
||||
public ReadOnlySpan<ushort> GetBaseEggMoves(byte level)
|
||||
|
||||
@@ -154,9 +154,8 @@ private static int AddMasteredMissing(PA8 pa, Span<ushort> current, int ctr, Lea
|
||||
|
||||
// Check if we can swap it into the moveset after it evolves.
|
||||
var move = purchased[i];
|
||||
var baseLevel = baseLearn.GetLevelLearnMove(move);
|
||||
var mustKnow = baseLevel is not -1 && baseLevel <= pa.MetLevel;
|
||||
if (!mustKnow && currentLearn.GetLevelLearnMove(move) != level)
|
||||
var mustKnow = baseLearn.TryGetLevelLearnMove(move, out var baseLevel) && baseLevel <= pa.MetLevel;
|
||||
if (!mustKnow && currentLearn.TryGetLevelLearnMove(move, out var c2) && c2 != level)
|
||||
continue;
|
||||
|
||||
if (!current.Contains(move))
|
||||
@@ -229,8 +228,7 @@ private static bool CanLearnMoveByLevelUp(LegalityAnalysis data, PA8 pa, int i,
|
||||
foreach (var evo in data.Info.EvoChainsAllGens.Gen8a)
|
||||
{
|
||||
var moveset = LearnSource8LA.Instance.GetLearnset(evo.Species, evo.Form);
|
||||
var lvl = moveset.GetLevelLearnMove(moves[i]);
|
||||
if (lvl == -1)
|
||||
if (!moveset.TryGetLevelLearnMove(moves[i], out var lvl))
|
||||
continue; // cannot learn via level up
|
||||
level = Math.Min(lvl, level);
|
||||
}
|
||||
|
||||
@@ -76,8 +76,9 @@ public static bool IsValidPurchasedEncounter(this IMoveShop8 shop, Learnset lear
|
||||
var move = permit[i];
|
||||
|
||||
// Can only purchase a move if it is not already in the available learnset.
|
||||
var learnLevel = learn.GetLevelLearnMove(move);
|
||||
if ((uint)learnLevel <= level)
|
||||
if (!learn.TryGetLevelLearnMove(move, out var learnLevel))
|
||||
return false;
|
||||
if (learnLevel <= level)
|
||||
return false;
|
||||
|
||||
// Can only purchase an Alpha Move if it was pre-1.1 patch.
|
||||
@@ -101,15 +102,14 @@ public static bool IsValidMasteredEncounter(this IMoveShop8Mastery shop, Span<us
|
||||
bool purchased = shop.GetPurchasedRecordFlag(index);
|
||||
bool mastered = shop.GetMasteredRecordFlag(index);
|
||||
|
||||
var masteryLevel = mastery.GetLevelLearnMove(move);
|
||||
if (masteryLevel > metLevel && move != alphaMove) // no master flag set
|
||||
if (mastery.TryGetLevelLearnMove(move, out var masteryLevel) && masteryLevel > metLevel && move != alphaMove)
|
||||
{
|
||||
if (!mastered)
|
||||
continue;
|
||||
if (purchased)
|
||||
continue;
|
||||
// Check for seed of mastery usage
|
||||
if (learn.GetLevelLearnMove(move) > metLevel)
|
||||
if (learn.TryGetLevelLearnMove(move, out var learnLevel) && learnLevel > metLevel)
|
||||
return false;
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user