mirror of
https://github.com/kwsch/PKHeX
synced 2025-02-17 05:48:44 +00:00
Change gen1/2 encounter preference
Previous approach was 'most likely to find valid', this approach is a little greedier to try to find a more fitting match. Will result in a small increase in computation time, but trying out EncounterTrades and static encounters first is preferred. Fix Rhydon ingame trade gender. Bulbapedia is wrong, that's a Male Rhydon with those IVs.
This commit is contained in:
parent
8a4c40908b
commit
7b874757f7
3 changed files with 49 additions and 22 deletions
|
@ -92,6 +92,10 @@ namespace PKHeX.Core
|
|||
HashSet<int> species = new HashSet<int>(vs.Select(p => p.Species).ToList());
|
||||
|
||||
var deferred = new List<IEncounterable>();
|
||||
foreach (var t in getValidEncounterTrade(pkm, game))
|
||||
{
|
||||
yield return new GBEncounterData(pkm, gen, t, game);
|
||||
}
|
||||
foreach (var s in getValidStaticEncounter(pkm, game))
|
||||
{
|
||||
// Valid stadium and non-stadium encounters, return only non-stadium encounters, they are less restrictive
|
||||
|
@ -104,17 +108,12 @@ namespace PKHeX.Core
|
|||
}
|
||||
yield return new GBEncounterData(pkm, gen, s, game);
|
||||
}
|
||||
|
||||
foreach (var e in getValidWildEncounters(pkm, game))
|
||||
{
|
||||
if (!species.Contains(e.Species))
|
||||
continue;
|
||||
yield return new GBEncounterData(pkm, gen, e, game);
|
||||
}
|
||||
foreach (var t in getValidEncounterTrade(pkm, game))
|
||||
{
|
||||
yield return new GBEncounterData(pkm, gen, t, game);
|
||||
}
|
||||
|
||||
if (game == GameVersion.GSC)
|
||||
{
|
||||
|
@ -142,18 +141,46 @@ namespace PKHeX.Core
|
|||
}
|
||||
private static IEnumerable<GBEncounterData> GenerateFilteredEncounters(PKM pkm)
|
||||
{
|
||||
IEnumerable<GBEncounterData> filter(IEnumerable<GBEncounterData> data) => data
|
||||
.OrderBy(z => !(z.Encounter is EncounterTrade && z.Generation == 2) || z.Type == GBEncounterType.EggEncounter)
|
||||
.ThenBy(z => z.Species).ThenBy(z => z.Level);
|
||||
|
||||
bool crystal = pkm.Format == 2 && pkm.Met_Location != 0;
|
||||
if (!pkm.Gen2_NotTradeback && !crystal)
|
||||
foreach (var z in filter(GenerateRawEncounters12(pkm, GameVersion.RBY)))
|
||||
yield return z;
|
||||
var g1i = new PeekEnumerator<GBEncounterData>(get1().GetEnumerator());
|
||||
var g2i = new PeekEnumerator<GBEncounterData>(get2().GetEnumerator());
|
||||
var deferred = new List<GBEncounterData>();
|
||||
while (g2i.PeekIsNext() || g1i.PeekIsNext())
|
||||
{
|
||||
PeekEnumerator<GBEncounterData> move;
|
||||
if (g1i.PeekIsNext())
|
||||
{
|
||||
if (g2i.PeekIsNext())
|
||||
move = g1i.Peek().Type > g2i.Peek().Type ? g1i : g2i;
|
||||
else
|
||||
move = g1i;
|
||||
}
|
||||
else
|
||||
move = g2i;
|
||||
|
||||
if (!pkm.Gen1_NotTradeback && AllowGen2VCTransfer)
|
||||
foreach (var z in filter(GenerateRawEncounters12(pkm, crystal ? GameVersion.C : GameVersion.GSC)))
|
||||
yield return z;
|
||||
var obj = move.Peek();
|
||||
if (obj.Generation == 1 && obj.Encounter is EncounterTrade && !getEncounterTrade1Valid(pkm))
|
||||
deferred.Add(obj);
|
||||
else
|
||||
yield return obj;
|
||||
|
||||
move.MoveNext();
|
||||
}
|
||||
foreach (var z in deferred)
|
||||
yield return z;
|
||||
|
||||
IEnumerable<GBEncounterData> get1()
|
||||
{
|
||||
if (!pkm.Gen2_NotTradeback && !crystal)
|
||||
foreach (var z in GenerateRawEncounters12(pkm, GameVersion.RBY))
|
||||
yield return z;
|
||||
}
|
||||
IEnumerable<GBEncounterData> get2()
|
||||
{
|
||||
if (!pkm.Gen1_NotTradeback && AllowGen2VCTransfer)
|
||||
foreach (var z in GenerateRawEncounters12(pkm, crystal ? GameVersion.C : GameVersion.GSC))
|
||||
yield return z;
|
||||
}
|
||||
}
|
||||
private static IEnumerable<IEncounterable> GenerateRawEncounters(PKM pkm)
|
||||
{
|
||||
|
|
|
@ -4,12 +4,12 @@ namespace PKHeX.Core
|
|||
{
|
||||
public enum GBEncounterType
|
||||
{
|
||||
TradeEncounterG1 = 1,
|
||||
StaticEncounter = 3,
|
||||
WildEncounter = 2,
|
||||
EggEncounter = 9,
|
||||
TradeEncounterG2 = 10,
|
||||
SpecialEncounter = 20,
|
||||
EggEncounter,
|
||||
WildEncounter,
|
||||
StaticEncounter,
|
||||
SpecialEncounter,
|
||||
TradeEncounterG1,
|
||||
TradeEncounterG2,
|
||||
}
|
||||
|
||||
public class GBEncounterData : IEncounterable
|
||||
|
|
|
@ -125,7 +125,7 @@ namespace PKHeX.Core
|
|||
new EncounterTrade { Species = 095, Generation = 2, Level = 03, Gender = 0, Location = 06, TID = 48926, IVs = new[] {08, 09, 06, 06, 06, 06} }, // Onix @ Violet City for Bellsprout [wild]
|
||||
new EncounterTrade { Species = 066, Generation = 2, Level = 05, Gender = 1, Location = 16, TID = 37460, IVs = new[] {12, 03, 07, 06, 06, 06} }, // Machop @ Goldenrod City for Drowzee [wild 9, hatched egg 5]
|
||||
new EncounterTrade { Species = 100, Generation = 2, Level = 05, Gender = 2, Location = 27, TID = 29189, IVs = new[] {08, 09, 08, 08, 08, 08} }, // Voltorb @ Olivine City for Krabby [egg]
|
||||
new EncounterTrade { Species = 112, Generation = 2, Level = 30, Gender = 1, Location = 41, TID = 00283, IVs = new[] {12, 07, 07, 06, 06, 06} }, // Rhydon @ Blackthorn City for Dragonair [blue jp game corner]
|
||||
new EncounterTrade { Species = 112, Generation = 2, Level = 30, Gender = 0, Location = 41, TID = 00283, IVs = new[] {12, 07, 07, 06, 06, 06} }, // Rhydon @ Blackthorn City for Dragonair [blue jp game corner]
|
||||
new EncounterTrade { Species = 142, Generation = 2, Level = 05, Gender = 0, Location = 76, TID = 26491, IVs = new[] {08, 09, 06, 06, 06, 06} }, // Aerodactyl @ Route 14 for Chansey [egg]
|
||||
new EncounterTrade { Species = 078, Generation = 2, Level = 14, Gender = 0, Location = 51, TID = 15616, IVs = new[] {08, 09, 06, 06, 06, 06} }, // Rapidash @ Pewter City for Gloom [wild]
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue