2022-08-19 22:37:27 -07:00
using static PKHeX . Core . LegalityCheckStrings ;
2018-06-23 22:00:01 -07:00
2022-06-18 11:04:24 -07:00
namespace PKHeX.Core ;
2018-07-26 19:34:27 -07:00
2022-06-18 11:04:24 -07:00
/// <summary>
/// Verifies the <see cref="PKM.HeldItem"/>.
/// </summary>
public sealed class ItemVerifier : Verifier
{
protected override CheckIdentifier Identifier = > CheckIdentifier . HeldItem ;
2018-06-23 22:00:01 -07:00
2022-06-18 11:04:24 -07:00
public override void Verify ( LegalityAnalysis data )
{
var pk = data . Entity ;
2022-08-19 22:37:27 -07:00
var item = pk . HeldItem ;
if ( pk . IsEgg & & item ! = 0 )
2022-06-18 11:04:24 -07:00
data . AddLine ( GetInvalid ( LItemEgg ) ) ;
2022-08-19 22:37:27 -07:00
if ( ! ItemRestrictions . IsHeldItemAllowed ( item , context : pk . Context ) )
{
data . AddLine ( GetInvalid ( LItemUnreleased ) ) ;
}
else if ( pk . Format = = 3 & & item = = 175 ) // Enigma Berry
{
// A Pokémon holding this Berry cannot be traded to Pokémon Colosseum or Pokémon XD: Gale of Darkness, nor can it be stored in Pokémon Box Ruby & Sapphire.
if ( pk is CK3 or XK3 )
data . AddLine ( GetInvalid ( LItemUnreleased ) ) ;
else
VerifyEReaderBerry ( data ) ;
}
2022-06-18 11:04:24 -07:00
}
2018-06-23 22:00:01 -07:00
2022-06-18 11:04:24 -07:00
private void VerifyEReaderBerry ( LegalityAnalysis data )
{
var status = EReaderBerrySettings . GetStatus ( ) ;
var chk = GetEReaderCheckResult ( status ) ;
if ( chk ! = null )
data . AddLine ( chk ) ;
2018-06-23 22:00:01 -07:00
}
2022-06-18 11:04:24 -07:00
private CheckResult ? GetEReaderCheckResult ( EReaderBerryMatch status ) = > status switch
{
EReaderBerryMatch . NoMatch = > GetInvalid ( LEReaderInvalid ) ,
EReaderBerryMatch . NoData = > GetInvalid ( LItemUnreleased ) ,
EReaderBerryMatch . InvalidUSA = > GetInvalid ( LEReaderAmerica ) ,
EReaderBerryMatch . InvalidJPN = > GetInvalid ( LEReaderJapan ) ,
_ = > null ,
} ;
2018-06-23 22:00:01 -07:00
}