2
0
Fork 0
mirror of https://github.com/kwsch/PKHeX synced 2025-02-02 22:53:31 +00:00

Refactoring

Extract trainer pkm origin check to interface extension
This commit is contained in:
Kurt 2018-07-25 20:40:57 -07:00
parent 7d4309970c
commit 711157f3ea
2 changed files with 48 additions and 29 deletions
PKHeX.Core/Legality

View file

@ -33,6 +33,7 @@ namespace PKHeX.Core
public static string EReaderBerryDisplayName => string.Format(V372, Util.ToTitleCase(EReaderBerryName.ToLower())); public static string EReaderBerryDisplayName => string.Format(V372, Util.ToTitleCase(EReaderBerryName.ToLower()));
public static ITrainerInfo ActiveTrainer = new SimpleTrainerInfo {OT = string.Empty, Game = (int)GameVersion.Any, Language = -1}; public static ITrainerInfo ActiveTrainer = new SimpleTrainerInfo {OT = string.Empty, Game = (int)GameVersion.Any, Language = -1};
internal static bool IsNotFromActiveTrainer(PKM pkm) => !ActiveTrainer.IsFromTrainer(pkm);
// Gen 1 // Gen 1
internal static readonly Learnset[] LevelUpRB = Learnset1.GetArray(Util.GetBinaryResource("lvlmove_rb.pkl"), MaxSpeciesID_1); internal static readonly Learnset[] LevelUpRB = Learnset1.GetArray(Util.GetBinaryResource("lvlmove_rb.pkl"), MaxSpeciesID_1);
@ -1177,27 +1178,33 @@ namespace PKHeX.Core
} }
private static IEnumerable<int> GetEvoMoves(PKM pkm, GameVersion Version, IReadOnlyList<EvoCriteria> vs, int Generation, int minLvLG1, int minLvLG2, bool LVL, bool Tutor, bool Machine, bool MoveReminder, bool RemoveTransferHM, bool moveTutor, int i, EvoCriteria evo) private static IEnumerable<int> GetEvoMoves(PKM pkm, GameVersion Version, IReadOnlyList<EvoCriteria> vs, int Generation, int minLvLG1, int minLvLG2, bool LVL, bool Tutor, bool Machine, bool MoveReminder, bool RemoveTransferHM, bool moveTutor, int i, EvoCriteria evo)
{ {
var minlvlevo1 = 1; int minlvlevo1 = GetEvoMoveMinLevel1(pkm, Generation, minLvLG1, evo);
var minlvlevo2 = 1; int minlvlevo2 = GetEvoMoveMinLevel2(pkm, Generation, minLvLG2, evo);
if (Generation == 1)
{
// Return moves from minLvLG1 if species if the species encounters
// For evolutions return moves using evolution min level as min level
minlvlevo1 = minLvLG1;
if (evo.MinLevel > 1)
minlvlevo1 = Math.Min(pkm.CurrentLevel, evo.MinLevel);
}
if (Generation == 2 && !AllowGen2MoveReminder(pkm))
{
minlvlevo2 = minLvLG2;
if (evo.MinLevel > 1)
minlvlevo2 = Math.Min(pkm.CurrentLevel, evo.MinLevel);
}
var maxLevel = evo.Level; var maxLevel = evo.Level;
if (i != 0 && vs[i - 1].RequiresLvlUp) // evolution if (i != 0 && vs[i - 1].RequiresLvlUp) // evolution
++maxLevel; // allow lvlmoves from the level it evolved to the next species ++maxLevel; // allow lvlmoves from the level it evolved to the next species
return GetMoves(pkm, evo.Species, minlvlevo1, minlvlevo2, maxLevel, pkm.AltForm, moveTutor, Version, LVL, Tutor, Machine, MoveReminder, RemoveTransferHM, Generation); return GetMoves(pkm, evo.Species, minlvlevo1, minlvlevo2, maxLevel, pkm.AltForm, moveTutor, Version, LVL, Tutor, Machine, MoveReminder, RemoveTransferHM, Generation);
} }
private static int GetEvoMoveMinLevel1(PKM pkm, int Generation, int minLvLG1, EvoCriteria evo)
{
// Return moves from minLvLG1 if species if the species encounters
// For evolutions return moves using evolution min level as min level
if (Generation != 1)
return 1;
if (evo.MinLevel > 1)
return Math.Min(pkm.CurrentLevel, evo.MinLevel);
return minLvLG1;
}
private static int GetEvoMoveMinLevel2(PKM pkm, int Generation, int minLvLG2, EvoCriteria evo)
{
if (Generation != 2 || AllowGen2MoveReminder(pkm))
return 1;
if (evo.MinLevel > 1)
return Math.Min(pkm.CurrentLevel, evo.MinLevel);
return minLvLG2;
}
private static IEnumerable<int> GetMoves(PKM pkm, int species, int minlvlG1, int minlvlG2, int lvl, int form, bool moveTutor, GameVersion Version, bool LVL, bool specialTutors, bool Machine, bool MoveReminder, bool RemoveTransferHM, int Generation) private static IEnumerable<int> GetMoves(PKM pkm, int species, int minlvlG1, int minlvlG2, int lvl, int form, bool moveTutor, GameVersion Version, bool LVL, bool specialTutors, bool Machine, bool MoveReminder, bool RemoveTransferHM, int Generation)
{ {
List<int> r = new List<int>(); List<int> r = new List<int>();
@ -1240,19 +1247,6 @@ namespace PKHeX.Core
return false; return false;
} }
internal static bool IsNotFromActiveTrainer(PKM pkm)
{
if (ActiveTrainer.Game == (int)GameVersion.Any)
return false;
var Outsider = ActiveTrainer.TID != pkm.TID || ActiveTrainer.OT != pkm.OT_Name;
if (pkm.Format <= 2)
return Outsider;
Outsider |= ActiveTrainer.SID != pkm.SID;
if (pkm.Format == 3) // Generation 3 does not check ot gender nor pokemon version
return Outsider;
Outsider |= ActiveTrainer.Gender != pkm.OT_Gender || ActiveTrainer.Game != pkm.Version;
return Outsider;
}
internal const GameVersion NONE = GameVersion.Invalid; internal const GameVersion NONE = GameVersion.Invalid;
internal static readonly LearnVersion LearnNONE = new LearnVersion(-1); internal static readonly LearnVersion LearnNONE = new LearnVersion(-1);

View file

@ -51,5 +51,30 @@ namespace PKHeX.Core
((PK6)pk).TradeMemory(true); ((PK6)pk).TradeMemory(true);
} }
} }
public static bool IsFromTrainer(this ITrainerInfo tr, PKM pk)
{
if (tr.Game == (int)GameVersion.Any)
return true;
if (tr.TID != pk.TID)
return false;
if (tr.OT != pk.OT_Name)
return false;
if (pk.Format <= 2)
return false;
if (tr.SID != pk.SID)
return false;
if (pk.Format == 3)
return false;
if (tr.Gender != pk.OT_Gender)
return false;
if (tr.Game != pk.Version)
return false;
return true;
}
} }
} }