mirror of
https://github.com/kwsch/PKHeX
synced 2025-02-17 05:48:44 +00:00
Defer curry mark static encounters, flag as invalid
Closes #3001 as all marks that can be checked are checked. Promote trades above static encounters, as it's just met location.
This commit is contained in:
parent
927c83d660
commit
ebb4e2a56a
4 changed files with 51 additions and 27 deletions
|
@ -57,12 +57,16 @@ namespace PKHeX.Core
|
|||
|
||||
public override EncounterMatchRating GetMatchRating(PKM pkm)
|
||||
{
|
||||
var rating = base.GetMatchRating(pkm);
|
||||
if (rating != EncounterMatchRating.Match)
|
||||
return rating;
|
||||
|
||||
var req = GetRequirement(pkm);
|
||||
return req switch
|
||||
{
|
||||
MustHave when !IsOverworldCorrelationCorrect(pkm) => EncounterMatchRating.Deferred,
|
||||
MustNotHave when IsOverworldCorrelationCorrect(pkm) => EncounterMatchRating.Deferred,
|
||||
_ => base.GetMatchRating(pkm),
|
||||
_ => EncounterMatchRating.Match,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,11 +74,19 @@ namespace PKHeX.Core
|
|||
|
||||
public override EncounterMatchRating GetMatchRating(PKM pkm)
|
||||
{
|
||||
var rating = base.GetMatchRating(pkm);
|
||||
if (rating != EncounterMatchRating.Match)
|
||||
return rating;
|
||||
|
||||
var req = GetRequirement(pkm);
|
||||
bool correlation = IsOverworldCorrelationCorrect(pkm);
|
||||
if ((req == MustHave) != correlation)
|
||||
return EncounterMatchRating.Deferred;
|
||||
return base.GetMatchRating(pkm);
|
||||
|
||||
if (pkm is IRibbonSetMark8 {RibbonMarkCurry: true})
|
||||
return EncounterMatchRating.Deferred;
|
||||
|
||||
return EncounterMatchRating.Match;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,6 @@ namespace PKHeX.Core
|
|||
|
||||
private static IEnumerable<IEncounterable> GetEncountersMainline(PKM pkm, IReadOnlyList<EvoCriteria> chain)
|
||||
{
|
||||
// Static Encounters can collide with wild encounters (close match); don't break if a Static Encounter is yielded.
|
||||
int ctr = 0;
|
||||
if (pkm.WasEvent || pkm.WasEventEgg)
|
||||
{
|
||||
|
@ -42,36 +41,50 @@ namespace PKHeX.Core
|
|||
IEncounterable? deferred = null;
|
||||
IEncounterable? partial = null;
|
||||
|
||||
// Trades
|
||||
if (pkm.Met_Location == Locations.LinkTrade6NPC)
|
||||
{
|
||||
foreach (var z in GetValidEncounterTrades(pkm, chain))
|
||||
{
|
||||
var match = z.GetMatchRating(pkm);
|
||||
switch (match)
|
||||
{
|
||||
case Match: yield return z; ++ctr; break;
|
||||
case Deferred: deferred ??= z; break;
|
||||
case PartialMatch: partial ??= z; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctr != 0)
|
||||
{
|
||||
if (deferred != null)
|
||||
yield return deferred;
|
||||
|
||||
if (partial != null)
|
||||
yield return partial;
|
||||
}
|
||||
|
||||
yield break;
|
||||
}
|
||||
|
||||
// Static Encounters can collide with wild encounters (close match); don't break if a Static Encounter is yielded.
|
||||
foreach (var z in GetValidStaticEncounter(pkm, chain))
|
||||
{
|
||||
var match = z.GetMatchRating(pkm);
|
||||
switch (match)
|
||||
{
|
||||
case Match: yield return z; ++ctr; break;
|
||||
case Match: yield return z; break;
|
||||
case Deferred: deferred ??= z; break;
|
||||
case PartialMatch: partial ??= z; break;
|
||||
}
|
||||
}
|
||||
|
||||
// if (ctr != 0) yield break;
|
||||
foreach (var z in GetValidWildEncounters(pkm, chain))
|
||||
{
|
||||
var match = z.GetMatchRating(pkm);
|
||||
switch (match)
|
||||
{
|
||||
case Match: yield return z; ++ctr; break;
|
||||
case Deferred: deferred ??= z; break;
|
||||
case PartialMatch: partial ??= z; break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ctr != 0) yield break;
|
||||
foreach (var z in GetValidEncounterTrades(pkm, chain))
|
||||
{
|
||||
var match = z.GetMatchRating(pkm);
|
||||
switch (match)
|
||||
{
|
||||
case Match: yield return z; /*++ctr*/ break;
|
||||
case Match: yield return z; break;
|
||||
case Deferred: deferred ??= z; break;
|
||||
case PartialMatch: partial ??= z; break;
|
||||
}
|
||||
|
|
|
@ -63,9 +63,9 @@ namespace PKHeX.Core
|
|||
return IsMarkAllowedAny(enc) && IsMarkAllowedSpecific(mark, pk, enc);
|
||||
}
|
||||
|
||||
public static bool IsMarkAllowedSpecific(RibbonIndex mark, PKM pk, IEncounterable _) => mark switch
|
||||
public static bool IsMarkAllowedSpecific(RibbonIndex mark, PKM pk, IEncounterable x) => mark switch
|
||||
{
|
||||
RibbonIndex.MarkCurry when !IsMarkAllowedCurry(pk) => false,
|
||||
RibbonIndex.MarkCurry when !IsMarkAllowedCurry(pk, x) => false,
|
||||
RibbonIndex.MarkDestiny => false,
|
||||
_ => true
|
||||
};
|
||||
|
@ -81,16 +81,15 @@ namespace PKHeX.Core
|
|||
_ => true,
|
||||
};
|
||||
|
||||
public static bool IsMarkAllowedCurry(ILocation enc, int ball = (int)Ball.Poke) => IsMarkAllowedCurry(enc.Location, ball);
|
||||
public static bool IsMarkAllowedCurry(PKM pkm) => IsMarkAllowedCurry(pkm.Met_Location, pkm.Ball);
|
||||
|
||||
public static bool IsMarkAllowedCurry(int met, int ball)
|
||||
public static bool IsMarkAllowedCurry(PKM pkm, IEncounterable enc)
|
||||
{
|
||||
if (EncounterArea8.IsWildArea(met))
|
||||
if (enc is not EncounterSlot8 s || !((EncounterArea8)s.Area).PermitCrossover)
|
||||
return false;
|
||||
if ((uint) (ball - 2) > 2) // Poke,Great,Ultra only
|
||||
|
||||
if (!EncounterArea8.IsWildArea(s.Location))
|
||||
return false;
|
||||
return true;
|
||||
var ball = pkm.Ball;
|
||||
return (uint)(ball - 2) <= 2;
|
||||
}
|
||||
|
||||
private void VerifyAffixedRibbonMark(LegalityAnalysis data, IRibbonIndex m)
|
||||
|
|
Loading…
Add table
Reference in a new issue