示例#1
0
        private void VerifyAwakenedValues(LegalityAnalysis data, IAwakened awakened)
        {
            var pkm = data.pkm;
            int sum = pkm.EVTotal;

            if (sum != 0)
            {
                data.AddLine(GetInvalid(LEffortShouldBeZero));
            }

            if (!awakened.AwakeningAllValid())
            {
                data.AddLine(GetInvalid(LAwakenedCap));
            }

            var enc = data.EncounterMatch;

            if (enc is EncounterSlot7GO && Enumerable.Range(0, 6).Select(awakened.GetAV).Any(z => z < 2))
            {
                data.AddLine(GetInvalid(string.Format(LAwakenedShouldBeValue, 2))); // go park transfers have 2 AVs for all stats.
            }
            else if (awakened.AwakeningSum() == 0 && !enc.IsWithinRange(pkm))
            {
                data.AddLine(Get(LAwakenedEXPIncreased, Severity.Fishy));
            }
        }
示例#2
0
 /// <summary>
 /// Gets if all values are within legal limits.
 /// </summary>
 /// <param name="pk">Data to check</param>
 public static bool AwakeningAllValid(this IAwakened pk)
 {
     if (pk.AV_HP > Legal.AwakeningMax)
     {
         return(false);
     }
     if (pk.AV_ATK > Legal.AwakeningMax)
     {
         return(false);
     }
     if (pk.AV_DEF > Legal.AwakeningMax)
     {
         return(false);
     }
     if (pk.AV_SPE > Legal.AwakeningMax)
     {
         return(false);
     }
     if (pk.AV_SPA > Legal.AwakeningMax)
     {
         return(false);
     }
     if (pk.AV_SPD > Legal.AwakeningMax)
     {
         return(false);
     }
     return(true);
 }
 public static bool IsAwakeningAboveOrEqual(this IAwakened current, IAwakened initial)
 {
     if (current.AV_HP < initial.AV_HP)
     {
         return(false);
     }
     if (current.AV_ATK < initial.AV_ATK)
     {
         return(false);
     }
     if (current.AV_DEF < initial.AV_DEF)
     {
         return(false);
     }
     if (current.AV_SPA < initial.AV_SPA)
     {
         return(false);
     }
     if (current.AV_SPD < initial.AV_SPD)
     {
         return(false);
     }
     if (current.AV_SPE < initial.AV_SPE)
     {
         return(false);
     }
     return(true);
 }
示例#4
0
 /// <summary>
 /// Sets the values based on the current IVs.
 /// </summary>
 /// <param name="a">Accessor for setting the values</param>
 /// <param name="pk">Retriever for IVs</param>
 public static void SetSuggestedAwakenedValues(this IAwakened a, StatPKM pk)
 {
     for (int i = 0; i < 6; i++)
     {
         if (pk.GetIV(i) > 2)
         {
             a.SetAV(i, 200);
         }
     }
 }
示例#5
0
文件: IAwakened.cs 项目: sutiam/PKHeX
        /// <summary>
        /// Sets all values to the specified value.
        /// </summary>
        /// <param name="pk">Data to set values for</param>
        /// <param name="min">Minimum value to set</param>
        /// <param name="max">Maximum value to set</param>
        public static void AwakeningSetRandom(this IAwakened pk, int min = 0, int max = Legal.AwakeningMax)
        {
            var rnd       = Util.Rand;
            int randClamp = max + 1;

            for (int index = 0; index < 6; index++)
            {
                pk.SetAV(index, rnd.Next(min, randClamp));
            }
        }
示例#6
0
 /// <summary>
 /// Sets one of the <see cref="IAwakened"/> values based on its index within the array.
 /// </summary>
 /// <param name="pk">Pokémon to check.</param>
 /// <param name="index">Index to get</param>
 public static int GetAV(this IAwakened pk, int index)
 {
     return(index switch
     {
         0 => pk.AV_HP,
         1 => pk.AV_ATK,
         2 => pk.AV_DEF,
         3 => pk.AV_SPE,
         4 => pk.AV_SPA,
         5 => pk.AV_SPD,
         _ => throw new ArgumentOutOfRangeException(nameof(index))
     });
        private void VerifyAwakenedValues(LegalityAnalysis data, IAwakened awakened)
        {
            var pkm = data.pkm;
            int sum = pkm.EVTotal;

            if (sum != 0)
            {
                data.AddLine(GetInvalid(LEffortShouldBeZero));
            }

            var EncounterMatch = data.EncounterMatch;

            if (!awakened.AwakeningAllValid())
            {
                data.AddLine(GetInvalid(LAwakenedCap));
            }
            if (EncounterMatch is EncounterSlot s && s.Area.Type == SlotType.GoPark && Enumerable.Range(0, 6).Select(awakened.GetAV).Any(z => z < 2))
            {
                data.AddLine(GetInvalid(string.Format(LAwakenedShouldBeValue, 2))); // go park transfers have 2 AVs for all stats.
            }
示例#8
0
        /// <summary>
        /// Sets one of the <see cref="IAwakened"/> values based on its index within the array.
        /// </summary>
        /// <param name="pk">Pokémon to check.</param>
        /// <param name="index">Index to get</param>
        public static int GetAV(this IAwakened pk, int index)
        {
            switch (index)
            {
            case 0: return(pk.AV_HP);

            case 1: return(pk.AV_ATK);

            case 2: return(pk.AV_DEF);

            case 3: return(pk.AV_SPE);

            case 4: return(pk.AV_SPA);

            case 5: return(pk.AV_SPD);

            default:
                throw new ArgumentOutOfRangeException(nameof(index));
            }
        }
示例#9
0
        /// <summary>
        /// Sets one of the <see cref="IAwakened"/> values based on its index within the array.
        /// </summary>
        /// <param name="pk">Pokémon to modify.</param>
        /// <param name="index">Index to set to</param>
        /// <param name="value">Value to set</param>
        public static void SetAV(this IAwakened pk, int index, int value)
        {
            switch (index)
            {
            case 0: pk.AV_HP = value; break;

            case 1: pk.AV_ATK = value; break;

            case 2: pk.AV_DEF = value; break;

            case 3: pk.AV_SPE = value; break;

            case 4: pk.AV_SPA = value; break;

            case 5: pk.AV_SPD = value; break;

            default:
                throw new ArgumentOutOfRangeException(nameof(index));
            }
        }
示例#10
0
    private void VerifyAwakenedValues(LegalityAnalysis data, IAwakened awakened)
    {
        var pk  = data.Entity;
        int sum = pk.EVTotal;

        if (sum != 0)
        {
            data.AddLine(GetInvalid(LEffortShouldBeZero));
        }

        if (!awakened.AwakeningAllValid())
        {
            data.AddLine(GetInvalid(LAwakenedCap));
        }

        var enc = data.EncounterMatch;

        // go park transfers have 2 AVs for all stats.
        if (enc is EncounterSlot7GO)
        {
            Span <byte> avs = stackalloc byte[6];
            awakened.GetAVs(avs);
            foreach (var av in avs)
            {
                if (av >= 2)
                {
                    continue;
                }

                data.AddLine(GetInvalid(string.Format(LAwakenedShouldBeValue, 2)));
                break;
            }
            return;
        }

        if (awakened.AwakeningSum() == 0 && !enc.IsWithinEncounterRange(pk))
        {
            data.AddLine(Get(LAwakenedEXPIncreased, Severity.Fishy));
        }
    }
 public static bool IsAwakeningBelow(this IAwakened current, IAwakened initial) => !current.IsAwakeningAboveOrEqual(initial);
示例#12
0
 public static int[] AVs(this IAwakened a) => new[] { a.AV_HP, a.AV_ATK, a.AV_DEF, a.AV_SPA, a.AV_SPD, a.AV_SPE };
示例#13
0
 /// <summary>
 /// Sets all values to the specified value.
 /// </summary>
 /// <param name="pk">Data to clear from</param>
 /// <param name="value">Value to set all to</param>
 public static void AwakeningSetAllTo(this IAwakened pk, int value) => pk.AV_HP = pk.AV_ATK = pk.AV_DEF = pk.AV_SPE = pk.AV_SPA = pk.AV_SPD = value;
示例#14
0
 /// <summary>
 /// Sets all values to the maximum value.
 /// </summary>
 /// <param name="pk">Data to clear from</param>
 public static void AwakeningMax(this IAwakened pk) => pk.AwakeningSetAllTo(Legal.AwakeningMax);
示例#15
0
 /// <summary>
 /// Clears all values.
 /// </summary>
 /// <param name="pk">Data to clear from</param>
 public static void AwakeningClear(this IAwakened pk) => pk.AV_HP = pk.AV_ATK = pk.AV_DEF = pk.AV_SPE = pk.AV_SPA = pk.AV_SPD = 0;
示例#16
0
 /// <summary>
 /// Sums all values.
 /// </summary>
 /// <param name="pk">Data to sum with</param>
 public static int AwakeningSum(this IAwakened pk) => pk.AV_HP + pk.AV_ATK + pk.AV_DEF + pk.AV_SPE + pk.AV_SPA + pk.AV_SPD;
示例#17
0
 private void LoadAVs(IAwakened a) => Stats.LoadAVs(a);
示例#18
0
文件: LoadSave.cs 项目: sutiam/PKHeX
 private void LoadAVs(IAwakened pk) => Stats.LoadAVs(pk);
示例#19
0
文件: IAwakened.cs 项目: sutiam/PKHeX
 /// <summary>
 /// Sets one of the <see cref="IAwakened"/> values based on its index within the array.
 /// </summary>
 /// <param name="pk">Pokémon to modify.</param>
 /// <param name="index">Index to set to</param>
 /// <param name="value">Value to set</param>
 public static int SetAV(this IAwakened pk, int index, int value) => index switch
 {
     0 => pk.AV_HP  = value,
示例#20
0
文件: IAwakened.cs 项目: sutiam/PKHeX
 /// <summary>
 /// Clears all values.
 /// </summary>
 /// <param name="pk">Data to clear from</param>
 public static void AwakeningClear(this IAwakened pk) => pk.AwakeningSetAllTo(0);